Drew's Mac Control MCP Server
An MCP server that lets an LLM inspect and drive macOS apps and the iOS Simulator through the Accessibility API — click, type, read the element hierarchy, capture screenshots, pick menu items, drive the Simulator.
This package is a thin wrapper. The server itself is a signed, notarized macOS app; the wheel
carries that bundle and installs it to ~/Applications on first run, then hands off to the
MacControlRelay binary inside it. Later releases replace the installed app automatically, so
uvx upgrades keep the app in step with the wrapper.
Install
uvx drews-mac-control-mcp --setup
That installs the app, opens it so macOS prompts for permissions, and prints the client registration command.
Two approvals are needed, and both are easy to miss:
- A new background item. Registering the host creates a login item, and macOS asks about it. Dismissing that prompt leaves the agent unapproved, so the host never starts and every tool call fails with nothing to explain why. If you dismissed it, enable MacControlMCP under System Settings ▸ General ▸ Login Items & Extensions.
- Accessibility — and Screen Recording if you want screenshots — in System Settings ▸ Privacy & Security.
Then register this wrapper as the MCP server command:
claude mcp add --scope user maccontrol -- "$(command -v uvx)" drews-mac-control-mcp
codex mcp add maccontrol -- "$(command -v uvx)" drews-mac-control-mcp
That is what keeps it current. On every launch the wrapper checks the app installed in
~/Applications against the version this wheel carries and replaces it if they differ. uvx
supplies the other half: it caches PyPI's index for the ten minutes PyPI asks for and re-resolves
once that lapses, so a new release arrives on its own — within minutes, not necessarily on the very
next call. uvx --refresh drews-mac-control-mcp forces it immediately.
Pointing a client straight at ~/Applications/MacControlMCP.app/Contents/Helpers/MacControlRelay
also works, but it pins you to whatever is installed today and silently forfeits every future
update.
Uninstall
uvx drews-mac-control-mcp --uninstall
Removes the host agent's registration first, then the app. That order is the point: deleting the bundle on its own does not clear its registration, which leaves a login item pointing at an app that is gone and only findable by hand in System Settings. If the registration cannot be removed, nothing is deleted — pressing on is exactly what strands it.
Requirements
macOS 14 or later. The wheel is tagged macosx_14_0_universal2, so pip and uv decline to install
it anywhere else.
Source
https://github.com/drewster99/drews-mac-control-mcp — including how to build and install from a checkout instead, which needs Xcode and your own Developer ID.
License
Metadata
Release files for drews-mac-control-mcp 0.2.56
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| drews_mac_control_mcp-0.2.56-py3-none-macosx_14_0_universal2.whl | Python 3 | none | macOS 14.0+ universal2 (ARM64, x86-64) | Details |
Release files / drews_mac_control_mcp-0.2.56-py3-none-macosx_14_0_universal2.whl
| Download URL | drews_mac_control_mcp-0.2.56-py3-none-macosx_14_0_universal2.whl |
|---|---|
| Size | 3.9 MB |
| Tags | Python 3 macOS 14.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
b57e8907e66771240e9cc41157836d7fbb0e2cdedef606017089c7e6cbcf9a90
|
|
BLAKE2b-256 checksum How to use checksums |
f63ebd0c6369c9923d26bc737b7e8efa8b8f493c9e05c3fcbcd5ca7fe19fdac8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.8
|
Security for drews-mac-control-mcp 0.2.56
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.