用 AI 打印:mcp-web-print-pdf 接入指南

装好「Web打印专家」客户端之后,再给你的 AI 宿主挂一个 stdio MCP server,模型就能直接调用本机打印机打印 HTML、网页、PDF 和图片。它不改客户端、也不改 web-print-pdf 浏览器库——只是给客户端已有的本机端口再接一个客户端。

更新于 2026-10 · web-print-pdf v2.1.7 · 本地处理 · 数据不上云

它是怎么工作的

三层链路,每层都跑在你自己的机器上,没有云端中继:

  • AI 宿主(Claude Desktop / Cursor / dsh / Claude Code …)通过 npx -y mcp-web-print-pdf 启动 MCP server,走 stdio 传输。
  • MCP server 把每次工具调用翻译成客户端已有的 WebSocket 消息。
  • 客户端本地渲染 PDF 并投递系统打印队列,返回任务结果。
AI host (Claude / Cursor / dsh)
   |  stdio: npx -y mcp-web-print-pdf
   v
mcp-web-print-pdf
   |  ws://127.0.0.1:16794/websocket/standard
   v
Web Print Expert client  -->  printer

先对齐预期(这四点最容易误解)

  • 必须先装并启动客户端。MCP 只是桥,没有客户端就没有可用的打印机通道。
  • 返回「已提交」,不是「已出纸」。任务进了系统打印队列就算成功;打印机暂停、离线、缺纸时队列会停住,返回值看不出这些状态。
  • 调用即出纸。打印工具默认把任务直接投给打印机;只想先看版式时,再传 dry_run: true 预览。
  • 没有云端通道。只支持本机已启动的客户端;ChatGPT / claude.ai 网页版只接受远程 HTTP MCP,连不了本机 stdio。

未授权时正式打印会返回 Not allowed to use, please purchase authorization;先确认客户端已登录并完成授权。

前置条件

  • Web打印专家客户端已安装并运行(默认端口 16794)。还没有?先下载客户端。
  • Node.js 18+(宿主用 npx 拉起 MCP server,不需要全局安装;npm 包在这里)。
  • 宿主支持 MCP stdio:Claude Desktop、Cursor、dsh、Claude Code、VS Code Copilot、Codex CLI、Cline、Cherry Studio、Trae 等。

三步接入

① 确认客户端在线

先单独跑一次 npx -y mcp-web-print-pdf 之外的检查:打开客户端,确认它正在运行、端口没被占用。宿主真正连上后,第一个该调用的工具是 getConnectStatus。

② 在宿主里登记 MCP server

所有宿主都是同一个 stdio 命令,只是配置文件位置和顶层键不同:

{
  "mcpServers": {
    "webprint": {
      "command": "npx",
      "args": ["-y", "mcp-web-print-pdf"],
      "env": { "WEBPRINT_PORT": "16794" }
    }
  }
}

dsh 用 YAML 插入,写法不同但字段等价:

- insert:
    - id: mcp-webprint
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: webprint
        transport: stdio
        command: npx
        args:
          - '-y'
          - 'mcp-web-print-pdf'
        toolCallTimeoutMs: 180000

③ 重启宿主并确认绿灯

改完配置重启宿主,在它的 MCP 面板里确认服务已连接。模型侧看到的工具名会带命名空间,例如 mcp__webprint__printHtml;先 getConnectStatus 探活,再 printHtml 加 dry_run: true 看预览是否生成。

客户端端口默认 16794,可用 WEBPRINT_PORT 覆盖;WebSocket 请求超时默认 120 秒,可用 WEBPRINT_TIMEOUT(毫秒)覆盖。

各宿主配置位置

配置格式以各宿主当前版本文档为准;下表是常见位置,用来快速定位文件。

宿主配置位置顶层键
Claude Desktop%APPDATA%\Claude\claude_desktop_config.jsonmcpServers
Cursor~/.cursor/mcp.json 或项目内 .cursor/mcp.jsonmcpServers
dsh~/.dsh/profiles/<profile>/cordis.patch.ymlinsert(YAML)
Claude Codeclaude mcp add --scope user webprint -- npx -y mcp-web-print-pdfCLI 写入
VS Code + Copilot.vscode/mcp.jsonservers
OpenAI Codex CLI~/.codex/config.tomlmcp_servers(TOML)
Cline / Roo / Kilocline_mcp_settings.jsonmcpServers
Cherry Studio / Trae设置面板里手动添加 STDIO 服务图形界面

可用工具

工具名与 web-print-pdf@2.x 的方法名一一对应(utils. 前缀不能出现在工具名里,故省略)。

工具作用备注
getConnectStatus检查客户端是否在线打印前先探活
getPrinterList列出本机打印机(名称 + 驱动)拿到准确的 printer_name
getPrinterPapers查询某台打印机支持的纸张用于填 paper_format / print_options.bin
printHtml打印 HTML 字符串最常用;HTML 片段或完整页面都行
printHtmlByUrl抓取网页后打印可传 cookies / httpHeaders
printHtmlByBase64打印 Base64 编码的 HTML受 10MB 消息上限约束
printPdfByUrl打印 PDF 链接客户端先下载再打印
printPdfByBase64打印 Base64 编码的 PDF约 5MB 以内
printImageByUrl打印图片链接—
printImageByBase64打印 Base64 编码的图片裸 base64 会按文件头自动补前缀
printFile按本机路径打印 .pdf / .html / 图片本仓库额外提供,绕开 stdio 消息上限
batchPrint一次提交多个混合任务任务的 action 必须一致
工具作用备注
setTitle设置客户端窗口标题reset: true 恢复默认
setThemeColor设置客户端主题色
switchTabsVisibility切换标签页显隐
setContactUsTabInnerHtml设置「联系我们」页面内容

参数速查

三个 options 对象分别对应上游的三个实参:pdf_options / print_options 走客户端白名单校验(字段名写错直接报错),extra_options 允许任意自定义键并原样返回。

合并规则:对象里显式写的字段优先,便利参数只补空缺。

MCP 参数对应上游说明
内容字段第 1 个实参html / url / base64 / path / tasks
pdf_optionspdfOptions排版成 PDF:纸张、边距、页眉页脚、水印、页码、背景
print_optionsprintOptions投递打印机:打印机名、份数、单双面、缩放、纸盒、热敏锐化
extra_optionsextraOptionsaction、requestTimeout、cookies、httpHeaders、localStorages
dry_run—便利开关:传 true 只渲染预览、不出纸;不传则直接打印
paper_format / printer_name / copies—便利参数,等价于 print_options 里的同名字段

最容易踩的六个坑

  • 把 Base64 通道当文件通道用。stdio 单条消息有 10MB 上限,超了连接会被直接关闭,工具里来不及报错。大 PDF / 图片请用 printFile 或 URL 通道。
  • 宿主超时先于任务完成。多数宿主给单次工具调用约 60 秒,批量或大文件容易被掐断——拆批,或调大宿主的工具超时(如 dsh 的 toolCallTimeoutMs)。
  • 给 pdf_options.paperFormat 传自定义纸名。它只认固定枚举(A0–A6 / Letter / Legal / Tabloid / Ledger);80mm 小票、100×150 面单请改用 width + height。
  • batchPrint 的任务字段写错。每项是 { type, data, pdfOptions?, printOptions?, extraOptions? },内容放 data,不是 content / url / base64;同一批次里每个任务的 extraOptions.action 必须一致。
  • 随手开 printFile。它会读取模型指定的本机任意路径,只应在可信环境里启用。
  • 照抄旧版工具名。0.1.0 用的是 snake_case(print_html / list_printers),0.2.0 起统一成上游的驼峰方法名,旧名不再生效。

验证清单

  1. getConnectStatus:客户端在线才继续。
  2. getPrinterList:确认模型看到的目标打印机名称与你预期一致。
  3. printHtml 加 dry_run: true:返回里有预览地址 / PDF 地址,说明渲染链路通了。
  4. 正式打印:真正出纸。没动静时用系统打印队列(如 Windows 的 Get-PrintJob)看作业状态,而不是只看工具返回值。

常见问题

打印内容会离开本机吗?

不会。MCP server、客户端、PDF 渲染和打印队列都在本机;只有首次用 npx 拉取 npm 包时需要联网。数据不上云,也没有云端中继。

能在 ChatGPT 或 claude.ai 网页版里用吗?

不能。网页版只接受远程 HTTP MCP,本项目提供的是本机 stdio server。要在网页版用,需要自己在中间加一层 HTTP 桥。

它和 web-print-pdf 是什么关系?

一对一映射:printHtml、batchPrint、utils.getPrinterList 等公开 API 都有同名工具,只是把入参改成 MCP 的 JSON 形式,并额外加了 printFile(按本机路径打印)。

调用成功了但没出纸?

先检查打印机是否暂停 / 离线 / 缺纸,任务可能停在系统队列里;再确认授权状态,未授权时正式打印会报 NOTALLOWUSE。

需要单独购买吗?

MCP server 本身是 MIT 开源包,不需要额外付费;正式出纸仍然依赖「Web打印专家」客户端的授权。想先验证链路,可以传 dry_run: true 只渲染预览。

各平台客户端部署

同一套 web-print-pdf 前端代码可在 Windows、macOS、Linux/信创混合环境运行;请按终端操作系统安装对应客户端。

免费下载客户端 查看 npm 包 开发文档