Screen Control
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SCREEN_CONTROL_TOKEN | No | Optionally set the auth token for the server. By default it is auto-generated and written to .token file on startup. |
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
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_infoA | Server/PC status: screen size, monitors, OCR availability, failsafe and game-mode state. |
| ocr_screenA | Read the screen as text with coordinates (OCR). Best for menus, dialogs, editors, chat — anything text-heavy. Returns lines plus per-item centers for clicking. 'region' is an optional "x,y,w,h" crop. |
| screenshotA | Capture the screen as an image (for vision-capable models). 'region' = "x,y,w,h"; 'scale' 0-1 shrinks to save bandwidth; 'quality' 1-100. |
| motion_diffA | Text-only change detection between two snapshots: which tiles of the screen changed and their clickable centers. Use to verify an action had an effect or to spot movement without OCR/vision. |
| mouseB | Control the mouse. action: move | click | scroll | drag | down | up. click uses x,y (optional = current pos); drag goes (x1,y1)->(x,y); scroll uses 'clicks' (negative = down). Physical-pixel coordinates. |
| keyboardA | Control the keyboard. action: press | hotkey | type | down | up. press: key name (enter, f11, a...); hotkey: keys=["ctrl","s"]; type: Unicode-safe text. expect_hwnd refuses (409) the action if the foreground window differs — use it to avoid typing into the wrong app. |
| get_heldA | List currently held keys/buttons and watchdog status. |
| release_allA | Release every held key and button (emergency reset). Safe to call anytime. |
| window_childrenA | List child controls of a window (class name, title, hwnd). Useful for classic Win32 apps with real child controls (e.g. an Edit box) — target the child hwnd in window_post. Modern WinUI/UWP apps have no classic children; use window_input_mode to detect them. |
| list_windowsA | List visible top-level windows: hwnd, title, process name, pid. |
| focus_windowB | Bring a window to the foreground (focus it). |
| window_input_modeA | Classify how a window receives input BEFORE posting to it: postmessage (classic Win32) | uia (WinUI/UWP: focus+SendInput fallback) | focused (already foreground) | invalid (dead window). |
| window_postB | Send input to a window in the background. action: type | key | hotkey | click | scroll. mode: auto (recommended — routes WinUI/UWP apps through the focused SendInput path automatically) | background | focused. Note: 'uia' routing focuses the window (unavoidable for modern apps). |
| window_capture_ocrA | Capture a background window WITHOUT focusing it; with ocr=1 (default) returns its text directly — read other apps' content while the user works. |
| close_windowA | Close a window safely (WM_CLOSE after verification — never blind Alt+F4). Pass expect_title/expect_process to refuse (409) if the window changed. |
| gameB | Game mode for FPS-style control. action: start (clip cursor to center) | move (relative camera look by dx,dy pixels * sensitivity) | stop | heartbeat (keep-alive during long holds). Combine with keyboard() down/up for WASD and mouse(action='down'/'up') for shooting/building. |
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 16 tools
Each tool targets a distinct mechanism—screen capture, OCR, motion detection, global input, window-specific input, window introspection, and game mode. Potentially similar tools like ocr_screen and window_capture_ocr are cleanly separated by foreground screen versus background window. No two tools appear to do the same job.
Most tools follow a readable snake_case convention with verb-first names like list_windows, focus_window, close_window, and release_all. A few noun-style names like mouse, keyboard, and game, plus window_post and window_capture_ocr, are minor deviations but still clear and predictable.
Sixteen tools is on the higher end but each earns its place across capture, OCR, input, window management, and game mode. The count feels slightly heavy but remains well-scoped for a desktop automation server.
Core workflows are well covered: screen capture, OCR, change detection, global and background input, window discovery, focusing, posting, and closing. Minor gaps like querying the current cursor position or window geometry are absent but most operations have workarounds.