PDFOven
Generate PDFs and images from HTML, Markdown, URLs or JSON templates.
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": {
"pdfoven": {
"url": "https://pdfoven.com/mcp"
}
}
}Remote endpoints
https://pdfoven.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (7)
⚪render_pdf(html, markdown, url, template, template_id, ...)
Render a PDF from exactly one source: html, markdown, url, template (+data) or template_id (+data). Returns the PDF as a base64 embedded resource. Each successful call uses one render from the account's monthly quota; nothing is stored. Over quota or invalid input returns a tool error explaining why.
Input Schema
{
"type": "object",
"properties": {
"html": {
"type": "string",
"description": "HTML document or fragment to render."
},
"markdown": {
"type": "string",
"description": "Markdown to render."
},
"url": {
"type": "string",
"description": "Public http(s) URL to capture."
},
"template": {
"type": "string",
"description": "Inline Handlebars HTML template, filled with `data`."
},
"template_id": {
"type": "string",
"description": "ID of a saved template (from list_templates), filled with `data`."
},
"data": {
"type": "object",
"description": "JSON data for template or template_id."
},
"css": {
"type": "string",
"description": "Extra CSS to apply."
},
"options": {
"type": "object",
"properties": {
"format": {
"type": "string",
"enum": [
"A3",
"A4",
"A5",
"Letter",
"Legal",
"Tabloid"
]
},
"landscape": {
"type": "boolean"
},
"margin": {
"type": "string",
"description": "e.g. 0.5in, 12mm, 20px"
},
"print_background": {
"type": "boolean"
}
}
}
}
}⚪render_image(html, markdown, url, template, template_id, ...)
Render a PNG image (social card, certificate, chart) from exactly one source: html, markdown, url, template (+data) or template_id (+data). Returns the image inline. Each successful call uses one render from the monthly quota; nothing is stored.
Input Schema
{
"type": "object",
"properties": {
"html": {
"type": "string",
"description": "HTML document or fragment to render."
},
"markdown": {
"type": "string",
"description": "Markdown to render."
},
"url": {
"type": "string",
"description": "Public http(s) URL to capture."
},
"template": {
"type": "string",
"description": "Inline Handlebars HTML template, filled with `data`."
},
"template_id": {
"type": "string",
"description": "ID of a saved template (from list_templates), filled with `data`."
},
"data": {
"type": "object",
"description": "JSON data for template or template_id."
},
"css": {
"type": "string",
"description": "Extra CSS to apply."
},
"options": {
"type": "object",
"properties": {
"width": {
"type": "integer",
"description": "Viewport width in pixels, 16-4000. Default 1280."
},
"height": {
"type": "integer",
"description": "Viewport height in pixels, 16-4000. Default 800."
},
"full_page": {
"type": "boolean",
"description": "Capture the full scrollable page instead of the viewport."
},
"device_scale_factor": {
"type": "number",
"description": "Pixel density, 1-3: 1 standard, 2 retina."
}
}
}
}
}🟢list_templates
List every template saved in the PDFOven account, newest first, as JSON with id, name, engine and sample_data. Use an id with render_pdf/render_image (template_id) or get_template. Does not use render quota.
Input Schema
{
"type": "object",
"properties": {}
}🟢get_template(template_id)
Fetch one saved template in full: content, css, sample_data and page_options. Use it before update_template to see the current body. Does not use render quota.
Input Schema
{
"type": "object",
"properties": {
"template_id": {
"type": "string",
"description": "Template ID, e.g. tpl_1a2b3c (from list_templates)."
}
},
"required": [
"template_id"
]
}🟡create_template(name, engine, content, css, sample_data, ...)
Save a new reusable template to the account and return its id. Templates are capped per plan (Free 3); at the cap this returns a tool error. Render it later with render_pdf or render_image and template_id plus data.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Display name, 1-100 characters."
},
"engine": {
"type": "string",
"enum": [
"handlebars",
"markdown"
],
"description": "How content is interpreted. Default handlebars."
},
"content": {
"type": "string",
"description": "Template body: Handlebars HTML ({{field}}, {{#each items}}) or Markdown."
},
"css": {
"type": "string",
"description": "CSS applied when the template renders."
},
"sample_data": {
"type": "object",
"description": "Example JSON data, used for previews and as documentation of the fields."
},
"page_options": {
"type": "object",
"description": "Default PDF page settings for this template.",
"properties": {
"format": {
"type": "string",
"enum": [
"A3",
"A4",
"A5",
"Letter",
"Legal",
"Tabloid"
]
},
"landscape": {
"type": "boolean"
},
"margin": {
"type": "string",
"description": "e.g. 0.5in, 12mm, 20px"
},
"printBackground": {
"type": "boolean"
}
}
}
},
"required": [
"name",
"content"
]
}🟡update_template(template_id, name, engine, content, css, ...)
Change a saved template. Only the fields you pass are replaced; others keep their current values. Future renders with this template_id use the new version immediately.
Input Schema
{
"type": "object",
"properties": {
"template_id": {
"type": "string",
"description": "Template ID, e.g. tpl_1a2b3c (from list_templates)."
},
"name": {
"type": "string",
"description": "Display name, 1-100 characters."
},
"engine": {
"type": "string",
"enum": [
"handlebars",
"markdown"
],
"description": "How content is interpreted. Default handlebars."
},
"content": {
"type": "string",
"description": "Template body: Handlebars HTML ({{field}}, {{#each items}}) or Markdown."
},
"css": {
"type": "string",
"description": "CSS applied when the template renders."
},
"sample_data": {
"type": "object",
"description": "Example JSON data, used for previews and as documentation of the fields."
},
"page_options": {
"type": "object",
"description": "Default PDF page settings for this template.",
"properties": {
"format": {
"type": "string",
"enum": [
"A3",
"A4",
"A5",
"Letter",
"Legal",
"Tabloid"
]
},
"landscape": {
"type": "boolean"
},
"margin": {
"type": "string",
"description": "e.g. 0.5in, 12mm, 20px"
},
"printBackground": {
"type": "boolean"
}
}
}
},
"required": [
"template_id"
]
}🔴delete_template(template_id)
Permanently delete a saved template. This cannot be undone, and renders that reference its template_id will fail afterwards. Confirm with the user first.
Input Schema
{
"type": "object",
"properties": {
"template_id": {
"type": "string",
"description": "Template ID, e.g. tpl_1a2b3c (from list_templates)."
}
},
"required": [
"template_id"
]
}Community
Evidence