关于 PolyDoc
PolyDoc 是面向需要文档渲染和发票生成的客户端的 MCP 服务,通过 PolyDoc REST API 执行操作。它可将 HTML、URL 或模板转换为 PDF 和图像,并可验证 PDF/A 与 PDF/UA 输出。
主要功能
- 01将 HTML、URL 或模板转为 PDF
- 02截取 PNG、JPEG 和 WebP 图像
- 03生成 Factur-X 和 ZUGFeRD 电子发票
- 04生成符合 PDF/A 和 PDF/UA 目标的文件
- 05使用 veraPDF 验证标准符合性
- 06将文件交付至本地、云存储或 Webhook
适用场景
- 01制作归档或无障碍 PDF
- 02将网页截取为图像
- 03根据结构化数据生成电子发票
MCP 相关
将 PolyDoc REST API 的转换和发票生成功能作为工具提供给 MCP 客户端。结果可保存至本地,也可交付到云存储或 Webhook。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y polydoc-mcpPOLYDOC_API_KEY密钥API key from dashboard.polydoc.tech.POLYDOC_SANDBOXDefault sandbox mode (watermarked, does not use production quota). A tool call can override per request. Defaults to false.POLYDOC_BASE_URLOverride for self-hosted or staging use. Defaults to https://api.polydoc.tech.POLYDOC_OUTPUT_DIRDirectory downloads are written to. Defaults to the OS temp dir + /polydoc.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
4收录的工具列表 · 更新于 1 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tag | string | 否 | 用于日志记录和分析的标签(最多 30 个字符)。 |
| url | string | 否 | 要渲染的公开 URL。请在 url、html 或 templateId 中任选其一。 |
| html | string | 否 | 要渲染的内嵌 HTML。请在 url、html 或 templateId 中任选其一。 |
| sandbox | boolean | 否 | 为本次调用覆盖服务器默认值。沙盒输出带有水印并受速率限制(约 5 次请求/秒)。 |
| timeout | integer | 否 | 转换超时时间,单位为毫秒。 |
| webhook | object | 否 | Webhook 配置;当 delivery 为 webhook 时必填。结构:{ url, async?, method?, headers?, retries? }。 |
| advanced | object | 否 | 深度合并到请求正文中的原始字段,用于指定此处未公开的 API 选项(例如 pdf.watermark、render、request)。 |
| delivery | enum | 否 | download 将文件写入本地;cloudStorage 将文件上传到预签名 URL;webhook 将文件发送到 URL。download | cloudStorage | webhook |
| filename | string | 否 | 输出文件名。文件将写入已配置的输出目录(仅限基本文件名)。 |
| pdfOptions | object | 否 | 页面布局和 PDF 合规性选项。 |
| pdfOptions.pdfa | object | 否 | 生成可归档的 PDF/A 输出。除非设置 verify,否则仅尽力实现。 |
| pdfOptions.pdfa.level | enum | 是 | 归档目标。除非下游系统要求使用 "2b" 或 "1b",否则请使用 "3b"。1b | 2b | 3b |
| pdfOptions.pdfa.verify | boolean | 否 | 使用 veraPDF 验证输出;如果不符合要求,则使请求失败(422)。 |
| pdfOptions.pdfua | object | 否 | 生成符合无障碍规范的 PDF/UA-1(ISO 14289-1)输出;强制进行带标签的渲染。除非设置了 verify,否则尽力而为。 |
| pdfOptions.pdfua.verify | boolean | 否 | 使用 veraPDF 验证输出;如果不符合要求,则使请求失败(422)。 |
| pdfOptions.scale | number | 否 | |
| pdfOptions.format | enum | 否 | A3 | A4 | A5 | Ledger | Legal | Letter | Tabloid |
| pdfOptions.tagged | boolean | 否 | 生成带标签(无障碍)的 PDF。 |
| pdfOptions.outline | boolean | 否 | 根据 HTML 标题生成 PDF 书签。 |
| pdfOptions.landscape | boolean | 否 | |
| pdfOptions.marginTop | string | 否 | 例如:"10mm"。 |
| pdfOptions.marginLeft | string | 否 | |
| pdfOptions.pageRanges | string | 否 | 例如:"1-5, 8, 11-13"。 |
| pdfOptions.marginRight | string | 否 | |
| pdfOptions.marginBottom | string | 否 | |
| pdfOptions.printBackground | boolean | 否 | |
| templateId | string | 否 | 已保存的 PolyDoc 模板 ID。必须且只能提供 url、html 或 templateId 其中之一。 |
| presignedUrl | string | 否 | 预签名 PUT URL;当 delivery 为 cloudStorage 时必填。 |
| returnBase64 | boolean | 否 | 同时在结构化输出中以 base64 格式返回文件(开销较大;适用于没有文件系统的客户端)。 |
| templateData | object | 否 | Liquid 模板的变量(与 templateId 配合使用)。 |
详细介绍
polydoc-mcp
适用于 PolyDoc 的 MCP 服务。PolyDoc 是一个 REST API,可将 HTML 或 URL 转换为 PDF、捕获屏幕截图,并生成符合欧盟要求的电子发票(Factur-X / ZUGFeRD 混合 PDF/A-3)。它让 MCP 客户端(Claude Desktop、Claude Code、Cursor 等)可以直接驱动 PolyDoc。
PDF 输出可以采用 PDF/A(归档)和 PDF/UA-1(无障碍,ISO 14289-1)标准。默认情况下,两者均尽力生成符合标准的文件;对任一选项设置 verify,即可使用 veraPDF 验证结果,并在文件不符合标准时失败,而不是返回该文件。
工具
polydoc_html_to_pdf- 将 HTML、URL 或已保存的模板转换为 PDF(布局、边距、页面格式、页面范围、书签、带标签的 PDF、PDF/A 和 PDF/UA 合规性)。polydoc_screenshot- 将 HTML、URL 或模板转换为 PNG / JPEG / WebP,并可控制视口和设备像素比。图像较小时,会以内嵌预览的形式返回。polydoc_generate_einvoice- 根据结构化发票数据生成 Factur-X 或 ZUGFeRD 混合 PDF/A-3,支持basic、en16931和extended配置文件。polydoc_test_credentials- 使用最简沙盒渲染验证配置的 API 密钥(不会消耗生产环境配额)。
内容可以来自 URL、内联的 HTML 字符串或已保存的模板(使用 Liquid templateData)。下载文件会写入本地目录,并返回文件路径;也可以将文件传送到云存储(预签名 URL)或通过 webhook 传送。
安装
需要 Node.js >= 20.15。此项目已发布到 npm,因此客户端可以使用 npx 运行:
npx -y polydoc-mcp
服务完全通过环境变量进行配置(见下文)。
配置
| 变量 | 必需 | 默认值 | 说明 |
|---|---|---|---|
POLYDOC_API_KEY | 是 | - | 来自 dashboard.polydoc.tech 的 API 密钥。 |
POLYDOC_SANDBOX | 否 | false | 默认沙盒模式(带水印、受速率限制)。工具调用可以按请求覆盖此设置。 |
POLYDOC_BASE_URL | 否 | https://api.polydoc.tech | 用于可自托管实例或预发布环境的覆盖值。 |
POLYDOC_OUTPUT_DIR | 否 | OS 临时目录 + /polydoc | 下载文件的写入位置。输出文件不会写到此文件夹以外。 |
客户端设置
Claude Desktop
将以下内容添加到 claude_desktop_config.json(Settings > Developer > Edit Config):
{
"mcpServers": {
"polydoc": {
"command": "npx",
"args": ["-y", "polydoc-mcp"],
"env": {
"POLYDOC_API_KEY": "your-key",
"POLYDOC_OUTPUT_DIR": "/Users/you/Documents/polydoc"
}
}
}
}
Claude Code
claude mcp add polydoc -e POLYDOC_API_KEY=your-key -- npx -y polydoc-mcp
Cursor
使用与 Claude Desktop 相同的 mcpServers 配置块,添加到 ~/.cursor/mcp.json(或项目中的 .cursor/mcp.json)。
输出和传送
- 下载(默认):文件会写入
POLYDOC_OUTPUT_DIR,并返回绝对路径以及元数据(大小、转换 ID、额度)。屏幕截图也会返回内嵌图像块。传入returnBase64: true还可以将字节以 base64 形式返回(数据量较大;适用于没有文件系统的客户端)。 - 云存储:设置
delivery: "cloudStorage"和presignedUrl。系统会返回上传 URL。 - Webhook:设置
delivery: "webhook"和一个webhook对象({ url, async?, method?, headers? })。
PDF/A 和 PDF/UA
polydoc_html_to_pdf 在 pdfOptions 中接受两个合规性目标:
{
"pdfOptions": {
"pdfa": { "level": "3b", "verify": true },
"pdfua": { "verify": true }
}
}
pdfa.level 可以是 1b、2b 或 3b。设置 pdfua 会强制进行带标签的渲染,因此无需同时设置 tagged。
如果未设置 verify,输出将尽力符合标准:目标是符合标准,但如果工具链无法满足所有可由机器检查的规则,请求仍会成功。如果设置 verify: true,veraPDF 将验证结果;如果文件不符合标准,系统会返回 422,而不是返回该文件。当下游系统无论如何都会拒绝不合格文件时,请使用此选项。
工具的架构中没有的选项?
每个转换工具都有一个 advanced 对象,会与请求正文进行深度合并,因此任何未作为带类型字段公开的 API 功能(例如 pdf.watermark、pdf.encryption、render、request)仍可使用。请参阅 docs.polydoc.tech 中的字段参考。
示例
每种方案的工具输入示例都位于 examples/:使用模板生成的品牌 PDF、URL 截图,以及 ZUGFeRD / EN 16931 电子发票。
开发
yarn installyarn build- 编译到dist/yarn lintyarn test- 单元测试(请求构建器、输出隔离、工具处理程序)和内存中的 MCP 往返测试POLYDOC_API_KEY=your-key yarn test:integration- 针对沙盒运行实时冒烟测试yarn scrub:check- 检查源代码和文档中是否有破折号
直接运行构建好的服务进行快速检查:
POLYDOC_API_KEY=your-key node dist/index.js
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。