papyrio-mcp
# papyrio-mcp
[](https://www.npmjs.com/package/papyrio-mcp)
[](https://mcpservers.org/servers/atabekdemurtaza/papyrio-mcp)
[](https://glama.ai/mcp/servers/atabekdemurtaza/papyrio-mcp)
An MCP server for the [Papyrio](https://papyrio.net) PDF API. Setup for Claude, Cursor and VS Code: [papyrio.net/mcp](https://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 MB
```
is four tool calls the assistant makes by itself.
## Install
### Claude Desktop, one click
[](https://www.youtube.com/watch?v=xZvKMRmMlSk)
[Download papyrio-mcp.mcpb](https://github.com/atabekdemurtaza/papyrio-mcp/releases/latest/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`
```json
{
"mcpServers": {
"papyrio": {
"command": "npx",
"args": ["-y", "papyrio-mcp"]
}
}
}
```
Restart Claude Desktop. The tools appear under the connector icon.
## 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](https://rapidapi.com/atabekdemurtaza/api/papyrio-pdf-tools) and pass
the key:
```json
{
"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 |
| --- | --- | --- |
| `compress_pdf` | Shrinks a PDF, 30–80% on image-heavy files | `.pdf` |
| `merge_pdfs` | Joins 2–10 PDFs in order | `.pdf` |
| `split_pdf` | Separates every page into its own file | `.zip` |
| `extract_pdf_text` | Returns the text layer as UTF-8 | `.txt` |
| `pdf_to_word` | Rebuilds the document as an editable .docx | `.docx` |
| `pdf_to_jpg` | Renders every page as a JPG | `.zip` |
| `ocr_pdf` | Adds a searchable text layer to a scan, up to 15 pages per call; `lang` picks English, Russian, Spanish, Italian, Uzbek or Kazakh | `.pdf` |
| `office_to_pdf` | Word, PowerPoint or Excel to PDF | `.pdf` |
| `image_to_pdf` | Wraps a JPG, PNG or WebP in a PDF page | `.pdf` |
| `webpage_to_pdf` | Renders a public URL in a headless browser | `.pdf` |
| `protect_pdf` | Encrypts with AES-256 | `.pdf` |
| `unlock_pdf` | Removes a password you already know | `.pdf` |
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
```bash
npm run build
PAPYRIO_API_KEY=your-key node smoke.mjs
```
Drives 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
```bash
npm install
npm run build
```
Point your config at the local build while working on it:
```json
{
"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
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.