PDF processing MCP server for macOS with text extraction, OCR, document operations, and markdown export capabilities
27 tools with consistent naming (pdf_* prefix) and complete input schemas. Descriptions present but generic (avg ~60 chars, below 194-char baseline). All parameters have type definitions and descriptions. No output schemas documented. Error handling minimal, no recovery guidance or actionable error messages. Missing tool annotations (readOnlyHint/destructiveHint). Composition is sound (single responsibility per tool), but parameter descriptions lack format/constraint details (e.g., 'page' lacks bounds, 'angle' lacks enum constraint). No secrets exposed. Moderate quality, functional but not LLM-optimized.
Add a text watermark to PDF pages
Close an open PDF document
Compress a PDF file
Delete specific pages from a PDF
Export PDF to Markdown format
Extract specific pages from a PDF
Extract plain text from PDF (optionally specify page range)
Extract text with position/layout information
No output schemas documented. LLMs cannot plan downstream calls or extract structured data from responses. Every tool lacks a documented return type.
Descriptions are generic and under 100 chars (baseline 194). E.g., 'Close an open PDF document' lacks context on when/why to call it or what happens to cached state. Descriptions should explain WHAT, WHEN, and CONSEQUENCES.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes. pdf_delete_pages, pdf_merge, pdf_repair should be marked destructiveHint=true.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Extract annotations from a PDF page
Extract links from a PDF page
Get detailed metadata from a PDF
Get dimensions of a PDF page
Get a page as an image (PNG/JPEG)
Get PDF information (page count, version, encryption, metadata)
List PDF files in a directory
List all currently open PDF documents
Merge multiple PDF files into one
Perform OCR on a PDF page
Perform OCR on a PDF page with layout information
Open a PDF file and return a document ID for subsequent operations
Get the number of pages in a PDF
Attempt to repair a corrupted PDF file
Rotate pages in a PDF
Search for text in PDF
Set metadata in a PDF
Split a PDF into multiple files by page ranges
Validate PDF file integrity
Parameter constraints missing. 'page' and 'angle' lack bounds/enums. 'angle' should be enum [90, 180, 270]; 'page' should state min=1, max=page_count. 'quality' in pdf_compress should be enum [low, medium, high].
No error handling guidance. Tools return success/failure but do not tell LLM what to do on error. E.g., pdf_open should say 'If file not found, try pdf_list() to discover available PDFs.'