# io.github.beepboop2025/pdf-suite-mcp (npm · pdf-suite-mcp)

37 tools to read, create, merge, split, watermark, fill, redact & search PDFs. Local, no API key.

- Trust score: 70/100 (medium)
- Change this week: +24
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `pdf-suite-mcp`: 70/100 (this document), [markdown](https://verifymcp.io/servers/beepboop2025-pdf-suite-mcp/pdf-suite-mcp.md), [page](https://verifymcp.io/servers/beepboop2025-pdf-suite-mcp/pdf-suite-mcp)

## Channel facts

- Registry: `npm`
- Package: `pdf-suite-mcp`
- Version: `2.1.2`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (101 of 105), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (101 of 105), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 21 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 80/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3965 tokens (~107/item across 37 items; 37 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add beepboop2025-pdf-suite-mcp -- npx -y pdf-suite-mcp
```

### Codex

```bash
codex mcp add beepboop2025-pdf-suite-mcp -- npx -y pdf-suite-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "beepboop2025-pdf-suite-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "pdf-suite-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add beepboop2025-pdf-suite-mcp --command npx --arg -y --arg pdf-suite-mcp
```

### Hermes

```yaml
mcp_servers:
  beepboop2025-pdf-suite-mcp:
    command: "npx"
    args: ["-y", "pdf-suite-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "beepboop2025-pdf-suite-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "pdf-suite-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 70, +49)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] MCP protocol: unverified → pass
- [functional] Licence: MIT

### 2026-07-31 (score 21, −3)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 24, −22)

- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (37)

### `pdf_read_text` (~75 tokens)

Extract text content from a PDF file. Can extract from all pages or specific pages. Works with text-based PDFs (not scanned images).

Input parameters:

- `filePath` (string, required): Absolute or relative path to the PDF file
- `pages` (array): Specific page numbers to extract (1-indexed). If omitted, extracts all pages.

### `pdf_info` (~70 tokens)

Get detailed information about a PDF: page count, file size, metadata (title, author, dates), form field count, and page dimensions in points and inches.

Input parameters:

- `filePath` (string, required): Absolute or relative path to the PDF file
- `password` (string): Password if the PDF is encrypted

### `pdf_create` (~196 tokens)

Create a new PDF from text. Supports auto word-wrapping, pagination, bold/italic, configurable fonts, margins, page sizes. Lines starting with "# " render as bold headings.

Input parameters:

- `author` (string): Document author (metadata)
- `content` (string, required): Text content. Use \n for line breaks. Lines starting with "# " become bold headings. Text auto-wraps and paginates.
- `font` (string): Font family (default: Helvetica)
- `fontSize` (number): Font size in points (default: 12)
- `lineSpacing` (number): Line spacing multiplier (default: 1.4)
- `margin` (number): Page margin in points (default: 50)
- `outputPath` (string, required): Path where the PDF will be saved
- `pageSize` (string): Page size (default: A4)
- `title` (string): Document title (metadata)

### `pdf_images_to_pdf` (~111 tokens)

Convert one or more images (PNG/JPG) into a PDF. Each image becomes a page, scaled to fit while maintaining aspect ratio.

Input parameters:

- `imagePaths` (array, required): Array of image file paths (PNG or JPG)
- `margin` (number): Margin around image in points (default: 0)
- `outputPath` (string, required): Path where the PDF will be saved
- `pageSize` (string): "FitImage" sizes each page to match the image (default: A4)

### `pdf_merge` (~59 tokens)

Merge multiple PDF files into a single PDF. Pages are combined in the order listed.

Input parameters:

- `filePaths` (array, required): PDF file paths to merge in desired order (min 2)
- `outputPath` (string, required): Output path for the merged PDF

### `pdf_split` (~64 tokens)

Split a PDF into multiple files — either individual pages or custom page ranges.

Input parameters:

- `filePath` (string, required): PDF file to split
- `outputDir` (string, required): Directory for output files
- `ranges` (array): Page ranges. If omitted, splits into individual pages.

### `pdf_rotate` (~75 tokens)

Rotate pages by 90, 180, or 270 degrees clockwise.

Input parameters:

- `filePath` (string, required): PDF file path
- `outputPath` (string, required): Output path
- `pages` (array): Pages to rotate (1-indexed). Omit for all pages.
- `rotation` (string, required): Clockwise rotation degrees

### `pdf_delete_pages` (~52 tokens)

Remove specific pages from a PDF.

Input parameters:

- `filePath` (string, required): PDF file path
- `outputPath` (string, required): Output path
- `pages` (array, required): Page numbers to delete (1-indexed)

### `pdf_extract_pages` (~53 tokens)

Extract specific pages into a new PDF.

Input parameters:

- `filePath` (string, required): Source PDF path
- `outputPath` (string, required): Output path
- `pages` (array, required): Page numbers to extract (1-indexed)

### `pdf_reorder` (~78 tokens)

Reorder pages. Can also duplicate pages by repeating numbers in the order array.

Input parameters:

- `filePath` (string, required): PDF file path
- `outputPath` (string, required): Output path
- `pageOrder` (array, required): New page order (1-indexed). Example: [3, 1, 2] puts page 3 first.

### `pdf_insert_pages` (~122 tokens)

Insert pages from one PDF into another at a specific position. Useful for adding cover pages, appendices, or inserting content mid-document.

Input parameters:

- `insertAfter` (number, required): Insert after this page number (0 = insert at beginning, use page count for end)
- `outputPath` (string, required): Output path
- `sourcePages` (array): Which pages to take from source (1-indexed). Omit for all source pages.
- `sourcePath` (string, required): PDF to take pages from
- `targetPath` (string, required): PDF to insert pages into

### `pdf_reverse` (~48 tokens)

Reverse the page order of a PDF. Useful for fixing scan order or printing back-to-front.

Input parameters:

- `filePath` (string, required): PDF file path
- `outputPath` (string, required): Output path

### `pdf_blank_pages` (~105 tokens)

Insert blank pages into a PDF at specified positions. Useful for adding separator pages or ensuring chapters start on odd pages.

Input parameters:

- `afterPages` (array, required): Insert a blank page after each of these page numbers (1-indexed). Use 0 to add at the beginning.
- `filePath` (string, required): PDF file path
- `outputPath` (string, required): Output path
- `pageSize` (string): "MatchPrevious" matches the size of the preceding page (default)

### `pdf_crop` (~134 tokens)

Crop pages by setting the visible area (crop box). Trims margins or isolates a region. Coordinates are in points from bottom-left.

Input parameters:

- `filePath` (string, required): PDF file path
- `height` (number, required): Height of crop area in points
- `outputPath` (string, required): Output path
- `pages` (array): Pages to crop (1-indexed). Omit for all pages.
- `width` (number, required): Width of crop area in points
- `x` (number, required): Left edge of crop area (points from left)
- `y` (number, required): Bottom edge of crop area (points from bottom)

### `pdf_overlay_pdf` (~129 tokens)

Overlay one PDF on top of another. The overlay PDF is drawn on top of the base PDF pages. Perfect for adding letterheads, templates, or watermark PDFs.

Input parameters:

- `basePath` (string, required): Base PDF (background)
- `outputPath` (string, required): Output path
- `overlayPage` (number): Which page of the overlay PDF to use (1-indexed, default: 1)
- `overlayPath` (string, required): Overlay PDF (drawn on top)
- `pages` (array): Which base pages to apply the overlay to (1-indexed). Omit for all pages.

### `pdf_page_layout` (~127 tokens)

Arrange multiple PDF pages onto single sheets in N-up layouts. Puts 2 or 4 source pages onto each output page side-by-side. Useful for printing handouts, saving paper, or creating thumbnail sheets.

Input parameters:

- `filePath` (string, required): Source PDF file path
- `layout` (string, required): "2-up" = 2 pages per sheet side-by-side, "4-up" = 4 pages per sheet in a 2x2 grid
- `outputPath` (string, required): Output path
- `pageSize` (string): Output page size (default: Letter)

### `pdf_watermark` (~177 tokens)

Add a diagonal text watermark across PDF pages. The text is properly centered regardless of rotation angle.

Input parameters:

- `color` (string): Color — hex (#f00), short hex (#ff0000), or name (red, navy, etc). Default: #888888
- `filePath` (string, required): PDF file path
- `fontSize` (number): Font size in points (default: 60)
- `opacity` (number): Opacity 0-1 (default: 0.15)
- `outputPath` (string, required): Output path
- `pages` (array): Pages to watermark (1-indexed). Omit for all.
- `rotation` (number): Rotation in degrees (default: 45)
- `text` (string, required): Watermark text (e.g. "CONFIDENTIAL", "DRAFT")

### `pdf_page_numbers` (~155 tokens)

Add page numbers to every page. Supports various positions, custom prefix/suffix, and starting number.

Input parameters:

- `color` (string): Color (default: dark gray)
- `filePath` (string, required): PDF file path
- `fontSize` (number): Font size (default: 10)
- `margin` (number): Edge distance in points (default: 30)
- `outputPath` (string, required): Output path
- `position` (string): Position (default: bottom-center)
- `prefix` (string): Prefix text (e.g. "Page ")
- `startNumber` (number): Starting number (default: 1)
- `suffix` (string): Suffix text (e.g. " of 50")

### `pdf_add_text` (~186 tokens)

Add text at a specific position on a PDF page. Supports multi-line text (use \n). Coordinates are in points from bottom-left.

Input parameters:

- `color` (string): Color (default: black)
- `filePath` (string, required): PDF file path
- `font` (string): Font (default: Helvetica)
- `fontSize` (number): Font size (default: 12)
- `lineSpacing` (number): Line spacing multiplier for multi-line text (default: 1.4)
- `outputPath` (string, required): Output path
- `page` (number, required): Page number (1-indexed)
- `text` (string, required): Text to add. Use \n for multiple lines.
- `x` (number, required): X from left edge (points)
- `y` (number, required): Y from bottom edge (points). For multi-line, this is the top line position.

### `pdf_add_image` (~164 tokens)

Add an image (PNG/JPG) at a position on a page. Aspect ratio is preserved when only width or height is given.

Input parameters:

- `filePath` (string, required): PDF file path
- `height` (number): Height in points (scales proportionally if width omitted)
- `imagePath` (string, required): Image file (PNG or JPG)
- `opacity` (number): Opacity 0-1 (default: 1)
- `outputPath` (string, required): Output path
- `page` (number, required): Page number (1-indexed)
- `width` (number): Width in points (scales proportionally if height omitted)
- `x` (number, required): X from left edge (points)
- `y` (number, required): Y from bottom edge (points)

### `pdf_header_footer` (~145 tokens)

Add headers and/or footers with dynamic placeholders: {page} for current page, {pages} for total.

Input parameters:

- `align` (string): Alignment (default: center)
- `color` (string): Color (default: dark gray)
- `filePath` (string, required): PDF file path
- `fontSize` (number): Font size (default: 9)
- `footer` (string): Footer text. Use {page} and {pages} placeholders.
- `header` (string): Header text. Use {page} and {pages} placeholders.
- `margin` (number): Edge distance (default: 30)
- `outputPath` (string, required): Output path

### `pdf_stamp` (~177 tokens)

Apply a styled business stamp (like a rubber stamp) to PDF pages. Pre-configured styles for common stamps, or create custom ones. Draws a bordered rectangle with text inside, slightly rotated for authenticity.

Input parameters:

- `customText` (string): Custom stamp text (only used when type is CUSTOM)
- `filePath` (string, required): PDF file path
- `opacity` (number): Opacity (default: 0.75)
- `outputPath` (string, required): Output path
- `pages` (array): Pages to stamp (1-indexed). Omit for all.
- `position` (string): Stamp position (default: top-right)
- `rotation` (number): Rotation in degrees for rubber-stamp look (default: -15)
- `type` (string, required): Stamp type. Use CUSTOM with customText for your own stamp.

### `pdf_sign` (~137 tokens)

Add a signature image to a PDF with smart positioning. Simplified alternative to pdf_add_image for signing documents.

Input parameters:

- `filePath` (string, required): PDF file path
- `imagePath` (string, required): Path to signature image (PNG or JPG)
- `margin` (number): Distance from page edge (default: 50)
- `outputPath` (string, required): Output path
- `page` (number): Page to sign (1-indexed). Default: last page.
- `position` (string): Signature position (default: bottom-right)
- `width` (number): Signature width in points (default: 150). Height scales proportionally.

### `pdf_redact` (~150 tokens)

VISUAL-ONLY redaction: draws opaque rectangles over regions on PDF pages. WARNING: This does NOT remove the underlying text/data from the PDF — it only covers it visually. The original content can still be extracted programmatically. Do NOT use this for true document sanitization of sensitive data (SSNs, passwords, etc). For true redaction, use a tool that rewrites the PDF content stream (e.g. Adobe Acrobat Pro, qpdf, or mutool).

Input parameters:

- `color` (string): Redaction color (default: black)
- `filePath` (string, required): PDF file path
- `outputPath` (string, required): Output path
- `regions` (array, required): Regions to redact

### `pdf_highlight` (~79 tokens)

Add translucent highlight boxes over regions on PDF pages — like using a highlighter pen. Great for marking important sections.

Input parameters:

- `filePath` (string, required): PDF file path
- `highlights` (array, required): Regions to highlight
- `opacity` (number): Highlight opacity (default: 0.35)
- `outputPath` (string, required): Output path

### `pdf_draw` (~71 tokens)

Draw shapes on PDF pages: rectangles (filled or outlined), lines, and circles/ellipses. Useful for annotations, diagrams, or marking up documents.

Input parameters:

- `filePath` (string, required): PDF file path
- `outputPath` (string, required): Output path
- `shapes` (array, required): Shapes to draw

### `pdf_form_read` (~85 tokens)

Read all form fields from a PDF. Returns each field's name, type (Text, CheckBox, Dropdown, OptionList, RadioGroup), current value, and available options. Use this before pdf_form_fill to discover field names.

Input parameters:

- `filePath` (string, required): Path to the PDF file with form fields
- `password` (string): Password if the PDF is encrypted

### `pdf_form_fill` (~168 tokens)

Fill form fields in a PDF by name. Supports text fields, checkboxes ("true"/"false"), dropdowns, option lists, and radio groups. Use pdf_form_read first to discover field names and types. Optionally flatten the form to make it non-editable.

Input parameters:

- `fields` (object, required): Object mapping field names to values. For checkboxes: "true" or "false". For dropdowns/radio: the option value string.
- `filePath` (string, required): Path to the PDF file with form fields
- `flatten` (boolean): If true, flattens the form making fields non-editable (default: false)
- `outputPath` (string, required): Path where the filled PDF will be saved
- `password` (string): Password if the PDF is encrypted

### `pdf_set_metadata` (~132 tokens)

Set or update PDF document metadata fields: title, author, subject, keywords, creator, and producer. Only specified fields are changed; others remain untouched.

Input parameters:

- `author` (string): Document author
- `creator` (string): Creator application name
- `filePath` (string, required): Path to the PDF file
- `keywords` (array): Document keywords as an array of strings
- `outputPath` (string, required): Path where the modified PDF will be saved
- `producer` (string): Producer application name
- `subject` (string): Document subject/description
- `title` (string): Document title

### `pdf_decrypt` (~81 tokens)

Remove password protection from an encrypted PDF. Requires the correct password. Saves an unencrypted copy that can be opened without a password.

Input parameters:

- `filePath` (string, required): Path to the encrypted PDF file
- `outputPath` (string, required): Path where the decrypted (unprotected) PDF will be saved
- `password` (string, required): Password to unlock the PDF

### `pdf_search` (~108 tokens)

Search for text in a PDF. Returns all matches with page numbers and surrounding context. Supports plain text and regex search.

Input parameters:

- `caseSensitive` (boolean): Case-sensitive search (default: false)
- `contextChars` (number): Characters of context around each match (default: 60)
- `filePath` (string, required): PDF file path
- `query` (string, required): Text or regex pattern to search for
- `regex` (boolean): Treat query as a regex pattern (default: false)

### `pdf_compare` (~67 tokens)

Compare the text content of two PDFs page by page. Reports which pages are identical, which differ, and shows a summary of differences. Useful for verifying document versions.

Input parameters:

- `filePath1` (string, required): First PDF file path
- `filePath2` (string, required): Second PDF file path

### `pdf_flatten` (~59 tokens)

Flatten a PDF — converts all form fields and annotations into static page content. Fields become non-editable. Useful for finalizing documents before distribution.

Input parameters:

- `filePath` (string, required): PDF file path
- `outputPath` (string, required): Output path

### `pdf_compress` (~114 tokens)

Attempt to reduce PDF file size by rebuilding the document structure. Copies all pages to a fresh PDF (dropping orphaned objects), and optionally strips metadata. Results vary — works best on PDFs with accumulated edits or orphaned data.

Input parameters:

- `filePath` (string, required): PDF file path
- `flattenForms` (boolean): Flatten form fields to reduce size (default: false)
- `outputPath` (string, required): Output path
- `stripMetadata` (boolean): Remove title, author, subject, keywords (default: false)

### `pdf_validate` (~53 tokens)

Validate a PDF file — checks if it can be parsed, reports page count, metadata, form fields, and any structural issues. Useful as a health check before processing.

Input parameters:

- `filePath` (string, required): PDF file path

### `pdf_repair` (~78 tokens)

Attempt to repair a damaged or malformed PDF by loading it with lenient parsing, copying all recoverable pages to a clean document, and re-saving. May fix issues like corrupted cross-reference tables or orphaned objects.

Input parameters:

- `filePath` (string, required): Path to the damaged PDF
- `outputPath` (string, required): Path for the repaired PDF

### `pdf_attach` (~81 tokens)

Embed one or more files as attachments inside a PDF. Attached files travel with the PDF and can be extracted by PDF readers. Useful for bundling source data, receipts, supporting documents, etc.

Input parameters:

- `attachments` (array, required): Files to attach
- `filePath` (string, required): PDF file to attach files to
- `outputPath` (string, required): Output path

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/beepboop2025-pdf-suite-mcp/pdf-suite-mcp#diagnostics

## Score history

- 2026-08-03: 70
- 2026-08-02: 70
- 2026-08-01: 21
- 2026-07-31: 21
- 2026-07-30: 24
- 2026-07-28: 46
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/pdf-suite-mcp
- Socket report: https://socket.dev/npm/package/pdf-suite-mcp
- Repository: https://github.com/beepboop2025/pdf-suite-mcp
- Changelog RSS feed: https://verifymcp.io/servers/beepboop2025-pdf-suite-mcp/pdf-suite-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/beepboop2025-pdf-suite-mcp/pdf-suite-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/beepboop2025-pdf-suite-mcp/pdf-suite-mcp
