PDF Toolkit MCP Server
MCP server for PDF manipulation — create from Markdown, fill forms, merge, split, encrypt, add QR codes. Zero-config, TypeScript-native.
Install
npx -y @aryanbv/pdf-toolkit-mcpNo config files, no API keys, no Docker. Works offline.
Create PDFs from Markdown
The standout feature — turn Markdown into professional PDFs:
"Create a PDF from this Markdown with page numbers"
# Quarterly Report
## Revenue
Revenue grew **23% year-over-year**, driven by enterprise expansion.
| Region | Q1 2025 | Q1 2026 | Growth |
|-----------|----------|----------|--------|
| Americas | $1.2M | $1.5M | +25% |
| EMEA | $800K | $960K | +20% |
| APAC | $400K | $520K | +30% |
## Key Wins
1. Signed 12 new enterprise contracts
2. Reduced churn to 3.1%
3. Launched self-serve tier
This produces a multi-page PDF with formatted headings, styled tables, numbered lists, bold/italic text, and page numbers — all from a single tool call.
Client Setup
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"pdf-toolkit": {
"command": "npx",
"args": ["-y", "@aryanbv/pdf-toolkit-mcp"]
}
}
}claude mcp add pdf-toolkit -- npx -y @aryanbv/pdf-toolkit-mcpAdd to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"pdf-toolkit": {
"command": "npx",
"args": ["-y", "@aryanbv/pdf-toolkit-mcp"]
}
}
}VS Code uses
"servers", NOT"mcpServers". Copying the config from other clients will silently fail. Requires the GitHub Copilot extension with Agent mode enabled.
Add to .vscode/mcp.json:
{
"servers": {
"pdf-toolkit": {
"command": "npx",
"args": ["-y", "@aryanbv/pdf-toolkit-mcp"]
}
}
}Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"pdf-toolkit": {
"command": "npx",
"args": ["-y", "@aryanbv/pdf-toolkit-mcp"]
}
}
}Tools
16 tools organized by category:
Category | Tool | Description |
Create |
| Create new PDF from text content |
| Create rich PDF from Markdown (headings, tables, lists, code blocks) | |
| Create PDF from template (invoice, report, letter) | |
Read |
| Extract text from PDF pages (first 10 by default) |
| Get title, author, page count, creation date | |
| List form fields with names, types, and values | |
Modify |
| Merge multiple PDFs into one |
| Extract page ranges into a new PDF | |
| Rotate pages by 90, 180, or 270 degrees | |
| Reorder pages in any order (supports duplication) | |
Enhance |
| Add text watermark to pages |
| Add page numbers (configurable position and format) | |
| Embed PNG or JPEG image into a page | |
Forms |
| Fill form fields (text, checkbox, dropdown, radio) |
Security |
| Password-protect with user/owner passwords |
| Embed QR code or barcode (Code128, DataMatrix, EAN-13, PDF417, Aztec) |
Templates
Generate professional documents from structured data:
"Create an invoice for Acme Corp"
{
"templateName": "invoice",
"data": {
"companyName": "Your Company",
"clientName": "Acme Corp",
"invoiceNumber": "INV-001",
"invoiceDate": "2026-04-01",
"items": [
{ "description": "Web Development", "quantity": 40, "unitPrice": 150 },
{ "description": "Hosting (Annual)", "quantity": 1, "unitPrice": 299 }
],
"taxRate": 18,
"paymentTerms": "Net 30"
},
"outputPath": "/path/to/invoice.pdf"
}Available templates: invoice, report, letter.
Encryption
"Encrypt report.pdf with password 'secure123'"
Applies RC4 128-bit encryption. Set separate user (open) and owner (edit) passwords for granular access control.
QR Codes & Barcodes
"Add a QR code linking to our website on page 1"
Supported types: QR Code, Code128, DataMatrix, EAN-13, PDF417, Aztec Code. Position and size are fully configurable.
Usage Examples
Just ask naturally:
"Create a PDF from this Markdown report"
"Generate an invoice for Client Corp — 10 hours consulting at $150/hr"
"Merge january.pdf and february.pdf into q1-combined.pdf"
"Extract text from pages 5-10 of thesis.pdf"
"Fill the Name field with 'John Doe' in application.pdf"
"Add a CONFIDENTIAL watermark to draft.pdf"
"Encrypt financials.pdf with password 'budget2026'"
"Add page numbers to presentation.pdf"
"Embed a QR code with our URL on the cover page"
"Reorder pages as 3,1,2 in report.pdf"
Known Limitations
Merge/Split/Reorder: Form fields are not preserved. Visual content transfers, but interactive fields are lost.
Text extraction: Returns PDF stream order, not visual reading order. Multi-column layouts may interleave.
Extract text: Defaults to first 10 pages to avoid exceeding LLM context. Request specific pages for longer documents.
Image embedding: Only JPEG and PNG formats are supported.
Form filling: Non-Latin characters (Arabic, CJK, Devanagari) require providing a custom font file (.ttf/.otf).
Encryption: Uses RC4 128-bit, not AES. Adequate for access control but not modern strong encryption.
Markdown fonts: pdfmake uses Roboto only. Custom fonts are not yet supported for Markdown PDFs.
Tech Stack
Dual-engine architecture for maximum capability:
pdfmake — Rich document creation (Markdown, templates, tables, headers/footers)
@pdfme/pdf-lib — Existing PDF manipulation (merge, split, rotate, watermark, forms, images, QR codes)
unpdf — Text extraction and metadata reading
Requirements
Node.js >= 18
Development
npm install # Install dependencies
npm run build # Compile TypeScript
npm run test # Run all 51 tests
npm run inspect # Open MCP Inspector (requires Node >= 22.7.5)See CLAUDE.md for architecture details and contribution guidelines.
License
MIT