Paperboy
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PaperboyMerge report-1.pdf and report-2.pdf into one file."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐ฐ Paperboy
A production-ready Model Context Protocol server for PDF tools.
Encrypt, decrypt, merge, split, reorder, rotate, optimize, repair, convert, and inspect PDFs โ straight from your AI assistant.
Built by Sudo Stash ยท MIT licensed ยท pip install paperboy-mcp
Connect it to Claude Desktop, Claude Code, Cursor, or any MCP client and ask in plain language: "Password-protect this contract with AES-256," "merge these three PDFs and drop the blank pages," "turn this folder of scans into one PDF," "this file won't open โ can you repair it?"
The engine is built on pikepdf (which wraps qpdf), so it handles real-world, damaged, and encrypted PDFs that pure-Python tools choke on.
Quickstart
Working in Claude Desktop in under a minute:
pip install paperboy-mcp # 1. install
paperboy install claude-desktop --root ~/Documents # 2. wire it into Claude, scoped to one folder3. Fully quit and reopen Claude Desktop (Cmd/Ctrl+Q โ a window reload isn't enough) so it loads the new server.
4. Put a PDF in ~/Documents and just ask:
"Encrypt ~/Documents/contract.pdf with the password hunter2 and save it as contract-locked.pdf" "Merge report-1.pdf and report-2.pdf into one file." "Rotate page 1 of scan.pdf 90ยฐ and drop the last page." "This file won't open โ can you repair it?"
Output files are written back into your --root folder. Remove the server anytime with
paperboy uninstall claude-desktop. Using Cursor, Windsurf, or Claude Code instead? See
Connect it to your AI.
Want to sanity-check without an AI? With the package installed, drive the engine directly:
from pathlib import Path from paperboy.config import Settings from paperboy import engine as E s = Settings(root=Path.home() / "Documents") print(E.pdf_info(Path.home() / "Documents" / "test.pdf", s)) E.encrypt_pdf(Path.home()/"Documents"/"test.pdf", Path.home()/"Documents"/"test-locked.pdf", "secret", s)
Related MCP server: pdfeverything
Tools
Tool | What it does |
| Page count, size, version, encryption status, metadata |
| Read / write title, author, subject, keywords, creator, producer |
| Pull text from all or selected pages |
| Validate structural integrity and report problems |
| Add a password โ AES-256 (default), AES-128, RC4 โ with print/copy/modify restrictions |
| Remove a password you know (not a cracker) |
| Reorder, reverse, or duplicate pages |
| Remove or pull out pages |
| Rotate all or selected pages 90/180/270ยฐ |
| Combine PDFs in order (per-file passwords supported) |
| Split into ranges or one file per page |
| Linearize ("fast web view") and recompress to shrink |
| Rebuild a damaged file's structure |
| Flatten form fields and annotations (needs qpdf CLI) |
| Image / text / Office / HTML โ PDF (Office needs LibreOffice) |
| Combine images into one PDF |
Page specs are 1-based and accept ranges, last/end, open ranges (4-), and reversal (5-1):
e.g. "1,3,5-8", "last,1-4", "5-1". Existing files are never overwritten unless overwrite=true.
Install
Requires Python 3.10+. The quickest path is uv:
uvx --from paperboy-mcp paperboy # run without installing
# or
pip install paperboy-mcpFrom source:
git clone https://github.com/sudostash/paperboy
cd paperboy
pip install -e ".[dev]"Optional system binaries
Binary | Enables | Install |
LibreOffice ( |
|
|
qpdf CLI |
|
|
Everything else (encryption, merge, split, optimize, repair, image/text conversion) works with no system binaries โ pikepdf ships qpdf in its wheel.
Connect it to your AI
One command (recommended)
The CLI writes the config into your client for you โ no hand-editing JSON:
paperboy install claude-desktop --root ~/Documents
paperboy install cursor --root ~/Documents
paperboy install claude-code --root ~/Documents # uses `claude mcp add`
paperboy install all --root ~/Documents # every detected clientSupported clients: claude-desktop, claude-code, cursor, windsurf.
Add --uvx to have the client launch the server via uvx (no global install needed).
--root sets the sandbox directory (see Security). Undo with paperboy uninstall <client>.
paperboy list-clients # show which clients are detected and where their config lives
paperboy config --root ~/Documents # print a snippet to paste into any other MCP clientIf you haven't installed the package globally, run the installer through uv:
uvx --from paperboy-mcp paperboy install claude-desktop --root ~/Documents --uvxManual config
Any MCP client takes the same shape โ paste this into its config
(for Claude Desktop, claude_desktop_config.json):
{
"mcpServers": {
"paperboy": {
"command": "uvx",
"args": ["--from", "paperboy-mcp", "paperboy"],
"env": { "PAPERBOY_ROOT": "/Users/you/Documents" }
}
}
}If you installed with pip, use "command": "paperboy" and drop the --from args.
paperboy config prints this for you with your own paths filled in.
Configuration
All configuration is environment variables. Sensible defaults; nothing is required.
Variable | Default | Purpose |
| (unset) | Strongly recommended. Confine all reads/writes to this directory tree. |
|
| Reject inputs larger than this. |
|
| Reject documents with more pages than this. |
|
| Seconds before a LibreOffice conversion is killed. |
|
| Default for the |
| (auto) | Path to the |
| (auto) | Path to the |
|
| Logging verbosity (logs go to stderr). |
Security
Set
PAPERBOY_ROOT. Without it the server can read and write anywhere the OS user can; with it, every path is resolved (symlinks and..included) and rejected if it escapes the tree.File-size and page-count caps keep a malicious or runaway PDF from exhausting memory.
Subprocess timeouts bound every LibreOffice and qpdf call.
No silent overwrites โ a tool refuses to clobber an existing file unless you opt in.
Passwords are tool arguments, so they appear in the client's tool-call log.
decrypt_pdfrequires the real password; it does not crack anything.
Architecture
paperboy/
โโโ engine/ โ transport-agnostic library: pure functions, paths in, dict out
โโโ server.py โ thin MCP adapter: path confinement, limits, error mapping
โโโ config.py โ Settings from environment
โโโ paths.py โ root confinement + size caps
โโโ pagespec.py โ "1,3,5-8,last" parsing
โโโ errors.py โ PdfUserError (shown to caller) vs internal crashesThe engine has no dependency on MCP. The server is a thin layer that enforces policy and presents errors. That separation is deliberate: the same engine can back a remote streamable-HTTP transport (with upload/download + auth) without touching the PDF logic.
Development
pip install -e ".[dev]"
pytest # engine, path confinement, and a real stdio round-trip
ruff check .Tests that need LibreOffice or the qpdf CLI skip automatically when those binaries are absent.
Roadmap
Streamable-HTTP transport with OAuth + per-session file isolation (hosted mode)
Watermarks, page numbering, and stamping
PDF โ image (page rasterization) and PDF/A conversion
OCR for scanned documents
License
MIT โ see LICENSE. Third-party component licenses are listed in NOTICE.md.
Available Tools
18 toolscheck_pdfC
Validate structural integrity and report any problems found.
| Name | Required | Description | Default |
|---|---|---|---|
| password | No | ||
| input_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Validate... and report' implies a non-destructive read, but it never states that the PDF is not modified, how encrypted files are handled, whether it fails or returns a problem list on invalid input, or what the report contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is efficient, though the terseness is achieved partly by omitting information the tool actually needs to convey.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, no annotations, and undocumented parameters mean the description must do more than one sentence. It omits what 'problems' are reported, how the result is returned, password handling, and the relationship to repair_pdf.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Two parameters with 0% schema description coverage, and the description adds no meaning for either. In particular, the password parameter's role for encrypted PDFs is left completely unexplained, so the description does not compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (validate) and the target (structural integrity) with a reporting outcome, which is more informative than the bare name check_pdf. However, it never says the resource is a PDF file and never distinguishes itself from the adjacent sibling repair_pdf, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of the obvious alternative repair_pdf. The check-then-repair workflow is exactly the decision an agent faces here, and the description leaves it entirely unaddressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_pdfB
Create a PDF from an image, a text/markdown file, or an Office/HTML document.
Office/HTML (docx, xlsx, pptx, odt, html, ...) requires LibreOffice installed.
| Name | Required | Description | Default |
|---|---|---|---|
| overwrite | No | ||
| input_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose a genuine behavioral trait beyond the schema: Office/HTML inputs require LibreOffice, which warns the agent about a possible failure mode. It says nothing, however, about whether existing files are overwritten, what the default output_path is, or what the return value/errors look like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose front-loaded, dependency stated as a follow-up constraint. Every sentence earns its place and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% schema coverage, the description should carry more. It covers the conversion capability and one dependency, but omits overwrite semantics, output_path defaulting, and return/failure behavior, leaving an agent to guess on two of three parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 3 parameters, so the description must compensate. It partially covers input_path by naming the accepted input formats, but leaves output_path and overwrite entirely undefined, including the meaning of the null defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (PDF) and enumerates the accepted input kinds: image, text/markdown, Office/HTML document. That is clear enough to know what the tool produces. It does not, however, differentiate itself from the sibling images_to_pdf, which overlaps on the image case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, and the obvious overlap with images_to_pdf is never addressed, so an agent cannot tell which to pick for an image input. The only conditional content is a runtime dependency (LibreOffice), which is a prerequisite rather than usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decrypt_pdfB
Remove the password from a PDF, given its correct password. Not a cracker.
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | ||
| overwrite | No | ||
| input_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that a correct password is required and that this is not a brute-force cracker, which materially shapes expectations of failure. However, it says nothing about whether the file is rewritten in place, how 'overwrite' behaves, or what happens on a wrong password.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the operation stated before the disqualifying caveat. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations, no output schema, and 4 undocumented parameters mean the description is the only source of behavior, yet it omits output destination and overwrite semantics โ the details most likely to cause a wrong or destructive call. Inadequate for a 4-parameter mutating tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description must compensate and largely does not. It conveys the semantics of 'password' (it must be the correct one) but leaves input_path, output_path, and especially the write-affecting 'overwrite' flag entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove the password from a PDF') plus the precondition ('given its correct password'), so the agent knows exactly what operation this performs. The inverse relationship to the sibling encrypt_pdf is evident, though it is never named explicitly, which keeps this from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Given its correct password' defines the condition for use, and 'Not a cracker' explicitly defines when NOT to use it (unknown/forgotten passwords). It offers no alternative route for the password-unknown case, so it falls just short of full when/when-not/alternatives coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_pagesC
Delete pages, e.g. pages="2,5-7".
| Name | Required | Description | Default |
|---|---|---|---|
| pages | Yes | ||
| password | No | ||
| overwrite | No | ||
| input_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden but only says 'delete'. It does not disclose that pages are permanently removed, whether the operation is in-place or requires an output_path, or how password-protected PDFs are handled โ significant gaps for a destructive mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence is front-loaded and waste-free, but it is under-specified rather than genuinely concise โ the brevity comes at the cost of missing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter destructive tool with no annotations and no output schema, the description is far too thin. It should cover the output_path/overwrite interplay and the password parameter, none of which are explained anywhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters. The description adds a useful page-range syntax example ('2,5-7') that the schema lacks, but leaves password, overwrite, input_path, and output_path entirely undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete pages'), which is unambiguous against siblings like extract_pages or rearrange_pages. However, it does not explicitly differentiate itself from those adjacent tools, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of when to prefer extract_pages or rearrange_pages. The agent must infer the use case purely from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encrypt_pdfA
Add a password to a PDF.
user_password opens the file; owner_password (defaults to it) controls permissions. algorithm: AES-256 (default), AES-128, RC4-128, RC4-40. allow_print/copy/modify set viewer-enforced restrictions. Use current_password if the input is already encrypted.
| Name | Required | Description | Default |
|---|---|---|---|
| algorithm | No | AES-256 | |
| overwrite | No | ||
| allow_copy | No | ||
| input_path | Yes | ||
| allow_print | No | ||
| output_path | No | ||
| allow_modify | No | ||
| user_password | Yes | ||
| owner_password | No | ||
| current_password | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does well on security semantics -- clarifying that owner_password defaults to user_password and that allow_* are only viewer-enforced restrictions, which is important caveating. But it never says whether the file is modified in place or written to output_path, what overwrite controls, or what happens on a wrong current_password, leaving real gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line statement of the action, followed by tight clauses that each map to a parameter group. Every phrase carries information; there is no filler or repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter file-mutating tool with no annotations and no output schema, the description covers password semantics well but omits where the result is written and how overwrite/output_path interact. An agent still lacks enough to predict side effects on the input file.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it explains user_password vs owner_password vs current_password, enumerates all four algorithm values with the default, and characterizes the allow_print/copy/modify flags. Only input_path, output_path, and overwrite go unexplained, which keeps it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource -- 'Add a password to a PDF' -- which unambiguously identifies the operation and implicitly separates it from the sibling decrypt_pdf. No ambiguity about which tool this is or what it produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool name and opening sentence make the general usage obvious, and 'Use current_password if the input is already encrypted' is a useful conditional. However, there is no explicit 'use decrypt_pdf to remove a password' routing, and no statement of when this tool should not be used. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_pagesC
Save only the given pages as a new PDF, e.g. pages="1-3,10".
| Name | Required | Description | Default |
|---|---|---|---|
| pages | Yes | ||
| password | No | ||
| overwrite | No | ||
| input_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that a new PDF is created, but says nothing about password handling, overwrite behavior, output path defaults, or whether the input file is modified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with a useful inline example and no wasted words. Its brevity is appropriate structurally, even though other dimensions reveal missing detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter, no-annotation, no-output-schema tool that creates a new file, the description is too thin. It omits key operational details such as output location behavior, overwrite handling, and password requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only documents the pages format with an example. It does not explain input_path, output_path, password, or overwrite semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: saving only selected pages as a new PDF. It is clear what the tool does, though it does not explicitly distinguish itself from siblings such as split_pdf or delete_pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies extraction via "Save only the given pages," but gives no explicit guidance on when to use this instead of delete_pages, rearrange_pages, or split_pdf. There are no exclusions or alternative-selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_textB
Extract text from all pages or a page spec (e.g. "1-3,7"). Returns text + truncation flag.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | ||
| password | No | ||
| max_chars | No | ||
| input_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries more burden but does disclose the return shape: text plus a truncation flag. It does not explain password handling, truncation conditions, or limits beyond that, leaving meaningful behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the action and followed by useful return information. There is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters, no annotations, no output schema, and 0% schema description coverage, the description is too sparse. It omits password behavior, max_chars/truncation details, and any error or permission context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies only the 'pages' parameter with an example ('1-3,7') and does not explain password, max_chars, or input_path semantics beyond what the bare schema names imply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Extract text' from pages. It also clarifies scope with 'all pages or a page spec,' but it does not explicitly distinguish the tool from siblings such as extract_pages, which could also involve page selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by saying it extracts text from all pages or a page spec. However, it gives no explicit guidance on when to choose this over extract_pages or other sibling tools, and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flatten_pdfC
Flatten form fields and annotations into page content (requires the qpdf CLI).
| Name | Required | Description | Default |
|---|---|---|---|
| password | No | ||
| overwrite | No | ||
| input_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses a hard external dependency (qpdf CLI) and implies a lossy, irreversible transformation (interactive fields become static content), but says nothing about in-place modification, password handling, or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the operation front-loaded and no padding. It is efficient, though arguably too terse given the undocumented parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter mutation tool with no annotations, no output schema, and 0% schema description coverage, the description is substantially incomplete. It never addresses output location defaults, overwrite semantics, or password-protected inputs, all of which determine correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters, and the description mentions none of them. Nothing explains input_path vs output_path, what overwrite controls, or that password unlocks encrypted input, so the description provides zero compensation for the documentation gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (flatten) and the exact resources affected (form fields and annotations into page content). It is unambiguous and easily distinguished from siblings like encrypt_pdf or optimize_pdf, though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives such as optimize_pdf or convert_to_pdf, nor any stated preconditions beyond the CLI dependency. The agent must infer usage entirely from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metadataC
Read document metadata: title, author, subject, keywords, creator, producer.
| Name | Required | Description | Default |
|---|---|---|---|
| password | No | ||
| input_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Read' implies non-destructive access, but there is no mention of password-protected files, failure modes for malformed PDFs, or what happens with missing metadata keys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence, front-loaded with the verb and resource, with the field list as useful detail. No filler, though it is arguably too sparse for a 2-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 0% schema coverage, no annotations, and no output schema, the description should at minimum explain input_path and note password support for encrypted documents. The return-field list is helpful context but the input contract is undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does not: neither the required input_path nor the optional password parameter is explained. The listed items are return values, not parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read document metadata') and enumerates the exact fields returned, which helps an agent know what it gets. However, it does not differentiate from the sibling pdf_info, which plausibly overlaps in purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no mention of alternatives such as pdf_info or set_metadata. The agent must infer from the tool name alone whether this or pdf_info is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
images_to_pdfC
Combine images into a single PDF, one image per page, in order.
| Name | Required | Description | Default |
|---|---|---|---|
| overwrite | No | ||
| input_paths | Yes | ||
| output_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and only discloses page order and one-image-per-page layout. It does not explain overwrite behavior, supported image formats, or what happens when the output path already exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. The key operation and ordering behavior are stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a file-creating tool with no annotations, no output schema, and 0% parameter description coverage, the definition is too sparse. It omits overwrite semantics, supported formats, error behavior, and return expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it never names or explains input_paths, output_path, or overwrite. It only weakly implies that input image order matters and that the output is a single PDF.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: combine images into a single PDF. It also adds ordering and page layout, which helps distinguish it from generic conversion or PDF merging, though it does not explicitly name the relevant siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used for image-to-PDF creation, but it gives no explicit when-to-use guidance, prerequisites, or comparison to alternatives such as convert_to_pdf or merge_pdfs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_pdfsB
Merge PDFs in the given order into output_path.
passwords optionally maps an input path to its password for encrypted inputs.
| Name | Required | Description | Default |
|---|---|---|---|
| overwrite | No | ||
| passwords | No | ||
| input_paths | Yes | ||
| output_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the ordering guarantee and that passwords apply to encrypted inputs, but it omits the critical mutation semantics: what happens when output_path already exists (the overwrite parameter is never mentioned), and whether inputs are modified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and output target, followed by the less common password case. Nothing is padded, though the second sentence could be folded in for tighter structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter file-mutating tool with no annotations and no output schema, the description covers the primary flow and the encrypted-input case but leaves the overwrite behavior and the failure/return expectations unstated. A reader can call it, but not confidently predict side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does explain input ordering, output_path, and the passwords map ('maps an input path to its password') beyond the bare schema. However, the overwrite parameter is left completely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Merge PDFs') plus the destination ('into output_path') and a meaningful behavioral detail (order is preserved). The action is unambiguous and clearly distinct from siblings like split_pdf or extract_pages, though it never names or contrasts those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no routing to or away from alternatives such as images_to_pdf or convert_to_pdf. The only situational hint is the implicit note that passwords are needed for encrypted inputs, which is a parameter detail rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_pdfC
Shrink a PDF: linearize ("fast web view") and recompress object streams.
| Name | Required | Description | Default |
|---|---|---|---|
| compress | No | ||
| password | No | ||
| linearize | No | ||
| overwrite | No | ||
| input_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it only describes what the transformation does. It doesn't state whether the operation is destructive (the overwrite param and output_path handling suggest in-place vs. copy behavior that is never explained), whether a password is needed for encrypted inputs, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste. It is appropriately terse, though the brevity contributes to the underspecification captured in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 6 parameters, no annotations, no output schema, and 0% schema coverage, the description is far too thin. An agent lacks the information needed to call it correctly (password handling, overwrite/output behavior).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters, and the description only touches on two of them indirectly (linearize, compress). It says nothing about password, overwrite, input_path, or output_path semantics, leaving the challenge of handling password-protected or in-place edits unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Shrink a PDF') and names the two operations (linearize, recompress), which distinguishes it from siblings like repair_pdf or flatten_pdf. However, it doesn't explicitly differentiate itself from those tools, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as repair_pdf, flatten_pdf, or encrypt_pdf. There are no prerequisites, no exclusions, and no routing cues for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_infoA
Report page count, file size, PDF version, encryption status and metadata.
Works on an encrypted file without a password (returns is_encrypted only).
| Name | Required | Description | Default |
|---|---|---|---|
| password | No | ||
| input_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses a genuinely useful non-obvious behavior (operates on encrypted files without a password, returning is_encrypted only), but it omits the read-only/non-destructive safety profile, error behavior on corrupt files, and any cost/perf notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the primary purpose and return fields, then the encryption caveat. Every sentence earns its place; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description does the necessary work by listing what is returned and how encryption is handled. It is nearly complete for a simple inspection tool; the only gap is the safety/destructiveness profile and unmentioned input_path semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It adds real meaning for the password parameter by explaining it is not required to read encryption status, but input_path is left entirely unexplained and the password's exact effect on other returned fields is not clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Report) and resource (PDF info) and enumerates the exact fields returned (page count, file size, version, encryption status, metadata). This clearly separates it from extract_text or manipulation siblings, but it does not explicitly distinguish itself from the closest siblings get_metadata and check_pdf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage for inspecting a PDF without modifying it, and it gives one useful conditional ('works on an encrypted file without a password'). However, it never states when to pick this over get_metadata or check_pdf, which overlap heavily in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rearrange_pagesA
Reorder/duplicate/reverse pages. page_order e.g. "3,1,2", "5-1" (reverse), "last,1-4".
Unlisted pages are dropped unless append_unlisted=true. Pages may repeat to duplicate.
| Name | Required | Description | Default |
|---|---|---|---|
| password | No | ||
| overwrite | No | ||
| input_path | Yes | ||
| page_order | Yes | ||
| output_path | No | ||
| append_unlisted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose two important behaviors โ unlisted pages are dropped unless append_unlisted=true, and repeated pages duplicate content โ but says nothing about overwrite semantics, password handling, or where output is written for a tool that mutates/creates files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place, with the core action front-loaded and the syntax example and drop behavior following immediately. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no annotations and no output schema, the description covers the critical page_order and append_unlisted semantics but omits the overwrite/output_path behavior that determines where results land and whether the input is modified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters, but the description compensates well for the most complex one, page_order, with concrete syntax examples ('3,1,2', '5-1', 'last,1-4') and explains append_unlisted. It leaves password, overwrite, input_path, and output_path entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific actions (reorder/duplicate/reverse) on a specific resource (pages), which clearly distinguishes it from siblings like delete_pages, extract_pages, and rotate_pages. An agent can tell what it does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the actions described, but there is no explicit when-to-use guidance or comparison to alternatives such as extract_pages (subset selection) or rotate_pages. The agent must infer the selection criteria from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repair_pdfC
Rebuild a damaged PDF's structure by reading and rewriting it.
| Name | Required | Description | Default |
|---|---|---|---|
| password | No | ||
| overwrite | No | ||
| input_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden but only discloses the mechanism ('reading and rewriting'). It says nothing about whether the original file is modified, how failures on irreparable PDFs are handled, or permission/error behavior โ significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the operation and mechanism come first. It is efficient, though arguably too terse for a four-parameter mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter mutation tool with no annotations and no schema descriptions, the description omits parameter meaning, side effects, and success/failure behavior. It is not complete enough for an agent to call it correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description explains none of the four parameters. It never mentions input_path, output_path, overwrite, or password, nor the interaction between output_path and overwrite, so it adds no parameter meaning at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: rebuild/repair a damaged PDF's structure, and adds the mechanism ('reading and rewriting'). An agent can tell this is a repair operation rather than extraction or optimization. It stops short of differentiating from near-siblings like check_pdf or optimize_pdf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Damaged PDF' implicitly signals the trigger condition, so usage is inferable. However, it gives no explicit when-to-use guidance, no note about first diagnosing with check_pdf, and no alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rotate_pagesC
Rotate pages clockwise by 90/180/270 degrees (all pages if pages omitted).
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | ||
| degrees | Yes | ||
| password | No | ||
| overwrite | No | ||
| input_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses rotation direction and default scope, but says nothing about whether the source file is modified, how `overwrite` and `output_path` interact, or that password-protected PDFs require `password`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the core operation front-loaded and the default-scope caveat tucked into a parenthetical. Every clause carries information; nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with six undocumented parameters, no annotations, and no output schema, the description is too thin. It covers the rotation itself but leaves file I/O, overwrite semantics, and encryption handling entirely to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across six parameters, so the description must compensate and does so only partially. It clarifies `degrees` (allowed 90/180/270) and the default behavior of `pages`, but `input_path`, `output_path`, `password`, and `overwrite` are left completely undefined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (rotate), resource (pages), and direction (clockwise), so there is no ambiguity about the operation. It does not explicitly contrast with siblings like rearrange_pages or extract_pages, but 'rotate' is distinct enough in this set that an agent can route to it without confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage detail is the parenthetical that omitting `pages` rotates all pages, which is really a default-value statement, not guidance. There is no mention of when to prefer this over rearrange_pages, nor prerequisites such as needing a password for encrypted inputs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_metadataC
Set metadata. fields keys: title, author, subject, keywords, creator, producer.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | ||
| password | No | ||
| overwrite | No | ||
| input_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and does not meet it. It never says whether metadata is written in place or to output_path, what happens to existing tags by default, how 'overwrite' behaves, or that password-protected files require a password.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded and free of filler, but brevity here shades into under-specification rather than disciplined concision. The allowed-keys sentence is the only content-bearing part.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with a nested object, zero schema descriptions, no annotations, and no output schema, this is thin. The allow-list of metadata keys is helpful, but write semantics, path handling, and password/overwrite behavior are all missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 5 parameters, so the description must compensate and largely fails. It usefully enumerates the permitted keys inside 'fields', but says nothing about input_path, output_path, overwrite, or password, or the in-place-vs-copy behavior they imply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Set metadata' names a specific verb and resource, and the sibling set (get_metadata, pdf_info) makes the read/write distinction inferable. It does not explicitly contrast itself with get_metadata, but the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus get_metadata or pdf_info, no prerequisites (e.g., needing to read metadata first, or encryption requirements). The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
split_pdfB
Split a PDF into several files.
ranges: semicolon-separated page specs, one file each, e.g. "1-3;4-6;7-". If omitted, every page becomes its own file.
| Name | Required | Description | Default |
|---|---|---|---|
| ranges | No | ||
| password | No | ||
| overwrite | No | ||
| input_path | Yes | ||
| output_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It states output cardinalityโone file per range, otherwise one file per pageโbut omits overwrite behavior, password handling, output naming, and whether the original file is modified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded, and includes a concrete example. Every sentence supports range formatting or default behavior, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with no annotations, no output schema, and zero schema descriptions, the definition is incomplete. It covers the most distinctive parameter but leaves overwrite/password/output behavior and error expectations unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only documents the ranges parameter, including its semicolon syntax and default. It does not explain password, overwrite, input_path, or output_dir semantics, leaving most parameters to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: "Split a PDF into several files." That lets an agent distinguish it from merge_pdfs and extract_pages by the multiple-output outcome, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the ranges format and the default when ranges is omitted, which helps with invocation. However, it does not state when to choose split_pdf over extract_pages or merge_pdfs, nor does it mention prerequisites or exclusions.
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.
18 tool updates
v0.1.0- First observed
check_pdf - First observed
convert_to_pdf - First observed
decrypt_pdf - First observed
delete_pages - First observed
encrypt_pdf - First observed
extract_pages - First observed
extract_text - First observed
flatten_pdf - First observed
get_metadata - First observed
images_to_pdf - First observed
merge_pdfs - First observed
optimize_pdf - First observed
pdf_info - First observed
rearrange_pages - First observed
repair_pdf - First observed
rotate_pages - First observed
set_metadata - First observed
split_pdf
TDQS
Scored across 18 tools
Most tools target a distinct operation (encrypt vs decrypt, merge vs split, rotate vs rearrange), so boundaries are usually clear. Minor overlaps exist: pdf_info already reports metadata that get_metadata reads, and convert_to_pdf can create a PDF from an image, which images_to_pdf also does.
Nearly all names use a consistent snake_case verb_noun pattern (extract_text, merge_pdfs, rotate_pages, set_metadata). The lone deviation is pdf_info, which puts the noun first, but it stays readable and in the same casing convention.
18 tools is on the heavier side but each covers a genuinely distinct PDF task (metadata, security, page ops, merge/split, optimize, repair, flatten, conversion). No tool feels redundant enough to remove, so the count is justified by the breadth of the domain.
The surface covers the full lifecycle well: inspect, validate, read/write metadata, encrypt/decrypt, page manipulation, merge/split, optimize, repair, flatten, and conversion. Only niche operations like image extraction or watermarking are absent, which agents can work around.
Maintenance
Related MCP Connectors
- PDFLeanOAuthcom.pdflean
PDF tools for AI agents: validate, extract, merge, split, compress, OCR, sign and redact.
Merge, split, extract, rotate, reorder and stamp PDF pages from your AI chat, all offline.
Merge, split, extract, rotate, reorder and stamp PDF pages from your AI chat, all offline.
Merge, split, extract, rotate, reorder and stamp PDF pages from your AI chat, all offline.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables PDF manipulation including text, images, annotations, form fields, page operations, and metadata through natural language.16MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to perform 13 PDF operations (merge, split, compress, watermark, encrypt, and more) on local files via MCP.3-
- AlicenseCqualityDmaintenanceEnables AI assistants to perform PDF operations like merge, split, compress, convert, encrypt, OCR, and summarize using natural language.988 npmMIT
- AlicenseBqualityAmaintenanceEnables AI agents to perform local-first PDF processing entirely on-device, including OCR write-back to make scans searchable, unlocking and re-encrypting PDFs, splitting/merging/rotating pages, and compressing files, with no cloud calls or file uploads.2556 PyPI1MIT