An MCP server that provides tools to fetch and retrieve images from the Picsum Photos service
Single-tool server with solid schema definition and proper naming. Tool name 'get_image' follows verb_noun pattern and is unambiguous. Input schema is complete with proper JSON Schema typing (integer with min/max bounds, nested object with optional properties). Output schema is documented via Zod (url field with z.url() validation). Tool annotations are present and correct (readOnlyHint, idempotentHint). However, description is brief (16 characters) and lacks context about use cases, constraints, and return value details. Parameter descriptions exist but could be more explicit about constraints. No error handling guidance documented, the code returns a generic 'Image not found' text response without actionable recovery steps. Output field naming could be clearer, 'structuredContent' is non-standard; 'image_url' or 'image' would align better with field-naming conventions.
Get image by ID
Tool description is only 16 characters ('Get image by ID'), too minimal to guide LLM selection. Missing context about when to use this tool, what image database is being accessed (picsum.photos), and what the return value represents.
Error response lacks actionable guidance. When 'Image not found' is returned, the LLM has no recovery path, it should be told to try a different ID range or call a list_images tool if one existed. Current response is a bare text message with no structured error details.
Output field naming mismatch. Tool returns 'url' as a raw JSON field, but the response structure uses non-standard 'structuredContent' wrapper. Downstream tools expecting 'image_url' or 'download_url' will need to know to extract from structuredContent.url, increasing LLM reasoning overhead.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | 2025-06-18+ | v2 |
Parameter 'scale' is marked optional but lacks explicit guidance on behavior when omitted. Description states 'If not provided, original width is used' but only for the nested width/height fields, not the scale object itself. This ambiguity could lead LLMs to pass incomplete scale objects.
No documented output schema in the tool definition visible in the source. While Zod defines outputSchema with a url field, this schema is not exposed to the MCP protocol in a way that's visible to clients. Output structure is implicit in the code (returns {content, structuredContent, _meta}).