通过Safe-DOCX MCP服务器对现有(brownfield).docx文件进行精确编辑,保持格式并启用修订跟踪。当用户说“编辑这个文档”、“修改这份文件”等类似需求时使用。
编辑 .docx 文件,带有 Safe-DOCQQSafe-DOCX 是本地的MCP 服务器,用于手术编辑现有的.docx文件. .1. 它保留格式化,生成跟踪
功能概述
编辑 .docx 文件,带有 Safe-DOCQQSafe-DOCX 是本地的MCP 服务器,用于手术编辑现有的.docx文件. .1. 它保留格式化,生成跟踪是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
核心要点
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
使用与执行
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
使用 Safe-DOCX 编辑 .docx 文件
Safe-DOCX 是一个本地 MCP 服务器,专用于精准编辑已有的 .docx 文件。它保留原始格式、自动生成带修订标记(tracked-changes)的比对红标文档(redlines),且安装完成后完全在本地文件系统中运行,全程零网络活动。
源代码与审计
Safe-DOCX 完全开源(MIT 许可证)。请在安装前完整审阅其源代码:
- GitHub: https://github.com/UseJunior/safe-docx
- npm registry: https://www.npmjs.com/package/@usejunior/safe-docx
- 代码覆盖率: 每次发布均通过 Codecov 公布
- 一致性测试套件: CI 系统在每次提交时自动运行规范覆盖测试
- 无 postinstall 脚本 — 验证方式:
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 服务器运行期间)。
安装时行为(需网络连接,仅一次)
- npm registry 下载 — 推荐的连接器命令
npx -y @usejunior/safe-docx在首次运行时从registry.npmjs.org下载包;后续运行默认使用缓存副本,除非手动清空缓存。 - 无 postinstall 脚本 — 该包未声明任何
postinstall、preinstall或install钩子。可通过npm view @usejunior/safe-docx scripts验证。 - 来源可信性保障 — 所有发布版本均启用 npm provenance(
--provenance),您可据此验证该包确由 GitHub 公共仓库经 GitHub Actions 构建而成。 - 如需确保离线安装 — 请锁定特定版本并将其本地化托管(vendored)。详见下一节。
运行时行为(零网络连接)
- 仅限本地 stdio 运行时 — MCP 服务器作为子进程运行,永不绑定端口。验证方式:入口点(
src/server.ts)使用StdioServerTransport,且未配置任何 HTTP 监听器。(源码依据) - 无出站网络调用 — 运行时,该包不发起任何出站 HTTP 请求。验证方式:
grep -r "fetch|http.|https.|net." packages/safe-docx/src/在应用代码中(排除测试夹具)不返回任何匹配项。 - 路径访问策略 — 仅允许访问
~/(用户主目录)及系统临时目录下的文件。符号链接必须解析至允许的根路径内。 - 归档防护机制 — 内置 ZIP 炸弹检测与恶意载荷拦截能力,防范格式异常的
.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文件中的条款或段落 - 插入或删除内容,同时保持原有格式
- 为审阅者添加批注(comments)或脚注(footnotes)
- 基于编辑内容生成带修订标记(tracked-changes)的红标文档(redline)
- 对比两个
.docx文件并输出红标差异 - 将修订内容提取为结构化 JSON 格式
- 应用版式格式设置(如段落间距、表格行高、单元格内边距)
不适用于从零生成文档
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 创建新超链接。 标签会在新文本中被自动剥离。编辑周围文本时,原有超链接将被保留。
段落 ID 作用域限定于会话
_bk_* 书签 ID 在文档打开时动态生成,并与当前会话强绑定。请勿跨会话存储或复用这些 ID。每次操作前都应重新调用 read_file 获取最新 ID。
智能文本匹配
replace_text 对以下情况具备容错能力:
- 引号变体:直角引号
"、弯角引号u201cu201d、角括号u00abu00bb可相互匹配 - 空白符差异:多个空格、制表符、换行符会被标准化处理
这意味着您可以直接从 read_file 输出中复制文本,用作 old_string,即使底层 XML 使用了不同引号字符亦可正常匹配。
格式化标签
在 replace_text 或 insert_paragraph 的 new_string 中编写内容时,可使用内联标签施加格式:
| 标签 | 效果 |
|---|---|
text |
加粗 |
text |
斜体 |
text |
下划线 |
|
黄色高亮 |
标签支持嵌套:例如 加粗斜体。未加标签的替换文本将继承原匹配文本的格式。
使用 apply_plan 批量编辑
针对单个文档执行 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参数时自动创建 - 会话在1 小时无操作后自动过期(每次工具调用重置计时器)
- 操作完成后可调用
clear_session主动清理资源 - 文档在打开时会自动标准化:格式一致的连续段落将被合并,校对错误标记(proof-error markers)将被移除,从而提升文本匹配可靠性
版式格式设置
format_layout 可在不改动文本内容的前提下,设置段落间距、表格行高及单元格内边距。单位采用 twips(1/20 点)或 DXA(1/635 英寸)。
路径限制
默认情况下,仅允许访问 ~/(用户主目录)及系统临时目录下的文件。符号链接必须解析至允许的根路径内。
相关技能
- Open Agreements(
open-agreements)—— 填充标准法律模板(如 NDA、SAFE、云服务协议),并生成可供签署的 DOCX 文件:clawhub install open-agreements/open-agreements - Outlook Email Management(
outlook-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
热门AI工具
相关专题
本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。
0
2026.11.06
围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。
0
2026.11.06
详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。
0
2026.11.06
DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。
0
2026.11.05
DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。
0
2026.11.05
本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。
0
2026.11.04
本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.7万人学习
共6课时 | 54.7万人学习
最新文章