macctl
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MACCTL_TIERS | No | Comma-separated tier list (observe,interact,filesystem,manage,shell) that, if set, replaces the profile's tier set entirely. | |
| MACCTL_PROFILE | No | readonly | standard | full. See profiles above. | standard |
| MACCTL_AUDIT_LOG | No | Path to the audit log file. | ~/Library/Logs/macctl/audit.jsonl |
| MACCTL_HELPER_PATH | No | Explicit path to the native helper binary — mainly for local development. | |
| MACCTL_DENIED_PATHS | No | Colon-separated list of additional directories to deny, layered on top of the built-in denylist. Denied always wins over allowed. | |
| MACCTL_ALLOWED_PATHS | No | Colon-separated list of directories file/exec-path tools are confined to. Defaults to home dir, /tmp, /private/tmp, /Volumes. | |
| MACCTL_AUDIT_DISABLED | No | Disable audit logging entirely. | false |
| MACCTL_MAX_IMAGE_WIDTH | No | Screenshots wider than this (in pixels) are downscaled by the helper before being returned. | 1600 |
| MACCTL_COMMAND_TIMEOUT_MS | No | Default timeout for shell_run, overridable per call. | 60000 |
| MACCTL_CONFIRM_DESTRUCTIVE | No | If true, destructive tools require an explicit confirm: true argument. Set to 0/false/no/off to disable. | true |
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_doctorA | Report macctl's health: TCC permission status (Accessibility, Screen Recording, Full Disk Access), native helper reachability, active permission profile/tiers, audit log location, and version info. Always available regardless of profile. Use this first when other tools fail with PERMISSION_MISSING or HELPER_UNAVAILABLE. |
| list_monitorsA | List connected displays with their frame, visible frame, backing scale factor, and which one is main. No permission required. |
| captureA | Take a screenshot of a full display (main display by default). Requires Screen Recording permission; falls back to the |
| capture_regionA | Take a screenshot of a rectangular region in global screen points (top-left origin). Requires Screen Recording permission; falls back to |
| capture_windowA | Take a screenshot of a single window, identified by the windowHandle from list_capturable_windows. Requires Screen Recording permission; falls back to |
| list_capturable_windowsA | List on-screen windows available for capture_window, via ScreenCaptureKit: windowId (pass directly as capture_window's windowHandle), title, frame, owning app name/bundle id/pid. Requires Screen Recording permission. |
| window_listA | List all on-screen windows: title, owning app, pid, bounds, layer, minimized state, and an opaque windowHandle to pass to window_focus/window_set_state/window_move/window_close. Requires Accessibility permission. |
| window_get_activeA | Get the frontmost application and its focused window, with a windowHandle for follow-up calls. Requires Accessibility permission. |
| window_get_desktop_infoA | Get screen layout (frames, visible frames, scale factors), system light/dark appearance, and current cursor position. No permission required. |
| window_focusA | Activate a window's owning app and raise the window. Requires Accessibility permission. |
| window_set_stateA | Change a window's state: minimize, restore, maximize, fullscreen, hide (owning app), or show (owning app). Requires Accessibility permission. |
| window_moveA | Move and/or resize a window. Position/size are set independently — pass only x+y, only width+height, or both. Returns the verified final frame (apps may clamp requested geometry). Requires Accessibility permission. |
| window_closeA | Close a window by pressing its AXCloseButton. Destructive — unsaved changes in the window may be lost. Requires Accessibility permission. |
| input_move_mouseA | Move the mouse cursor to a global screen point (top-left origin, points not pixels). Requires Accessibility permission. |
| input_clickA | Click the mouse at a global screen point. Supports left/right/middle button and single/double/triple click count. Requires Accessibility permission. |
| input_dragA | Press the mouse button at one point, drag through interpolated intermediate points, and release at another. Requires Accessibility permission. |
| input_scrollA | Post a scroll-wheel event, optionally moving the cursor to a point first. Positive deltaY scrolls up/content-down per system convention. Requires Accessibility permission. |
| input_typeA | Type Unicode text at the current keyboard focus, layout-independent. Short text is synthesized character-by-character; text over ~200 characters is typed via a clipboard paste (the prior clipboard contents are restored afterward). Requires Accessibility permission. |
| input_press_keysA | Press a keyboard chord, e.g. "cmd+shift+4", "cmd+c", "return", "left". Modifiers: cmd, shift, alt/option, ctrl, fn. Requires Accessibility permission. |
| input_key_holdA | Hold a single key down (action: down) or release it (action: up), for gesture-like sequences (e.g. holding shift while clicking multiple items). Held keys auto-release after 30s as a safety net, and on helper shutdown. Requires Accessibility permission. |
| ax_snapshotA | Walk the accessibility (AXUIElement) tree of an app or a specific window, returning role/title/value/description/identifier/enabled/frame per node plus an elementHandle usable with ax_invoke/ax_set_value. Depth- and node-count-capped. Requires Accessibility permission. |
| ax_findA | Bounded breadth-first search over an app's (or one window's) accessibility tree for elements matching role, a case-insensitive title/value substring, and/or an AXIdentifier. Returns elementHandles for ax_invoke/ax_set_value. Requires Accessibility permission. |
| ax_invokeA | Perform an accessibility action on an element (default "AXPress", i.e. click/activate). Use the action names reported when an invalid action is requested to discover what's available. Requires Accessibility permission. |
| ax_set_valueA | Set an element's AXValue directly if settable; otherwise falls back to focusing the element, selecting all (Cmd+A), and typing the replacement text. Reports whether the final read-back value matches what was requested. Requires Accessibility permission. |
| system_infoA | Report CPU, memory, disk, network, battery, and graphics info (via |
| list_servicesA | List launchd services: running processes ( |
| list_installed_appsA | List installed applications: name, bundle id, version, path. Fast path: |
| process_listA | List running processes (pid, ppid, cpu%, mem%, rss KB, elapsed time, command) via |
| file_known_foldersA | List well-known macOS folders (home, Desktop, Documents, Downloads, Pictures, Music, Movies, Applications, Library, tmp, and iCloud Drive if present) with their resolved path, whether they exist, and whether they fall within the currently allowed paths (MACCTL_ALLOWED_PATHS). No permission required. |
| file_listA | List a directory's entries: name, type, size, modification time. Optionally recursive with a depth cap. Path is checked against MACCTL_ALLOWED_PATHS/MACCTL_DENIED_PATHS. |
| file_readA | Read a file's contents as utf8 text or base64 (for binary data), capped at maxBytes. Path is checked against MACCTL_ALLOWED_PATHS/MACCTL_DENIED_PATHS. |
| file_searchA | Recursively search a directory for files/directories matching a glob name pattern ( |
| file_writeA | Write, append to, or create a text/base64-encoded file. Destructive — requires confirm: true when MACCTL_CONFIRM_DESTRUCTIVE is enabled (the default), for every mode (this framework gates confirmation per-tool rather than per-call, so 'create'/'append' are covered by the same gate as an overwrite). Path is checked against MACCTL_ALLOWED_PATHS/MACCTL_DENIED_PATHS. Parent directories are created as needed. |
| file_manageA | Copy, move, delete a file/directory, or create a directory (mkdir -p semantics). Destructive — requires confirm: true when MACCTL_CONFIRM_DESTRUCTIVE is enabled (the default), for every operation including copy/mkdir (this framework gates confirmation per-tool rather than per-operation, so the safer superset is applied uniformly rather than only for delete). All paths are checked against MACCTL_ALLOWED_PATHS/MACCTL_DENIED_PATHS. |
| clipboard_readA | Read the current contents of the system clipboard: text, file references, and whether an image is present. Uses the native helper (NSPasteboard); falls back to |
| clipboard_writeA | Replace the system clipboard contents with text, or with file references (native helper only — no CLI fallback exists for file references). Uses the native helper (NSPasteboard); falls back to |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sitharaj88/macctl'
If you have feedback or need assistance with the MCP directory API, please join our Discord server