mcpField
M
Markdown to Word

Markdown to Word

本地服务
md2word.app生产力1今天更新

关于 Markdown to Word

Markdown to Word 将 GitHub Flavored Markdown 转换为格式化的 Word 文档,提供浏览器、Node.js、命令行和 MCP 使用方式。转换可在本地完成,并支持中文公文样式预设。

主要功能

  1. 01转换标题、列表、表格及常见 Markdown 格式
  2. 02输出 DOCX 文件或复制格式化文本
  3. 03提供中文公文字体与页面预设
  4. 04支持浏览器、Node.js 和命令行转换

适用场景

  1. 01将 AI 聊天回复整理为 Word 文档
  2. 02把 Markdown 报告转换为 DOCX
  3. 03为中文公文格式化 Markdown 文档

MCP 相关

MCP 服务通过 stdio 提供 `convert_markdown_to_word` 工具,可读取 Markdown 文本或文件并写出 DOCX。转换在本机执行,不下载远程图片。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"benbalter-markdown-to-word": {
"command": "npx",
"args": [
"-y",
"markdown-to-word"
]
}
}
}
启动命令npx -y markdown-to-word

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmarkdown-to-word0.4.0

工具

1

收录的工具列表 · 更新于 1 周前

参数类型必填说明
pathstring否要转换的 Markdown 文件(.md、.markdown、.mdown 或 .txt)的路径,用于替代 markdown。相对路径以服务的工作目录为基准,因此建议使用绝对路径。
markdownstring否要转换的 Markdown。传入 path 时请省略。
overwriteboolean否如果 output_path 已存在,则替换该文件。默认关闭,因此不会意外覆盖现有文件。
font_presetenum否重新设置文档样式:chinese-official 会按照 GB/T 9704-2012 设置中文公文的字体、字号和页面布局。省略时使用 Word 默认样式。chinese-official
output_pathstring是写入 .docx 的位置;路径必须以 .docx 结尾。建议使用绝对路径。缺失的文件夹会自动创建。绝不会通过符号链接写入。

详细介绍

Markdown 转 Word

npm version npm downloads MCP registry CI License: MIT

在浏览器中将 GitHub Flavored Markdown 转换为格式精美的 Word(.docx)文档,访问 md2word.app 即可。不会上传任何内容。

同一款转换器也发布在 npm 上,名为 markdown-to-word:可作为命令行工具、Node 库和供 AI Agent 使用的 MCP 服务,无需克隆:

npx markdown-to-word input.md

它与 word2md.com(word-to-markdown-js)方向相反,后者可将 Word 转换为 Markdown;它也是 markdown_to_word 的继任者。后者是最初的 Ruby gem 和 Web 演示版,于 2015 年首次发布,现已归档。

用法

  1. 访问 md2word.app。
  2. 将 .md 文件拖放到页面任意位置,选择文件,或粘贴 Markdown。AI 聊天回复(ChatGPT、Claude 等)采用 Markdown 格式,可直接粘贴。
  3. 拖放文件后会立即转换。对于粘贴的文本,点击 转换为 Word,或按 Ctrl/⌘+Enter。
  4. 点击 下载 .docx,或点击 复制格式化文本,即可将保留格式的内容直接粘贴到 Word 或 Google 文档中。

文档会以其第一个标题命名,该标题也会成为文档标题。

转换效果

Markdown在 Word 中
# 到 ###### 标题标题 1–6 样式
**粗体**、*斜体*、~~删除线~~相同的格式
项目符号列表和编号列表(含嵌套)Word 列表
- [x] 任务列表☒(已完成)和 ☐(待办)项,因为 Word 无法显示 HTML 中的复选框
表格细边框、每页重复显示的粗体标题行,以及 Markdown 中的列对齐方式
[链接](https://example.com)可点击的超链接
`行内代码` 和围栏代码块等宽字体;代码块保留换行
> 块引用左对齐段落,每层嵌套缩进一级
--- 水平分隔线横跨页面的一条线
[^1] 脚注上标数字,注释以编号列表形式置于文档末尾的一条线之后(并非 Word 脚注)
![图片](https://example.com/a.png)浏览器可获取图片时嵌入图片;否则显示链接到图片的替代文本(参见限制)
<kbd>、<mark>、<abbr> 和其他行内 HTML显示文本,其中 <kbd> 使用代码字体,<mark> 使用高亮样式

与 GitHub 一样,段落中的单个换行会合并到同一行,因此硬换行的文件会转换为普通段落。在行尾添加两个空格或一个反斜杠即可强制换行。

可选字体预设

转换默认使用 Word 的标准样式。从 样式 菜单中选择 中国公文,即可将生成的文档改为符合 GB/T 9704-2012《党政机关公文格式》的版式。(在中文页面上始终显示此菜单;在其他页面上,当粘贴的文本大部分为中文时也会显示。)每个级别都会设置一种东亚字体和一种公文字号,同时保留 Times New Roman:

级别字号汉字拉丁字母和数字
正文三号 (16pt)仿宋Times New Roman
标题 1二号 (22pt)方正小标宋简体Times New Roman
标题 2三号 (16pt)黑体Times New Roman
标题 3三号 (16pt)楷体Times New Roman
标题 4三号 (16pt)仿宋 (粗体)Times New Roman
标题 5-6三号 (16pt)仿宋Times New Roman

此预设还会设置页面:

  • 纸张和页边距(5.1、5.2.1): A4 纸,上边距(天头)为 37mm、左边距(订口)为 28mm,正文区域(版心)为 156 × 225mm。
  • 每页 22 行、每行 28 字(5.2.3): 设置 Word 文档网格,并将行距精确设为网格行距 28.95pt。关闭孤行控制,避免某一行被推到下一页,导致页面只剩 21 行。
  • 缩进(7.3.3): 段落和标题下方的各级标题均首行缩进 2 个字符。表格单元格、列表项和代码块不缩进。
  • 标题(7.3.1): 标题 1 居中。
  • 间距: 所有级别的段前段后均为 0 行。

应用会在此浏览器中记住你的选择,并在你粘贴的文本大部分为中文时推荐此预设。

Word 会按字符类别分别确定字体,因此中文句子中的英文单词和数字仍使用 Times New Roman。打开文档的设备必须安装这些字体。部分设置超出了标准要求:

  • 标准没有指定拉丁字体。拉丁字母和数字使用 Times New Roman 是常见做法。
  • 标准规定使用小标宋体,并未特别指定方正小标宋简体。方正小标宋简体是方正的商业字体,大多数设备都没有安装;如果未安装,Word 会为标题替换其他字体。
  • 标题 4,即标准中的三级标题(1.),设置为粗体;标准并无此要求,通常三级和四级标题都使用常规字重的仿宋。实际公文中通常会将这一级标题加粗。标题 5 和标题 6 保持常规字重,依靠编号((1)和 ①)突出显示,与印刷公文相同。

目前尚未添加页码(7.5),请参阅 #106。红色分隔线和其他版头要素也尚未添加,因为 Markdown 无法表达这些内容。

以编程方式设置:

import {
  convertMarkdownToWord,
  CHINESE_OFFICIAL_DOC_FONTS,
} from 'markdown-to-word';

const blob = await convertMarkdownToWord(markdown, {
  fontPreset: CHINESE_OFFICIAL_DOC_FONTS,
});

如果同时传入 pageMargins,它会优先于预设的页边距;文档网格会根据文档最终采用的页边距进行调整。

隐私

转换完全在浏览器中进行:你的 Markdown 和 Word 文档不会离开你的设备。Markdown 链接的图片会像任何网页上的图片一样从其托管网站加载。md2word.app 使用无 Cookie 的 Cloudflare Web Analytics,并匿名统计转换次数(每次转换是否成功;如果失败,则统计失败原因、页面语言和启动方式;绝不收集内容、文件名、大小或任何可识别你身份的信息);本地副本或自托管副本均不会发送任何数据。预览中的原始 HTML 会经过清理,因此共享的文件无法运行脚本。请参阅隐私政策。

限制

  • 仅当浏览器能够获取图片时才会嵌入图片:data: URI,以及服务器允许跨源请求的网页 URL(大多数图片托管服务和 CDN 都允许)。其他图片(包括本地文件路径)会显示其替代文本;如果有图片 URL,则替代文本会链接到该 URL。
  • 脚注会作为编号列表显示在文档末尾,而不会作为 Word 脚注显示在每页底部。
  • 数学公式会保留为原样文本:$x^2$ 会显示为 $x^2$,而不是公式。
  • 不会转换 :tada: 这类 Emoji 短代码;请直接粘贴 Emoji 本身。
  • 指向同一文档中标题的链接([see below](#usage))在 Word 中不会跳转。
  • <details> 部分会被展开:摘要和隐藏内容都会以普通段落的形式显示。
  • Markdown 中复杂的原始 HTML 可能无法正确转换,也不会生成高级 Word 功能(批注、修订跟踪、页面布局)。
  • 由于所有处理都在浏览器中进行,超大文档可能会运行缓慢。文件大小限制为 5 MB。
  • 本网站可在当前版本的 Chrome、Edge、Firefox 和 Safari 中运行。端到端测试在 Chrome 中运行。

命令行

使用 npx 直接运行(下载并运行最新发布版本):

npx markdown-to-word report.md

也可以全局安装,以使用 md2w 命令:

npm install -g markdown-to-word
md2w report.md

它会在输入文件旁写入 .docx 文件,并使用相同的名称(report.md 会变成 report.docx);如果文件已存在,则会替换该文件,并将写入位置打印到 stderr。它需要 Node 22.12 或更高版本;如果文件缺失或为空,则会显示消息并以状态码 1 退出。

要从 stdin 读取 Markdown,请将 - 作为文件传入,或者省略文件并通过管道传入 Markdown。此时没有可用的文件名,因此必须指定 -o:

cat reply.md | md2w -o reply.docx
md2w - -o - < report.md > report.docx

选项:

  • -o, --output <file>:将 .docx 写入 <file>,并按需创建文件夹。-o - 会将其写入 stdout。
  • --font-preset <name>:使用字体预设重新设置文档样式。chinese-official 是 可选字体预设 中介绍的中文公文样式。
  • -q, --quiet:除错误外,不向 stderr 打印任何内容。
  • -V, --version:打印版本号。

MCP 服务

md2w mcp 会在标准输入/输出上运行本地 Model Context Protocol 服务,让 AI Agent 可以在你的机器上将 Markdown 转换成 Word 文档。和网站一样,它绝不会上传任何内容:服务会在进程内完成转换,并将 .docx 写入磁盘。

在 Claude Desktop 中只需单击一次:下载 markdown-to-word.mcpb,然后双击。Claude Desktop 会将其安装为扩展。你不需要 Node 或终端,因为 Claude Desktop 已内置 Node。

将其添加到 Claude Code:

claude mcp add markdown-to-word -- npx -y markdown-to-word mcp

或者添加到任何接受 JSON 配置的 MCP 客户端:

{
  "mcpServers": {
    "markdown-to-word": {
      "command": "npx",
      "args": ["-y", "markdown-to-word", "mcp"]
    }
  }
}

它提供一个工具:convert_markdown_to_word:

  • markdown 或 path(必须且只能填写其中一项):Markdown 字符串,或 Markdown 文件的路径(.md、.markdown、.mdown 或 .txt)。建议使用绝对路径;相对路径将相对于服务的工作目录解析。
  • output_path(必填):.docx 文件的写入路径;必须以 .docx 结尾。缺失的文件夹会自动创建。
  • overwrite:如果 output_path 已存在,则替换它。默认关闭,因此工具会拒绝覆盖现有文件并说明原因。
  • font_preset:使用 chinese-official 表示公文样式;省略则使用 Word 默认样式。

它会返回 output_path、文件大小(以 bytes 为单位)以及任何 warnings(未下载的远程图片,或不得不跳过的 .docx 补丁),并将这些内容作为结构化内容返回。

Agent 可能会遵循它从文档或网页中读取的指令,因此该工具限制了可被诱导执行的操作:它只读取 Markdown 文件,只写入 .docx 文件,绝不通过符号链接写入,也绝不在未获请求的情况下替换文件。它也绝不下载远程图片,因为文档中的 URL 可能指向任何位置,包括你自己的网络:这些图片会以链接形式显示在文档中。若 Agent 需要嵌入图片,可以自行获取图片,并以 data: URI 的形式将其放入 Markdown。由你运行的 CLI 没有这些限制,并且会像网站一样嵌入远程图片。

在浏览器中,md2word.app 会注册同一转换功能作为 WebMCP 工具 convert_markdown_to_docx(接受 markdown,以及可选的 filename 和 font_preset),供支持它的浏览器中的 Agent 使用。它会像粘贴内容一样在当前标签页中运行,在页面上显示结果,并以 base64 格式返回 .docx。页面还会尝试下载文件;如果没有人点击,浏览器可能会阻止下载。

在代码中使用

该转换器也已发布到 npm,包名为 markdown-to-word,适用于 Node 22.12+,也可通过打包工具(Vite、webpack、esbuild)在浏览器中使用:

npm install markdown-to-word

convertMarkdownToWord 会以 Blob 形式返回 .docx:

import { writeFile } from 'node:fs/promises';
import { convertMarkdownToWord } from 'markdown-to-word';

const blob = await convertMarkdownToWord('# Hello\n\nFrom **Markdown**.', {
  pageMargins: { top: 1, right: 1, bottom: 1, left: 1 }, // inches
});
await writeFile('hello.docx', Buffer.from(await blob.arrayBuffer()));

在浏览器中,使用 URL.createObjectURL(blob) 将 Blob 交给下载链接。

转换器需要 DOM 中的 DOMParser 和 XMLSerializer。浏览器已提供这两个对象;在 Node 中,如果缺少它们,软件包会通过 jsdom 将其设为全局对象,因此无需进行任何设置。

该软件包还导出了 parseMarkdownToHtml、extractTitle、FONT_PRESETS(参见可选字体预设)以及相应的 TypeScript 类型。parseMarkdownToHtml 会原样传递未经清理的 HTML,因此在将其输出放入页面之前,请先进行清理(例如使用 DOMPurify)。

在服务器上,应将用户提供的 Markdown 视为不可信内容:转换器会下载每张远程图片(![](https://…))并将其嵌入文档,因此请求会从你的服务器发出(每份文档最多处理 100 个不同的 http(s) URL,每个最大 10 MB,同时最多处理 4 个)。如果服务器能够访问内部地址,请先移除图片 URL 或将其加入允许列表。

开发

需要 Node.js 22.12 或更高版本(.nvmrc 指定了 CI 使用的版本)。

git clone https://github.com/benbalter/markdown-to-word-js.git
cd markdown-to-word-js
npm install
npm run dev        # http://localhost:4321
npm run build      # static site in dist/
npm test           # unit tests; npm run test:e2e for Playwright

有关项目结构和检查项,请参阅 CONTRIBUTING.md。

  • **网站:**使用 Astro 和 Tailwind CSS,并采用 word2md.com 的设计系统。
  • **转换:**使用 marked 将 Markdown 转换为 HTML,使用 @turbodocx/html-to-docx 生成 .docx,并通过 JSZip 修复代码块、分隔线、表格标题和字体预设。
  • **翻译:**UI 已支持添加更多语言;请参阅 web/i18n/README.md。
  • **托管:**Cloudflare Workers Static Assets。推送到 main 后会进行构建、运行测试并部署;请参阅 docs/cloudflare.md。

贡献

欢迎贡献。请参阅 CONTRIBUTING.md,并针对 Bug 和功能请求提交问题。

许可证

MIT。请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

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

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