DOCX MCP Server

DOCX MCP Server

Enables comprehensive DOCX/OOXML document manipulation via MCP, covering text, tables, images, content controls, comments, tracked changes, and metadata.

Category
Visit Server

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 content
  • insertRow(at) - Insert row at position
  • deleteRow(at) - Delete row
  • insertCol(at) - Insert column
  • deleteCol(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 implementation
  • jszip - ZIP archive handling
  • fast-xml-parser - Lossless XML parsing
  • @xmldom/xmldom - DOM implementation
  • fontoxpath - XPath queries
  • diff-match-patch - Text diffing
  • lru-cache - Memory-efficient caching
  • uuid - 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

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured