Background computer-use MCP server. Exposes the nine-tool surface pioneered by the Codex computer-use plugin (list_apps, get_app_state, click, drag, perform_secondary_action, press_key, scroll, set_value, type_text) over MCP stdio, implemented with macOS Accessibility + Quartz Core Graphics APIs through PyObjC.
Server exposes 11 computer-use tools with clear action verbs and reasonable descriptions (avg 120 chars). All tools have input schemas with typed parameters and descriptions. However, output schemas are not documented, LLMs cannot predict return structure. Error handling is minimal; no recovery guidance or actionable error messages. Parameter descriptions lack format constraints (e.g., 'pid' is an integer but no range specified). Desktop lease tools (acquire_desktop, release_desktop) introduce stateful semantics that conflict with MCP's stateless design. No tool annotations (readOnlyHint, destructiveHint) despite clear read/write distinction.
Acquire an explicit long-lived desktop lease across multiple turns for atomic operations. Holds the lease until release_desktop is called or TTL expires.
Click on an element identified by its index from the last get_app_state call, or at absolute screen coordinates.
Drag from one location to another. Can use element indices or absolute coordinates.
Capture the accessibility tree and screenshot of a running application. Returns both an indexed accessibility tree (machine + human readable) and a window screenshot so the model can use either rail.
List running applications on the system with their bundle IDs, process IDs, and display names.
Perform a secondary action (right-click context menu) on an element or at coordinates.
Output schemas not documented. LLMs cannot predict return structure for any tool. get_app_state returns 'indexed accessibility tree + screenshot' but no schema visible; click/drag/scroll return values undocumented.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools clearly marked READ_ONLY vs WRITE in metadata but not exposed via MCP annotations. Agents cannot infer safety/retry semantics.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | <=2025-11-25 | v2 |
Press a keyboard key or key combination. Supports modifiers like cmd, shift, alt, ctrl.
Release a previously-acquired explicit desktop lease.
Scroll within an application window or at specific coordinates.
Set the value of an input element (text field, slider, etc.).
Type text into the focused element or a specific element.
Stateful desktop lease pattern (acquire_desktop/release_desktop with TTL) conflicts with MCP's stateless request model. No Mcp-Session-Id or session tracking visible. Lease state cannot be reliably maintained across MCP request boundaries.
Parameter descriptions lack format constraints. 'pid' is integer but no range (valid PIDs?). 'key' in press_key accepts string but no enum of valid key names (Return, Escape, Space documented in description but not as enum). 'modifiers' enum is present but incomplete guidance on combinations.
No error handling or recovery guidance. Tools do not document failure modes (e.g., 'element_index out of range', 'pid not found', 'accessibility denied'). LLMs receive no actionable error messages.