MCP server for accessing the Unsplash photo API
Strong foundational quality with excellent schema definitions, comprehensive parameter descriptions, and consistent naming conventions. All 10 tools follow verb_noun patterns and have non-trivial descriptions (100+ chars). Input schemas are formally defined via Zod with proper type constraints, enums, min/max bounds, and descriptions. However, output schemas are not explicitly documented in the source code, only the tool names and input schemas are visible. Response formatting is configurable (markdown/json) but the actual shape of returned objects is not formally documented. Error handling exists (via error reporting feature flag) but recovery guidance is not evident in the code samples provided. Tool composition is clean, each tool has a single responsibility, though some could benefit from cross-tool chaining documentation.
Track a photo download and return the download information.
Get all photos from a specific Unsplash collection. Use this to retrieve photos from a curated collection. First use unsplash_search_collections to find collection IDs.
Retrieve detailed information about a specific Unsplash photo by its ID. This tool fetches complete metadata for a photo including dimensions, photographer info, EXIF data, location, tags, and download URLs.
Get statistics for a specific photo including views, downloads, and likes.
Get one or more random photos from Unsplash, optionally filtered by search query or orientation. This tool is perfect for getting inspiration, placeholder images, or diverse photo content. You can narrow the selection with search terms.
Output schemas are not formally documented. While input schemas are comprehensive with Zod validation, the response structure for each tool is not visible in the provided code. LLMs cannot plan downstream operations or parse results without knowing the shape of returned objects.
Error handling and recovery guidance not visible. The code shows errorReporting=true flag, but the actual error message format and recovery hints (e.g., 'Try search_users() first') are not documented in tool descriptions or error handling code samples.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 76 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 53 | - | v1 |
Get photos uploaded by a specific Unsplash user/photographer. Retrieve the portfolio of a photographer. Use unsplash_search_users first to find usernames.
Get a list of all photos from Unsplash, paginated and sorted.
Search for curated photo collections on Unsplash. Collections are curated sets of photos organized by theme, created by Unsplash users. Use this to find themed photo sets.
Search for photos on Unsplash by keywords with advanced filtering options. This tool searches through millions of high-quality, free-to-use photos from the Unsplash platform. You can filter by orientation, color, content safety level, and sort by relevance or recency.
Search for photographers and users on Unsplash. Find photographers by name or username to explore their portfolio.
Tool-chaining hints missing. While tool composition is clean, descriptions do not guide the agent on multi-step workflows. E.g., 'get_collection_photos' says 'First use unsplash_search_collections to find collection IDs', this is good, but similar hints are absent from search and get_user tools.
List tools (unsplash_list_photos) have minimal descriptions (37 chars: 'Get a list of all photos from Unsplash, paginated and sorted'). Descriptions should be 50-200 chars and explain WHEN to use this vs search_photos, or any prerequisites.
unsplash_download_photo lacks sufficient description context. The description 'Track a photo download and return the download information' does not clarify: Is this idempotent? Does it actually download bytes or just log the download? What does the response contain?