Connect an agent
webcapture ships a first-party MCP endpoint at /mcp: point any MCP client at it and the URL you name comes back as a PDF, PNG, JPEG, WebP, or Markdown file in one render_pdf call. The endpoint authenticates with a regular Bearer API key, the same key the REST API uses, and every plan including Free includes it.
What you need
One API key. Mint one in the dashboard, export it, and keep it out of the chat:
export WEB_CAPTURE_API_KEY="wc_..."
The key spends your monthly renders exactly like a REST call. Keep it in an environment variable or a client config file, never in a conversation, and rotate it from the dashboard when an agent should lose access.
The tool catalogue
Three tools, exactly what tools/list returns. Arguments, types, and defaults come from the server card, so this table cannot drift from the endpoint.
render_pdf
Render a web page to PDF, PNG, JPEG, WebP or Markdown. Returns the download URL of the finished file; fetch it with your API key as the Bearer token. One tool call: the answer carries the finished file's download URL; no job polling.
| Argument | Type | Required | Notes |
|---|---|---|---|
url | string | yes | Absolute http(s) URL of the page to render |
format | string: pdf | png | jpeg | webp | markdown | no | Output format, defaults to pdf |
landscape | boolean | no | Landscape orientation, defaults to false |
colorScheme | string: light | dark | site | no | Render the page as if the visitor prefers light or dark mode; site keeps the page's own choice. Defaults to light |
fullPage | boolean | no | Capture the full scrollable page. Defaults to true; set false for a viewport-only capture. Applies to png, jpeg and webp |
viewport | object: width, height | no | Layout viewport in pixels before capture, 200 to 7680 each. Applies to png, jpeg and webp |
blockAds | boolean | no | Filter ad and tracker requests with community filter lists and hide leftover ad slots. Defaults to false; cosmetic hiding applies to pdf, png, jpeg and webp |
get_usage
Report the calling key's monthly quota state: tier, calendar month, renders used, monthly limit, remaining renders, and the date the count resets.
This tool takes no arguments.
get_pricing
List the pricing tiers with their monthly price in USD and their included monthly conversions.
This tool takes no arguments.
Talk to it over plain HTTP
The endpoint is JSON-RPC 2.0 over one POST. The full conversation, replayable as printed (the test suite replays these exact bodies):
curl -s https://webcapture.io/mcp \
-H "authorization: Bearer $WEB_CAPTURE_API_KEY" \
-H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"your-client","version":"0"}}}'
No key needed. The answer names protocolVersion 2025-06-18 and serverInfo webcapture 1.0.0.
curl -s https://webcapture.io/mcp \
-H "authorization: Bearer $WEB_CAPTURE_API_KEY" \
-H "content-type: application/json" \
-d '{"jsonrpc":"2.0","method":"notifications/initialized"}'
A notification carries no id, so the endpoint answers 202 with an empty body. No key needed.
curl -s https://webcapture.io/mcp \
-H "authorization: Bearer $WEB_CAPTURE_API_KEY" \
-H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
No key needed. Returns render_pdf, get_usage and get_pricing, in that order.
curl -s https://webcapture.io/mcp \
-H "authorization: Bearer $WEB_CAPTURE_API_KEY" \
-H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"render_pdf","arguments":{"url":"https://example.com/","format":"pdf"}}}'
Needs the key. The answer carries the finished file's downloadUrl; there is no polling.
The download URL answers on GET with the same Bearer key, and the file stays available until the artifact passes your plan's retention window (printed on the pricing page).
Bridge it into a desktop client
Desktop clients that only speak stdio connect through mcp-remote; clients with native HTTP and header support connect directly. Fragments checked 2026-11-03 against mcp-remote 0.16.0. Native header support differs by client version, and the mcp-remote bridge is the fallback that works everywhere.
{
"mcpServers": {
"webcapture": {
"command": "npx",
"args": ["-y", "mcp-remote@0.16.0", "https://webcapture.io/mcp",
"--header", "Authorization: Bearer ${WEB_CAPTURE_API_KEY}"]
}
}
}
claude mcp add --transport http webcapture https://webcapture.io/mcp \
--header "Authorization: Bearer ${WEB_CAPTURE_API_KEY}"
{
"mcpServers": {
"webcapture": {
"url": "https://webcapture.io/mcp",
"headers": { "Authorization": "Bearer ${WEB_CAPTURE_API_KEY}" }
}
}
}
{
"servers": {
"webcapture": {
"type": "http",
"url": "https://webcapture.io/mcp",
"headers": { "Authorization": "Bearer ${env:WEB_CAPTURE_API_KEY}" }
}
}
}
What does not work yet
- Clients that connect only through OAuth connectors (ChatGPT developer mode is the visible one) cannot connect:
/mcpauthenticates with a static Bearer key and the site runs no OAuth server yet. - There is no MCP tool that mints, lists, or revokes keys. Key management stays in the dashboard, so an agent can never create credentials through this endpoint.
- Renders and downloads spend quota like any REST call; there is no separate MCP tier.
In the browser, without a key
In Chrome 149 and later, the try-it form on the free URL to PDF tool registers itself as a render_pdf tool an in-page agent can call. Anonymous fair-use limits apply, exactly like the form itself.
Troubleshooting
Every symptom below quotes the endpoint's answer verbatim.
| Symptom | What it means | What to do |
|---|---|---|
401 {"error":"unauthorized: missing or invalid api key"} | tools/call ran without a valid key | send authorization: Bearer on every call; initialize and tools/list never need one |
-32602 "arguments.url is required" | the call's arguments missed url | pass an absolute http(s) URL |
-32602 "format must be one of: pdf, png, jpeg, webp, markdown" | format is misspelled | use the enum verbatim, or omit it for the pdf default |
200 isError "monthly quota exhausted: ..." | the key's account used its monthly renders | wait for the reset date in the message or upgrade from the dashboard billing page; the answer is an error result, not an HTTP error |
200 isError "render queue is full; retry in 30 seconds" | the render pool is saturated | retry after 30 seconds |
429 {"error":"too many requests, slow down.","retryAfterSec":N} | more than 120 requests a minute from one address | wait retryAfterSec seconds and retry |
| the download URL answers 401 | the GET lacked the Bearer header | fetch downloads with the same key that called render_pdf |
| the download URL answers 404 days later | the artifact passed your plan's retention window | re-render; the window per plan is printed on the pricing page |
Questions agents ask
Is my API key safe to paste into an agent config?
The key spends your monthly renders exactly like an API call, so treat it like a quota password: keep it in an environment variable or a config file the client reads, and never paste it into a chat. Rotating or deleting the key in the dashboard cuts every agent using it off at once.
Which clients can connect today?
Anything that speaks JSON-RPC over HTTP and can send one Authorization header connects directly, and stdio-only desktop clients connect through the mcp-remote bridge. Clients that only support OAuth connectors cannot connect yet, because the endpoint authenticates with a static Bearer key and the site runs no OAuth server.
What can an agent do to my account?
render_pdf spends quota; get_usage and get_pricing are read-only. There is no MCP tool that mints, lists, or revokes keys, so an agent can never create or steal credentials through this endpoint.
Does the MCP endpoint cost extra?
No. MCP renders count against your plan's monthly quota exactly like REST renders, and every plan including Free includes the endpoint and all five output formats.
Render your first page in seconds
Mint a key, POST a URL, and the finished document comes back in the same response; pass ?wait=false for a job ticket with poll and download URLs. The first 50 renders a month are free, and there is no credit card. Not ready for a key? The free URL to PDF tool renders public pages without one.