URL → PNG/JPEG/PDF capture API + MCP server for AI agents (Claude, Cursor, Copilot)
Three tools with complete input schemas and descriptions. Naming is clear and action-oriented (take_screenshot, describe_page, capture_pdf). Descriptions are well-written (100-150 chars each) and explain use cases. Input parameters have types, descriptions, and constraints (width 320-3840, format enums). However, output schemas are not documented in the MCP tool definitions, the code shows Playwright returns buffers/MIME types, but the MCP schema does not declare what fields/types the agent receives. Error handling is present in the HTTP layer (isAllowedUrl validation, cache logic) but not surfaced in tool-level error guidance. No tool annotations (readOnlyHint, idempotentHint) despite all three being read-only operations.
Render a public URL as an A4 PDF. Useful for archiving, reports, or printing.
Screenshot a URL and extract key text metadata (title, heading, meta description) in a single call. Returns both the visual screenshot and structured text so you can understand what a page is about without a separate vision pass.
Capture a public URL and return it as an image. Use this to visually inspect a live webpage, verify a deployment, check UI layout, or capture evidence of page content.
Output schemas not documented. Tools return image buffers and MIME types, but MCP schema does not declare return structure (e.g., {image: Buffer, mimeType: string, width: number, height: number}). LLMs cannot plan downstream operations without knowing what fields to expect.
No tool annotations. All three tools are read-only and idempotent, but lack readOnlyHint and idempotentHint annotations. This prevents agents from reasoning about safety and retry behavior.
Error guidance missing from tool descriptions. The HTTP layer validates URLs (private IPs, DNS resolution, protocol), but tool descriptions do not explain what errors can occur or how to recover (e.g., 'If URL is blocked, ensure it is public and resolvable').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
describe_page output structure unclear. Description says 'Returns both the visual screenshot and structured text', but the schema does not specify what 'structured text' fields are returned (title, heading, meta description are mentioned but not in schema).
full_page parameter default behavior not explained. Default is false (viewport only), but description does not clarify the difference or when to use true. LLMs may not understand the trade-off (full page = slower, larger output).