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
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:
Grant accessibility permissions: System Settings > Privacy & Security > Accessibility (add your terminal app).
axterminator mcp install auto-detects your AI client. Specify one with --client:
Also supported: gemini, amazon-q, lm-studio.
# From crates.io
# Build from source
# Manual JSON (Claude Desktop, Cursor, Windsurf, etc.)
# { "mcpServers": { "axterminator": { "command": "axterminator", "args": ["mcp", "serve"] } } }
For Codex (~/.codex/config.toml):
[]
= "axterminator"
= ["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
Query Syntax
# Simple text — matches ANY of: title, description, value, label, identifier
# By role
# Combined role + attribute (AND)
# By description (useful for apps like Calculator)
# By value
# XPath-like
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:
| 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
- Wiki -- Full documentation
- Discussions -- Questions, ideas, show-and-tell
- Issues -- Bugs
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