Pandoc MCP 服务器
一个MCP(模型上下文协议)服务器,它利用Pandoc并支持WeasyPrint PDF引擎,提供文档转换功能。包括可定制的字体、字号和CSS样式。
特点/功能
- 将Markdown转换为带有自定义字体和样式的PDF
- 在多种文档格式之间进行转换(Markdown、docx、html、pdf 等)
- 使用 WeasyPrint 作为 PDF 生成引擎(而非 LaTeX)
- 自定义字体、字体大小、边距和页面尺寸
- 应用自定义CSS以实现高级样式设计
- 列出所有支持的输入/输出格式
先决条件
- Python 3.8+
- 您的系统上已安装Pandoc
- 在您的系统上已安装WeasyPrint
- MCP包
安装
1. 安装系统依赖项
Pandoc(潘多克):
# macOS
brew install pandoc
# Linux
sudo apt-get install pandocWeasyPrint:
# macOS
brew install weasyprint
# Linux
sudo apt-get install weasyprint2. 安装Python依赖项
pip install -r requirements.txt或者手动地:
pip install pypandoc mcp3. 配置Claude代码
在您的Claude Code MCP设置中添加以下内容:~/.config/claude-code/mcp.json 或特定于项目的 .claude/mcp.json):
{
"mcpServers": {
"pandoc": {
"command": "/path/to/your/python",
"args": ["/path/to/pandoc-mcp/server.py"]
}
}
}替换 /path/to/your/python 以及你的Python解释器路径 /path/to/pandoc-mcp/server.py (用)实际路径到 server.py。
对于此次安装:
{
"mcpServers": {
"pandoc": {
"command": "/Users/ashah/miniforge3/envs/energy311/bin/python",
"args": ["/Users/ashah/work/pandoc-mcp/server.py"]
}
}
}可选:自定义临时目录
默认情况下,服务器使用系统的默认临时目录。若要指定自定义临时目录(在受限环境中非常有用),请添加 env 部分/章节:
{
"mcpServers": {
"pandoc": {
"command": "/Users/ashah/miniforge3/envs/energy311/bin/python",
"args": ["/Users/ashah/work/pandoc-mcp/server.py"],
"env": {
"PANDOC_MCP_TMPDIR": "/tmp"
}
}
}
}这个 PANDOC_MCP_TMPDIR 环境变量可以设置为任何可写目录,以便 pandoc 在转换过程中将临时文件存储在您指定的位置。
4. 重启Claude代码
更新MCP配置后,重启Claude Code以加载新服务器。
可用工具
1. convert_md_to_pdf
将Markdown内容转换为PDF,并应用可自定义的样式。
参数:
markdown_content(必填):要转换的Markdown文本output_path(必填):将PDF文件保存到哪里css(可选):自定义CSS用于样式设置font_family(可选):字体系列(默认:'Helvetica')font_size(可选):基本字体大小(默认:'11pt')page_size(可选):纸张大小(默认:'letter')margin(可选):页面边距(默认:'1英寸')
示例:
# Via Claude Code
"Convert this markdown to PDF at ./output.pdf using Arial font at 12pt"2. convert_file
将文件从一种格式转换为另一种格式。
参数:
input_path(必填):输入文件的路径output_path(必填): 保存输出文件的位置from_format(可选):输入格式(如未提供,则自动检测)to_format(可选):输出格式(根据扩展名自动检测)pdf_engine(可选):要使用的PDF引擎(默认:'weasyprint')css(可选):为PDF/HTML输出定制CSS
示例:
# Via Claude Code
"Convert document.docx to PDF using weasyprint"3. get_supported_formats
获取您的Pandoc安装所支持的所有输入和输出格式的列表。
示例:
# Via Claude Code
"What formats does pandoc support?"使用示例
示例1:将基本Markdown转换为PDF
# My Document
This is a test document with **bold** and *italic* text.
## Features
- Easy to use
- Customizable fonts
- Professional output询问Claude代码:
"Convert this markdown to PDF at ./my-document.pdf"示例2:自定义字体和大小
询问克劳德代码:
"Convert this markdown to PDF at ./report.pdf using Times New Roman at 12pt"示例3:自定义CSS样式
创建一个自定义的CSS文件:
body {
font-family: 'Georgia', serif;
font-size: 13pt;
color: #2c3e50;
}
h1 {
color: #3498db;
border-bottom: 2px solid #3498db;
padding-bottom: 6pt;
}询问克劳德代码:
"Convert this markdown to PDF using my custom CSS file at ./custom-style.css"示例4:将DOCX转换为PDF
询问克劳德代码:
"Convert my-document.docx to PDF using weasyprint"定制化
默认CSS
服务器包含一个默认的CSS模板(default-style.css(带有:
- 专业的排版设计
- 代码语法高亮
- 表格样式
- 引用块格式化
- 分页支持
在转换时,您可以修改此文件或提供您自己的CSS样式。
字体选项
您可以使用的常见字体系列:
- 衬线体: “Times New Roman”、“Georgia”、“Garamond”
- 无衬线体: “Helvetica”、“Arial”、“Verdana”
- 等宽字体: “Courier New”、“Consolas”、“Monaco”
页面大小
支持的页面大小:
letter(8.5英寸×11英寸)a4(210毫米×297毫米)legal(8.5英寸×14英寸)a3,a5,tabloid等。
边距
使用以下方式指定边距:
- 英寸:
1in,0.5in - 厘米:
2cm,2.5cm - 毫米:
20mm,25mm
故障排除
“未找到 Pandoc”
确保已安装Pandoc并且它在你的PATH环境变量中:
which pandoc
pandoc --version“未找到 WeasyPrint”
确保已安装WeasyPrint且已将其添加到您的PATH中:
which weasyprint
weasyprint --version字体问题
如果字体显示不正确,请确保它已安装在您的系统中。WeasyPrint 使用系统字体。
“权限被拒绝(只读文件系统)”
如果在PDF转换过程中遇到权限错误:
- 设置自定义临时目录 使用
PANDOC_MCP_TMPDIR在您的MCP配置中的环境变量:
{
"mcpServers": {
"pandoc": {
"command": "/path/to/python",
"args": ["/path/to/server.py"],
"env": {
"PANDOC_MCP_TMPDIR": "/tmp"
}
}
}
}- 检查错误信息 - 服务器现在包含调试信息,显示:
- 临时目录路径 - 当前工作目录 - 输出路径
- 验证写入权限 - 确保指定的临时目录对您的用户可写。
默认的临时目录位置:
- macOS(苹果电脑操作系统)
/var/folders/.../T(用户特定的) - Linux:
/tmp或者$TMPDIR - 自定义:通过设置
PANDOC_MCP_TMPDIR
MCP服务器未加载
- 检查您的MCP配置中的Python路径是否正确
- 确保
mcp并且pypandoc安装在那个Python环境中 - 检查Claude Code的日志以查找错误信息
技术细节
- 服务器: 基于Python的MCP服务器,使用
mcp包裹;软件包;程序包 - 转换器: 用途
pypandocPandoc 的封装工具/包装器 - PDF引擎: WeasyPrint(可更改为其他引擎)
- 沟通: 通过标准输入输出(stdio)进行的JSON-RPC
许可证
麻省理工学院(MIT)
做出贡献
欢迎随时提交问题或拉取请求以进行改进!
