Puptra PDF Snapshot
Server Details
One-call URL-to-PDF and full-page screenshot API with Puppeteer's page.pdf()/page.screenshot()...
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 5 tools
links, markdown, pdf, and screenshot each produce a clearly distinct output format, so boundaries are mostly clean. However, snapshot bundles HTML plus a base64 screenshot with optional Markdown and accessibility tree, directly overlapping with screenshot and markdown, which could cause an agent to pick snapshot when a single-format call would do.
All five names are single lowercase nouns (links, markdown, pdf, screenshot, snapshot) following one uniform, predictable convention. There is no mixing of camelCase, snake_case, or verb styles.
Five tools is well-scoped for a page-capture service, and each format (links, markdown, pdf, screenshot, snapshot) earns its place. Nothing feels redundant enough to trim, nor is the surface thin.
The surface covers the main capture outputs for a rendering/snapshot domain: links, text/Markdown, PDF, image, and a combined snapshot with status/title. Raw HTML-only retrieval is only available via snapshot with its extra screenshot cost, a minor gap agents can work around.
Available Tools
5 toolslinksEvery link on the page as absolute URLs, with optional same-domain-only and visiBInspect
Every link on the page as absolute URLs, with optional same-domain-only and visible-only filters. Price: $0.005 a call.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The page (https). Set url or html, not both. | |
| html | No | HTML to render instead of a URL. | |
| cookies | No | ||
| viewport | No | ||
| userAgent | No | ||
| addStyleTag | No | ||
| bestAttempt | No | ||
| gotoOptions | No | ||
| addScriptTag | No | ||
| authenticate | No | ||
| waitForTimeout | No | ||
| waitForSelector | No | ||
| emulateMediaType | No | ||
| visibleLinksOnly | No | Only links visible on the page (default false) | |
| allowResourceTypes | No | ||
| allowRequestPattern | No | ||
| rejectResourceTypes | No | ||
| setExtraHTTPHeaders | No | ||
| excludeExternalLinks | No | Only same-origin links (default false) | |
| rejectRequestPattern | No | ||
| setJavaScriptEnabled | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does add a genuinely useful behavioral fact beyond the schema — the $0.005 per-call price — plus the enforced absolute-URL output normalization. However, it says nothing about authentication, rendering/timeout behavior, or the shape of the returned collection for a 21-parameter scraping tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core capability and its filters front-loaded before the cost note. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 21-parameter browser-rendering tool with no annotations and no output schema, the description is thin: it omits what the returned link data looks like (array of strings vs. objects), how rendering/interaction options affect results, and any authentication or cost-caveat guidance beyond price.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 19% across 21 parameters. The description restates the two documented filters (excludeExternalLinks, visibleLinksOnly) in natural language but leaves the other 19 parameters (cookies, viewport, authenticate, gotoOptions, waitForSelector, etc.) unexplained anywhere beyond bare names. With low coverage the description should compensate, and it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource: it returns every link on a page as absolute URLs, which cleanly distinguishes it from the rendering-oriented siblings (markdown, pdf, screenshot, snapshot). It does not explicitly name those siblings or contrast outputs, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions the two available filters (same-domain-only, visible-only), which implies the typical filtering use cases, but never says when to pick this tool over snapshot/markdown or what prerequisites (JS rendering, auth) are needed. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
markdownThe page's rendered content as MarkdownCInspect
The page's rendered content as Markdown. Price: $0.005 a call.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The page (https). Set url or html, not both. | |
| html | No | HTML to render instead of a URL. | |
| cookies | No | ||
| viewport | No | ||
| userAgent | No | ||
| addStyleTag | No | ||
| bestAttempt | No | ||
| gotoOptions | No | ||
| addScriptTag | No | ||
| authenticate | No | ||
| waitForTimeout | No | ||
| waitForSelector | No | ||
| emulateMediaType | No | ||
| allowResourceTypes | No | ||
| allowRequestPattern | No | ||
| rejectResourceTypes | No | ||
| setExtraHTTPHeaders | No | ||
| rejectRequestPattern | No | ||
| setJavaScriptEnabled | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the output format and cost, but says nothing about rendering behavior, authentication, rate limits, or any of the 19 configuration parameters' effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose and followed by cost information, with no filler. It is appropriately sized, though extremely sparse given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter tool with nested objects, no annotations, no output schema, and 11% schema coverage, the description is grossly incomplete. Key parameters like url, html, cookies, authenticate, and viewport go entirely unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 11% across 19 parameters, and the description adds no parameter-level meaning whatsoever. It fails to compensate for the severely under-documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and output format: the page's rendered content as Markdown. This is clear enough to distinguish it from siblings like links, pdf, screenshot, and snapshot, but it does not explicitly differentiate itself from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the sibling tools. The only extra sentence is about pricing, not usage context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdfRender a URL or HTML to PDF with Puppeteer's pageBInspect
Render a URL or HTML to PDF with Puppeteer's page.pdf() options (format letter by default, scale, margins, header/footer templates, printBackground, pageRanges). Price: $0.005 a call.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The page to render (https). Set url or html, not both. | |
| html | No | HTML to render instead of a URL. | |
| cookies | No | Cookies to set before loading | |
| deliver | No | {store: "1d"|"7d"|"30d"|"365d", name?}: keep the PDF in file storage and answer with metadata instead of bytes | |
| viewport | No | {width,height,deviceScaleFactor,isMobile,hasTouch,isLandscape}; default 1920x1080 | |
| userAgent | No | ||
| pdfOptions | No | Puppeteer page.pdf() options as documented at pptr.dev/api/puppeteer.pdfoptions. | |
| addStyleTag | No | [{content|url}] | |
| bestAttempt | No | Proceed when awaited events fail or time out | |
| gotoOptions | No | {waitUntil: load|domcontentloaded|networkidle0|networkidle2, timeout} | |
| addScriptTag | No | [{content|url}] | |
| authenticate | No | {username,password} | |
| waitForTimeout | No | Extra wait in ms (0-120000) | |
| waitForSelector | No | {selector, visible?, hidden?, timeout} | |
| emulateMediaType | No | screen|print | |
| allowResourceTypes | No | ||
| allowRequestPattern | No | ||
| rejectResourceTypes | No | e.g. ["image"] | |
| setExtraHTTPHeaders | No | Extra HTTP headers | |
| rejectRequestPattern | No | ||
| setJavaScriptEnabled | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses pricing ($0.005/call) and the default format (letter), which is useful operational context. However, it doesn't address auth requirements, rate limits, or what the response looks like (bytes vs the deliver-stored metadata), leaving meaningful behavioral gaps for a 21-param rendering tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences that are front-loaded with the core purpose; the pricing note is a useful addition. Slightly crowded by the parenthetical field list, but no real waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 21-parameter, deeply nested rendering tool with no annotations and no output schema, the description is thin. It omits return format, error behavior (bestAttempt), and auth context. The rich schema compensates for parameter detail, but behavioral completeness is only minimally met.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 76% and the schema itself thoroughly documents pdfOptions, cookies, deliver, viewport, etc. The description adds only a brief enumeration of pdfOptions fields and the letter default, which is largely redundant with the schema, so it sits at the baseline for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Render) and resource (URL or HTML to PDF) and names the underlying engine (Puppeteer's page.pdf()). It distinguishes itself from siblings like screenshot/markdown by producing PDF, though it doesn't explicitly contrast with them. Clear but no active sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. The description does not say when to prefer this over screenshot, snapshot, markdown, or links, nor when to use url vs html (that hint lives in the schema). No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotCapture a PNG, JPEG or WebP screenshot with Puppeteer's pageCInspect
Capture a PNG, JPEG or WebP screenshot with Puppeteer's page.screenshot() options (fullPage, clip, omitBackground, quality 0-100 for jpeg/webp only). Price: $0.005 a call.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The page to capture (https). Set url or html, not both. | |
| html | No | HTML to render instead of a URL. | |
| cookies | No | ||
| deliver | No | {store, name?}: keep the image in file storage | |
| selector | No | Screenshot this element instead of the page | |
| viewport | No | {width,height,deviceScaleFactor,...}; default 1920x1080 | |
| userAgent | No | ||
| scrollPage | No | Scroll the page before capturing (lazy content) | |
| addStyleTag | No | ||
| bestAttempt | No | ||
| gotoOptions | No | {waitUntil, timeout} | |
| addScriptTag | No | ||
| authenticate | No | ||
| waitForTimeout | No | ||
| waitForSelector | No | ||
| emulateMediaType | No | ||
| screenshotOptions | No | Puppeteer page.screenshot() options as documented at pptr.dev/api/puppeteer.screenshotoptions. | |
| allowResourceTypes | No | ||
| allowRequestPattern | No | ||
| rejectResourceTypes | No | ||
| setExtraHTTPHeaders | No | ||
| rejectRequestPattern | No | ||
| setJavaScriptEnabled | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden for a 23-parameter tool. It does disclose one genuinely useful fact (price: $0.005 a call) and the jpeg/webp-only constraint on quality, but says nothing about authentication, rate limits, failure behavior, or what the response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences that are front-loaded with the core capability and format list, then the pricing caveat. Nothing is padded, though the parenthetical enumerates options the schema already documents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 23-parameter, nested-schema tool with no annotations, no output schema, and low schema coverage, the description is far too thin. An agent cannot tell how the image is returned (deliver vs inline) or how the many rendering/filtering parameters interact.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 35% across 23 parameters, so the description would need to compensate, yet it only name-drops fullPage, clip, omitBackground, and quality. Cookies, deliver, selector, bestAttempt, waitForSelector, and the many request-filtering options get no explanation anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Capture) plus resource (screenshot) and enumerates the supported output formats (PNG, JPEG, WebP), so an agent knows exactly what the tool produces. It does not explicitly differentiate itself from the pdf or snapshot siblings, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to pick this over pdf, snapshot, or links, and no prerequisites or exclusions are stated. The only usage-relevant detail is the note that quality applies to jpeg/webp only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshotOne call, several formatsBInspect
One call, several formats: rendered HTML content and a base64 screenshot (plus optional Markdown and accessibility tree), with the page's status and title. Price: $0.005 a call.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The page to snapshot (https). Set url or html, not both. | |
| html | No | HTML to render instead of a URL. | |
| cookies | No | ||
| deliver | No | {store, name?}: keep the snapshot's screenshot in file storage | |
| formats | No | At least two of: content, screenshot, markdown, accessibilityTree (default content+screenshot) | |
| viewport | No | ||
| userAgent | No | ||
| addStyleTag | No | ||
| bestAttempt | No | ||
| gotoOptions | No | ||
| addScriptTag | No | ||
| authenticate | No | ||
| waitForTimeout | No | ||
| waitForSelector | No | ||
| emulateMediaType | No | ||
| screenshotOptions | No | Puppeteer screenshot options for the snapshot's screenshot format | |
| allowResourceTypes | No | ||
| allowRequestPattern | No | ||
| rejectResourceTypes | No | ||
| setExtraHTTPHeaders | No | ||
| rejectRequestPattern | No | ||
| setJavaScriptEnabled | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does add real value: it enumerates what comes back (HTML, base64 screenshot, optional Markdown/accessibility tree, status, title) and discloses cost at $0.005 per call, which is useful for budget-aware agents. It says nothing about auth requirements, error/failure behavior (e.g. bestAttempt semantics), rate limits, or what happens on a partially failed render.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with the differentiator ('one call, several formats') and then lists outputs and price; every clause carries information. Slightly dense with the parenthetical, but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 22-parameter tool with no output schema and only 23% schema description coverage, the description is far too thin. It partially covers return values, which compensates for the missing output schema, but leaves the bulk of the parameter surface and key constraints (url vs html exclusivity, minimum format count, best-effort behavior) unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 23% across 22 parameters, so the description must compensate and largely does not. It touches the formats concept (content, screenshot, markdown, accessibilityTree) and mentions the screenshot output, but the other ~18 params (cookies, viewport, gotoOptions, waitForSelector, allow/reject patterns, authenticate, deliver, etc.) get no mention beyond what the sparse schema text already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the concrete outputs (rendered HTML content, base64 screenshot, optional Markdown and accessibility tree) plus page status/title, so the agent knows exactly what the call produces. It implicitly positions itself against siblings like screenshot and markdown by offering 'one call, several formats', but never explicitly states that it is the composite alternative to those single-format tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'One call, several formats' implies the usage condition (use when you need multiple formats at once rather than separate calls to screenshot/markdown), but this is left to inference. There is no explicit when-to-use/when-not-to-use guidance, no mention of the 'at least two formats' constraint that governs the call, and no routing advice relative to the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- First observed
links - First observed
markdown - First observed
pdf - First observed
screenshot - First observed
snapshot
Related MCP Connectors
Pixel-perfect webpage screenshots rendered in a real browser, full-page or viewport, via one POST.
Screenshot, PDF and HTML-to-image rendering API so Claude and Cursor can see any web page.
Screenshot, PDF and HTML-to-image rendering API so Claude and Cursor can see any web page.
Screenshot any website with one API call PNG, JPEG, WebP, or PDF. Custom viewports, device emulation, ad blocking, dark mode, and smart caching.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceCaptures full-page screenshots and PDFs from any URL using Chromium rendering, with pay-per-call via x402 micropayments.MIT
- AlicenseAqualityAmaintenanceScreenshot, visual-diff, and AI page-analysis API for AI agents. Capture any URL as PNG, JPEG, WebP, PDF, or HTML, diff two versions of a page to catch visual regressions, and get an AI summary of what a page contains.352 npm1MIT
- AlicenseNot gradedqualityBmaintenanceTurn HTML or a URL into a pixel-accurate PDF in a single tool call.MIT
- AlicenseAqualityCmaintenanceCapture screenshots, generate PDFs, and render HTML to images via AI agents. Supports batch capture, geo-targeting, async webhooks, and CSS/JS injection.1147 npm7MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.