Skip to content
Agentmart
Submit a tool

Macbeth

Open-source computer use for macOS agents.

Connector by wende · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 4
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/wende-macbeth

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Open-source computer use for macOS agents.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
13 read · 8 write · 1 delete · 4 not yet classified
Secrets
None asked for
Install scripts
Not scanned yet
Runs as
Node.js package

Tools by what they do 26

Read from the source code; the running server may list different tools.

Read 13 · Look things up without changing anything.

  • dump_attributes
  • extract_text
  • get_element
  • list_apps
  • list_daemon_methods
  • list_menu_bar
  • list_shortcuts
  • list_skills
  • list_windows
  • load_skill
  • query_tree
  • read_form
Show 1 more tools
  • screenshot

Write 8 · Create, change, send or run things.

  • click
  • fill
  • pin_handle
  • press_key
  • press_keys
  • run_applescript
  • run_shortcut
  • select_menu_item

Delete 1 · Delete, drop, revoke or wipe things.

  • run_skill_script

Not yet classified 4 · We could not tell from the name and description.

  • begin_activity
  • connect_app
  • end_activity
  • wait_for

Files it touches

  • Any path the agent passes to its tools

Tools (26)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • begin_activity

    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 crashed or disconnected client is cleaned up automatically after a timeout). Scopes nest safely: overlapping activities keep the indicator on until the last one ends.

  • click

    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.

  • connect_app

    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 pass as the `app` argument to any other tool to address the same process without re-resolving the name.

  • dump_attributesread-only

    Dump all accessibility attributes for a previously resolved element handle.

  • end_activity

    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.

  • extract_textread-only

    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.

  • fill

    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.

  • get_element

    Find a specific UI element and return its properties (role, title, value, enabled, focused).

  • list_appsread-only

    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.

  • list_daemon_methodsread-only

    List every JSON-RPC method registered by the daemon. Used to verify that daemon capabilities are exposed through MCP.

  • list_menu_barread-only

    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. Pass titlePattern to prune non-matching branches (case-insensitive regex); ancestors of matches are kept.

  • list_shortcutsread-only

    List all Apple Shortcuts available on this Mac.

  • list_skillsread-only

    List available macbeth skills. Each skill has instructions (SKILL.md) and optional runnable scripts. Call load_skill with no arguments for the core macbeth usage guide.

  • list_windowsread-only

    List open windows across macOS Spaces without touching an accessibility tree. Omit 'app' to list windows for every running app — that answers "is app X open, and what is it showing?" in one call; pass 'app' to scope the listing to one app and its helper processes. Each entry has windowId, title, ownerName/ownerPid/bundleId, frame, onScreen/active/minimized, AX role/subrole, kind, and whether it is capturable. windowId is a WindowServer ID, not an element handle: it has no TTL, ignores pin_handle, and stays valid until the window closes. Read-only — it does not activate windows or switch Spaces…

  • load_skillread-only

    Load a skill's SKILL.md instructions (and list any runnable scripts). Omit `name` (or pass an empty string) to load the core macbeth skill — how to use the MCP tools themselves. Pass a directory name under skills/ for an app-specific skill (e.g. "Safari", "electron").

Show 11 more tools
  • pin_handle

    Extend a handle's idle TTL to 60 minutes (refreshed on each use). Pins are finite — abandoned handles age out on their own, so there is no unpin. Prefer `pin: true` on read_form/query_tree/get_element when you know at mint time; use this tool when you decide later, or when pinning a set of handles together via `handleIds`.

  • press_key

    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", "alt", "ctrl". The result reports how far the input got: outcome=dispatched means the events entered the system event stream (the app may still have ignored them); outcome=attempted means even that co…

  • press_keys

    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 outcome as press_key, covering the sequence as a whole.

  • query_tree

    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 working reports stale_handle (re-query for it) or unknown_handle (it was never issued). If Chromium web content is empty, the result explains available screenshot/OCR/menu/keyboard fallbacks. Start wi…

  • read_formread-only

    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. Pass `pin: true` to pin every returned field handle in one call — the cheap path for 'I'm about to fill this form'.

  • run_applescript

    Run an AppleScript or JavaScript for Automation (JXA) script. Returns the script's output as text. The script goes in 'source' (not 'script' or 'code'), and 'language' is exactly "AppleScript" or "JavaScript" — JXA is "JavaScript", the string "jxa" is not accepted. Examples: {"source": "tell application \"Finder\" to get name of every window"} {"source": "Application('Finder').windows().map(w => w.name()).join(', ')", "language": "JavaScript"} Set 'timeout' for work that legitimately runs long (e.g. enumerating many apps); the default is 30 seconds. A script that overruns its timeout is st…

  • run_shortcut

    Run an Apple Shortcut by name. Shortcuts are system-level automations, not tied to any specific app.

  • run_skill_script

    Run a script from a skill's scripts/ directory. Scripts are .mjs files that automate specific workflows using macbeth.

  • screenshot

    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.

  • select_menu_item

    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.

  • wait_for

    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).

Signals

Stars
4
Forks
0
Open issues
1
Last commit
Sep 11, 2026 (1 month ago)
Last release
Aug 2, 2026 (2 months ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
io.github.wende/macbeth
Version
0.2.4
Auth
No auth
Packages
npm macbeth
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from wende

Cite this page

Macbeth MCP server. Agent Mart. https://agentmart.dev/connectors/wende-macbeth (last updated 2026-10-24)