revisedoc
Edit .docx files the way Word intended — with full change tracking, inline
comments, and revision history. No more sending around unmarked copies or
losing track of what changed. Use it from the command line, from your Python
code, or hook it up as an MCP server so your AI coding agent can edit documents
with the same care a human reviewer would.
Features
- Tracked-changes replace — Replace text using Word-compatible
<w:del>/<w:ins>markup - Inline comments — Anchor comments to any text range
- Revision inspection — List all tracked changes with id, author, date, type, text
- Revision restoration — Undo a specific tracked change
- MCP server — Expose all operations as structured tools for AI agents (opencode, Claude Code, etc.)
Use Cases
-
Contract redlining — Replace outdated terms in a
.docxcontract with tracked changes so the other side sees exactly what was modified. -
Document review workflows — Annotate drafts with inline comments, then list and restore revisions to review changes systematically.
-
AI-assisted editing — Connect the MCP server to opencode or Claude Code and have your agent propose edits with full change tracking — no more "just trust me, I made some changes."
-
Batch processing — Script document updates across hundreds of files using the Python API, with every change recorded in Word's revision log.
Installation
pip install revisedoc # with pip
pipx install revisedoc # with pipx (isolated)
For AI agent integration (opencode, Claude Code):
pip install "revisedoc[mcp]" # pip — quotes required in zsh
pipx install "revisedoc[mcp]" # pipx — quotes required in zsh
[mcp]is an optional extra — it installs the samerevisedocpackage plus themcpSDK dependency. Without it, the CLI and Python API work fine; only therevisedoc-mcpserver is unavailable.Note for zsh users: the square brackets must be quoted. Use
pip install "revisedoc[mcp]"notpip install revisedoc[mcp].
CLI Usage
# Replace text with tracked changes
revisedoc replace input.docx output.docx "old text" "new text" --author "Me"
# Add a comment
revisedoc comment input.docx output.docx "target text" "my comment" --author "Reviewer"
# List tracked changes
revisedoc list-revisions input.docx
revisedoc list-revisions input.docx --format json
# Undo a revision (restore deleted text)
revisedoc restore input.docx output.docx --revision-id 3
# Undo an insertion instead
revisedoc restore input.docx output.docx --revision-id 3 --restore-type insertion
# Print document plain text
revisedoc get-text input.docx
Python API
from docx import Document
from revisedoc import replace_text, add_comment, list_revisions, restore_revision, get_full_text, finalize_comments
doc = Document("input.docx")
replace_text(doc, "old phrase", "new phrase", author="MyBot")
add_comment(doc, "some specific text", "Review this part", author="Reviewer")
pending = doc.part._pending_comments
doc.save("output.docx")
finalize_comments("output.docx", pending_comments=pending)
MCP Server — AI Agent Integration
Start the MCP server:
revisedoc-mcp
opencode
Add to opencode.json:
{
"mcp": {
"revisedoc": {
"type": "local",
"command": ["revisedoc-mcp"],
"enabled": true
}
}
}
Claude Code
Add to .claude/settings.json:
{
"mcpServers": {
"revisedoc": {
"command": "revisedoc-mcp"
}
}
}
Available Tools
| Tool | Description |
|---|---|
docx_replace |
Replace text with tracked changes |
docx_comment |
Add a comment anchored to text |
docx_list_revisions |
List all tracked changes |
docx_restore |
Undo a revision by ID |
docx_get_text |
Print document plain text |
Development
pip install -e ".[mcp,test]"
pytest tests/ -v
Architecture
The package structure:
src/revisedoc/
├── __init__.py # Public API exports
├── editor.py # Core editing operations
├── cli.py # Command-line interface
└── mcp.py # MCP server for AI agents
Metadata
Release files for revisedoc 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| revisedoc-0.1.2.tar.gz | 15.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| revisedoc-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 27.3 kB
Release files / revisedoc-0.1.2.tar.gz
| Download URL | revisedoc-0.1.2.tar.gz |
|---|---|
| Size | 15.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
886690f673ea8713c8613a9a323cb47455c262f50470ffab9d740a6ffa6ed459
|
|
BLAKE2b-256 checksum How to use checksums |
a7a24335d222fb0b2a9fd5340936994b3b074595c3a2954901c4d685dce0cef8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.4
|
Release files / revisedoc-0.1.2-py3-none-any.whl
| Download URL | revisedoc-0.1.2-py3-none-any.whl |
|---|---|
| Size | 11.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
756b361e0627639bfac3fb0cfa31a748c9db752c1e6cee00372a2c6b81688e7a
|
|
BLAKE2b-256 checksum How to use checksums |
e1918ff877d3d9cfad58e12b670ecb9a9910ec6d856710b831cad55ebe4e595d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.4
|