da-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DISPLAY | No | X11 display (Linux only) | |
| DA_MCP_LOG | No | Log level (trace|debug|info|warn|error), default info | info |
| WAYLAND_DISPLAY | No | Wayland display socket | |
| DA_MCP_TEST_MODE | No | mock skips real native calls in tests; e2e tests skip when set | |
| DA_MCP_OCR_BACKEND | No | OCR backend: cli (default) or wasm | cli |
| DA_MCP_TESSERACT_BIN | No | Path to tesseract binary, default tesseract | tesseract |
| DA_MCP_SCREENSHOT_BACKEND | No | Force a screenshot backend (node-screenshots | screenshot-desktop | windows-cli); default auto-detect |
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 |
|---|---|
| da_screenshotA | Capture a PNG screenshot of the primary display (when displayId is null/undefined) or a specific display id (0..2147483647). |
| da_ocrC | Run OCR (Tesseract) on a display and return recognized text plus classified UI elements. |
| da_list_displaysA | List connected displays with id, bounds, scale factor, rotation, and primary flag. |
| da_window_listA | List all visible top-level OS windows. Returns one WindowInfo per window with |
| da_window_focusA | Bring a top-level OS window to the foreground so subsequent da_click / da_type / da_key land on it. Resolves the window either by |
| da_wait_for_windowA | Block until a window with a matching title appears in |
| da_get_mouse_positionA | Return the current cursor position as { x, y } in screen coordinates. |
| da_move_mouseC | Move the cursor to absolute (x, y) screen coordinates. |
| da_clickB | Click a mouse button (defaults to "left", count 1). When x/y are given, the cursor is moved first. |
| da_click_textA | Click the on-screen element whose text label matches |
| da_find_textA | Locate the on-screen element whose text label matches |
| da_wait_for_textA | Block until |
| da_verify_pixelsA | Block until a pixel-level predicate holds on the next screenshot, or |
| da_double_clickB | Double-click the left mouse button. Moves to (x, y) first when provided. |
| da_dragB | Drag from (x1, y1) to (x2, y2). Button defaults to "left"; non-left buttons are accepted in the schema but currently ignored. |
| da_draw_pathA | Draw a multi-point path with the mouse by tracing through |
| da_scrollA | Scroll the wheel at the current (or given) cursor position by (dx, dy) pixel deltas. Positive dy = down, positive dx = right. |
| da_typeA | Type a string at the current keyboard focus. Empty string is a no-op. Optional per-char delay (ms). |
| da_keyA | Press a key by name, optionally with modifiers (e.g. {"key":"c","modifiers":["ctrl"]} for Ctrl+C). holdMs > 0 issues a press-hold-release. |
| da_launchB | Launch a program by name or absolute path. argv[0] is required. cwd, env, timeoutMs, and detached are optional. |
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 20 tools
Each tool targets a distinct action and resource: mouse positioning vs. clicking vs. dragging, text finding vs. clicking text vs. waiting for text, window listing vs. focusing vs. waiting. Even similar tools like da_find_text and da_click_text are clearly differentiated by whether they click, and da_move_mouse vs. da_drag is clarified by the button-hold behavior.
All tools share the da_ prefix and snake_case, but the pattern varies: most are verb_noun (da_move_mouse, da_list_displays), some are bare verbs (da_click, da_scroll, da_key), and a few are object-first (da_window_list, da_window_focus) or verb_prep_noun (da_wait_for_text, da_wait_for_window). This mix is readable but not fully predictable.
20 tools is on the high side, but the desktop automation domain genuinely requires coverage for mouse, keyboard, windows, displays, OCR, screenshots, and launching. Every tool earns its place and the count feels justified rather than bloated.
The surface covers core desktop automation workflows well: input, text location, window focus, waiting, and launching. Minor gaps exist—no window resize/move/close, no clipboard access, no region-specific screenshot capture—but agents can work around these without major dead ends.