Unified macOS automation MCP server with 17 atomic tools for UI interaction, app control, and system automation via accessibility APIs, Chrome DevTools Protocol, and AppleScript
Argus provides 16 well-named tools with complete input schemas and descriptions. Naming follows verb_noun convention (argus_click, argus_type, argus_find). Descriptions are concise (50 - 150 chars) and action-oriented. However, parameter descriptions are sparse or missing entirely, most params lack explanation of constraints, ranges, or expected formats. Output schemas are not documented; LLMs cannot predict response structure. Error handling is implicit (no recovery guidance in descriptions). Security-sensitive tools (argus_exec_apple_script, argus_type on secure fields) have basic safeguards but lack audit trail documentation. Composition is strong: tools chain well (find → click → verify), and responses include coordinates for downstream calls.
Cascade resolve + click + verify. Returns {clicked, x, y, source, confidence, verified:{ok,reason}, attempts, ms}. Updates the learned-selector cache on success.
Diagnostics. Returns {status: READY|DEGRADED|BROKEN, summary, deps, surface, dotenv}. Pass full=true for the verbose blob (ax/ocr/cdp/vision/cgevent details).
Run arbitrary AppleScript. Escape hatch — sandboxed via safety.is_dangerous(). Refuses on rm -rf / fork bombs / disk-erase / admin escalation. Pass allow_dangerous=true (audit-logged) to override.
Resolve target to coords WITHOUT clicking. Returns {x,y,bbox?,source,confidence,scope,attempts,ms}. Cascade: cache → AX → CDP-DOM → OCR → vision.
Return ALL matches for target (not just the best). Useful for duplicates, e.g. 'pick the second Sign In button'. Each hit has {x, y, bbox, source, confidence, text?}.
Special key (Return, Tab, Escape, ArrowUp/Down/Left/Right, Backspace) with optional modifiers ('cmd'|'shift+cmd'|'ctrl'|'alt').
Parameter descriptions missing or minimal. Most params (e.g., 'combo' in argus_send_keys, 'modifiers' in argus_key, 'action' in argus_session) lack explanation of valid values, constraints, or expected format. LLMs cannot infer whether 'combo' accepts 'cmd+shift+t' or 'command+shift+t'.
Output schemas not documented. Tool descriptions state what is returned (e.g., '{x,y,bbox?,source,confidence}' for argus_find) but not as formal JSON Schema. LLMs cannot reliably extract or chain results without explicit response structure.
Error handling lacks recovery guidance. No descriptions explain what to do if a tool fails (e.g., 'If argus_click fails with confidence < min_confidence, try argus_find_all to see all matches'). Agents cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Launch / focus a macOS app by name.
Paste text into focused field via clipboard (much faster than typing for long text; handles Unicode/IME natively). Refuses on AXSecureTextField unless force_secure=true. Restores prior clipboard contents.
Quit a macOS app gracefully.
Scroll up/down/left/right at cursor (or at coords if provided).
Screenshot of the current screen → base64 PNG.
Composite keyboard shortcut as single string, e.g. 'cmd+shift+t' or 'ctrl+alt+delete'. Maps the last token to the key, the rest to modifiers.
Browser session jar (cookies + storage). action ∈ {save, load, clear, list, detect_login}.
Where am I? Returns {surface: 'browser'|'webview'|'native', app: {bundle_id,name,pid}, host?}
Type into focused field. Refuses on AXSecureTextField unless force_secure=true.
Poll until target appears (or condition met) within timeout. Returns the resolved hit, or {timed_out: true}. Use to eliminate sleep() guesswork.
Numeric parameter constraints not specified. argus_see (max_dim), argus_find_all (limit, min_confidence), argus_wait_for (timeout_s, poll_s) lack min/max bounds. LLMs may pass absurd values (max_dim=999999, timeout_s=0.001).
argus_session action parameter is a free-form string with no enum constraint. Description lists valid actions (save, load, clear, list, detect_login) but does not enforce them. LLMs may pass invalid actions like 'delete' or 'export'.