papyrio-mcp
papyrio-mcp is an MCP server that lets an assistant process PDFs and related files through the Papyrio API while reading and writing local absolute paths.
Compress PDFs with low/medium/high compression levels.
Merge 2–10 PDFs into one document in a specified order.
Split every PDF page into separate files as a ZIP archive.
Extract a PDF’s text layer as UTF-8 text.
OCR scanned PDFs to add a searchable text layer.
Convert PDFs to editable Word documents.
Render PDF pages as JPG images in a ZIP archive.
Convert Word, PowerPoint, or Excel documents to PDF.
Wrap JPG, PNG, or WebP images in a PDF page.
Render a public webpage URL to PDF.
Encrypt PDFs with AES-256 password protection.
Remove a known password from a PDF.
Use optional output paths with
-papyriodefaults, exceptwebpage_to_pdfrequiresoutput_path.
papyrio-mcp
An MCP server for the Papyrio PDF API. Setup for Claude, Cursor and VS Code: papyrio.net/mcp. It lets an assistant compress, merge, OCR and convert PDFs on your own machine, reading and writing local files, so multi-step work does not mean uploading and downloading between every step.
OCR every scan in ~/invoices, merge them into one PDF, compress it under 5 MBis four tool calls the assistant makes by itself.
Install
Claude Desktop, one click
Download papyrio-mcp.mcpb and double-click it. Claude Desktop opens an install screen; leave the API key empty for the free guest tier or paste a RapidAPI key (see below). You can change it later under Settings, Extensions.
By hand, or any other client
Add this to your Claude Desktop config:
macOS ~/Library/Application Support/Claude/claude_desktop_config.json
Windows %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"papyrio": {
"command": "npx",
"args": ["-y", "papyrio-mcp"]
}
}
}Restart Claude Desktop. The tools appear under the connector icon.
Related MCP server: quillpdf-mcp
API key
The server works without one, metered as ordinary free web traffic: three operations a day per IP address. Enough to see whether it is useful.
For real use, subscribe on RapidAPI and pass the key:
{
"mcpServers": {
"papyrio": {
"command": "npx",
"args": ["-y", "papyrio-mcp"],
"env": { "PAPYRIO_API_KEY": "your-rapidapi-key" }
}
}
}The free RapidAPI tier is 50 requests a month and needs no card.
Tools
Tool | Does | Writes |
| Shrinks a PDF, 30–80% on image-heavy files |
|
| Joins 2–10 PDFs in order |
|
| Separates every page into its own file |
|
| Returns the text layer as UTF-8 |
|
| Rebuilds the document as an editable .docx |
|
| Renders every page as a JPG |
|
| Adds a searchable text layer to a scan; |
|
| Word, PowerPoint or Excel to PDF |
|
| Wraps a JPG, PNG or WebP in a PDF page |
|
| Renders a public URL in a headless browser |
|
| Encrypts with AES-256 |
|
| Removes a password you already know |
|
Every tool takes absolute paths. output_path is optional and defaults to the
input name with a -papyrio suffix — except webpage_to_pdf, which has no
input file to derive a name from and so requires it.
Adding a tool
Add an entry to src/tools.ts. The MCP tool, its input schema and the HTTP
call are all generated from it.
Testing
npm run build
PAPYRIO_API_KEY=your-key node smoke.mjsDrives all twelve tools over the real MCP protocol against the live API and
checks the returned file's magic bytes, so a JSON error body named .pdf fails
rather than passes. Without a key it runs on the guest tier, where three
operations a day means most cases will hit rate_limit_exceeded.
Develop
npm install
npm run buildPoint your config at the local build while working on it:
{
"mcpServers": {
"papyrio": {
"command": "node",
"args": ["/absolute/path/to/mcp/dist/index.js"]
}
}
}Privacy: files are sent to the Papyrio API, processed in memory, and discarded when the response is sent. Nothing is stored.
Licence
MIT
Available Tools
12 toolscompress_pdfA
Shrink a PDF by downsampling its images. Image-heavy files lose 30-80% of their size; text stays selectable. Use this when a PDF is too large to email or upload. Already-optimized files come back unchanged rather than larger. The input is uploaded to the Papyrio API, processed in memory and not stored. The result is written to output_path, replacing any file already there, and the call returns that path and the size in bytes. Inputs are limited to 50 MB, and each call counts as one operation against the daily quota.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Absolute path to the PDF to compress. | |
| level | No | Compression strength. low keeps images at 300 DPI, medium at 150, high at 72. | medium |
| output_path | No | Absolute path to write the result to. Defaults to the input file with a "-papyrio.pdf" suffix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it well: overwrite semantics on output_path, the return value (path plus size in bytes), the 50 MB input cap, quota consumption per call, in-memory processing with no storage, and the no-op behavior for already-optimized inputs.
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?
Five short sentences, front-loaded with the action and effect, then the use case, then operational constraints. No sentence is filler and the ordering follows what an agent needs before deciding to call.
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 exists, and the description still explains exactly what comes back (path and byte size). Size limit, quota cost, overwrite risk and storage behavior are all covered, leaving nothing an agent would need to infer before calling.
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 100% so the schema already explains file, level and output_path. The description adds real value on top, spelling out that output_path replaces any existing file and defaulting behavior, and tying level indirectly to the quality/size tradeoff.
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 ('Shrink a PDF') plus the mechanism (image downsampling), and notes text stays selectable. This clearly separates it from conversion/extraction siblings like extract_pdf_text or pdf_to_jpg, none of which compress.
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?
Gives an explicit trigger case ('when a PDF is too large to email or upload') and notes already-optimized files are returned unchanged, which heads off a wasteful retry. It doesn't name an alternative tool or an exclusion condition, but no sibling covers compression, so the guidance is effectively complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_pdf_textA
Return the text of a PDF as UTF-8, so it can be read or summarized. Fast and exact when the PDF already has a text layer. A scanned PDF has none — run ocr_pdf on it first. The input is uploaded to the Papyrio API, processed in memory and not stored. The result is written to output_path, replacing any file already there, and the call returns that path and the size in bytes. Inputs are limited to 50 MB, and each call counts as one operation against the daily quota.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Absolute path to the PDF. | |
| output_path | No | Absolute path to write the result to. Defaults to the input file with a "-papyrio.txt" suffix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses the upload to the Papyrio API, in-memory processing with no storage, an overwrite of output_path (a destructive side effect), the return payload (path and byte size), a 50 MB limit, and per-call quota consumption. This is exactly the behavioral context an agent needs before committing.
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?
Five tight sentences, front-loaded with the core action and immediately followed by the scanned-PDF caveat. Each sentence conveys distinct, operationally relevant information with no padding.
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 two-parameter tool with no output schema, the description still explains the return value (path and byte size in bytes) and covers safety, limits, and quota. An agent has everything needed to call it correctly.
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 100%, so both parameters are already documented and the baseline is 3. The description adds genuine value beyond the schema by warning that output_path replaces any existing file and that the result is written to that path, which the schema does not state.
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 ('Return the text of a PDF as UTF-8') plus the downstream intent (read or summarize). It explicitly distinguishes itself from the sibling ocr_pdf, so an agent can route correctly without opening either 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?
Gives an explicit condition for use ('when the PDF already has a text layer'), an explicit exclusion ('A scanned PDF has none'), and names the alternative to run first ('run ocr_pdf on it first'). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_to_pdfA
Wrap a JPG, PNG or WebP image in a PDF page. Use this when an image needs to be submitted or printed as a PDF. The input is uploaded to the Papyrio API, processed in memory and not stored. The result is written to output_path, replacing any file already there, and the call returns that path and the size in bytes. Inputs are limited to 50 MB, and each call counts as one operation against the daily quota.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Absolute path to the image. | |
| output_path | No | Absolute path to write the result to. Defaults to the input file with a "-papyrio.pdf" suffix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it discloses data handling (uploaded to the API, processed in memory, not stored), destructive overwrite of output_path, the 50 MB input limit, and per-call quota consumption. It also states exactly what the call returns.
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?
Four short sentences, front-loaded with purpose then usage, then behavior and limits. No sentence is redundant; each conveys a distinct operationally useful fact.
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 two-parameter conversion tool with no annotations and no output schema, the description covers everything an agent needs: input formats, size cap, storage behavior, overwrite risk, return value, and quota impact.
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 100%, so both parameters are already documented. The description still adds real semantics beyond the schema by stating that output_path is overwritten if a file already exists, which the schema does not say.
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 ('wrap a JPG, PNG or WebP image in a PDF page') and names the accepted input formats. It is clearly distinguishable from sibling conversions like office_to_pdf, webpage_to_pdf, and the reverse pdf_to_jpg.
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?
Gives a clear usage condition: 'Use this when an image needs to be submitted or printed as a PDF.' It does not explicitly exclude alternatives (e.g. when to prefer office_to_pdf for a document), but the image-format scoping makes the selection obvious in practice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_pdfsA
Combine 2 to 10 PDFs into one document, in the order given. Use this to join separate scans, chapters or invoices into a single file. Password-protected files must be unlocked first. The input is uploaded to the Papyrio API, processed in memory and not stored. The result is written to output_path, replacing any file already there, and the call returns that path and the size in bytes. Inputs are limited to 50 MB, and each call counts as one operation against the daily quota.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Absolute paths to the PDFs, in the order they should appear. | |
| output_path | No | Absolute path to write the result to. Defaults to the input file with a "-papyrio.pdf" suffix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses upload to the Papyrio API, in-memory processing with no storage, an overwrite of any existing file at output_path, the 50 MB input cap, and quota consumption. The destructive overwrite warning is especially valuable since no annotations flag it.
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?
Five tight sentences, front-loaded with the core action and scope, followed by prerequisites, privacy, side effects, and limits. Every sentence carries distinct information with no 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?
Although there is no output schema, the description states the return value (path and size in bytes), covers side effects, size limits, and quota cost. An agent has everything needed to invoke this correctly on the first try.
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 100%, so the baseline is 3, but the description adds meaning beyond the schema: it reinforces that file order determines output order and that output_path replaces any existing file. It does not otherwise elaborate on path formats, but the added overwrite semantics are real value.
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?
Opens with a specific verb and resource ("Combine 2 to 10 PDFs into one document") plus a scope constraint (order preserved, count bounded). It is clearly distinguishable from siblings like split_pdf or extract_pdf_text without needing 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?
Gives concrete use cases (scans, chapters, invoices) and an explicit prerequisite: password-protected files must be unlocked first, which implicitly routes to unlock_pdf. It does not explicitly name alternatives or state when not to use it, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ocr_pdfA
Add an invisible text layer to a scanned PDF so its text can be searched, selected and extracted. Use this before extract_pdf_text or pdf_to_word on a scan or photographed document, and set lang when the text is not English. The page images are kept, so the output is about the same size as the input, and pages that already have text are left untouched. Takes roughly 2-10 seconds per page. Scans at 300 DPI or higher read well; below 150 DPI accuracy degrades badly. The input is uploaded to the Papyrio API, processed in memory and not stored. The result is written to output_path, replacing any file already there, and the call returns that path and the size in bytes. Inputs are limited to 50 MB, and each call counts as one operation against the daily quota.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Absolute path to the scanned PDF. | |
| lang | No | Language of the document's text as a Tesseract code: eng (English), rus (Russian), spa (Spanish), ita (Italian), uzb (Uzbek, Latin script), uzb_cyrl (Uzbek, Cyrillic) or kaz (Kazakh). For mixed documents join two with '+', for example rus+eng. Any other value is rejected. Defaults to eng. | eng |
| output_path | No | Absolute path to write the result to. Defaults to the input file with a "-papyrio.pdf" suffix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so richly: page images preserved and output size similar to input, already-texted pages untouched, 2-10s per page runtime, DPI thresholds for accuracy, upload to the Papyrio API processed in memory and not stored, overwrite of output_path, return value, 50 MB input cap, and one-operation quota cost.
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?
Purpose and the ordering instruction are front-loaded, and every sentence carries operational information (limits, timing, DPI, privacy, return value). It is on the dense side with several clauses per sentence, but no sentence is 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?
There is no output schema, and the description compensates by stating exactly what is returned ('that path and the size in bytes'). Given the simple three-parameter schema and full behavioral disclosure, an agent has everything needed to invoke this correctly.
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 100%, so the baseline is 3; the description adds value beyond the schema by giving the conditional rule for lang ('when the text is not English') and by flagging that output_path replacement overwrites existing files. It stops short of elaborating the '+' language-joining syntax, which the schema already covers.
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?
Specific verb+resource ('Add an invisible text layer to a scanned PDF') with the outcome stated (searchable, selectable, extractable text). It is clearly distinguishable from every sibling, since none of the other tools operate on a scan to produce an OCR layer.
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?
Explicitly says to use this before extract_pdf_text or pdf_to_word on a scan or photographed document, and adds the conditional 'set lang when the text is not English'. Both the when-to-use and the ordering relative to alternatives are stated.
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 Word (.doc, .docx, .odt), PowerPoint (.ppt, .pptx) or Excel (.xls, .xlsx) document to PDF with LibreOffice, keeping fonts, tables, images and page layout; each slide or sheet becomes one or more pages. Use this to turn an Office file into a fixed, shareable PDF, not for files that are already PDFs. Large presentations can take 30 seconds or more. Password-protected Office files are not supported. The input is uploaded to the Papyrio API, processed in memory and not stored. The result is written to output_path, replacing any file already there, and the call returns that path and the size in bytes. Inputs are limited to 50 MB, and each call counts as one operation against the daily quota.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Absolute path to the Office document. The extension decides how it is read, so it must be one of .doc, .docx, .odt, .ppt, .pptx, .xls or .xlsx. | |
| output_path | No | Absolute path to write the result to. Defaults to the input file with a "-papyrio.pdf" suffix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it discloses latency ('30 seconds or more'), the privacy model (uploaded to the Papyrio API, processed in memory, not stored), destructive behavior (output_path is replaced if it exists), the return value (path and size in bytes), a 50 MB input cap, and per-call quota consumption.
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?
Single dense block, front-loaded with the verb and supported formats, with constraints following. Nearly every clause carries actionable information, though the privacy and quota details could be split more cleanly for scanning.
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 two-parameter conversion tool with no output schema, everything an agent needs is present: accepted formats, output destination behavior, size limit, failure mode (encrypted files), runtime expectations, and the shape of the return value.
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 already 100%, so the baseline is 3; the description adds meaning beyond it by explaining that output_path is overwritten and that the resolved path is returned, and by noting the extension drives parsing. It does not restate the default suffix logic, but that is fully covered in the schema.
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 ('Convert a Word (.doc, .docx, .odt), PowerPoint ... or Excel ... document to PDF') with all supported extensions and the engine used. It is clearly distinguishable from siblings such as pdf_to_word (reverse direction) and image_to_pdf/webpage_to_pdf (different sources).
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?
Explicitly gives the use case ('turn an Office file into a fixed, shareable PDF') and an exclusion ('not for files that are already PDFs'), plus a hard constraint that password-protected Office files are not supported. No alternatives need inferring.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_to_jpgA
Render every page of a PDF as a JPG image, returned as a ZIP archive. Use this when the pages are needed as pictures, for a thumbnail, a slide or an image pipeline. The input is uploaded to the Papyrio API, processed in memory and not stored. The result is written to output_path, replacing any file already there, and the call returns that path and the size in bytes. Inputs are limited to 50 MB, and each call counts as one operation against the daily quota.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Absolute path to the PDF. | |
| output_path | No | Absolute path to write the result to. Defaults to the input file with a "-papyrio.zip" suffix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: 50 MB input cap, per-call quota cost, in-memory processing with no storage, and destructive overwrite of output_path. These are exactly the operational facts an agent needs before invoking.
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?
Four tight sentences: what it does first, then when to use it, then storage/safety behavior, then limits and return value. 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?
No output schema, but the description states the return shape (path and byte size), plus limits, overwrite semantics, and processing model — everything needed to call it correctly.
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 100%, so baseline would be 3. The description adds value beyond the schema by disclosing that output_path is overwritten if it exists and by describing the return payload (path plus size in bytes), which the schema lacks.
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: render every page of a PDF as JPG, returned as a ZIP. The output format detail (ZIP of JPGs) clearly separates it from extract_pdf_text, ocr_pdf, and 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit use cases — thumbnail, slide, image pipeline — which implies when to pick this over text-extraction siblings. It does not name an alternative tool or state exclusions, so it stops short of a 5.
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 into an editable Word document. PDFs exported from Word, Google Docs or InDesign come through well. A scanned PDF is a picture of a page, so run ocr_pdf on it first. The input is uploaded to the Papyrio API, processed in memory and not stored. The result is written to output_path, replacing any file already there, and the call returns that path and the size in bytes. Inputs are limited to 50 MB, and each call counts as one operation against the daily quota.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Absolute path to the PDF. | |
| output_path | No | Absolute path to write the result to. Defaults to the input file with a "-papyrio.docx" suffix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it discloses the upload destination (Papyrio API), that processing is in-memory and non-persistent, that output_path is overwritten destructively, the 50 MB input cap, and that each call consumes one unit of daily quota. These are exactly the operational facts an agent cannot infer elsewhere.
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 with purpose and the scanned-PDF caveat before operational details, and nearly every sentence adds distinct information. It is dense but not padded; one could argue the privacy sentence and quota sentence are separable, but both are load-bearing for agent behavior.
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?
Given no annotations and no output schema, the description covers safety (overwrite), limits (50 MB, quota), data handling, failure-mode routing (scanned PDFs), and return shape. An agent has everything needed to call it correctly and to know when to call ocr_pdf instead.
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 100%, so the baseline is 3, but the description adds value the schema does not: it explains that the result is written to output_path and that any existing file there is replaced, clarifying the destructive side effect of that parameter. It also states the call returns the path and byte size, which compensates for the absence of an output schema.
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 ('Convert a PDF into an editable Word document') and immediately distinguishes itself from pdf_to_jpg, extract_pdf_text, and office_to_pdf by naming the output format. The routing sentence about scanned PDFs further separates its domain from ocr_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?
Gives explicit when-it-works conditions (Word, Google Docs, InDesign exports) and an explicit when-not plus alternative ('A scanned PDF is a picture of a page, so run ocr_pdf on it first'). This is exactly the agent routing signal that matters when ten sibling conversion tools exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
protect_pdfA
Encrypt a PDF with AES-256 so it cannot be opened without the password. Use this before sending a document that contains anything private. The input is uploaded to the Papyrio API, processed in memory and not stored. The result is written to output_path, replacing any file already there, and the call returns that path and the size in bytes. Inputs are limited to 50 MB, and each call counts as one operation against the daily quota.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Absolute path to the PDF to encrypt. | |
| password | Yes | Password that will be required to open the resulting PDF. | |
| output_path | No | Absolute path to write the result to. Defaults to the input file with a "-papyrio.pdf" suffix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it says the input is uploaded to the Papyrio API, processed in memory and not stored, that output_path is overwritten (a destructive side effect the schema does not flag), the return value shape, the 50 MB input limit, and per-call quota consumption.
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?
Four sentences, each carrying distinct new information (purpose, trigger, data handling, side effects/limits), with the core action stated first and zero 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?
No output schema exists, so the description supplies the return value itself, and it covers the destructive overwrite, privacy handling, size cap, and quota. For a 3-parameter encryption tool this is complete enough to call 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 100%, so a baseline of 3 is warranted, but the description adds real meaning beyond the schema by disclosing that output_path replaces any existing file and that the call returns the path and byte size. It doesn't discuss password strength requirements, a minor omission.
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 ('Encrypt a PDF with AES-256') along with the concrete effect: the file cannot be opened without a password. This is instantly distinguishable from sibling tools such as unlock_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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage trigger: 'Use this before sending a document that contains anything private.' That tells an agent when to reach for it, though it never names unlock_pdf or other alternatives as the opposite operation, so the alternative framing is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
split_pdfA
Separate every page of a PDF into its own file, returned as a ZIP archive. Use this to pull single pages out of a long document. The input is uploaded to the Papyrio API, processed in memory and not stored. The result is written to output_path, replacing any file already there, and the call returns that path and the size in bytes. Inputs are limited to 50 MB, and each call counts as one operation against the daily quota.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Absolute path to the PDF to split. | |
| output_path | No | Absolute path to write the result to. Defaults to the input file with a "-papyrio.zip" suffix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses that input is uploaded to the Papyrio API, processed in memory and not stored, that output_path overwrites any existing file, the 50 MB size limit, and that each call consumes one daily-quota operation. It also states the return payload (path and size in bytes).
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 output format and use case are front-loaded, followed by privacy, side effects, limits, and return value in tight sentences. No sentence is filler; the density is high but every clause carries information an agent needs.
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 two-parameter tool with no output schema, the description covers purpose, when to use, side effects, privacy, limits, quota cost, and return shape. Nothing an agent needs to invoke it correctly is 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 coverage is 100%, so the schema already defines both parameters. The description goes beyond it by explaining the overwrite behavior of output_path and the shape of the return value, adding operational meaning rather than repeating the schema.
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 ('Separate every page of a PDF into its own file, returned as a ZIP archive'), which clearly distinguishes it from siblings like merge_pdfs (the inverse operation) and extract_pdf_text.
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?
'Use this to pull single pages out of a long document' gives a clear use case, and the ZIP output clarifies the deliverable. However, it never explicitly names an alternative (e.g., extract_pdf_text when you only need text) or states when not to use it, so the routing 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.
unlock_pdfA
Remove the password from a PDF you already know the password for. This decrypts with the supplied password; it does not break or guess encryption. The input is uploaded to the Papyrio API, processed in memory and not stored. The result is written to output_path, replacing any file already there, and the call returns that path and the size in bytes. Inputs are limited to 50 MB, and each call counts as one operation against the daily quota.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Absolute path to the password-protected PDF. | |
| password | Yes | The PDF's current password. | |
| output_path | No | Absolute path to write the result to. Defaults to the input file with a "-papyrio.pdf" suffix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the upload to the Papyrio API, in-memory processing with no retention, the destructive overwrite of output_path, a 50 MB input cap, and per-call quota consumption. This is exactly the behavioral context an agent needs before invoking 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?
Five sentences, front-loaded with the action and its constraint, then storage/limit details, then output behavior. Every sentence conveys a distinct operational fact with no restatement of the tool name or title.
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 3-parameter tool with no annotations and no output schema, the description covers the security model, data handling, size limit, quota cost, overwrite behavior, and return values. Nothing an agent needs to decide or call correctly is 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 coverage is 100%, so the baseline is 3; the description goes further by explaining that output_path silently replaces an existing file and by describing the result path and byte size returned. That adds real semantics not present in the schema, particularly the overwrite risk.
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 ('Remove the password from a PDF') and immediately bounds the scope with 'you already know the password' plus an explicit exclusion ('does not break or guess encryption'). That cleanly separates it from the sibling protect_pdf and from any cracking-style tool.
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 precondition for use ('a PDF you already know the password for') and the negative case ('does not break or guess encryption') are stated explicitly. It doesn't name a sibling as an alternative for the unsupported case, which keeps it just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webpage_to_pdfA
Fetch a public URL and render the page to PDF in a headless browser. Use this to archive or print a web page. This tool takes a URL rather than a file, so output_path is required. The input is uploaded to the Papyrio API, processed in memory and not stored. The result is written to output_path, replacing any file already there, and the call returns that path and the size in bytes. Inputs are limited to 50 MB, and each call counts as one operation against the daily quota.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Publicly reachable page URL, including https://. | |
| output_path | Yes | Absolute path to write the .pdf result to. Required for this tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so thoroughly: it discloses headless-browser rendering, upload to the Papyrio API, in-memory processing with no storage, overwriting output_path, returned path and size, a 50 MB input limit, and quota consumption. These details cover side effects, data handling, output, and constraints beyond what the schema or annotations provide.
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 front-loaded with purpose, then usage, parameter rationale, behavior, and limits. Every sentence adds relevant operational information without repetition or wasted framing.
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 two-parameter tool with no annotations and no output schema, the description is complete: it explains what the tool does, when to use it, how inputs are processed, where output is written, what is returned, and relevant limits. No critical agent-facing context appears to be 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 coverage is already 100%, so the baseline is 3. The description adds useful meaning by explaining why output_path is required for this URL-based tool and by noting that output_path will be overwritten if a file already exists.
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: fetch a public URL and render the page to PDF in a headless browser. It distinguishes the tool from PDF-oriented siblings by clarifying that it takes a URL rather than a file, so an agent can identify it without opening another 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?
It gives clear usage context with 'Use this to archive or print a web page' and reinforces the URL-versus-file distinction. It does not explicitly name alternative sibling tools such as image_to_pdf or office_to_pdf, so it stops short of fully explicit routing guidance.
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.
2 tool updates
v0.1.4- Changed
ocr_pdf1 field changed- added
Input schema / properties / langAdded value: +{ + "default": "eng", + "description": "Language of the document's text as a Tesseract code: eng (English), rus (Russian), spa (Spanish), ita (Italian), uzb (Uzbek, Latin script), uzb_cyrl (Uzbek, Cyrillic) or kaz (Kazakh). For mixed documents join two with '+', for example rus+eng. Any other value is rejected. Defaults to eng.", + "type": "string" +}
- Changed
office_to_pdf1 field changed- changed
Input schema / properties / file / descriptionPrevious value: -"Absolute path to the Office document."New value: +"Absolute path to the Office document. The extension decides how it is read, so it must be one of .doc, .docx, .odt, .ppt, .pptx, .xls or .xlsx."
12 tool updates
v0.1.3- First observed
compress_pdf - First observed
extract_pdf_text - First observed
image_to_pdf - First observed
merge_pdfs - First observed
ocr_pdf - First observed
office_to_pdf - First observed
pdf_to_jpg - First observed
pdf_to_word - First observed
protect_pdf - First observed
split_pdf - First observed
unlock_pdf - First observed
webpage_to_pdf
TDQS
Scored across 12 tools
Each tool targets a distinct operation: conversion (pdf_to_jpg, pdf_to_word, office_to_pdf, image_to_pdf, webpage_to_pdf), manipulation (split, merge, compress), security (protect/unlock), and text (extract_pdf_text, ocr_pdf). The pair extract_pdf_text/ocr_pdf could seem close, but descriptions clearly explain OCR produces a text layer while extract retrieves existing text. No real overlap.
Most names follow a clear source_to_target or verb_noun convention (pdf_to_word, office_to_pdf, split_pdf, merge_pdfs). There are two styles mixed—conversion names use X_to_Y while manipulation names use verb_pdf—but both are readable and the pattern is semantically meaningful. Only ocr_pdf is an outlier.
12 tools is well within the ideal 3-15 range and each earns its place, covering conversion, manipulation, security and text extraction without redundancy. The count matches the scope of a focused PDF-utility API.
Core workflows are well covered: convert in/out, extract, OCR, split/merge, compress, protect/unlock. Minor gaps remain—no page rotation/reordering, no PDF-to-Excel/PPT, no watermarking or image extraction—but agents can work around these for most tasks.
Maintenance
Related MCP Connectors
Split, merge and compress PDF files locally - private by design, no uploads.
PDF tools: merge, split, compress, convert, OCR & more. OAuth with auto-registration or API key.
13 stateless PDF tools for AI agents: merge, split, rotate, compress, watermark, redact, flatten, repair, add page numbers and fill PDF forms. Files are processed in memory and nothing is stored. Part of FreeDailyPro's 211+ MCP tools; trial key with 20,000 calls/month at freedailypro.com/developers.
Convert PDFs/images to Word, Excel, and Markdown. Split, merge, and watermark PDF files.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables PDF file manipulation including merging, splitting, extracting pages, extracting text, excluding pages, and reordering pages.17 npm1MIT
- AlicenseAqualityBmaintenanceA local-first PDF tool for merging, splitting, rotating, watermarking, Bates-numbering, cleaning metadata, and counting pages — all operations happen on your machine with no network transmission.1513 npm1MIT
- FlicenseNot gradedqualityAmaintenanceEnables AI agents to perform comprehensive PDF operations locally, including compression, text extraction, PII redaction, page organization, splitting, merging, watermarking, creation, and form filling, all without cloud uploads.7 npm-
- AlicenseNot gradedqualityBmaintenanceRemote MCP server exposing 24 PDF operations over Streamable HTTP that accept public file URLs up to 100 MB and return a download link, enabling conversion to and from PDF, compression, merging and splitting, OCR (including Russian), page manipulation, signing, watermarking, and password protection, plus balance checks. It also ships alongside an agent skill that lets file-on-disk workflows run against the same REST API.MIT