Skip to main content
Glama

doc-agent-mcp

CI PyPI Python License: MIT

一个模型上下文协议(Model Context Protocol)服务器,为 AI 代理提供稳定、语义化的文档操作——而不是让它们处理原始文本。

Human ─────┐
           ↓
        Document          ← Markdown (.md/.markdown) and DOCX today,
           ↑                 Tiptap / SuperDoc / Shimo / Google Docs tomorrow
AI Agent ──┘

LLM 代理将文档当作一个大字符串进行编辑时容易出错:它们会破坏自己看不到的格式、丢失图片和评论,也无法表达“在第 3 节之后插入一个段落”。doc-agent-mcp 将文档暴露为规范化、可寻址的结构(标题、段落、列表项、带稳定 ID 的表格),并让代理在安全循环中工作:

read  →  propose change  →  inspect diff  →  apply  →  export

在调用 apply_changes 之前,不会触碰你的文件。每次读取都接受 doc_hash,因此如果文件在代理任务中途发生变化,后续编辑会大声失败(stale_document),而不是损坏文件。


此方案解决的问题

原始文本编辑(当前常见方式)

doc-agent-mcp

代理重写整个文件来更改一个词

代理替换一个块中的精确字符范围

DOCX 通过文本转换器往返会破坏样式/评论

编辑在原始 OOXML 包内应用;未触碰的内容原样通过

无法在更改前审查将要发生的变化

每次编辑都带有统一差异暂存;应用是显式的

人类并发编辑时静默冲突

内容哈希乐观锁;过期编辑被拒绝

针对格式的硬编码提示词

一个工具表面,任何后端

Related MCP server: docx-mcp-server

架构

MCP interface (13 tools)
        ↓
Document operation layer      ← staging, diffs, hashes, search, sessions
        ↓                          (doc_agent_mcp/service.py)
Normalized document model     ← Block(h-0, p-1, li-2, tbl-0), Comment,
        ↓                          ProposedChange   (core/model.py)
Backend adapters              ← parse() + serialize() per format
        ↓                          (adapters/*_adapter.py)
Markdown · DOCX · future editors (Tiptap, SuperDoc, Shimo, Google Docs)

关键属性:MCP 工具永远不知道底层是哪个后端。 添加新的编辑器后端意味着实现两个方法——参见 ADAPTER_GUIDE.md。

安装

从 PyPI 安装(推荐给用户):

pip install doc-agent-mcp

需要 Python 3.10+。

从源码安装(开发):

git clone https://github.com/xyyyang97/doc-agent-mcp.git
cd doc-agent-mcp

python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"

验证:

doc-agent-mcp --version
# doc-agent-mcp 0.1.0

MCP 配置

服务器通过 stdio 支持标准 MCP。

Claude Desktop

claude_desktop_config.json:

{
  "mcpServers": {
    "doc-agent": {
      "command": "/absolute/path/to/doc-agent-mcp/.venv/bin/doc-agent-mcp",
      "args": ["--roots", "/Users/you/Documents"]
    }
  }
}

Claude Code / Codex CLI

claude mcp add doc-agent -- /absolute/path/to/doc-agent-mcp/.venv/bin/doc-agent-mcp --roots ~/Documents

通用 MCP 客户端(JSON)

{
  "mcpServers": {
    "doc-agent": {
      "command": "/absolute/path/to/doc-agent-mcp/.venv/bin/doc-agent-mcp",
      "args": [],
      "env": {}
    }
  }
}

--roots DIR [DIR ...] 可选地将所有读写限制在这些目录中(推荐)。没有它,服务器可以访问其进程能到达的任何路径——请将服务器配置视为文件系统凭据。

可用工具

读取操作(绝不修改)

工具

用途

read_document(path, section_id?, include_spans?, doc_hash?)

带 ID 的结构化块;可选单节视图;报告 unmodeled_features

get_outline(path, doc_hash?)

标题扁平 + 嵌套树,带路径

find_text(path, query, scope_element_id?, is_regex?, case_sensitive?, doc_hash?)

精确出现位置,带 (element_id, start, end) 偏移量,可直接用于 propose_replace_text;表格命中标记为 editable: false

get_comments(path, doc_hash?)

原生评论(作者、正文、锚点元素、引用范围)

提议操作(暂存更改;尚未写入任何内容)

工具

用途

propose_replace_text(path, element_id, start, end, text)

替换一个块内的字符范围;返回差异预览

propose_insert_block(path, anchor_id, position, kind, text, level?)

在任何元素之前或之后插入段落/标题/列表项(涵盖插入前/后/追加)

propose_delete_block(path, element_id)

删除一个完整块

propose_add_comment(path, anchor_id, body, quote?, author?)

原生 Word 评论(DOCX);Markdown 仅会话内(见限制)

提交与审查

工具

用途

get_changes(path)

所有暂存更改及统一差异

discard_changes(path, change_ids?)

丢弃暂存更改(全部或选定)

apply_changes(path, change_ids?, doc_hash?)

原子写入磁盘;返回新的 doc_hash + 警告

export_document(path, target_format, output_path?, title?)

通过模型转换:md↔docx 双向

list_backends()

已注册的后端及支持的转换

每个修改/读取调用都接受你从上次调用获得的 doc_hash。如果文件自那以后发生了变化(包括由其他进程),你会得到 {"code": "stale_document", ...},并且你的暂存更改会被丢弃——请先重新读取。

示例工作流

这是 examples/demo_workflow.py 运行的确切循环(针对真实文件):

from doc_agent_mcp.service import DocumentService

svc = DocumentService()                      # same facade the MCP tools wrap

# 1. Understand the document
outline = svc.get_outline("brief.md")
summary = next(h for h in outline["headings"] if h["title"] == "Executive Summary")
section = svc.read_document("brief.md", section_id=summary["id"])

# 2. Locate exact text
hit = svc.find_text("brief.md", "30 percent")["matches"][0]

# 3. Stage a change (file is untouched)
proposal = svc.propose_replace_text(
    "brief.md", hit["element_id"], hit["start"], hit["end"],
    "at least 30 percent (validated with finance)",
)

# 4. Review the diff
changes = svc.get_changes("brief.md")
print(changes["changes"][0]["diff"])

# 5. Commit, then export
svc.apply_changes("brief.md", doc_hash=proposal["doc_hash"])
svc.export_document("brief.md", "docx", output_path="brief.docx")

通过 MCP,同样的步骤每次只需一个工具调用——参见上面的工具表。

运行完整演示(Markdown + DOCX + 导出 + 过期保护,全部验证):

.venv/bin/python examples/demo_workflow.py

示例文档位于 examples/documents/:sample.md 和 sample.docx(后者带有两个原生 Word 评论,可通过 scripts/make_sample_docx.py 重新生成)。

错误处理

所有错误都是结构化 JSON——不会跨线路传输回溯:

{
  "code": "element_not_found",
  "message": "Element 'p-99' not found. Call get_outline ...",
  "details": {"element_id": "p-99"}
}

代码

含义

document_not_found

路径不存在

unsupported_format

没有此扩展名的后端

element_not_found

过期/未知的元素 ID

match_not_found / ambiguous_match

搜索未找到 / 保留用于消歧

validation_error

范围错误、引用锚点错误、表格单元格替换、路径超出根目录...

stale_document

文件自快照后已更改;暂存更改已丢弃

change_not_found

未知或已丢弃的 change_id

export_error

不支持的转换对

测试

.venv/bin/pip install -e ".[dev]"
.venv/bin/pytest                 # unit + integration + MCP protocol tests
.venv/bin/ruff check src tests   # lint
.venv/bin/ruff format --check .  # formatting
.venv/bin/mypy                   # strict type checking

测试套件包括 DOCX 往返测试(通过重新打开保存的文件并使用 python-docx 及原始 OOXML 级别验证编辑)以及一个端到端 MCP 测试,该测试通过 stdio 启动服务器并发送真实协议消息。

限制(有意设计,而非偶然)

规范化模型涵盖了 Markdown 和 DOCX 都能可靠表示的内容。其他所有内容在每次读取时都会明确地作为 unmodeled_features 暴露——绝不会静默破坏:

  • DOCX:源中的图像/绘图、页眉和页脚、脚注/尾注、内容控件、跟踪更改均被原样保留,但对模型不可见。表格是纯文本单元格(单元格格式未建模)。replace_text 拒绝包含超链接的段落(重写会破坏它们)。

  • Markdown:序列化是模型忠实,而非字节忠实——内容在往返中保留,但原始换行/标记样式可能不同。块引用被扁平化为其段落(已标记)。引用式链接定义被解析并内联。评论没有原生位置:propose_add_comment 仅将会话内存储并明确说明。

  • 表格:可搜索(标记为 editable: false),但单元格级编辑尚未实现——请改用删除/重新插入。

  • 并发代理:每个文件最后写入者胜出,由哈希检查保护;没有合并引擎。

路线图想法

  • 表格单元格操作(update_table_cell)

  • Tiptap/SuperDoc 适配器,基于其 JSON 模型

  • 通过 Drive API 的 Google Docs 适配器(评论原生映射)

  • Markdown 的锚定建议模式(<!-- suggestion --> 块)

  • 多文件工作区和重命名安全会话

许可证

MIT

Available Tools

13 tools
apply_changesA

Commit staged changes to the file (all, or selected change ids).

Writes atomically, re-reads the file and returns the new doc_hash plus warnings about unmodeled features present in the document.

NameRequiredDescriptionDefault
pathYes
doc_hashNo
change_idsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses atomic writes, re-reading of the file, and returns of doc_hash plus warnings about unmodeled features. This is valuable detail. It does not mention reversibility or concurrency checks, but the atomic write and re-read give a solid sense of safe behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, highly efficient. The main purpose is front-loaded, followed by key behavioral notes. No fluff or redundant phrasing. Every sentence contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 are covered separately. The description explains the core behavior and output (doc_hash, warnings), but omits details like the significance of doc_hash as a parameter, potential errors, or behavior when no changes are staged. Given the moderate complexity (3 params, 1 required), it is adequate but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain parameters. It implicitly explains change_ids ('selected change ids') but does not clarify the role of doc_hash (likely an optimistic concurrency token) or path (though path is self-evident). The description adds minimal value beyond the schema for parameters, leaving doc_hash underspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Commit staged changes to the file' with an option for all or selected change ids. It implies the file is specified by path (required param). It is distinct from the sibling 'discard_changes' which does the opposite, though it doesn't explicitly name the alternative. Purpose is clear and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for finalizing changes that have been staged (presumably via get_changes or propose_* tools) but does not explicitly state when to use it versus alternatives like discard_changes. There is no mention of prerequisites or a typical workflow. Usage context is inferable from siblings but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discard_changesB

Drop staged changes (all of them, or specific change ids).

NameRequiredDescriptionDefault
pathYes
change_idsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states that it drops staged changes, implying a destructive action, but it does not warn about irreversibility, side effects on the document, or any prerequisites. The description adds little beyond the tool's name and basic action, which is insufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no fluff. It states the core capability and a key parameter detail efficiently. However, it is slightly too brief to be fully helpful, though the structure is clean and wastes no words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that this is a destructive tool with no annotations and very low schema description coverage, the description is incomplete. It does not cover when to use it, side effects, or parameter details. The presence of an output schema mitigates return-value concerns, but the overall context is lacking for safe and correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for missing parameter documentation. It mentions 'specific change ids' but does not explain the format of change_ids, what path refers to, or how they relate. It also fails to clarify that change_ids is optional or its default behavior. The description adds minimal value for the two parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'drop' and clearly identifies the resource 'staged changes'. It also clarifies that it can handle all changes or specific ones via 'change ids', which distinguishes it from siblings like apply_changes or propose_* tools. The meaning is unambiguous and the scope is well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives like apply_changes or propose_* tools. It implies the action but lacks any contextual guidance, such as 'use this to revert proposed changes' or 'do not use this if you want to keep the changes'. The usage context is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_documentA

Convert the document to another supported format ('markdown'|'docx').

Conversion goes through the normalized model: markdown->docx builds a fresh Word file (headings, lists, tables, comments); docx->markdown serializes parsed blocks back to Markdown. Unsupported pairs raise a clear export_error listing supported conversions.

NameRequiredDescriptionDefault
pathYes
titleNo
output_pathNo
target_formatYes
include_commentsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that conversions go through a normalized model, explains how each direction works ('builds a fresh Word file' vs 'serializes parsed blocks'), and states error behavior ('raise a clear export_error listing supported conversions'). This goes beyond a simple 'convert' statement and gives the agent a realistic expectation of 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose. Every sentence earns its place—the second sentence adds valuable implementation detail. No fluff or redundant phrasing, making it efficient and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the return format is presumably covered. However, the description leaves key parameters undefined and does not specify default behaviors (e.g., what happens if output_path is omitted, whether include_comments affects both directions). Given the tool's moderate complexity and the presence of five parameters, these gaps prevent it from being complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only references target_format indirectly ('markdown'|'docx'), but does not explain the roles of 'path', 'title', 'output_path', or 'include_comments'. The parameter names might hint at their function, but the description offers no elaboration. This is a significant gap for an agent to call the tool correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear verb and resource: 'Convert the document to another supported format'. It explicitly names the two supported formats, distinguishing this from all sibling tools which are read, search, or edit operations. The unique purpose is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While the description does not explicitly contrast with alternatives, the sibling list confirms no other tool handles format conversion. The stated purpose makes the usage context evident. It also warns about unsupported pairs, giving an implicit hint that this is the only conversion tool. No explicit when-not guidance, but it's not needed given the clear distinction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_textA

Find exact occurrences of text inside document blocks.

Returns every match as (element_id, start, end) character offsets plus a snippet - feed these offsets directly into propose_replace_text. Tables are skipped (cell-level search not supported).

NameRequiredDescriptionDefault
pathYes
queryYes
doc_hashNo
is_regexNo
case_sensitiveNo
scope_element_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It discloses the return format (offsets + snippet), the skip of tables, and the direct coupling to propose_replace_text. However, it does not mention regex behavior, case-sensitivity defaults, doc_hash validation semantics, or scope_element_id scoping, which are meaningful behavioral traits for a search tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with zero filler. The core purpose is front-loaded, the return format follows, and the key limitation is last. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 covered by structured data, and the description adds workflow context plus the tables caveat. But with 6 parameters, no annotations, and near-zero schema coverage, the description leaves doc_hash and scope_element_id behavior unexplained. Completeness is adequate for a simple search but thin for the parameter surface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 6 parameters, and the description compensates little: it explains the output semantics and mentions 'propose_replace_text' but never describes the input parameters. is_regex and case_sensitive are only implied by their names; doc_hash and scope_element_id are completely unexplained. With zero coverage, the description should have done far more to clarify parameter behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Find exact occurrences of text inside document blocks'), then sharpens the scope with 'inside document blocks' and 'Tables are skipped (cell-level search not supported)'. This clearly distinguishes it from siblings like read_document and get_outline, so an agent can tell what it targets without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete workflow guidance: 'feed these offsets directly into propose_replace_text', which tells the agent how the output plugs into a downstream tool. It also flags the tables limitation. It does not explicitly state when-not-to-use versus read_document or propose_insert_block, but the workflow hint provides clear context for the intended search-then-replace flow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_changesA

Review all staged changes with diffs before committing.

Replace changes carry unified diffs; inserts/deletes/comments show their content. Apply selectively with apply_changes(change_ids=[...]).

NameRequiredDescriptionDefault
pathYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It discloses what each change type will look like: 'Replace changes carry unified diffs; inserts/deletes/comments show their content.' This gives the agent a concrete expectation of the output. It does not mention read-only status or side effects, but the verb 'review' and the separation from apply/discard tools imply a non-mutating operation. The description adds real value beyond just 'get changes'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, with the core purpose front-loaded in the first sentence and supporting detail (diff types, selective apply) in the second. There is no redundancy or fluff; every sentence earns its place. It is exceptionally efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists (as indicated by context signals), the description does not need to explain return values. It covers the tool's scope, the nature of the diffs, and how to proceed with apply_changes. The only missing piece is clarification of the 'path' parameter, but that is already addressed under parameter semantics. The tool is a straightforward review step in a larger workflow, and the description is sufficiently complete for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has only one required parameter, 'path', and the schema description coverage is 0%. The description does not mention 'path' at all, leaving the agent to infer its meaning from the tool name and context. This is a significant gap for a single-parameter tool, as the description should clarify what path refers to (e.g., document, workspace).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource: 'Review all staged changes with diffs before committing.' It specifies the scope ('all staged changes'), what's included (diffs), and the context (before committing). This distinguishes it from apply_changes (which applies) and discard_changes (which discards), and the mention of replace, inserts, deletes, and comments adds specificity beyond a generic 'get changes'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context: 'before committing' indicates this is a review step, and 'Apply selectively with apply_changes(change_ids=[...])' explicitly names the alternative for the next action. It does not list when not to use or compare against other siblings, but the flow from review to apply is clearly sketched, providing adequate guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_commentsB

List comments anchored in the document (native DOCX comments).

Each comment carries id, author, body, element_id and quoted range. For Markdown (which has no comment concept) the list is empty.

NameRequiredDescriptionDefault
pathYes
doc_hashNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden of disclosing behavior. It does state that the tool handles native DOCX comments and returns empty for Markdown, which is useful behavioral context. However, it does not mention whether the operation is read-only, if it requires specific permissions, or any side effects. For a listing operation, the read-only nature is implied but not explicitly declared.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: it states the core purpose immediately, then provides additional detail on comment fields and the Markdown caveat in just two short paragraphs. Every sentence adds value with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While an output schema exists (so return structure is covered), the description fails to clarify the essential parameters, which are also undocumented. Additionally, there is no guidance on how to identify the document (path vs. hash) or any prerequisites. For a tool with two parameters and no annotation support, this is insufficient for confident invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, meaning the parameters 'path' and 'doc_hash' are not explained in the schema. The description also does not explain these parameters at all. It lacks any semantics regarding what 'path' refers to (file path? document ID?) or how 'doc_hash' is used. This is a critical gap for agent correctness.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation ('List comments') and the resource ('anchored in the document'), with a precise qualifier ('native DOCX comments'). It distinguishes this from other tools by noting Markdown returns an empty list, which prevents ambiguity with sibling tools like get_changes or get_outline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit 'when to use' guidance or comparison with alternatives. It only mentions that Markdown yields an empty list, which is more of a behavioral caveat than usage direction. Without mention of siblings like get_changes or read_document, an agent may not know when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_outlineA

Get the heading outline of a document.

Returns flat heading entries (id, level, title, path) plus a nested tree. Use heading ids to read sections or anchor edits.

NameRequiredDescriptionDefault
pathYes
doc_hashNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does disclose the return structure (flat entries plus nested tree), but it does not explicitly state whether the operation is read-only, what happens if the path is invalid, or whether there are any side effects. The name 'get' implies non-mutating, but this is not stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct and front-loaded. The main purpose is stated in the first line, and the additional detail about the return format and usage is directly relevant. No extraneous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and 0% schema coverage, the description falls short in explaining parameter semantics and error behavior. However, the presence of an output schema likely covers return format, and the tool's simplicity (read-only outline retrieval) reduces the need for extensive context. Still, the missing parameter explanation makes it incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must compensate by explaining the parameters. It does not mention 'path' or 'doc_hash' at all. The agent must guess that 'path' identifies the document and that 'doc_hash' is possibly a version hash. This is a significant gap given the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and a well-defined resource ('heading outline of a document'), which is clearly distinct from sibling tools like read_document (full content), find_text (search), or get_comments (comments). No ambiguity exists about what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a concrete use case ('Use heading ids to read sections or anchor edits') which helps an agent understand when to invoke it. However, it does not explicitly contrast with alternatives or state when not to use it, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_backendsA

List registered format backends and their file extensions.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states what the tool does but does not explicitly mention that it is read-only or side-effect-free. However, as a listing operation, this is largely implicit. It also does not describe the output structure, but the existence of an output schema mitigates that. The description is adequate but lacks explicit behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-formed sentence that contains no filler or redundant words. 'List registered format backends and their file extensions' is succinct and front-loads the core function. There is zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and the presence of an output schema, the description is sufficient for an agent to understand the tool's purpose and invoke it correctly. It specifies the output informally and the output schema can handle formal structure. No additional context about errors or ordering is needed for a simple list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so per the rubric the baseline is 4. The empty input schema and 100% schema description coverage mean there is nothing to explain. The description accurately reflects that no arguments are needed, and the tool's purpose is fully self-contained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and the resource ('registered format backends') and specifies what is included ('their file extensions'). It is unambiguous and distinct from the sibling tools, which focus on document operations or export. The verb and object are specific, meeting the highest bar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any context, prerequisites, or relationships to sibling tools like export_document. An agent would have to infer that this might be useful before exporting, but the description says nothing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_add_commentB

Stage adding a comment anchored to an element.

DOCX: creates a real Word comment (visible in Word/Google Docs). Markdown: stored in the session only - surfaced by get_comments until the process exits, because Markdown has no native comment storage; the tool result states this limitation explicitly. quote must appear inside the anchor element.

NameRequiredDescriptionDefault
endNo
bodyYes
pathYes
quoteNo
startNo
authorNodoc-agent-mcp
doc_hashNo
anchor_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden. It discloses that DOCX creates a real Word comment, Markdown only stores in-session until process exit, and the tool result explicitly states the limitation. It also mentions the quote constraint. This is transparent, though it doesn't clarify whether 'stage' means the change is not immediately applied (e.g., requiring apply_changes) or cover all 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a clear purpose statement followed by format-specific details and a constraint. It is concise and every sentence provides value, though it could be slightly more compact by merging some lines. Overall, it's efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains format differences and a constraint, but it doesn't explain what 'stage' means in the workflow (e.g., whether it requires apply_changes), nor does it document most parameters. With 8 parameters, an output schema, and no annotations, the description is insufficient for an agent to correctly fill all required fields without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the 8 undocumented parameters. It only explains the constraint on quote (must appear inside the anchor element) and implies the role of anchor_id. It does not explain start, end, doc_hash, author, or path, leaving most parameters ambiguous. This is a significant gap for a tool with this many parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool stages adding a comment anchored to an element, and it distinguishes behavior across DOCX (real Word comment) and Markdown (session-only). It mentions get_comments as a sibling for surfacing comments, which provides some differentiation. However, it doesn't explicitly contrast with other propose_* tools like propose_insert_block, so it's not a perfect 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives format-specific guidance (DOCX vs Markdown) and notes the Markdown limitation, which helps the agent decide when to use the tool. It also hints that get_comments is the way to view Markdown comments. However, it doesn't explicitly state when not to use this tool or provide alternatives for different operations, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_delete_blockB

Stage deleting one whole block (heading, paragraph, item or table).

NameRequiredDescriptionDefault
pathYes
doc_hashNo
element_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The word 'Stage' indicates the operation is not immediate and likely part of a draft workflow, which is a valuable behavioral disclosure given that annotations are absent. However, it does not explain the consequences of staging (e.g., that the deletion won't take effect until applied), any side effects on child elements, or whether the action is reversible. These gaps leave the agent uncertain about the tool's full behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tight sentence that front-loads the core action and resource. It includes only essential details (block types) and avoids redundancy. Every word adds value, making it highly efficient for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema, the description lacks crucial context for a staging mutation: how the staged deletion interacts with child blocks, whether the deletion is part of a change set that must be applied, and how errors or conflicts are surfaced. Combined with no annotations and undocumented parameters, the description is not sufficient for an agent to use the tool confidently in varied scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description must compensate by explaining each parameter's meaning. It implicitly clarifies that 'element_id' identifies a block of the listed types, but it provides no explanation for 'path' or 'doc_hash' and their roles in locating or validating the block. Two of three parameters remain undocumented, leaving the agent to guess.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Stage deleting') applied to a specific resource ('one whole block') and enumerates the valid block types (heading, paragraph, item or table). This distinguishes it from sibling tools like propose_replace_text and propose_insert_block, which perform different operations on blocks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus the alternatives. There is no mention of scenarios that favor deletion over replacement or insertion, nor any conditions where this tool should not be used (e.g., when only part of a block should be deleted). Relying on inference from the tool name alone is insufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_insert_blockB

Stage inserting a new block before or after an existing element.

position: 'before' | 'after' (relative to anchor_id). kind: 'paragraph' | 'heading' (set level 1-6) | 'list_item'. This single tool covers insert-before, insert-after and append use cases (anchor on the last element and position='after').

NameRequiredDescriptionDefault
kindNoparagraph
pathYes
textNo
levelNo
doc_hashNo
positionYes
anchor_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must fully disclose behavioral traits. The name 'propose_' and the opening word 'Stage' hint that this is a proposal, not a direct mutation, but the description never clarifies what staging means (e.g., that changes are not applied until apply_changes is called, or that it is non-destructive). It also does not mention permissions, reversibility, or concurrency checks (despite having a doc_hash param). The behavioral information is thin and leaves critical operational details implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact — three sentences — and front-loads the core action in the first sentence. The parameter breakdown is efficient and read naturally. It avoids redundancy and focuses on essential distinctions. Minor redundancy exists in repeating 'position' and 'kind' definitions, but overall it is well-structured and to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a 'propose' operation within a change-management workflow, as evidenced by siblings like apply_changes, discard_changes, and get_changes. The description does not explain how this proposed insertion integrates with that workflow (e.g., what the return value is, how to confirm it, or whether it conflicts with an existing proposal). An output schema exists but is not referenced, and the description does not mention the doc_hash's role in optimistic concurrency. Critical workflow context is missing for safe and correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain all parameters. It explicitly documents the 'position' and 'kind' values, and indirectly explains the anchor_id via positioning. However, it does not explain 'path', 'text', 'level', or 'doc_hash' — even though 'level' is noted as being set for headings, the description does not state that level applies to 'heading' kind or that text is the content. The coverage is incomplete for a tool with 7 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Stage inserting') and resource ('new block') with clear positioning relative to an anchor element. It explicitly enumerates the supported block kinds and positions ('before'/'after'), and distinguishes itself from sibling tools that replace or delete content by the verb 'insert'. The scope is unambiguous and differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: it covers insert-before, insert-after, and append (via anchoring on the last element with position='after'). It directly tells the agent how to achieve append without a dedicated append tool. However, it does not explicitly state when not to use this tool or mention alternatives, though the sibling set makes that inference straightforward. The guidance is practical and adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_replace_textA

Stage replacing character range [start:end) inside one block.

Offsets come from find_text or read_document. The staged change includes before/after previews; nothing is written until apply_changes. Table cells are not supported (delete/re-insert the table instead).

NameRequiredDescriptionDefault
endYes
pathYes
textYes
startYes
doc_hashNo
element_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full behavioral burden. It discloses that nothing is written until 'apply_changes,' reveals the staging behavior ('staged change includes before/after previews'), and states a clear limitation (table cells not supported). This is sufficient for a non-destructive staging operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences with no fluff. The core purpose is front-loaded, followed by essential offset provenance and a critical limitation. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential operational details: staging behavior, previews, offset source, and unsupported case. Since an output schema exists, return format need not be described. The only gap is the unexplained role of 'path' and 'doc_hash,' but overall it is sufficiently complete for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It clarifies start/end as offsets and text as replacement content, and implies element_id is the block. However, it does not explain 'path' or 'doc_hash,' which remain semantically ambiguous. The added value is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Stage replacing character range [start:end) inside one block.' It identifies the specific verb (stage replace), the resource (one block), and the exact range semantics. It naturally distinguishes from siblings like propose_insert_block and propose_delete_block by specifying 'replacing'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete usage context: offsets derive from 'find_text or read_document,' and it explicitly notes that table cells are unsupported with a suggested alternative ('delete/re-insert the table'). However, it does not explicitly compare against insertion or deletion siblings, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_documentA

Read a Markdown or DOCX document as structured blocks.

Returns headings, paragraphs, list items and tables with stable IDs (h-0, p-1, li-2, tbl-0). Prefer section_id= over reading whole documents. Pass doc_hash from a previous call to detect external modifications. Lists unmodeled_features so you know what the model cannot represent (images, footnotes, ...).

NameRequiredDescriptionDefault
pathYes
doc_hashNo
section_idNo
include_spansNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses the output format (headings, paragraphs, list items, tables with stable IDs), the behavior of listing unmodeled_features, and the use of doc_hash for change detection. It implies read-only but does not explicitly state it; however, the presence of these details demonstrates transparency beyond a simple read action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero waste. The main purpose is stated first, followed by actionable tips. Every sentence adds value, and the structure is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The presence of an output schema shifts the burden of return-value documentation to schema, which is appropriate. The description adds key context: usage guidance for parameters, the nature of returned blocks, and the list of unmodeled features. Minor gaps remain (e.g., include_spans semantics, error behavior), but overall it is sufficient for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It explains section_id and doc_hash meaningfully, but path and include_spans are left to their names. This partial coverage is a moderate contribution, but not complete for all parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read'), resource ('Markdown or DOCX document'), and output ('structured blocks'). It differentiates the tool's purpose from siblings by emphasizing structured representation and stable IDs, which is distinct from outline-only or search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is given for using section_id ('Prefer section_id over reading whole documents') and doc_hash ('Pass doc_hash from a previous call to detect external modifications'). While it does not explicitly compare with siblings, the usage tips provide clear context for how to invoke the tool effectively.

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.

  1. 13 tool updatesv0.1.0
    • First observedapply_changes
    • First observeddiscard_changes
    • First observedexport_document
    • First observedfind_text
    • First observedget_changes
    • First observedget_comments
    • First observedget_outline
    • First observedlist_backends
    • First observedpropose_add_comment
    • First observedpropose_delete_block
    • First observedpropose_insert_block
    • First observedpropose_replace_text
    • First observedread_document

TDQS

A3.9/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a distinct operation: reading (read_document), outlining (get_outline), searching (find_text), comments (get_comments/propose_add_comment), editing via staging (propose_replace_text/insert/delete), change management (get/discard/apply_changes), and export/list backends. No two tools overlap in purpose, and the propose_* set is clearly separated from apply_changes.

Naming Consistency5/5

All 13 tools follow a consistent snake_case verb_noun pattern (e.g., read_document, propose_insert_block, discard_changes). Verbs are descriptive and uniformly applied, making the naming predictable and easy to infer.

Tool Count5/5

13 tools is well-scoped for a document editing server. Each tool covers a distinct lifecycle stage—read, inspect, search, comment, edit (staging), apply, export—without redundancy or excessive granularity.

Completeness4/5

The surface covers the core document workflow: reading, outlining, text search, editing (replace/insert/delete), comment creation, change staging/commit, and export. Minor gaps include no comment deletion/editing and no document creation, but these are outside the stated purpose of working with existing documents.

Maintenance

ActivityStale
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables collaborative document authoring and composition with project-based organization, transforming Markdown and LaTeX content into professional PDFs with conflict-free multi-agent editing capabilities.
    6
    20
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to read, edit, and create Microsoft Word documents (.docx) with support for rich text, tables, and images, deployable locally or via SSE.
    3
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables safe, human-in-the-loop AI document collaboration by letting agents create isolated workspaces, edit tracked files, open reviewable Change Requests, and get human approval before merging, with Git-backed conflict detection and resolution.
    35
    MIT