About pdfops-mcp
pdfops-mcp is an MCP server for deterministic PDF operations through the PDFops API, for workflows where AI agents inspect or fill forms, merge documents, or generate invoices. Tools accept local paths, HTTPS URLs, or data URIs, and can write outputs to files or return them inline.
Key features
- 01Inspect PDF AcroForm fields
- 02Fill and optionally flatten forms
- 03Merge PDFs in a chosen order
- 04Generate invoices from structured data
- 05Check API quota usage
Use cases
- 01Inspect and fill tax or onboarding forms
- 02Fill contractor forms from rows of data
- 03Combine forms, agreements, and cover pages
- 04Generate invoices from fees and tax rates
MCP support
The MCP server exposes tools to inspect, fill, and merge PDFs, generate invoices, and check quota usage. It supports local stdio deployment and a hosted Streamable HTTP endpoint; remote runs accept URL or data URI inputs and can return results as inline resources.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://pdfops.dev/api/mcpclaude mcp add --transport http dev-pdfops-pdfops https://pdfops.dev/api/mcp{"mcpServers":{"dev-pdfops-pdfops":{"type":"http","url":"https://pdfops.dev/api/mcp"}}}Open in Cursor{"servers":{"dev-pdfops-pdfops":{"type":"http","url":"https://pdfops.dev/api/mcp"}}}Open in VS Code{"mcpServers":{"dev-pdfops-pdfops":{"type":"http","url":"https://pdfops.dev/api/mcp"}}}{"mcpServers":{"dev-pdfops-pdfops":{"serverUrl":"https://pdfops.dev/api/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
https://pdfops.dev/api/mcpAuth requiredTools
5| Parameter | Type | Required | Description |
|---|---|---|---|
| pdf_path | string | Yes | PDF source: an https:// URL or a data:application/pdf;base64,… URI (this hosted server cannot read local file paths). |
Details
From the project READMEpdfops-mcp
MCP server that gives AI agents deterministic PDF tools, backed by the PDFops API: inspect AcroForm fields, fill forms, merge PDFs, and generate invoices — no Chromium, no native deps, nothing to host.
Beside a local agent, tools operate on file paths, so PDF bytes never transit the model context: your agent says "fill /tmp/form.pdf and save to /tmp/out.pdf" and gets a one-line confirmation back. Every PDF input also accepts an https:// URL or a data:application/pdf;base64,… URI, and every output can be returned inline instead of written — which is what makes the server work on hosted runtimes (see below).
Install
Claude Code
claude mcp add pdfops -- npx -y pdfops-mcp
# with a key:
claude mcp add pdfops -e PDFOPS_API_KEY=pdfops_live_… -- npx -y pdfops-mcp
Claude Desktop (claude_desktop_config.json) / Cursor (.cursor/mcp.json)
{
"mcpServers": {
"pdfops": {
"command": "npx",
"args": ["-y", "pdfops-mcp"],
"env": { "PDFOPS_API_KEY": "pdfops_live_…" }
}
}
}
VS Code (.vscode/mcp.json, note the servers key and type)
{
"servers": {
"pdfops": {
"type": "stdio",
"command": "npx",
"args": ["-y", "pdfops-mcp"],
"env": { "PDFOPS_API_KEY": "pdfops_live_…" }
}
}
}
Any other stdio client (Windsurf, Cline, Zed, your own agent): command npx, args -y pdfops-mcp. Per-client walkthrough and a real tool-call transcript: pdfops.dev/mcp.
PDFOPS_API_KEY is optional — without it you get the keyless trial (100 requests/IP/month). A free key (250/month, no card) takes one field at pdfops.dev/pricing.
Tools
| Tool | What it does |
|---|---|
pdf_inspect | List a PDF's form fields (names, types, options, values) + a paste-ready fill template. Call first on unfamiliar PDFs. |
pdf_fill | Fill AcroForm fields → write the filled PDF. Optional flatten bakes values in and drops the form. |
pdf_merge | Merge ≥2 PDFs in order → write the result. |
pdf_invoice | Structured data → complete invoice PDF. Deterministic: same input, byte-identical output. |
pdfops_usage | Quota check for the configured key. |
Hosted endpoint (no install)
PDFops also runs this server for you at https://pdfops.dev/api/mcp (Streamable HTTP). It works without a key (keyless trial cap of 100 calls/IP/month); a free key from https://pdfops.dev/pricing#free-key raises the cap:
claude mcp add --transport http pdfops https://pdfops.dev/api/mcp
# with a key:
claude mcp add --transport http pdfops https://pdfops.dev/api/mcp --header "Authorization: Bearer $PDFOPS_API_KEY"
Sources must be https:// URLs or data: URIs, and results come back inline. Setup for Cursor and VS Code: https://pdfops.dev/mcp#remote.
Running remotely (Smithery, Glama hosted, cloud IDE gateways)
A hosted MCP runtime executes this server on a machine where your agent's file paths do not exist. Nothing changes in the config — pass sources the server can reach and skip output_path:
- Inputs (
pdf_path,pdf_paths): anhttps://URL the server can fetch (≤4 MB per PDF, ≤4.5 MB per request — the API's limits), or adata:application/pdf;base64,…URI for small files. - Outputs: omit
output_pathandpdf_fill/pdf_merge/pdf_invoicereturn the PDF inline as an embeddedapplication/pdfresource (pdfops://filled.pdf, …) that the client saves. Withoutput_pathset, the file is written where the server runs.
Locally, absolute paths keep working exactly as before and remain the recommended form — bytes stay off the model context.
Example prompts
- "What fields does ~/forms/fw9.pdf have?" →
pdf_inspect - "Fill ~/forms/fw9.pdf for Ada Lovelace, 12 Analytical Way, London; save it flattened as ~/out/w9-ada.pdf" →
pdf_inspect, thenpdf_fillwithflatten: true - "Fill the onboarding form once per row of contractors.csv into ~/out/" → one
pdf_inspect, thenpdf_fillper row - "Merge ~/out/w9-ada.pdf, ~/docs/nda.pdf and ~/docs/cover.pdf into one packet, cover first" →
pdf_merge - "Invoice Globex for 3 days of consulting at $650, 8.5% tax, due in 30 days" →
pdf_invoice - "How many PDFops requests do I have left this month?" →
pdfops_usage
Example agent flow
"Fill the W-9 template at ~/docs/w9.pdf for Ada Lovelace and merge it with ~/docs/cover.pdf"
pdf_inspect→ discovers field names + fill templatepdf_fill→ writes the filled W-9pdf_merge→ writes the combined packet
Links
API docs: pdfops.dev/docs · OpenAPI: pdfops.dev/openapi.json · Typed client: pdfops-sdk · Questions: [email protected]
Privacy Policy
This server runs on your machine and sends only what a tool call needs to the PDFops API (https://pdfops.dev): the PDF bytes you point it at, the field values you supply, and your API key if you set one. PDFops processes the request in memory and returns the result; it does not store your documents. API requests are logged with usage metadata to run quotas and the service. The full policy is at https://pdfops.dev/privacy. Questions: [email protected].
MIT © PDFops
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.