MCP server that gives Claude visual awareness of what happens on screen over time
claude-eyes has well-structured tool definitions with clear naming (verb_noun pattern) and comprehensive parameter schemas. All 9 tools have descriptions and typed input parameters with defaults. However, output schemas are not formally documented in the code, parameter descriptions lack actionable constraints (ranges, formats, examples), and error handling guidance is minimal. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Descriptions average ~150 chars, which is good, but lack dependency hints and recovery guidance.
Delete all frames and registry data for a session. Always call after analysis.
Recompose the bucket previews of an existing on-demand session with different parameters. Writes preview files under ``sessions/<session_id>/previews/`` and returns their metadata. Continuous buffer sessions are not addressable by this tool; use ``query_buffer`` instead to get preview metadata for the rolling buffer.
List frames of a session without stopping it. Safe on active sessions.
Query the rolling buffer for frames in a time window and return sampled frames + preview metadata. Time is relative to the buffer's start (``started_at``). Returns up to ``max_frames`` frames evenly spaced across the window, plus preview metadata if available.
Start the rolling-buffer continuous capture mode. Frames are captured at ``fps`` and kept for ``retention_s`` seconds (older frames are pruned). The buffer is also capped at ``disk_cap_mb`` to prevent runaway disk usage. Returns ``started_at`` and the effective configuration.
Output schemas not formally documented. Code shows return dicts but no JSON Schema definitions visible for tool responses. LLMs cannot plan downstream calls or extract fields reliably.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications in metadata. Tools like cleanup_session and trim_session are DESTRUCTIVE but lack annotations to guide agent behavior.
Parameter descriptions lack actionable constraints. E.g., fps, resolution_scale, retention_s, bucket_s have no min/max bounds, format specs, or valid ranges. LLMs may pass invalid values (negative fps, scale > 1.0, etc.).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Begin a new screen recording session. Returns a ``session_id`` used for every subsequent call. The session folder is created under the configured ``sessions_dir``. If ``region`` is given, ``region_dpr`` multiplies its coordinates before capture — use it when the region was computed in CSS pixels (e.g., from a browser) but the screen is captured in physical pixels (high-DPI / OS scaling).
Stop the rolling-buffer continuous capture and return final statistics.
Stop an active recording and return frame metadata. The session stays in the registry so ``list_frames`` / ``cleanup_session`` can still reach it. Call ``cleanup_session`` once the frame-analyzer subagent has returned.
Apply the active-range trim: delete frames outside the detected motion window and regenerate previews. Opt-in and destructive. Rejects the continuous-buffer directory name and any session still recording. Returns a structured error if no active range is detected (nothing to trim) or the session is unknown.
Error handling lacks recovery guidance. stop_recording and cleanup_session return error dicts but do not suggest next steps (e.g., 'Try list_frames() to verify session exists'). Agents cannot self-correct.
Descriptions lack dependency hints. E.g., cleanup_session says 'Always call after analysis' but does not explain what happens if called prematurely or what tools must run first. Agents cannot plan multi-step workflows.