nested-display-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 19 tools
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.
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.
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.
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.