Docling MCP
OfficialDocling MCP lets you convert, cache, inspect, author, edit, export, and save Docling documents, with optional remote/local conversion and RAG integrations.
Convert PDFs, DOCX, HTML, images, URLs, local paths, and supported object-storage URIs into cached Docling documents; batch-convert local directories.
Manage the local document cache: list cached documents, check whether a document is cached, and remove documents to release memory.
Create new empty documents for incremental authoring and add titles, section headings, paragraphs, lists including nested lists, and HTML tables with captions/footnotes.
Inspect documents by anchor: get structural overviews, search text/keywords, and retrieve text from specific items.
Edit documents: update text at anchors and delete items at one or more anchors.
Export documents to Markdown, save them to disk as Markdown and JSON, and generate page thumbnails.
Configure remote, local, or hybrid conversion with OCR, table structure detection, optional picture-description VLM, image export modes, caching, retries, and timeouts.
Optionally integrate RAG/extraction workflows via LlamaIndex, LlamaStack, or Milvus upload/retrieval when enabled.
Supports RAG applications by uploading and retrieving document embeddings in Milvus vector stores.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Docling MCPconvert report.pdf to structured JSON"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Docling MCP: making docling agentic
A document processing service using the Docling-MCP library and MCP (Model Context Protocol) for tool integration.
Overview
Docling MCP is a service that provides tools for document conversion, processing and generation. It uses the Docling library to convert PDF documents into structured formats and provides a caching mechanism to improve performance. The service exposes functionality through a set of tools that can be called by client applications.
Related MCP server: PDF MCP Server
Compatibility
docling-mcp | MCP Python SDK |
|
|
|
|
If your MCP client application has not yet migrated to MCP SDK v2, pin:
pip install "docling-mcp<3.0.0"See MIGRATION.md for the full migration guide.
Installation Options
Remote Mode (Recommended - Lightweight)
For users with access to Docling Serve API:
Getting Docling Serve: Visit docling-serve for installation guides. You can deploy it from published container images or look for managed Docling SaaS offerings.
pip install docling-mcpThen configure your environment:
export DOCLING_MCP_SERVICE_URL=https://your-docling-service.example.com
export DOCLING_MCP_SERVICE_API_KEY=your-api-key-here
export DOCLING_MCP_CONVERSION_MODE=remoteLocal Mode (Full Features)
For users who need local conversion or don't have Docling Serve access:
pip install docling-mcp[local]Then configure your environment:
export DOCLING_MCP_CONVERSION_MODE=localHybrid Mode (Best of Both)
Install with local support and enable automatic fallback:
pip install docling-mcp[local]Configure for remote with fallback:
export DOCLING_MCP_SERVICE_URL=https://your-docling-service.example.com
export DOCLING_MCP_CONVERSION_MODE=remote
export DOCLING_MCP_FALLBACK_TO_LOCAL=trueFeatures
Conversion tools:
PDF document conversion to structured JSON format (DoclingDocument)
Generation tools:
Document generation in DoclingDocument, which can be exported to multiple formats
Local document caching for improved performance
Support for local files and URLs as document sources
Memory management for handling large documents
Logging system for debugging and monitoring
RAG applications with Milvus upload and retrieval
Configuration
All settings use the DOCLING_MCP_ prefix and can be supplied as environment
variables, in a .env file in the working directory, or via the env block of
your MCP client config. Copy .env.example as a starting point.
Conversion mode
Variable | Default | Description |
|
|
|
Remote service (required when DOCLING_MCP_CONVERSION_MODE=remote)
Variable | Default | Description |
| — | URL of the Docling Serve instance |
| — | API key for the service |
|
| Timeout in seconds for a whole conversion job |
|
| Max retry attempts |
|
| Fall back to local if service is unreachable (requires |
Conversion pipeline (applies to both modes)
Variable | Default | Description |
|
| Retain page images in output |
|
| Image scale factor (increase to avoid tensor padding errors) |
|
| Run OCR pipeline |
|
| OCR engine by its docling engine kind: |
| — | Comma-separated OCR languages, passed to the engine unchanged. |
|
| Detect table structure |
|
| Run a vision-language model to generate textual descriptions for figures and pictures |
| — | Preset ID for the picture-description VLM (e.g. |
EnablingDOCLING_MCP_DO_PICTURE_DESCRIPTION=true adds a VLM inference step for every figure in the document. On resource-constrained hardware (e.g. a laptop running the model on CPU) this can significantly increase conversion time.
Remote mode — increase
DOCLING_MCP_SERVICE_TIMEOUT(in seconds) to give the remote service enough time to complete. The default is300.0(5 minutes).Local mode / MCP client timeout — the MCP client itself may also enforce a request timeout. For example, in LM Studio set the
timeoutfield (in milliseconds) in yourmcp.json:
{
"mcpServers": {
"docling": {
"url": "http://localhost:8000/mcp",
"timeout": 300000
}
}
}Markdown export
Variable | Default | Description |
|
| How images are rendered in Markdown output: |
Cache
Variable | Default | Description |
|
| Maximum number of documents to keep in the in-memory cache. When the limit is reached the least-recently-used document is evicted. |
LlamaIndex RAG (--tools llama-index-rag)
Variable | Default | Description |
|
| OpenAI-compatible LLM endpoint |
|
| API key for the LLM endpoint |
|
| LLM model identifier |
|
| HuggingFace embedding model |
LlamaStack (--tools llama-stack-rag / --tools llama-stack-ie)
Variable | Default | Description |
|
| LlamaStack server URL |
|
| Embedding model for vector DB |
|
| Model used for structured extraction |
Setting variables in an MCP client config
{
"mcpServers": {
"docling": {
"command": "uvx",
"args": [
"--from=docling-mcp",
"docling-mcp-server"
],
"env": {
"DOCLING_MCP_CONVERSION_MODE": "remote",
"DOCLING_MCP_SERVICE_URL": "https://your-docling-service.example.com",
"DOCLING_MCP_SERVICE_API_KEY": "your-api-key-here"
}
}
}
}Getting started
The easiest way to install Docling MCP and connect it to your client is by launching it via uvx.
Depending on the transfer protocol required, specify the argument --transport, for example
stdioused e.g. in Claude for Desktop and LM Studiouvx --from docling-mcp docling-mcp-server --transport stdiosseused e.g. in Llama Stackuvx --from docling-mcp docling-mcp-server --transport ssestreamable-httpused e.g. in containers setupuvx --from docling-mcp docling-mcp-server --transport streamable-http
More options are available, e.g. the selection of which toolgroup to launch. Use the --help argument to inspect all the CLI options.
For developing the MCP tools further, please refer to the Developing section of CONTRIBUTING.md for instructions.
Integration with MCP clients
One of the easiest ways to experiment with the tools provided by Docling MCP is to leverage an AI desktop client with MCP support. Most of these clients use a common config interface. Adding Docling MCP in your favorite client is usually as simple as adding the following entry in the configuration file.
{
"mcpServers": {
"docling": {
"command": "uvx",
"args": [
"--from=docling-mcp",
"docling-mcp-server"
]
}
}
} When using Claude for Desktop, simply edit the config file claude_desktop_config.json with the snippet above or the example provided here.
In LM Studio, edit the mcp.json file with the appropriate section or simply click on the button below for a direct install.
Other integrations are described in the integrations page.
Examples
Converting documents
Example of prompt for converting PDF documents:
Convert the PDF document at <provide file-path> into DoclingDocument and return its document-key.Generating documents
Example of prompt for generating new documents:
I want you to write a Docling document. To do this, you will create a document first by invoking `create_new_docling_document`. Next you can add a title (by invoking `add_title_to_docling_document`) and then iteratively add new section-headings and paragraphs. If you want to insert lists (or nested lists), you will first open a list (by invoking `open_list_in_docling_document`), next add the list_items (by invoking `add_list_items_to_list_in_docling_document`). After adding list-items, you must close the list (by invoking `close_list_in_docling_document`). Nested lists can be created in the same way, by opening and closing additional lists.
During the writing process, you can check what has been written already by calling the `export_docling_document_to_markdown` tool, which will return the currently written document. At the end of the writing, you must save the document and return me the filepath of the saved document.
The document should investigate the impact of tokenizers on the quality of LLMs.Contributing
We welcome external contributions. See CONTRIBUTING.md for details on how to get started.
License
The Docling MCP codebase is under MIT license. For individual model usage, please refer to the model licenses found in the original packages.
LF AI & Data
Docling and Docling MCP is hosted as a project in the LF AI & Data Foundation.
IBM ❤️ Open Source AI: The project was started by the AI for knowledge team at IBM Research Zurich.
Available Tools
21 toolsadd_list_items_to_list_in_docling_documentAdd items to list in Docling documentA
Add list items to an open list in an existing document in the local document cache.
This tool inserts new list items with the specified text and marker into an open list within a document. It requires that the document exists and that there is at least one item in the document's stack cache.
| Name | Required | Description | Default |
|---|---|---|---|
| list_items | Yes | A list of list_item_text and list_marker_text items. | |
| document_key | Yes | The unique identifier of the document in the local cache. |
Output Schema
| Name | Required | Description |
|---|---|---|
| document_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only say not read-only and not destructive), the description reveals a stateful precondition: the target list must be open and the stack cache needs an item. This is useful hidden behavior. It stops short of describing failure behavior or exact insertion semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with the core action front-loaded and useful prerequisites in the second sentence. A minor redundancy exists because 'inserts new list items' restates 'Add list items', keeping it a 4 rather than a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The key stateful requirement is mentioned, but the description relies on the unexplained 'stack cache' concept and never ties the tool to the open_list_in_docling_document lifecycle. An agent could infer the ordering, but the description itself leaves that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents document_key, list_items, list_item_text, and list_marker_text. The description mentions 'specified text and marker' but adds no meaning beyond the schema, matching the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Add'), a concrete resource ('list items'), and a precise target ('open list in an existing document in the local document cache'). This clearly separates it from sibling tools like open_list_in_docling_document, close_list_in_docling_document, and add_paragraph_to_docling_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the context clearly: the document must already exist, the list must be open, and the document's stack cache must contain at least one item. It does not explicitly say 'call open_list_in_docling_document first' or list exclusions, so it is not a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_paragraph_to_docling_documentAdd paragraph to Docling documentB
Add a paragraph of text to an existing document in the local document cache.
This tool inserts a new paragraph under the specified section header and level into a document that has already been processed and stored in the cache.
| Name | Required | Description | Default |
|---|---|---|---|
| paragraph | Yes | The text content to add as a paragraph. | |
| document_key | Yes | The unique identifier of the document in the local cache. |
Output Schema
| Name | Required | Description |
|---|---|---|
| document_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating operation (readOnlyHint=false, destructiveHint=false). The description adds that the paragraph is inserted 'under the specified section header and level,' but the input schema has no parameters for a section header or level, making this claim confusing and under-specified. No further behavioral detail is provided about positioning, ordering, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the core action in the first sentence. However, the two sentences are somewhat redundant: 'existing document in the local document cache' and 'already been processed and stored in the cache' convey nearly the same information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value details are not necessary here. However, the description references a 'specified section header and level' without explaining how those are supplied, since neither appears in the input schema. It also does not indicate how the paragraph anchors to existing document structure, leaving an important invocation gap for a mutation tool in a large sibling family.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description reinforces that document_key identifies a cached document and paragraph is the text content, but adds no additional formatting, syntax, or location semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Add a paragraph of text to an existing document in the local document cache.' It also mentions placement 'under the specified section header and level,' which helps distinguish it from sibling tools that add titles, headings, or list items, though it does not explicitly contrast them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear precondition: the document must already be processed and stored in the cache. However, it does not state when to prefer this tool over sibling tools like add_section_heading_to_docling_document or add_list_items_to_list_in_docling_document, nor does it provide any explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_section_heading_to_docling_documentAdd section heading to Docling documentA
Add a section heading to an existing document in the local document cache.
This tool inserts a section heading with the specified heading text and level into a document that has already been processed and stored in the local cache. Section levels typically represent heading hierarchy (e.g., 1 for H1, 2 for H2).
| Name | Required | Description | Default |
|---|---|---|---|
| document_key | Yes | The unique identifier of the document in the local cache. | |
| section_level | Yes | The level of the heading, starting from 1, where 1 is the highest level. | |
| section_heading | Yes | The text to use for the section heading. |
Output Schema
| Name | Required | Description |
|---|---|---|
| document_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the safety profile is known. The description adds that the tool 'inserts' a heading into an existing cached document, which is useful. However, it does not explain where the heading is inserted, whether it appends at the end, or how it interacts with existing document structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. The additional sentences clarify the cache prerequisite and heading-level semantics without unnecessary verbosity. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter mutation tool with an output schema and clear annotations, the description adequately covers the purpose, prerequisite, and heading-level behavior. The main missing detail is insertion position, but this is a minor gap given the tool's simplicity and the availability of structured schema information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents all parameters well. The description adds a small clarification that section levels represent heading hierarchy with examples like H1 and H2, but most parameter meaning is already present in the schema. This matches the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Add a section heading to an existing document in the local document cache.' It is clear this tool modifies an existing Docling document by inserting a heading. It does not explicitly differentiate itself from sibling tools like add_title_to_docling_document, but the term 'section heading' and the concept of heading levels provide enough distinction for a clear purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates that this tool is for documents 'already been processed and stored in the local cache,' establishing the prerequisite context. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to know when this tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_table_in_html_format_to_docling_documentAdd HTML table to Docling documentA
Add an HTML-formatted table to an existing document in the local document cache.
This tool parses the provided HTML table string, converts it to a structured table representation, and adds it to the specified document. It also supports optional captions and footnotes for the table.
| Name | Required | Description | Default |
|---|---|---|---|
| html_table | Yes | The HTML string representation of the table to add. | |
| document_key | Yes | The unique identifier of the document in the local cache. | |
| table_captions | No | A list of caption strings to associate with the table.. | |
| table_footnotes | No | A list of footnote strings to associate with the table. |
Output Schema
| Name | Required | Description |
|---|---|---|
| document_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a mutating (readOnlyHint=false) but non-destructive (destructiveHint=false) operation. The description adds useful behavioral context: it parses the HTML, converts it to a structured table representation, and supports captions and footnotes. It does not disclose potential failure modes or what happens on invalid HTML, but it goes beyond the annotations enough to avoid a lower score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core action, and each sentence adds distinct information. There is slight redundancy ('adds it to the specified document' echoes the first sentence), but almost no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with an output schema and fully documented inputs, the description covers the core operation, the transformation process, and optional features. It lacks explicit usage guidance and error-behavior notes, but the overall context signals and schema fill most gaps needed for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and examples are provided for html_table, so the schema already documents each parameter thoroughly. The description adds no significant parameter-level meaning beyond repeating that captions and footnotes are optional. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Add an HTML-formatted table to an existing document in the local document cache.' It also explains the mechanism (parses HTML, converts to structured table) and this clearly distinguishes it from sibling add_title/add_paragraph/add_list_items tools. The name and description align perfectly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you have an HTML table string and want to attach it to an existing cached document. However, it does not explicitly mention when not to use it, nor does it reference alternative sibling tools for adding other content types. Usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_title_to_docling_documentAdd or update title to Docling documentA
Add or update the title of a document in the local document cache.
This tool modifies an existing document that has already been processed and stored in the local cache. It requires that the document already exists in the cache before a title can be added.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The title text to add or update to the document. | |
| document_key | Yes | The unique identifier of the document in the local cache. |
Output Schema
| Name | Required | Description |
|---|---|---|
| document_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating but non-destructive operation. The description adds valuable context by specifying that the tool modifies an existing cached document and requires the document to already exist. This goes beyond the raw annotation flags and clarifies the operational precondition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with the primary purpose stated in the first sentence and the key prerequisite clarified in the second. There is no redundant or filler content; every sentence adds relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two required, fully described parameters and an output schema, this description is complete. It states what the tool does, where it operates, and the critical precondition for use. Nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for both parameters, including descriptions for 'title' and 'document_key'. The tool description doesn't add much beyond the schema, but the prerequisite about the document already existing in the cache slightly reinforces the meaning of document_key. This meets the baseline for fully documented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('add or update') and resource ('title of a document in the local document cache'), making the tool's purpose unambiguous. It also explicitly says it modifies an existing document, which distinguishes it from creation-focused siblings like create_new_docling_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: this tool is for documents already processed and stored in the local cache, and it requires the document to exist before adding a title. It does not explicitly name alternatives or state when not to use it, but the prerequisite is clear enough to avoid misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_document_in_local_cacheCheck if Docling document is in cacheARead-only
Check whether a Docling document is already converted and present in the local cache.
| Name | Required | Description | Default |
|---|---|---|---|
| document_key | Yes | The unique identifier of the document in the local cache. |
Output Schema
| Name | Required | Description |
|---|---|---|
| in_cache | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered without help from the prose. The description is consistent with them and adds a small amount of context (it inspects conversion/cache state, it does not mutate), but says nothing about cost, cache scope, or behavior on a miss, which would be the value-add here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every clause (Docling, already converted, local cache) carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and one required parameter plus read-only annotations leave little else to cover. A brief note on how this relates to the conversion tool would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and the schema documents it fully ('The unique identifier of the document in the local cache'). The description adds no meaning beyond that, so the baseline 3 for high schema coverage applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('check') plus resource ('Docling document in the local cache'), with the clarifying detail that 'converted' means already present. It is distinguishable from convert_document_into_docling_document and list_cached_documents, but the description never names those siblings, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'already converted' hints at a pre-conversion probe workflow, but there is no explicit statement of when to call this versus convert_document_into_docling_document or list_cached_documents, and no mention of what to do on a miss.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_list_in_docling_documentClose list in Docling documentA
Closes a list group in an existing document in the local document cache.
This tool closes a previously opened list structure within a document. It requires that the document exists and that there is more than one item in the document's stack cache.
| Name | Required | Description | Default |
|---|---|---|---|
| document_key | Yes | The unique identifier of the document in the local cache. |
Output Schema
| Name | Required | Description |
|---|---|---|
| document_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-destructive operation. The description adds useful behavioral context by disclosing the stack cache requirement and that it closes a previously opened list structure, which helps the agent understand it is a state-changing operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the core action in the first sentence. The second sentence is somewhat redundant with the first, but it adds the 'previously opened' and 'stack cache' nuance, so the slight overlap is acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation tool with an output schema and annotations covering read-only/destructive hints, the description provides enough context: what it closes, where, and the required preconditions. It does not explain error handling, but that is not essential for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with document_key already described as the unique identifier of the document in the local cache. The description reinforces that the document must already exist, but does not add meaningful new parameter-level semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('closes') and resource ('list group in an existing document in the local document cache'), and clarifies it operates on a previously opened list structure. This clearly differentiates it from sibling tools like open_list_in_docling_document and add_list_items_to_list_in_docling_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete preconditions: the document must exist and the stack cache must have more than one item. It implies the tool should be used after opening a list and adding items, though it does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_directory_files_into_docling_documentConvert files from directory into Docling documentA
Convert all files from a local directory path and store them in local cache.
This tool takes a local directory path, converts every file in the directory using the configured converter (remote API or local) and stores the resulting Docling documents in a local cache. It returns a list of conversion outputs, where each output consists of a boolean set to False along with a document's unique cache key. If a document was already in the local cache, the conversion is skipped and the output boolean is set to True.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | The path to a local directory |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses caching behavior, the skip-if-cached rule, the boolean semantics per output, and the configured converter source (remote API or local). This is exactly the behavioral context an agent needs to predict the side effects and return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-sentence summary is front-loaded, and the second paragraph earns its place by specifying return structure and cache behavior. There is no filler or redundant restating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema, the description is largely complete: it covers the operation, storage, return shape, and caching. It does not mention how invalid or non-existent directories are handled or whether subdirectories are included, but these are secondary for correct tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, source, is already fully described in the schema as 'The path to a local directory.' The description repeats this but adds no new format, resolution, or requirement details, so it does not improve on the schema's high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action—convert all files from a local directory—and a specific outcome: store resulting Docling documents in local cache. It clearly distinguishes itself from sibling convert_document_into_docling_document by operating on a directory rather than a single document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states the condition for use: the caller has a local directory path and wants every file in it converted. It implies rather than explicitly states the alternative of using convert_document_into_docling_document for a single file, so it lacks explicit when-not guidance but is not ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_document_into_docling_documentConvert document into Docling documentA
Convert a document from a URL or local path into a Docling document.
Use this tool when you have an existing file (PDF, DOCX, HTML, image, etc.) that you want to load and parse.
This tool takes a document's URL or local file path, converts it using the configured converter (remote API or local), and stores the resulting Docling document in a local cache. It returns an output with a boolean set to False along with the document's unique cache key. If the document was already in the local cache, the conversion is skipped and the output boolean is set to True.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | The URL or local file path to the document. Object-storage URIs (abfs://, az://, gcs://, gs://, s3://) are supported when the matching provider extra is installed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| from_cache | Yes | |
| document_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=false and destructiveHint=false. The description adds substantive behavior: conversion uses a configured remote or local converter, results are stored in a local cache, cache hits skip conversion, and the output boolean signals cache-hit status. This is consistent with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one sentence, followed by when-to-use and cache/return behavior. There is no filler, and the structure makes the key information easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not fully document the return payload, but it still clarifies the boolean and cache-key behavior. Source, conversion path, cache semantics, and rerun behavior are all covered adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already documents the source parameter including object-storage URI support. The description repeats URL or local path and adds file-type examples, but it does not add syntax or constraints beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource, converting a document into a Docling document, and frames the scope around an existing file to load and parse. This distinguishes it from sibling tools such as create_new_docling_document and directory conversion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it: an existing PDF, DOCX, HTML, image, etc. that the agent wants to load and parse. It does not explicitly name alternatives or when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_new_docling_documentCreate new Docling documentA
Create a new, empty Docling document ready for incremental authoring.
Use this tool when you want to build a document from scratch by subsequently calling add_title_to_docling_document, add_section_heading_to_docling_document, add_paragraph_to_docling_document, open_list_in_docling_document, and related tools. To convert an already-existing file (PDF, DOCX, HTML, etc.) instead, use convert_document_into_docling_document.
The document is stored in the local cache under a unique key and the prompt text is recorded as a furniture item for reference.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | The prompt text to include in the new document. |
Output Schema
| Name | Required | Description |
|---|---|---|
| prompt | Yes | |
| document_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive operation. The description adds useful behavioral context: the document is stored in the local cache under a unique key and the prompt is recorded as a furniture item. It does not cover permission or persistence details, but those are less central here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: primary purpose first, then usage guidance, then the sibling alternative, then storage behavior. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter schema, existing output schema, and annotations, the description provides everything needed: creation semantics, incremental authoring context, alternative tool routing, and local cache behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single prompt parameter is already documented. The description adds meaning by explaining that the prompt text becomes a furniture item for reference, going beyond the schema's plain input description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: create a new, empty Docling document. It also distinguishes this from the sibling conversion tool and names the downstream authoring tools it is meant to precede.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance for incremental authoring from scratch and names the alternative convert_document_into_docling_document for existing files. This directly routes the agent between sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_document_items_at_anchorsDelete Docling document items at anchorsADestructive
Delete multiple document items identified by their anchors.
This tool removes specified items from a Docling document that exists in the local document cache, based on their anchor references. It requires that the document already exists in the cache before performing the deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| document_key | Yes | The unique identifier of the document in the local cache. | |
| document_anchors | Yes | A list of anchor references identifying the items to be deleted from the document. |
Output Schema
| Name | Required | Description |
|---|---|---|
| document_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The destructiveHint annotation already signals that this operation mutates or destroys, so the description's added value is the cache prerequisite and the anchor-based scoping of what gets deleted. This provides useful behavioral context beyond the annotations and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the operation in the first sentence. There is slight redundancy between 'Delete multiple document items identified by their anchors' and 'removes specified items ... based on their anchor references,' but it remains appropriately sized and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple two-parameter destructive tool with full schema coverage and an output schema. The description covers what the tool does and the important cache requirement, so an agent can safely select and invoke it. A slightly stronger description would also address invalid-anchor behavior or clarify whether deletion is irreversible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverages is 100%: document_key and document_anchors are both well-described, with examples such as '#/texts/2' and '#/tables/1'. The tool description restates the anchor-based semantics but does not add significant meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb ('Delete') with a precise resource ('document items') and selection mechanism ('anchors'). It also clarifies that this operates on a Docling document in the local cache and can remove multiple items, making it clearly distinguishable from sibling read/update tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys the main use case: deleting multiple cached document items by anchor references. It also states an explicit prerequisite: the document must already exist in the local cache. It does not name sibling alternatives or provide when-not-to-use guidance, but the destructive use case is obvious among the listed siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_docling_document_to_markdownExport Docling document to markdown formatARead-only
Export a document from the local document cache to markdown format.
This tool converts a Docling document that exists in the local cache into a markdown formatted string, which can be used for display or further processing. Set page_no to export a single page instead of the whole document.
| Name | Required | Description | Default |
|---|---|---|---|
| page_no | No | Page number to export (1-based). When omitted, all pages are exported. | |
| max_size | No | The maximum number of characters to return. | |
| document_key | Yes | The unique identifier of the document in the local cache. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | |
| document_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the source must exist in the local document cache and that output is a markdown string, but says nothing about failure when the key is absent or about size limits beyond the schema's own max_size field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, and the page_no hint is placed after the main statement. The clause 'which can be used for display or further processing' is filler that could be trimmed, but overall it is tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and annotations cover the read-only profile. It is complete enough for a straightforward export tool, though a note on behavior for missing or uncached document keys would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented, including page_no's 1-based semantics and max_size's character cap. The description's page_no note duplicates the schema rather than adding meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — export a cached Docling document to markdown — and the conversion to a markdown string makes the output distinctive among siblings like get_text_of_document_item_at_anchor. It doesn't explicitly contrast with any sibling, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is 'Set page_no to export a single page instead of the whole document', which is parameter usage rather than when-to-use-this-tool guidance. No mention of when to prefer other extraction tools (e.g., anchor-based text retrieval) or prerequisites such as the document already being in the cache.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_overview_of_document_anchorsGet overview of Docling document anchorsARead-only
Retrieve a structured overview of a document from the local document cache.
This tool returns a text representation of the Docling document's structure, showing the hierarchy and types of elements within the document. Each line in the output includes the document anchor reference and item label.
| Name | Required | Description | Default |
|---|---|---|---|
| document_key | Yes | The unique identifier of the document in the local cache. |
Output Schema
| Name | Required | Description |
|---|---|---|
| structure | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful behavioral detail: it operates on the local document cache and returns line-level output containing anchor references and item labels. This is proportionate for a read-only tool and does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main action and resource. The second sentence adds specific output details—hierarchy, types, anchor reference, and item label—without any filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only overview tool with complete input schema documentation, annotations, and an output schema, the description sufficiently covers source, behavior, and output format. Nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: document_key is already described as 'The unique identifier of the document in the local cache.' The description's phrase 'from the local document cache' reinforces this but adds no additional parameter semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Retrieve a structured overview of a document from the local document cache' and then explains that the output is a text representation of the document's hierarchy and element types, with each line containing an anchor reference and item label. This clearly identifies the action, resource, and output, and differentiates it from sibling content-retrieval or mutation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: use this when you need a structural overview of a cached Docling document. However, there is no explicit statement of when to prefer this tool over alternatives such as search_for_text_in_document_anchors or get_text_of_document_item_at_anchor, and no 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_thumbnailGet page thumbnail of Docling documentBRead-only
Generate a thumbnail image for the requested page of a document in the local cache.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | The width of the thumbnail in pixels | |
| page_no | No | The number of the page starting at 1 | |
| document_key | Yes | The unique identifier of the document in the local cache. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds that the thumbnail is derived from a local-cache document, but says nothing about whether the thumbnail is persisted/side-effecting, what format is returned, or any cost/size considerations—important for a 'generate' verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Nothing is redundant or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should explain what the thumbnail return looks like (image bytes, URL, base64, MIME type) and any prerequisites. It covers neither, leaving the agent guessing about the result shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with size, page_no, and document_key fully documented, so the schema carries the burden. The description only echoes 'requested page' without adding defaults, units, or format semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: generating a thumbnail image for a requested page of a cached document. It's distinguishable from the anchor/text-reading siblings in the toolset, though it doesn't say how it relates to get_overview_of_document_anchors or other read tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this versus alternatives, and no stated precondition that the document must already be in the local cache (e.g., via check_document_in_local_cache or convert_document_into_docling_document). The phrase 'in the local cache' only hints at the requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_text_of_document_item_at_anchorGet text of Docling document item at anchorARead-only
Retrieve the text content of a specific document item identified by its anchor.
This tool extracts the text from a Docling document item at the specified anchor location within a document that exists in the local document cache.
| Name | Required | Description | Default |
|---|---|---|---|
| document_key | Yes | The unique identifier of the document in the local cache. | |
| document_anchor | Yes | The anchor reference that identifies the specific item within the document. |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful context by specifying that the document must exist in the local document cache and that extraction is targeted at an anchor location, which helps the agent understand prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose in the first sentence. The second sentence repeats some of the same information, but it adds useful cache context, so the slight redundancy is acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with a full input schema, output schema, and safety annotations, the description is largely complete. It covers the key prerequisite of cache residency, though it does not explain behavior for invalid or missing anchors; that is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both document_key and document_anchor already described clearly, including an example anchor format. The tool description adds no parameter-level meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve'/'extracts') and names the precise resource: text content of a Docling document item at an anchor. It stands apart from siblings like update_text_of_document_item_at_anchor and search_for_text_in_document_anchors by clearly focusing on read-only text extraction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: after a document exists in the local document cache and when you need the text of a single anchored item. However, it gives no explicit guidance about alternatives or when not to use it, such as when needing to search anchors or update text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cached_documentsList cached Docling documentsARead-only
Return the keys of all Docling documents currently held in the local cache.
Use this tool to discover which documents are available before calling any tool that requires a document_key. An empty list means the cache is empty and a document must first be loaded with convert_document_into_docling_document or created with create_new_docling_document.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| document_keys | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, non-destructive safety profile, and the description reinforces this by framing the tool as pure discovery. It also discloses the empty-list edge case, which is behavior an agent needs. It doesn't discuss ordering or whether keys are stable across cache reloads, though an output schema exists to cover the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then usage context, then the edge case. No filler and nothing repeated from structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with annotations and an output schema, this covers everything an agent needs: what it returns, when to call it, and how to recover from an empty result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so baseline is 4. The description usefully links the returned keys to the document_key argument expected by other tools, giving the agent a reason for the output even though no input semantics apply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return the keys of all Docling documents currently held in the local cache') with explicit scope (local cache, all documents). This distinguishes it from siblings like check_document_in_local_cache (single lookup) and remove_document_from_local_cache (mutation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('discover which documents are available before calling any tool that requires a document_key') and what the empty-list outcome implies. It even names the two alternative entry points (convert_document_into_docling_document, create_new_docling_document) that populate the cache.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_list_in_docling_documentOpen list in Docling documentA
Open a new list group in an existing document in the local document cache.
This tool begins a list context on the document's internal stack. Once a list is open, only add_list_items_to_list_in_docling_document may be called to populate it. Attempting to add a title, section heading, paragraph, or another list before calling close_list_in_docling_document will raise an error. Nested lists are supported: call open_list_in_docling_document again after adding items to start an inner list, then close each list with close_list_in_docling_document in reverse order.
| Name | Required | Description | Default |
|---|---|---|---|
| document_key | Yes | The unique identifier of the document in the local cache. |
Output Schema
| Name | Required | Description |
|---|---|---|
| document_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false; the description goes well beyond by disclosing stack semantics, the error condition for misordered calls, and the nesting/close-order protocol. This is exactly the kind of state-machine behavior an agent cannot infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action, then the constraint, then the nesting rule. No filler and no repetition of the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values needn't be explained, and the description covers the one thing that matters for this low-parameter tool: the ordering contract and the legal next call. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single document_key parameter is fully described in the schema, so the description adds nothing new about it. With one well-documented parameter, the baseline 3 applies rather than a penalty.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Open a new list group') and scopes it to 'an existing document in the local document cache'. The stateful-stack framing clearly distinguishes it from add_list_items_to_list_in_docling_document and close_list_in_docling_document among the siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the only legal follow-up call (add_list_items_to_list_in_docling_document) and lists the calls that will raise an error instead (title, section heading, paragraph, another list). It also documents the nested-list sequence and the required reverse-order closing, so the agent knows both when to use it and what must come next.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_document_from_local_cacheRemove document from local cacheADestructive
Remove a document from the local cache and release its memory.
Call this tool when a client is finished with a document and wants to release the memory it occupies. After a successful call the key is no longer present in the cache.
| Name | Required | Description | Default |
|---|---|---|---|
| document_key | Yes | The unique identifier of the document to remove from the local cache. |
Output Schema
| Name | Required | Description |
|---|---|---|
| dropped | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description's added post-condition ('after a successful call the key is no longer present in the cache') is genuinely useful state-transition context. It stops short of covering the no-op/error case when the key is absent or whether the operation is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and effect, with zero filler. Every sentence contributes action, trigger, and post-condition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers the trigger, effect, and post-state. Only the absent-key/error behavior is left unaddressed, which is a minor gap for a one-parameter cache removal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is documented as 'the unique identifier of the document to remove from the local cache'. The description adds no format, origin, or constraint detail beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: removing a document from the local cache and releasing its memory. It is clearly distinguishable from document-editing siblings like delete_document_items_at_anchors, and its cache-management kin (check_document_in_local_cache, list_cached_documents) are implicitly different in effect, though not named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger condition: call when a client is finished with a document and wants to release memory. It does not name an alternative (e.g., check_document_in_local_cache to confirm presence first) or state when not to call, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_docling_documentSave Docling documentA
Save a document from the local document cache to disk in both markdown and JSON formats.
This tool takes a document that exists in the local cache and saves it to the specified cache directory with filenames based on the document key. Both markdown and JSON versions of the document are saved. When page_no is set, only that page is saved in markdown, to a page-specific file, while the JSON file still contains the full document.
| Name | Required | Description | Default |
|---|---|---|---|
| page_no | No | Page number to export to the markdown file (1-based). When omitted, all pages are exported. The JSON file always contains the full document. | |
| document_key | Yes | The unique identifier of the document in the local cache. |
Output Schema
| Name | Required | Description |
|---|---|---|
| md_file | Yes | |
| json_file | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say it is a non-read, non-destructive write, so the description carries real weight and it does: it discloses that two files are written, that filenames derive from the document key, and that page_no narrows only the markdown file while JSON stays complete. It never explains how the target 'cache directory' is determined or what happens on an overwrite, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the page_no caveat. It is slightly repetitive, restating 'both markdown and JSON versions' after already saying 'in both markdown and JSON formats', but nothing is wasted enough to hurt.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two parameters, full schema coverage, annotations for the write profile, and an output schema, the remaining need is explaining the dual-file write and page_no asymmetry — both are covered. The only soft spot, where the target directory comes from, is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema, including the page_no markdown-only nuance. The description restates rather than extends that meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: saves a cached docling document to disk as markdown plus JSON, which is more specific than the title alone. It never names the near-identical sibling export_docling_document_to_markdown, so an agent must guess which is the right 'write to disk' tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'takes a document that exists in the local cache' implies the precondition (the doc must already be cached), which is useful usage context. But there is no explicit when-to-use/when-not guidance and no routing to or away from export_docling_document_to_markdown or check_document_in_local_cache.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_for_text_in_document_anchorsSearch for text in Docling document anchorsARead-only
Search for specific text and keywords within a document's anchors.
This tool takes a string of text to search for and returns a string of all document anchors that contain the exact text. The search is case-insensitive. If the exact text is not found, the tool will search for individual keywords within the text, splitting it on non-alphanumeric characters. If keywords are found, they are listed alongside their number of occurrences in parentheses.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The string of text to search for in the document's anchors. | |
| document_key | Yes | The unique identifier of the document in the local cache. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint/destructiveHint annotations by explaining the exact search behavior: case-insensitive matching, fallback to splitting the input into keywords on non-alphanumeric characters, and reporting keyword occurrence counts. This gives an agent a clear model of what will happen.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, opening with the core purpose and then elaborating with necessary behavioral details. Each sentence adds useful information, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to detail return values. It covers the main functionality, search behavior, and fallback logic. A possible gap is the absence of a stated behavior when neither the exact text nor any keywords are found, but this is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters described in the input schema. The description adds context about the search behavior but does not add new semantic detail about the parameters themselves, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the operation as searching for text within a document's anchors, using a specific verb and resource. It distinguishes the tool from siblings that retrieve or modify anchors, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: to find document anchors containing a specific text or keywords. However, it provides no explicit guidance on when to prefer this over related tools like get_overview_of_document_anchors or get_text_of_document_item_at_anchor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_text_of_document_item_at_anchorUpdate text of Docling document item at anchorADestructive
Update the text content of a specific document item identified by its anchor.
This tool modifies the text of an existing document item at the specified anchor location within a document that exists in the local document cache. It requires that the document already exists in the cache before a modification can be made.
| Name | Required | Description | Default |
|---|---|---|---|
| document_key | Yes | The unique identifier of the document in the local cache. | |
| updated_text | Yes | The new text content to replace the existing content. | |
| document_anchor | Yes | The anchor reference that identifies the specific item within the document. |
Output Schema
| Name | Required | Description |
|---|---|---|
| document_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as mutating and destructive, so the description does not need to repeat that. It adds useful behavioral context by explaining the target must be an existing document item and that the document must already be cached, which goes beyond the raw annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two short sentences that convey the primary action and the key prerequisite. It is front-loaded with the core purpose and contains no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, an output schema, and annotations indicating destructive behavior, the description covers the essential operational context: the update targets an existing cached item by anchor. It could add a note about how to obtain valid anchors or the need to save after updating, but these are not critical gaps given the sibling tools and existing schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all three parameters: document_key, updated_text, and document_anchor. The description does not add parameter-level details beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Update') and resource ('text content of a specific document item identified by its anchor'), making the tool's function immediately clear. It also distinguishes this from sibling tools like get_text_of_document_item_at_anchor and delete_document_items_at_anchors by focusing on modifying existing text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states that the tool requires the document to already exist in the local cache before modification, providing meaningful context for when it can be used. It does not explicitly mention alternatives or when not to use it, but the prerequisite is clear enough to guide the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v3.2.2- Added
check_document_in_local_cache - Removed
drop_document_from_local_cache - Changed
export_docling_document_to_markdown1 field changed- added
Input schema / properties / page_noAdded value: +{ + "anyOf": [ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Page number to export (1-based). When omitted, all pages are exported.", + "title": "Page No" +}
- Added
get_page_thumbnail - Removed
is_document_in_local_cache - Added
list_cached_documents - Removed
page_thumbnail - Added
remove_document_from_local_cache - Changed
save_docling_document1 field changed- added
Input schema / properties / page_noAdded value: +{ + "anyOf": [ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Page number to export to the markdown file (1-based). When omitted, all pages are exported. The JSON file always contains the full document.", + "title": "Page No" +}
1 tool update
v3.2.1- Added
drop_document_from_local_cache
19 tool updates
v0.1.0- First observed
add_list_items_to_list_in_docling_document - First observed
add_paragraph_to_docling_document - First observed
add_section_heading_to_docling_document - First observed
add_table_in_html_format_to_docling_document - First observed
add_title_to_docling_document - First observed
close_list_in_docling_document - First observed
convert_directory_files_into_docling_document - First observed
convert_document_into_docling_document - First observed
create_new_docling_document - First observed
delete_document_items_at_anchors - First observed
export_docling_document_to_markdown - First observed
get_overview_of_document_anchors - First observed
get_text_of_document_item_at_anchor - First observed
is_document_in_local_cache - First observed
open_list_in_docling_document - First observed
page_thumbnail - First observed
save_docling_document - First observed
search_for_text_in_document_anchors - First observed
update_text_of_document_item_at_anchor
TDQS
Scored across 21 tools
Most tools have clearly distinct resource+action targets, and the descriptions actively disambiguate close pairs (e.g. create_new_docling_document explicitly says to use convert_document_into_docling_document for existing files). Minor overlap remains between check_document_in_local_cache and list_cached_documents, and between export_docling_document_to_markdown and save_docling_document, but the distinctions are documented.
Names are uniformly snake_case and verb-first (check_, convert_, add_, get_, delete_, etc.), which is readable and predictable. However, the object naming is inconsistent: some tools append the full '_to_docling_document' suffix while others use plain 'document', 'cached_documents', or 'page_thumbnail'.
At 21 tools it is on the heavy side, but the surface splits into coherent clusters (cache, conversion, authoring, inspection, export), and nearly every tool maps to a distinct operation. The list authoring stack (open/close/add_items) inflates the count slightly but is justified.
The lifecycle is well covered: conversion, cache listing/checking/removal, document creation, structural authoring (title, headings, paragraphs, lists, tables), anchor-based inspection/search/update/delete, and export/save/thumbnail. Gaps are minor, e.g. no whole-document text extraction or format export beyond markdown/JSON, and no item reordering or bulk text replacement.
Maintenance
Related MCP Connectors
Composable APIs for document extraction, image transformation, and document & sheet generation.
Turn documents into structured data: parse, extract, classify, split, and fill PDF forms.
PDF tools for agents: compress to a size, Arabic + English OCR, Office conversion, JSON extraction.
High-fidelity PDF to structured Markdown conversion and document field extraction.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides comprehensive document processing, including reading, converting, and manipulating various document formats with advanced text and HTML processing capabilities.1659 npm19MIT
- FlicenseNot gradedqualityDmaintenanceEnables processing and analysis of large PDF files through text extraction, search functionality, and intelligent chunking strategies. Provides comprehensive PDF operations including metadata retrieval, page-range text extraction, and content search with contextual results.-
- FlicenseNot gradedqualityDmaintenanceProvides tools to read PDFs, extract images, convert between PDF and DOCX, create DOCX from text, and generate PDFs from DOCX, text, or HTML.-
- AlicenseAqualityDmaintenanceEnables PDF processing and analysis including text extraction, metadata retrieval, search, page manipulation, splitting/merging, conversion to images, and form handling.10MIT