McpMacControl
MCP server for AI-driven macOS control — screenshots, mouse, keyboard, windows, and shell sessions
Install / Use
claude mcp add sstraus -- npx -y github:sstraus/McpMacControlIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
AutomationSupported Platforms
Tags
Our assessment of McpMacControl
McpMacControl scores 78/100 on our quality scale, 2437th of 2,945 Automation skills we index.
Its MCP Server is 9.8 KB long, well organised into 23 sections with 13 code examples: a thorough specification that gives an agent plenty to work with.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 5 days ago, so McpMacControl is actively maintained.
- Our last check on 2026-09-12 found the source still online.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 87/100, with 2 cautions from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands.
Automated pattern scan on 2026-10-03. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
McpMacControl compared with similar skills
All 4 of these similar skills score higher than McpMacControl; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| McpMacControl (this skill)by sstraus | 78 | 3 | 5d ago | MCP Server |
| Agent-Reachby Panniantong | 100 | 88.6k | 17d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 74.3k | today | CLAUDE.md |
| rufloby ruvnet | 100 | 73.7k | today | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.2k | today | CLAUDE.md |
Frequently asked questions
- How do I install McpMacControl?
- Run
claude mcp add sstraus -- npx -y github:sstraus/McpMacControl. The install tabs above show the steps for each supported agent. - Which AI agents does McpMacControl work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is McpMacControl safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. It is MIT-licensed and scores 87/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is McpMacControl still maintained?
- The repository was last updated 5 days ago, so McpMacControl is actively maintained.
Skill content
View source on GitHubMCPMacControl
Give your AI eyes and hands on your Mac.
MCPMacControl is an MCP server that turns any AI assistant into an agentic computer user — it can see your screen, move the mouse, type on the keyboard, and run shell commands across any macOS application, not just the browser.
Works with Claude Code, Cursor, Windsurf, and any MCP-compatible client.
No scripting. No AppleScript. Just tell the AI what you want in plain language and watch it drive your Mac.
What can your AI do with it?
- Test your app like a QA engineer — click through flows, fill forms, verify visual state
- Automate legacy software that has no API — navigate menus, extract data from any window
- Debug UI issues by looking at screenshots and reproducing the problem step by step
- Drive native apps — Xcode, Figma, Finder, Mail, Excel — anything with a window
- Run interactive terminal sessions — full PTY with TUI support (vim, htop, docker logs)
"Take a screenshot of Safari, click the search bar, and type anthropic.com"
That's a real prompt. The AI does the rest.
Install
Download (recommended)
Download MCPMacControl.app.zip from the latest release, unzip, and move to /Applications/.
Release builds are signed and notarized with an Apple Developer ID certificate, so macOS permissions persist across updates and no Gatekeeper warnings appear.
Build from source
git clone https://github.com/sstraus/mcpmaccontrol
cd mcpmaccontrol
make build
make install
Configure your MCP client
Add to your MCP client's config (e.g. ~/.claude.json for Claude Code):
{
"mcpServers": {
"mac-control": {
"command": "/Applications/MCPMacControl.app/Contents/MacOS/mcpmaccontrol"
}
}
}
Then ask your AI: "Take a screenshot of Safari and click the search box"
Why not Playwright / browser automation?
Browser automation tools only control browsers. MCPMacControl controls everything on your Mac — native apps, Electron apps, system dialogs, menu bars, the Dock. If it has pixels on screen, Claude can see it and interact with it.
It also includes full PTY shell sessions, so Claude can run vim, docker, ssh, or any interactive terminal tool — not just headless commands.
Why an .app bundle?
Unlike most MCP servers, MCPMacControl needs macOS Screen Recording and Accessibility permissions. macOS grants these permissions per-application, not per-binary. When a plain binary runs from a terminal, macOS attributes the permission to the terminal app (iTerm, Terminal.app), not to the binary itself. This means:
- Permissions don't persist when the binary is rebuilt
- Every terminal app that launches the binary needs separate permission grants
- There's no way for users to manage the binary's permissions in System Settings
Wrapping the binary in a signed .app bundle gives it its own identity in macOS privacy settings. The binary still communicates via stdio like any MCP server - the .app bundle is just how macOS identifies it for permission management.
That's why the command path is /Applications/MCPMacControl.app/Contents/MacOS/mcpmaccontrol instead of /usr/local/bin/mcpmaccontrol.
Permissions
On first launch, macOS will prompt for two permissions:
| Permission | Purpose | |------------|---------| | Screen Recording | Screenshot capture | | Accessibility | Mouse/keyboard control |
Grant both in System Settings > Privacy & Security. The app registers itself automatically.
Features
- Visual feedback — menu bar icon, native popover showing current operation, sound + orange border flash before automation
- Input safety — verifies the target app is focused before sending keystrokes, preventing input from reaching the wrong window
- App context inheritance —
focuspropagates to subsequent actions in a batch, so you writeapponce - Signed
.appbundle — macOS permissions persist across updates, no Gatekeeper warnings - Region capture — screenshot only what you need to save tokens
- Auto-exit when the AI client disconnects
Tools
| Tool | Description |
|------|-------------|
| help | Built-in documentation - call first! |
| list_windows | Find windows by app name |
| capture_window | Screenshot window or region with click coordinates |
| capture_screen | Screenshot entire screen |
| do | Execute actions: click, type, key, scroll, focus, minimize, etc. |
| shell | PTY shell sessions: spawn, send_input, get_snapshot, resize, close, list |
| processes | List running processes with filtering for debugging |
Built-in Help
The AI calls help() to learn the API:
help()→ Overview and workflowhelp("actions")→ All action types fordo()help("shell")→ Shell/PTY documentationhelp("examples")→ Usage examples
How it works
Claude operates in a see-think-act loop — the same way a human would use a computer:
1. capture_window("Safari") → Screenshot saved to temp file
2. [Claude reads the image] → "I see a search bar at (400, 50)"
3. do([ → Click, type, press Enter
{type:"click", app:"Safari", x:400, y:50},
{type:"type", text:"anthropic.com"},
{type:"key", key:"enter"}
])
4. capture_window("Safari") → Verify the result
Pixel coordinates in the screenshot map directly to do() action coordinates — no conversion needed.
Region capture
Capture a portion of a window to save tokens:
capture_window("Safari", region_x: 0, region_y: 0, region_width: 400, region_height: 300)
Click coordinates: click_x = region_x + x_in_image, click_y = region_y + y_in_image.
The do Tool
Execute one or more actions in sequence:
do({"actions": [
{"type": "click", "app": "Safari", "x": 400, "y": 50},
{"type": "type", "text": "anthropic.com"},
{"type": "key", "key": "enter"}
]})
Action Types
| Action | Required | Optional | Description |
|--------|----------|----------|-------------|
| click | app, x, y | button, double | Click at position |
| move | app, x, y | | Move mouse |
| type | text | | Type text string |
| key | key | modifiers | Press key (supports "cmd+shift+g" compound syntax) |
| scroll | app, x, y, delta_y/delta_x | | Scroll in window |
| wait | ms | | Pause (milliseconds) |
| focus | app | | Bring window to front |
| minimize | app | | Minimize to dock |
| restore | app | | Restore from dock |
| close | app | | Close window |
| resize | app, width, height | | Resize window |
Examples
Click:
{"type": "click", "app": "Safari", "x": 100, "y": 50}
{"type": "click", "app": "Finder", "x": 200, "y": 100, "button": "right"}
{"type": "click", "app": "Finder", "x": 200, "y": 100, "double": true}
Keyboard:
{"type": "type", "text": "Hello World"}
{"type": "key", "key": "enter"}
{"type": "key", "key": "cmd+v"}
{"type": "key", "key": "cmd+shift+g"}
{"type": "key", "key": "v", "modifiers": ["cmd"]}
Scroll:
{"type": "scroll", "app": "Safari", "x": 400, "y": 300, "delta_y": -100}
Window Control:
{"type": "focus", "app": "Safari"}
{"type": "minimize", "app": "Finder"}
{"type": "restore", "app": "Finder"}
{"type": "resize", "app": "Safari", "width": 1024, "height": 768}
{"type": "close", "app": "TextEdit"}
Shell Sessions
Run interactive terminal sessions with full PTY and terminal emulation (supports TUI apps like vim, htop):
1. shell(action: "spawn") → Get session ID
2. shell(action: "send_input", session_id: "ID", input: "ls") → Send text
3. shell(action: "send_input", session_id: "ID", special_key: "enter")
4. shell(action: "get_snapshot", session_id: "ID", format: "ansi") → Get screen
5. shell(action: "close", session_id: "ID") → Cleanup
| Action | Parameters | Description |
|--------|------------|-------------|
| spawn | command?, cwd?, cols?, rows? | Start session (default: /bin/bash) |
| send_input | session_id, input?, special_key?, wait_ms? | Send text or keys |
| get_snapshot | session_id, format? | Get screen state (text or ansi) |
| resize | session_id, cols?, rows? | Resize terminal |
| list | | List active sessions |
| close | session_id | Close session |
Headless Mode
Run without menu bar (for CI/SSH):
{
"mcpServers": {
"mac-control": {
"command": "/Applications/MCPMacControl.app/Contents/MacOS/mcpmaccontrol",
"env": {
"MCPMACCONTROL_HEADLESS": "1"
}
}
}
}
Image Optimization
Screenshots are optimized for AI vision:
- WebP lossy format (default quality 25, tunable 1-100 via
qualityparameter; use 50+ for small glyphs/icons) - Scaled to window point dimensions (coordinates match clicks)
- Use region capture to further reduce size and tokens
Development
make build # Build signed .app bundle
make test # Run tests
make install # Install to /Applications
make clean # Remove build artifacts
make verify-sign # Check code signature
To sign with your own Apple Developer certificate:
SIGN_IDENTITY="Developer ID Application: YOUR NAME (TEAMID)" make build
Requirements
- macOS 12+
- Go 1.24+ (for building)
License
MIT
Related Skills
Agent-Reach
88.6kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
74.3kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
ruflo
73.7k🌊 The original agent harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, federation, vector RAG integration, and native Claude Code / Codex / Hermes and many more Integrated
CowAgent
47.2kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
