Enhanced MCP server for screenshot management with remote capture and AI integration
ExpoSnap defines 2 screenshot management tools with explicit schemas visible in src/mcp-schemas.ts. Both tools have action-verb names and basic descriptions. However, critical gaps exist: parameter descriptions are missing entirely (limit parameter in list_screenshots has no description explaining its purpose or constraints), output schemas are not documented anywhere in the codebase, error handling lacks recovery guidance, and there is no tool-level composition guidance. The tools are simple read-only operations, which reduces complexity, but the implementation falls short of production baselines for parameter documentation and output clarity. Tools are explicitly registered via CallToolRequestSchema handler in src/mcp-tools.ts, so no inference penalty applies.
Get the most recent Expo screenshot without taking a new one
List recent Expo screenshots with timestamps and descriptions
Parameter descriptions are missing. The 'limit' parameter in list_screenshots has a type (number) and constraints (min: 1, max: 50) in JSON Schema, but no description text explaining what 'limit' controls or when the LLM should adjust it. Per pattern:tool-description, every parameter must have a non-empty description.
Output schema is not documented. Tool handlers in src/tool-handlers.ts return objects with 'content' arrays containing 'type', 'text', 'data', and 'mimeType' fields, but there is no schema definition visible in the tool registration or MCP server setup. LLMs cannot plan downstream operations without knowing the response structure. Per pattern:tool, every tool must document its output schema.
Error messages lack recovery guidance. When no screenshots are available, handlers return 'No screenshots available.' Without actionable next steps ('Try uploading a screenshot first via the HTTP endpoint' or similar), LLMs cannot self-correct. Per pattern:recovery-guide, errors must tell the agent what to do next.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 40 | - | v1 |
No pagination guidance in tool descriptions. The list_screenshots description states it returns 'recent screenshots' but does not explain: Does it return all? Does it respect the limit? What happens if there are more than 50 screenshots? Per pattern:paginated-result, tools returning lists should document pagination behavior and the limit parameter should be clearly explained.
Tool descriptions are too brief. 'Get the most recent Expo screenshot without taking a new one' (72 chars) and 'List recent Expo screenshots with timestamps and descriptions' (63 chars) are at the lower end of the 10-1024 character baseline (median 194 chars). These lack context for when to use each tool vs. alternatives and what fields are returned. Per pattern:tool-description, descriptions should answer: What does it do? When use instead of alternatives? What does it return?