docx-comments
Click on "Install 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: DOCX-MCP
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kosh-jelly/docx-comments-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server