Model Context Protocol server for FULL macOS control — drive a Mac like a human: shell, AppleScript, files, processes, and human-like GUI (move, click, double/right-click, drag, scroll, type, keys). Full control by default, with an opt-in safe mode.
Strong tool definitions with consistent naming (verb_noun pattern), comprehensive descriptions (avg 150 chars), and complete input schemas across all 26 tools. All parameters have types and descriptions. Tool annotations present (readOnlyHint, destructiveHint). Key gaps: output schemas not documented in code; error handling guidance minimal; no pagination support for list tools; parameter constraints (ranges, enums) could be more explicit in descriptions.
Bring an application to the front (launching it if needed) so subsequent clicks/keystrokes go to it. Give the app's name, e.g. 'Safari', 'Notes'.
Click at screen coordinates. Requires admin mode AND MACCTL_ALLOW_INPUT=true, and the `cliclick` tool (brew install cliclick).
Move a file or folder to the Trash (recoverable). Requires admin mode AND MACCTL_ALLOW_DELETE=true. Honours the path allowlist and refuses protected paths.
Press at (x1,y1), move to (x2,y2), and release — a human-style drag (select text, move a window, drag a file). Requires admin mode AND MACCTL_ALLOW_INPUT=true.
Return the current text contents of the macOS clipboard.
Return the name of the frontmost (active) application.
Output schemas not documented in code. Tool descriptions state what is returned (e.g., 'Return the name of the frontmost app') but formal output schema definitions are absent, forcing LLMs to infer structure.
List tools (list_directory, list_processes, list_apps, list_windows) lack pagination parameters (limit, offset, cursor). Large results could exhaust context window without pagination support.
Error handling in toErrorResult() returns generic error messages without recovery guidance. LLMs receive 'Policy denied: ...' or 'MacError: ...' but no actionable next steps (e.g., 'Enable MACCTL_ALLOW_EXEC=true to use this tool').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Return the overall desktop size AND every display's global point bounds (origin x/y, width, height, scale, main) — use it to reason about click coordinates across monitors.
Press a key (e.g. return, tab, escape, arrows, or a character) with optional modifiers (command/option/control/shift). Requires admin mode AND MACCTL_ALLOW_INPUT=true.
Send a signal (default SIGTERM) to a process by pid. Requires admin mode AND MACCTL_ALLOW_EXEC=true.
List the names of currently running (non-background) applications.
List the entries (name, type, size) of a directory. Honours the path allowlist.
List running processes (pid, cpu%, mem%, command), busiest first.
List the windows of the frontmost app with each window's name, position and size — so you can click or drag reliably. Needs Accessibility permission for the host process.
Move the cursor to screen coordinates. Requires admin mode AND MACCTL_ALLOW_INPUT=true (cliclick).
Post a macOS notification with a title and message.
Open a file/folder path or URL with its default handler, or launch an app by name (set app=true).
Ask an application to quit (graceful). Unsaved changes may prompt inside the app. Give the app's name.
Read a text file's contents (capped at MACCTL_MAX_FILE_BYTES). Honours the path allowlist.
Run an AppleScript (or JavaScript for Automation) snippet via osascript. Powerful — can drive any scriptable app. Requires admin mode AND MACCTL_ALLOW_EXEC=true.
Run a program with arguments (no shell — pass argv, not a command line). Requires admin mode AND MACCTL_ALLOW_EXEC=true; the program must be in MACCTL_COMMAND_ALLOWLIST when that is set. For a shell pipeline, run command="zsh", args=["-c","…"].
Capture a display as a PNG and return it. The image is downscaled to POINTS, so it is 1:1 with click coordinates. Omit `display` to capture the display holding the frontmost window (handy with a second monitor); pass 0 for the main display. Needs Screen Recording permission.
Scroll at screen coordinates (up/down or left/right). Requires admin mode AND MACCTL_ALLOW_INPUT=true.
Replace the macOS clipboard contents with the given text.
Report macOS version, hardware, memory, load, uptime and the current user.
Type literal text into the frontmost app (keystrokes). Requires admin mode AND MACCTL_ALLOW_INPUT=true, plus Accessibility permission for the host process.
Create or overwrite a text file. Honours the path allowlist, refuses protected paths, and asks for confirmation before overwriting an existing file.
Parameter constraints not fully explicit in descriptions. E.g., 'limit' in list_processes has no stated range (default 30, but min/max unclear); 'signal' enum in kill_process is defined in schema but not mentioned in description text.
Destructive tools (delete_path, kill_process, run_command, run_applescript) lack confirmation/dry-run support. No pattern to preview or confirm before execution, increasing risk of accidental data loss.