MCP server that lets LLMs take screenshots on Wayland via xdg-desktop-portal
Two tools with complete schemas and descriptions. take_screenshot has excellent, detailed guidance (>200 chars) with clear usage patterns and fallback logic. list_windows is concise but adequate. Both tools have proper JSON Schema with typed properties. However, parameters lack individual descriptions (interactive and window_title have descriptions, but this is inconsistent with rubric baseline of 100% of A+ tools having param descriptions). No output schema documented for list_windows. No error handling guidance. No tool annotations (readOnlyHint, destructiveHint). Naming is clear and verb-forward. Overall solid foundation but missing production-grade polish.
List all currently open windows across the desktop, including their titles, application names, and geometries. Call this before take_screenshot to discover the exact window_title to capture.
Capture the current desktop or a specific window by title and return the screenshot image. IMPORTANT: Always prefer capturing a specific window via window_title — a fullscreen capture may include unrelated windows or miss windows in the background. Only fall back to a fullscreen capture (no window_title) as a last resort, e.g. when no suitable window exists, you need the whole desktop, or window capture failed. Use list_windows first if you don't know the exact title.
No output schema documented for list_windows. Rubric requires 'Document the output schema. LLMs need to know what fields to expect.' Response structure is inferred from code (title, app_name, rect with width/height/x/y) but not formally declared in tool definition.
Missing tool annotations. Neither tool declares readOnlyHint=true, despite both being read-only operations. Rubric rewards tool annotations (readOnlyHint/destructiveHint/idempotentHint) as current spec pattern. This helps agents reason about safety and retry logic.
No error recovery guidance. Error responses use generic -32000 codes with error.to_string(). Rubric requires: 'Error responses must tell the LLM what to do next.' Example: if window capture fails, should agent retry, call list_windows first, or fall back to fullscreen?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
take_screenshot accepts fallback parameter names ('title', 'window') alongside 'window_title' for compatibility, but this is not documented in the schema. Rubric: 'When a parameter could be an ID, name, email, or position, suffix it with the type.' Undocumented aliases invite confusion.
Protocol version hardcoded as '2025-03-26' in initialize response. Current spec is 2026-07-28. This is a minor version drift but indicates the server may not track spec updates.