Skip to main content
Glama

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 sync

Usage 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 file

  • include_text (default: true): Include full document text

  • include_comments (default: true): Include comments with anchors

  • include_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 file

  • anchor_text (required): Text to anchor the comment to (must exist and be unique)

  • comment_text (required): The comment content

  • author (default: "Claude"): Comment author name

  • output_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 file

  • parent_comment_id (required): ID of comment to reply to

  • reply_text (required): The reply content

  • author (default: "Claude"): Reply author name

  • output_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 file

  • find_text (required): Text to find and modify

  • replace_with (required): Replacement text (empty string for deletion)

  • author (default: "Claude"): Change author name

  • output_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 file

  • comment_id (required): ID of comment to resolve

  • output_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 file

  • change_id (required): ID of the track change to accept

  • output_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 file

  • change_id (required): ID of the track change to reject

  • output_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 -v

Architecture

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 utilities

License

MIT

Available Tools

9 tools
accept_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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
change_idYes
output_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

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: '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.

Usage Guidelines2/5

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"}

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
authorNoClaude
anchor_textYes
output_pathNo
comment_textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
authorNoClaude
reply_textYes
output_pathNo
parent_comment_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
authorNoClaude
find_textYes
output_pathNo
replace_withYes

Output Schema

ParametersJSON 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?

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
end_indexYes
start_indexYes
include_annotationsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
comment_idYes
output_pathNo

Output Schema

ParametersJSON 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?

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
include_textNo
include_commentsNo
include_track_changesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
change_idYes
output_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
queryYes
max_resultsNo
case_sensitiveNo
context_paragraphsNo
include_annotationsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 9 tool updatesv0.1.0
    • First observedaccept_change
    • First observedcreate_comment
    • First observedcreate_reply
    • First observedcreate_track_change
    • First observedget_paragraph_range
    • First observedmark_comment_resolved
    • First observedread_document
    • First observedreject_change
    • First observedsearch_document

TDQS

A4.3/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct operation: comment creation, reply, resolution, track changes, acceptance/rejection, and document reading/search. No overlap in purpose.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_comment, accept_change, search_document), making the set predictable.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers