mcpField
C
che-word-mcp

che-word-mcp

本地服务
github.com/PsychQuant生产力74 周前更新

关于 che-word-mcp

che-word-mcp 是基于 Swift 的 .docx 操作服务,可直接编辑 OOXML,无需安装 Microsoft Word 或外部运行时。它面向需要精细文档控制的工作流,支持修订标记和保留未改动内容的保存。

主要功能

  1. 01直接编辑 OOXML 文档
  2. 02提供 234 个 Word 操作工具
  3. 03插入及格式化修订标记
  4. 04处理表格、样式、分节和内容控件
  5. 05保存时保留未改动的字节
  6. 06支持直接访问和会话模式

适用场景

  1. 01无需 Microsoft Word 编辑文件
  2. 02应用和审阅修订标记
  3. 03修改表格、页眉和文档样式
  4. 04保留 DOCX 包中未改动的部分

MCP 相关

通过 MCP 工具提供 Word 文档操作,包括文档、表格、样式、分节和修订工作流。客户端可选择只读直接访问或基于会话的编辑。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
mcpbCheWordMCP1.17.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

che-word-mcp

A Swift-native MCP (Model Context Protocol) server for Microsoft Word document (.docx) manipulation. This is the first Swift OOXML library that directly manipulates Office Open XML without any third-party Word dependencies.

中文說明

文件格式 profile(原始碼建置功能,尚未發布)

create_document、open_document、execute_script 新增可選 profile: "inherit" | "official"。此功能需要以 SwiftPM editable dependency 整合尚未發布的 OOXMLSwift profile/store;本機最終驗收使用 OOXMLSwift 3aa221aa3bba3657af68f1c8d22416d3efe9863e,追蹤中的遠端 pin 並非此修補。目前發布 binary 不提供,本次未更新 release 版本。

與新版 macdoc 共用 ~/.config/macdoc/config.json:新建依明示 profile → document.defaultProfile → inherit;開啟既有文件及 replay 僅採明示 profile。以新版 macdoc config document import-official --template /path/to/Normal.dotm 匯入安全快照,再以 config document set-default official 選擇新建預設。匯入不複製正文、不修改 Normal、不自動切換預設;來源變更不影響已保存的快照。

官方繁中字型為標楷體,OOXML 寫入 DFKai-SB。core 992a3d67 產生的 DOCX 已由 Mac Word 16.112.3 與 Windows Word 16.0.20326 實際匯出:兩邊皆為 1 頁 A4、12 pt、左右 90 pt/上下 72 pt、段後 8 pt,PDF 實際嵌入 DFKaiShu-SB-Estd-BF 與 Aptos,PNG 無缺字、裁切或重疊。最終 reader 修補 core 3aa221aa 以原合成測試固定 IDs/時間重新產檔,全部 10 個 package parts 與已驗輸入逐位元組相同,沿用該證據,本輪未重新執行 Word。null、錯誤型別、未知名稱及缺失/損毀快照會明確報錯,沒有 fallback。格式套用成功才註冊 session;既有 inherit 不標 dirty、不觸發 autosave,official 沿用正常修改與存檔保護。execute_script 在驗證與發布前套用,仍沿用原有 overwrite 與驗證錯誤契約。

新建 adapter 在首次序列化前套用 profile;inherit 只移除記憶體中可證明由 factory 產生的預設字型,並保留 caller 明示字型。provenance 不序列化到 OOXML,讀回文件的字型視為來源文件所有,不以 style ID 或相同字型值猜測後刪除。

測試可透過 WordMCPServer(documentConfigURL: temporaryConfigURL) 注入隔離設定;CLI config document 指令接受 --config,convert/render 接受 --document-config。共用 store 的設定寫入保留 AI/OCR 與未知欄位。

Features

  • 纯 Swift 实现:无需 Node.js、Python 或外部运行时
  • 直接操作 OOXML:直接处理 XML,无需安装 Microsoft Word
  • 单一二进制文件:仅需一个可执行文件
  • 234 个 MCP 工具:全面支持文档、表格、超链接、页眉、节、样式、编号、内容控件、批注、脚注、公式、域和修订
  • Office.js OOXML 路线图 P0 = 100%:全部 8 项 P0 子议题均已关闭(总议题 #43)。如今,所有 P0 能力在读写方面的覆盖范围均可与 Office.js 媲美。
  • 往返过程中的静默损坏问题已解决(v3.13.5,#56):5 轮子栈补全(R5 / R5-CONT / R5-CONT-2 / R5-CONT-3 / R5-CONT-4)关闭了 6-AI 交叉验证第 4 至第 8 轮中的 30 项发现(16 项 P0 + 21 项 P1)。将 ooxml-swift 升级至 v0.19.5(根据验证门禁,v0.19.4 未采用)。MCP 源码未作任何更改——修复架构完全位于 ooxml-swift 中。第 4 轮:页眉、页脚、脚注和尾注的遍历器对称性(accept_revision / reject_revision / get_hyperlinks / replace_text 可访问所有部分)。第 5 轮:每个容器的关系往返(update_hyperlink URL 同步至所属部分的关系)。第 6 轮:delete_hyperlink 镜像处理 + 保留容器 <w:tbl> 捕获。第 7 轮:reject_revision 类型化 clearMarker(文件/API 状态收敛)。第 8 轮:accept_revision 类型化 clearMarker(镜像处理)+ 移除矩阵固定不对称保护 + Document.repairContainerFileNames 将 document.xml.rels + [Content_Types].xml 标记为脏。收敛验证:Devil's Advocate 编写了 5 项针对收敛周期模式的对抗性测试,全部通过。详见关闭总结和 v3.13.5 发行说明。
  • 以编程方式处理修订(v3.12.0+,#45):通过 insert_text_as_revision / delete_text_as_revision / move_text_as_revision 生成原生 Word 可审阅修订,并可在 format_text / set_paragraph_format 中设置 as_revision: true 标志。生成 <w:ins> / <w:del> / <w:moveFrom> / <w:moveTo> / <w:rPrChange> / <w:pPrChange> 标记。副作用约定:as_revision: true 要求启用修订;否则会抛出 track_changes_not_enabled(不会静默自动启用)。作者解析顺序:显式参数 → revisions.settings.author → "Unknown"。
  • 表格 / 超链接 / 页眉扩展(v3.11.0+,#49 #50 #51):新增 16 个工具——表格条件样式(10 种区域类型)/ 嵌套表格(最多 5 层)/ 显式布局 / 表格缩进;三种类型的超链接(URL / 书签 / 邮件);奇偶页眉切换 / 链接到前一节 / get_section_header_map。
  • 样式 + 编号 + 节基础功能(v3.10.0+,#46 #47 #48):新增 19 个工具 + 扩展 6 个参数——get_style_inheritance_chain、link_styles、set_latent_styles、add_style_name_alias、完整的编号 CRUD 生命周期(定义 / 覆盖 / 列表连续性 / GC)、节垂直对齐 / 页码格式 / 分隔符类型 / 首页不同设置 / 每节页眉引用。
  • 内容控件(SDT)读写(v3.9.0+,#44):新增 7 个工具,支持区分 12 种类型(richText / plainText / picture / date / dropDownList / comboBox / checkBox / bibliography / citation / group / repeatingSection / repeatingSectionItem)。支持嵌套 SDT 树、确定性的 max+1 SDT ID 分配器、删除时通过 keep_content 解包,以及经过白名单验证的 XML 替换。
  • 保存持久性保障(v3.5.3+):原子重命名保存(#36)、基于 actor 的并发安全(#39)、选择启用 keep_bak 回滚(#38)、autosave_every Design B 突变前快照,并显式调用 recover_from_autosave 恢复(#37、#40,v3.7.0)。默认值为 autosave_every: 1(每次突变前均创建快照)。传入 autosave_every: 0 可选择退出。
  • 双模式访问:直接模式(只读,通过 source_path 一步完成)和会话模式(通过 doc_id 支持完整生命周期)
  • 真正保留字节的往返保真度(v3.5.0+):save_document 覆盖模式使用 WordDocument.modifiedParts 脏跟踪,原样保留未经修改的类型化部分(document.xml、styles.xml、fontTable.xml、header*.xml、footer*.xml、comments.xml、footnotes.xml、endnotes.xml)和未知部分(theme/、webSettings.xml、people.xml、commentsExtended/Extensible/Ids、glossary/、customXml/)。文档无操作的 save_document 往返可保留 13 个 fontTable 条目 + 6 个不同页眉 + 4 个页脚 + 三段 PAGE 域 + <w15:presenceInfo> 标识。
  • 主题 + 页眉/页脚 CRUD + 水印读写(v3.3.0+,写入端 #208):编辑 word/theme/theme1.xml、枚举和删除页眉/页脚、检测水印 VML(list_watermarks / get_watermark——可识别 PowerPlusWaterMarkObject 文本特征和 Word 自带的 WordPictureWatermark 图片特征,#209),并支持实际写入(insert_watermark / insert_image_watermark / remove_watermark——将 VML <w:pict> 形状写入每个页眉部分;图片水印要求文档从现有 .docx 文件打开)。文档中文字体修复方式:update_theme_fonts({ minor: { ea: "DFKai-SB" } })。
  • 批注线程 + 用户信息 + 笔记更新 + Web 设置(v3.4.0+):提供 13 个工具,用于协作批注元数据、people.xml 作者记录(双重标识:GUID + 旧式作者)、原位编辑尾注/脚注(保留 ID)以及配置 webSettings.xml。
  • insert_equation 的完整 LaTeX 子集(v3.2.0+):委托给 latex-math-swift。支持 \frac、\sqrt、\hat / \bar / \tilde 重音符号、\left/\right 分隔符、带上下限的 \sum / \int / \prod 多元运算符、函数名称、极限、\text{}、所有希腊字母(包括 \varepsilon 变体)以及常用运算符。
  • 文本锚点插入:相对于匹配文本插入题注 / 图片(after_text / before_text),无需预先调用搜索
  • 批量操作:replace_text_batch / search_text_batch 将 N 次往返合并为一次
  • 会话状态 API:基于 SHA256 + mtime 的磁盘漂移检测,以及 revert_to_disk / reload_from_disk / check_disk_drift
  • 结构化回读:提供 list_captions / list_equations / update_all_fields(等效于 F9),用于稿件审阅工作流
  • 跨平台:支持 macOS(自 v3.5.1 起提供通用二进制文件 x86_64 + arm64)

Version History

版本日期变更
v4.0.02026-08-19execute_script 契约修正(重大变更) — 验证失败现在会作为工具错误返回(#180);新增 overwrite 参数,且默认拒绝覆盖已有的 output_path(#181)。覆盖保护移入 ooxml-swift 的共享入口 scriptPipelineExecute,两端都受到结构性保护;重建结果现在会写入同目录下的临时路径,验证通过后才移入目标位置,因此验证失败不再破坏输出路径。需要 ooxml-swift 3.0.1。5-lens 验证(因配额原因未执行 Codex 环节,已记录)。
v3.22.02026-07-18自生成的 docx 升级为类型化 DSL(通过 idd 关闭 #173,PR #174)。将 ooxml-swift 从 1.4.0 升级至 1.5.0(上游 ooxml-swift#85:转码器规范化创作 — 带有标记的 w14:paraId、元素间无空白、完整的 Word 规范根云)。现在,对 MCP 创作的纯段落文档调用 export_script 时,会在 dsl 通道报告 document.xml(比率为 1.0);slots 锚定于标记的 paraId。工具描述中已说明部件级边界:富表格或缺少 paraId 的旧内容会使整个部件降级为原始内容,等待 ooxml-swift#86。消费者回归测试 Issue173SelfProducedDSLUpgradeTests(在 1.4.0 上失败/在 1.5.0 上通过)。6-AI 验证通过。
v3.13.52026-04-27R5 栈补全(关闭 #56 中的静默损坏问题)。将 ooxml-swift 从 v0.19.3 升级至 v0.19.5(根据验证门禁暂缓发布 v0.19.4)。在 5 个子栈(R5 / R5-CONT / R5-CONT-2 / R5-CONT-3 / R5-CONT-4)及 6-AI 交叉验证第 4-8 轮中,关闭了 30 个问题(16 个 P0 + 21 个 P1)。第 4 轮:页眉/页脚/脚注/尾注间的遍历器对称性(accept_revision / reject_revision / get_hyperlinks / replace_text 可访问所有部件)。第 5 轮:每个容器的关系往返(update_hyperlink 的 URL 同步目标为所属部件的关系)。第 6 轮:镜像实现 delete_hyperlink + 保留容器 <w:tbl> 捕获。第 7 轮:reject_revision 类型化 clearMarker(文件/API 状态收敛)。第 8 轮:accept_revision 类型化 clearMarker(镜像实现)+ 移除矩阵固定的非对称保护 + repairContainerFileNames 标记关系为脏。收敛:Devil's Advocate 编写了 5 个针对收敛循环模式的对抗性测试;全部通过。che-word-mcp 源码未作任何更改 — 整个修复架构均在 ooxml-swift 中。请参阅结项摘要。
v3.13.42026-04-26(已跳过 — 根据验证门禁暂缓发布)。R3 栈内容并入 v3.13.5。
v3.13.32026-04-26将 ooxml-swift 从 v0.19.2 升级至 v0.19.3。关闭 #56 第 2 轮验证中的 8 个 P0 + 3 个必须修复的 P1 问题(Hyperlink API 路径的视觉样式恢复 / tgtFrame / docLocation Reader 过滤 / 按顺序保留子项的源顺序;排序路径上的 contentControls + commentIds / footnoteIds / endnoteIds / hasPageBreak 发出;保留非文本包装器;嵌套 hyperlink/SDT/fieldSimple 往返;校准 nextBookmarkId;恢复书签环绕)。源码未作更改。
v3.13.22026-04-26将 ooxml-swift 从 v0.19.1 升级至 v0.19.2。关闭 #56 第 1 轮验证中的 4 个阻塞问题(F1 Hyperlink.toXML() 发出 Reader 收集的 runs/rawAttributes/rawChildren;F2 add_bookmark/delete_bookmark 同步 bookmarkMarkers;F3 ins/del/moveFrom/moveTo 往返保留位置+revisionId+包装器;F4 命名空间保留范围从 document.xml 扩展至页眉/页脚/脚注/尾注)。源码未作更改。
v3.13.12026-04-25按位置排序往返时 pPr 重复发出导致静默回归 — 热修复(ooxml-swift v0.19.1)。
v3.13.02026-04-25document.xml 无损往返 + 通过工具编辑包装器(关闭 #56 P0)。混合模型保留命名空间映射(34 个 xmlns)、书签和结构性包装器(<w:hyperlink> / <w:fldSimple> / <mc:AlternateContent>)。
v3.12.02026-04-25以编程方式生成修订(关闭 #45)— 新增 3 个工具(insert_text_as_revision / delete_text_as_revision / move_text_as_revision)+ 为 format_text / set_paragraph_format 新增 as_revision 标记。生成 <w:ins> / <w:del> / <w:moveFrom> / <w:moveTo> / <w:rPrChange> / <w:pPrChange> 标记。
v3.11.02026-04-25表格/超链接/页眉扩展(关闭 #49 #50 #51)— 新增 16 个工具:表格条件样式(10 种区域类型)/嵌套表格(最多 5 层)/显式布局/表格缩进;三种类型化超链接(URL/书签/电子邮件);奇偶页眉切换/链接到前一节/get_section_header_map。
v3.10.02026-04-24样式 + 编号 + 分节基础功能(关闭 #46 #47 #48)— 新增 19 个工具 + 扩展 6 个参数。get_style_inheritance_chain、link_styles、set_latent_styles、add_style_name_alias;完整的编号增删改查生命周期;分节垂直对齐/页码格式/分节类型/首页不同/每节页眉引用。
v3.9.02026-04-24内容控件(SDT)读写(关闭 #44)— 新增 7 个工具,区分 12 种类型(richText / plainText / picture / date / dropDownList / comboBox / checkBox / bibliography / citation / group / repeatingSection / repeatingSectionItem)。支持嵌套 SDT 树、确定性 ID 分配器、keep_content 解包、经白名单验证的 XML 替换。
v3.8.02026-04-24保留页眉/页脚原始元素 + 计数器隔离标记(关闭 #52)。
v3.7.22026-04-24#42 验证中的 3 个问题合并修复(关闭 #53、#54、#55 路径遍历加固)。
v3.7.12026-04-24update_all_fields 不再删除页眉/页脚(关闭 #42)。
v3.7.02026-04-24插入崩溃加固 + 自动保存设计 B(关闭 #40、#41)。v3.6.0 发布了 autosave_every 设计 A(变更后计数器),当 K%N≠0 时,在第 K 次操作时崩溃便无法保留前 K-1 次变更。v3.7.0 改为设计 B(每个变更处理器运行时,在变更执行前启动快照);autosave_every 默认值从 0 改为 1(每次变更都会快照此前状态)。传入 autosave_every: 0 可选择退出。实际上的重大变更:影响依赖设计 A 语义或依赖默认禁用自动保存的调用方。还新增了用于调查 #41 的 Phase A 结构化日志门控 CHE_WORD_MCP_LOG_LEVEL=debug。基于 ooxml-swift 0.13.3 构建,该版本移除了 DocxReader.concurrentPerform(这是 recover_from_autosave 的解析确定性前提),并重构 nextImageRelationshipId,使其使用 rId 分配器。从 v3.6.0 迁移:显式传入 autosave_every: 0 的代码不受影响;未传入该参数的代码现在会使用 1(完整安全保护)— 若要恢复 v3.6.0 默认禁用的行为,请在 open_document 调用中添加 autosave_every: 0。
v3.6.02026-04-23自动保存 + 检查点 + recover_from_autosave(关闭 #37)。open_document 新增参数 autosave_every: Int = 0 — 当 N > 0 时,每 N 次变更会触发一次检查点写入 <source>.autosave.docx(单独文件,不会立即保存到源文件)。新增工具:用于手动快照的 checkpoint(doc_id, path?),以及用于将内存状态替换为自动保存字节数据的 recover_from_autosave(doc_id, discard_changes?)。get_session_state 新增 autosave_detected + autosave_path 字段。成功调用 save_document / finalize_document 后会清理 <source>.autosave.docx。这是保存持久性栈 SDD 的第 4 阶段。
v3.5.52026-04-23可选启用 keep_bak,提供回滚逃生通道(关闭 #38)。save_document 新增可选参数 keep_bak: Bool = false;当设为 true 且目标文件存在时,服务会在原子重命名保存前将目标文件重命名为 <path>.bak(单个备份槽位,会覆盖先前的 .bak)。如果未来保存操作造成静默 OOXML 损坏,用户可通过 mv <path>.bak <path> 回滚。.bak 位于服务层而非 ooxml-swift — macdoc CLI 用户不会得到多余的 .bak 文件。这是保存持久性栈 SDD 的第 3 阶段。
v3.5.42026-04-23class WordMCPServer → actor WordMCPServer(关闭 #39)。8 个可变会话状态字典现已隔离在 actor 中;编译器会强制所有跨 actor 访问都通过 await。消除了 v3.5.4 之前由 12 个并行 insert_image_from_path 调用触发的 Dictionary 哈希表损坏竞态。这是保存持久性栈 SDD 的第 2 阶段。
v3.5.32026-04-23原子重命名保存(关闭 #36)。升级至 ooxml-swift 0.13.2,该版本重构 DocxWriter.write,使其写入 <url>.tmp.<UUID>,然后执行 fsync + replaceItemAt。写入中途发生任何异常或进程被终止,都会保留原文件字节不变(POSIX rename(2) 由内核保证原子性;跨卷时会回退到复制 + 删除)。ooxml-swift 测试 397/397 通过;新增并发观察者回归测试。这是保存持久性栈 SDD 的第 1 阶段。
v3.5.22026-04-23关系覆盖层合并(关闭 #35)— Reader 加载文档后,对其调用空操作 save_document 并往返保存,现在会保留 theme / webSettings / people / customXml / commentsExtended / commentsIds 关系。v3.5.0/v3.5.1 修复了部件层;v3.5.2 修复了关系层。che-word-mcp 源码未作更改 — 修复完全在 ooxml-swift v0.13.1 中完成(RelationshipsOverlay + 由关系驱动的 extractImages)。
v3.5.12026-04-23通用二进制文件(x86_64 + arm64)— 恢复对 Intel Mac 的兼容性。v3.5.0 仅支持 arm64,因为发布构建跳过了文档中所述的 lipo -create 步骤。源码未作更改 — 可直接替换。
v3.5.02026-04-23通过脏状态跟踪实现真正的字节保留(关闭 #23 round-2 + #32 #33 #34)。Reader 加载的 学位论文在空操作 save_document 往返后仍能保留全部 13 个 fontTable + 6 个不同页眉 + 4 个页脚 + 三段式 PAGE 字段 + <w15:presenceInfo> 身份信息。基于 ooxml-swift 0.13.0 构建(modifiedParts: Set<String> + Header.originalFileName + 覆盖模式下跳过未变更内容)。list_people 返回双重身份信息:person_id(GUID,重命名后仍稳定)+ display_name_id(即旧版 author)。
v3.4.02026-04-23合并第 2B + 2C 阶段(关闭 #24 #25 #29 #30 #31):评论线程(list_comment_threads / get_comment_thread / sync_extended_comments)、人员(list_people / add_person / update_person / delete_person)、注释更新(get_endnote / update_endnote / get_footnote / update_footnote — 保留注释 ID)、Web 设置(get_web_settings / update_web_settings)。新增 13 个 MCP 工具。
v3.3.02026-04-23第 2A 阶段(关闭 #26 #27 #28):主题工具(get_theme / update_theme_fonts / update_theme_color / set_theme)、页眉(list_headers / get_header / delete_header)、水印(list_watermarks / get_watermark)、页脚(list_footers / get_footer / delete_footer)。新增 12 个 MCP 工具。升级至 ooxml-swift 0.12.x,以支持默认保留的往返处理。
v3.2.02026-04-23insert_equation 的 LaTeX 解析器改由 latex-math-swift 处理(关闭 #22)。支持完整的 LaTeX 子集:\frac、\sqrt、\hat/\bar/\tilde、\left/\right、带上下限的 \sum/\int/\prod、\ln/\sin/\cos/\tan/\log/\exp/\max/\min/\det、\sup/\inf/\lim、\text{}、所有希腊字母(包括 \varepsilon 变体)以及常见运算符。18 个计量经济学样例公式现均可解析。通过 ooxml-swift 0.11.0 新增 MathAccent。
v3.1.02026-04-22新增 9 个回读工具:题注增删改查(list_captions / get_caption / update_caption / delete_caption)、update_all_fields(等效于 F9 的 SEQ 重新计数)、公式增删改查(list_equations / get_equation / update_equation / delete_equation)。基于新版 ooxml-swift 0.10.0 的 FieldParser + OMMLParser 构建。
v3.0.02026-04-22重大变更:会话状态 API。新增工具 get_session_state / revert_to_disk / reload_from_disk / check_disk_drift。open_document 的 track_changes 默认值从 true 改为 false。close_document 的脏状态检查现在会返回包含恢复选项的 E_DIRTY_DOC 文本响应(save_document / discard_changes: true / finalize_document)。
v2.3.02026-04-22文本锚点复合工具 — insert_caption / insert_image_from_path 接受 after_text / before_text / text_instance。无需再采用 search_text + insert_* 两次调用模式(可为文档题注工作流减少约 50% 的 RPC 调用)。
v2.2.02026-04-22批处理 API — replace_text_batch(按顺序执行,最后只保存一次,含 dry_run/stop_on_first_failure 标记)+ search_text_batch(聚合多查询响应,支持 Direct + Session Mode)。
v2.1.02026-04-22通过 inputSchema 暴露 v2.0.0 参数 — insert_caption / insert_equation / insert_image_from_path / replace_text 的架构现在会声明新参数(中文标签、components、into_table_cell、scope、regex)。
v2.0.02026-04-22重大变更:word-mcp-insertion-primitives Spectra 变更。真实的 OOXML SEQ 字段(此前为字面文本)、OMML MathComponent AST(此前为字符串替换)、自动保持纵横比的图像尺寸调整 + 表格单元格目标,以及支持 scope + 正则反向引用的跨 run 安全 replace_text。
v1.19.02026-04-15导出手稿审阅 Markdown:export_revision_summary_markdown / compare_documents_markdown / export_comment_threads_markdown。重大变更:get_revisions + compare_documents 的 full_text 参数由 summarize 替代(默认值反转)。
v1.18.02026-04-14修复 get_revisions 硬编码截断为 30 个字符的问题(自 v1.2.0 起存在);新增可选启用的 full_text。
v1.17.02026-03-11会话状态管理:脏状态跟踪、自动保存、finalize_document、get_document_session_state、关闭时刷新(由 @ildunari 贡献)
v1.16.02026-03-10双模式:15 个只读工具现在支持 source_path(Direct Mode);新增 MCP 服务说明
v1.15.22026-03-07改进 list_all_formatted_text 工具描述,以便 LLM 更好地处理参数
v1.15.12026-03-01修复标题启发式样式回退(从样式继承链解析 fontSize)
v1.15.02026-03-01实用模式:自动将 EMF 转换为 PNG + 为无样式文档提供标题启发式判断
v1.14.02026-03-01嵌入 word-to-md-swift 库:无需外部 macdoc 二进制文件,恢复对 doc_id 的支持
v1.13.02026-03-01将 ooxml-swift 升级至 v0.5.0:并行多核解析(大型文档约需 0.64 秒)
v1.12.12026-03-01将 ooxml-swift 升级至 v0.4.0:修复大型文档性能问题(>30 秒 → 约 2.3 秒)
v1.12.02026-02-28export_markdown 现在仅使用 source_path,移除 doc_id,新增锁文件检查
v1.11.12026-02-28修复 export_markdown 标准输出模式(管道 fsync 问题)
v1.11.02026-02-28export_markdown 改由 macdoc CLI 处理;移除 word-to-md-swift 依赖
v1.9.02026-02-28升级 export_markdown,改用 word-to-md-swift 以生成高质量输出(总计 145 项)
v1.8.02026-02-03移除硬性差异上限;为 compare_documents 新增 max_results 和 heading_styles 参数
v1.7.02026-02-03新增 compare_documents 工具,用于服务端文档差异比较(总计 105 项)
v1.2.12026-01-16修复 MCP SDK 兼容性(actor→class,新增 capabilities)
v1.2.02026-01-16新增 12 个工具(总计 95 项):搜索、超链接、书签、脚注、尾注、修订、属性
v1.1.02026-01-16修复 Claude Desktop 的 MCPB manifest.json 格式
v1.0.02026-01-16首次发布,包含 83 个工具,并重构为使用 ooxml-swift

快速开始

用于 Claude Desktop
选项 A:一键安装 MCPB(推荐)

从 Releases 下载最新的 .mcpb 文件,然后双击安装。

选项 B:手动配置

编辑 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "che-word-mcp": {
      "command": "/usr/local/bin/CheWordMCP"
    }
  }
}
用于 Claude Code(CLI)
选项 A:作为插件安装(推荐)

该插件内置了一个支持版本识别的包装程序,首次使用时会自动下载二进制文件(每次更新插件本身时也会重新下载——无需运行 swift build)。

分两步完成——先注册市场,一次即可;然后安装插件:

# 1. Register the marketplace (one-time)
claude plugin marketplace add PsychQuant/psychquant-claude-plugins

# 2. Install the plugin
claude plugin install che-word-mcp@psychquant-claude-plugins

正在使用 Claude Code? 斜杠命令 /plugin marketplace add PsychQuant/psychquant-claude-plugins 和 /plugin install che-word-mcp@psychquant-claude-plugins 的效果相同。

注意: 该插件通过自动下载功能包装 MCP 二进制文件。如果 ~/bin/CheWordMCP 中缺少二进制文件(或旁路文件 ~/bin/.CheWordMCP.version 中的版本早于插件固定的版本),则会在下次调用时从 GitHub Releases 下载。

选项 B:作为独立 MCP 安装

如果你只需要 MCP 服务,不需要插件功能(斜杠命令、技能、SessionStart 钩子):

# Create ~/bin if needed
mkdir -p ~/bin

# Download the latest release
curl -L https://github.com/PsychQuant/che-word-mcp/releases/latest/download/CheWordMCP -o ~/bin/CheWordMCP
chmod +x ~/bin/CheWordMCP

# Register with Claude Code
# --scope user    : available across all projects (stored in ~/.claude.json)
# --transport stdio: local binary execution via stdin/stdout
# --              : separator between claude options and the command
claude mcp add --scope user --transport stdio che-word-mcp -- ~/bin/CheWordMCP

💡 提示: 将二进制文件安装到 ~/bin/ 这样的本地目录中。请避免使用云同步文件夹(Dropbox、iCloud、OneDrive)——同步操作可能会导致 MCP 连接中断。

从源代码构建(可选)

仅在你想跟踪 main 或贡献补丁时使用。

先决条件
  • macOS 13.0+(Ventura 或更高版本)
  • Swift 5.9+
git clone https://github.com/PsychQuant/che-word-mcp.git
cd che-word-mcp
swift build -c release

# Install
cp .build/release/CheWordMCP ~/bin/
崩溃模糊测试(scripts/fuzz-extreme-params.py)

将极端值(Int.max、Int.min、2^62、2^31、-1、1e300、 -1e300)发送到 tools/list 中声明的每个整数/数字参数,并通过 stdio (MCP JSON-RPC)针对真正编译的二进制运行——每次探测都启动一个全新的 服务进程,因此某次探测崩溃不会导致整个运行中断。在 #234 的 第一轮修复之前发现了 58 个崩溃,之后又发现了 5 个(按该问题自身扩展后的 审计标准),这些问题都被基于 grep 的人工审计遗漏了——完整历史请参阅该问题。 每当新增工具或整数/数字参数时,以及发布涉及 Server.swift 中整数/数字参数处理的 版本之前,都要运行此脚本:

swift build   # ensure .build/debug/CheWordMCP is up to date first
python3 scripts/fuzz-extreme-params.py .build/debug/CheWordMCP /tmp/fuzz-workdir

只有在没有崩溃或挂起(包括每次探测后执行的保存操作)、所有“(必须拒绝)”探测都被拒绝、最大合法表格探测期间的峰值常驻内存低于上限(在整个序列中采样,而不是在结束时读取一次——#239),并且架构中的整数/数字参数至少有 FUZZ_MIN_COVERAGE(默认为 0.80,从 0.97 下调——见下文)被判定为已触达时,退出码才为 0。被无关前置条件拦截的探测不能证明任何问题,因此,如果模糊测试器无法触达目标参数,就会判定失败,而不是报告零崩溃。“已触达”需要有正面证据(响应中提及参数名称或回显其值,或者返回针对该参数的索引/未找到错误);仅有一个成功响应不再足够(#239——旧标准在 4.4.0 中将 241/245 计为已触达,但独立审计发现实际上只有约 227/245)。诚实的标准测得的覆盖率低于旧标准曾报告的任何值(相对于当前更大的参数集约为 85%),因此默认值从 0.97 调整为 0.80:0.97 是按高估覆盖率的标准校准的,按诚实标准衡量时实际上从未达到。脚本始终会生成摘要行、覆盖率行(包含未触达参数)以及逐探测 TSV(<workdir>/fuzz_results.tsv)。它也已接入 swift test 的可选开关(默认不运行——需要约 1,300 个子进程和一个已编译的二进制;设置 RUN_FUZZ=1 后,如果二进制缺失或不是最新版本,就会导致门禁失败):

RUN_FUZZ=1 swift test --filter FuzzExtremeParamsGateTests

两种运行模式

直接模式(source_path)——只读,无状态

直接传入文件路径。无需先调用 open_document。适合快速查看。

# Just pass source_path — one step
list_images: { "source_path": "/path/to/file.docx" }
search_text: { "source_path": "/path/to/file.docx", "query": "keyword" }
get_document_info: { "source_path": "/path/to/file.docx" }

19 个工具支持直接模式:

类别工具
读取内容get_text、get_document_text、get_paragraphs、get_document_info、search_text
列出元素list_images、list_styles、get_tables、list_comments、list_hyperlinks、list_bookmarks、list_footnotes、list_endnotes、get_revisions
属性get_document_properties、get_section_properties、get_word_count_by_section、estimate_paragraph_for_page
导出export_markdown
会话模式(doc_id)——完整的读写生命周期

先调用 open_document,然后在所有后续操作中使用 doc_id。编辑时必须使用此模式。

open_document: { "path": "/path/to/file.docx", "doc_id": "mydoc" }
insert_paragraph: { "doc_id": "mydoc", "text": "Hello World" }
save_document: { "doc_id": "mydoc", "path": "/path/to/output.docx" }
close_document: { "doc_id": "mydoc" }

双模式工具同时接受 source_path 和 doc_id。如果文档已经打开,请使用 doc_id,以避免从磁盘重新读取。

与 AI Agent 搭配使用

直接向 Agent 提出请求
Use che-word-mcp to read all images from ~/Documents/report.docx

Agent 会自动使用直接模式(无需打开或关闭文档)。

AGENTS.md / CLAUDE.md
## Word Document Manipulation

Use `che-word-mcp` for reading and writing Microsoft Word (.docx) files.

**Read-only** (Direct Mode — one step):
- `get_document_text` / `get_paragraphs` — read content
- `list_images` / `search_text` — inspect elements
- `export_markdown` — convert to Markdown

**Edit** (Session Mode — open→edit→save):
1. `open_document` → get doc_id
2. `insert_paragraph` / `replace_text` / `format_text` — modify
3. `save_document` → write to disk
4. `close_document` → release memory
Claude Code 技能
mkdir -p .claude/skills/che-word-mcp
curl -o .claude/skills/che-word-mcp/SKILL.md \
  https://raw.githubusercontent.com/PsychQuant/che-word-mcp/main/skills/che-word-mcp/SKILL.md

可用工具(共 234 个)

段落索引约定

paragraph_index / index 是历史参数名称,并不总是对应相同的 OOXML 表面。不同的插入/修改/读回工具 采用不同约定——不能假设存在通用默认规则。 目前有三种坐标系统并存: body.children 插入索引(部分插入操作使用)、顶层段落序号(大多数修改操作和行内公式插入使用), 以及 get_paragraphs 读回顺序(用于检查)。在不同工具间复用索引前,请参阅 docs/paragraph-index-conventions.md 中各工具的清单。

文档管理(6 个工具)
工具描述
create_document创建新的 Word 文档
open_document打开现有的 .docx 文件(自 v3.0.0 起,track_changes 默认值为 false)
save_document将文档保存为 .docx 文件
close_document关闭已打开的文档(传入 discard_changes: true 可丢弃未保存的编辑)
finalize_document在单个受保护步骤中保存并关闭
list_open_documents列出所有已打开的文档
会话状态 API(5 个工具,v3.0.0+)
工具描述
get_session_state获取 { source_path, disk_hash_hex, disk_mtime_iso8601, is_dirty, track_changes_enabled } 快照
get_document_session_state旧版会话快照(为保持向后兼容而保留)
revert_to_disk重新读取源路径并丢弃内存中的编辑(有意设计为破坏性操作)
reload_from_disk协作式重新加载;文档有未保存修改时需要 force: true
check_disk_drift提供信息——返回 { drifted, disk_mtime, stored_mtime, disk_hash_matches }
内容操作(9 个工具)
工具描述
get_text获取纯文本内容
get_paragraphs获取所有段落及其格式
estimate_paragraph_for_pagev3.18.0+ — 将 Word UI 页码估算为 get_paragraphs 候选范围(启发式 JSON,包含置信度和警告)。chars_per_page 推导公式、置信度等级表和已知限制请参阅 docs/estimate-paragraph-for-page.md。
insert_paragraph插入新段落
update_paragraph更新段落内容
delete_paragraph删除段落
replace_text跨运行安全的查找与替换,支持 scope(body|all)、regex 和 $1..$N 反向引用
replace_text_batchv2.2.0 — 顺序执行 N 次替换的批处理,最后仅保存一次,支持 dry_run / stop_on_first_failure
search_text_batchv2.2.0 — 聚合多查询搜索,适用于 Direct + Session Mode
格式设置(3 个工具)
工具描述
format_text应用文本格式(粗体、斜体、颜色、字体)
set_paragraph_format设置段落格式(对齐、间距)
apply_style应用内置或自定义样式
表格(15 个工具,v3.11.0+ 扩展 #49)

核心(6 个):

工具描述
insert_table插入表格,可选择是否包含数据
get_tables获取所有表格信息
update_cell更新单元格内容
delete_table删除表格
merge_cells横向或纵向合并单元格
set_table_style设置表格边框和底纹

行 / 列 / 单元格(8 个):

工具描述
add_row_to_table, delete_row_from_table行管理
add_column_to_table, delete_column_from_table列管理
set_cell_width, set_cell_vertical_alignment单元格尺寸和对齐方式
set_row_height, set_table_alignment行高和表格对齐方式

高级(5 个,v3.11.0):

工具描述
set_table_conditional_style通过 <w:tblStylePr> 应用 firstRow / lastRow / bandedRows 等样式(10 种区域类型)
insert_nested_table在单元格中插入表格,嵌套深度限制为 5(超出时抛出 nested_too_deep)
set_table_layout切换固定布局 / 自动调整
set_header_row将行标记为 <w:tblHeader/>,使其在分页符处重复显示
set_table_indent设置表格级左缩进(<w:tblInd>)
样式管理(8 个工具 + 6 个扩展参数,v3.10.0+ #48)

核心(4 个):

工具描述
list_styles列出所有可用样式(支持 Direct Mode)
create_style创建自定义样式 — 扩展支持 6 个 v3.10 参数:based_on、linked_style_id、next_style_id、q_format、hidden、semi_hidden
update_style更新样式定义 — 同样支持上述 6 个扩展参数
delete_style删除自定义样式

继承与关联(4 个,v3.10.0):

工具描述
get_style_inheritance_chain向上遍历 basedOn 链直至根节点,并检测循环
link_styles在段落样式与字符样式之间建立双向 <w:link> 关联
set_latent_styles通过 <w:latentStyles> 块控制“快速样式库”的默认样式
add_style_name_alias按 BCP 47 语言代码添加本地化的 <w:name> 别名
编号 / 列表(12 个工具,v3.10.0+ 定义生命周期 #46)

内联列表创建(4 个):

工具描述
insert_bullet_list插入项目符号列表
insert_numbered_list插入编号列表
set_list_level设置列表缩进级别
set_outline_level设置段落大纲级别(用于目录收录)

定义的增删改查(8 个,v3.10.0):

工具描述
list_numbering_definitions枚举所有 abstractNum + num 配对
get_numbering_definition按 ID 获取单个 num
create_numbering_definition新建 abstractNum + 配对 num(最多 9 级)
override_numbering_level使用 <w:lvlOverride> 设置各级起始值
assign_numbering_to_paragraph按段落索引通过 <w:numPr> 关联编号
continue_list跨段落继续编号
start_new_list重置编号并从头开始
gc_orphan_numbering清理未引用的 num 定义(保留 abstractNums)
分节 / 页面设置(12 个工具,v3.10.0+ 扩展 #47)

基本页面设置(5 个):

工具描述
set_page_size设置页面大小(A4、Letter 等)
set_page_margins设置页边距
set_page_orientation设置纵向或横向
insert_page_break插入分页符
insert_section_break插入分节符

分节属性(7 个,v3.10.0):

工具描述
get_all_sections按文档顺序返回每个分节的 SectionInfo 数组
set_section_break_typenextPage / continuous / evenPage / oddPage
set_section_vertical_alignment用于封面的 <w:vAlign>
set_page_number_format用于罗马数字等的 <w:pgNumType w:fmt>
set_line_numbers_for_section用于法律文档的 <w:lnNumType>
set_title_page_distinct切换每个分节的 <w:titlePg/>
set_section_header_footer_references按类型(default/first/even)分配 rId
页眉和页脚(17 个工具,v3.11.0+ 偶数页/奇数页 + 分节映射 #51)

写入工具(5 个):

工具描述
add_header添加页眉内容(自 v3.3.0+ 起使用 RelationshipIdAllocator——覆盖模式下的 rId 不会冲突)
update_header更新页眉内容(保留文件名和 rId;原位覆盖 tempDir)
add_footer添加页脚内容
update_footer更新页脚内容
insert_page_number插入页码字段

读取 + 删除工具(8 个,v3.3.0+,解决 #26 #27):

工具描述
list_headers枚举页眉部件及其类型(default/first/even)、section_id 和 has_watermark
get_header读取文本 + 完整 XML + 水印结构
delete_header移除类型化模型条目 + tempDir 文件 + Relationship + Content_Types Override
list_watermarks扫描所有页眉中的 VML 水印形状——文本(PowerPlusWaterMarkObject)或图像(WordPictureWatermark,#209)
get_watermark单个页眉的水印详情(无水印时返回 null)
list_footers枚举页脚部件及其类型、section_id 和 has_page_number
get_footer读取文本 + XML + 解析后的字段结构(PAGE / NUMPAGES / REF / STYLEREF)
delete_footer与 delete_header 对称

偶数页/奇数页 + 分节关联(4 个,v3.11.0):

工具描述
enable_even_odd_headers切换文档级 <w:evenAndOddHeaders/> 标志
link_section_header_to_previousWord 兼容的克隆语义
unlink_section_header_from_previous对称地取消关联
get_section_header_map返回每个分节的页眉 / 页脚文件分配情况
主题编辑(4 个工具,v3.3.0+,解决 #28)
工具描述
get_theme从 word/theme/theme1.xml 读取主要/次要字体槽(latin/ea/cs)+ 配色方案(accent1-6、hyperlink、followedHyperlink)
update_theme_fonts局部更新字体槽——例如 { minor: { ea: "DFKai-SB" } },用于修复文档中的中文字体
update_theme_color按槽名称更新十六进制颜色并进行验证(拒绝无效槽和非 6 位十六进制值)
set_theme低级备用方案——原样替换 theme1.xml(验证 <a:theme> 根元素及 XML 格式正确)
图片(7 个工具)
工具描述
insert_image插入内嵌图片(PNG、JPEG)
insert_image_from_pathv2.0.0+ — 宽度和高度可选(通过 ImageDimensions.detect 自动保持纵横比),支持 into_table_cell 以及 after_text / before_text 锚点。支持 PNG/JPEG 和 PDF(通过原生 PDFKit/CoreGraphics 栅格化第 page 页,#16)
insert_floating_image插入带文字环绕的浮动图片;relative_to_h / relative_to_v 用于设置锚点的参考点(#233)
update_image更新图片属性
delete_image删除图片
list_images列出图片 — 文档正文及页眉/页脚中的图片均会标记 referenced: yes/orphan/unknown;标记结果基于与 save_document 一致性门禁相同的软件包扫描(#199,#219)
set_image_style设置图片边框和效果
题注(5 个工具)
工具描述
insert_captionv2.0.0+ — 使用真正的 OOXML SEQ 字段(而非纯文本)。支持英文和中文标签(Figure/Table/Equation/圖/表/公式)、5 种锚点(paragraph_index / after_image_id / after_table_index / after_text / before_text),以及可选的 STYLEREF 章节编号前缀
list_captionsv3.1.0 — 枚举题注段落,包含 label / sequence_number / caption_text / paragraph_index
get_captionv3.1.0 — 获取单个题注的详细信息,包括可选的 STYLEREF 章节编号 chapter_number
update_captionv3.1.0 — 修改题注文本或标签,同时保留 SEQ 字段结构
delete_captionv3.1.0 — 移除题注段落
公式(5 个工具)
工具描述
insert_equationv2.0.0+ — 通过 MathComponent AST(9 种类型)生成结构正确的 OMML。主要方式:components: 树;备用方式:latex: 子集(\frac、\sqrt、x^{y}、希腊字母、∑/∫/∏)
list_equationsv3.1.0 — 枚举 <m:oMath> 片段,并附带 display_mode 标记
get_equationv3.1.0 — 获取单个公式的详细信息及组件摘要
update_equationv3.1.0 — 替换目标公式的组件树
delete_equationv3.1.0 — 移除公式片段或空段落
导出(5 个工具)
工具描述
export_text导出为纯文本
export_markdown导出为 Markdown(使用内嵌的 word-to-md-swift)
export_revision_summary_markdownv1.19.0 — 用于稿件审阅的逐文档修订时间线
compare_documents_markdownv1.19.0 — 多文档累计修订时间线
export_comment_threads_markdownv1.19.0 — 评论串及作者别名规范化
超链接和书签(10 个工具,v3.11.0+ 类型化变体 #50)

通用工具 + 书签(7 个):

工具描述
insert_hyperlink插入外部超链接
insert_internal_link插入指向书签的链接
insert_cross_reference插入交叉引用
update_hyperlink更新超链接
delete_hyperlink删除超链接
insert_bookmark插入书签
delete_bookmark删除书签

类型化超链接(3 个,v3.11.0,自动创建 Hyperlink 字符样式):

工具描述
insert_url_hyperlink外部 URL,可选提示文字和历史记录标记
insert_bookmark_hyperlink内部锚点链接(w:anchor,无 rId)
insert_email_hyperlinkmailto:,可选经过 URL 编码的主题
评论与修订(13 个工具)

评论写入 + 读取(7):

工具描述
insert_comment插入评论
update_comment更新评论文本
delete_comment删除评论
list_comments列出所有评论
reply_to_comment回复现有评论
resolve_comment将评论标记为已解决
list_comment_threadsv3.4.0 — 使用 commentsExtended.xml 中类型化的 Comment.parentId 枚举评论线程(root_comment_id + 回复 + 已解决状态 + durable_id)

评论线程工具(2,v3.4.0+,解决 #29):

工具描述
get_comment_thread读取根评论并遍历子评论,获取完整回复树
sync_extended_comments报告用于三方同步规划的类型化评论数量

修订跟踪 — 接受/拒绝操作(7):

工具描述
enable_track_changes启用修订跟踪(设置 revisions.settings.author,用于解析默认作者)
disable_track_changes禁用修订跟踪
get_revisions枚举所有修订(支持 Direct Mode)
accept_revision按 ID 接受修订
reject_revision按 ID 拒绝修订
accept_all_revisions批量接受
reject_all_revisions批量拒绝

修订跟踪 — 程序化写入操作(3,v3.12.0 #45):

工具描述
insert_text_as_revision插入由 <w:ins> 修订标记包裹的文本。在 position 处分割跨越该位置的文本运行(保留之前和之后的文本及格式)。参数:doc_id、paragraph_index、position、text,以及可选的 author、date。
delete_text_as_revision使用 <w:del> 标记 [start, end) 范围内的文本运行,并将 <w:t> 替换为 <w:delText>。仅限单个段落(不支持跨段落删除)。
move_text_as_revision使用相邻的修订 ID 生成成对的 <w:moveFrom> / <w:moveTo>。不接受单段落内的移动(调用方应使用删除 + 插入)。

现有工具还新增 2 个扩展参数(增量添加,默认值为 false):

  • format_text 新增 as_revision: bool — 生成 <w:rPrChange> 修订,而非静默修改格式。还接受 run_index、author、date。
  • set_paragraph_format 新增 as_revision: bool — 生成 <w:pPrChange> 修订。

副作用约定:as_revision: true 要求此前已调用 enable_track_changes。如果修订跟踪已禁用,则会抛出 track_changes_not_enabled,而不是静默自动启用。作者解析链:显式的非空 author 参数 → revisions.settings.author → 字面值 "Unknown"。

人员 — 评论作者(4 个工具,v3.4.0+,解决 #30)
工具描述
list_people解析 word/people.xml 中的 <w15:person> 条目
add_person添加新条目;若 people.xml 不存在则自动创建该部件;重名时添加 _2 后缀
update_person更新 display_name(替换 author 属性)
delete_person移除条目;报告 comments_orphaned 数量
脚注与尾注(10 个工具)

写入 + 删除(4):

工具描述
insert_footnote插入脚注
delete_footnote删除脚注
insert_endnote插入尾注
delete_endnote删除尾注

列表 + 读取 + 更新(6,v3.4.0+,解决 #24 #25):

工具描述
list_footnotes支持 Direct Mode
list_endnotes支持 Direct Mode
get_footnote按整数 ID 读取文本 + 文本运行
update_footnote原位替换文本,保留 footnote_id(交叉引用仍有效)
get_endnote按整数 ID 读取文本 + 文本运行
update_endnote原位替换文本,保留 endnote_id
Web 设置(2 个工具,v3.4.0+,关闭 #31)
工具描述
get_web_settings解析 word/webSettings.xml 中的标志元素(relyOnVML、optimizeForBrowser、allowPNG、doNotSaveAsSingleFile);缺少时返回 { error: "no webSettings part" }
update_web_settings按键进行部分更新;如果部分不存在则自动创建
域代码(7 个工具)
工具描述
insert_if_field插入 IF 条件域
insert_calculation_field插入计算域(SUM、AVERAGE 等)
insert_date_field插入日期/时间域
insert_page_field插入页码域
insert_merge_field插入邮件合并域
insert_sequence_field插入自动编号序列
update_all_fieldsv3.1.0 — 等效于按下 F9,可在正文、页眉、页脚、脚注和尾注中重新计数 SEQ。支持章节重置:当 pStyle=="Heading N" 与 SEQ 的 resetLevel 匹配时触发
内容控件 / SDT(10 个工具,v3.9.0+ 完整读写 #44)

插入和表单辅助工具(5 个):

工具描述
insert_content_control区分 12 种类型(richText / plainText / picture / date / dropDownList / comboBox / checkBox / bibliography / citation / group / repeatingSection(不接受——请使用 insert_repeating_section)/ repeatingSectionItem)。可选参数:list_items(dropDown/comboBox 必需)、date_format、lock_type。
insert_repeating_section插入重复节(Word 2012+);接受 allow_insert_delete_sections: bool(默认为 true)
insert_checkbox插入复选框 SDT
insert_dropdown插入下拉列表 SDT
insert_text_field插入纯文本 SDT

读取工具(3 个):

工具描述
list_content_controls枚举所有 SDT,支持扁平模式(默认)或嵌套树模式(支持直接模式)
get_content_control按 id、tag 或 alias 获取单个 SDT。返回完整元数据和 <w:sdtContent> XML。会显示 not_found / multiple_matches 错误。
list_repeating_section_items按文档顺序枚举重复节 SDT 中的项目

修改工具(4 个):

工具描述
update_content_control_text替换 plainText / richText / date / bibliography / citation SDT 的文本内容。保持 <w:sdtPr> 字节级不变。picture / dropdown / combo / checkbox / group / repeatingSection 类型会返回 unsupported_type。
replace_content_control_content使用白名单验证替换整个 <w:sdtContent> XML(拒绝包含 <w:sdt>、<w:body>、<w:sectPr> 或 XML 声明的输入)
delete_content_control移除 SDT,可选择取消包裹子元素(keep_content: true 为默认值)
update_repeating_section_item按索引替换单个项目的文本(索引无效时返回 out_of_bounds)

SDT id 使用确定性的最大值加 1 分配(v3.9.0 之前为随机分配)。list_custom_xml_parts 提供空列表桩以保持向前兼容(实际实现位于 che-word-mcp-customxml-databinding Change B)。

高级功能(10 个工具)
工具描述
insert_toc插入目录
insert_table_of_figures插入图表目录
insert_index, insert_index_entry生成索引
set_paragraph_border设置段落边框
set_paragraph_shading设置段落背景颜色
set_character_spacing设置字符间距
set_text_effect设置文本动画效果
insert_horizontal_line, insert_drop_cap, insert_symbol装饰元素

注意:以上计数涵盖主要工具类别。截至 v3.13.5,工具总数为 233 个,包括文档比较、修订(读取 + 通过 <w:ins> / <w:del> / <w:moveFrom> / <w:moveTo> / <w:rPrChange> / <w:pPrChange> 进行程序化写入)、内容控件(12 种类型的 SDT 判别)、域代码、主题编辑、页眉/页脚 CRUD + 水印读取(尚未实现写入,#201/#208),支持奇偶页 + 分节链接、批注线程 + 人员(双重身份)、更新注释、Web 设置、样式(继承 + 链接 + 潜在样式 + 别名)、编号(完整定义生命周期)、分节(垂直对齐 + 页码格式 + 独立首页 + 每节引用)、表格(条件 / 嵌套 / 布局 / 缩进)、超链接(类型化 URL / 书签 / 电子邮件)以及格式辅助工具(带有 as_revision 标记)。运行服务并调用 tools/list,即可获取完整且权威的工具列表。

使用示例

创建包含标题和文本的文档
Create a new Word document called "report" with:
- Title: "Quarterly Report"
- Heading: "Introduction"
- A paragraph explaining the report purpose
Save it to ~/Documents/report.docx
创建包含表格和图像的文档
Create a document with:
- A title "Product Catalog"
- Insert an image from ~/images/logo.png
- A 4x3 table with product information
- Apply borders to the table
Save it to ~/Documents/catalog.docx
创建专业报告
Create a document with:
- Custom page margins (1 inch all around)
- A header with company name
- A footer with page numbers
- Table of contents
- Multiple sections with headings
- Footnotes for references
Save it as ~/Documents/annual_report.docx

技术细节

OOXML 结构

该服务会生成结构完整且有效的 Office Open XML 文档:

document.docx (ZIP)
├── [Content_Types].xml
├── _rels/
│   └── .rels
├── word/
│   ├── document.xml      # Main content
│   ├── styles.xml        # Style definitions
│   ├── settings.xml      # Document settings
│   ├── fontTable.xml     # Font definitions
│   ├── numbering.xml     # List definitions
│   ├── comments.xml      # Comments
│   ├── footnotes.xml     # Footnotes
│   ├── endnotes.xml      # Endnotes
│   ├── header1.xml       # Header content
│   ├── footer1.xml       # Footer content
│   ├── media/            # Embedded images
│   │   └── image*.{png,jpeg}
│   └── _rels/
│       └── document.xml.rels
└── docProps/
    ├── core.xml          # Metadata
    └── app.xml           # Application info
依赖项
  • MCP Swift SDK(v0.12.0+)— Model Context Protocol 实现
  • ooxml-swift(v0.12.0+)— OOXML 解析 + 默认保留的往返架构(PreservedArchive、RelationshipIdAllocator、ContentTypesOverlay)、FieldParser、OMMLParser、updateAllFields()、MathAccent
  • latex-math-swift(v0.1.0+)— LaTeX 子集 → OMML MathComponent AST 解析器(由 insert_equation v3.2.0+ 使用)
  • markdown-swift(v0.2.0+)— Markdown 生成
  • word-to-md-swift(v0.4.0+)— Word 转 Markdown
开发者说明 — 真实场景样例测试

Tests/CheWordMCPTests/RealWorldDocxRoundTripSmokeTests.swift 使用真实 Word 输出(例如学术论文、合同),而非合成样例,验证 ooxml-swift Reader / Writer 配对。将机密 .docx 文件放入 test-files/(已添加到 gitignore,不会进入版本控制),然后:

cd mcp/che-word-mcp
swift test --filter RealWorldDocxRoundTripSmokeTests

每个样例的断言包括:xmllint --noout 检查通过,书签 / 超链接 / fldSimple / AlternateContent 数量一致,拼接后的 <w:t> 内容的 SHA256 值匹配。如果 test-files/ 为空,测试会静默执行 XCTSkip,因此干净克隆 / CI 不会误报失败。此测试与 PsychQuant/macdoc#81 中的 .note 冒烟测试模式相同。

与其他解决方案的比较

功能Anthropic Word MCPpython-docxdocx npmche-word-mcp
语言Node.jsPythonNode.jsSwift
后端AppleScriptOOXMLOOXMLOOXML
是否需要 Word是否否否
运行时Node.jsPythonNode.js无
单一二进制文件否否否是
工具数量~10N/AN/A233
图像有限是是是
批注否有限有限是
修订否否否是
目录否有限否是
表单域否否否是

性能

Apple Silicon(M4 Max,128GB RAM)上的基准测试:

读取性能
文件大小耗时
40 KB(文档大纲)72 ms
431 KB(复杂文档)31 ms
写入性能
操作内容耗时
基本写入创建 + 3 个段落 + 保存19 ms
复杂文档标题 + 段落 + 表格 + 列表21 ms
批量写入50 个段落 + 保存28 ms
为什么这么快?
  • 原生 Swift 二进制程序 - 无解释器启动开销
  • 直接操作 OOXML - 无需启动 Microsoft Word 进程
  • 高效的 ZIP 处理 - 使用 ZIPFoundation 进行压缩
  • 内存中操作 - 仅在保存时写入磁盘

与 python-docx(启动约需 200ms)或 docx npm(启动约需 150ms)相比,che-word-mcp 的速度快 10-20 倍。

许可证

MIT 许可证

作者

Che Cheng(@PsychQuant)

贡献者
  • @ildunari — 会话状态管理(v1.17.0)

相关项目

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。