Convert public web pages to PDF, images, Markdown, or JSON using one API key.
One address for any MCP client. No sign-in needed on this server.
1 read4 other
Grouped by tool name.
Odel charges nothing per call. The publisher may charge for its own service.
Turn any public web page into a PDF, a full-page screenshot, or clean Markdown — with one API key.
No browser farm to run, no headless Chrome to babysit. url-to-pdf renders pages on Cloudflare's infrastructure and hands you a download link. Use it from any MCP-compatible AI client (Claude Desktop, Cursor, and friends) by just talking, or call the HTTP API directly from your scripts.
POST with your x-api-key. Great for scripts, backends, and low-code platforms.prefers-color-scheme: dark.http(s) URLs are accepted; internal and reserved addresses are rejected at the edge.Add url-to-pdf to your client's MCP configuration. With Claude Desktop, Cursor, or any client that supports Streamable HTTP:
{
"mcpServers": {
"url-to-pdf": {
"type": "http",
"url": "https://url-pdf.hammbox.com/mcp",
"headers": { "x-api-key": "YOUR_API_KEY" }
}
}
}
That's it — no local install. Then just ask your assistant in natural language:
"Convert https://news.ycombinator.com to a PDF and give me the download link."
The client calls the tool, passes your key, and shows you the result.
Every render is a POST to a /tools/* endpoint with your key in the header.
# Web page → PDF
curl -X POST https://url-pdf.hammbox.com/tools/url-to-pdf \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{"url":"https://example.com","format":"A4"}'
# Full-page screenshot
curl -X POST https://url-pdf.hammbox.com/tools/url-to-screenshot \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{"url":"https://example.com","fullPage":true,"format":"png"}'
# Extract Markdown
curl -X POST https://url-pdf.hammbox.com/tools/url-to-markdown \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{"url":"https://example.com"}'
# Structured data as JSON
curl -X POST https://url-pdf.hammbox.com/tools/url-to-extract \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{"url":"https://example.com","maxLinks":50}'
# Mobile screenshot, retina, dark mode
curl -X POST https://url-pdf.hammbox.com/tools/url-to-screenshot \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{"url":"https://example.com","width":390,"height":844,"deviceScaleFactor":2,"darkMode":true,"blockAds":true}'
The response includes a downloadUrl valid for 1 hour:
{
"downloadUrl": "https://url-pdf.hammbox.com/f/pdf/<id>.pdf",
"contentType": "application/pdf",
"sizeBytes": 456494,
"title": "Example Domain",
"ttlSeconds": 3600,
"meta": { "format": "A4", "landscape": false },
"receipt": {
"renderId": "<uuid>",
"url": "https://example.com",
"finalUrl": "https://example.com/",
"capturedAt": "2026-10-09T06:20:11.482Z",
"durationMs": 2140,
"bytes": 456494,
"sha256": "9f2c…",
"format": "pdf",
"httpStatus": 200
}
}
Over MCP, artifacts of 1 MB or less are additionally returned inline next to the JSON above — as an image content block for screenshots, or an embedded resource for PDF / Markdown / JSON.
curl -O "<downloadUrl>"
| MCP tool | HTTP endpoint | What it does |
|---|---|---|
list_capabilities (free) | GET /openapi.json | Lists capabilities, prices, and where to buy a key |
url_to_pdf | POST /tools/url-to-pdf | Render a page to PDF |
url_to_screenshot | POST /tools/url-to-screenshot | Capture a full-page screenshot |
url_to_markdown | POST /tools/url-to-markdown | Extract the page as clean Markdown |
url_to_extract | POST /tools/url-to-extract | Structured JSON: title, description, canonical, language, main text, links |
url_to_pdf — url (required), format (A4 / Letter / Legal, default A4), landscape, printBackground, scale (0.1–2), margin, preferCssPageSize.
url_to_screenshot — url (required), fullPage (default true), format (png / jpeg), quality (0–1), selector (capture one element), clip ("x,y,width,height").
url_to_markdown — url (required), removeSelectors (e.g. ["nav",".ads","footer"]), keepImages.
url_to_extract — url (required), maxTextChars (500–200000, default 20000), maxLinks (0–500, default 100).
| Option | Range / values | What it does |
|---|---|---|
width / height | 320–3840 / 240–2160 | Viewport size (default 1280 × 900) |
deviceScaleFactor | 0.5–3 | Set 2 for retina / HiDPI output |
darkMode | boolean | Render with prefers-color-scheme: dark |
blockAds | boolean | Block requests to major ad and analytics domains |
hideCookieBanners | boolean | Remove cookie-consent looking elements |
clickSelector | CSS selector | Click before capturing (expand, dismiss modal, switch tab) |
waitUntil | load / domcontentloaded / networkidle0 / networkidle2 | Navigation wait condition (default networkidle2) |
waitForSelector | CSS selector | Wait for an element before capturing |
waitMs | 0–10000 | Extra settle time after load |
timeoutMs | 5000–100000 | Navigation timeout (default 45000) |
$5 / month — one subscription, one API key, all four render tools included. Billed and managed by Paddle (our Merchant of Record); cancel anytime from your Paddle customer portal.
Fair-use note: rendering runs on Cloudflare Browser Rendering. Under the free tier, a short burst of heavy concurrent load may be briefly rate-limited (HTTP 429) — just retry in a few seconds.
MIT