Doconda
OfficialDoconda MCP lets an AI agent create, upload, convert, edit, and inspect Word, PowerPoint, Excel, PDF, and web-artifact documents.
Create finished documents from a prompt or Markdown in docx, pdf, pptx, xlsx, or artifact format, with optional name, style, quality, retention, max quality, and source files.
Upload files by public URL, local path, or base64 content (up to 20 MB).
Convert uploaded or previously created files to other formats without AI, including OCR for scanned PDFs/images.
Edit existing Word, PowerPoint, Excel, or PDF files using natural-language instructions while preserving unchanged content.
List recent project documents and get document status plus fresh download links.
Get an edit report showing added, changed, or removed passages with before/after text.
Read data saved in artifact pages, such as poll votes or checklist records.
The remote Doconda MCP server can be attached directly as a tool in the OpenAI Responses API (server_url + bearer API key, with approval settings), so a model can create, review and edit Word, PowerPoint, Excel and PDF documents, or build interactive web-page artifacts, and get back download links and change reports.
@doconda/mcp
MCP server for Doconda: give your AI agent tools to convert, create and edit Word, PowerPoint, Excel and PDF documents. Editable files, reviewed before delivery, with a PDF and a preview of each page.
Remote server (for your app's agent)
No install: https://api.eu.doconda.com/mcp (Streamable HTTP). Clients with MCP authorization (Claude connectors,
Claude Code, Cursor, MCP Inspector) only need the URL: they open Doconda in the browser to sign in and approve access
to one project, read-only if you prefer. Agent frameworks and model APIs send an API key instead, as
Authorization: Bearer ak_eu_…. With the OpenAI Responses API:
from openai import OpenAI
response = OpenAI().responses.create(
model="gpt-5",
input="Make an Excel with the event budget",
tools=[{
"type": "mcp",
"server_label": "doconda",
"server_url": "https://api.eu.doconda.com/mcp",
"headers": {"Authorization": "Bearer ak_eu_…"},
"require_approval": "never",
}],
)
print(response.output_text)Messages (errors, report texts) come in English; the remote server follows Accept-Language, so send
Accept-Language: es for Spanish.
Not using MCP? The SDKs return the same tools for any model with tool calling: @doconda/sdk · doconda.
Related MCP server: Zileo Docs
Local server (stdio)
With Claude Code:
claude mcp add --transport stdio doconda --env DOCONDA_API_KEY=ak_eu_… -- npx -y @doconda/mcpFor other MCP clients, such as Claude Desktop:
{
"mcpServers": {
"doconda": {
"command": "npx",
"args": ["-y", "@doconda/mcp"],
"env": { "DOCONDA_API_KEY": "ak_eu_…" }
}
}
}Tools
create_document, upload_file, convert_file, edit_document, list_documents, get_document, get_report,
read_artifact_data.
Docs: https://docs.doconda.com/en/agents/mcp · Examples: https://github.com/B-C-Software/doconda-examples · Get an API key: https://doconda.com
Development
Node 22.18 or later:
npm install
npm run build
npm testThe tests need no API key and make no network calls. This repository is published from Doconda's main repository: open issues and pull requests here, and accepted changes are applied upstream and arrive with the next release.
Available Tools
8 toolsconvert_fileConvert fileAInspect
Convert an uploaded file to another format, with no AI. Word, Markdown, text, HTML and .odt → docx, pdf, md, txt, html, odt, rtf; Excel and CSV → xlsx, csv, pdf, md, txt; PowerPoint → pptx, pdf, md, txt; PDF → docx, md, txt; PNG and JPEG → pdf, md. Scanned PDFs and pictures are read with OCR. md, txt, html and csv come back as text (use md to read any file); the rest as a download link valid 5 minutes. The first 1000 conversions each month are free, then 0.01 € each.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The format you want. | |
| file_id | Yes | From upload_file, or the id of a document Doconda made (list_documents). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the response shape difference (md/txt/html/csv return inline `text`, everything else returns a download link valid only 5 minutes), OCR behavior for scanned PDFs and images, and the billing model (first 1000/month free, then 0.01 € each). These are exactly the operational facts an agent cannot get from readOnlyHint=false or destructiveHint=false.
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-loads the purpose, then packs the format matrix into one dense but scannable clause, followed by return-format and pricing sentences. The conversion lists are long but each entry carries decision-relevant information; the only slight waste is the somewhat verbose arrow chains.
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 no output schema, the description carries the return-value burden itself — and it does, covering the text-vs-download-link split, the 5-minute link expiry, and OCR handling. Combined with the format matrix and cost note, an agent has everything needed to call this correctly on the first try.
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 baseline is 3, and the description earns a bump by explaining what each `to` value implies for the response type and by making the md choice a usability recommendation. What it doesn't do is clarify format-specific failure modes (e.g., unsupported source/target pairs) beyond the matrix.
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 (convert a file) and backs it with an explicit source→target format matrix, so an agent can immediately tell this apart from create_document, upload_file, or get_document. The 'with no AI' qualifier further distinguishes it from AI-driven document creation 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?
Gives clear routing context: file_id comes 'From upload_file, or the id of a document Doconda made (list_documents)', and 'use md to read any file' steers the agent toward md when the goal is reading content. It stops short of stating when NOT to use it (e.g., when to prefer get_document over converting), so no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_documentCreate documentAInspect
Create a finished document: Word, PDF, PowerPoint, Excel or an artifact (a web page with its own shared database, e.g. a poll or a team checklist). Choose only the format: Doconda works out what kind of document it is (contract, letter, report…) from the request. Give prompt to have it written, or markdown with the content already written. Waits until it is ready and returns download links.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Artifacts only. shared (default): everyone with the link sees the same data (polls, team lists). local: each visitor keeps their own in their browser (calculators, personal checklists). With retention none, only local. | |
| name | No | Optional: a name to find it later, e.g. 'Contrato piso Malasaña'. It also names the files. | |
| style | No | Optional: the look in plain words, e.g. 'blue centred headings, Lora font, page numbers, table of contents'. | |
| format | No | docx → Word (+ PDF); pdf → only the PDF; pptx → PowerPoint (+ PDF); xlsx → Excel (+ PDF); artifact → web page. If the user didn't say, leave it out and Doconda decides from the prompt. | |
| prompt | No | What to write, in the user's words (topic, audience, length, tone). Formatting wishes too, e.g. 'blue centred headings, with a cover page'. | |
| quality | No | Optional. fast: the cheapest and quickest (about a minute), any style, but it can't copy a file's design. standard: more care, takes minutes. best: the highest quality and price, e.g. to copy a file's design or to edit with comments or tracked changes. auto (default): Doconda picks the level the request needs. The price of the highest level it may use is held from the balance while the document is made and what is not used is returned: with a low balance, pick fast or set max_quality. | |
| markdown | No | Content already written, in Markdown (instead of prompt). For an artifact, the content its page shows. | |
| retention | No | Optional: how long Doconda keeps it once finished (none = 15 minutes). Without it, the project's retention (30 days unless changed). The user should save the file before then. | |
| max_quality | No | Only with quality auto: the highest level Doconda may choose. It caps the price and the amount held, e.g. standard. | |
| source_file_ids | No | Uploaded files (upload_file) or documents already made (their id, from list_documents): documents to base the text on (up to 5, with prompt) and pictures to put in the document (up to 10; with markdown, refer to them as , the first picture). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly=false, non-idempotent, non-destructive, so the mutating nature is already covered; the description adds genuinely new behavioral facts beyond that: the call blocks ('Waits until it is ready') and the result is download links. It does not mention failure modes, credential/quota prerequisites, or that repeated calls produce duplicates (implied only by idempotentHint=false in 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?
Four sentences, front-loaded with the capability and output formats, then the input fork, then the wait/return. Zero filler, though the parenthetical artifact explanation is slightly dense and the prompt/markdown fork could be tighter. Well within size for a 10-parameter tool.
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, and the description compensates by telling the agent the call is synchronous and yields download links. Combined with exhaustive schema docs for cost, retention and quality, an agent has enough to invoke it correctly; only error/edge behavior and the create-vs-edit boundary are left implicit.
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 all 10 parameters, including enums, defaults, the format→output mapping, the retention/balance-hold nuance and the max_quality/quality relationship. The description only restates the format and prompt/markdown choices, adding no syntax or edge-case meaning the agent could not read in the schema. Baseline 3 is correct.
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 ('Create a finished document') and enumerates the concrete outputs (Word, PDF, PowerPoint, Excel, artifact), including a plain-language definition of the non-obvious 'artifact' format. An agent can distinguish this from sibling upload_file (which supplies inputs) and edit_document (which modifies an existing one) without opening either schema.
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 explicit selection guidance: 'Choose only the format' and the prompt-vs-markdown fork ('Give prompt to have it written, or markdown with the content already written'). It stops short of naming edit_document or review_document as the alternatives for non-creation work, so the when-not-to-use boundary is only implied by the verb 'create'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_documentEdit documentAInspect
Change an uploaded Word, PowerPoint, Excel or PDF file as asked (e.g. 'blue headings and add a confidentiality clause'). Only what is asked changes; the rest stays identical. Returns the new file; get_report lists every change, with the text before and after.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | From upload_file, or the id of a document Doconda made (list_documents). | |
| quality | No | Optional. fast: the cheapest and quickest (about a minute), any style, but it can't copy a file's design. standard: more care, takes minutes. best: the highest quality and price, e.g. to copy a file's design or to edit with comments or tracked changes. auto (default): Doconda picks the level the request needs. The price of the highest level it may use is held from the balance while the document is made and what is not used is returned: with a low balance, pick fast or set max_quality. | |
| max_quality | No | Only with quality auto: the highest level Doconda may choose. It caps the price and the amount held, e.g. standard. | |
| instructions | Yes | What to change, in the user's words. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a non-readonly, non-destructive, non-idempotent operation. The description adds useful behavioral context: only requested changes are applied, everything else stays identical, a new file is returned, and get_report can list before/after changes.
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 three compact sentences with the action front-loaded. Every sentence adds either scope, behavioral assurance, or return-value guidance without filler.
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?
There is no output schema, so it is valuable that the description states a new file is returned and points to get_report for the change log. Combined with the rich parameter schema and annotations, it is nearly complete, though explicit sibling routing is still 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 description coverage is 100%, and the schema already documents file_id, instructions, quality, and max_quality in detail. The description only reinforces that instructions are natural-language requests; it adds no new semantics for the quality controls or parameter constraints.
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 gives a specific verb and resource: change an uploaded Word, PowerPoint, Excel or PDF file. It includes a concrete example and makes clear this edits existing content rather than creating or uploading a new file.
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?
Usage is implied by 'change an uploaded ... file as asked', but the description does not explicitly say when to choose this over create_document, review_document, or upload_file. The get_report reference explains follow-up inspection, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_documentGet documentBRead-onlyIdempotentInspect
A document's status and fresh download links (they expire after 5 minutes).
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | doc_… |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds genuinely non-obvious behavior: the response contains a status and download links that expire after 5 minutes, which tells the agent to fetch and use links promptly rather than cache them. It stops short of describing status values or error behavior for a missing/invalid document_id.
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?
One short clause with zero waste, and the time-sensitive caveat is included inline. It is a sentence fragment rather than a structured statement of purpose, which costs it a point.
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 one-parameter read tool with no output schema, the description does mention what is returned, which is the main gap it needed to fill. However, it leaves the shape of 'status' and the nature of the download links vague, which is thin for a tool whose whole value is that return payload.
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 the single document_id documented as 'doc_…', so the schema already carries the parameter semantics. The description adds nothing about the ID format or lookup failure modes, 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?
The description names the resource and what comes back (status plus download links) but never states the action with a verb, and it does not distinguish this tool from siblings like get_report, read_artifact_data, or list_documents. The title 'Get document' supplies the verb, so an agent can infer retrieval, but the description itself only implies it.
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?
There is no guidance on when to call this versus get_report, list_documents, or read_artifact_data, and no mention of prerequisites such as needing a prior create_document/upload_file. The 5-minute expiry note is a timing caveat, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reportGet reportARead-onlyIdempotentInspect
What an edit changed (from edit_document): changes lists each passage added, changed or removed, with the text before and after (empty for a created document). For the status and download links use get_document. Until the document finishes it returns report_not_ready; once its retention ends, content_deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | doc_… |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses the return content shape (added/changed/removed passages with before/after text) and important lifecycle states: report_not_ready before completion and content_deleted after retention. It does not cover invalid-ID behavior or the full response structure, but with annotations already declaring read-only/idempotent behavior this is a useful addition.
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-loads the core purpose, then follows with the alternative tool and lifecycle states. Every sentence adds useful information without repetition.
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 one-parameter read tool with no output schema, it sufficiently explains the main returned content and special report states. It could more fully specify the changes object or edge cases, but the description covers what an agent needs to invoke and interpret 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 has 100% description coverage for the single document_id parameter, so the schema already documents it. The description does not add any further parameter-level meaning, making the baseline score 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 concretely defines the tool as retrieving the change report produced by edit_document, including what the changes list contains. It also explicitly distinguishes it from get_document, which is for status and download links.
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 names the alternative get_document and the condition for using it (status and download links), which gives clear routing guidance. It implies the use case for get_report through the first sentence but does not spell out a full when-to-use/when-not-to-use rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_documentsList documentsARead-onlyIdempotentInspect
The latest documents made in this project (newest first), with their id and name. Use an id as file_id to convert or edit one, or in source_file_ids to create from it.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many, 1–100 (default 20). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and closed-world, so the safety profile is covered. The description adds genuinely new context: results are project-scoped, sorted newest first, and carry id and name. No pagination or exhaustion behavior is mentioned, which is the only real gap.
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 tight sentences, no filler. The core output (id + name, newest first) is front-loaded and the follow-up sentence covers downstream use.
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?
Single optional parameter, no output schema, and the description itself describes the return shape (id and name) plus ordering and scope. Nothing an agent needs to invoke it correctly 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 limit parameter already documents range and default. The description only implies ordering is fixed ('newest first'), which is a small semantic addition beyond the schema — baseline 3 fits.
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 plus scope and ordering: 'latest documents made in this project (newest first), with their id and name.' An agent immediately knows what comes back. It doesn't explicitly contrast with get_document, but the 'latest/made in this project' framing distinguishes it from a single-document fetch.
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 concrete downstream routing: 'Use an id as file_id to convert or edit one, or in source_file_ids to create from it,' which points at convert_file, edit_document, and create_document. It stops short of stating when to pick this over get_document when the id is already known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_artifact_dataRead artifact dataARead-onlyIdempotentInspect
What people have saved in an artifact's page (e.g. poll votes): its collections, or one collection's records, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | No | Optional: one collection's records instead of the list of collections. | |
| document_id | Yes | The artifact's doc_… id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing the result shape (collections vs. records) and the 'newest first' ordering, but says nothing about pagination, result limits, or what an empty artifact returns — meaningful gaps for a records-listing read.
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 well-formed sentence with no filler, and the core resource is front-loaded before the returned shapes. It is slightly compressed to the point of being terse ('What people have saved in an artifact's page'), but nothing is wasted.
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, and no output schema, the description supplies the essential missing piece — what the call actually returns (collections or records, newest first). Remaining gaps (pagination, volume, permissions) are minor for a simple two-parameter read tool whose annotations already signal a safe, idempotent operation.
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 structured data, establishing a baseline of 3. The description's mention of 'one collection's records' largely restates the schema's own 'Optional: one collection's records instead of the list of collections' and adds no naming format, matching rule, or error behavior.
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 concrete resource — what users have saved on an artifact's page, such as poll votes — and states the two shapes it can return (a list of collections, or one collection's records). The retrieval verb is only implied by the name/title rather than stated in the body, and no sibling is named, but the resource is specific enough to separate it from get_document or get_report.
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?
Usage is implied by the phrase 'what people have saved in an artifact's page,' which tells an agent this is the tool for reading submitted/collected data rather than document content. There is no explicit when-not guidance, no mention of prerequisites (does the caller need access to the artifact?), and no alternative tool named for overlapping cases like get_document.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_fileUpload fileAInspect
Upload a file (Word, PDF, PowerPoint, Excel — also the old .doc, .ppt and .xls —, .odt, CSV, TXT, Markdown, HTML, or a PNG, JPEG, GIF or WebP picture; up to 20 MB) to convert or edit it, or to use it as a source. Returns its file_id. Give path for a file on this computer.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | A public URL to download the file from. | |
| path | No | Absolute path of the file on this computer. | |
| filename | No | Its name with extension, e.g. contract.docx. Needed with content_base64. | |
| content_base64 | No | The file's bytes in base64 (for small files). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this as a non-read-only, open-world, non-idempotent, non-destructive operation. The description adds useful behavioral context beyond those hints: accepted file types, a 20 MB size cap, and the fact that it returns a file_id. It does not mention auth or rate limits, but with annotation coverage this is a solid disclosure level.
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 front-loaded with the action and key constraints, and every sentence carries useful information. The long parenthetical format list is somewhat cumbersome but justified for an upload tool, so it is concise enough without being exemplary.
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 no output schema, the description appropriately fills the return-value gap by stating that it returns the file_id. It also covers formats and size limits, which are important for correct invocation; the main remaining gap is that it does not explain how to choose among url, path, and content_base64, though the schema covers those fields.
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 four parameters are already documented in the schema. The description only adds a small path hint that largely repeats the schema's "Absolute path of the file on this computer" text and does not clarify mutual exclusivity among url, path, and content_base64; 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 gives a clear verb and resource ("Upload a file") and adds concrete scope: supported formats, the 20 MB limit, intended downstream uses, and the returned file_id. It is specific enough to distinguish this as the file-ingestion tool, but it does not explicitly contrast itself with siblings such as convert_file or create_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 clear use contexts: upload to convert or edit the file, or to use it as a source. However, it does not name alternatives or exclusions, such as when to use upload_file versus convert_file or create_document, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.5.0- Added
convert_file - Removed
review_document
2 tool updates
v0.4.5- Changed
create_document2 fields changed- added
Input schema / properties / max_qualityAdded value: +{ + "description": "Only with quality auto: the highest level Doconda may choose. It caps the price and the amount held, e.g. standard.", + "enum": [ + "fast", + "standard", + "best" + ], + "type": "string" +} - added
Input schema / properties / qualityAdded value: +{ + "description": "Optional. fast: the cheapest and quickest (about a minute), any style, but it can't copy a file's design. standard: more care, takes minutes. best: the highest quality and price, e.g. to copy a file's design or to edit with comments or tracked changes. auto (default): Doconda picks the level the request needs. The price of the highest level it may use is held from the balance while the document is made and what is not used is returned: with a low balance, pick fast or set max_quality.", + "enum": [ + "auto", + "fast", + "standard", + "best" + ], + "type": "string" +}
- Changed
edit_document2 fields changed- added
Input schema / properties / max_qualityAdded value: +{ + "description": "Only with quality auto: the highest level Doconda may choose. It caps the price and the amount held, e.g. standard.", + "enum": [ + "fast", + "standard", + "best" + ], + "type": "string" +} - added
Input schema / properties / qualityAdded value: +{ + "description": "Optional. fast: the cheapest and quickest (about a minute), any style, but it can't copy a file's design. standard: more care, takes minutes. best: the highest quality and price, e.g. to copy a file's design or to edit with comments or tracked changes. auto (default): Doconda picks the level the request needs. The price of the highest level it may use is held from the balance while the document is made and what is not used is returned: with a low balance, pick fast or set max_quality.", + "enum": [ + "auto", + "fast", + "standard", + "best" + ], + "type": "string" +}
8 tool updates
v0.1.0- First observed
create_document - First observed
edit_document - First observed
get_document - First observed
get_report - First observed
list_documents - First observed
read_artifact_data - First observed
review_document - First observed
upload_file
TDQS
Scored across 8 tools
Each tool maps to a distinct resource+action (create, list, upload, convert, edit, get, report, read artifact data), and descriptions clarify the boundary between get_document (status/links) and get_report (change diff). The only weak spot is that get_report is tightly coupled to edit_document and could be mistaken for a document-status tool at a glance.
All eight tools follow a consistent snake_case verb_noun pattern (create_document, list_documents, upload_file, convert_file, edit_document, get_document, get_report, read_artifact_data). No mixed conventions or vague standalone verbs.
Eight tools is a well-scoped set for a document creation/conversion/editing service, with each tool covering a clearly earned capability. Nothing feels redundant or padded.
The core lifecycle is covered: upload/convert/edit/create documents, list them, retrieve status and download links, and read artifact data. Minor gaps exist — no delete/rename of documents, no listing of artifacts or their collections separately, and get_report is only reachable via edit_document — but agents can work around these.
Maintenance
Related MCP Connectors
Document-to-Markdown MCP server — convert PDF, Office and HTML into LLM-ready Markdown.
DocBase MCP server for AI agents
Document conversion MCP server: PDF to Markdown, image OCR, spreadsheet parsing.
Generate PDF, Word (.docx) and PowerPoint (.pptx) documents from Markdown over MCP.
Related MCP Servers
- AlicenseBqualityDmaintenanceA universal MCP server for document processing, conversion, and automation. Handle PDF, DOCX, HTML, Markdown, and more through a unified API and toolset.1367 npm140MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for indexing, semantic search, and generation of multi-format documents. Exposes 13 tools over JSON-RPC 2.0 so an LLM can search your local PDF, Excel, and Word files, and create or edit Excel and Word documents.AGPL 3.0
- AlicenseAqualityDmaintenanceMCP server for Word document (.docx) creation and manipulation — the production-grade document automation tool for AI agents.946 npmMIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that enables LLM agents to read, understand, and fill DOCX templates while preserving formatting like bold labels and fonts. It exposes tools for document upload, AST inspection, editing, and validation.1MIT