Skip to main content
Glama
README.md
# papyrio-mcp

[![npm](https://img.shields.io/npm/v/papyrio-mcp)](https://www.npmjs.com/package/papyrio-mcp)
[![Listed on mcpservers.org](https://mcpservers.org/badge.svg)](https://mcpservers.org/servers/atabekdemurtaza/papyrio-mcp)
[![Glama score](https://glama.ai/mcp/servers/atabekdemurtaza/papyrio-mcp/badges/score.svg)](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

[![Watch: add PDF tools to Claude Desktop in one click (47 s)](https://i.ytimg.com/vi/xZvKMRmMlSk/maxresdefault.jpg)](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

A4.6/5.0

Scored across 12 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityNo data
ResponsivenessOutdated data