Universal Computer Control MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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
} |
| experimental | {} |
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. |
| 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 target a single, distinct action or resource, and the shared target resolution rules do not create real confusion. The main overlap is that observe subsumes screenshot and get_ui_tree, while find_text and find_visual both locate on-screen targets, but their text-vs-visual distinction keeps them usable.
The majority of tool names follow a clear action_object snake_case pattern, such as focus_window, get_clipboard, and list_windows. A few outliers like observe, screenshot, backend_status, and emergency_stop break the verb_noun pattern but remain readable and stylistically consistent.
At 29 tools, the namespace is too large for a single agent-facing surface; the selection cost is significant even though the tools cluster into clear functional groups. Some observation tools such as screenshot, observe, and get_ui_tree could be consolidated, which would reduce count without losing capability.
The set covers the full GUI automation loop: observing state, searching for targets, input, window lifecycle, clipboard, launching applications, shell commands, and safety controls. There are no obvious dead ends, and wait_for plus backend_status close the verification and error-handling gaps.