MCP server that converts PDF, DOCX, PPTX, XLSX, HTML and EPUB documents — from a URL or base64 — into clean Markdown, with table extraction, full-text search and OCR for scanned files. No API key required.
Strong tool definitions with comprehensive descriptions and well-structured schemas. All 9 tools have clear, action-oriented names (convert_*, extract_*, search_*, merge_*, split_*) and detailed descriptions (150-250 chars each) explaining WHAT, WHEN, and HOW. Input schemas are complete with typed parameters and descriptions. Tool annotations (readOnlyHint, idempotentHint, destructiveHint, openWorldHint) are correctly declared. Key gaps: output schemas are not documented in the tool definitions (LLMs cannot see what fields to expect from responses); error handling descriptions are minimal (no recovery guidance for common failures like 'scanned PDF detected' or 'file too large'); parameter constraints lack formal enums (e.g., 'fmt' in extract_pdf_tables accepts 'markdown|csv|json' but is a free-form string, not an enum).
Convert almost any document to Markdown in one call: DOCX, PPTX, XLSX, EPUB, HTML, CSV/JSON/XML/TXT and PDF are auto-detected from the URL or base64 content. This is the universal 'just give me the text' tool — use it when the file format is unknown or mixed. Images and scanned PDFs are routed to OCR automatically when the server has OCR installed. Legacy .doc/.xls/.ppt binaries are not supported.
Convert a PDF document to clean Markdown, preserving headings, tables, lists and reading order. Use this whenever an agent needs to *read* a PDF: reports, papers, invoices, manuals, slide exports. Accepts a public URL or base64 content; no API key needed. For large PDFs, convert selected pages ('pages': '1,3-5') or page through the output with 'offset'/'max_chars'. Scanned PDFs are rejected with a hint to use ocr_document instead.
List and optionally export images embedded in a PDF. Returns metadata (page, dimensions, format) and optionally base64-encoded image data for images ≤2 MB.
Extract tables from a PDF and return them as Markdown, CSV or JSON. Useful for reports, financial statements, and data-heavy documents. Returns page number, table index, row/column count and formatted content.
Inspect a document before conversion: page count, format, encryption, metadata, table-of-contents. For PDFs, also detects if the document is scanned (no embedded text layer). Use this to decide whether to call convert_pdf_to_markdown, ocr_document, or extract_pdf_tables.
Output schemas not documented. Tool definitions lack return type documentation. LLMs cannot plan downstream calls or extract required fields (e.g., page_number, table_index from extract_pdf_tables). Baseline: 100% of A+ tools document return types.
Enum constraints missing for constrained parameters. 'fmt' in extract_pdf_tables accepts 'markdown|csv|json' but is declared as free-form string, not enum. 'include_base64' in extract_pdf_images is boolean but lacks explicit true/false constraint. Enums prevent hallucinated values and are self-documenting.
Error recovery guidance absent. Descriptions mention rejection scenarios ('scanned PDFs are rejected with a hint to use ocr_document') but tool error responses lack actionable guidance. No documented error categories (retryable vs user-fixable vs fatal). Baseline: A+ tools include recovery guides.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Merge multiple PDF documents (in order) into a single PDF. All inputs must be unencrypted. Returns the merged PDF as base64 if ≤10 MB, otherwise reports the size and suggests narrowing the input.
Extract text from scanned PDFs and images using OCR (Optical Character Recognition). Requires the optional 'ocr' extra to be installed. Returns per-page text and a full-document concatenation. Use this when convert_pdf_to_markdown rejects a PDF as 'scanned', or when you have image files.
Full-text keyword search over a PDF document. Returns matching page numbers and text snippets (with context). Useful for finding specific information in large documents without reading the entire file.
Split a PDF into parts by page ranges. Each part ≤5 MB is returned as base64; larger parts are reported with a note. Useful for breaking up large documents or extracting specific sections.
Parameter relationships undocumented. 'url' and 'file_base64' are mutually exclusive (code enforces this), but parameter descriptions do not state the dependency. LLMs may pass both, causing ambiguous failures. Baseline: dependencies must be documented in both parameter descriptions.
Numeric parameter bounds not specified. 'max_chars' (default 40000, max 200000), 'max_results' (default 20, max 100), 'max_tables' (default 50, max 50), 'max_images' (default 20, max 50) lack min/max constraints in schema. LLMs may pass invalid values. Baseline: numeric params must specify range.