关于 sow
sow 是一个 MCP 服务,可从 AI 对话创建提案、服务协议、工作说明书等 Word 文档,面向需要生成或处理业务文档的人士。它还支持 Markdown 转换、读取 DOCX 和填充现有模板,并在本地运行。
主要功能
- 01创建 Word 文档、提案和合同
- 02将 Markdown 转为 DOCX
- 03读取 DOCX 文本与结构
- 04填充模板并保留原格式
- 05生成 HTML 打印版本
适用场景
- 01从聊天生成客户提案或工作说明书
- 02将会议记录转换为 Word 文档
- 03读取现有合同或提案内容
- 04用客户资料填充 DOCX 模板
MCP 相关
向 MCP 客户端提供文档创建、读取、转换和模板填充工具,并提供最近文档资源及提案生成提示词。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
使用 Claude 创建 .docx Word 文档
说一句“为 Beta Corp 编写一份提案,重建结账流程,4,500 EUR,分三个阶段”,即可获得一份可直接发送的真实 .docx 文件。此 MCP 服务可根据聊天内容创建 Word 文档,包括提案、报价、服务协议、工作说明书和信函,并支持添加信头、标题、项目符号列表、编号列表和表格。它还可以将 markdown 转换为 .docx,将现有 .docx 读取为文本和大纲,并在你已使用的模板中填充 {{placeholders}},同时保留原文档的所有样式、表格、页眉和图片。一切都在本地运行:无需上传、无需账户,也不依赖原生组件。
已收录于官方 MCP Registry(io.github.theluckystrike/docx-document-generator-proposal-contract-markdown)。

无需模板网站或办公软件订阅,即可通过聊天创建真正的 Word 文档,包括提案、合同和信函。
60 秒安装
@theluckystrike/mcp-docx 的 npm 发布正在等待处理。在此之前,可用的方式是使用 .mcpb 一键安装包,或克隆并构建;以下两种方式均已验证。
一键安装(.mcpb):从最新版本下载 docx.mcpb,然后在 Claude Desktop 中双击:
https://github.com/theluckystrike/mcp-servers/releases/latest
(claude_desktop_config.json):
{
"mcpServers": {
"docx": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-docx"]
}
}
}
Claude Code:
claude mcp add docx -- npx -y @theluckystrike/mcp-docx
(.cursor/mcp.json):
{
"mcpServers": {
"docx": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-docx"]
}
}
}
上面的 npx 方式会在软件包发布后立即生效。在此之前,请使用上面的 .mcpb 安装包,或严格使用以下三条命令从源代码构建:
git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install
npm run build -w packages/mcp-license -w servers/docx
然后,将客户端的 command 指向 node,并传入一个参数:servers/docx/dist/index.js 的绝对路径。
要在 Pro 模式下运行,请在同一配置块中设置 MCP_LICENSE_KEY,或使用你的密钥调用一次 license_activate。
工具
| 工具 | 功能 |
|---|---|
business_set | 保存每份文档上显示的发件人资料:姓名、地址、电子邮箱、VAT 编号、IBAN、银行、徽标、信笺颜色、默认货币、税率、付款条款。字段集与 mcp-invoice 相同,因此同一份资料可供两者使用 |
doc_create | 根据各部分内容撰写 .docx:标题、段落、项目符号列表、编号列表和表格。布局:plain、letter(发件人信息块、日期、收件人)和 proposal(信笺横幅、封面标题) |
doc_from_markdown | 将 Markdown 转换为 .docx:ATX 标题、段落、项目符号列表和编号列表(保留缩进,最多支持 Word 的九级列表)、GFM 管道符表格、等宽字体的围栏代码块,以及行内的 **bold** / *italic* / `code` |
doc_read | 按文档顺序提取任意现有 .docx 中的文本、带层级的标题、列表项和表格。format: "json" 会返回内容块结构 |
doc_to_html | 将 .docx 转换为带打印样式表的语义化 HTML。这是生成 PDF 的途径——见下方说明 |
doc_fill_template | 替换 .docx 中的 {{placeholders}} 并写入新文件,同时保留所有样式、表格、页眉、页脚和图片。不传入 values 时,会列出模板包含的占位符 |
proposal_create | 创建可直接交付客户的提案:摘要、范围、交付物、时间线表格、价格、条款、有效期和签名区块,并附上永不重复使用的参考编号 |
proposal_update | 根据参考编号就地改写现有提案:仅更改你传入的字段,其余内容取自与文档一同存储的结构化数据,文件和参考编号保持不变 |
contract_create | 简洁的自由职业服务协议框架:双方、服务、期限、费用、知识产权、保密、承包商身份、终止、责任、适用法律。带有供律师填写的标注占位符的模板;不构成法律建议 |
license_status | 显示免费模式或 Pro 模式 |
license_activate | 激活 Pro 密钥(离线验证) |
资源:docs://recent 返回最近写入的 25 份文档,按时间从新到旧排列,并包含类型、客户、参考编号和路径。
提示词:write_proposal_from_hours 可将记录的工时(或来自 mcp-time-tracker 的 invoice_summary)转换为定价提案。
没有 doc_to_pdf,这是有意为之
所有纯 JavaScript 的 Word 转 PDF 方案都需要原生依赖(LibreOffice、Chromium 二进制文件、C++ 渲染库)或云 API。本项目都不提供,因此只要机器上有 Node,npx 就能运行,无需其他依赖。doc_to_html 会改为写入带打印样式表的语义化 HTML:打开后打印为 PDF,得到的效果与直接转换无异。工具描述和工具本身的回答都会明确说明这一点,因此模型不会承诺它无法生成的 PDF。
你可以这样说
| 你说 | 工具 |
|---|---|
| “设置我的信笺抬头:Acme Consulting,1 Road Warsaw,VAT PL1234567890。” | business_set |
| “为 Beta Corp 撰写一份提案:重建结账流程,4,500 EUR,五五分成,分三个阶段。” | proposal_create |
| “起草一份与 Beta Corp 的服务协议,每月 3,000 EUR,10 月开始。” | contract_create |
| “把这些会议记录整理成 Word 文档。” | doc_from_markdown |
| “给 Beta Corp 写一封信,附上星期二的议程。” | 使用 style: "letter" 的 doc_create |
| “这个 proposal.docx 实际上写了什么?” | doc_read |
| “用这位客户的资料填写我的 NDA 模板。” | doc_fill_template |
| “给我这份文档的可打印版本。” | doc_to_html |
示例
You: Write a proposal for Beta Corp. Checkout rebuild, 4,500 EUR, 50% on
signature 50% on delivery, three phases: discovery 1 week, build 3 weeks,
launch 1 week. Valid until the end of the year.
proposal_create {
client: "Beta Corp", project_title: "Checkout rebuild",
summary: "Beta Corp loses orders at checkout. This project rebuilds it.",
scope: ["Audit the current funnel", "Rebuild the checkout", "Ship and measure"],
deliverables: ["New checkout in production", "A one-page handover"],
timeline: [{phase: "Discovery", duration: "1 week"},
{phase: "Build", duration: "3 weeks"},
{phase: "Launch", duration: "1 week"}],
price: {amount: 4500, currency: "EUR", terms: "50% on signature, 50% on delivery"},
valid_until: "2026-12-31"
}
-> PROP-2026-0001, EUR 4,500.00
-> ~/.local/share/mcp-servers/docx/documents/checkout-rebuild.docx
该文件可在 Word、Pages、LibreOffice 和 Google Docs 中打开,内容包括信笺抬头、封面标题、“为 Beta Corp 准备”、摘要、工作范围、交付物、时间线表格、金额为 EUR 4,500.00 的投资表格、付款条款以及双方的签名区块。每个金额都带有货币代码,不会出现无货币代码的数字。
免费版与 Pro 版
| 免费版 | Pro 版 | |
|---|---|---|
doc_create、doc_from_markdown、doc_read、doc_to_html | 无限制 | 无限制 |
proposal_create、contract_create | 每个自然月合计 3 次 | 无限制 |
doc_fill_template | 最多包含 10 个占位符的模板 | 任意模板 |
| 页脚 | 显示“由 theluckystrike 的 mcp-docx 生成” | 无品牌标识 |
| 信头徽标和颜色 | 默认颜色,无徽标 | 使用你的 logo_path 和 brand_color |
| 表格、列表、信函和提案版式、参考编号 | 支持 | 支持 |
Pro 版为一次性付费,售价 $19;也可支付 $39,购买合集中的所有服务的终身使用权。
.docx 的生成与读取方式
文档使用 docx 编写,这是一个纯 JavaScript OOXML 写入器,无需原生模块、无头浏览器或办公软件安装。
读取和模板填充完全不需要依赖项。.docx 是 ZIP 文件,因此使用 node:zlib 打开,再通过简短的 WordprocessingML 遍历,按文档顺序提取段落、标题级别(来自 w:pStyle)、列表项和表格。通过将每个段落的 w:numId 与 word/numbering.xml 对应起来,区分编号列表和项目符号列表;这是记录这一区别的唯一位置,否则所有编号列表读回时都会变成项目符号列表。
模板填充会替换每个段落拼接后的文本,而不是逐个文本运行替换。编辑或拼写检查后,Word 经常会把你输入的 {{client}} 占位符拆分成三个文本运行({{cli、ent}}……),逐个文本运行替换会悄悄漏掉这些占位符,文档返回时仍会保留占位符。替换后的文本会写入第一个文本运行,并保留其格式;该段落中的其余文本运行则会清空。软件包中的其他所有部分都会逐字节复制,因此样式、图片、页眉、页脚和分节设置均会保留。没有对应值的占位符会保留原样并报告,绝不会被清空。
绝不会覆盖现有文件
所有写入文件的工具(doc_create、doc_from_markdown、doc_to_html、doc_fill_template、
proposal_create、contract_create)都会拒绝使用已存在的 out_path,并告知你:
Error: /path/acme-proposal.docx already exists and nothing was written.
Pass overwrite: true to replace it, or give a different out_path.
路径通过独占创建来预留,而不是通过检查是否存在来预留,因此两个进程同时写入同一个
out_path 时,不会互相覆盖:一个进程会成功,另一个会被拒绝且不会写入任何内容。
如果不传入 out_path,文件名会根据标题生成,而且生成的路径不会与之前的文档重名:标题相同的第二份提案会保存为 ...-2.docx。若要修改已发送的提案,请改用
proposal_update {reference}:它会根据已存储的结构化数据重写同一个文件,并保留参考编号。
检查会在构建或写入任何内容之前运行,因此被拒绝的调用不会改动磁盘,也不会消耗参考编号。若要替换文件,请传入 overwrite: true。
Word 无法处理的字符
XML 1.0 允许 TAB、LF 和 CR,但不允许其他控制代码。每个写入 word/document.xml
的字符串都会先经过清理:移除控制代码和未配对的代理项,将字面量 \n 转义序列转换为实际段落换行,并合并多余空白。如果移除了任何内容,工具会在答复中说明,而不会交给你一个 Word 会提示修复的文件。
数据存储方式
业务资料、文档登记簿和编号计数器以纯 JSON 格式存放在
${XDG_DATA_HOME:-~/.local/share}/mcp-servers/docx/ 下;如果不传入 out_path,生成的文件会存放在
documents/ 子文件夹中。每次修改操作都会在 .../docx/.lock 上获取建议锁,因此同一数据目录下的两个客户端不会分配相同的编号,也不会丢失记录。数据会先保存到临时文件,再重命名到目标位置。
如果其中某个 JSON 文件无法读取或不是有效的 JSON,系统绝不会将其视为“空文件”。该文件会按字节原样移至 <name>.json.corrupt-<timestamp>,并写入 <name>.json.corrupt 标记;在你恢复有效副本并删除标记之前,每个工具都会返回 data file is corrupt; moved to ...; nothing was written。
提案编号格式为 PROP-YYYY-NNNN,协议编号格式为 AGR-YYYY-NNNN。计数器会在记录存储前写入,因此即使发生崩溃,也只是烧掉一个编号,而不会重复使用;系统还会扫描现有编号,确保恢复的登记簿不会再次发放已出现在已发送文档中的编号。
限制和注意事项
- 不支持 PDF 输出。请使用
doc_to_html并打印。原因请参阅上文。 doc_read仅读取.docx。对于旧版.doc、.rtf和 Pages 文件,系统会拒绝读取并说明原因。doc_read会提取文本结构:标题、段落、列表和表格。不会报告字体、颜色、批注、修订、脚注或嵌入的图片。doc_fill_template会将其重写的整个段落统一为首个文本片段的格式。占位符前后混有粗体和常规文本的段落,返回时会统一采用首个文本片段的格式。contract_create会生成包含[BRACKETED PLACEHOLDERS]的合同草稿框架,并在文档本身注明该文档是模板,不构成法律建议。这里的任何内容都未经任何司法辖区的律师审核。- 免费版每个自然月最多可创建 3 份提案和合同,二者合计计数,并于每月 1 日重置。其他功能在达到限额后仍可无限使用。
隐私
所有数据都保存在本地。服务会读取和写入你计算机上的文件,将登记簿存放在你的数据目录中,并且不会发起任何网络请求;不会联网进行许可证验证(密钥会离线验证)、获取字体或收集遥测数据。
可搭配使用
- mcp-invoice,使用相同的
business_set资料结构;你接受的提案会成为你发送的发票。 - mcp-time-tracker,
write_proposal_from_hours提示词会将invoice_summary中的工时转换为定价后的提案。 - mcp-expense-tracker,报价项目时可将其代垫成本一并计入。
- office-suite,通过一次安装运行多个服务,并使用一个配置条目。
故障排除
npx卡住或无法找到软件包:此软件包的 npm 发布尚未完成。在发布完成前,请使用.mcpb压缩包或上文所述的克隆并构建方式。- 显示“Wrote ... .docx”,但 Word 无法打开文件:请检查文件路径是否位于仍在上传的同步文件夹中。工具返回时文件即已完整写入;不会逐步写入。
- 占位符未被替换:调用
doc_fill_template时不传入values,即可列出模板中实际包含的占位符。名称必须完全匹配,{{ }}内的空白会被忽略,响应会列出你传入但模板中不存在的每个键。 - 信头显示“Your business”:运行一次
business_set。即使缺少资料,也不会阻止生成文档;响应会说明发件人信息是占位内容。 - 文档中没有徽标:徽标是 Pro 功能,且
logo_path必须指向现有的 PNG、JPG 或 GIF 文件。 - Node 版本:需要 Node >= 18。使用
node -v检查。
采用 MIT 许可证。支持邮箱:[email protected]
由 theluckystrike 构建。
整个套件共用一个业务资料档案
你的身份信息只需存储一次,路径为 ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json,
套件中的每个服务都会读取它:发票开具方、docx 信头、定期发票开具方、expense-tracker 的默认 VAT 税率、time-tracker 和 timezone 的本地区域,以及
简历和合同的信头。只需通过 business_set(invoice 或 docx)设置一次,之后无需在其他地方重复填写。电子邮件地址只会取自该资料档案或明确传入的参数;如果其中没有存储电子邮件地址,文档会显示 [add: email],工具也会明确说明,而不会让任何人自行编造地址。
常见问题
有用于 Word 文档(.docx)的 MCP 服务吗?
有。mcp.zovo.one 上的 docx 服务可通过 Claude 创建 .docx 文件:包括基于模板的文档、标题、表格和格式设置,以及批量生成。提供免费套餐、托管端点或一键安装的 .mcpb。
如何通过 Claude 创建 .docx?
连接 https://mcp.zovo.one/mcp/docx 并描述文档内容——“创建一个包含以下三个部分和一个定价表的 proposal.docx。”文件会写入你的本地存储目录。
将这些文档用作 MCP 服务
任何 MCP 客户端(Claude、Cursor、Windsurf、VS Code)都可以通过 GitMCP 直接读取此代码库的文档——无需安装:
- 文档 MCP URL:https://gitmcp.io/theluckystrike/mcp-docx
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。