docweave-mcp
Generate and read PDFs for AI agents: a generate_pdf and a read_pdf tool, priced per document.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"docweave-mcp": {
"command": "npx",
"args": [
"@docweave/mcp"
]
}
}
}Runnable packages
0.2.0stdioRemote endpoints
https://docweave.dev/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (2)
⚪generate_pdf(source, options, idempotencyKey)
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.
Input Schema
{
"type": "object",
"properties": {
"source": {
"type": "object",
"description": "What to render. Provide exactly one of: html, url, or (template|templateId) with data.",
"properties": {
"type": {
"type": "string",
"enum": [
"html",
"url",
"template"
],
"description": "Source kind: 'html' for a raw HTML string, 'url' for a public web page, 'template' for a template filled with data."
},
"html": {
"type": "string",
"description": "Raw HTML to render (when type is 'html')."
},
"url": {
"type": "string",
"description": "Public URL to render (when type is 'url'). Private/internal addresses are blocked."
},
"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)."
},
"data": {
"type": "object",
"description": "Values bound into the template's {{ placeholders }}.",
"additionalProperties": true
}
},
"required": [
"type"
]
},
"options": {
"type": "object",
"description": "Optional page and print settings.",
"properties": {
"format": {
"type": "string",
"enum": [
"A4",
"A3",
"Letter",
"Legal",
"Tabloid"
],
"description": "Paper size. Defaults to A4."
},
"landscape": {
"type": "boolean",
"description": "Use landscape orientation. Defaults to false."
},
"margin": {
"type": "string",
"description": "Page margin, e.g. '20mm' or '1in'."
},
"printBackground": {
"type": "boolean",
"description": "Render background colors and images. Defaults to true."
}
}
},
"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."
}
},
"required": [
"source"
]
}Output Schema
{
"type": "object",
"properties": {
"bytesBase64": {
"type": "string",
"description": "The generated PDF, base64-encoded."
},
"byteSize": {
"type": "number",
"description": "Size of the PDF in bytes."
},
"pageCount": {
"type": "number",
"description": "Number of pages in the PDF."
}
},
"required": [
"bytesBase64"
],
"description": "The generated document."
}🟢read_pdf(source, options, idempotencyKey)
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.
Input Schema
{
"type": "object",
"properties": {
"source": {
"type": "object",
"description": "The PDF to read. Provide exactly one of: url or base64.",
"properties": {
"type": {
"type": "string",
"enum": [
"url",
"base64"
],
"description": "'url' for a public PDF URL, 'base64' for inline PDF bytes."
},
"url": {
"type": "string",
"description": "Public URL of the PDF (when type is 'url'). Private/internal addresses are blocked."
},
"base64": {
"type": "string",
"description": "Base64-encoded PDF bytes (when type is 'base64')."
}
},
"required": [
"type"
]
},
"options": {
"type": "object",
"description": "Optional read settings.",
"properties": {
"format": {
"type": "string",
"enum": [
"markdown",
"text"
],
"description": "Output shape. Defaults to markdown."
},
"maxPages": {
"type": "number",
"description": "Cap the number of pages extracted."
}
}
},
"idempotencyKey": {
"type": "string",
"description": "A stable key. Repeat calls with the same key return the stored result instead of re-reading or re-billing."
}
},
"required": [
"source"
]
}Output Schema
{
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "Extracted text in the requested format."
},
"pageCount": {
"type": "number",
"description": "Number of pages read."
},
"needsOcr": {
"type": "boolean",
"description": "True when the PDF is scanned (no text layer) and needs OCR."
}
},
"required": [
"content"
],
"description": "The extracted document."
}Community
Evidence