{"name":"io.github.wende/macbeth","slug":"wende-macbeth","title":"Macbeth","description":"Open-source computer use for macOS agents.","url":"https://mcp.market/server/wende-macbeth","rating":null,"grade":"A","score":92,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":31,"stars":4,"forks":0,"downloads_week":18,"last_push_at":"2026-09-20T15:07:34.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/wende/macbeth","website":"https://wende.github.io/macbeth/","version":"0.2.4","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"macbeth","version":"0.2.4","runtimeHint":"npx","transport":{"type":"stdio"}}],"tools":[{"name":"begin_activity","description":"Turn 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","write_action":false,"price_micros":0,"input_schema":null},{"name":"click","description":"Click 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"connect_app","description":"OPTIONAL 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","write_action":false,"price_micros":0,"input_schema":null},{"name":"dump_attributes","description":"Dump all accessibility attributes for a previously resolved element handle.","write_action":false,"price_micros":0,"input_schema":null},{"name":"end_activity","description":"End 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"extract_text","description":"Extract 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fill","description":"Set 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_element","description":"Find a specific UI element and return its properties (role, title, value, enabled, focused).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_apps","description":"List 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_daemon_methods","description":"List every JSON-RPC method registered by the daemon. Used to verify that daemon capabilities are exposed through MCP.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_menu_bar","description":"Return 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_shortcuts","description":"List all Apple Shortcuts available on this Mac.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_skills","description":"List available macbeth skills. Each skill has instructions (SKILL.md) and optional runnable scripts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_windows","description":"List open windows across macOS Spaces without touching an accessibility tree.","write_action":false,"price_micros":0,"input_schema":null},{"name":"load_skill","description":"Load a skill by name. Returns the SKILL.md instructions and lists any runnable scripts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pin_handle","description":"Pin 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"press_key","description":"WARNING: 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\", ","write_action":false,"price_micros":0,"input_schema":null},{"name":"press_keys","description":"WARNING: 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","write_action":false,"price_micros":0,"input_schema":null},{"name":"query_tree","description":"Get 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 ","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_form","description":"Read 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"run_applescript","description":"Run an AppleScript or JavaScript for Automation (JXA) script. Returns the script's output as text.","write_action":true,"price_micros":0,"input_schema":null},{"name":"run_shortcut","description":"Run an Apple Shortcut by name. Shortcuts are system-level automations, not tied to any specific app.","write_action":true,"price_micros":0,"input_schema":null},{"name":"run_skill_script","description":"Run a script from a skill's scripts/ directory. Scripts are .mjs files that automate specific workflows using macbeth.","write_action":true,"price_micros":0,"input_schema":null},{"name":"screenshot","description":"Capture 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"select_menu_item","description":"Select 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"unpin_handle","description":"Unpin a previously pinned handle, resuming normal TTL expiry.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wait_for","description":"Wait 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).","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":92,"grade":"A","scanned_at":"2026-09-24T12:00:19.307Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-24T12:00:19.262Z","components":{"code":{"score":25,"max":25,"notes":["46 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 4 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"macbeth","version":"0.2.4","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-08-02T21:48:30.893Z","repositoryUrl":"git+https://github.com/wende/macbeth.git","weeklyDownloads":18}],"repo":{"found":true,"owner":"wende","repo":"macbeth","archived":false,"pushedAt":"2026-09-20T15:07:34Z","stars":4,"forks":0,"openIssues":2,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/4634386?v=4","ownerCreatedAt":"2013-06-06T21:02:21Z","license":"MIT"},"icon":{"url":"https://raw.githubusercontent.com/wende/macbeth/main/assets/macbeth-marketplace-icon.png","source":"registry","width":400,"height":400},"presence":{"stars":4,"forks":0,"downloadsWeek":18,"license":"MIT","lastPushAt":"2026-09-20T15:07:34.000Z","score":31}}}},"grade_history":[],"reviews":[]}