Universal macOS app automation MCP server — 30-100x faster than screenshot-based computer-use. Uses Accessibility API, AppleScript, and CGEvent.
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"desktop-pilot-mcp": {
"args": [
"-y",
"desktop-pilot-mcp"
],
"command": "npx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Desktop Pilot is an MCP server that gives Claude direct access to any macOS application through the Accessibility API, AppleScript, and CGEvent -- no screenshots, no pixel coordinates, no vision model overhead. It reads the actual UI tree and acts on semantic element references, the same way Playwright works for browsers.
Run this in your terminal to verify the server starts. Then let us know if it worked — your result helps other developers.
npx -y 'desktop-pilot-mcp' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
Checked desktop-pilot-mcp against OSV.dev.
Click any tool to inspect its schema.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in productivity
Persistent memory using a knowledge graph
Dynamic problem-solving through sequential thought chains
mini cli search engine for your docs, knowledge bases, meeting notes, whatever. Tracking current sota approaches while being all local
Official Miro MCP server - Supports context to code and creating diagrams, docs, and data tables.
MCP Security Weekly
Get CVE alerts and security updates for Desktop Pilot Mcp and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
Native macOS automation for Claude. 30-100x faster than screenshots.
Desktop Pilot is an MCP server that gives Claude direct access to any macOS application through the Accessibility API, AppleScript, and CGEvent -- no screenshots, no pixel coordinates, no vision model overhead. It reads the actual UI tree and acts on semantic element references, the same way Playwright works for browsers.
One snapshot of Telegram takes 20ms and returns structured data. The same operation with screenshot-based computer-use takes ~3 seconds and returns pixels.
pilot_snapshot { "app": "Telegram" }
[e1] Window "Saved Messages"
[e2] MenuButton "Main menu"
[e3] Button "All chats (111 unread chats)"
[e7] Button "Code (4 unread chats)"
[e18] TextField "Write a message..."
[e20] Button "Record Voice Message"
pilot_click { "ref": "e18" } // focus the text field
pilot_type { "ref": "e18", "text": "Hello from Claude" }
pilot_click { "ref": "e20" } // send
No coordinates. No screenshots. No guessing. Just refs.
npx desktop-pilot-mcp
Step 1. Add to your Claude config and restart Claude:
For Claude Code, add to ~/.claude.json under your project's mcpServers:
{
"desktop-pilot": {
"command": "npx",
"args": ["-y", "desktop-pilot-mcp"]
}
}
For Claude Desktop, add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"desktop-pilot": {
"command": "npx",
"args": ["-y", "desktop-pilot-mcp"]
}
}
}
Step 2. Grant Accessibility permission when macOS prompts you (one-time).
If the prompt doesn't appear: System Settings > Privacy & Security > Accessibility -- add your terminal app or Claude Desktop.
Step 3. Ask Claude to interact with any app:
"Take a snapshot of Telegram and show me what's on screen"
That's it. No API keys, no accounts, no configuration files.
Requires Swift 6.0+ (included with Xcode 16+).
git clone https://github.com/VersoXBT/desktop-pilot-mcp.git
cd desktop-pilot-mcp
swift build -c release
Then use the binary path directly in your Claude config:
{
"desktop-pilot": {
"command": "/absolute/path/to/desktop-pilot-mcp/.build/release/desktop-pilot-mcp",
"args": []
}
}
Real measurements from testing against Telegram, Finder, and other macOS apps:
| Operation | computer-use (screenshots) | Desktop Pilot | Speedup |
|---|---|---|---|
| Snapshot (read full UI tree) | ~3000ms | 20ms | 150x |
| Snapshot (Finder, 45 elements) | ~3000ms | 78ms | 38x |
| Click element | ~3000ms | ~50ms | 60x |
| Read element value | ~3000ms | <1ms | 3000x |
| Find buttons by role | ~3000ms | 4ms | 750x |
| Type text | ~4000ms | ~20ms | 200x |