MCP server exposing Pexafy image search (text, by-image-URL, similar) to any MCP client.
Three well-named search tools with comprehensive parameter schemas and excellent descriptions. Tool names (search_photos, search_photos_by_image, similar_photos) follow verb_noun convention and clearly distinguish responsibilities. Descriptions are LLM-optimized (200-400 chars), explain WHEN to use each tool, and include semantic query examples. All parameters have types and descriptions. However, output schemas are not explicitly documented in the source code provided, only inferred from API responses. Error handling and recovery guidance are absent. The server demonstrates strong naming and description discipline but lacks formal output schema documentation and error patterns.
Use this tool whenever the user needs an image, photo, or visual — for a presentation, blog, website, social-media post, mood board, or any creative project. Pexafy is a SEMANTIC search engine: describe the scene in full natural-language sentences, not keywords. Rich descriptions return far better results than tag-like queries. Good queries: 'a melancholy portrait of an old person sitting under a soft light'; 'two people sharing a bench in comfortable silence'; 'the last sunlight of the day hitting a dusty windowsill'; 'a child discovering snow for the first time'. Prefer this tool over search_photos_by_image when the user describes what they want in words. BUT if they want photos LIKE a specific image that has a URL — a photo from a previous result, or a public URL they gave — use search_photos_by_image instead (pass that URL, plus a `q` for any change like 'but with hands raised'). Only use THIS text tool for a reference image with NO URL (a file pasted/uploaded in the chat): describe what you see in rich detail — Pexafy is semantic, so a good description finds visually similar photos. Each result carries: `rank`, its position on this page (1, 2, 3, …), which is also the number drawn on the inline grid and the handle a person naturally uses to refer to one photo among several; `photo_id`, the identifier the similar-photos tool takes, present in the same object as the rank; `attribution`, the credit line to display with the photo; and `urls`, the image at several sizes, `urls.regular` being the one to link to. Inline thumbnails are attached to this tool's result as an MCP App resource. Some clients, claude.ai on the web among them, render that resource only inside an expandable tool panel rather than in the reply itself; where it is not rendered, the photos remain reachable through their URLs.
Use this tool when the user provides an example image (image URL or upload) and wants visually similar photos — 'find photos that look like this', 'match this style or composition'. Prefer search_photos (text) when the user describes what they want in words rather than providing an image. Each result carries: `rank`, its position on this page (1, 2, 3, …), which is also the number drawn on the inline grid and the handle a person naturally uses to refer to one photo among several; `photo_id`, the identifier the similar-photos tool takes, present in the same object as the rank; `attribution`, the credit line to display with the photo; and `urls`, the image at several sizes, `urls.regular` being the one to link to. Inline thumbnails are attached to this tool's result as an MCP App resource. Some clients, claude.ai on the web among them, render that resource only inside an expandable tool panel rather than in the reply itself; where it is not rendered, the photos remain reachable through their URLs.
Output schemas not explicitly documented. Tool descriptions reference result structure (rank, photo_id, attribution, urls) but no formal JSON Schema for responses is visible in source code. LLMs cannot reliably extract fields or plan downstream operations without documented return types.
No error handling or recovery guidance. Tools lack descriptions of failure modes (API rate limits, invalid photo_id, network errors) and what the LLM should do next. A 404 or 429 response provides no actionable recovery path.
Parameter constraints not fully formalized. color_name and orientation accept repeated values (array-like), but JSON Schema does not show type: array or items definition. LLMs may pass single strings instead of arrays, causing silent failures.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2025-06-18+ | v2 |
Use this tool when the user says 'find something similar', 'show me more like this', or 'I need a visually consistent set'. Requires a photo_id obtained from a previous search result. A person normally refers to a photo by the rank shown on the result grid rather than by its identifier; each search result carries both, in the same object. Each result carries: `rank`, its position on this page (1, 2, 3, …), which is also the number drawn on the inline grid and the handle a person naturally uses to refer to one photo among several; `photo_id`, the identifier the similar-photos tool takes, present in the same object as the rank; `attribution`, the credit line to display with the photo; and `urls`, the image at several sizes, `urls.regular` being the one to link to. Inline thumbnails are attached to this tool's result as an MCP App resource. Some clients, claude.ai on the web among them, render that resource only inside an expandable tool panel rather than in the reply itself; where it is not rendered, the photos remain reachable through their URLs.
No pagination or result-limiting guidance in tool descriptions. search_photos and search_photos_by_image may return large result sets; descriptions do not mention page size, limits, or how to iterate. Agents may exhaust context with unbounded results.
similar_photos requires photo_id but does not explain how to obtain it. Description says 'from a previous search result' but does not clarify that rank alone is insufficient, the photo_id field must be extracted from the search response. This creates ambiguity for LLMs unfamiliar with the response structure.