macOS-MCP
MCP server for macOS desktop control through the Accessibility API: clicks, typing, windows, apps, shell commands and AppleScript
- 240 ★ on the repository
- Last commit
- MIT
Broad access
Why this level
- The agent clicks, types and runs shell and AppleScript commands with your account's rights
- Accessibility and Screen Recording permissions give the server control over the screen and apps
Install
- Works in
Manual install
claude mcp add macos-mcp -- uvx macos-mcp serveGrant the Accessibility and Screen Recording permissions first.
Access and checks
How we reviewBroad accessThe tool can change data, run commands or handle secrets.
- The agent clicks, types and runs shell and AppleScript commands with your account's rights
- Accessibility and Screen Recording permissions give the server control over the screen and apps
This is third-party code. Review the repository files before installing.
What it does
macOS-MCP connects an agent to the Mac operating system: opens apps, manages windows, clicks, types, scrolls and presses keyboard shortcuts. It works through the Accessibility API and needs no computer vision or specially fine-tuned model, any LLM fits, and vision only adds to the work. Tools: `Click`, `Type`, `Scroll`, `Move`, `Shortcut`, `App` for launching, switching and sizing windows, `Desktop` for creating new Mission Control spaces, `Shell` for commands and AppleScript (`mode='osascript'`), `Scrape` for turning a page into Markdown and `Wait`. The server detects the state of Launchpad, Control Center and Spotlight and also reads the menu bar, Dock and desktop. It starts through `uvx macos-mcp serve` over stdio, SSE or Streamable HTTP and `macos-mcp install` installs it as a launchd background service.
Who it is for. Developers and testers on a Mac who need an agent to press buttons in ordinary apps that have no API or command line.
Good fit when
- You need to repeat an action in an app with no API: open a window, press a menu item and type text
- The agent switches between apps, arranges windows and checks what is on the screen
- A browser page has to be obtained as Markdown to parse its text
- AppleScript automation is launched from a conversation instead of a manual script editor
Not a fit when
- The app has an API or command line: calling it directly is more reliable than screen clicks
- You need to interact with a system authentication dialog: the server cannot control it
- A computer with important data is unattended: the server runs shell commands and clicks on your behalf
Example request
Open the Notes app, create a new note with a shopping list and take a window screenshot to check the resultMCP
- Transport
- stdio, http, sse
- Authentication
- key is optional
Environment variables
ANONYMIZED_TELEMETRY- Set to false to disable anonymous telemetry
MACOS_MCP_AUTH_KEYsecret- Bearer token for HTTP requests
Limitations
You need macOS 12 or newer, Python 3.11 and `uv`, plus Accessibility and Screen Recording permissions granted by hand in settings. Some apps support the Accessibility API poorly and complex interfaces with many elements are traversed slower. Some input fields may not accept keystrokes and system authentication dialogs are unavailable. The server collects anonymous usage telemetry without arguments or results, turned off with `ANONYMIZED_TELEMETRY=false`. Network mode has an `--auth-key` flag, an IP allowlist and TLS.
How to disable. Remove the macos-mcp block from the client config, run `macos-mcp uninstall` if you installed the launchd service and revoke Accessibility and Screen Recording permissions in macOS settings.
FAQ
How do I connect macOS-MCP to Claude Code?
Grant Accessibility and Screen Recording permissions and run `claude mcp add macos-mcp -- uvx macos-mcp serve`. Python 3.11 and `uv` are required.
Which macOS versions are supported?
macOS 12 Monterey, 13 Ventura, 14 Sonoma, 15 Sequoia and 26 Tahoe.
How do I run the server as a service?
With `macos-mcp install`: it creates the Launch Agent `~/Library/LaunchAgents/com.macos-mcp.server.plist`. Transport and address are set by flags, for example `--transport sse --host 127.0.0.1 --port 8000`. It is removed with `macos-mcp uninstall`.
How do I protect network mode?
With the `--auth-key` flag for a Bearer header, the `MACOS_MCP_IP_ALLOWLIST` list, TLS through `MACOS_MCP_SSL_CERTFILE` and `MACOS_MCP_SSL_KEYFILE`, and OAuth 2.0 with PKCE.
Do I need a vision model?
No, the server reads the Accessibility tree and works with any LLM. Screenshots add vision when wanted.
Discussion
No questions or reviews yet.
Related
MCP serversAn MCP server for macOS: the agent moves the mouse, types, manages windows and captures the screen when an app has no API
A Swift MCP server that lets an agent drive any macOS app: click, type and read the interface tree
MCP server for AppleScript: the agent runs scripts and controls Mac apps, from Notes and Calendar to files
An MCP server that lets an agent see the screen and control macOS, Windows and Linux: screenshots, clicks, OCR and screen memory
A macOS CLI and MCP server: screenshots, accessibility-based UI inspection and app control via clicks and typing
Open Computer Use
open-computer-use
An open MCP server for desktop control: the agent reads app state and clicks, types and scrolls on macOS, Linux and Windows
README in short
The text presents the server as a bridge between agents and macOS: it lists supported versions, features and installation. Then come permissions, ways to connect to Claude Desktop and other clients, a tool table, limitations, a security section with token, IP, TLS and OAuth, environment variables and telemetry.