关于 markdown-formatter
markdown-formatter 是用于转换、检查和修复 Markdown 文档的 MCP 服务,面向需要导出多种文档及平台格式的用户,并支持批量转换与文档分析。
主要功能
- 01转换为文档及平台格式
- 02跨格式批量转换文档
- 03修复并检查 Markdown
- 04提取链接、代码和文档结构
- 05支持数学公式的 PDF 和 PNG 渲染
适用场景
- 01将笔记导出为 PDF 或 DOCX
- 02为 Slack 或 Jira 整理 Markdown
- 03分享前修复格式错误的 Markdown
- 04检查文档链接、标题和统计信息
MCP 相关
它向 MCP 客户端提供格式转换、修复、检查和文档分析工具,以及提示词和资源。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
14收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| markdown | string | 是 | |
| output_path | string | 否 |
详细介绍
AI Answer Copier — MCP 驱动的多格式导出工具
5 秒内将“AI 噪声”变成“课堂可用”内容。
一个 Model Context Protocol (MCP) 服务,让你的 AI 助手能够将 Markdown 转换为 22 种专业文档格式,还可在一次调用中将多个文档批量转换为 22 种格式、分析文档、修复错误的 Markdown,并跨平台转换——所有操作都无需离开 AI 聊天界面。
npm:https://www.npmjs.com/package/@xjtlumedia/markdown-mcp-server
为什么要开发它
你让 AI 写 20 道题。它完成了。但现在你却卡住了:
| 痛点 | 手动操作 | 使用 AI Answer Copier |
|---|---|---|
| 提取问答 | 逐行复制,耗时 10–15 分钟 | 2 秒(自动检测) |
| 格式化数学公式 | 修复错误符号,耗时 20 分钟 | 即时完成(支持 KaTeX) |
| 上传至 LMS | 手动输入 CSV,耗时 15 分钟 | 一键导出 |
| 总备课时间 | 约 45–60 分钟 | 少于 1 分钟 |
生成内容只需几秒。将内容整理成实际可用的格式却要花上一小时。这个 MCP 服务彻底消除了这一差距。
在线演示
在线网页版(无需安装):ai-answer-copier.vercel.app
在 Inspector 中测试 MCP 工具:
使用实际的 MCP 实例:
全部 34 个 MCP 工具
文档转换工具(15 个)
| # | 工具 | 输出 | 描述 |
|---|---|---|---|
| 1 | harmonize_markdown | .md | 统一并规范 Markdown 语法(ATX 标题、- 列表标记、围栏代码块),不改变含义 |
| 2 | convert_to_txt | .txt | 去除所有格式,生成纯文本 |
| 3 | convert_to_html | .html | 完整的样式化 HTML 文档,支持 GFM 表格、KaTeX 数学公式和嵌入式样式表 |
| 4 | generate_html | HTML 字符串 | 生成所有样式均内联的自包含 HTML(只读,不进行文件 I/O) |
| 5 | convert_to_pdf | .pdf | 通过无头 Chromium 生成可直接打印的 PDF,支持完整的 KaTeX 数学公式和语法高亮 |
| 6 | convert_to_docx | .docx | Microsoft Word 文档,包含样式化标题、列表和代码格式 |
| 7 | convert_to_latex | .tex | LaTeX 源代码,包含 \section、列表环境,并原生传递数学公式 |
| 8 | convert_to_rtf | .rtf | 适用于旧版文字处理器和电子邮件客户端的富文本格式 |
| 9 | convert_to_csv | .csv | 将 GFM 管道表格提取为逗号分隔值 |
| 10 | convert_to_json | .json | 结构化 JSON 表示,包含章节、标题、列表、代码块和表格 |
| 11 | convert_to_xml | .xml | 格式良好的 XML,包含 <?xml?> 声明和结构化元素 |
| 12 | convert_to_xlsx | .xlsx | Excel 电子表格——每个 Markdown 表格都会转换为一个工作表 |
| 13 | convert_to_image | .png | 通过无头 Chromium 生成整页 PNG 截图 |
| 14 | convert_to_md | .md | 将 Markdown 导出到文件,可先统一格式(harmonize=true) |
| 15 | convert_to_email_html | .html | 针对电子邮件优化的 HTML,所有样式均内联,兼容 Outlook、Gmail、Apple Mail |
平台转换工具(10 个)
| # | 工具 | 目标平台 | 描述 |
|---|---|---|---|
| 16 | convert_to_slack | Slack | mrkdwn 格式——粗体使用 *,链接使用 <url|text>,标题使用粗体文本 |
| 17 | convert_to_discord | Discord | 样式化的粗体/下划线标题,保留代码块 |
| 18 | convert_to_jira | JIRA | Wiki 标记——h1./h2.、{code} 代码块、[text|url] 链接 |
| 19 | convert_to_confluence | Confluence | Wiki 标记,支持 {info}、{note} 面板和 {code:language=x} 语法 |
| 20 | convert_to_asciidoc | AsciiDoc | = 标题、---- 代码块、url[text] 链接、image:: 指令 |
| 21 | convert_to_rst | reStructuredText | 下划线标题、.. code-block:: 指令、RST 引用语法 |
| 22 | convert_to_mediawiki | MediaWiki | == 标题、'''bold'''、<syntaxhighlight> 标签、{\ wikitable |
| 23 | convert_to_bbcode | BBCode | 适用于 phpBB/vBulletin 论坛的 [b]、[i]、[code]、[url]、[img] 标签 |
| 24 | convert_to_textile | Textile | 适用于 Redmine、Basecamp 和 CMS 平台的标记 |
| 25 | convert_to_orgmode | Emacs Org Mode | * 标题、#+BEGIN_SRC/#+END_SRC 代码、[[url][text]] 链接 |
导入工具(1 个)
| # | 工具 | 描述 |
|---|---|---|
| 26 | html_to_markdown | 将 HTML 内容(完整文档或片段)转换回 Markdown |
修复与检查工具(2 个)
| # | 工具 | 描述 |
|---|---|---|
| 27 | repair_markdown | 修复 LLM 输出或复制粘贴导致的 Markdown 问题——未闭合的代码围栏、损坏的表格、游离的强调标记、缺少空格的标题、损坏的链接 |
| 28 | lint_markdown | 检查 Markdown 并以 JSON 数组报告问题,包含行号、严重级别、规则名称、消息和可修复标记 |
文档分析工具(5)
| # | 工具 | 描述 |
|---|---|---|
| 29 | extract_code_blocks | 提取所有代码块及其语言、内容和起止行号 |
| 30 | extract_links | 提取所有链接和图片及其文本、URL、行号和类型(行内、引用、图片、自动链接) |
| 31 | generate_toc | 根据标题生成 Markdown 目录,可配置 max_depth(1–6) |
| 32 | analyze_document | 全面统计——行数、字数、字符数、段落数、句子数、标题/代码/表格/链接/图片数量,以及预计阅读时间 |
| 33 | extract_structure | 文档架构概览——统计数据、标题大纲、代码块摘要、链接摘要 |
批量转换(1)
| # | 工具 | 输入 | 描述 |
|---|---|---|---|
| 34 | batch_convert | items[] × formats[] | 一次调用将多个 Markdown 文档批量转换为 22 种格式。按项目和格式隔离错误。可选 output_dir 用于输出文件。格式:txt、csv、json、xml、xlsx、latex、rtf、docx、pdf、html、md、email、slack、discord、jira、confluence、asciidoc、rst、mediawiki、bbcode、textile、orgmode |
6 个内置提示词
预配置的提示词模板,可编排多个工具:
| 提示词 | 描述 |
|---|---|
convert-document | 将 Markdown 转换为任意受支持的格式(PDF、DOCX、HTML、LaTeX、CSV、JSON、XML、XLSX、RTF、PNG、TXT、MD) |
extract-tables | 从 Markdown 中提取所有表格并导出为 CSV 或 XLSX |
format-for-sharing | 统一格式,然后转换为 PDF 和 HTML 以供分发 |
analyze-and-repair | 检查 → 修复 → 重新检查,确认所有问题均已解决 |
convert-for-platform | 将 Markdown 转换为任意平台格式(Slack、Discord、JIRA、Confluence、AsciiDoc、RST、MediaWiki、BBCode、Textile、Org Mode) |
document-overview | 完整概览——在一份报告中呈现统计数据、目录、代码块和链接 |
2 个资源
| 资源 URI | 描述 |
|---|---|
markdown-formatter://supported-formats | 包含所有 23 种以上输出格式、工具名称和类型的完整 JSON 列表 |
markdown-formatter://conversion-guide | 根据使用场景选择合适输出格式的指南 |
快速开始
通过 npx 安装(推荐)
无需安装——只需配置 MCP 客户端:
{
"mcpServers": {
"ai-answer-copier": {
"command": "npx",
"args": ["-y", "@xjtlumedia/markdown-mcp-server"]
}
}
}
全局安装
npm install -g @xjtlumedia/markdown-mcp-server
然后进行配置:
{
"mcpServers": {
"ai-answer-copier": {
"command": "markdown-mcp-server"
}
}
}
按 AI 客户端配置
🔌 Claude Desktop
编辑 %APPDATA%\Claude\claude_desktop_config.json(Windows)或 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS):
{
"mcpServers": {
"ai-answer-copier": {
"command": "npx",
"args": ["-y", "@xjtlumedia/markdown-mcp-server"]
}
}
}
重启 Claude Desktop。你会看到一个 🔌 图标——现在可以使用全部 34 个工具。
VS Code(GitHub Copilot)
添加到 .vscode/mcp.json 或 VS Code 设置中:
{
"servers": {
"ai-answer-copier": {
"command": "npx",
"args": ["-y", "@xjtlumedia/markdown-mcp-server"]
}
}
}
Cursor / Windsurf / 任意 MCP 客户端
在客户端的 MCP 配置中使用上文相同的 npx 命令模式。
DIY 版本(本地构建)
{
"mcpServers": {
"markdown-formatter": {
"command": "node",
"args": [
"YOUR_PATH_TO_PROJECT/mcp-server/dist/mcp-server/src/index.js"
]
}
}
}
将 YOUR_PATH_TO_PROJECT 替换为此文件夹的绝对路径。
HTTP 模式(Vercel)
提供托管的 HTTP 端点,供基于浏览器的集成和远程集成使用:
https://ai-answer-copier.vercel.app/api/mcp
使用 MCP Inspector 测试:
npx @modelcontextprotocol/inspector https://ai-answer-copier.vercel.app/api/mcp
用法示例
连接后,只需自然地与 AI 对话:
“同时将 5 份 Markdown 文档批量转换为 DOCX、PDF 和 HTML,并保存到我的 Downloads 文件夹。” → AI 使用
batch_convert,传入 items[] 和 formats[]
“生成 10 道关于牛顿定律的物理题,并导出为 Kahoot CSV。” → AI 使用
convert_to_csv
“将这段 Markdown 转换为 Word 文档,并保存到我的 Desktop。” → AI 调用
convert_to_docx并传入output_path
“把这些课堂笔记制作成可直接打印的 PDF。” → AI 调用
convert_to_pdf,使用 Puppeteer 渲染、KaTeX 数学公式和语法高亮
“将其转换为兼容 Moodle 的 XML 题库。” → AI 调用
convert_to_xml
“将其格式化为适用于 Slack 的内容,并发送到团队频道。” → AI 调用
convert_to_slack
“检查这份 Markdown 是否有问题,并修复问题。” → AI 先调用
lint_markdown,再调用repair_markdown
“概述这份文档——字数、结构和所有链接。” → AI 组合调用
analyze_document+generate_toc+extract_links
功能
22 种输出格式
可导出为 PDF、DOCX、HTML、LaTeX、CSV、JSON、XML、XLSX、RTF、PNG、TXT、Markdown,以及 Slack、Discord、JIRA、Confluence、AsciiDoc、RST、MediaWiki、BBCode、Textile、Org Mode 和 Email HTML。
批量转换
在一次 batch_convert 调用中,将多份 Markdown 文档转换为多种格式。错误按每个项目和格式分别处理,因此单次失败绝不会影响其他转换。
数学公式和代码是一等公民
全面支持 KaTeX 数学表达式和语法高亮代码块。你的 $\sqrt{x^2 + y^2}$ 和 Python 代码片段在每次转换后都能完好保留。
智能二进制处理
二进制格式(PDF、DOCX、XLSX、PNG)不会将原始 base64 内容直接输出到聊天中。服务会返回可执行的指引,让 AI 知道应将文件保存到指定路径。
文档分析与修复
检查 Markdown、自动修复格式问题、提取代码块和链接、生成目录,并获取全面的文档统计信息——所有操作都能在聊天中完成。
GFM(GitHub Flavored Markdown)
表格、任务列表、删除线和自动链接等内容都能通过 remark-gfm 正确解析。
由 Puppeteer 驱动的 PDF 和 PNG
PDF 和图像导出使用无头 Chromium,实现像素级精准渲染,并支持完整的 CSS 样式、KaTeX 数学公式、语法高亮和针对打印优化的布局。
独立运行
运行时不依赖任何外部 API。所有内容均在本地运行。你的数据绝不会离开你的电脑。
架构
┌─────────────────────────┐
│ AI Client │
│ (Claude, Copilot, │
│ Cursor, Windsurf) │
└──────────┬──────────────┘
│ MCP Protocol (stdio / HTTP)
▼
┌─────────────────────────┐
│ AI Answer Copier │
│ MCP Server (34 tools) │
│ │
│ ┌── Conversion ────────┐│
│ │ remark/rehype, docx, ││
│ │ puppeteer, xlsx, ││
│ │ CSV/JSON/XML/RTF/ ││
│ │ LaTeX/TXT parsers ││
│ └──────────────────────┘│
│ ┌── Platform ──────────┐│
│ │ Slack, Discord, JIRA,││
│ │ Confluence, AsciiDoc,││
│ │ RST, MediaWiki, ││
│ │ BBCode, Textile, Org ││
│ └──────────────────────┘│
│ ┌── Batch ─────────────┐│
│ │ items[] × formats[] ││
│ │ 22 formats, isolated ││
│ └──────────────────────┘│
│ ┌── Analysis ──────────┐│
│ │ Code blocks, links, ││
│ │ TOC, stats, structure││
│ └──────────────────────┘│
│ ┌── Repair ────────────┐│
│ │ Lint, auto-repair ││
│ └──────────────────────┘│
│ ┌── Import ────────────┐│
│ │ HTML → Markdown ││
│ └──────────────────────┘│
└─────────────────────────┘
v2.1.0 更新内容
此版本通过 8 项逻辑修复,增强了本地(npx)和远程 Vercel MCP 传输的健壮性:
| # | 修复 | 范围 |
|---|---|---|
| 1 | 出错时未关闭浏览器 — 在 browser.close() 外添加 try/finally,确保 Chromium 在 PDF/PNG 转换失败时也不会泄漏 | 两种传输方式 |
| 2 | generate_html 缺少 KaTeX CSS — 恢复了视口 meta 标签、KaTeX 样式表(SRI 哈希)和完整的内联样式,确保数学公式正确渲染 | Vercel /api/mcp |
| 3 | convert_to_html 样式不完整 — 添加了 SRI 完整性哈希、表格边框和引用块样式,使输出与本地一致 | Vercel /api/mcp |
| 4 | 会话映射内存泄漏 — instances Map 现在会在 30 分钟后清除过期会话(SESSION_TTL_MS);McpInstance 会跟踪 lastUsed | Vercel /api/mcp |
| 5 | 正常结束 SSE 流时未清除 keepAlive 定时器 — 添加了内层 try/finally,确保始终调用 clearInterval(keepAlive) | Vercel /api/mcp |
| 6 | 访问 SDK 内部属性 _initialized — 将裸用的 @ts-ignore 替换为 typeof 检查,确保 SDK 升级后服务能够优雅地处理错误 | Vercel /api/mcp |
| 7 | 未验证输入大小 — 为所有工具调用添加 1 GB 硬性限制(MAX_INPUT_BYTES),防止超大载荷导致 CPU/内存资源失控 | 两种传输方式 |
| 8 | DELETE 方法会创建新会话 — 处理程序现在会在收到 DELETE 时立即返回 200,避免创建虚假会话 | Vercel /api/mcp |
已知限制
- PDF / PNG 需要本地 Chromium —
convert_to_pdf和convert_to_image会启动无头浏览器。通过npx使用时运行正常,但 Vercel 免费套餐不支持(未捆绑 Chromium)。如果自动检测失败,请将PUPPETEER_EXECUTABLE_PATH环境变量设为本地 Chrome 的路径。 - Vercel 上的 Chromium 版本 — 远程端点使用
@sparticuz/chromium-min,并固定为 v131.0.1 的 tar 包。如果 Vercel 升级 Lambda 运行时,可能需要更新CHROMIUM_TAR_URL环境变量。 - 1 MB 输入限制 — 所有工具调用都会拒绝大于 1 MB 的输入。转换前请将大型文档拆分为多个部分。
- 会话 TTL(仅远程) — Vercel 端点上的会话在闲置 30 分钟后过期。长时间运行的有状态工作流应定期发送保活调用。
开发
# Clone the repository
git clone https://github.com/XJTLUmedia/AI_answer_copier.git
# Web app
npm install
npm run dev
# MCP server
cd mcp-server
npm install
npm run dev # hot reload
npm run build # production build
npm run inspector # test with MCP Inspector
技术栈
| 组件 | 技术 |
|---|---|
| MCP SDK | @modelcontextprotocol/sdk |
| Markdown 解析器 | unified + remark + rehype |
| 数学公式渲染 | remark-math + rehype-katex |
| Word 导出 | docx |
| Excel 导出 | xlsx |
| PDF/PNG 导出 | puppeteer |
| Schema 验证 | zod |
| 运行时 | Node.js(ESM) |
贡献
欢迎贡献!无论是新增导出格式、修复 Bug,还是改进文档,都欢迎提交拉取请求。
- Fork 仓库
- 创建功能分支
- 提交拉取请求
许可证
由教育工作者打造,服务教育工作者。
每周省下 5 小时。让 AI 处理格式排版。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。