Skip to main content

MCP server for layout-aware PDF to Markdown conversion via Docling

Project description

pdf-porter

Layout-aware PDF to Markdown for Claude — one tool, zero config, five minutes to set up. Uses Docling to preserve tables, multi-column layouts, and document structure that Claude's native PDF ingestion loses.

If you want the full Docling toolset, see docling-mcp by IBM Research. pdf-porter is intentionally minimal: one tool, one job.

Installation

Use with Claude Desktop (recommended)

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "pdf-tools": {
      "command": "uvx",
      "args": ["pdf-porter"]
    }
  }
}

Then restart Claude Desktop. The first time Claude calls the tool, Docling will download its model weights (~500MB). Subsequent calls are fast.

Development

git clone https://github.com/benmazzotta/pdf-porter
cd pdf-porter
uv sync --dev
uv run pytest

Tool Reference

pdf_to_markdown

Parameter Type Default Description
path str required Absolute or relative path to a PDF file
save_output bool False If True, writes a .md file next to the PDF and returns the output path

Returns: Markdown string, or "Saved to: <path>" when save_output=True, or "Error: <message>" on failure.

Known Limitations

  • First run: Docling downloads model weights (~500MB). You'll see a pause. Subsequent runs are fast.
  • Scanned PDFs: OCR mode is not enabled in v0.1. Image-only PDFs will return empty or minimal text.
  • Windows: Path handling not validated on Windows.

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pdf_porter-0.2.0.tar.gz (175.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pdf_porter-0.2.0-py3-none-any.whl (4.6 kB view details)

Uploaded Python 3

File details

Details for the file pdf_porter-0.2.0.tar.gz.

File metadata

  • Download URL: pdf_porter-0.2.0.tar.gz
  • Upload date:
  • Size: 175.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.5 {"installer":{"name":"uv","version":"0.10.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for pdf_porter-0.2.0.tar.gz
Algorithm Hash digest
SHA256 c58cc516f7d67036fa3a763e27be3faf54a90bab00c16a6705b0bbcfe95cd0f3
MD5 fdc7e2201425ccb58be4ddaa13fafa3f
BLAKE2b-256 f89120f561518b873e247d3ed33dd6eb3c8dff1038218654a782f23b058bba0d

See more details on using hashes here.

File details

Details for the file pdf_porter-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: pdf_porter-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 4.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.5 {"installer":{"name":"uv","version":"0.10.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for pdf_porter-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 31cb55961a915db2c4f98b88658f0ebd58f90f5e135575562a555b48a069f4ed
MD5 05e60ffc7bc8a1d60ad0770680be5dc2
BLAKE2b-256 27b5263ba71a837af19fc24dd7c9898e8aa6f59464996387316ac401eb7a9eff

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page