linux-cu
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DISPLAY | No | Detected automatically when the host doesn't pass it, preferring the display your desktop session uses | |
| LCU_GLIDE | No | 0: jump instead of the curved spring motion | 1 |
| XAUTHORITY | No | Detected automatically when the host doesn't pass it, preferring the display your desktop session uses | |
| LCU_OVERLAY | No | 0: don't draw the agent cursor | 1 |
| LCU_IME_BYPASS | No | 0: don't switch ibus to a plain engine while typing | 1 |
| LCU_CURSOR_ICON | No | Your own PNG/SVG icon | Codex glyph |
| LCU_CURSOR_SIZE | No | Height of a custom icon, in px | 28 |
| LCU_CURSOR_COLOR | No | Fixed cursor colour, #rrggbb | wallpaper |
| LCU_CURSOR_LABEL | No | Name tag next to the cursor; auto uses the client name (Claude/Codex) | none |
| LCU_CURSOR_SCALE | No | Cursor scale (1.0 = 14 px) | 1.0 |
| LCU_PLAIN_ENGINE | No | ibus engine used while typing | xkb:us::eng |
| LCU_REMAP_SETTLE | No | Seconds to wait after rebinding keys for non-layout characters (Hangul, emoji). Raise it if the first such character is dropped or wrong | 0.12 |
| LCU_MAX_LONG_EDGE | No | Long edge of screenshots, in px | 1280 |
| LCU_CURSOR_HOTSPOT | No | Click point inside that icon, in px | 0,0 |
| LCU_SUPERVISOR_LOG | No | File for supervisor restart logs | stderr |
| LCU_VIRTUAL_POINTER | No | 0: share the user's pointer (no own pointer, no overlay) | 1 |
| DBUS_SESSION_BUS_ADDRESS | No | Detected automatically when the host doesn't pass it, preferring the display your desktop session uses |
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 |
|---|---|
| screenshotA | Capture the screen. Optionally pass x/y/width/height (screenshot coords) to zoom into a region for reading small text; coordinates you act on must still be full-screen screenshot coordinates. |
| screen_infoB | Screen size (real and screenshot space), scale, and pointer position. |
| active_windowA | Where your keystrokes will go ( |
| cursor_positionA | Current mouse pointer position in screenshot coordinates. |
| clickB | Click at (x, y). count=2 for double-click, 3 for triple-click. modifiers e.g. ["ctrl"] or ["shift"] are held during the click. |
| mouse_moveB | Move the pointer to (x, y) without clicking (e.g. to reveal hover menus). |
| dragC | Press at start, move smoothly to end, release. |
| mouse_downA | Press and hold a mouse button at the current pointer position. |
| mouse_upC | Release a mouse button. |
| scrollC | Scroll the wheel at (x, y). amount = number of wheel clicks. |
| type_textA | Type text into the focused widget. Any Unicode works (Korean, emoji...). Newlines press Return. expect_window: substring of the focused window's title or class; if it doesn't match, nothing is typed. |
| keyC | Press a key or chord: "Return", "ctrl+c", "ctrl+shift+t", "alt+F4", "super", "Escape", "Page_Down". X keysym names are accepted. expect_window works as in type_text. |
| hold_keyB | Hold key(s) down for |
| waitB | Wait for the UI (max 30s), then by default return a screenshot. |
| list_windowsB | Top-level windows known to AT-SPI: app, title, active/visible, box. |
| ui_treeA | List visible widgets as |
| click_elementB | Activate a ui_tree element. auto = AT-SPI action if available, else a real mouse click at its center. |
| set_textB | Replace the contents of an editable ui_tree element. Falls back to focusing it, select-all and typing when the widget isn't directly editable. |
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 18 tools
Most tools target clearly distinct primitives (coordinate click vs. semantic click_element, type_text vs. set_text, key vs. hold_key, drag vs. mouse_down/up). Minor overlap: screen_info already reports the pointer position that cursor_position returns, and active_window/list_windows/ui_tree all relate to window/widget state and could be briefly confusing. Descriptions largely resolve these ambiguities.
All names use consistent snake_case, which reads cleanly across the set. There is some variance between verb-based (mouse_move, list_windows, click_element, set_text) and noun-based (screenshot, cursor_position, active_window, ui_tree) names, but the vocabulary is predictable for a low-level GUI primitive API.
18 tools is slightly above the typical 3-15 range but justified for full GUI automation, since each covers a genuinely distinct primitive (mouse buttons, keys, accessibility, screen capture). No redundant tools inflate the count.
The surface covers screen capture and geometry, full mouse control (click, move, drag, down/up, scroll), keyboard input (type, chords, holds), accessibility inspection and activation, plus waiting and focus verification. This is a complete lifecycle for computer-use tasks with no obvious dead ends.