通过Safe-DOCX MCP服务器对现有(brownfield).docx文件进行精确编辑,保持格式并启用修订跟踪。当用户说“编辑这个文档”、“修改这份文件”等类似需求时使用。
编辑 .docx 文件,带有 Safe-DOCQQSafe-DOCX 是本地的MCP 服务器,用于手术编辑现有的.docx文件. .1. 它保留格式化,生成跟踪是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
Safe-DOCX 是一个本地 MCP 服务器,专用于精准编辑已有的 .docx 文件。它保留原始格式、自动生成带修订标记(tracked-changes)的比对红标文档(redlines),且安装完成后完全在本地文件系统中运行,全程零网络活动。
Safe-DOCX 完全开源(MIT 许可证)。请在安装前完整审阅其源代码:
npm view @usejunior/safe-docx scripts 输出中不包含 postinstall 或 install 钩子下方所有安全声明均可通过阅读源代码进行验证。
Safe-DOCX 要求主机上已安装以下二进制程序:
| 二进制程序 | 最低版本 | 用途说明 |
|---|---|---|
node |
18.0.0 | 权威版本定义于 packages/safe-docx/package.json 的 engines 字段 |
npx |
随 npm 捆绑提供 | 推荐的 MCP 连接器使用该命令启动服务器 |
如您不希望使用 npx,请参见下方的离线 / 版本锁定安装部分获取替代方案。
Safe-DOCX 的安全模型分为两个明确阶段:安装时(下载包时)和 运行时(MCP 服务器运行期间)。
npx -y @usejunior/safe-docx 在首次运行时从 registry.npmjs.org 下载包;后续运行默认使用缓存副本,除非手动清空缓存。postinstall、preinstall 或 install 钩子。可通过 npm view @usejunior/safe-docx scripts 验证。--provenance),您可据此验证该包确由 GitHub 公共仓库经 GitHub Actions 构建而成。src/server.ts)使用 StdioServerTransport,且未配置任何 HTTP 监听器。(源码依据)grep -r "fetch|http.|https.|net." packages/safe-docx/src/ 在应用代码中(排除测试夹具)不返回任何匹配项。~/(用户主目录)及系统临时目录下的文件。符号链接必须解析至允许的根路径内。.docx 输入文件。在高安全性环境中(例如禁止 npx 自动拉取场景),请手动安装并显式锁定版本:
# 方案一:全局安装并锁定特定版本 npm install -g @usejunior/safe-docx@0.9.0 # 然后在 MCP 客户端中按路径调用: # command: "safe-docx" # args: [] # 方案二:将包本地化托管至项目中 npm pack @usejunior/safe-docx@0.9.0 # 检查生成的 tarball,再从本地磁盘安装: npm install -g ./usejunior-safe-docx-0.9.0.tgz # 方案三:从源码构建(最可审计) git clone https://github.com/UseJunior/safe-docx.git cd safe-docx git checkoutnpm ci npm run build npm link packages/safe-docx
完成任一安装方式后,您的 MCP 客户端配置如下:
{
"mcpServers": {
"safe-docx": {
"command": "safe-docx",
"args": []
}
}
}
使用 command: "safe-docx"(已安装的二进制程序)而非 command: "npx",可彻底避免每次调用时触发安装阶段的网络拉取操作。
即使使用 npx,您也可通过显式指定版本号防止意外升级:
{
"mcpServers": {
"safe-docx": {
"command": "npx",
"args": ["-y", "@usejunior/safe-docx@0.9.0"]
}
}
}
升级前,请查阅更新日志:https://github.com/UseJunior/safe-docx/blob/main/CHANGELOG.md
当您需要执行以下操作时,请使用 Safe-DOCX:
.docx 文件中的条款或段落.docx 文件并输出红标差异Safe-DOCX 仅支持编辑已存在的 .docx 文件,无法从空白创建新文档。对于全新文档生成,请使用模板填充工作流(例如 OpenAgreements)。Safe-DOCX 可在生成后的文档基础上进行下游精修。
1. read_file(file_path="~/doc.docx") → 查看段落及其稳定 _bk_* ID 2. grep(file_path="~/doc.docx", patterns=["目标短语"]) → 查找段落 ID 3. replace_text(session_id, target_paragraph_id, old_string, new_string, instruction) 4. save(session_id, save_to_local_path="~/doc-edited.docx")
步骤一 — 读取。 调用 read_file 并设置 format: "toon"(高效 token 表示法),以查看段落及其稳定的 _bk_* ID。
步骤二 — 定位。 使用 grep 配合正则表达式模式查找目标段落。该方法将返回匹配段落 ID 及其上下文。
步骤三 — 编辑。 使用 replace_text 替换段落内文本,或使用 insert_paragraph 在锚点段落前后插入新段落。
步骤四 — 保存。 调用 save 写入结果。默认 save_format: "both" 将同时生成干净副本与带修订标记的红标文档。
replace_text 要求 old_string 在目标段落中**严格匹配且仅出现一次**。若文本多次出现,则返回 MULTIPLE_MATCHES 错误。解决方法:在 old_string 中增加更多上下文。
BAD: old_string: "the Company" → 出现 5 次,失败 GOOD: old_string: "the Company shall indemnify" → 唯一匹配,成功
read_file 将脚注显示为 [^1]、[^2] 等形式,但这些标记不属于可编辑文本。您无法通过 replace_text 搜索或替换 [^1]。如需修改脚注,请使用专用工具:add_footnote、update_footnote 和 delete_footnote。
read_file 将超链接显示为 text,但您无法通过 replace_text 或 insert_paragraph 创建新超链接。 标签会在新文本中被自动剥离。编辑周围文本时,原有超链接将被保留。
_bk_* 书签 ID 在文档打开时动态生成,并与当前会话强绑定。请勿跨会话存储或复用这些 ID。每次操作前都应重新调用 read_file 获取最新 ID。
replace_text 对以下情况具备容错能力:
"、弯角引号 u201cu201d、角括号 u00abu00bb 可相互匹配这意味着您可以直接从 read_file 输出中复制文本,用作 old_string,即使底层 XML 使用了不同引号字符亦可正常匹配。
在 replace_text 或 insert_paragraph 的 new_string 中编写内容时,可使用内联标签施加格式:
| 标签 | 效果 |
|---|---|
text |
加粗 |
text |
斜体 |
text |
下划线 |
|
黄色高亮 |
标签支持嵌套:例如 加粗斜体。未加标签的替换文本将继承原匹配文本的格式。
针对单个文档执行 3 次及以上编辑操作时,建议优先使用 apply_plan,而非连续调用 replace_text。apply_plan 会在实际应用前校验全部步骤,从而提供“全有或全无”的事务语义。
1. read_file / grep → 收集段落 ID 与文本
2. apply_plan(file_path, steps=[
{ step_id: "1", operation: "replace_text", target_paragraph_id, old_string, new_string, instruction },
{ step_id: "2", operation: "insert_paragraph", positional_anchor_node_id, new_string, instruction },
...
])
3. save(session_id, save_to_local_path)
insert_paragraph 在锚点段落之前或之后插入新内容。
position: "BEFORE" 或 "AFTER"(默认为 "AFTER")style_source_id: 可选参数,指定一个 _bk_* ID,用于克隆其段落格式new_string 中使用 nn 分隔各段落(每个分隔段落将独立成段)批注(Comments):add_comment 可锚定至某一段落(亦可选择通过 anchor_text 锚定至具体文本片段)。使用 get_comments 列出批注,delete_comment 删除批注。支持通过 parent_comment_id 实现嵌套式回复。
脚注(Footnotes):add_footnote 在段落中插入脚注标记(亦可选择通过 after_text 指定插入位置)。使用 get_footnotes、update_footnote、delete_footnote 进行管理。
支持两种对比模式:
compare_documents(original_file_path, revised_file_path, save_to_local_path) —— 输出红标差异文档compare_documents(session_id) —— 将当前会话状态与原始文档进行对比对任意含修订标记的文档,可调用 extract_revisions 提取结构化 JSON 差异数据。
调用 accept_changes(session_id) 可将所有修订标记合并为干净文档,彻底清除修订标记。
file_path 参数时自动创建clear_session 主动清理资源format_layout 可在不改动文本内容的前提下,设置段落间距、表格行高及单元格内边距。单位采用 twips(1/20 点)或 DXA(1/635 英寸)。
默认情况下,仅允许访问 ~/(用户主目录)及系统临时目录下的文件。符号链接必须解析至允许的根路径内。
open-agreements)—— 填充标准法律模板(如 NDA、SAFE、云服务协议),并生成可供签署的 DOCX 文件:clawhub install open-agreements/open-agreementsoutlook-email-management)—— 使用 AI Agent 管理 Outlook 邮件:clawhub install stevenobiajulu/outlook-email-management有关 MCP 服务器配置说明(Claude Desktop、Cursor、Claude Code),请参见 CONNECTORS.md。
如本技能对您有所帮助,欢迎在 GitHub 上为我们点亮 Star:https://github.com/UseJunior/safe-docx
在 ClawHub 上执行:clawhub star usejunior/docx-editing
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章