PDFOven
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Generate PDFs and images from HTML, Markdown, URLs or JSON templates.
| Author | com.pdfoven |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 2813 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"PDFOven": {
"url": "https://pdfoven.com/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (13)
render_pdfRender 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.
Parameters:
css— string — Extra CSS to apply.url— string — Public http(s) URL to capture.data— object — JSON data for template or template_id.html— string — HTML document or fragment to render.options— objectmarkdown— string — Markdown to render.template— string — Inline Handlebars HTML template, filled with `data`.template_id— string — ID of a saved template (from list_templates), filled with `data`.
Hints: read-only no · destructive no · idempotent yes · open-world yes
render_imageRender a PNG image from exactly one source: html, markdown, url (a website screenshot), template (+data) or template_id (+data). Built-in 1200x630 social cards: tpl_og_article, tpl_og_product and tpl_og_announcement. Returns the image inline. Each successful call uses one render from the monthly quota; nothing is stored.
Parameters:
css— string — Extra CSS to apply.url— string — Public http(s) URL to capture.data— object — JSON data for template or template_id.html— string — HTML document or fragment to render.options— objectmarkdown— string — Markdown to render.template— string — Inline Handlebars HTML template, filled with `data`.template_id— string — ID of a saved template (from list_templates), filled with `data`.
Hints: read-only no · destructive no · idempotent yes · open-world yes
merge_pdfsJoin 2-50 PDFs into one, in order, optionally picking pages from each. Returns the merged PDF as a base64 resource. Uses one render from the monthly quota.
Parameters:
files(required) — arrayfilename— string
Hints: read-only no · destructive no · idempotent yes · open-world yes
split_pdfSplit a PDF. Send pages to extract one PDF, ranges for one PDF per range (returned as a zip), or every to split into chunks of N pages. Uses one render.
Parameters:
file(required) — object — The PDF to split.every— integer — Split into parts of this many pages.pages— string — Pages like "1-3,5,8-" or "last". Ranges can run backwards ("last-1") to reverse order.ranges— array — One output PDF per range.
Hints: read-only no · destructive no · idempotent yes · open-world yes
compress_pdfMake a PDF smaller by recompressing and downscaling large images and cleaning unused data. Returns the original unchanged if it can't be made smaller. Uses one render.
Parameters:
file(required) — object — The PDF to compress.level— string — low keeps the most quality; high makes the smallest file. Default medium.remove_metadata— boolean — Also strip title, author and XMP metadata.
Hints: read-only no · destructive no · idempotent yes · open-world yes
watermark_pdfStamp text (Latin characters) or a PNG/JPEG image onto a PDF's pages: centred and diagonal, tiled, or in a corner. Uses one render.
Parameters:
file(required) — object — The PDF to watermark.text— string — Watermark text, up to 5 lines.color— string — Hex text color, e.g. #c8155f.image— object — PNG or JPEG image instead of text.pages— string — Pages like "1-3,5,8-" or "last". Ranges can run backwards ("last-1") to reverse order.opacity— numberposition— stringrotation— number — Degrees. Defaults to the page diagonal for center and tile.
Hints: read-only no · destructive no · idempotent yes · open-world yes
list_pdf_form_fieldsread-onlyList a fillable PDF's form fields: name, type, current value, options and page. Use the names with fill_pdf_form. Does not use render quota.
Parameters:
file(required) — object — The PDF form.
Hints: read-only yes · destructive no · idempotent yes · open-world yes
fill_pdf_formFill a PDF form's fields by name (text, checkboxes as true/false, radio and dropdown options) and optionally flatten it so it can't be edited. Unknown field names are an error with suggestions. Uses one render.
Parameters:
file(required) — object — The PDF form.fields(required) — object — Field name to value: string, number, boolean, or a list for multi-select fields.strict— boolean — Default true. False skips unknown field names.flatten— boolean — Make the filled form read-only.
Hints: read-only no · destructive no · idempotent yes · open-world yes
list_templatesread-onlyList 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.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_templateread-onlyFetch 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.
Parameters:
template_id(required) — string — Template ID, e.g. tpl_1a2b3c (from list_templates).
Hints: read-only yes · destructive no · idempotent yes · open-world no
create_templateSave 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.
Parameters:
name(required) — string — Display name, 1-100 characters.content(required) — string — Template body: Handlebars HTML ({{field}}, {{#each items}}) or Markdown.css— string — CSS applied when the template renders.engine— string — How content is interpreted. Default handlebars.sample_data— object — Example JSON data, used for previews and as documentation of the fields.page_options— object — Default PDF page settings for this template.
Hints: read-only no · destructive no · idempotent no · open-world no
update_templateChange 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.
Parameters:
template_id(required) — string — Template ID, e.g. tpl_1a2b3c (from list_templates).css— string — CSS applied when the template renders.name— string — Display name, 1-100 characters.engine— string — How content is interpreted. Default handlebars.content— string — Template body: Handlebars HTML ({{field}}, {{#each items}}) or Markdown.sample_data— object — Example JSON data, used for previews and as documentation of the fields.page_options— object — Default PDF page settings for this template.
Hints: read-only no · destructive no · idempotent yes · open-world no
delete_templatedestructivePermanently delete a saved template. This cannot be undone, and renders that reference its template_id will fail afterwards. Confirm with the user first.
Parameters:
template_id(required) — string — Template ID, e.g. tpl_1a2b3c (from list_templates).
Hints: read-only no · destructive yes · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.