Macbeth MCP server
io.github.wende/macbeth·v0.2.4·4 starsOpen-source computer use for macOS agents.
4 stars18 downloads/wk
Reviews
Write oneNobody has reviewed Macbeth yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Macbeth tools (27, 3 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
begin_activityTurn on the on-screen interaction indicator before you control the computer through some OTHER tool (a different MCP server, computer-use, a shell script) that Macbeth cannot see. Macbeth's own click/fill/press_key/run_applescript tools already show the indicator, so you do NOT need this for them. Returns a token; you MUST call end_activity with that token when the external work finishes (a crashe
clickClick a UI element. Auto-waits for the element to appear. On Electron/web content, the default 'auto' strategy tries AXPress (and adjacent nodes) then falls back to a synthetic mouse click; override with 'mouse' for canvas-heavy UIs or 'ax' to force a press. Mouse clicks briefly activate the target window, then restore the previous app, window, and cursor.
connect_appOPTIONAL preflight. Every app-taking tool (query_tree, click, fill, screenshot, ...) connects on its own, so you do NOT need to call this first. Call it to (a) check an app is reachable through Accessibility before driving it, (b) see exactly how a fuzzy name resolved, or (c) warm up an Electron app's accessibility tree with a custom readyTimeoutMs. It returns an app handle ("h_3") that you can pa
dump_attributesDump all accessibility attributes for a previously resolved element handle.
end_activityEnd an interaction-indicator scope started by begin_activity. Pass the token that begin_activity returned. Safe to skip if the client disconnects; the daemon expires abandoned scopes on its own.
extract_textExtract text from an app window using OCR (Vision framework). Bridges accessibility gaps in apps with poor AX support. Pass either an app name to capture + OCR, or base64 PNG data to OCR directly.
fillSet the text value of a field. Auto-waits for the element to appear. On Electron/web content, the default 'auto' strategy writes the AX value then synthesizes keystrokes (so frameworks like React see the input); override with 'keyboard' to force typing or 'ax' to force a direct value write.
get_elementFind a specific UI element and return its properties (role, title, value, enabled, focused).
list_appsList running macOS apps, split into the ones that are currently reachable through the Accessibility API and the ones that are running but will fail to connect (launchers, helper processes, apps that never implement AX). Blocked entries carry the AX error code, what it means, and what to do instead.
list_daemon_methodsList every JSON-RPC method registered by the daemon. Used to verify that daemon capabilities are exposed through MCP.
list_menu_barReturn a menu-only Accessibility view. query_tree already includes menus, so use this only when that menu section was omitted, truncated, or a compact menu-only result is needed.
list_shortcutsList all Apple Shortcuts available on this Mac.
list_skillsList available macbeth skills. Each skill has instructions (SKILL.md) and optional runnable scripts.
list_windowsList open windows across macOS Spaces without touching an accessibility tree.
load_skillLoad a skill by name. Returns the SKILL.md instructions and lists any runnable scripts.
pin_handlePin an element handle to prevent it from expiring (default TTL is 5 minutes). Useful for long-running workflows where you need a stable reference to a panel or control.
press_keyWARNING: This tool steals focus — it activates the target app window before sending input. Use as a last resort when click/fill cannot achieve the goal (e.g. keyboard shortcuts, arrow-key navigation). Prefer "fill" for text entry and "click" for buttons. Key names: "return", "tab", "escape", "a"-"z", "1"-"9", "f1"-"f12", "up", "down", "left", "right", "space", "delete". Modifiers: "cmd", "shift",
press_keysWARNING: This tool steals focus — it activates the target app window before sending input. Use as a last resort when click/fill cannot achieve the goal. Prefer "fill" for text entry and "click" for buttons. Sends a sequence of keyboard inputs in one call. Each step accepts either `key` plus optional `modifiers`, or `text` to type literally, plus optional `delayMs`. Reports the same dispatch outcom
query_treeGet an app's accessibility tree, including its menu hierarchy. Use this first; it connects automatically, so a separate connect_app or list_menu_bar call is unnecessary. Element handles (h_N) are stable: the same element keeps the same handle across calls, so handles you already have stay valid and you can plan several actions from one tree instead of re-querying between them. A handle that stops
read_formRead all form-like controls (text fields, sliders, checkboxes, popups, etc.) from a subtree. Returns each control's label, current value, type, editability, and handle. Use this to inspect panel contents without parsing the full tree.
run_applescriptwrite actionRun an AppleScript or JavaScript for Automation (JXA) script. Returns the script's output as text.
run_shortcutwrite actionRun an Apple Shortcut by name. Shortcuts are system-level automations, not tied to any specific app.
run_skill_scriptwrite actionRun a script from a skill's scripts/ directory. Scripts are .mjs files that automate specific workflows using macbeth.
screenshotCapture the default visible app window, or select a window returned by list_windows. Explicit selection does not activate the window or switch Spaces; some apps may provide blank content for off-Space windows.
select_menu_itemSelect a native menu bar item by path (e.g. ["Track", "New Audio Track"]). Uses the Accessibility API directly, accepts a fuzzy app name or PID, and does not steal focus.
unpin_handleUnpin a previously pinned handle, resuming normal TTL expiry.
wait_forWait for a UI condition. Conditions: 'exists' (default, wait for element to appear), 'value_equals' (wait for specific value), 'value_changes' (wait for any value change), 'enabled' (wait for element to become enabled).
Public scan report
scanner v0.1.9 · 2026-09-24 · same rubric, same numbers if you re-run it
- Code scan46 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitylocal package, no credentials required12/15
- Maintenancelast push 4 days ago15/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
How Macbeth compares
Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 92/100
- higher than 95% of 48,255 servers
- Tools
- 27
- the typical server has 7
- Tools that change things
- 11%
- typical: 0%. Fewer write tools means less an agent can break
- GitHub stars
- 4
- more than 82% of 28,688 servers
- Downloads a week
- 18
- more than 5% of 12,191 servers with a package
What its tools let an agent do: 24 read · 3 run or deploy
Install Macbeth in Claude Code, Cursor or VS Code
Runs npx -y macbeth on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add macbeth -- npx -y macbeth
What the publisher says
From the Macbeth repository's README, as published. We do not edit it. Read it on GitHub
Macbeth — Open-source Computer Use for macOS
Give the agent you already use hands and eyes on your Mac.
See and operate Mac applications through MCP or TypeScript, including native and Electron interfaces.
Structured UI access when possible. Screenshots and OCR when necessary. Think Playwright for your entire Mac.
Simulated walkthrough of Macbeth's current MCP tool surface: System Settings, Electron interaction, and screenshot/OCR.
Quickstart · Examples · Why Macbeth? · TypeScript · Security · Skills
Quickstart
Give Claude Code access to Macbeth:
claude mcp add macbeth -- npx -y macbethThen ask it to verify the connection:
Using Macbeth, list the running applications, connect to Finder, inspect its front window, and summarize the first few controls you can see. Do not perform any other actions.
Macbeth ships with a prebuilt, signed and notarized universal daemon. No Swift toolchain or manual service installation is required. If setup fails, run npx macbeth doctor; it prints a self-contained diagnostic prompt you can paste back into your agent.
Any MCP client that can launch a stdio server can use npx -y macbeth. See MCP setup for generic configuration, updates, and the complete tool list.
Let your agent guide the installation
Add Macbeth as an MCP server using npx -y macbeth. Run npx macbeth doctor, guide me through granting only the permissions I need, and verify the setup by inspecting Finder. Do not take any unrelated actions.
Across your Mac
Work inside Unity, Logic Pro, and other complex tools
“In Logic Pro, set the project tempo to 128 BPM and start playback.”
Macbeth combines structured controls, menus, keyboard input, screenshots, OCR, and application-specific guidance. Logic Pro has a dedicated skill. Applications with thinner accessibility trees, including parts of Unity, can combine structured controls with keyboard, menu, screenshot, and OCR fallbacks.
Automate macOS itself
“Open System Settings, find the firewall controls, and report their current state without changing anything.”
Macbeth can inspect named controls and values, select native menu items, and use keyboard input when a semantic action is unavailable.
Use applications even when they have no API
“Open HEY, find the newest visible thread from the design team, and summarize it without sending or changing anything.”
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Macbeth: common questions
- Is Macbeth MCP server safe?
- Yes, by our scan: it is graded A (92/100). Read the Macbeth safety report
- How do I install Macbeth?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does Macbeth need an API key?
- Not as far as the registry entry and our scan can tell: no credentials are declared or required.
- Is Macbeth maintained?
- The last commit was 45 days ago (2026-09-20). The latest release is v0.2.4.
- How does Macbeth compare with other MCP servers?
- safety score 92/100 (higher than 95% of 48,255 servers); tools 27 (the typical server has 7); tools that change things 11% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.