axterminator 0.9.1

macOS GUI testing framework with background testing, sub-millisecond element access, and self-healing locators
docs.rs failed to build axterminator-0.9.1
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.

AXTerminator

CI Crates.io Downloads macOS Rust License Discussions Install in VS Code Install in Cursor

MCP server that gives AI agents the ability to see and control macOS applications.

Deploy · MCP Tools · CLI · Query Syntax · Troubleshooting · Wiki · Known Limitations


Up to 34+ MCP tools (27 core + optional audio, camera, spaces). Background interaction via the macOS Accessibility API. 379us per element access. Audio capture, camera input, virtual desktop isolation. Your AI agent connects and your Mac becomes an extension of it.

Platform scope. AX-first-with-vision-fallback is macOS-only. iOS/iPadOS support is tracked in #43 as a future capability and, when shipped, will be screenshot + vision only — the idevice/RPPairing surface does not expose AX trees for third-party apps, and UIAutomation would require an on-device test runner (breaks the "mac-only agent, no on-device prereqs" contract). Reported screenshot latency via CoreDeviceProxy: ~350ms USB, ~700ms WiFi (credit @m13v). tvOS is unverified — the RSD surface is narrower than idevice's tvOS target suggests; please open an issue with device evidence if you've tested. See #42 for the AX-first-vs-vision-first positioning rationale.

Deploy

Tell your AI assistant (recommended):

Read https://github.com/MikkoParkkola/axterminator and install axterminator as my macOS GUI automation MCP server

Your agent will install the binary, wire itself up, and request accessibility permissions. Works in Claude Code, Cursor, Windsurf, and any AI with terminal access.

Or install manually:

brew install MikkoParkkola/tap/axterminator

Grant accessibility permissions: System Settings > Privacy & Security > Accessibility (add your terminal app).

axterminator mcp install auto-detects your AI client. Specify one with --client:

axterminator mcp install                       # Claude Desktop (default)
axterminator mcp install --client claude-code  # Claude Code
axterminator mcp install --client cursor       # Cursor
axterminator mcp install --client windsurf     # Windsurf
axterminator mcp install --client codex        # OpenAI Codex CLI
axterminator mcp install --client vscode       # VS Code Copilot
axterminator mcp install --client zed          # Zed
axterminator mcp install --dry-run             # Preview without writing

Also supported: gemini, amazon-q, lm-studio.

# From crates.io
cargo install axterminator --features cli

# Build from source
git clone https://github.com/MikkoParkkola/axterminator
cd axterminator
cargo build --release --features cli

# Manual JSON (Claude Desktop, Cursor, Windsurf, etc.)
# { "mcpServers": { "axterminator": { "command": "axterminator", "args": ["mcp", "serve"] } } }

For Codex (~/.codex/config.toml):

[mcp_servers.axterminator]
command = "axterminator"
args = ["mcp", "serve"]

Done. Your agent has 27 core tools (up to 34+ with all feature flags) to control any macOS app.

MCP Tools

Category Tools What the agent can do
GUI ax_connect, ax_find, ax_click, ax_click_at, ax_type, ax_set_value, ax_get_value, ax_scroll, ax_drag, ax_key_press Connect to apps, find elements, interact
Observe ax_is_accessible, ax_screenshot, ax_get_tree, ax_get_attributes, ax_list_windows, ax_list_apps, ax_wait_idle Check permissions, see UI state, screenshots
Verify ax_assert, ax_find_visual, ax_visual_diff, ax_a11y_audit Assert element state, AI vision fallback, visual regression, WCAG audit
System ax_clipboard, ax_run_script, ax_undo, ax_session_info, ax_analyze Clipboard, AppleScript/JXA, undo actions, session state, UI analysis
Audio ax_listen, ax_speak, ax_audio_voices, ax_audio_devices Capture mic/system audio, text-to-speech, inspect installed macOS voices
Camera ax_camera_capture, ax_gesture_detect, ax_gesture_listen Camera frames, gesture recognition
Spaces ax_list_spaces, ax_create_space, ax_move_to_space, ax_switch_space, ax_destroy_space Virtual desktop isolation

Resources

Agents can browse app state without tool calls:

Resource What
axterminator://apps Running applications
axterminator://app/{name}/tree Live element hierarchy
axterminator://app/{name}/screenshot Current screenshot
axterminator://app/{name}/state Focused element, window title
axterminator://system/displays Monitor layout

Security

Destructive actions require confirmation via elicitation. HTTP transport requires bearer token auth. The AI has hands, not root.

CLI

axterminator apps                        # List accessible apps
axterminator find "Save" --app Safari    # Find element
axterminator click "Save" --app Safari   # Click it
axterminator screenshot --app Safari     # Capture screenshot
axterminator tree --app Finder           # Element hierarchy
axterminator mcp serve --http 8080 --token secret  # HTTP transport

Query Syntax

# Simple text — matches ANY of: title, description, value, label, identifier
axterminator find "Save" --app Safari

# By role
axterminator find "role:AXButton" --app Safari

# Combined role + attribute (AND)
axterminator find "role:AXButton title:Save" --app Safari

# By description (useful for apps like Calculator)
axterminator find "description:equals" --app Calculator

# By value
axterminator find "value:42" --app Calculator

# XPath-like
axterminator find "//AXButton[@AXTitle='Save']" --app Safari

How It Works

AXTerminator uses an undocumented behavior of Apple's Accessibility API: AXUIElementPerformAction() works on unfocused windows. Your agent clicks buttons in one app while you work in another. Neither notices.

379us per element access (Criterion, M1 MacBook Pro). Appium needs 500ms for the same thing.

7-strategy self-healing locators survive UI changes: data_testid, aria_label, identifier, title, xpath, position, visual_vlm.

Known Limitations

Operation Background? Notes
Click, press, read values, screenshots Yes Core operations work without focus
Text input Partial Some apps need focused text field
Drag, system dialogs No Require cursor control / always grab focus
Gesture recognition Yes Verified: thumbs_up at 88.8% confidence
Speech transcription Yes Verified: on-device, requires Dictation enabled

Platform coverage (see #43):

Platform AX tree Screenshot App launch Status
macOS 12+ Shipped; sub-ms AX path
iOS / iPadOS ❌ (third-party apps) ✅ (~350ms USB / ~700ms WiFi) Planned, screenshot + vision only — no AX semantics
tvOS Unverified — RSD surface narrower than idevice suggests
visionOS / watchOS Out of scope

Troubleshooting

Symptom Cause Fix
Accessibility: DISABLED No permission granted System Settings > Privacy & Security > Accessibility
Element not found for short labels App uses AXDescription not AXTitle Try description:label or inspect with axterminator tree
Application not found Wrong name or app not running Use bundle ID: --bundle-id com.apple.calculator

AI agents: Fetch llms.txt for machine-readable installation instructions.

Feature Flags

The Homebrew formula includes all features. When building from source, select capabilities with feature flags:

cargo build --release --features "cli,audio,camera,spaces"
Flag What
cli CLI + MCP server (default)
audio Microphone/system audio, speech
camera Camera capture, gesture detection
spaces Virtual desktop management
http-transport HTTP MCP transport with auth

Community

Acknowledgements

Inspired by Terminator by mediar-ai, which pioneered accessible desktop GUI automation on Windows.

For AI Agents

Machine-readable installation guide: llms.txt

Your agent can fetch this URL to get step-by-step installation, MCP config for every host, and troubleshooting.

Ecosystem

axterminator is part of a suite of MCP tools:

Tool Description
mcp-gateway Universal MCP gateway — compact 12-15 tool surface replaces 100+ registrations
trvl AI travel agent — 36 MCP tools for flights, hotels, ground transport
nab Web content extraction — fetch any URL with cookies + anti-bot bypass
axterminator macOS GUI automation — 34 MCP tools via Accessibility API

License

MIT OR Apache-2.0