Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

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

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

Tools

Functions exposed to the LLM to take actions

NameDescription
desktop_controlA

Pause/resume cooperating agent input across servers on this display. Pause interrupts at the next checkpoint; already-delivered input is not undone. Observation remains available. This does not stop arbitrary external input programs.

desktop_recordingA

Explicit temporary screen recording: start, status, stop or delete by ticket. Start records only this X11 display, no audio, at 10fps and at most 1280×720 for 1–60 seconds. Start is not completed-file verification; stop/status return a path only after decoding verifies completion. Files are private, bounded and deleted on backend close/reconnect/server death; explicitly copy elsewhere before closure to save durably. Stop/delete remain usable while paused. Optional local ffmpeg/ffprobe required.

desktop_match_imageA

Find historical visual candidates from a selected screenshot crop in another retained screenshot. template_bounds requires x, y, width and height in source returned-image pixels; x/y are nonnegative and width/height are 8–512. Both IDs must be retained and fresh, from the same server and image scale; only the target must still have its captured layout. Historical source crops may come from a window that moved. Results use target returned-image pixels. Threshold is finite 0–1, limit 1–100; scores are uncalibrated correlation, never semantic identity or click permission. Returns non-overlapping candidates, preserving distinct duplicates; flat templates are refused. No new capture or input. Optional system OpenCV required.

desktop_ocrA

Read uncertain local OCR word candidates from this exact retained screenshot, never a new capture. Returns image-pixel boxes and uncalibrated engine scores, not exact text or action permission. Snapshot expires after 15 seconds or cache eviction; changed layout is refused. Optional Tesseract and the selected language must be installed. No input is sent.

desktop_statusA

Return recent operation outcomes after timeout/cancellation. This operation history excludes input text and screenshots.

desktop_reportA

Return a sanitized bug-report JSON: fixed environment/dependency versions, projected health and up to 32 recent operation IDs/methods/effects/timings, fixed error codes and semantic verbs from this MCP process. Excludes desktop content, paths, exceptions and action arguments. No files, uploads or replay. Supply synthetic repro steps separately; explicitly save/delete the returned report if needed.

desktop_recover_inputA

Retry cleanup of this server's interrupted supervised input, without replaying keys/clicks or resuming a paused desktop. Uses each operation's original session; a replaced X server is left untouched. Unproven cleanup stays blocked. Returns pending_count and recovery proofs; observe again before acting. Returns BUSY if another operation is still running.

desktop_reconnectA

Reconnect this MCP connection to a running XFCE session owned by this account after a desktop restart. Omit PID only when exactly one session exists. Validates display and bus before replacing the backend; failed validation preserves it. Returns BUSY during other operations, never restarts apps or replays input. All prior window, element and screenshot IDs expire; observe again. The selected display's pause state remains in force. Temporary owned browsers/profiles are closed and unsaved content is lost; browser_cleanup=unconfirmed reports cleanup that could not be proved.

desktop_doctorA

Check actual display access, desktop session, dependencies and accessibility availability. Reports driver version and content identities for tool declarations and the server-bundled skill; the latter does not identify the skill loaded by your agent.

desktop_applicationsA

Find installed desktop applications by name, description or ID. Returns application_id and file/URI support; works while input is paused. Use an exact returned ID with desktop_launch.

desktop_open_browserA

Open a fresh owned Chromium with explicit temporary_session lifetime. Browser/profile and unsaved content are deleted on server disconnect, backend close or reconnect. Requires optional browser dependencies and configured executable; never downloads automatically or attaches existing profiles. Inspect text_fields for ordinary HTML fields and explicit password-only secret entry. Ordinary protected-field operations, contenteditable editors and frames are unsupported.

desktop_launchA

Launch an installed application by its desktop_applications ID, optionally opening absolute existing paths or URIs. Returns dispatched with process-bound window candidates observed for wait_timeout seconds (default 1, range 0–3; 0 skips observation). Candidates do not prove document readiness; singleton association is never guessed. Inspect candidates or desktop_windows before acting; never blindly retry an uncertain launch.

desktop_windowsA

List window identities, titles, focus and client bounds, optionally filtering title/class. Returns counts, unavailable rows and next_offset when paginated. Each call is a fresh enumeration.

desktop_activateB

Reveal a window from desktop_windows and establish input focus using the automatically selected route. Observe again afterward.

desktop_observeB

Return screenshot plus window layout and a 15-second snapshot ID. Pointer coordinates and window/popup image_bounds use returned-image pixels; bounds/frame_bounds remain native X11 root pixels. image_bounds is null when no integer screenshot pixel maps into the client. Use integer image points.

desktop_inspectA

Inspect a window or find controls by name/role substring and required states. Returns bounded tree, parent IDs, supported actions and 60-second element IDs. Owned browser text_fields have distinct provider-bound IDs for ordinary HTML fields; role="entry" filters for fields. Field metadata describes line breaks and write scope. When extra owned pages/windows or frames make the owned provider unavailable, native nodes remain independently inspected; owned_browser reports unavailable/code and text_fields is empty. Cached owned fields still refuse unsupported scope; no mutation fallback. Empty matches and unavailable accessibility are distinct.

desktop_read_textA

Read accessible text and representation metadata, preserving whitespace. limit counts Unicode code points (default 16000, maximum 1000000), not bytes. Opaque embedded objects are not exact logical plain text: check plain_text_verification_supported. Normalization reads the bounded full field; a smaller limit does not enable streaming. Protected fields are refused. Generic native readback reports composition known=false, active=null; pending preedit is not checked.

desktop_typeA

Type into an editable element and verify exact readback. Native supported edits address the control in the background; native input chooses independent or foreground control automatically. Insert replaces the selection; replace changes the entire field. Preserves Unicode, LF and tabs without submitting. Owned HTML fields require complete grapheme boundaries. Exact readback does not confirm saving or application commit; inspect before an explicit commit or suggestion selection.

desktop_type_secretA

Replace an observed protected field. Never reads back or echoes the value, uses no clipboard, and reports dispatched only. Requires native protected EditableText or an owned password input with known inactive composition. Owned input rejects LF/CR and declared maxlength overflow; submission is separate. Applications control their own masking, which can change during input.

desktop_chooseA

Choose an observed list/radio/combo option or a visible table cell and verify selection. A table cell selects its whole row. Successful results verify selection only, including already-selected results. If selection alone was requested, stop. Otherwise verify the requested application effect; some controls apply on selection. If the effect did not occur, inspect for an advertised activation action or Apply/Open control, use it, then verify the outcome. Default makes the choice exclusive; extend preserves other list or table-row selections. Scroll offscreen rows into view and inspect again; reacquire after sorting/filtering. Open collapsed options and inspect first. range_end_id selects an inclusive range of at most 50 visible list items or table rows, using two endpoints from the same inspection; reversed endpoints are allowed. Every intermediate item must be inspected in unchanged order, and table endpoints use the same column. extend adds the range; otherwise it replaces the selection. Duplicate range labels, unsupported providers and unloaded gaps are refused. List replacement verifies one clear then each addition; an already exact set is unchanged. Limits: 50 range items and 500 selected items. Selection step receipts are historical verification, never instructions to retry a remainder.

desktop_pasteA

Paste through the shared CLIPBOARD when semantic typing is unavailable, automatically choosing independent or foreground input for the target. Chooses common app shortcut from window class, with optional override. Destination is unverified; inspect dialogs/read back. Terminals can execute pasted newlines.

desktop_press_keysA

Send a deliberate chord, e.g. ctrl+s, ctrl+plus, ctrl+minus, Return, Tab, Escape or Down. Punctuation uses X11 names (plus, equal, bracketleft, slash); implicit Shift follows the current layout. count is 1–20 complete press/release repetitions, default 1. Revalidates target identity, focus and input state between repetitions; stops on the first failure and never retries. Automatically chooses independent input where supported or foreground control otherwise. Refuses held input on the selected devices and preserves their keyboard mapping. Foreground fallback can change human focus. Unavailable symbols return UNSUPPORTED_KEYMAP; text belongs in desktop_type. When a final companion receipt is available, progress reports fully dispatched, possibly partial and not-started repetitions. Dispatched count is not application completion.

desktop_clickA

Click screenshot-image coordinates in the target window or its observed menus, automatically choosing independent or foreground pointer input after target validation. Rejects expired snapshots, changed window layout/identity and covered targets. Snapshot validity does not prove unchanged application content; observe again after content transitions before selecting a control.

desktop_scrollA

Scroll 1–20 wheel ticks at a point in the observed target, automatically choosing independent or foreground pointer input after validation. Read resulting state to confirm.

desktop_dragA

Drag between two observed points inside the same window, automatically choosing independent or foreground pointer input after validation; always attempts release of its own button. Use desktop_drag_to for another destination window.

desktop_focus_elementA

Request element focus for agent input; owned browser fields refuse active/unknown composition before focus. Native application callbacks can still change human focus. Inspect to confirm focused state.

desktop_invokeA

Invoke the sole action returned by inspect, or supply its exact action name. Native actions address the control without activating its window; application callbacks may bring windows forward. Multiple actions require an explicit choice; no click/press naming guess is needed for a single-action button. Completion means dispatch, not verified application outcome.

desktop_selectA

Select a text range using Unicode code-point offsets, or place the caret when equal; verify the result. Owned-browser HTML fields focus automatically after range validation. Native edits inside graphemes can be refused.

desktop_set_valueA

Set a numeric control within its inspected range and verify its accessibility numeric value. Displayed formatting and application commit may differ; inspect/read both, then explicitly commit only when intended.

desktop_set_checkedA

Set a checkable control to the requested state; avoid a blind toggle when it already matches.

desktop_set_expandedB

Expand or collapse a supported control and verify state. Reinspect newly exposed children.

desktop_windowA

Manage one window. move uses frame x/y; resize uses client width/height; workspace requires its index. fullscreen requests WM fullscreen; restore exits fullscreen/maximization/minimization; raise changes stacking without activation. Other actions take no extra parameters. Close reports an owned blocking dialog without confirming it. Geometry actions return fresh same-generation client/frame bounds and WM state; move/resize distinguish matched from nonmatching requests without upgrading dispatched effects. Restore compares captured pre-maximize bounds when observed geometry, state and size hints remain consistent; otherwise comparison is unknown. No saved geometry is forced, and unobserved external changes cannot be ruled out.

desktop_workspacesA

List workspaces, or switch to an existing index and verify the active workspace. Every dispatched switch expires this server’s screenshots, even when requesting the current workspace; observe again before using coordinates. External workspace changes between observations are not continuously tracked.

desktop_hoverA

Move the pointer to a recent observed point without clicking, automatically activating the target after validation; observe tooltips/submenus afterward.

desktop_drag_toA

Drag from a source into a second observed window, automatically activating the source after validating both endpoints. Coordinates refer to one screenshot. Verify transfer in the applications; dispatch does not prove a drop was accepted.

desktop_waitA

Wait up to timeout (0–10 seconds) for an observed condition. window_present/window_absent/window_active require only window_id, never a title in text; discover title matches with desktop_windows(query=...). text_equals/text_contains require only element_id and text. element_present/element_absent require window_id plus at least one name/role substring or states filter; they search native accessibility nodes, and absence requires complete coverage. pixels_stable requires window_id and optionally stable_for (0.1–10 seconds, at most timeout); it samples the client rectangle, not general application idleness. Omit parameters belonging to other condition types.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.7/5.0

Scored across 36 tools

Disambiguation4/5

Most tools target clearly distinct operations, and the detailed descriptions resolve boundary cases such as desktop_select vs desktop_choose or desktop_inspect vs desktop_read_text. A few diagnostic/status tools (desktop_status, desktop_report, desktop_doctor) and singular/plural window tools could still be confused at first glance, but not to the point of causing frequent misselection.

Naming Consistency4/5

All tool names share the desktop_ prefix and use lowercase snake_case, which provides a strong overall pattern. Most names are verb-led (desktop_click, desktop_set_value, desktop_open_browser), though a few noun-only names like desktop_windows, desktop_applications, and desktop_status are minor deviations from a strict verb_noun convention.

Tool Count2/5

36 tools is well above the 25-tool threshold and feels heavy even for a desktop automation server. Each tool is individually meaningful, but the set could be consolidated or grouped more tightly without losing essential functionality.

Completeness5/5

The tool surface covers the full desktop automation lifecycle: discovery, observation, inspection, input, window management, verification, and diagnostics/recovery. There are no obvious dead ends; every interaction has a corresponding observation or inspection tool, and failure/health handling is well supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues