Official MCP server for the Snapshot Site API — screenshots, visual diff, and AI webpage analysis for Claude, Cursor, ChatGPT, and MCP-compatible clients.
This MCP server provides three well-defined tools for webpage capture and analysis. All tools have explicit schemas with proper type definitions and descriptions. Naming is clear and action-oriented. However, there are notable gaps: output schemas are undocumented (tools return raw API responses without field definitions), error handling lacks recovery guidance, and some parameter descriptions could be more actionable. The server correctly includes tool annotations (readOnlyHint=true, idempotentHint=true) which is modern practice. Overall structure is solid but falls short of production-grade polish.
Capture and analyze a webpage with Snapshot Site. Useful for content summaries, SEO metadata inspection, headings extraction, and quality signals such as blank pages or captcha detection.
Compare two live webpage states or two PNG captures and return before, after, diff, plus mismatch metrics. Useful for QA, release review, and visual regression workflows.
Capture a live webpage with Snapshot Site. Use this for screenshots, PDFs, HTML capture, device-sized renders, cookie hiding, custom JS injection, and export retrieval.
Output schemas are not documented. Tools return raw SnapshotSiteClient response objects without field definitions. LLMs cannot infer the structure of results (e.g., does screenshot return {url, format, size} or {downloadUrl, renderedImage, metadata}?). This forces agents to guess at response field names and breaks tool chaining.
Error handling provides no recovery guidance. If a screenshot fails (e.g., invalid URL, timeout, network error), the tool response does not guide the LLM on what to do next. No error categorization (retryable vs user-fixable vs fatal), no suggestions for alternatives, no actionable error messages.
Parameter descriptions lack actionable constraint details. Examples: 'delay' says 'Delay in seconds before capture (0-10)' but does not explain WHY or WHEN to use it. 'hide' says 'CSS selectors to hide' but does not clarify format (single selector vs comma-separated vs JSON array). 'language' and 'country' lack guidance on valid format (e.g., ISO 639-1 vs full language names, ISO 3166-1 alpha-2 codes).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 63 | 2025-06-18+ | v2 |
The 'compare' tool accepts nested 'before' and 'after' objects with overlapping parameters. Both objects have identical properties (url, imageUrl, width, height, delay, fullSize, hideCookie, javascriptCode, hide, language). This duplication is error-prone and wastes schema real estate. Consider flattening to 'beforeUrl', 'afterUrl' with shared capture settings, or document why the nested structure is necessary.
Parameter 'convert' in screenshot tool is unexplained. The schema includes a 'convert' boolean but the description does not clarify what it converts (format conversion? compression? encoding?). This violates the rule that every parameter needs a clear description explaining what it controls.
Tool descriptions do not state what the tools return at a high level. The 'screenshot' tool description lists capabilities but never says 'Returns a download URL, base64 image data, or HTML snapshot depending on format.' Agents cannot determine which tool to select without knowing the output shape.
Missing pagination or result limits documentation. While these tools do not return lists, they do return potentially large binary payloads (images, PDFs, HTML). No guidance on maximum file sizes, timeout expectations, or chunking strategies if results are large.