MCP stdio server for the Attest evidence-grade web capture API.
Single tool with well-structured schema and clear naming. Tool name 'capture_url' follows verb_noun convention and is unambiguous. Description (169 chars) is within baseline range (p10=34, p90=392) and explains WHAT, WHEN, and output. Input schema uses Zod with proper types, enums, and constraints. All 5 parameters have descriptions. Viewport object is properly nested with min/max constraints. Tool annotations present (readOnlyHint, destructiveHint, idempotentHint, openWorldHint). Output documented as JSON with structuredContent. However, output schema structure not formally documented in code, LLM must infer from response. Error handling returns isError flag with text message but lacks recovery guidance or categorization.
Capture a public HTTP(S) page as PNG, PDF or rendered HTML and return a signed artifact URL, SHA-256 digest, timestamp and optional public evidence receipt.
Output schema not formally documented. Response structure (content array, structuredContent object) is inferred from code but not declared in tool metadata. LLMs cannot plan downstream operations without knowing return fields.
Error handling lacks recovery guidance. Errors return raw message text (e.g. 'Attest Capture 401: request_failed') without actionable next steps. LLM cannot determine if error is retryable, user-fixable, or fatal.
Parameter descriptions lack format/constraint details. 'url' description says 'Public HTTP or HTTPS page to render' but does not specify timeout, size limits, or blocked domains. 'viewport' lacks guidance on common values or when to use full_page vs custom viewport.
API key exposed via environment variable without server-side validation. Placeholder key in Dockerfile suggests key is checked at tool invocation time, not at initialize. If key is missing, error occurs during tool call rather than at startup.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2025-06-18+ | v2 |
No pagination or result limits documented. Tool returns single artifact per call, but description does not clarify max file size, timeout duration, or what happens if page is unreachable or extremely large.