docx_mcp_server_ts
DOCX MCP 服务器
一个基于 TypeScript 的全面 MCP(模型上下文协议)服务器,用于通用 DOCX 处理,支持完整的 OOXML。以编程方式处理 Word 文档,支持文本、表格、图片、页眉/页脚、SDT、批注等。
功能特性
完整 OOXML 访问:在 ZIP 级别读写 DOCX 部件,支持完整命名空间
文本操作:提取、查找和替换文本,最小化差异保留
表格管理:插入/删除行、修改单元格、合并/拆分操作
图片处理:添加内联/浮动图片,支持基于 EMU 的尺寸设置
结构化数据标签(SDT):按标签或别名访问内容控件
页眉/页脚:列出和修改节页眉和页脚
修订跟踪:接受/拒绝修订,处理插入/删除
批注:管理文档批注
元数据:读写核心和应用属性
LRU 缓存:通过部件缓存实现高效内存管理
无损 XML:通过 fast-xml-parser 保留文档结构
Related MCP server: mcp-office-parser
安装
npm install
npm run build快速开始
启动服务器
npm start服务器将在 stdin/stdout 上监听 MCP 协议消息。
安装与配置
Claude Code CLI
claude mcp install docx \
--command node \
--args /full/path/to/docx_mcp_server_ts/dist/index.js \
--env LOG_LEVEL=INFO~/.claude.json(用于 Claude Code)
编辑 ~/.claude.json,在 "projects" 部分中添加:
{
"projects": {
"/full/path/to/docx_mcp_server_ts": {
"mcpServers": {
"docx": {
"command": "node",
"args": ["/full/path/to/docx_mcp_server_ts/dist/index.js"],
"env": {
"LOG_LEVEL": "INFO"
}
}
}
}
}
}Linux/WSL 示例:
{
"projects": {
"/mnt/c/Users/pavelk/Desktop/Projects/MCP-servers/docx_mcp_server_ts": {
"mcpServers": {
"docx": {
"command": "node",
"args": ["/mnt/c/Users/pavelk/Desktop/Projects/MCP-servers/docx_mcp_server_ts/dist/index.js"],
"env": {
"LOG_LEVEL": "INFO"
}
}
}
}
}
}MCP 工具
文档管理
docx.open
从文件或 base64 缓冲区打开 DOCX 文档。
输入:
{
"path": "/path/to/document.docx",
"bufferBase64": "..." // OR provide base64 data
}输出:
{
"docId": "uuid-string",
"parts": ["word/document.xml", ...],
"props": { "core": {}, "app": {} }
}docx.close
关闭文档并释放资源。
输入: { "docId": "uuid" }
docx.save
将文档保存到文件或返回为 base64。
输入:
{
"docId": "uuid",
"path": "/output/path.docx", // optional
"returnBase64": true // optional
}docx.list_parts
列出文档中的所有部件。
docx.part_read / docx.part_write
读写单个 XML 部件,用于底层访问。
文本操作
docx.get_text
提取文档中的所有文本。
输入: { "docId": "uuid", "scope": "document|headers|footers|all" }
docx.replace_text
替换文本,保留运行结构。
输入:
{
"docId": "uuid",
"match": "search text",
"replace": "replacement",
"mode": "literal|regex",
"where": "document|headers|footers|all"
}输出: { "replaced": 5 }
docx.find
查找文本并返回上下文。
输出:
{
"hits": [
{
"text": "found text",
"context": "...found text...",
"offset": 150
}
]
}表格操作
docx.tables_list
列出所有表格及其尺寸。
输出:
{
"tables": [
{
"tableXPath": "//w:tbl[1]",
"rows": 5,
"colsApprox": 3
}
]
}docx.table_edit
执行表格操作。
输入:
{
"docId": "uuid",
"tableXPath": "//w:tbl[1]",
"op": {
"kind": "setCellText",
"row": 0,
"col": 0,
"text": "new value"
}
}支持的操作:
{ "kind": "setCellText", "row": number, "col": number, "text": string }{ "kind": "insertRow", "at": number }{ "kind": "deleteRow", "at": number }{ "kind": "insertCol", "at": number }{ "kind": "deleteCol", "at": number }
结构化数据标签(SDT)
docx.sdt_get
获取内容控件内容。
输入: { "docId": "uuid", "tagOrAlias": "control_tag" }
输出:
{
"xml": "<w:p>...</w:p>",
"textPreview": "Control content..."
}docx.sdt_put
更新内容控件。
输入:
{
"docId": "uuid",
"tagOrAlias": "control_tag",
"xmlFragment": "<w:p>...</w:p>"
}图片操作
docx.images_list
列出所有图片及其元数据。
输出:
{
"images": [
{
"rId": "rId4",
"path": "word/media/image1.png",
"sizeEMU": { "cx": 914400, "cy": 914400 }
}
]
}docx.image_add
插入内联或锚定图片。
输入:
{
"docId": "uuid",
"target": {
"afterParagraphXPath": "//w:p[1]",
"sdtTagOrAlias": "imageControl" // OR use SDT
},
"image": {
"path": "/local/image.png",
"base64": "...", // OR base64 data
"filename": "image.png",
"contentType": "image/png"
},
"placement": {
"kind": "inline" // OR { "kind": "anchor", "xEMU": 0, "yEMU": 0 }
},
"size": {
"widthMM": 50,
"heightMM": 50
},
"altText": "Description"
}docx.image_update_position
更新锚定图片的位置/尺寸。
高级操作
docx.styles_get / docx.styles_set
读写 styles.xml
docx.numbering_get / docx.numbering_set
读写 numbering.xml
docx.headers_footers_list
列出页眉和页脚及节信息。
docx.headers_footers_get / docx.headers_footers_set
读写特定页眉或页脚。
docx.comments_list / docx.comments_add / docx.comments_delete
管理文档批注。
docx.changes_accept_all
接受所有修订(删除 w:del,展开 w:ins)。
输出: { "removedDel": 3, "flattenedIns": 5 }
docx.metadata_get / docx.metadata_set
读写文档属性(core.xml、app.xml)。
尺寸换算
服务器内部处理 EMU(英制公制单位)换算:
1 英寸 = 914,400 EMU
1 毫米 ≈ 36,000 EMU
1 磅 ≈ 12,700 EMU
示例
提取和替换文本
// Open document
const openResult = await client.call('docx.open', {
path: '/tmp/document.docx'
});
const docId = openResult.docId;
// Get text
const textResult = await client.call('docx.get_text', { docId });
console.log(textResult.text);
// Replace text
await client.call('docx.replace_text', {
docId,
match: 'old text',
replace: 'new text',
mode: 'literal'
});
// Save
await client.call('docx.save', {
docId,
path: '/tmp/document-modified.docx'
});
// Close
await client.call('docx.close', { docId });修改表格
// List tables
const tablesResult = await client.call('docx.tables_list', { docId });
const tableXPath = tablesResult.tables[0].tableXPath;
// Update cell
await client.call('docx.table_edit', {
docId,
tableXPath,
op: {
kind: 'setCellText',
row: 0,
col: 0,
text: 'Updated Value'
}
});
// Insert row
await client.call('docx.table_edit', {
docId,
tableXPath,
op: {
kind: 'insertRow',
at: 1
}
});添加图片
const fs = require('fs').promises;
const imageBuffer = await fs.readFile('/path/to/image.png');
const base64 = imageBuffer.toString('base64');
await client.call('docx.image_add', {
docId,
target: {
afterParagraphXPath: '//w:p[1]'
},
image: {
base64,
filename: 'image.png',
contentType: 'image/png'
},
placement: {
kind: 'inline'
},
size: {
widthMM: 100,
heightMM: 75
},
altText: 'My image'
});架构
src/
├── index.ts # MCP server entry point
├── logger.ts # Logging utility
├── errors.ts # Error types and codes
├── ooxml/
│ ├── namespaces.ts # OOXML constants and namespaces
│ ├── emu.ts # Unit conversion utilities
│ ├── dom.ts # XML DOM utilities (xmldom + fontoxpath)
│ ├── xmlParser.ts # FXP parser with order preservation
│ ├── parts.ts # ZIP part reading/writing
│ ├── rels.ts # Relationship management
│ ├── text.ts # Text operations with diff-match-patch
│ ├── tables.ts # Table manipulation
│ ├── sdt.ts # Structured Data Tags
│ ├── drawings.ts # Image handling
│ ├── headersFooters.ts # Header/footer operations
│ ├── comments.ts # Comment management
│ ├── changes.ts # Track changes handling
│ ├── styles.ts # Styles XML access
│ └── numbering.ts # Numbering XML access
├── store/
│ ├── types.ts # Store type definitions
│ └── docStore.ts # Document store with LRU cache
└── mcp/
└── tools.ts # MCP tool implementations性能
内存:LRU 缓存将每个文档的部件限制为 50 个缓存项
总大小:支持内存中最大 100MB 的文档
部分访问:仅从 ZIP 中解析请求的部件
最小差异:文本替换在可能时保留运行结构
限制
不执行页面布局计算(需要 Word 的渲染引擎)
高级 DrawingML 变换为只读
不支持 VBA 宏和嵌入的 OLE 对象
超大文档(>500MB)可能需要流式处理
开发
# Install dependencies
npm install
# Type check
npm run type-check
# Build
npm run build
# Run dev server
npm run dev
# Debug with inspector
npm run dev:debug日志
通过环境变量控制日志级别:
LOG_LEVEL=DEBUG npm start # Verbose
LOG_LEVEL=INFO npm start # Default
LOG_LEVEL=WARN npm start # Warnings only
LOG_LEVEL=ERROR npm start # Errors only协议支持
传输:stdio
协议:MCP(模型上下文协议)
处理器:@modelcontextprotocol/sdk
许可证
MIT
资源
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityAmaintenanceAn MCP server for reading, editing, and validating Microsoft Word documents with specialized support for track changes, comments, and footnotes. It enables structural auditing, heading extraction, and precise OOXML-level document manipulation through natural language tools.10042MIT
- AlicenseDqualityDmaintenanceEnables reading, writing, editing, and converting Office documents (ODT, DOCX, ODS, XLSX, PDF, etc.) using MCP tools, with no external dependencies.1131MIT
- AlicenseCqualityDmaintenanceA unified MCP server for document processing that enables creating, editing, and converting Word documents (DOCX), PDFs, Markdown, and images, with support for templates, formatting, and batch operations.100MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to generate, edit, validate, and render Word documents programmatically via MCP, ensuring correct OOXML structure and style.3MIT
Related MCP Connectors
Use your own Word templates to convert Markdown → DOCX/PDF/HTML from any MCP-compatible AI.
Google Docs MCP Pack — read, create, and edit Google Docs via OAuth.
Normalize and convert more than 400 file types via TweekIT's hosted MCP streamable HTTP endpoint.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/Mavline/docx_mcp_server_ts'
If you have feedback or need assistance with the MCP directory API, please join our Discord server