docx-comments
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@docx-commentsRead research.docx and show me all comments and track changes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
docx-comments-mcp
An MCP server for Claude Desktop that provides comprehensive read/write access to Word documents, including comments, track changes, and reply threads — features that python-docx doesn't fully expose.
Features
Read documents: Extract text, comments (with reply threads), and track changes
Add comments: Anchor comments to specific text in the document
Reply to comments: Create threaded replies on existing comments
Track changes: Make edits with insertions and deletions tracked
Resolve comments: Mark comments as done
Accept/reject changes: Apply or undo tracked changes
Related MCP server: Word Document Reader MCP Server
Installation
# Clone the repository
git clone https://github.com/your-username/docx-comments-mcp.git
cd docx-comments-mcp
# Install with uv
uv syncUsage with Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"docx-comments": {
"command": "uv",
"args": ["--directory", "/path/to/docx-comments-mcp", "run", "docx-comments-mcp"]
}
}
}Available Tools
read_document
Read a Word document and extract content, comments, and track changes.
Parameters:
path(required): Path to the .docx fileinclude_text(default: true): Include full document textinclude_comments(default: true): Include comments with anchorsinclude_track_changes(default: true): Include insertions/deletions
Returns:
{
"metadata": {
"path": "/path/to/file.docx",
"author": "Original Author",
"created": "2025-01-15T10:30:00Z",
"modified": "2025-01-18T14:22:00Z",
"word_count": 4523
},
"paragraphs": [
{"index": 0, "text": "The paragraph content...", "style": "Heading 1"}
],
"comments": [
{
"id": 0,
"author": "Dr. Smith",
"date": "2025-01-16T09:15:00Z",
"text": "Consider citing Main & Hesse here",
"anchor_text": "disorganized attachment patterns",
"anchor_paragraph": 12,
"resolved": false,
"replies": [
{
"id": 1,
"parent_id": 0,
"author": "Josh",
"date": "2025-01-17T11:00:00Z",
"text": "Added citation — see revision"
}
]
}
],
"track_changes": [
{
"id": 5,
"type": "deletion",
"author": "Dr. Smith",
"date": "2025-01-16T09:20:00Z",
"text": "invariably",
"paragraph": 8
}
]
}create_comment
Add a comment anchored to specific text in a Word document.
Parameters:
path(required): Path to the .docx fileanchor_text(required): Text to anchor the comment to (must exist and be unique)comment_text(required): The comment contentauthor(default: "Claude"): Comment author nameoutput_path(optional): Save to new file; if omitted, creates timestamped backup and overwrites
Returns:
{
"success": true,
"comment_id": 3,
"anchored_to": "the exact text that was matched",
"paragraph": 15,
"output_path": "/path/to/output.docx"
}create_reply
Add a reply to an existing comment.
Parameters:
path(required): Path to the .docx fileparent_comment_id(required): ID of comment to reply toreply_text(required): The reply contentauthor(default: "Claude"): Reply author nameoutput_path(optional): Save to new file; if omitted, creates backup
create_track_change
Make an edit with track changes enabled (insertion, deletion, or replacement).
Parameters:
path(required): Path to the .docx filefind_text(required): Text to find and modifyreplace_with(required): Replacement text (empty string for deletion)author(default: "Claude"): Change author nameoutput_path(optional): Save to new file; if omitted, creates backup
mark_comment_resolved
Mark a comment as resolved/done.
Parameters:
path(required): Path to the .docx filecomment_id(required): ID of comment to resolveoutput_path(optional): Save to new file; if omitted, creates backup
accept_change
Accept a tracked change (apply permanently).
Parameters:
path(required): Path to the .docx filechange_id(required): ID of the track change to acceptoutput_path(optional): Save to new file; if omitted, creates backup
reject_change
Reject a tracked change (undo the change).
Parameters:
path(required): Path to the .docx filechange_id(required): ID of the track change to rejectoutput_path(optional): Save to new file; if omitted, creates backup
Safety Features
Automatic backups: When modifying a file without specifying
output_path, a timestamped backup is created (e.g.,document.backup_20250119_143022.docx)Atomic writes: Uses temporary files and atomic moves to prevent corruption
Unique anchor matching: Comments require unique anchor text to prevent ambiguity
Development
# Install dev dependencies
uv sync
uv pip install pytest pytest-asyncio
# Run tests
uv run pytest -v
# Run specific test file
uv run pytest tests/test_reader.py -vArchitecture
src/docx_comments_mcp/
├── __init__.py
├── server.py # MCP server with tool definitions
├── reader.py # Read operations (document, comments, track changes)
├── writer.py # Write operations (add comments, track changes)
└── xml_helpers.py # Low-level OOXML parsing utilitiesLicense
MIT
Available Tools
9 toolsaccept_changeA
Accept a tracked change (apply the change permanently).
For insertions: The inserted text becomes part of the document. For deletions: The deleted text is permanently removed.
Args: path: Path to the .docx file change_id: ID of the track change to accept output_path: Save to new file; if omitted, creates timestamped backup and overwrites original
Returns: Dictionary containing: - success: True if successful - change_id: ID of the accepted change - change_type: "insertion" or "deletion" - output_path: Path where the file was saved
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| change_id | Yes | ||
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses permanent modification, backup behavior, and return values. It explains behavior for insertions and deletions clearly.
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?
Well-structured with purpose, effect details, args, and returns. Concise but could be slightly tighter; the args section uses a code block that is clear.
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?
Fully covers the tool's operation, including return dictionary structure. Given output schema is described, it is complete and clear.
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 0%, but the description adds meaningful details for all three parameters: path, change_id, and output_path behavior. Compensates well for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Accept a tracked change (apply the change permanently).' It distinguishes from siblings like reject_change and create_track_change with specific verb+resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs reject_change or other alternatives. Usage context is only implied through the description of effects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_commentA
Add a comment anchored to specific text in a Word document.
Args: path: Path to the .docx file anchor_text: Text to anchor the comment to (must exist and be unique in document) comment_text: The comment content author: Comment author name (default: "Claude") output_path: Save to new file; if omitted, creates timestamped backup and overwrites original
Returns: Dictionary containing: - success: True if successful - comment_id: ID of the created comment - anchored_to: The text the comment is anchored to - paragraph: Index of the paragraph containing the anchor - output_path: Path where the file was saved
Errors: - If anchor text is not found: {"success": false, "error": "Anchor text not found in document"} - If anchor text appears multiple times: {"success": false, "error": "Anchor text appears N times; provide more context for unique match"}
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| author | No | Claude | |
| anchor_text | Yes | ||
| output_path | No | ||
| comment_text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully explains behavioral traits: it modifies the document, creates a timestamped backup if output_path is omitted, overrides original, and gives default author. Error handling is detailed. No contradictions.
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 well-structured with Args, Returns, and Errors sections. It is moderately long but every sentence serves a purpose. Minor verbosity could be trimmed, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, an output schema, and no annotations, the description covers all necessary aspects: purpose, parameters, return values, error cases, and side effects. It is complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds comprehensive parameter details: path, anchor_text (must exist, unique), comment_text, author (default), output_path (behavior). It also describes return values and errors, adding far more meaning than the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Add a comment anchored to specific text in a Word document.' This specifies the action (Add) and resource (comment on text in Word doc), distinguishing it from sibling tools like create_reply and create_track_change.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides error conditions (anchor text not found or not unique) but does not explicitly guide when to use this tool versus siblings like create_reply. No direct comparison or context for selection is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_replyA
Add a reply to an existing comment in a Word document.
Args: path: Path to the .docx file parent_comment_id: ID of the comment to reply to reply_text: The reply content author: Reply author name (default: "Claude") output_path: Save to new file; if omitted, creates timestamped backup and overwrites original
Returns: Dictionary containing: - success: True if successful - reply_id: ID of the created reply - parent_comment_id: ID of the parent comment - output_path: Path where the file was saved
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| author | No | Claude | |
| reply_text | Yes | ||
| output_path | No | ||
| parent_comment_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure. It reveals key traits: if output_path is omitted, the tool creates a timestamped backup and overwrites the original file, which is critical for understanding the destructive action. It also describes the returned dictionary fields. While permissions or error handling are absent, the backup behavior adds significant value, warranting a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: a one-line purpose sentence, a structured Args list, and a Returns section. Every sentence provides essential information without redundancy. It is front-loaded with the core action and efficiently organized for quick parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, 3 required, modifies a file) and the presence of an output schema, the description covers all necessary aspects: parameter meanings, behavioral nuance (backup on overwrite), and return format. It is complete enough for an agent to use the tool correctly without external context.
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 input schema has 0% description coverage, so the description must explain all parameters fully. The Args section details each parameter's purpose (path, parent_comment_id, reply_text, author with default, output_path with behavior). This completely compensates for the schema's lack of descriptions, earning the maximum score.
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 explicitly states 'Add a reply to an existing comment in a Word document,' which clearly identifies the action (adding a reply) and the resource (existing comment). This distinguishes it from sibling tools like create_comment (which creates a new comment) and accept_change (which handles track changes), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by requiring 'parent_comment_id' (an existing comment), providing clear context for when to use the tool. However, it does not explicitly contrast with alternatives like create_comment or mark_comment_resolved, leaving some inference needed. A score of 4 reflects good but not exhaustive guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_track_changeA
Make an edit with track changes enabled (insertion, deletion, or replacement).
Args: path: Path to the .docx file find_text: Text to find and modify (must exist and be unique) replace_with: Replacement text (use empty string for deletion-only) author: Change author name (default: "Claude") output_path: Save to new file; if omitted, creates timestamped backup and overwrites original
Returns: Dictionary containing: - success: True if successful - change_type: "replacement", "deletion", or "insertion" - original_text: The text that was changed - new_text: The replacement text - paragraph: Index of the paragraph containing the change - output_path: Path where the file was saved
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| author | No | Claude | |
| find_text | Yes | ||
| output_path | No | ||
| replace_with | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It discloses return value structure, backup creation behavior, and the uniqueness requirement. Could add permission or file format constraints.
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?
Well-structured with Args and Returns sections, but slightly verbose in the Returns list. Efficient overall, no 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?
Covers key aspects: behavior, return fields, backup, uniqueness. Lacks error handling and prerequisites (e.g., file existence), but output schema is implied. Adequate given parameters and sibling tools.
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?
Despite 0% schema coverage in description, the text explains all 5 parameters: path, find_text, replace_with, author (with default), and output_path behavior (backup fallback). Adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool makes an edit with track changes enabled (insertion, deletion, or replacement) on a .docx file. It clearly distinguishes from siblings like accept_change or reject_change by focusing on creating changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for tracking edits but does not explicitly state when to use this tool over alternatives. It mentions constraints (find_text must be unique) but lacks contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paragraph_rangeA
Get a specific range of paragraphs from a Word document.
Use after search_document to get more context around matches, or to read a specific section without loading the full document.
Args: path: Path to the .docx file start_index: First paragraph index (0-based, inclusive) end_index: Last paragraph index (0-based, inclusive) include_annotations: Include comments/track changes in range (default: False)
Returns: Dictionary containing: - start_index: Actual start (may be clamped) - end_index: Actual end (may be clamped) - total_paragraphs: Total paragraphs in document - paragraphs: List with index, text, style - comments: Comments in range (if include_annotations=True) - track_changes: Track changes in range (if include_annotations=True)
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| end_index | Yes | ||
| start_index | Yes | ||
| include_annotations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description compensates by detailing return structure, clamping behavior of indices, and conditional inclusion of comments and track changes. It discloses 0-based inclusive indexing and default for include_annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief purpose, usage context, Args, and Returns blocks. It is concise yet informative, though the Returns block is slightly detailed but justified given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, no annotations, and an output schema, the description covers parameters, return values, and usage context adequately. It could elaborate on edge cases like out-of-range indices, but the clamping mention helps. Overall, it's complete enough for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description includes an Args block explaining each parameter: path, start_index (0-based inclusive), end_index (0-based inclusive), and include_annotations (default false). This significantly adds meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a specific range of paragraphs from a Word document.' It distinguishes from sibling tools by advising use after search_document for context or to avoid loading the full document, making the purpose distinct.
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?
Provides explicit usage context: 'Use after search_document to get more context around matches, or to read a specific section without loading the full document.' While it doesn't list alternatives or when-not-to-use, the context is clear and helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_comment_resolvedA
Mark a comment as resolved/done.
Args: path: Path to the .docx file comment_id: ID of the comment to resolve output_path: Save to new file; if omitted, creates timestamped backup and overwrites original
Returns: Dictionary containing: - success: True if successful - comment_id: ID of the resolved comment - output_path: Path where the file was saved
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| comment_id | Yes | ||
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool modifies the file (overwrites or saves to new), creates timestamped backup, and returns success. However, it omits specifics like whether the comment becomes hidden or immutable after resolution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with no wasted words. It uses clear sections (Args, Returns) and front-loads the purpose. Every sentence provides useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters and an output schema, the description covers all inputs and return values. It could mention prerequisites (e.g., comment must exist) or visual effects of resolution, but overall it is adequately complete.
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 0%, so description must add meaning. It explains each parameter: path is path to .docx file, comment_id is ID, and output_path describes save behavior including default backup. This adds significant value beyond schema types.
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 starts with 'Mark a comment as resolved/done', which is a specific verb and resource. It clearly distinguishes from siblings like accept_change and reject_change which are for track changes, not comments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like create_comment or create_reply. The description only states what it does, not when it's appropriate or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_documentA
Read a Word document and extract content, comments, and track changes.
Args: path: Path to the .docx file include_text: Include full document text (default: True) include_comments: Include comments with anchors (default: True) include_track_changes: Include insertions/deletions (default: True)
Returns: Dictionary containing: - metadata: Document metadata (path, author, created, modified, word_count) - paragraphs: List of paragraphs with index, text, and style - comments: List of comments with id, author, date, text, anchor_text, anchor_paragraph, resolved (boolean), and replies - track_changes: List of track changes with id, type (insertion/deletion), author, date, text, paragraph
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| include_text | No | ||
| include_comments | No | ||
| include_track_changes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description explains the return value structure in detail (metadata, paragraphs, comments, track_changes). It covers parameters and defaults. No mention of error handling, but adequate for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections for Args and Returns, front-loaded with purpose. Could be slightly more concise, but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides a detailed return structure (metadata, paragraphs, comments, track_changes). The tool's purpose is fully covered in context of sibling tools.
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 0%, but the description adds full parameter semantics: path required, include_text/comments/track_changes with defaults and what they control. This significantly adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read a Word document and extract content, comments, and track changes', specifying verb and resource. It distinguishes from sibling tools like accept_change and create_comment, which are mutational.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies reading vs. modifying, but does not explicitly state when to use or when not to use alternatives. No exclusions or when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_changeA
Reject a tracked change (undo the change).
For insertions: The inserted text is removed. For deletions: The deleted text is restored.
Args: path: Path to the .docx file change_id: ID of the track change to reject output_path: Save to new file; if omitted, creates timestamped backup and overwrites original
Returns: Dictionary containing: - success: True if successful - change_id: ID of the rejected change - change_type: "insertion" or "deletion" - output_path: Path where the file was saved
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| change_id | Yes | ||
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses that for insertions text is removed, for deletions text is restored, and if output_path is omitted, a timestamped backup is created and original overwritten. It does not mention required permissions or error handling.
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 well-structured with sections for Args and Returns, using bullet points. It is slightly verbose but efficient for the level of detail provided.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (context signal) and sibling tools, the description covers behavioral nuances (insertion vs deletion), output structure, and backup behavior. It is thorough for a mutation tool with no annotations.
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 0%, but the description explains all three parameters (path, change_id, output_path) with details on output_path's default behavior. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool rejects a tracked change and distinguishes between insertions (remove text) and deletions (restore text). It differentiates from the sibling 'accept_change' by specifying undo behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does and its effects, but does not explicitly state when to use reject over accept or provide prerequisites. The contrast with accept_change is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_documentA
Search for text in a Word document.
Use this to find specific content without loading the entire document. Returns matching paragraphs with surrounding context.
Args: path: Path to the .docx file query: Text to search for case_sensitive: Match case exactly (default: False) context_paragraphs: Paragraphs to include before/after each match (default: 1) max_results: Maximum matches to return (default: 20) include_annotations: Include comments/track changes on matched paragraphs (default: False)
Returns: Dictionary containing: - query: The search query - case_sensitive: Whether search was case-sensitive - total_matches: Total matches found - matches_returned: Number returned (may be limited) - matches: List with paragraph_index, paragraph_text, paragraph_style, match_start, match_end, context_before, context_after, and optionally comments and track_changes
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| query | Yes | ||
| max_results | No | ||
| case_sensitive | No | ||
| context_paragraphs | No | ||
| include_annotations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully covers behavioral details: it returns matching paragraphs with surrounding context, limits results via 'max_results', and optionally includes annotations. The return structure is thoroughly described, including fields like 'match_start', 'match_end', and 'context_before'.
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 well-structured with a summary, usage hint, parameter list, and return explanation. It is efficient but slightly verbose; for example, the 'Args' and 'Returns' sections could be condensed without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is self-contained and complete for a search tool. It covers purpose, parameters, behavior, and return format, leaving no ambiguity about what the tool does or how to use it.
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 input schema has 0% description coverage, but the 'Args' section in the description clearly explains each parameter, including defaults and effects. The return value is also detailed, compensating fully for the schema's lack of descriptions.
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 starts with 'Search for text in a Word document,' which clearly states the verb and resource. It distinguishes the tool from siblings like 'read_document' by emphasizing that it finds specific content without loading the entire document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises using the tool to 'find specific content without loading the entire document,' implying it is not for full-document reading. However, it does not explicitly name alternative tools like 'read_document' for when the entire document is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.0- First observed
accept_change - First observed
create_comment - First observed
create_reply - First observed
create_track_change - First observed
get_paragraph_range - First observed
mark_comment_resolved - First observed
read_document - First observed
reject_change - First observed
search_document
TDQS
Scored across 9 tools
Each tool targets a distinct operation: comment creation, reply, resolution, track changes, acceptance/rejection, and document reading/search. No overlap in purpose.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_comment, accept_change, search_document), making the set predictable.
With 9 tools, the count is within the ideal 3-15 range and well-scoped for the server's focus on .docx comments and track changes.
The tool set covers core CRUD for comments and track changes, but lacks a tool to delete comments entirely (only mark resolved) and to list all track changes independently, though read_document includes them.
Maintenance
Related MCP Connectors
Deterministic DOCX/PPTX/XLSX/PDF parser: track changes, comments, headers, footers, merged cells.
Composable APIs for document extraction, image transformation, and document & sheet generation.
Read email/chat conversations, messages, contacts and teams; draft, send and update threads.
Real .docx and .xlsx files from structured data, with automatic Hebrew/Arabic RTL.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides comprehensive document processing, including reading, converting, and manipulating various document formats with advanced text and HTML processing capabilities.1645 npm19MIT
- FlicenseBqualityDmaintenanceEnables reading and analyzing Word documents with advanced features including table extraction, OCR image analysis, full-text search, and intelligent caching for optimized performance on large documents.7-
- AlicenseBqualityDmaintenanceEnables comprehensive management of Microsoft Word documents with 30+ tools for reading, writing, formatting, template merging, image extraction, equation extraction, and style application.241MIT
- AlicenseAqualityAmaintenanceEditing of existing Word (.docx) files with formatting preservation. Supports comments, footnotes, and document comparison.2642Apache 2.0