This MCP server provides an unofficial PDF toolkit that exposes 18 PDF operations through iLoveAPI. It is intended for use with Claude Code, Claude Desktop, and any MCP client. The server supports common PDF workflows including merge, split, compress, OCR, convert, watermarking, and protection.
π οΈ Key Features
18 PDF operations exposed via iLoveAPI
Supports merge/split workflows
Includes compress, OCR, and convert
Adds watermark and protection functionality
π Use Cases
Automating PDF processing steps for Claude Code and Claude Desktop
Integrating PDF transformations into any MCP client workflow
Applying OCR and format conversion in document pipelines
β‘ Developer Benefits
Uses the Model Context Protocol (MCP) to provide standardized tool access
Designed for developer clients using MCP-compatible tooling
β οΈ Limitations
Unofficial toolkit implementation
Operations are performed via iLoveAPI (not native PDF processing)
Disclaimer.pdf-toolkit-mcp is an independent, community-built open-source client. It is not affiliated with, endorsed, sponsored, or certified by iLovePDF SL. The project talks to the public iLoveAPI REST service using your project credentials β nothing is proxied, resold, or relicensed. "iLovePDF" and "iLoveAPI" are trademarks of iLovePDF SL; this project does not claim ownership of those marks.
Bundled Claude Code skill with multi-step pipelines
β
β
β
Zero-setup install via npx -y
β
β
β
Free for personal use. iLoveAPI's free tier grants ~2,500 credits / month; this MCP itself is MIT-licensed and costs nothing.
π Quick tour
After installation, just talk to Claude. The model figures out which tools to call:
code
You: Merge invoice-jan.pdf and invoice-feb.pdf into Q1.pdf, then compress it hard
and lock it with the password "2026q1".
Claude (planning):
1. merge_pdf β invoice-jan.pdf + invoice-feb.pdf β Q1.pdf
2. compress_pdf β Q1.pdf β Q1-compressed.pdf (level: extreme)
3. protect_pdf β Q1-compressed.pdf β Q1-compressed-protected.pdf
Claude (result):
β Created ~/docs/Q1-compressed-protected.pdf (312 KB, password-protected).
The server speaks the standard MCP JSON-RPC 2.0 framing over stdio. Wire it into Cursor, Windsurf, mcphub, mcp-inspector, or anything else that speaks MCP.
Option E β Claude Desktop .mcpb bundle (drag-and-drop)
Grab pdf-toolkit-mcp-<version>.mcpb from the latest GitHub Release and drag it into Claude Desktop β Settings β Extensions. Claude will prompt for your iLoveAPI keys via the user_config section of the bundled manifest. No npx, no Node, no terminal.
Bundles ship unsigned (no publisher certificate yet). macOS Gatekeeper / Windows SmartScreen may warn on first install; verify the SHA-256 in the release notes before accepting.
Option F β MCP Registry (auto-discovered by compatible clients)
The server is indexed on the official MCP Registry under io.github.EigenCharlie/pdf-toolkit-mcp. Clients that browse the registry (Claude Desktop extension pane, VS Code MCP picker, mcphub, etc.) can install it without any manual config β they'll point at the npm package and prompt for the two iLoveAPI env vars automatically.
π§° Tool catalog
All 18 tools are exposed with strict Zod schemas, additionalProperties: false, and return both a text summary and a file:// resource URI so the client can surface the output.
π Organize
Tool
What it does
Key inputs
merge_pdf
Combine β₯ 2 PDFs in order
input_files[], output_path?
split_pdf
Split by page ranges ("1-3,5-7") or fixed chunk size
input_file, ranges?, fixed_range?
extract_pdf_pages
Keep a specific subset of pages
input_file, pages ("1,3,5-9")
π Convert β from PDF
Tool
Output
Notes
pdf_to_word
.docx
Scanned PDFs β run ocr_pdf first for best results
languages[] (e.g. ["eng"], ["spa"], ["eng","spa"]). β± Can exceed 60s on image-heavy PDFs
All tools accept absolute or CWD-relative paths for input_file(s) and an optionaloutput_path (file or directory). Defaults place the result next to the first input with a timestamped name.
π³ Workflow recipes
The bundled pdf-workflow skill (skills/pdf-workflow/SKILL.md) teaches Claude five canonical multi-step pipelines. You can also run these manually β just describe the end state and Claude chains the tools for you.
Project secret key. Never logged. Used for local JWT signing.
ILOVEAPI_SANDBOX_ROOT
β
β
Absolute path. When set, all input/output paths must resolve inside this directory β traversal attempts throw PATH_TRAVERSAL.
PDF_TOOLKIT_DEBUG
β
β
Set to 1 to emit verbose stderr logs (request shape, phase timings). Secrets never logged.
Structured error codes
Every failure surfaces a PdfToolkitError with a stable machine-readable code:
Code
Trigger
What to tell the user
MISSING_CREDENTIALS
Env vars not set
Point them at developer.ilovepdf.com
INVALID_INPUT
HTTP 400 / Zod parse failure
Fix the arguments
AUTH_FAILED
HTTP 401
Regenerate the project keys
PLAN_LIMIT
HTTP 402
Free tier exhausted or tool not in plan
NOT_FOUND
HTTP 404
Input file or task missing
RATE_LIMITED
HTTP 429
Back off and retry
TASK_LIMIT
SDK TaskLimit error
Too many concurrent tasks
PATH_TRAVERSAL
Path escapes ILOVEAPI_SANDBOX_ROOT
Reject the request
API_ERROR
Unmapped iLoveAPI error
Check data.http_status + data.iloveapi_code
π Security model
pdf-toolkit-mcp is designed to be safe to install on a developer machine:
Stdio only. The server never opens a network socket; it only makes outbound HTTPS calls to api.ilovepdf.com via the official SDK.
No console.log. JSON-RPC over stdio would corrupt on any stray stdout write, so every log line goes through process.stderr.
Secrets never persisted. Credentials live in env vars for the lifetime of the process and are never written to disk, log files, or tool responses.
JWT generated locally. The @ilovepdf/ilovepdf-nodejs SDK self-signs JWTs with your secret key β no secret leaves the machine.
Path sandbox (opt-in). Set ILOVEAPI_SANDBOX_ROOT to constrain the server to a single directory tree; any path resolving outside throws before the API is ever called.
Extension whitelists per tool.html_to_pdf rejects .exe; image_to_pdf only accepts common raster formats, etc.
MIT licensed, audit-friendly. ~2k lines of TypeScript. No obfuscation, no minification, no postinstall scripts.
claude mcp remove pdf-toolkit # if previously registered
claude mcp add pdf-toolkit -- node "$(pwd)/dist/index.js"
Set PDF_TOOLKIT_DEBUG=1 in your shell before launching Claude Code for verbose stderr.
Stderr is visible with claude mcp logs pdf-toolkit.
β Testing & CI
Unit tests β 25 tests across client, paths, errors, and tools.merge. Fully mocked, no network. Run with npm test.
Integration smoke test β tests/integration/smoke.test.ts spins up two minimal valid PDFs and exercises a real merge_pdf end-to-end. Gated on ILOVEAPI_*_KEY env vars; automatically skipped in PR CI for security.
Is this legal / safe / allowed by iLovePDF?
Yes. It's a thin open-source client that uses your credentials β nothing is resold, relicensed, or proxied. The iLoveAPI Terms of Service explicitly permit open-source libraries using user-provided keys (several community SDKs have existed for years). This project does not ship any keys, does not use "iLovePDF"/"iLoveAPI" in its package name, and carries the required disclaimer.
Does it cost money?
iLoveAPI offers ~2,500 credits per month free (enough for thousands of small ops). Heavier workloads need a paid iLoveAPI plan. This MCP itself is MIT and free forever.
Does it work offline?
No. iLoveAPI is cloud-only, so every tool call requires internet access.
Can I pin a specific version?
Yes: claude mcp add pdf-toolkit -- npx -y pdf-toolkit-mcp@0.1.0.
Can I self-host?
Yes. Clone the repo, npm run build, and point your client at node ./dist/index.js. The server is entirely stateless.
What happens if iLoveAPI is down?
The tool returns a PdfToolkitError with code: "API_ERROR" and data.http_status. Claude can retry with exponential backoff on your behalf.
Can I use this without Claude?
Yes β any MCP-compatible client works: Cursor, Windsurf, Zed, MCP Inspector, custom clients. The server is 100% spec-compliant.
π€ Contributing
Contributions welcome! Small checklist before opening a PR:
npm run lint && npm run typecheck && npm test β all green.
New tools follow the pattern in src/tools/merge.ts (Zod schema β runTask β writeOutputAndReport).
Add at least one unit test.
Update the Tool catalog in this README if you add/rename a tool.
Bug reports are even more welcome β include the tool name, the arguments, and (if safe to share) the stderr output.
"iLovePDF" and "iLoveAPI" are trademarks of iLovePDF SL. This project is an independent, community-built client and is not affiliated with, endorsed by, sponsored by, or certified by iLovePDF SL. The package name intentionally avoids both marks.
π Credits
iLovePDF / iLoveAPI β the cloud PDF processing API that powers every tool call.