The Omarchy desktop, exposed to AI agents as an MCP server. Speaks MCP over stdio, providing fixed verb tools over existing Omarchy or Wayland CLI with permission-based access control and activity logging.
OMCP exposes 28 desktop control tools via STDIO. Tool definitions are visible in bin/omcp with names, descriptions, and input schemas. However, critical gaps severely limit production readiness: (1) Descriptions are extremely brief (5-15 chars avg, well below 34-char p10 baseline), providing minimal LLM guidance on WHEN to use each tool or WHAT it returns. E.g., 'Set the desktop theme' lacks context on available themes or consequences. (2) Input schemas lack type constraints, enums, and ranges, e.g., set_volume accepts 'level' as number but no min/max bounds documented, inviting invalid values like 500. (3) No output schemas documented anywhere, LLMs cannot plan downstream calls or extract return values. (4) Parameter descriptions are minimal or absent in schema definitions. (5) No error handling guidance, tools fail silently with no recovery hints. (6) Security-critical: write_clipboard, set_wallpaper, and 13 other write tools lack permission gates or audit trail documentation. (7) Composition issues: set_window_floating + set_window_fullscreen could be unified; no batch variants for multi-window operations. Average per-tool score: 32/100.
Focus a specific window by ID
Get information about the currently active window
Get the current desktop theme
Get network status information
Get system statistics
Get current weather information
List installed applications
Descriptions critically short (5-15 chars avg vs 34-char p10 baseline). 'Set the desktop theme' and 'Get current weather information' lack WHEN/WHY context, available options, or return value guidance. LLMs cannot reliably select correct tool.
No output schemas documented. LLMs cannot infer return structure, forcing blind calls. E.g., list_windows returns what fields? Does get_system_stats return CPU, memory, disk? Agents cannot chain calls without guessing.
Numeric parameters lack bounds. set_volume(level: number) accepts 0-100 per description, but schema has no min/max constraints. set_brightness, set_reminder similarly unbounded. LLMs can pass invalid values (500, -1, etc.) causing silent failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | 2026-07-28+ | v2 |
List connected monitors
List available themes
List all open windows
List all available workspaces
Move a window to a specific workspace
Read the current clipboard contents
Capture the desktop or a specific window as a PNG image
Send a desktop notification
Set the screen brightness
Enable or disable do not disturb mode
Enable or disable night light
Set the power profile
Set a reminder
Prevent the system from sleeping
Set the desktop theme
Set the system volume
Set the desktop wallpaper
Set a window to floating mode
Set a window to fullscreen mode
Switch to a specific workspace
Write text to the clipboard
No permission gates or audit trail. 13 write tools (write_clipboard, set_wallpaper, focus_window, etc.) execute without checking user/agent authority. Code shows permission map exists (CONFIG_PATH references config.json with PERMISSIONS), but tools do not validate. Destructive operations (set_power_profile, set_stay_awake) lack confirmation or dry-run.
No error handling guidance. Tools fail silently with no recovery hints. E.g., if set_theme('invalid-theme') fails, LLM gets no hint to call list_themes() first. If screenshot exceeds SCREENSHOT_MAX_BYTES (8MB), error message is not documented.