LabscoMCP early access ↗
bzsantiMCP SERVER

Oxidize PDF

Read, build and repair PDFs from an agent — twelve tools over a Rust engine, sandboxed to a workspace directory with hard resource caps.

by bzsanti ↗Document Conversion, PDF & TranslationCommunity

LABSCO SUMMARY

Bounded on purpose, and honest about what does not work.

The resource caps are the interesting design choice: oversized documents are rejected before any extraction work happens and tool responses are bounded rather than serialised unbounded, which is the difference between a malicious PDF costing you an error and costing you the process. The known-limitations section is equally unusual for being specific — encryption parameters can be configured but the underlying library does not yet serialise the encryption dictionary on write, image extraction returns embedded streams byte-for-byte with no preprocessing, and PyPy and GraalPy are unsupported. Reading encrypted PDFs works.

What it is

The MCP server bundled with oxidize-pdf, a Rust-backed PDF library for Python. It covers reading and extraction, document assembly, forms, annotations, encryption and structural analysis, and every path it touches must resolve inside a workspace directory you nominate.

What you get

  • Reading — read_pdf for metadata including page count, version and encryption status, and extract_text for all pages or one
  • convert_pdf — output as markdown, chunks, or a RAG-optimised format, which is the tool that matters if the PDF is destined for a retrieval index
  • manipulate_pdf — split, merge, rotate, extract pages, reverse and overlay in one tool
  • Creation — create_pdf, annotate_pdf for text annotations and highlights, and save_pdf with optional encryption
  • manage_forms — create, fill, read and validate form fields
  • secure_pdf — encrypt, check permissions and verify signatures
  • analyze_pdf — validate structure, detect corruption and check PDF/A compliance; extract_entities pulls structured entities from pages
  • Resources exposing built-in fonts, standard page sizes, server capabilities, version and the workspace listing

Requirements

Python 3.10+ on Linux, macOS or Windows; pip install "oxidize-pdf[mcp]", then run oxidize-mcp or launch it through uvx --from "oxidize-pdf[mcp]" oxidize-mcp. The package is oxidize-pdf (version 0.18.0). Configuration is entirely environment variables: OXIDIZE_WORKSPACE is the sandbox root and defaults to ~/Documents/oxidize-mcp, with OXIDIZE_ALLOWED_PATHS for extra directories. Caps are enforced up front — OXIDIZE_MAX_FILE_SIZE_MB at 100, OXIDIZE_MAX_PAGES at 10000, OXIDIZE_MAX_OUTPUT_BYTES and OXIDIZE_MAX_SESSION_BYTES at 10485760 each, OXIDIZE_MAX_SESSIONS at 10 and OXIDIZE_SESSION_TIMEOUT at 3600 seconds. Exceeding one returns an error coded RESOURCE_LIMIT. No C dependencies, no Java, no subprocess calls. MIT licensed.

Setup effort

One command — pip install "oxidize-pdf[mcp]"