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
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.