mcp-mac-control
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MACCTL_MODE | No | Cap which tools are registered: 'read-only', 'read-write', or 'admin'. Default: 'admin'. | admin |
| MACCTL_CONFIRM | No | Set to 'true' to require human approval for destructive operations. Default: 'false'. | false |
| MACCTL_DRY_RUN | No | Set to 'true' to validate and log writes without executing. Default: 'false'. | false |
| MACCTL_AUDIT_LOG | No | Set to 'false' to disable JSON audit logging to stderr. Default: 'true'. | true |
| MACCTL_SAFE_MODE | No | Set to 'true' to enable read-only safe mode (safe-by-default). Default: 'false'. | false |
| MACCTL_ALLOW_EXEC | No | Enable shell / AppleScript / kill commands. Set to 'false' to disable. Default: 'true'. | true |
| MACCTL_ALLOW_INPUT | No | Enable GUI input (mouse/keyboard). Set to 'false' to disable. Default: 'true'. | true |
| MACCTL_ALLOW_DELETE | No | Enable delete to Trash. Set to 'false' to disable. Default: 'true'. | true |
| MACCTL_PATH_ALLOWLIST | No | Comma-separated list of root paths to which file operations are confined. Default: empty (anywhere). | |
| MACCTL_PROTECTED_PATHS | No | Comma-separated list of roots that are readable but never modified or deleted. Default: empty. | |
| MACCTL_COMMAND_ALLOWLIST | No | Comma-separated list of programs allowed for run_command. Default: empty (any command). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| system_infoA | Report macOS version, hardware, memory, load, uptime and the current user. |
| list_directoryA | List the entries (name, type, size) of a directory. Honours the path allowlist. |
| read_fileA | Read a text file's contents (capped at MACCTL_MAX_FILE_BYTES). Honours the path allowlist. |
| list_processesA | List running processes (pid, cpu%, mem%, command), busiest first. |
| get_clipboardA | Return the current text contents of the macOS clipboard. |
| list_appsA | List the names of currently running (non-background) applications. |
| get_frontmost_appA | Return the name of the frontmost (active) application. |
| screenshotA | Capture a display as a PNG and return it. The image is downscaled to POINTS, so it is 1:1 with click coordinates. Omit |
| get_screen_sizeA | 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. |
| list_windowsA | 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. |
| write_fileA | Create or overwrite a text file. Honours the path allowlist, refuses protected paths, and asks for confirmation before overwriting an existing file. |
| set_clipboardA | Replace the macOS clipboard contents with the given text. |
| notifyA | Post a macOS notification with a title and message. |
| openA | Open a file/folder path or URL with its default handler, or launch an app by name (set app=true). |
| activate_appA | 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'. |
| quit_appA | Ask an application to quit (graceful). Unsaved changes may prompt inside the app. Give the app's name. |
| run_commandA | 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","…"]. |
| run_applescriptA | Run an AppleScript (or JavaScript for Automation) snippet via osascript. Powerful — can drive any scriptable app. Requires admin mode AND MACCTL_ALLOW_EXEC=true. |
| delete_pathA | 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. |
| kill_processA | Send a signal (default SIGTERM) to a process by pid. Requires admin mode AND MACCTL_ALLOW_EXEC=true. |
| type_textA | Type literal text into the frontmost app (keystrokes). Requires admin mode AND MACCTL_ALLOW_INPUT=true, plus Accessibility permission for the host process. |
| key_pressA | 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. |
| clickA | Click at screen coordinates. Requires admin mode AND MACCTL_ALLOW_INPUT=true, and the |
| move_mouseA | Move the cursor to screen coordinates. Requires admin mode AND MACCTL_ALLOW_INPUT=true (cliclick). |
| dragA | 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, and the |
| scrollA | Scroll the mouse wheel in a direction by a number of lines (over whatever is under the cursor / frontmost). Requires admin mode AND MACCTL_ALLOW_INPUT=true. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 26 tools
Most tools target clearly distinct actions and resources, so an agent can generally pick the right one. The main ambiguity is between open (with app=true) and activate_app for launching apps, and run_command vs run_applescript overlap in arbitrary execution.
The set mostly follows predictable verb_prefix patterns: list_*, get_*, read/write, run_*, and *_app. A few bare verbs like screenshot, notify, open, click, and scroll, plus system_info as a noun, break strict consistency but the groups remain readable.
26 tools is on the heavy end, but the server's domain—macOS UI automation, file access, process control, clipboard, apps, and system info—is genuinely broad. Each tool has an identifiable purpose and none feel redundant.
The surface covers the core macOS automation lifecycle: inspect, interact, input, file read/write/delete, process list/kill, app management, clipboard, and notifications. Minor gaps exist such as no directory creation, no file copy/move, and no arbitrary window picker, but agents can work around these.