Rust MCP server for Linux desktop automation - Wayland/Hyprland-first
ultranix-mcp defines 23 tools with mostly complete schemas and descriptions. Naming follows verb_noun conventions (get_windows, window_focus, mouse_click). Descriptions average ~80-120 chars, meeting the 10-1024 char baseline. All visible tools have input schemas with typed parameters. However, several critical gaps reduce the score: (1) Many parameter descriptions are minimal (e.g., 'KWin internalId in braced UUID format' lacks guidance on how to obtain this ID); (2) Output schemas are not documented, tools return results but the response structure is not specified; (3) Error handling is absent, no recovery guidance, retryability classification, or actionable error messages; (4) Some tools lack context on prerequisites (e.g., vision_analyze requires base64 encoding but doesn't explain format); (5) Destructive tools (window_close, clipboard_clear) have no confirmation or dry-run pattern. The server demonstrates solid foundational quality but lacks the polish and error resilience expected of production tools.
Get the currently focused window with its properties
Navigate to a URL in the browser via Chrome DevTools Protocol
Take a screenshot of the current browser page
Clear the clipboard
Get the current clipboard content
Set the clipboard content
Get the accessibility tree of the UI using AT-SPI2
List all windows with their properties (title, class, workspace, geometry, focus state)
Output schemas not documented. Tools return results but response structure is not specified in tool definitions. LLMs cannot plan downstream calls or extract required fields without knowing what fields are returned.
Destructive tools lack confirmation or dry-run pattern. window_close and clipboard_clear can cause data loss without agent confirmation. Agents make mistakes, these operations should support a confirmation step.
Error handling absent. No recovery guidance, retryability classification, or actionable error messages. When a tool fails, the agent has no guidance on whether to retry, ask the user, or abort.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | <=2025-11-25 | v2 |
Press, release, or hold keyboard keys
Click the mouse button at the current or specified position
Move the mouse cursor to absolute or relative coordinates
Scroll the mouse wheel
Execute a plugin-exposed tool from the plugin registry
Get information about connected displays and their geometry
Capture a screenshot of the entire screen or a region
Execute a whitelisted system command
Type text using the keyboard
Analyze an image using ONNX vision models (OWL-ViT, CLIP)
Close a window
Focus a window by its ID using kdotool windowactivate
Minimize a window
Move a window to absolute or relative coordinates
Resize a window to absolute dimensions
Parameter descriptions lack actionable context. Many describe the format (e.g., 'KWin internalId in braced UUID format') but not how to obtain the value or when to use it. LLMs cannot infer prerequisites.
vision_analyze parameter 'image' accepts both base64 and file path but description does not clarify encoding requirements or file path resolution. LLMs may pass invalid formats.