docling.rs: a document converter with an MCP server
docling.rs
A Rust port of docling that turns PDF, Office, HTML and scans into Markdown and JSON in one binary, with an MCP mode
- 135 ★ on the repository
- Last commit
- MIT
Extended access
Why this level
- Reads files from the `--root` folder and, with the flag on, loads documents by URL
- Document contents go to the model
Install
- Works in
Manual install
claude mcp add docling -- docling-rs mcp --root ~/DocumentsFrom the README, the docling-rs binary must be installed.
Access and checks
How we reviewExtended accessThe tool runs code or makes network calls and only reads external data.
- Reads files from the `--root` folder and, with the flag on, loads documents by URL
- Document contents go to the model
This is third-party code. Review the repository files before installing.
What it does
docling.rs turns documents into Markdown, docling JSON and other shapes handy for a language model and RAG pipelines. It is a full Rust port of IBM docling: the same output from one static binary, with no Python or PyTorch. It handles PDF, Office formats, HTML, scans with text recognition and audio, and keeps structure: headings in order, tables as tables. The `docling-rs mcp` command starts an MCP server from the same binary. An agent gets three tools: `convert_to_markdown(uri)` with the name and contract of MarkItDown, `convert(uri, to, options)` for other output formats and `list_input_formats()`. Reading local files is limited to the folder from `--root`, and fetching URLs is switched on with the `--allow-url-fetch` flag. Familiar routes exist too: a CLI, packages for Python and Node.js, a Rust crate and Docker images. A compatibility layer lets you swap a MarkItDown, Marker or MinerU import for `docling_rs` and keep your code.
Who it is for. People who prepare documents for RAG and agents and want to replace a Python conversion stack with one fast binary, including in place of MarkItDown.
Good fit when
- An agent has to read PDFs with tables and scans and the Markdown answer must keep structure
- You use `markitdown-mcp` and want to change only the launch command and keep the tool name
- You prepare a document corpus for an index in batches and Python with PyTorch is too heavy
- A Node.js or Rust project needs a converter as a library, with no separate service
Not a fit when
- You need a service for documents with instant URL loading and no setup: addresses are off until `--allow-url-fetch` is passed
- Your stack is fully on Python docling with your own models: the gain will be small
- You need to edit documents: the converter only reads and transforms
Example request
Convert `~/Documents/report.pdf` to Markdown, keep the tables, then list the second-level headings.MCP
- Transport
- stdio, http
- Authentication
- not required
Limitations
The MCP server reads local files only inside the folder from `--root`, and loading by address is off until `--allow-url-fetch` is passed. Models for page layout, tables and text recognition are installed by a separate script or come in the Docker image, and the `curl` install from the README runs a script from the network.
The project claims output parity with Python docling and gives speed and memory measurements, but the numbers are the authors' own, taken on their test set. Prebuilt binaries exist for Linux x64 and arm64, s390x and macOS on arm64, and other platforms build from source. The last commit is from November 2026.
How to disable. Remove the docling server from the client config with `claude mcp remove docling` and uninstall the package or binary the way you installed it. Downloaded models sit in a separate folder and are deleted by hand.
FAQ
How do I connect docling.rs to Claude Code?
With `claude mcp add docling -- docling-rs mcp --root ~/Documents` once the binary is installed. The same server starts from PyPI through `uvx docling-rs-mcp --root ~/Documents`.
How does docling.rs differ from Python docling?
It is a Rust port with the same output, one static binary and no Python or PyTorch. By the authors' measurements PDFs are processed faster with less memory, and Office and HTML much faster.
Can it replace MarkItDown?
Yes: the `convert_to_markdown(uri)` tool keeps the name and contract, so with a `markitdown-mcp` setup only the launch command changes. In Python swap the import for `docling_rs.markitdown`.
How do I allow loading documents by URL?
Start the server with the `--allow-url-fetch` flag. Without it only local files inside the folder from `--root` are loaded.
Which formats are supported?
PDF, Office formats, HTML, scans and audio. The `list_input_formats` tool returns the full list.
Discussion
No questions or reviews yet.
Related
MCP serversAn MCP server built on Docling: converts PDFs into structured documents, builds new ones and feeds them to RAG
Docling is a CLI for mixed document archives, bringing PDFs, office files and spreadsheets into a shared format for AI search.
Microsoft's utility and MCP server that turn PDF, Word, Excel, PowerPoint, HTML and other files into Markdown for models
An MCP server that turns PDF, DOCX, XLSX, PPTX, images, audio, web pages and YouTube transcripts into Markdown
An MCP server on top of pandoc: the agent converts Markdown, HTML, DOCX, LaTeX, EPUB, ODT and other formats into one another
Doc-Ops MCP converts DOCX, Markdown, HTML and PDF between formats and stamps a watermark or QR code onto finished PDFs.
Comparison with similar tools
Cards that share the main search query, and how they differ.
| Tool | Official | Authentication | Repository stars | Main difference |
|---|---|---|---|---|
| docling.rs: a document converter with an MCP server (this card) | no | not required | 135 | |
| Docling MCP | yes | not required | 791 | a server for Python docling, while this is a Rust port in one binary |
| MarkItDown | yes | not required | 195,008 | the same `convert_to_markdown` contract, but with page layout analysis, tables and text recognition |
README in short
The README tells about the Rust port of docling and its speed, gives migration routes from MarkItDown, Marker and MinerU by swapping the import, install routes (script, `cargo`, `pip`, `npm`, Docker), comparisons with measurements, an MCP server section and a RAG subsystem.