Skip to main content
Glama
EigenCharlie

pdf-toolkit-mcp

by EigenCharlie

pdf-toolkit-mcp

18 PDF operations for Claude Code, Claude Desktop, and any MCP client — via iLoveAPI.

npm version npm downloads License: MIT Node.js TypeScript MCP Claude Code CI

Install · Tools · Recipes · Architecture · Security · FAQ


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.


📖 Table of contents


Related MCP server: gurupdf-mcp

🎯 Why pdf-toolkit-mcp

Manual iLoveAPI

Raw @ilovepdf/ilovepdf-nodejs

pdf-toolkit-mcp

Callable from Claude Code / Claude Desktop / any MCP client

JWT signing + 5-step lifecycle handled for you

Validated Zod schemas (no bad inputs reach the API)

Path sandboxing against traversal

Structured error codes (RATE_LIMITED, PLAN_LIMIT, …)

partial

Progress notifications during long OCR tasks

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:

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).

📦 Install

Prerequisites

  • Node.js ≥ 18 (LTS recommended).

  • iLoveAPI project keys — free tier at developer.ilovepdf.com. Takes ~2 minutes:

    1. Sign up → create a project → copy Project public key and Project secret key.

    2. Export them (or drop them into your client's MCP config — examples below).

Option A — Claude Code (CLI one-liner)

export ILOVEAPI_PROJECT_PUBLIC_KEY="project_public_xxx"
export ILOVEAPI_PROJECT_SECRET_KEY="secret_key_xxx"

claude mcp add pdf-toolkit -- npx -y pdf-toolkit-mcp

Restart Claude Code and all 18 tools appear in the picker. Verify with /mcp → you should see pdf-toolkit: connected (18 tools).

Option B — Claude Code Plugin (includes the pdf-workflow skill)

/plugin marketplace add EigenCharlie/pdf-toolkit-mcp
/plugin install pdf-toolkit@EigenCharlie/pdf-toolkit-mcp

The plugin auto-configures the MCP server and installs a skill that teaches Claude five canonical multi-step PDF pipelines (see Workflow recipes).

Option C — Claude Desktop (claude_desktop_config.json)

Edit claude_desktop_config.json (%APPDATA%\Claude\ on Windows, ~/Library/Application Support/Claude/ on macOS):

{
  "mcpServers": {
    "pdf-toolkit": {
      "command": "npx",
      "args": ["-y", "pdf-toolkit-mcp"],
      "env": {
        "ILOVEAPI_PROJECT_PUBLIC_KEY": "project_public_xxx",
        "ILOVEAPI_PROJECT_SECRET_KEY": "secret_key_xxx"
      }
    }
  }
}

Restart Claude Desktop — the 🔌 icon should show pdf-toolkit connected.

Option D — any MCP client via stdio

ILOVEAPI_PROJECT_PUBLIC_KEY=… ILOVEAPI_PROJECT_SECRET_KEY=… npx -y pdf-toolkit-mcp

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

pdf_to_excel

.xlsx

Works best on tabular source PDFs

pdf_to_powerpoint

.pptx

One slide per PDF page

pdf_to_jpg

.zip of .jpg

mode: "pages" renders pages; "extract" pulls embedded images

🔄 Convert — to PDF

Tool

Accepts

Notes

office_to_pdf

.doc, .docx, .xls, .xlsx, .ppt, .pptx

Server-side rendering

html_to_pdf

.html, .htm

Local HTML only; external assets may not resolve

image_to_pdf

.jpg, .jpeg, .png

One image per page, preserves order

✏️ Edit

Tool

What it does

Key inputs

rotate_pdf

Rotate pages 90 / 180 / 270° clockwise

rotation, pages? (default: all)

add_page_numbers

Stamp numbered footer/header

starting_number, vertical_position, horizontal_position

add_watermark

Text or image watermark

mode: "text" + text, OR mode: "image" + image_file

🔐 Security

Tool

What it does

Key inputs

unlock_pdf

Remove known password

input_file, password

protect_pdf

Add password

input_file, password

🩹 Repair / OCR

Tool

What it does

Notes

repair_pdf

Attempt structural repair on damaged PDFs

Useful before further processing

ocr_pdf

Run OCR to make scans searchable

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 optional output_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.

merge_pdf([a.pdf, b.pdf, c.pdf])
   → compress_pdf(level="recommended")
   → protect_pdf(password="…")
office_to_pdf(report.docx)
   → add_watermark(mode="text", text="CONFIDENTIAL", opacity=30)
   → protect_pdf(password="…")
extract_pdf_pages(scan.pdf, pages="3-9")
   → ocr_pdf(languages=["eng"])
   → pdf_to_word
compress_pdf(big.pdf, level="extreme")
   → protect_pdf(password="…")
repair_pdf(scan_broken.pdf)
   → ocr_pdf(languages=["eng"])
   → add_page_numbers(position="bottom-center")

🏛 Architecture

┌────────────────────────────┐    stdio    ┌──────────────────────────┐
│     Claude Code / Desktop  │◀───────────▶│   pdf-toolkit-mcp server │
│   (or any MCP client)      │  JSON-RPC   │   (this repo)            │
└────────────────────────────┘             └────────────┬─────────────┘
                                                        │
                                                        ▼
                                             ┌──────────────────────┐
                                             │  @ilovepdf/          │
                                             │  ilovepdf-nodejs     │
                                             │  (JWT + HTTP)        │
                                             └──────────┬───────────┘
                                                        │
                                                        ▼  HTTPS
                                             ┌──────────────────────┐
                                             │   iLoveAPI servers   │
                                             │   api.ilovepdf.com   │
                                             └──────────────────────┘

iLoveAPI 5-phase lifecycle (orchestrated in src/api/tasks.ts)

  [ 10% ]   start     →  POST /v1/start/{tool}     (server assignment + task id)
  [ 40% ]   upload    →  POST /v1/upload           (one call per file, progress scales)
  [ 50% ]   process   →  POST /v1/process          (run the tool with params)
  [ 90% ]   download  →  GET  /v1/download/{task}  (bytes → Buffer)
  [100% ]   done      →  write to disk, emit file:// resource URI

The server emits MCP notifications/progress at each boundary so your client can render a live progress bar for slow operations (OCR, large merges).

Project layout

pdf-toolkit-mcp/
├── .claude-plugin/
│   ├── plugin.json           # Plugin manifest
│   └── .mcp.json             # MCP server config (npx -y pdf-toolkit-mcp)
├── skills/
│   └── pdf-workflow/
│       └── SKILL.md          # 5-recipe skill for multi-step pipelines
├── src/
│   ├── index.ts              # #!/usr/bin/env node shebang
│   ├── server.ts             # MCP stdio bootstrap
│   ├── api/
│   │   ├── client.ts         # iLoveAPI client singleton (CJS interop via createRequire)
│   │   ├── tasks.ts          # 5-phase lifecycle orchestrator
│   │   ├── errors.ts         # HTTP → structured PdfToolkitError mapping
│   │   └── types.ts          # Types + error class
│   ├── tools/                # 18 tools, one file per concern
│   │   ├── _shared.ts        # Zod fragments + writeOutputAndReport helper
│   │   ├── merge.ts  split.ts  compress.ts
│   │   ├── convertFromPdf.ts convertToPdf.ts
│   │   ├── pageOps.ts  security.ts  watermark.ts
│   │   ├── repair.ts  ocr.ts
│   │   └── index.ts          # allTools[] barrel
│   └── util/
│       ├── paths.ts          # resolveInputs/resolveOutput + sandbox enforcement
│       ├── progress.ts       # Progress adapter
│       └── logger.ts         # stderr-only logger (stdio-safe)
├── tests/
│   ├── unit/                 # client, paths, errors, tools.merge (25 tests)
│   └── integration/          # smoke.test.ts — gated on iLoveAPI creds
├── scripts/
│   └── inspector.sh          # npm run inspect → MCP Inspector UI
└── .github/workflows/
    ├── ci.yml                # ubuntu+windows × node 18/20/22
    └── publish.yml           # Publishes to npm on v* tags with --provenance

⚙️ Configuration reference

Environment variables

Variable

Required

Default

Description

ILOVEAPI_PROJECT_PUBLIC_KEY

Project public key from developer.ilovepdf.com

ILOVEAPI_PROJECT_SECRET_KEY

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.


👩‍💻 Development

git clone https://github.com/EigenCharlie/pdf-toolkit-mcp.git
cd pdf-toolkit-mcp
npm install

Common tasks

Command

What it does

npm run build

Compile TypeScript → dist/

npm run dev

Watch-mode build

npm run typecheck

tsc --noEmit — fast error surface

npm run lint

ESLint on src/ + tests/

npm test

Vitest unit suite (no network)

npm run test:integration

Real iLoveAPI calls (requires creds)

npm run inspect

Launch MCP Inspector against the local build

Debugging inside Claude Code

  1. Build locally: npm run build.

  2. Register the local dist instead of npm:

    claude mcp remove pdf-toolkit    # if previously registered
    claude mcp add pdf-toolkit -- node "$(pwd)/dist/index.js"
  3. Set PDF_TOOLKIT_DEBUG=1 in your shell before launching Claude Code for verbose stderr.

  4. 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 testtests/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.

  • CI matrix.github/workflows/ci.yml runs lint → typecheck → build → test on:

    • OS: ubuntu-latest, windows-latest

    • Node: 18, 20, 22


🚢 Releasing

Publishing is automated on tag push:

npm version patch           # or minor / major
git push --follow-tags

The publish workflow then:

  1. Re-runs lint + typecheck + build + tests.

  2. Publishes to npm with --access public --provenance (supply-chain attestation).

  3. Creates a GitHub Release with auto-generated notes.

Repo secret required: NPM_TOKEN (npm automation token).


🗺 Roadmap

  • v0.1 — 18 PDF tools, stdio transport, plugin + skill, CI, npm publish

  • v0.1.1 — MCPB bundle (.mcpb) for Claude Desktop, marketplace manifest, MCP Registry submission (mcpName)

  • v0.2 — Submit the Claude plugin to anthropics/claude-plugins-official, publish an image-tools companion pack

  • v0.3 — 8 image tools (resize, convert, compress, crop, rotate, watermark, upscale, remove background)

  • v0.4 — Signature tools (signing flows require paid tier — gated behind env flag)

  • v1.0 — Optional Streamable-HTTP transport for hosted/multi-user setups

Have a feature request? Open an issue.


🙋 FAQ

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:

  1. npm run lint && npm run typecheck && npm test → all green.

  2. New tools follow the pattern in src/tools/merge.ts (Zod schema → runTaskwriteOutputAndReport).

  3. Add at least one unit test.

  4. 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.


📜 License & trademarks

Released under the MIT License © 2026 Carlos.

"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

Available Tools

18 tools
add_page_numbersA

Stamp page numbers onto a PDF. Configure starting number, which pages to number, and placement (top/bottom + left/center/right).

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesNoWhich pages to number: "all" (default) or a range like "1-5" or list "1,3,5".all
input_fileYesPath to the PDF file to stamp with page numbers.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.
starting_numberNoNumber to use for the first stamped page. Default: 1.
vertical_positionNoVertical placement of the page number. Default: "bottom".bottom
horizontal_positionNoHorizontal placement of the page number. Default: "center".center

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must disclose behavior. It states that page numbers are 'stamped' and configurable, but does not clarify whether the file is modified in-place or created anew, nor does it mention default output behavior (though some details are in the schema).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences capture the tool's purpose and primary options without extraneous text. Key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters and no output schema or annotations, the description is adequate but incomplete. It covers the main function but omits behavior details like output handling or error conditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reiterates three key parameters (starting number, pages, placement) but adds no new meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly uses 'Stamp page numbers onto a PDF' as the verb+resource, and specifies configurable aspects (starting number, pages, placement). It distinguishes this tool from siblings like add_watermark or merge_pdf by naming a specific function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance is provided. The context of sibling tools suggests this is the only page numbering tool, but the description does not clarify when to prefer it over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_watermarkA

Stamp a text or image watermark onto every page of a PDF. For mode="text", provide text. For mode="image", provide image_file (.jpg/.jpeg/.png). Tune placement, rotation, and opacity as needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYes"text" stamps a text watermark; "image" stamps an image file onto each page.
textNoText to stamp. Required when mode="text".
layerNoWhether the watermark sits above the page content or behind it.above
opacityNoOpacity percentage (1-100). Default: 100.
rotationNoRotation in degrees (0-360). Default: 0.
image_fileNoPath to a .jpg/.jpeg/.png image to stamp. Required when mode="image".
input_fileYesPath to the PDF file to watermark.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.
vertical_positionNomiddle
horizontal_positionNocenter

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description adequately discloses functionality: stamps every page, explains modes, placement, rotation, opacity, and output path behavior. However, it could mention that the original file is not modified unless output_path is specified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The first sentence states the main purpose, the second gives critical mode-specific guidance. Ideal conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 10 parameters, 2 required, and no output schema, the description covers essential usage (mode, required fields, tuning). It lacks error handling or details on default output behavior, but is sufficient for a watermark tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80% so baseline is 3. The description adds value by explaining mode-dependent parameters (`text` for text mode, `image_file` for image mode) and summarizing tuning options, going beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Stamp' and the resource 'watermark onto every page of a PDF'. It distinguishes from sibling tools (e.g., add_page_numbers) by focusing on watermarking with modes for text and image.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for using the tool (watermarking PDFs) but does not explicitly state when to use vs alternatives or exclude sibling tools like add_page_numbers.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compress_pdfA

Reduce the file size of a PDF. Choose compression_level "low", "recommended" (default), or "extreme". Outputs a .pdf file on disk and returns its path.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_fileYesPath to the PDF file to compress.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.
compression_levelNoCompression strength. "extreme" yields the smallest file but may lose quality.recommended

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations present, so description must disclose behavior. It mentions output is a .pdf file on disk and returned path, and notes extreme compression may lose quality. But lacks details on overwrite behavior, quality trade-offs, or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. Front-loaded with purpose, then specific parameters. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with 3 parameters and no output schema, the description covers input, options, and output format. Complete enough for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, yet description adds meaning: explains compression level values and default, details output_path directory vs file behavior, and clarifies 'extreme' may lose quality. Adds value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Reduce the file size of a PDF' and lists compression levels, effectively distinguishing from sibling PDF tools like conversions and splits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides guidance on when to use (reduce file size) and explains compression level options. Does not explicitly state when not to use or mention alternatives, but context is clear relative to siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_pdf_pagesA

Extract a subset of pages from a PDF into a new PDF. Specify pages as a list or range, e.g. "1,3,5-7".

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesYesPages to extract, e.g. "1,3,5-7". Required.
input_fileYesPath to the PDF file to extract pages from.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It states extraction to a new PDF (non-destructive) and specifies page syntax. However, it does not disclose if input file remains unchanged, permissions needed, or behavior for invalid page ranges.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The action and page specification example are front-loaded. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters, full schema coverage, and no output schema, the description covers the main action and page format. However, it omits details about return value or success indication, which would be helpful since there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by providing an example for the 'pages' parameter (e.g., '1,3,5-7') and clarifies the purpose of 'output_path' indirectly. This helps an agent beyond raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (extract) and resource (pages from a PDF) and clearly states the outcome (new PDF). It distinguishes from siblings like split_pdf and merge_pdf by specifying subset extraction from a single PDF into one new PDF.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for extracting a subset of pages but provides no explicit guidance on when to prefer this tool over siblings like split_pdf or compress_pdf. No when-not-to-use or alternative mention given the large set of sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

html_to_pdfA

Convert a local HTML file (.html or .htm) to a PDF. The HTML is rendered server-side; external assets referenced by the file may not be fetched.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_fileYesPath to an .html or .htm file to convert.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that rendering is server-side and external assets may not be fetched, which are key behavioral traits beyond what the schema reveals.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, each providing essential information. No wasted words, and the primary action is stated first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does not explain the return value, but the tool's output (PDF) is implied. Given the simplicity and context signals, it is mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains both parameters. The description adds context about rendering limitations but does not add new parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool converts an HTML file to PDF, specifies the file extensions (.html or .htm), and its purpose is distinct from sibling tools that manipulate PDFs or convert other formats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context mentions server-side rendering and that external assets may not be fetched, providing important limitation guidance. However, it does not explicitly state when not to use this tool or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

image_to_pdfA

Combine one or more images (.jpg, .jpeg, .png) into a single PDF, one image per page, in the order provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_filesYesOne or more image files (.jpg, .jpeg, .png), in the order they should appear in the PDF.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description adds some behavioral context: output path behavior (optional, defaults to first input's directory). However, it does not disclose error handling (e.g., invalid files), overwrite behavior, or required permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the main purpose and includes key details without redundancy. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with 2 parameters and no output schema, the description covers purpose, input format, ordering, and output behavior. It lacks details on error handling or invalid inputs but is otherwise sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds value by explicitly listing supported image formats (.jpg, .jpeg, .png), which are not mentioned in the input_files schema description. This is crucial for correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool combines one or more images into a single PDF, one per page, in order. It specifies supported formats (.jpg, .jpeg, .png) and distinguishes from sibling PDF tools like pdf_to_jpg or ocr_pdf.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for creating PDFs from images but does not provide explicit guidance on when to use this tool versus alternatives (e.g., office_to_pdf, html_to_pdf). No exclusions or when-not-to-use scenarios are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

merge_pdfA

Merge two or more PDF files into a single PDF, preserving order. Outputs a .pdf file on disk and returns its path.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_filesYesTwo or more PDF files to merge, in order.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses key behaviors: order preservation, output as .pdf file on disk, and return of file path. It does not cover edge cases or error handling, but is adequate for a simple tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff. First sentence states the core action, second adds output details. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Lacks details on output_path behavior (directory vs file), error handling, or file existence handling. No output schema, so description should cover return value—it does, but incompletely. Moderate completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% as both parameters have descriptions. The description adds minimal value beyond the schema (only mentions order preservation and output format). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (Merge), resource (PDF files), and action (into a single PDF, preserving order). It distinguishes well from sibling tools like split_pdf or compress_pdf.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for merging multiple PDFs in order but provides no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ocr_pdfA

Run OCR on a PDF to make scanned text selectable/searchable. Accepts one or more language codes (e.g. "eng", "spa"). Large or image-heavy PDFs can take more than 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
languagesNoISO 639-2/T 3-letter language codes to detect (e.g. ["eng"], ["spa"], ["eng","spa"]). Default: ["eng"].
input_fileYesPath to the PDF file to OCR.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses significant time (>60 seconds) for large/image-heavy PDFs, which is useful. No annotations exist, so description carries full burden. Missing disclosure on whether the tool overwrites the input file or creates a new one, and if it is destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences. First sentence states clear purpose, second adds language details and time warning. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description should explain return value or result. It says 'make scanned text selectable/searchable' but doesn't specify what the tool returns (e.g., file path, success message). Also lacks error handling hints. Barely adequate for a tool with this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed param descriptions. Description adds value by giving language code examples ('eng', 'spa') and noting that large PDFs take >60s, which is not in schema. Adds contextual nuance beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource (Run OCR on a PDF) with explicit benefit (make scanned text selectable/searchable). Distinct from sibling tools like pdf_to_jpg or pdf_to_word.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage for OCR, but no explicit when-to-use vs alternatives. Mentions language code acceptance but no guidance on when to select which languages or when to avoid this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

office_to_pdfA

Convert a Microsoft Office document (Word, Excel, or PowerPoint) to a PDF. Accepts .doc, .docx, .xls, .xlsx, .ppt, and .pptx files.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_fileYesPath to a Microsoft Office file (.doc, .docx, .xls, .xlsx, .ppt, .pptx).
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose behavioral traits such as formatting preservation, file location requirements, error handling, or side effects. The description is minimal beyond the conversion action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It efficiently states purpose and accepted formats.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple conversion tool with no output schema, the description covers basic purpose and formats. However, it lacks information about return value, error behavior, and size limits, making it adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameter descriptions exist in the schema. The tool description adds the list of accepted formats, which overlaps with the schema description for input_file, and does not provide additional semantic nuance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Convert' and the resource 'Microsoft Office document to PDF'. It lists all accepted formats, which distinguishes it from sibling tools that handle PDF-to-other conversions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when converting Office files to PDF but does not provide explicit when-to-use or when-not-to-use guidance, nor does it reference alternative sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pdf_to_excelA

Convert a PDF to a Microsoft Excel .xlsx spreadsheet. Works best when the source PDF contains clear tabular data; non-tabular PDFs may produce messy results.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_fileYesPath to the PDF file to convert.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full responsibility. It honestly discloses limitations ('non-tabular PDFs may produce messy results'), which is a useful behavioral trait. However, it does not detail other aspects like file size limits or expected processing time.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, with the primary action stated first. Every word serves a purpose, and there is no extraneous information. It is highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema is provided, yet the description does not explain what the tool returns (e.g., a file path or success message). It also omits details like required permissions or error handling. For a conversion tool with two parameters, this is a noticeable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of parameters with descriptions for input_file and output_path. The description adds value by clarifying the tool's best-case use case (tabular data), which is not present in the schema. It compensates adequately for the lack of parameter-level guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Convert a PDF to a Microsoft Excel .xlsx spreadsheet' with a specific verb and resource. This clearly distinguishes it from sibling tools like pdf_to_word or pdf_to_powerpoint, which convert to different formats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises that the tool works best on PDFs with clear tabular data and warns that non-tabular PDFs may produce messy results. While it provides clear context for when to use, it does not suggest alternative tools for non-tabular PDFs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pdf_to_jpgA

Convert a PDF to JPG images. In "pages" mode (default) each page becomes a JPG; in "extract" mode only embedded images are pulled out. Returns a .zip archive of the images.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo"pages" renders each PDF page as an image; "extract" extracts embedded images only.pages
input_fileYesPath to the PDF file to convert.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses return format (zip archive) and mode behavior, but lacks details on nondestructive nature, auth requirements, or error handling. Adequate for a straightforward conversion tool without annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff. Front-loaded with main purpose; each sentence adds essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers core behavior, parameters, and return format. Without an output schema, the description adequately describes output. No missing critical details for this low-complexity tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds minimal extra context beyond the schema (e.g., zip archive output). No detailed parameter constraints or examples provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Convert a PDF to JPG images') and specifies the two modes ('pages' and 'extract'), which distinguishes it from sibling tools like pdf_to_word or extract_pdf_pages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool over alternatives (e.g., when to use 'extract' mode vs. extract_pdf_pages). No exclusions or context for choosing among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pdf_to_powerpointA

Convert a PDF to a Microsoft PowerPoint .pptx presentation. Each PDF page becomes an editable slide; conversion quality depends on the source.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_fileYesPath to the PDF file to convert.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions that each page becomes an editable slide and that conversion quality depends on the source, adding some behavioral context. However, it lacks details on limitations, file size constraints, or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences, front-loading the core purpose and adding one key detail. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple conversion tool with two parameters and no output schema, the description covers the core transformation. However, it could mention the output format or when to use alternatives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so parameters are already documented. The description adds no additional meaning to the parameters beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool converts a PDF to a PowerPoint .pptx presentation, which is a specific verb and resource. It is easily distinguishable from sibling tools like pdf_to_word or pdf_to_excel.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus its many siblings (e.g., pdf_to_word, pdf_to_excel). There are no prerequisites or context for when this conversion is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pdf_to_wordA

Convert a PDF to an editable Microsoft Word .docx document. Conversion quality depends on the source (scanned PDFs produce poor results; use ocr_pdf first if needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
input_fileYesPath to the PDF file to convert.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that scanned PDFs yield poor results, which is key behavioral information. However, it does not mention other traits like write behavior or file handling, though that is partially covered by the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste. The essential information is front-loaded, and every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple conversion tool with no output schema and 100% parameter coverage, the description is complete: it states the purpose, caveats, and a suggested alternative. An agent can correctly select and invoke this tool based on this description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description does not add additional meaning to the parameters beyond what the schema already provides, such as details on input_file or output_path.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Convert a PDF to an editable Microsoft Word .docx document,' which is a specific verb and resource. It clearly distinguishes this tool from siblings like pdf_to_excel or pdf_to_powerpoint by specifying the output format.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear guidance on when to use this tool and when to avoid it: 'Conversion quality depends on the source (scanned PDFs produce poor results; use ocr_pdf first if needed).' This explicitly suggests an alternative workflow and sets expectations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

protect_pdfA

Add password protection to a PDF. Anyone opening the output will need the supplied password.

ParametersJSON Schema
NameRequiredDescriptionDefault
passwordYesPassword to set on the PDF. Handled as a secret and sent only to iLoveAPI.
input_fileYesPath to the PDF file to protect.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears the full burden. It mentions the output requires a password but does not disclose whether the original file is modified, what happens to existing metadata, or security implications beyond the schema's secret handling note.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences convey the essential function without any redundant or extraneous information. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with 3 parameters and no output schema, the description covers the core action. However, it omits details about output path behavior and any error conditions, leaving some gaps for a complete understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are well-documented in the schema. The description adds no additional parameter-level meaning, which is acceptable per baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Add password protection to a PDF' clearly states a specific verb and resource. It unambiguously distinguishes from sibling tools like 'unlock_pdf' which remove protection, and other PDF operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for securing a PDF but does not explicitly state when to use or avoid it, nor does it mention alternatives like 'unlock_pdf' for removal. No guidance on prerequisites or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

repair_pdfA

Attempt to repair a damaged or malformed PDF. Useful for scanned PDFs that fail to open or render correctly in some readers. Produces a .pdf file on disk.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_fileYesPath to the damaged PDF file to repair.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears the full burden. While it honestly states the tool 'attempts' to repair, it lacks details on failure behavior, potential side effects (e.g., modification of original), permission requirements, or success guarantees. Minimal behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loads the purpose, and contains no superfluous words. Every sentence provides value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple repair tool with no output schema, the description covers the main action and output format. However, it could mention what happens if the repair fails or if the original file is preserved. Slight gaps prevent a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description adds no new information beyond what is in the schema (input_file and output_path). According to the rules, baseline is 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('repair'), the resource ('damaged or malformed PDF'), and the output (a .pdf file on disk). It distinguishes from sibling tools like compress or merge, as repair addresses a distinct use case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies when to use the tool ('useful for scanned PDFs that fail to open or render correctly'), providing clear context. It does not explicitly mention when not to use it or suggest alternatives, but the sibling list implies other tools for different tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rotate_pdfA

Rotate pages in a PDF by 90, 180, or 270 degrees clockwise. Target specific pages with "pages" (e.g. "1,3,5" or "1-5"), or rotate all pages by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesNoWhich pages to rotate: "all" (default), or a list like "1,3,5" or "1-5".all
rotationYesClockwise rotation in degrees. Must be 90, 180, or 270.
input_fileYesPath to the PDF file to rotate.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It states rotation direction and default pages but does not disclose whether the original file is modified, if a new file is created, or any permissions required. Acceptable but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with purpose and examples. No unnecessary words or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no description of return value or side effects. Does not mention whether output_path is required or defaults. Lacks details on what the tool produces or whether it modifies in place. Incomplete for a tool with 4 parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. Description rephrases schema info (e.g., page examples) but adds no new meaning beyond what schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'rotate', resource 'pages in a PDF', and specifies degrees (90, 180, 270 clockwise). It also mentions page targeting, distinguishing it from sibling tools like split or merge.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives (e.g., extract_pdf_pages, split_pdf). The description gives examples of page selection but lacks context for choosing rotate over other operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

split_pdfA

Split a PDF into multiple PDFs by page ranges (e.g. "1-3,5-7") or into fixed-size chunks. Returns a .zip archive containing the resulting PDFs.

ParametersJSON Schema
NameRequiredDescriptionDefault
rangesNoPage ranges to extract, e.g. "1-3,5-7". If omitted and fixed_range is set, splits into fixed-size chunks.
input_fileYesPath to the PDF file to split.
fixed_rangeNoIf set, splits the PDF into chunks of this many pages each.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the output format (.zip) and the two splitting modes, but misses details like whether the original file is modified, error behavior if no range is specified, or required permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-load the main purpose and output. No filler words; every sentence is essential.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (4 params, no output schema, no annotations), the description covers the main use cases and output format. However, it lacks details on error conditions, file existence requirements, and what happens when both 'ranges' and 'fixed_range' are omitted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value with an example for 'ranges' and clarifies the behavior of 'output_path' for directories vs files, exceeding basic schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool splits a PDF by page ranges or fixed-size chunks and returns a zip. It specifies the resource (PDF) and action (split), but does not explicitly differentiate from the sibling tool 'extract_pdf_pages' which may have similar functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context on when to use the tool (for splitting by ranges or chunks) but does not mention when to avoid it or alternatives like extract_pdf_pages. It implies usage but lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unlock_pdfA

Remove password protection from a PDF. Requires the correct password. Produces an unprotected .pdf file on disk.

ParametersJSON Schema
NameRequiredDescriptionDefault
passwordYesThe password to unlock the PDF. Handled as a secret and sent only to iLoveAPI.
input_fileYesPath to the password-protected PDF file.
output_pathNoOptional output path. If it ends with the expected extension, the file is written there. If it is a directory, the file is placed inside with a timestamped name. Defaults to the same directory as the first input.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must cover behavioral traits. It states the tool 'removes password protection' and 'produces an unprotected .pdf file on disk,' but omits details like password security handling (though the schema mentions it), error behavior on wrong password, or whether the original file is modified. This is adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no unnecessary words. It front-loads the key action and ends with the output behavior. Every sentence contributes meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with 3 parameters and no output schema, the description explains the input requirement and output file. The schema provides detailed parameter descriptions. The description omits potential error conditions or return values, but overall it is complete enough for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description adds no extra parameter meaning beyond what the schema already provides. The baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the action: 'Remove password protection from a PDF.' It clearly distinguishes this tool from siblings like 'protect_pdf' (which adds protection) and other PDF operations. The verb 'remove' and resource 'PDF' are specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes the prerequisite 'Requires the correct password,' which implies when to use: when you have the password. It does not explicitly mention when not to use or alternatives, but the context of sibling tools makes the usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 18 tool updatesv0.1.2
    • First observedadd_page_numbers
    • First observedadd_watermark
    • First observedcompress_pdf
    • First observedextract_pdf_pages
    • First observedhtml_to_pdf
    • First observedimage_to_pdf
    • First observedmerge_pdf
    • First observedocr_pdf
    • First observedoffice_to_pdf
    • First observedpdf_to_excel
    • First observedpdf_to_jpg
    • First observedpdf_to_powerpoint
    • First observedpdf_to_word
    • First observedprotect_pdf
    • First observedrepair_pdf
    • First observedrotate_pdf
    • First observedsplit_pdf
    • First observedunlock_pdf

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose, from conversions (pdf_to_excel, pdf_to_word) to manipulations (merge_pdf, split_pdf) and utilities (add_watermark, ocr_pdf). No two tools have overlapping functionality, ensuring an agent can reliably select the correct one.

Naming Consistency3/5

Naming follows two main patterns: 'source_to_target' for conversions (e.g., pdf_to_excel, office_to_pdf) and 'verb_pdf' for operations (e.g., merge_pdf, rotate_pdf). However, 'add_page_numbers' and 'add_watermark' break the verb_pdf pattern, creating minor inconsistency.

Tool Count5/5

With 18 tools, the server covers a comprehensive range of PDF operations without being overwhelming. Each tool serves a specific need, and the count is well-scoped for a PDF utility toolkit.

Completeness4/5

The toolkit covers most essential PDF operations: conversion to/from various formats, merge/split/extract, compression, security, OCR, watermarking, and repair. Minor gaps exist (e.g., lack of direct text extraction or annotation), but the set is highly functional.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    F
    maintenance
    Enables AI-powered PDF manipulation through natural language commands, integrating with Claude to perform operations like merging, splitting, encrypting, optimizing, and analyzing PDFs.
    15
    -
  • A
    license
    A
    quality
    A
    maintenance
    Convert, compress, merge, split and OCR PDFs plus 100+ file formats (Word, Excel, images, ebooks, video) right inside your AI agent. Exposes 126 GuruPDF tools over MCP — works with Claude, Cursor, VS Code, Windsurf, or any MCP client.
    4
    113
    2
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    An MCP server that integrates the iLovePDF API to enable PDF manipulation tasks such as merging, splitting, compressing, and converting directly from AI conversations.
    24
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/EigenCharlie/pdf-toolkit-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server