MCP server for searching Unsplash photos
Single tool with adequate naming and schema, but description lacks LLM-optimization guidance. Parameter descriptions are present but generic. No error handling guidance, no output schema documentation, and no indication of pagination support despite returning lists. Tool name 'search_photos' correctly uses verb_noun pattern. Input schema is complete with types and defaults, but output is documented only in the docstring, not as a structured schema definition visible to the MCP protocol layer.
Search for Unsplash photos Args: query: Search keyword page: Page number (1-based) per_page: Results per page (1-30) order_by: Sort method (relevant or latest) color: Color filter (black_and_white, black, white, yellow, orange, red, purple, magenta, green, teal, blue) orientation: Orientation filter (landscape, portrait, squarish) Returns: List[UnsplashPhoto]: List of search results containing photo objects with the following properties: - id: Unique identifier for the photo - description: Optional text description of the photo - urls: Dictionary of available image URLs in different sizes - width: Original image width in pixels - height: Original image height in pixels
Output schema not formally documented in MCP protocol layer. Tool docstring describes UnsplashPhoto structure, but no structured schema is exposed to clients. LLMs cannot plan downstream operations without knowing return field names and types.
No error handling guidance. HTTPStatusError and generic exceptions are caught and re-raised, but no actionable recovery messages. LLM receives raw HTTP errors with no hint about retry eligibility, rate limits, or authentication issues.
Parameter descriptions lack constraint details. 'per_page: Results per page (1-30)' states the range but does not explain what happens if the value exceeds 30 (code clamps to 30, but LLM is not told). 'color' and 'orientation' list examples instead of enums, inviting hallucinated values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
No pagination metadata in response. Tool returns a list but does not indicate total count, next_cursor, or whether more results exist. Large result sets could exhaust context; LLM has no way to request the next page.
Tool description does not explain when to use it or what makes it distinct from other image search tools. Description is functional but lacks LLM-optimization guidance (WHAT, WHEN, prerequisites). At 194 chars, it is within baseline but could be more actionable.