Universal Computer Control MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| UCC_LOGGING__LEVEL | No | Logging level. Example: UCC_LOGGING__LEVEL=DEBUG | |
| UCC_SECURITY__MODE | No | Configures the security mode (permissive/standard/strict). Example: UCC_SECURITY__MODE=standard | |
| UCC_VISION__VLM__ENABLED | No | Enable the vision-language model backend. Example: UCC_VISION__VLM__ENABLED=true | |
| UCC_ENGINE__VERIFICATION_MODE | No | Configures the verification mode (off/basic/strict). Example: UCC_ENGINE__VERIFICATION_MODE=strict | |
| UCC_SECURITY__ALLOWED_COMMANDS | No | JSON list of commands allowed to be run by computer.run_command. Example: UCC_SECURITY__ALLOWED_COMMANDS='["ls", "git status", "xdotool"]' |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| computer.observeA | Observe the current computer state: screen geometry, active window, cursor, OCR'd on-screen text and accessibility UI elements. Levels: 'minimal' (fast), 'normal' (screenshot+OCR+accessibility), 'full' (adds focused element details). This is the primary tool for understanding the screen before acting. |
| computer.screenshotA | Take a screenshot of the whole virtual desktop, a specific monitor or a [left, top, right, bottom] region. Saves it to the persistence directory and returns the path. |
| computer.get_ui_treeB | Get the accessibility tree of the active (or a named) window as a nested structure of roles, names and bounding boxes. Uses Windows UI Automation or Linux AT-SPI; returns an explanatory error when no accessibility backend is available. |
| computer.get_active_windowA | Get the title, application and process of the currently focused window. |
| computer.find_textA | Find text anywhere on screen (OCR + accessibility) with fuzzy matching. Returns matches with bounding boxes so you can click them. Tolerates case, arrows and small typos ('Continue' matches 'Continue →'). |
| computer.find_visualA | Find a UI element visually: by image template name (from the configured template directory) or by natural-language description via the optional vision model. Returns a bounding box. |
| computer.wait_forA | Wait until something changes on screen. Expectations: 'any_change', 'window' (value = window title substring), 'text' (value = OCR text substring). Use after actions to await UI reactions instead of blind sleeps. |
| computer.clickA | Click a UI element. Target can be: visible text ('Continue'), an element id from computer.observe ('element_17'), or coordinates ({'x': 500, 'y': 300}). The engine resolves it via accessibility first, then OCR, then vision - and verifies the result. |
| computer.double_clickB | Double-click a UI element (same flexible target rules as computer.click). |
| computer.right_clickC | Right-click a UI element (same flexible target rules as computer.click). |
| computer.move_mouseB | Move the mouse cursor to a target (text, element id or coordinates). |
| computer.dragC | Drag from one target to another (text, element ids or coordinates). |
| computer.scrollA | Scroll the mouse wheel. Positive amount scrolls up, negative down. Optionally at specific coordinates (x, y). |
| computer.typeA | Type text at the currently focused input. Handles Unicode and multiline text (clipboard fallback used automatically). The typed content is never logged. |
| computer.pressC | Press a keyboard key ('enter', 'tab', 'escape', 'f5', ...). |
| computer.hotkeyA | Press a key combination. Pass a string like 'ctrl+s' or a list like ['ctrl', 'shift', 't']. |
| computer.list_windowsA | List all top-level OS windows with title, application, pid and state. |
| computer.focus_windowA | Focus a real OS window by (partial) title or application name, e.g. 'Chrome'. Works without any application-specific integration. |
| computer.minimize_windowC | Minimize a window by title/application. |
| computer.maximize_windowC | Maximize a window by title/application. |
| computer.restore_windowC | Restore a minimized/maximized window. |
| computer.close_windowA | Close a window gracefully (WM_CLOSE). Requires confirm=true; modal confirmation dialogs remain visible for the agent to handle. |
| computer.get_clipboardA | Read the clipboard text. |
| computer.set_clipboardA | Write text to the clipboard (useful as a typing fallback). |
| computer.launch_applicationA | Launch a GUI application ('chrome', 'code', a .desktop entry, or a full path). Subject to security.allowed_applications, rate limiting and security.confirmation_required (confirm=true by default). |
| computer.run_commandA | Run a shell command (security.allowlist applies; see computer.backend_status). Requires confirm=true. Output is truncated and credential-redacted. |
| computer.backend_statusA | Report health/availability of every backend (input, screenshot, accessibility, window management, clipboard, OCR, vision) plus security settings and emergency-stop state. |
| computer.emergency_stopA | EMERGENCY STOP: immediately halt all automation (checked before every action and attempt). Persists until reset_emergency_stop. |
| computer.reset_emergency_stopA | Clear a previously triggered emergency stop. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 29 tools
Most tools have clearly distinct purposes (click vs drag vs scroll, find_text vs find_visual, the many window operations are each specific). The only mild overlap is between computer.observe, computer.screenshot and computer.get_ui_tree, but observe's description explicitly positions it as the primary screen-understanding tool, keeping confusion low.
Every tool follows a strict namespace.verb_noun snake_case pattern (computer.click, computer.focus_window, computer.list_windows, computer.emergency_stop). No camelCase or mixed conventions anywhere, so the surface is highly predictable.
29 tools is on the high side, but the domain (full desktop automation spanning input, OCR/vision, accessibility, window management, clipboard, app launching and shell) legitimately needs this breadth and each tool maps to a distinct capability. Slightly heavy rather than gratuitous.
Coverage is comprehensive: observation/screenshot/UI-tree, the full input set (click variants, type, hotkey, scroll, drag), window lifecycle (list/focus/minimize/maximize/restore/close), clipboard read/write, app launch, shell execution, backend health, and safety controls (emergency stop/reset). No obvious dead ends for the stated purpose.