Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
X11_MCP_NAMENoDesktop name. A second server with the same name gets agent-2, and so on, so two agents never share one desktop.agent
X11_MCP_SERVERNoThe X server backend: xvfb, or xvnc for TigerVNC's Xvnc, which serves a view-only VNC stream itself.xvfb
X11_MCP_OPENBOXNoUse a different Openbox binary. Defaults to openbox on PATH.openbox
X11_MCP_PASS_ENVNoComma-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_RESOLUTIONNoSize of the headless screen.1920x1080
X11_MCP_SHARE_HOMENoIf set to 1, runs agent apps with your real $HOME. Use with caution; see README.
X11_MCP_WORKSPACESNoNumber 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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
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. workspace captures another workspace: the view switches there for the capture and then back (hidden workspaces have no pixels until shown).

zoomA

Magnify a region (x, y, width, height) of the screen to read small text or icons.

The image is upscaled by factor (default: to about 1568px on the long side, at most 4x). Image pixel (px, py) is screen pixel (x + px / factor, y + py / factor).

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 launch for GUI apps and anything long-running: this waits for the command, and kills it and everything it started after timeout seconds (max 300). stdin is empty.

launchA

Run a shell command on the agent desktop (e.g. 'xterm', 'firefox --new-instance').

The window opens on workspace (the view switches there first) or the current one. Waits up to wait_for_window seconds (max 60) for the new window, focuses it and reports it.

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 quiet_ms (or timeout seconds pass, max 60).

Each redrawn rectangle smaller than min_area square pixels (default about 20x20: blinking text cursors, small spinners) is ignored; min_area=0 counts every pixel.

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 23 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues