Docling MCP

io.github.docling-project/docling-mcp

About Docling MCP

Docling MCP is an MCP server published by the GitHub account docling-project. Convert PDFs and other documents to structured formats via Docling, for AI applications.

It runs on your own machine: your AI client starts it from the PyPI package docling-mcp at version 3.4.0.

It asks for one secret: DOCLING_MCP_SERVICE_API_KEY. Give it a key with the least access that still works.

Version 3.4.0 was published on 27 October 2026, and the source code is public, so you can read it before installing.

Written from the registry entry. 9 automated checks on the registry entry and the package code: 7 pass, 0 warn, 0 fail, 2 info. How we check.

What it asks for

VariableRequiredSecretDescription
DOCLING_MCP_CONVERSION_MODENoNoConversion mode: 'remote' (default) or 'local' (requires docling-mcp[local] extra).
DOCLING_MCP_SERVICE_URLNoNoBase URL of the Docling Serve instance. Required when conversion mode is remote.
DOCLING_MCP_SERVICE_API_KEYNoYesAPI key for authenticating with Docling Serve.
DOCLING_MCP_SERVICE_TIMEOUTNoNoRequest timeout in seconds for the remote Docling Serve API. Default: 300.0.
DOCLING_MCP_SERVICE_MAX_RETRIESNoNoMaximum number of retry attempts for remote API requests. Default: 3.
DOCLING_MCP_FALLBACK_TO_LOCALNoNoSet to 'true' to fall back to local conversion when Docling Serve is unreachable.
DOCLING_MCP_KEEP_IMAGESNoNoSet to 'true' to retain page images in converted documents. Default: false.
DOCLING_MCP_IMAGES_SCALENoNoImage scale factor (e.g. 1.0, 2.0). Increase to avoid tensor batching errors. Default: 1.0.
DOCLING_MCP_DO_OCRNoNoSet to 'false' to disable the OCR pipeline. Default: true.
DOCLING_MCP_DO_TABLE_STRUCTURENoNoSet to 'false' to disable table structure detection. Default: true.
DOCLING_MCP_DO_PICTURE_DESCRIPTIONNoNoSet to 'true' to run a vision-language model to generate textual descriptions for figures and pictures. Requires a VLM to be available on the conversion backend. Default: false.
DOCLING_MCP_PICTURE_DESCRIPTION_PRESETNoNoPreset ID for the picture-description VLM (e.g. 'smolvlm', 'granite_vision'). When unset the backend default is used. Only applies when DOCLING_MCP_DO_PICTURE_DESCRIPTION=true.
DOCLING_MCP_IMAGE_EXPORT_MODENoNoControls how images are rendered when exporting to Markdown. Accepted values: 'placeholder' (default, emits <!-- image -->), 'embedded' (base64 data-URI), 'referenced' (file path / URL).
DOCLING_MCP_CACHE_MAX_DOCUMENTSNoNoMaximum number of documents to keep in the in-memory cache. Oldest (least-recently-used) documents are evicted when the limit is reached. Default: 10.

Checks

CheckResultDetail
Source repository linkedPasshttps://github.com/docling-project/docling-mcp
Version pinnedPassEvery package has an explicit version
Secrets requestedInfoAsks for 1 secret: DOCLING_MCP_SERVICE_API_KEY
Known package registryPassAll packages come from npm, PyPI, OCI, NuGet or MCPB
Namespace ownershipInfoName verified via GitHub account docling-project
Registry text aimed at the AIPassDescription and settings contain no hidden characters or instructions to the AI
Install scriptsPassdocling-mcp 3.4.0 has no setup.py; nothing runs at install
Code red flagsPassRead 33 files in docling-mcp 3.4.0: no obfuscation, encoded execution, credential reads or data-collection endpoints found
Text aimed at the AIPassNo hidden characters or instructions to the AI in 33 files, including comments and the README

Code review: Pass, with notes

We read all 3,301 lines in 31 files of docling-mcp 3.4.0 on 2026-10-31, without running it.

Converts PDFs, Office files, web pages and images into structured documents your AI can read, search, edit and save. By default it sends each document to a Docling conversion service you must point it at. In local mode it converts on your machine but downloads AI models from Hugging Face first. Watch out: it can read any file or folder path the AI gives it. It also runs as a local web server on port 8000 unless you choose stdio.

What we found

  • Note Conversion tools accept any local file or directory path, so the AI can read any file the user's account can read. This is the server's purpose, but it is reachable from prompt-injected content too. docling_mcp/tools/conversion.py:116-192
  • Note The default conversion mode is 'remote'. Once DOCLING_MCP_SERVICE_URL is set, documents (including local files) are uploaded to that docling-serve instance. Until it is set, conversion fails with a clear error. No default remote host is hard-coded. docling_mcp/settings/service_client.py:41-61 + tools/converters/remote.py:28-50
  • Note The default transport is streamable-http on localhost:8000, and the package adds no authentication. Any local process (and any page that gets past the SDK's DNS-rebinding protection) can call the file-reading tools. Use --transport stdio for single-client desktop use. docling_mcp/servers/mcp_server.py:38-40
  • Note In local mode, docling downloads its layout/OCR/table models (HuggingFace Hub) on first use and fetches http(s) source URLs from this machine. This is dependency behaviour, not package code. docling_mcp/tools/converters/local.py:73-100
  • Note With CACHE_DIR unset, saved files go to a _cache folder next to the installed package (inside the Python environment), which users may not expect. docling_mcp/docling_cache.py:54-81
  • Note The optional llama-index-rag group downloads an embedding model at import time and creates ./milvus_demo.db in the working directory with overwrite=True, wiping any previous file of that name. docling_mcp/tools/llama_index/_shared.py:12-27
  • Info Object-storage credentials are deliberately taken only from the provider's standard chain, never from MCP client config. docling_mcp/tools/converters/sources.py:68-71
  • Info update/delete tools only modify the in-memory cached copy (annotated destructiveHint=True); original files are never modified. docling_mcp/tools/manipulation.py:259-353
  • Info Line counts: the manifest counts the trailing newline as a line. All 31 files read in full, total 3301 matches the manifest. package
Talks toDOCLING_MCP_SERVICE_URL (user-set docling-serve instance; default conversion mode is 'remote'): the document: local files are uploaded, http(s) URLs are passed for the service to fetch, object-storage bodies are uploaded from memory; plus DOCLING_MCP_SERVICE_API_KEY (when a conversion tool is called (health check + convert))
any http(s) URL given as 'source': an HTTP GET request for the document (convert tool in local mode (fetched by docling's DocumentConverter on this machine))
s3:// gs:// gcs:// abfs:// az:// object storage via fsspec: read requests signed with ambient cloud credentials (env/config files/instance roles) (convert tool with such a URI (optional extras))
HuggingFace Hub (docling layout/OCR/table models, optional VLM preset): model download requests (first local conversion; done by the docling library, not package code)
huggingface.co (BAAI/bge-base-en-v1.5 embedding model): model download requests (at startup only if the optional llama-index-rag tool group is enabled)
DOCLING_MCP_LI_API_BASE (default http://127.0.0.1:1234/v1, OpenAI-compatible LLM): the query plus retrieved document chunks (search_documents tool (optional llama-index-rag group))
DOCLING_MCP_LLS_URL (default http://localhost:8321, Llama Stack): document chunks or the full document markdown plus the extraction prompt (insert_document_to_vectordb / information_extraction (optional llama-stack groups))
huggingface.co (sentence-transformers/<DOCLING_MCP_LLS_VDB_EMBEDDING> tokenizer): tokenizer download request (insert_document_to_vectordb (optional))
localhost:8000 (listens; default transport is streamable-http): serves MCP tool calls; no authentication layer in package code (for the whole time the server runs unless --transport stdio)
Keys and settingsDOCLING_MCP_SERVICE_URL: remote converter target; logged at INFO
DOCLING_MCP_SERVICE_API_KEY: the docling-serve instance only; not logged
DOCLING_MCP_CONVERSION_MODE / FALLBACK_TO_LOCAL / KEEP_IMAGES / IMAGES_SCALE / DO_OCR / DO_TABLE_STRUCTURE / DO_PICTURE_DESCRIPTION / PICTURE_DESCRIPTION_PRESET / IMAGE_EXPORT_MODE / CACHE_MAX_DOCUMENTS / SERVICE_TIMEOUT / SERVICE_MAX_RETRIES: local config (pipeline options also sent to docling-serve in remote mode)
DOCLING_MCP_LI_API_BASE / DOCLING_MCP_LI_API_KEY / DOCLING_MCP_LI_MODEL_ID / DOCLING_MCP_LI_EMBEDDING_MODEL: the configured OpenAI-compatible endpoint (optional group)
DOCLING_MCP_LLS_URL / DOCLING_MCP_LLS_VDB_EMBEDDING / DOCLING_MCP_LLS_EXTRACTION_MODEL: the configured Llama Stack server (optional group)
CACHE_DIR: local only: where saved .md/.json/.png files go
Cloud credentials for s3/gcs/azure (ambient, read by fsspec providers): the matching object-storage provider
.env file in the working directory: read by pydantic-settings for all of the above
Files on your machineBy design, convert_document_into_docling_document reads any local file path the AI passes, and convert_directory_files_into_docling_document lists and reads every file in any directory. The content is returned to the AI and, in remote mode, uploaded to docling-serve. save_docling_document and get_page_thumbnail write <key>.md, <key>.json and <key>-<page>.png into a _cache directory. That directory is CACHE_DIR, or by default sits next to the installed package (e.g. site-packages/_cache). Filenames come from existing cache keys, so tool input cannot cause path traversal on write. The optional llama-index group creates ./milvus_demo.db in the working directory (overwrite=True). Object-storage sources are copied to a temp file that is deleted afterwards.
Runs programsNone in package code: no subprocess, os.system, eval or exec. Optional tool groups are imported by fixed module names.
TelemetryNone in package code.
Toolscheck_document_in_local_cache, remove_document_from_local_cache, convert_document_into_docling_document, convert_directory_files_into_docling_document, list_cached_documents, create_new_docling_document, export_docling_document_to_markdown, save_docling_document, get_page_thumbnail, add_title_to_docling_document, add_section_heading_to_docling_document, add_paragraph_to_docling_document, open_list_in_docling_document, close_list_in_docling_document, add_list_items_to_list_in_docling_document, add_table_in_html_format_to_docling_document, get_overview_of_document_anchors, search_for_text_in_document_anchors, get_text_of_document_item_at_anchor, update_text_of_document_item_at_anchor, delete_document_items_at_anchors, export_docling_document_to_vector_db (optional llama-index-rag), search_documents (optional llama-index-rag), insert_document_to_vectordb (optional llama-stack-rag), information_extraction (optional llama-stack-ie)
Tool descriptionsclean. Seven MCP prompts (Convert document, Convert and summarize, Convert directory, Author structured document, Convert and rewrite, Review and edit, Find and replace) only tell the AI to call this server's own tools. 'Find and replace' even tells the AI to confirm with the user before applying keyword-only matches. No hidden or invisible text.

This covers the package's own code only, not the 14 packages it depends on (mcp, typer, pydantic, pydantic-settings, docling-core, docling (or docling-slim; [local] extra), fsspec + s3fs / gcsfs / adlfs (optional extras), llama-index-core, llama-index-embeddings-huggingface, llama-index-llms-openai-like, llama-index-node-parser-docling, llama-index-vector-stores-milvus, llama-stack-client, transformers). A new version drops this review until we read it again.

Popularity & health: 74 / 100

Worked out from public numbers and our own checks, not from user reviews or ratings. It says how used and how looked-after a server is, not whether it is safe.

Popularity28 / 40

781 GitHub stars, 6,411 downloads last week, 0 Hacker News posts (0 points). Best two of the three, each on a log scale.

Activity15 / 25

Last push 2026-10-27, last release 2026-10-27, 0 commits in 90 days.

Issue health11 / 15

34 closed of 46 issues.

Our checks20 / 20

0 warnings, each costing a fifth.

143 forks, 85 merged pull requests. Sources: GitHub, npm, PyPI (pypistats.org) and Hacker News (Algolia), fetched 2026-10-31.

What people say

No Hacker News threads link to its source code.

Look further: search Reddit, search Hacker News, read its GitHub issues. These are not reviews we checked.

Facts

Registry nameio.github.docling-project/docling-mcp
PublisherGitHub account docling-project
How the name is verifiedName verified via GitHub account docling-project. The registry ties the name prefix to that account or domain; it does not check the code.
TypeLocal: runs on your machine from a package
Packagespypi docling-mcp 3.4.0 (stdio)
Version3.4.0
Published
Last updated
Source repositoryhttps://github.com/docling-project/docling-mcp
WebsiteNone linked
CategoryFiles & documents (assigned by keyword rule, not by hand)

Related servers in Files & documents