Local-first desktop control MCP server (computer use): Rust host + Node launcher for safe app/window/input/screenshot automation on macOS and Windows
20 tools with complete schemas and descriptions, but quality is uneven. All tools have input schemas with type definitions and descriptions present. Naming follows verb_noun convention (desktop_*, session_*, app_*, window_*, observe_*, ocr_*, vision_*, input_*). However, descriptions are terse (10-50 chars typical), lack WHEN/WHY context, and omit recovery guidance. Parameter descriptions exist but are minimal. No output schemas documented. Error handling is absent from tool definitions. Session-based architecture (session_id parameter) adds complexity without clear idempotency guarantees. Tools like window_focus accept multiple selector types (window_id, title, title_contains, app) but lack guidance on precedence or mutual exclusivity.
Launch an application by name or path
List running applications on the system
Quit a running application
List available desktop automation capabilities
Check system permissions for desktop automation
Get desktop runtime information and configuration
Click at a specified position on the screen
Descriptions are terse (10-50 chars) and lack WHEN/WHY context. E.g., 'List available desktop automation capabilities' does not explain when to call it, what it returns, or how it differs from desktop_runtime. LLMs cannot determine tool selection without richer context.
No output schemas documented. Tools return structured data but LLMs cannot plan downstream calls without knowing response fields. E.g., does app_list return app_id, app_name, app_path? Does observe_capture return artifact_id for use with ocr_read?
Multiple selector parameters (window_id, title, title_contains, app) in window_focus, window_move, window_resize lack precedence/mutual-exclusivity guidance. LLMs will pass multiple selectors, causing ambiguous behavior or errors.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2025-06-18+ | v2 |
Press a keyboard hotkey combination
Type text at the current cursor position
Capture a screenshot of the desktop or focused window
Extract text from a screenshot using OCR
Quit the Presence UI application
Close an active desktop automation session
Open a new desktop automation session with specified capabilities and policies
Get a vision model description of a screenshot
Use vision to locate UI elements in a screenshot
Focus a specific window
List open windows on the system
Move a window to a specified position
Resize a window to specified dimensions
No error handling guidance in tool definitions. Tools do not document what errors are retryable, user-fixable, or fatal. E.g., if app_launch fails, should the agent retry, ask the user, or try a different app?
session_id parameter is optional in most tools but required for state tracking. No documentation of session lifecycle, idempotency guarantees, or what happens if session_id is omitted. Agents cannot reason about session safety.