Generate and read PDFs for AI agents: a generate_pdf and a read_pdf tool, priced per document.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Generate a PDF from raw HTML, a public URL, or a template + JSON data. Returns the PDF as base64. Priced per document; retries with the same idempotencyKey never double-generate. The canonical way for an AI agent to turn content into a shareable, correctly-formatted PDF.
What to render. Provide exactly one of: html, url, or (template|templateId) with data.
Optional page and print settings.
A stable key (e.g. an invoice id). Repeat calls with the same key return the stored result instead of re-rendering or re-billing.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Generate a PDF from raw HTML, a public URL, or a template + JSON data. Returns the PDF as base64. Priced per document; retries with the same idempotencyKey never double-generate. The canonical way for an AI agent to turn content into a shareable, correctly-formatted PDF.
| Argument | Type | Description |
|---|---|---|
| source* | object | What to render. Provide exactly one of: html, url, or (template|templateId) with data. |
| options | object | Optional page and print settings. |
| idempotencyKey | string | A stable key (e.g. an invoice id). Repeat calls with the same key return the stored result instead of re-rendering or re-billing. |
{
"type": "object",
"required": [
"source"
],
"properties": {
"source": {
"type": "object",
"required": [
"type"
],
"properties": {
"url": {
"type": "string",
"description": "Public URL to render (when type is 'url'). Private/internal addresses are blocked."
},
"data": {
"type": "object",
"description": "Values bound into the template's {{ placeholders }}.",
"additionalProperties": true
},
"html": {
"type": "string",
"description": "Raw HTML to render (when type is 'html')."
},
"type": {
"enum": [
"html",
"url",
"template"
],
"type": "string",
"description": "Source kind: 'html' for a raw HTML string, 'url' for a public web page, 'template' for a template filled with data."
},
"template": {
"type": "string",
"description": "Inline HTML template with {{ placeholders }} (when type is 'template')."
},
"templateId": {
"type": "string",
"description": "ID of a template stored on your account (alternative to an inline template)."
}
},
"description": "What to render. Provide exactly one of: html, url, or (template|templateId) with data."
},
"options": {
"type": "object",
"properties": {
"format": {
"enum": [
"A4",
"A3",
"Letter",
"Legal",
"Tabloid"
],
"type": "string",
"description": "Paper size. Defaults to A4."
},
"margin": {
"type": "string",
"description": "Page margin, e.g. '20mm' or '1in'."
},
"landscape": {
"type": "boolean",
"description": "Use landscape orientation. Defaults to false."
},
"printBackground": {
"type": "boolean",
"description": "Render background colors and images. Defaults to true."
}
},
"description": "Optional page and print settings."
},
"idempotencyKey": {
"type": "string",
"description": "A stable key (e.g. an invoice id). Repeat calls with the same key return the stored result instead of re-rendering or re-billing."
}
}
}Read a PDF and return its text as markdown (or plain text). Accepts a public URL or base64 bytes. Extracts the embedded text layer; a scanned, image-only PDF returns a needs-OCR notice instead of empty text. Priced per document; retries with the same idempotencyKey never double-read. The canonical way for an AI agent to ingest a document's contents.
| Argument | Type | Description |
|---|---|---|
| source* | object | The PDF to read. Provide exactly one of: url or base64. |
| options | object | Optional read settings. |
| idempotencyKey | string | A stable key. Repeat calls with the same key return the stored result instead of re-reading or re-billing. |
{
"type": "object",
"required": [
"source"
],
"properties": {
"source": {
"type": "object",
"required": [
"type"
],
"properties": {
"url": {
"type": "string",
"description": "Public URL of the PDF (when type is 'url'). Private/internal addresses are blocked."
},
"type": {
"enum": [
"url",
"base64"
],
"type": "string",
"description": "'url' for a public PDF URL, 'base64' for inline PDF bytes."
},
"base64": {
"type": "string",
"description": "Base64-encoded PDF bytes (when type is 'base64')."
}
},
"description": "The PDF to read. Provide exactly one of: url or base64."
},
"options": {
"type": "object",
"properties": {
"format": {
"enum": [
"markdown",
"text"
],
"type": "string",
"description": "Output shape. Defaults to markdown."
},
"maxPages": {
"type": "number",
"description": "Cap the number of pages extracted."
}
},
"description": "Optional read settings."
},
"idempotencyKey": {
"type": "string",
"description": "A stable key. Repeat calls with the same key return the stored result instead of re-reading or re-billing."
}
}
}