DOCX MCP Server
Enables comprehensive DOCX/OOXML document manipulation via MCP, covering text, tables, images, content controls, comments, tracked changes, and metadata.
README
DOCX MCP Server
Universal DOCX processing server implementing the Model Context Protocol (MCP) with full OOXML support.
Features
- Full OOXML Support: Read/write all DOCX document parts (document.xml, styles, numbering, headers/footers, etc.)
- Text Operations: Extract, find, and replace text with literal or regex modes
- Table Editing: Insert/delete rows and columns, merge cells, set cell content
- Structured Data Tags (SDT): Get/set content controls by tag or alias
- Images: List images, insert inline or anchored images with position/size control
- Comments & Changes: List comments, add/delete comments, accept all tracked changes
- Document Properties: Read/write metadata (title, author, subject, etc.)
- LRU Caching: Memory-efficient caching of document parts
- Stdio Transport: MCP communication via stdin/stdout
Installation
npm install
npm run build
Running
Development
npm run dev
Production
npm start
With Claude Code
claude mcp add --scope user --transport stdio docx -- node /path/to/dist/index.js
Tools
Document Management
docx.open
Open a DOCX document from file or base64
{
"docId": "uuid",
"parts": ["word/document.xml", "word/styles.xml", ...],
"partCount": 42,
"props": { "core": {...}, "app": {...} }
}
docx.close
Close and unload a document
docx.save
Save document to file or return as base64
Part Management
docx.list_parts
List all parts in the document
docx.part_read
Read raw XML of a specific part
docx.part_write
Write/update XML content of a part
Text Operations
docx.get_text
Extract all text from document
{
"docId": "uuid",
"scope": "document" | "headers" | "footers" | "all"
}
docx.find
Search for text with context
{
"docId": "uuid",
"query": "search term",
"mode": "literal" | "regex"
}
docx.replace_text
Replace text in document
{
"docId": "uuid",
"match": "old text",
"replace": "new text",
"mode": "literal" | "regex"
}
Tables
docx.tables_list
List all tables with dimensions
{
"tables": [
{
"xpath": "/w:document/w:body/w:tbl[1]",
"rows": 3,
"colsApprox": 4
}
]
}
docx.table_edit
Modify table structure and content
{
"docId": "uuid",
"tableXPath": "/w:document/w:body/w:tbl[1]",
"op": {
"kind": "setCellText",
"row": 0,
"col": 1,
"text": "new value"
}
}
Operations:
setCellText(row, col, text)- Set cell contentinsertRow(at)- Insert row at positiondeleteRow(at)- Delete rowinsertCol(at)- Insert columndeleteCol(at)- Delete column
Structured Data (SDT)
docx.sdt_get
Get content control content by tag or alias
docx.sdt_put
Update content control
Images
docx.images_list
List all images with metadata
docx.image_add
Insert image inline or anchored
Styles & Numbering
docx.styles_get / docx.styles_set
Read/write styles.xml
docx.numbering_get / docx.numbering_set
Read/write numbering.xml
Headers/Footers
docx.headers_footers_list
List all header/footer parts
Comments
docx.comments_list
List all comments
docx.comments_add
Add new comment
docx.changes_accept_all
Accept all tracked changes in document
Metadata
docx.metadata_get
Get document properties (title, author, created, modified, etc.)
Test Scenarios
1. Basic Read/Write
# Open document
docx.open: { "path": "/path/to/document.docx" }
# Get text
docx.get_text: { "docId": "returned-id" }
# Replace text
docx.replace_text: {
"docId": "returned-id",
"match": "old text",
"replace": "new text"
}
# Save
docx.save: { "docId": "returned-id", "returnBase64": true }
2. Table Manipulation
# List tables
docx.tables_list: { "docId": "id" }
# Edit cell
docx.table_edit: {
"docId": "id",
"tableXPath": "/w:document/w:body/w:tbl[1]",
"op": { "kind": "setCellText", "row": 0, "col": 0, "text": "Hello" }
}
3. Images
# List images
docx.images_list: { "docId": "id" }
4. Track Changes
# Accept all changes
docx.changes_accept_all: { "docId": "id" }
Architecture
src/
index.ts # Entry point
errors.ts # Error definitions
logger.ts # Logging utilities
ooxml/
namespaces.ts # XML namespace definitions
emu.ts # EMU conversion utilities
dom.ts # XML DOM utilities (xmldom + fontoxpath)
xmlParser.ts # fast-xml-parser wrapper
parts.ts # DOCX ZIP part management
rels.ts # Relationships management
text.ts # Text extraction & replacement
tables.ts # Table operations
sdt.ts # Structured Data Tags
drawings.ts # Images & DrawingML
headersFooters.ts # Headers/Footers
styles.ts # Style operations
numbering.ts # Numbering operations
changes.ts # Track changes
comments.ts # Comments
store/
types.ts # Type definitions
docStore.ts # Document store + LRU cache
mcp/
schemas.ts # Tool input schemas
tools.ts # Tool implementations
server.ts # MCP server setup
Dependencies
@modelcontextprotocol/sdk- MCP implementationjszip- ZIP archive handlingfast-xml-parser- Lossless XML parsing@xmldom/xmldom- DOM implementationfontoxpath- XPath queriesdiff-match-patch- Text diffinglru-cache- Memory-efficient cachinguuid- Document ID generation
Performance Notes
- Documents up to 10 MB supported
- LRU cache with 100-part limit and 1 GB memory cap
- Parts loaded on-demand, not fully into memory
- Dirty-part optimization: only modified parts saved to ZIP
- No deep copying of XML structures
Limitations
- Headers/footers: basic support (complex section structures may need manual adjustment)
- Comments: basic list/add/delete (reply chains not fully supported)
- Track changes: accept-all available; detailed change inspection limited
- Styles: get/set full XML; no selective style merging
- EMU/sizing: calculated but rendered geometry depends on Word's layout engine
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。