macos-control-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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 |
|---|---|
| mouse_moveA | Move the mouse cursor to specified screen coordinates (x, y). Coordinates use top-left origin. |
| mouse_clickC | Click the mouse at specified coordinates. Supports left/right/middle button and single/double/triple click. Defaults: button=left, clicks=1. |
| mouse_dragA | Drag the mouse from one position to another. Useful for drag-and-drop, selecting text, resizing windows. |
| mouse_scrollB | Scroll at specified coordinates. Positive deltaY scrolls down, negative scrolls up. Positive deltaX scrolls right. |
| mouse_positionA | Get the current mouse cursor position on screen. Returns both CoreGraphics (top-left origin) and AppKit (bottom-left origin) coordinates. |
| keyboard_typeA | Type a string of text character by character, simulating real keyboard input. Supports Unicode (Chinese, Japanese, emoji, etc.). |
| keyboard_pressA | Press a key with optional modifier keys. Available keys: letters (a-z), numbers (0-9), function keys (f1-f12), arrow keys (up/down/left/right), return/enter, tab, space, delete/backspace, escape/esc, home, end, pageup, pagedown, and symbols. Modifiers: command/cmd, shift, option/alt, control/ctrl, fn. |
| keyboard_hotkeyB | Press a keyboard shortcut / hotkey combination. Use "+" to separate keys. Examples: "cmd+c" (copy), "cmd+v" (paste), "cmd+shift+s" (save as), "cmd+tab" (switch app), "ctrl+cmd+f" (fullscreen). |
| screenshotA | Take a screenshot of the entire screen or a specific region. Returns the image optimized for AI analysis. Options include coordinate grid overlay, compression, and region cropping. ⚠️ PREFER ai_screen_elements over this tool when you need to find clickable elements — it auto-detects ALL interactive elements with precise coordinates. Use screenshot only when you need a raw visual overview or to verify results. If you must estimate positions from the screenshot, aim for the vertical center or slightly below center of targets (visual perception biases Y upward). |
| screenshot_annotatedA | Take a screenshot and annotate specific points with labels. Useful for marking UI elements, buttons, or areas of interest for AI reference. |
| screen_infoA | Get information about all connected displays/screens — resolution, position, scale factor, visible area. |
| terminal_executeB | Execute a shell command in the macOS terminal and return the output. Supports any shell command including pipes, redirects, and chaining. Default shell is zsh. Timeout defaults to 30 seconds. |
| terminal_execute_backgroundA | Start a long-running process in the background. Returns the PID immediately. Use terminal_execute with "kill " to stop it. |
| terminal_applescriptA | Execute AppleScript code. Useful for macOS-specific automation like controlling apps via their AppleScript dictionaries, showing dialogs, etc. |
| window_listA | List all visible windows on screen with their app name, window title, position, size, and process ID. Useful for understanding what is currently open and finding window IDs for screenshots. |
| window_focusA | Bring an application to the foreground and focus it. Matches app name partially (case-insensitive). |
| window_resizeB | Move and resize an application window to specific coordinates and dimensions. |
| window_minimizeB | Minimize the front window of an application. |
| window_closeB | Close the front window of an application. |
| apps_listA | List all running applications with their name, PID, bundle ID, and active/hidden status. |
| accessibility_checkA | Check if Accessibility permissions are granted. Required for UI element detection and programmatic interaction. If not granted, provides instructions for enabling it. |
| accessibility_treeA | Get the accessibility UI element tree of an application. Returns a hierarchical tree of all UI elements (buttons, text fields, labels, etc.) with their role, title, value, position, size, and state. This is the primary way to understand what's on screen without relying on screenshots. Use maxDepth to control detail level. |
| accessibility_element_atA | Get the UI element at a specific screen coordinate. Returns the element's role, title, value, position, and size. Useful for identifying what is under the mouse cursor or at a specific screen location. |
| accessibility_clickA | Click a UI element by its accessibility role and optional title. This performs an accessibility "press" action, which is more reliable than coordinate-based clicking for buttons, menu items, etc. |
| ai_screen_contextA | [AI-Optimized] Capture a comprehensive snapshot of the current screen state for AI analysis. Returns: 1) Screenshot with coordinate grid overlay, 2) Accessibility tree of the frontmost app (interactive elements with positions), 3) Current mouse position, 4) Frontmost app info. Good for understanding screen context. For CLICKING elements, prefer ai_screen_elements which gives precise coordinates. |
| ai_find_elementA | [AI-Optimized] Find a UI element by description in natural language. Searches the accessibility tree of the frontmost app and returns matching elements with their exact coordinates. Use this to locate buttons, text fields, menu items, etc. |
| ai_ocr_regionA | [AI-Optimized] Extract text from a screen region using macOS Vision framework OCR. Returns recognized text with positions. Useful for reading text that isn't accessible via the accessibility API. |
| ai_screen_elementsA | 🎯 PREFERRED — Use this FIRST when you need to click or interact with UI elements. Auto-detects ALL interactive elements (buttons, fields, links, etc.) with precise center coordinates. Uses accessibility tree for native apps, AND automatically scans web page elements via Chrome DevTools Protocol when a browser is frontmost. Returns: 1) Annotated screenshot with numbered markers on every element, 2) Element list with [number] role "title" center=(x,y). Web elements are prefixed with "web:" (e.g. web:input, web:button, web:link). These coordinates are MORE ACCURATE than manually reading positions from a plain screenshot. Always prefer this over screenshot+manual coordinate guessing. |
| clipboard_readA | Read the current text content from the macOS clipboard/pasteboard. |
| clipboard_writeA | Write text content to the macOS clipboard/pasteboard. |
| ai_web_elementsA | [AI-Optimized] Scan ALL interactive elements on a web page via Chrome DevTools Protocol. Auto-launches a CDP-enabled Chrome if needed. Provide a URL to navigate to, or omit to scan the current page. Detects every button, link, input, select, textarea, and clickable element with screen coordinates for mouse_click. |
| animation_clickA | Show a visual click ripple animation at the specified coordinates. Does NOT actually click — only shows the animation effect. Use for visual feedback. |
| animation_trailA | Show a visual mouse movement trail animation along a path of coordinates. Does NOT actually move the mouse. |
| animation_typeA | Show a visual typing indicator animation with text at specified coordinates. Does NOT actually type — only shows the animation. |
| animation_highlightA | Highlight a rectangular region on screen with a pulsing border and optional label. Use to draw attention to UI elements. |
| animation_scrollA | Show a visual scroll direction indicator animation. Does NOT actually scroll. |
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 36 tools
Mouse, keyboard, window, and clipboard tools are clearly distinct, but the screen/UI inspection space is crowded with overlapping tools like screenshot, screenshot_annotated, accessibility_tree, ai_screen_context, ai_screen_elements, ai_web_elements, and ai_ocr_region. Descriptions try to differentiate them, but an agent could easily pick the wrong one.
All names use snake_case and domain prefixes, giving a readable structure. However, the verb/noun ordering is inconsistent: some are resource_action (mouse_move, window_resize), some are action_resource (terminal_execute, clipboard_read), and some are plain nouns (screenshot, screen_info, apps_list).
36 tools is well past the 25+ threshold for being considered heavy, and several are non-essential or overlapping, especially the five animation tools and the many AI/accessibility screen-inspection tools. The core capability could be covered with a tighter set.
The surface covers most macOS control needs: mouse input, keyboard input, screenshots, terminal execution, window management, app listing, clipboard access, and accessibility-tree inspection. Minor gaps like explicit app launch/quit or raw key-up/key-down events are workaroundable via terminal_execute or existing tools.