x11-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| X11_MCP_NAME | No | Desktop name. A second server with the same name gets agent-2, and so on, so two agents never share one desktop. | agent |
| X11_MCP_SERVER | No | The X server backend: xvfb, or xvnc for TigerVNC's Xvnc, which serves a view-only VNC stream itself. | xvfb |
| X11_MCP_OPENBOX | No | Use a different Openbox binary. Defaults to openbox on PATH. | openbox |
| X11_MCP_PASS_ENV | No | Comma-separated variables to pass through anyway, e.g. SSH_AUTH_SOCK. Session-pointing variables such as DISPLAY, XAUTHORITY, WAYLAND_DISPLAY, DBUS_SESSION_BUS_ADDRESS, XDG_RUNTIME_DIR, and SESSION_MANAGER are refused. | |
| X11_MCP_RESOLUTION | No | Size of the headless screen. | 1920x1080 |
| X11_MCP_SHARE_HOME | No | If set to 1, runs agent apps with your real $HOME. Use with caution; see README. | |
| X11_MCP_WORKSPACES | No | Number of workspaces at start (1-32). The agent can change it with set_workspace_count. | 4 |
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 |
|---|---|
| desktop_infoC | Screen size, workspaces (* = shown, (n) = window count), focused window and how the user can watch. |
| screenshotA | Capture the agent desktop, or a region of it (x, y, width, height). Use scale < 1 to save tokens; click coordinates are always full-scale screen pixels.
|
| zoomA | Magnify a region (x, y, width, height) of the screen to read small text or icons. The image is upscaled by |
| bashA | Run a shell command inside the agent desktop's environment and return its output. For short commands: xclip/xdotool, reading app logs, files under the agent's $HOME.
It sees the agent desktop's display and D-Bus, not the user's. Use |
| launchA | Run a shell command on the agent desktop (e.g. 'xterm', 'firefox --new-instance'). The window opens on |
| waitB | Sleep, e.g. to let an app finish loading before a screenshot. Max 30s. |
| wait_until_idleA | Wait until nothing on screen has been redrawn for Each redrawn rectangle smaller than |
| restart_desktopA | Kill the agent desktop and every app on it, then start a fresh one. |
| list_windowsA | All windows (or those on one workspace), topmost first, with ids for the window tools. frame = the whole window on screen (title bar and borders included), content = the app's own area; both are (x,y widthxheight) in screen pixels. |
| focus_windowA | Focus and raise a window (switching to its workspace and unminimizing it if needed). |
| close_windowB | Ask a window to close, as its close button would. The app may ask to confirm. |
| window_actionA | Apply an action to a window (default: the focused one). kill disconnects the window's app from the display (XKillClient), which ends most apps immediately, and kills its process if that survives; use close_window first. |
| move_resize_windowB | Place a window's frame (title bar and borders included) at (x, y) with this outer size. Apps with size steps (terminals snap to character cells) or limits may end up a little smaller; the result reports the actual geometry. |
| tile_windowsA | Arrange the normal windows of a workspace (default: the shown one) side by side. columns: next to each other; rows: stacked; grid: rows of up to ceil(sqrt(n)). Windows go in the order they were opened. Dialogs and minimized windows are left alone. |
| view_workspaceB | Show a workspace (numbered from 1). Windows on other workspaces are hidden, not closed. |
| move_window_to_workspaceB | Move a window (default: the focused one) to another workspace. The view stays where it is. |
| set_workspace_countA | Change how many workspaces there are (1-32). Windows on removed ones move to the last remaining. |
| mouse_moveB | Move the agent's pointer to screen pixel (x, y). |
| clickB | Click at (x, y), or where the pointer is. count=2 double-clicks, 3 triple-clicks. |
| dragB | Press at (x1, y1), move to (x2, y2) in steps, release. |
| scrollA | Scroll by wheel notches at (x, y) or the pointer. Negative down = up, negative right = left. |
| type_textB | Type text into the focused window. Any Unicode works, independent of keyboard layout. Newlines press Return and tabs press Tab. |
| press_keysB | Press key combos, space-separated: 'ctrl+l', 'Return', 'ctrl+shift+t alt+F4'. Key names are X keysyms (Return, Tab, Escape, BackSpace, Up, F5, a, 1, ...). |
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 23 tools
Most tools have clearly distinct resource/action targets: screenshot vs zoom vs desktop_info, and bash vs launch are separated by purpose and description. Minor ambiguity remains around window_action (a generic escape hatch that overlaps close_window's kill behavior) and wait vs wait_until_idle, though descriptions clarify both.
All names use consistent snake_case, and the dominant pattern is verb_noun (focus_window, close_window, move_window_to_workspace, type_text, press_keys). A few outliers like mouse_move (noun_verb) and noun-style names (screenshot, bash, desktop_info) slightly break the pattern but remain readable.
23 tools is on the heavy side, but the domain spans screenshots, input, windows, workspaces, and process control, so most tools earn their place. A few could conceivably be merged (e.g. wait/wait_until_idle), but the set is not bloated relative to scope.
The surface covers the desktop lifecycle well: capture, input, window management, workspace management, process launch, and restart. Gaps include no explicit right/middle-click button parameter, no maximize/minimize window actions, and no dedicated clipboard tool, though bash/xdotool can work around these.