io.github.antbotlab/mac-use-mcp

编码与调试

by antbotlab

面向 AI agents 的零依赖 macOS 桌面自动化方案,通过 MCP 提供 18 个工具,支持 macOS 13+。

什么是 io.github.antbotlab/mac-use-mcp

面向 AI agents 的零依赖 macOS 桌面自动化方案,通过 MCP 提供 18 个工具,支持 macOS 13+。

README

ant-09-banner-night-03

mac-use-mcp

demo

[!WARNING] This tool has full control over mouse, keyboard, and screen. Please use in a sandboxed environment to protect your privacy and avoid accidental data loss by your agents. You are responsible for any actions performed through this tool.

Zero-native-dependency macOS desktop automation via MCP.

Give AI agents eyes and hands on macOS — click, type, screenshot, and inspect any application.

CI npm version npm downloads license TypeScript macOS 13+ Node 22+

Use Cases

  • Automated UI testing — click buttons, verify element states with get_ui_elements, validate screen content via screenshot
  • Desktop workflow automation — launch apps with open_application, fill forms with type_text, navigate menus via click_menu
  • Screenshot-based monitoring — capture screen regions periodically with screenshot for visual diffing or alerting
  • Accessibility inspection — query UI element trees with get_ui_elements for QA and compliance checks
  • AI agent computer use — give LLMs eyes and hands on macOS via screenshot, click, type_text, and more

Why mac-use-mcp?

  • Just worksnpx mac-use-mcp and grant two macOS permissions. No node-gyp, no Xcode tools, no build step.
  • 18 tools, one server — screenshots, clicks, keystrokes, window management, accessibility inspection, and clipboard.
  • macOS 13+ on Intel and Apple Silicon — no native addons, no architecture headaches.

Install

Requirements: macOS 13+ and Node.js 22+. The server communicates over stdio transport.

This package only works on macOS. It will refuse to install on other operating systems.

No build steps. No native dependencies. Just run:

bash
npx mac-use-mcp

npx will prompt to install the package on first run. Use npx -y mac-use-mcp to skip the confirmation.

[!TIP] Model selection matters. Desktop automation involves screenshot–action loops that add up in token usage. A fast model with solid reasoning, good vision, and reliable tool calling is recommended:

ModelProvider
Gemini 3 FlashGoogle
Claude Sonnet 4.6Anthropic
GPT-5 miniOpenAI
MiniMax-M2.5MiniMax
Kimi K2.5Moonshot AI
Qwen3.5Alibaba
GLM-4.7Zhipu AI

Permission Setup

mac-use-mcp requires two macOS permissions to function. Grant them once and you're set.

Accessibility

Required for mouse and keyboard control.

  1. Open System Settings > Privacy & Security > Accessibility
  2. Click the + button
  3. Add your MCP client application (e.g., Claude Desktop, your terminal emulator)
  4. Ensure the toggle is enabled

Screen Recording

Required for screenshots.

  1. Open System Settings > Privacy & Security > Screen Recording
  2. Click the + button
  3. Add your MCP client application
  4. Ensure the toggle is enabled
  5. Restart the application if prompted

Verify permissions

After granting both permissions and configuring your MCP client (see next section), use the check_permissions tool to confirm everything is working:

code
> check_permissions
✓ Accessibility: granted
✓ Screen Recording: granted

MCP Client Configuration

<details open> <summary><strong>Claude Code</strong></summary>
bash
claude mcp add mac-use-mcp -- npx mac-use-mcp
</details> <details> <summary><strong>Claude Desktop</strong></summary>

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

json
{
  "mcpServers": {
    "mac-use-mcp": {
      "command": "npx",
      "args": ["mac-use-mcp"]
    }
  }
}
</details> <details> <summary><strong>OpenAI Codex</strong></summary>

Add to ~/.codex/config.toml:

toml
[mcp_servers.mac-use]
command = "npx"
args = ["-y", "mac-use-mcp"]

Or via CLI:

bash
codex mcp add mac-use -- npx -y mac-use-mcp
</details> <details> <summary><strong>Google Antigravity</strong></summary>

Add to ~/.gemini/antigravity/mcp_config.json:

json
{
  "mcpServers": {
    "mac-use-mcp": {
      "command": "npx",
      "args": ["mac-use-mcp"]
    }
  }
}
</details> <details> <summary><strong>Gemini CLI</strong></summary>

Add to ~/.gemini/settings.json:

json
{
  "mcpServers": {
    "mac-use-mcp": {
      "command": "npx",
      "args": ["mac-use-mcp"]
    }
  }
}
</details> <details> <summary><strong>VS Code / Copilot</strong></summary>

Add to .vscode/mcp.json in your workspace (or open the Command Palette and run MCP: Open User Configuration for global setup):

json
{
  "servers": {
    "mac-use-mcp": {
      "command": "npx",
      "args": ["mac-use-mcp"]
    }
  }
}
</details> <details> <summary><strong>Cursor</strong></summary>

Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project-level):

json
{
  "mcpServers": {
    "mac-use-mcp": {
      "command": "npx",
      "args": ["mac-use-mcp"]
    }
  }
}
</details> <details> <summary><strong>Windsurf</strong></summary>

Add to ~/.codeium/windsurf/mcp_config.json:

json
{
  "mcpServers": {
    "mac-use-mcp": {
      "command": "npx",
      "args": ["mac-use-mcp"]
    }
  }
}
</details> <details> <summary><strong>Cline</strong></summary>

Open Cline's MCP settings (in the Cline extension panel, click the MCP servers icon), then add:

json
{
  "mcpServers": {
    "mac-use-mcp": {
      "command": "npx",
      "args": ["mac-use-mcp"]
    }
  }
}
</details> <details> <summary><strong>Kiro</strong></summary>

Add to ~/.aws/amazonq/mcp.json:

json
{
  "mcpServers": {
    "mac-use-mcp": {
      "command": "npx",
      "args": ["mac-use-mcp"]
    }
  }
}
</details>

Tools

This Node.js MCP server exposes 18 tools for mouse, keyboard, and screen control to any MCP-compatible client.

Screen

ToolDescription
screenshotCapture the screen, a region, or a window by title (PNG or JPEG)
get_screen_infoGet display count, resolution, origin, and scale factor for each display
get_cursor_positionGet current cursor coordinates

Input

ToolDescription
clickClick at screen coordinates with button, click count, and modifier options
move_mouseMove the cursor to a position
scrollScroll up, down, left, or right at a position
dragDrag from one point to another over a configurable duration
type_textType text at the cursor position (supports Unicode, CJK, and emoji)
press_keyPress a key or key combination (e.g., "cmd+c", "Return")

Window & App

ToolDescription
list_windowsList all visible windows with positions and sizes
focus_windowActivate an app and bring a specific window to the front
open_applicationLaunch an application by name
click_menuClick a menu bar item by path (e.g., "File > Save As...")

App names support fuzzy matching — "chrome" resolves to "Google Chrome", "code" to "Code", etc.

Accessibility

ToolDescription
get_ui_elementsQuery UI elements via Accessibility API — find buttons, text fields, and other controls by role or title

Clipboard

ToolDescription
clipboard_readRead the current system clipboard as plain text
clipboard_writeWrite text to the system clipboard

Utility

ToolDescription
waitPause for a specified duration (in milliseconds, 0–10 000, default 500)
check_permissionsVerify Accessibility and Screen Recording access

Examples

Common workflow patterns using mac-use-mcp tools:

Screenshot a specific window

code
1. focus_window({ app: "Safari" })
2. screenshot({ mode: "window", window_title: "Safari" })

Click a button in a dialog

code
1. get_ui_elements({ app: "Finder", role: "AXButton" })
   → finds "OK" button at position (500, 300)
2. click({ x: 500, y: 300 })

Automate a menu action

code
1. open_application({ name: "TextEdit" })
2. click_menu({ app: "TextEdit", path: "Format > Make Plain Text" })

Copy text between apps

code
1. focus_window({ app: "Safari" })
2. press_key({ key: "cmd+a" })       # select all
3. press_key({ key: "cmd+c" })       # copy
4. focus_window({ app: "Notes" })
5. press_key({ key: "cmd+v" })       # paste

How It Works

  • Swift binary handles mouse input (CGEvent), screen capture (CGWindowListCreateImage), window enumeration (CGWindowListCopyWindowInfo), and UI element queries (Accessibility API)
  • AppleScript handles keyboard input (System Events key code), window focus, and menu clicks
  • Node.js MCP server orchestrates everything over stdio, translating MCP tool calls into system operations
  • No native Node.js addons — the Swift binary is pre-compiled and ships with the npm package
  • Serial execution queue prevents race conditions between system operations

Known Limitations

  • Screen Recording prompt on Sequoia: macOS 15 shows a monthly system prompt asking to reconfirm Screen Recording access. This is an OS-level behavior and cannot be suppressed.
  • Secure input fields: Password fields and other secure text inputs block synthetic keyboard events. This is a macOS security feature.
  • Keyboard input on macOS 26+: CGEvent keyboard synthesis is silently blocked. Keyboard input uses AppleScript (System Events key code) as a workaround, which may behave differently in some edge cases.
  • System dialogs: Some system-level dialogs (e.g., FileVault unlock, Login Window) cannot be interacted with programmatically due to macOS security restrictions.
  • Headless / CI: Requires a graphical session. Headless macOS environments (e.g., standard GitHub Actions runners) are not supported.

Troubleshooting

<details> <summary><strong>Permission prompts keep appearing</strong></summary>

Grant Accessibility and Screen Recording permissions to your terminal app in System Settings > Privacy & Security. A restart of the terminal may be required.

</details> <details> <summary><strong>macOS Sequoia permission dialogs</strong></summary>

macOS 15 (Sequoia) introduced stricter permission prompts. Allow the prompts when they appear. The check_permissions tool can verify your current permission status.

</details> <details> <summary><strong>Secure input fields</strong></summary>

Some password fields and secure text inputs block programmatic key events. This is a macOS security feature. Use clipboard_write + press_key("cmd+v") as a workaround.

</details> <details> <summary><strong>Screen recording shows black screenshots</strong></summary>

Ensure Screen Recording permission is granted to your terminal app (not just Accessibility). Restart the terminal after granting.

</details>

Related Projects

  • Playwright MCP — Browser automation via accessibility tree. Complements mac-use-mcp for web-only tasks.
  • Peekaboo — macOS screen automation with ScreenCaptureKit. Requires macOS 15+ and a Swift build.
  • awesome-mcp-servers — Curated list of MCP servers across the ecosystem.

Contributing

See CONTRIBUTING.md for development setup and guidelines.

Changelog

Security

To report a vulnerability, see SECURITY.md.

Support

  • Found a bug? Open an issue
  • Have a feature idea? Open an issue
  • Like the project? Give it a star — it helps others discover mac-use-mcp.

License

MIT © 2026 antbotlab


macOS is a trademark of Apple Inc., registered in the U.S. and other countries and regions.

常见问题

io.github.antbotlab/mac-use-mcp 是什么?

面向 AI agents 的零依赖 macOS 桌面自动化方案,通过 MCP 提供 18 个工具,支持 macOS 13+。

相关 Skills

前端设计

by anthropics

Universal
热门

面向组件、页面、海报和 Web 应用开发,按鲜明视觉方向生成可直接落地的前端代码与高质感 UI,适合做 landing page、Dashboard 或美化现有界面,避开千篇一律的 AI 审美。

想把页面做得既能上线又有设计感,就用前端设计:组件到整站都能产出,难得的是能避开千篇一律的 AI 味。

编码与调试
未扫描171.4k

网页应用测试

by anthropics

Universal
热门

用 Playwright 为本地 Web 应用编写自动化测试,支持启动开发服务器、校验前端交互、排查 UI 异常、抓取截图与浏览器日志,适合调试动态页面和回归验证。

借助 Playwright 一站式验证本地 Web 应用前端功能,调 UI 时还能同步查看日志和截图,定位问题更快。

编码与调试
未扫描171.4k

网页构建器

by anthropics

Universal
热门

面向复杂 claude.ai HTML artifact 开发,快速初始化 React + Tailwind CSS + shadcn/ui 项目并打包为单文件 HTML,适合需要状态管理、路由或多组件交互的页面。

在 claude.ai 里做复杂网页 Artifact 很省心,多组件、状态和路由都能顺手搭起来,React、Tailwind 与 shadcn/ui 组合效率高、成品也更精致。

编码与调试
未扫描171.4k

相关 MCP Server

GitHub

编辑精选

by GitHub

热门

GitHub 是 MCP 官方参考服务器,让 Claude 直接读写你的代码仓库和 Issues。

这个参考服务器解决了开发者想让 AI 安全访问 GitHub 数据的问题,适合需要自动化代码审查或 Issue 管理的团队。但注意它只是参考实现,生产环境得自己加固安全。

编码与调试
89.7k

by Context7

热门

Context7 是实时拉取最新文档和代码示例的智能助手,让你告别过时资料。

它能解决开发者查找文档时信息滞后的问题,特别适合快速上手新库或跟进更新。不过,依赖外部源可能导致偶尔的数据延迟,建议结合官方文档使用。

编码与调试
60.2k

by tldraw

热门

tldraw 是让 AI 助手直接在无限画布上绘图和协作的 MCP 服务器。

这解决了 AI 只能输出文本、无法视觉化协作的痛点——想象让 Claude 帮你画流程图或白板讨论。最适合需要快速原型设计或头脑风暴的开发者。不过,目前它只是个基础连接器,你得自己搭建画布应用才能发挥全部潜力。

编码与调试
49.9k

评论