Skip to main content
Glama
gashcrumb

nested-display-mcp

by gashcrumb

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": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
display_openA

Starts a nested sway compositor (visible window on the host desktop, with its own Xwayland) and optionally launches an app inside it. Input and screenshots are routed by this server, so no host focus is ever required. Returns the display id and its inner WAYLAND_DISPLAY/DISPLAY values.

display_listA

Lists open displays with their ids, sizes, sockets and app pids.

display_closeA

Terminates the app and the nested compositor. Pass all=true to close every display.

screenshotA

Captures the composited frame (grim) as PNG - exact pixels, palette already resolved, includes Wayland and X11 clients. Coordinates in the image are the same coordinates used by click/pointer_move.

screenshot_windowC

Captures the window's rectangle from the composited frame.

windowsA

Lists windows inside the display: id, title, app_id/class, shell (xwayland or xdg_shell), rect, focus and pids. Rects are in output coordinates, matching screenshots.

focusB

Focuses a window inside the display (needed before typing into some apps).

pointer_moveA

Moves the pointer to absolute output coordinates. X11 targets use XTest; Wayland targets use the compositor's virtual pointer (unaccelerated).

pointer_move_relativeA

Relative pointer motion (compositor-side, unaccelerated). Use this for relative-only consumers: emulated PS/2 mice (86Box, QEMU), games that capture the pointer, or camera controls.

clickC

Clicks a mouse button, optionally at absolute output coordinates (or window-relative with relative=true). Uses XTest for X11 targets and the virtual pointer for Wayland targets.

dragA

Presses the left button at 'from', moves to 'to' in steps, releases. X11/Xwayland targets only (the virtual pointer protocol cannot hold a button).

scrollC

Scrolls vertically (dy) and horizontally (dx) at the given position or the current pointer.

typeA

Types text into the focused (or given) window. X11/Xwayland targets use XTest, Wayland targets use wtype. Do not mix the two paths in one session: keymap uploads can garble XTest text.

keyA

Presses a key or chord, e.g. 'Return', 'ctrl+alt+Return', 'shift+Tab', 'F10'. Uses xdotool names for X11 targets and xkb keysyms for Wayland targets.

fullscreenC

Makes the focused window fullscreen (or restores it).

resizeB

Changes the display resolution. The host window follows, and screenshots/coordinates use the new size.

wait_for_windowA

Waits until a window whose title, app_id or class matches the regex exists. Returns the window.

window_closeB

Asks the compositor to close a window (as if clicking its close button).

waitA

Sleeps for the given milliseconds (use sparingly, e.g. after launching an app).

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 19 tools

Disambiguation5/5

Every tool targets a distinct action or resource: display lifecycle (open/list/close), capture (full frame vs window rect), pointer motion (absolute vs relative), button actions (click/drag/scroll), text input vs key chords, and window management. The descriptions explicitly resolve the few near-neighbors (screenshot vs screenshot_window, pointer_move vs pointer_move_relative, type vs key) by stating when each path applies.

Naming Consistency3/5

The set mixes conventions: noun_verb prefixed lifecycle tools (display_open/display_list/display_close), bare verbs/nouns (click, drag, scroll, type, key, focus, windows, screenshot), and multiword forms like screenshot_window, pointer_move_relative, wait_for_window. It remains readable and somewhat grouped, but there is no single predictable pattern an agent can rely on.

Tool Count4/5

Nineteen tools is on the heavy side but each maps to a real capability in a rich domain (display lifecycle, screenshots, window management, four input modalities, timing). No obvious duplicates or filler, though a couple of tools (wait, fullscreen) are modest additions to an otherwise dense input surface.

Completeness4/5

The surface covers the full lifecycle: create/list/close displays, capture, enumerate/focus/close/wait for windows, and drive pointer, buttons, scroll, text, and keys, plus resolution changes. Minor gaps remain—no per-window move/resize (only display resize), and drag is documented as X11-only, limiting Wayland interaction workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues