智睦云打印
Official# 智睦云打印MCP
`webprinter_mcp` 是一个用于云打印的 MCP Server。
如果你的 MCP 客户端支持 `stdio` 类型的 MCP,就可以通过它完成文件上传、查询打印机、提交打印任务和直接打印。
## 它可以帮你做什么
你可以把它理解成一个“会帮你处理打印任务的工具”。
比如你可以对接入了这个 MCP 的 AI 说:
- “帮我看看现在有没有可用打印机”
- “把这个文件上传一下,准备打印”
- “把这个文件加入打印队列”
- “直接打印到办公室那台打印机”
- “把刚才那个任务改成双面”
## 使用前先准备
你需要先安装智睦云打印服务器,并完成打印机的共享。请从智睦云打印获取安装包:
- `https://any.webprinter.cn`
然后,你需要拿到云打印访问令牌(token)。
获取地址:
- `[https://any.webprinter.cn/get-ai-server-token](https://any.webprinter.cn/get-ai-server-token)`
拿到 token 之后,设置环境变量:
- `WEBPRINTER_ACCESS_TOKEN`:必填
## 安装
### 用 pip 安装
```bash
pip install webprinter_mcp
```
### 或者从源码安装
```bash
pip install .
```
## 启动方式
如果你只是想确认它在本地能不能启动,可以运行:
```bash
webprinter_mcp
```
或者:
```bash
python -m webprinter_mcp
```
注意:这个命令启动后通常不会主动打印提示信息。
它会进入等待 MCP 客户端连接的状态,这是正常现象。
## 在 MCP 客户端里怎么配置
当前这个项目更适合以 `stdio` 方式接入。
### 本地 Python 方式
如果你已经在本机装好了这个包,推荐这样配:
```json
{
"type": "stdio",
"config": {
"mcpServers": {
"webprinter": {
"type": "stdio",
"command": "webprinter_mcp",
"args": [],
"env": {
"WEBPRINTER_ACCESS_TOKEN": "your-access-token"
}
}
}
}
}
```
### npx 方式
如果你的客户端支持 `npx` 风格,也可以这样配:
```json
{
"type": "stdio",
"config": {
"mcpServers": {
"webprinter": {
"type": "npx",
"command": "npx",
"args": ["-y", "webprinter_mcp"],
"env": {
"WEBPRINTER_ACCESS_TOKEN": "your-access-token"
}
}
}
}
}
```
注意:如果你用 `npx webprinter_mcp`,本机依然需要有可用的 Python 运行环境。
### 直接使用 `mcpServers` 配置
如果你的 MCP 客户端直接接收 `mcpServers` 结构,也可以直接使用下面这段配置:
```json
{
"mcpServers": {
"webprinter": {
"args": [
"-y",
"webprinter_mcp"
],
"command": "npx",
"env": {
"WEBPRINTER_ACCESS_TOKEN": "your-access-token"
},
"type": "npx"
}
}
}
```
其中:
- `WEBPRINTER_ACCESS_TOKEN`
- 需要先从 `https://any.webprinter.cn/get-ai-server-token` 获取
- `command` 和 `args`
- 表示通过 `npx webprinter_mcp` 启动 MCP Server
- `type`
- 表示当前客户端使用 `npx` 方式接入
## 工具列表
当前 MCP Server 提供以下工具:
- `check_install_progress`
- 检查当前账号和设备环境是否已经具备云打印能力
- `query_printers`
- 查询当前账号可用的打印机列表
- `query_printer_detail`
- 查询指定打印机或共享设备的详细能力信息
- `upload_file`
- 上传本地文件,并返回可用于打印的公网地址
- `create_roaming_task`
- 根据文件 URL 创建漫游打印任务
- `update_printer_side`
- 修改漫游打印任务的单双面设置
- `update_printer_color`
- 修改漫游打印任务的彩色/黑白设置
- `update_printer_copies`
- 修改漫游打印任务的打印份数
- `update_printer_paper`
- 修改漫游打印任务的纸张大小,支持 `A3`、`A4` 等预设纸型,也支持自定义宽高
- `direct_print_document`
- 把文件直接发送到指定打印机进行打印
你也可以把它理解成一套完整的打印流程能力:
1. 先检查环境:`check_install_progress`
2. 再查看打印机:`query_printers` / `query_printer_detail`
3. 上传文件:`upload_file`
4. 创建漫游打印:`create_roaming_task`
5. 按需调整任务参数:`update_printer_side` / `update_printer_color` / `update_printer_copies` / `update_printer_paper`
6. 或者直接打印:`direct_print_document`
## 工具说明
下面按“用途、行为、关键参数、使用建议”的方式说明每个工具,方便在 MCP 平台、目录站和接入文档里展示。
### `check_install_progress`
- 用途
- 检查当前账号、客户端和打印环境是否已经具备可用的云打印能力
- 什么时候用
- 第一次接入时先调用
- 遇到无法打印、查不到打印机、任务提交失败时优先调用
- 行为
- 向云打印平台查询当前安装和配置状态
- 不修改任何打印任务
- 参数
- 无
- 返回结果
- 返回当前环境检查结果,通常可用于判断客户端、设备或共享配置是否完成
- 使用建议
- 推荐把它作为所有打印流程的第一步
- 示例说法
- “先检查一下当前环境能不能用云打印”
### `query_printers`
- 用途
- 查询当前账号下可用的打印机列表
- 什么时候用
- 用户想查看可用打印机时
- 直接打印前先确认目标打印机是否存在时
- 行为
- 返回打印机列表
- 对隐藏打印机会标记为仅支持漫游打印任务
- 参数
- 无
- 返回结果
- 常见字段包括打印机名称、别名、在线状态、控制端编号、是否隐藏等
- 使用建议
- 如果用户说“打印到某台打印机”,建议先调用这个工具确认设备名称和控制编号
- 示例说法
- “帮我看看当前有哪些可用打印机”
### `query_printer_detail`
- 用途
- 查询某台打印机或共享设备的详细能力信息
- 什么时候用
- 用户需要确认设备支持的能力时
- 在打印前确认设备类型、共享编号或详细参数时
- 行为
- 根据打印机名称、共享编号或设备类型返回详细信息
- 参数
- `printer_name`
- 打印机名称,可选
- `share_sn`
- 共享设备编号,可选
- `device_type`
- 设备类型,可选,支持 `printer`、`scanner`、`camera`
- 返回结果
- 返回指定设备的详细能力或配置数据
- 使用建议
- 至少提供一个过滤条件,避免查询范围过大
- 示例说法
- “帮我看看前台那台打印机支持什么能力”
### `upload_file`
- 用途
- 上传本地文件,并换取后续打印可使用的公网 URL
- 什么时候用
- 源文件在本地磁盘上时
- 漫游打印或直接打印前还没有公网文件地址时
- 行为
- 读取本地文件并上传到云端
- 返回一个可被打印服务读取的文件地址
- 参数
- `file_path`
- 本地文件路径,必填
- 返回结果
- 返回上传后的文件信息和可访问地址
- 使用建议
- 如果文件已经是公网 URL,可以跳过这个步骤
- 示例说法
- “把我桌面上的 PDF 上传一下,给我一个可打印地址”
### `create_roaming_task`
- 用途
- 创建漫游打印任务,让文件进入打印队列等待后续处理
- 什么时候用
- 用户想先生成打印任务,而不是立刻打印到某一台设备时
- 行为
- 根据文件名、文件 URL 和文件类型创建一个漫游打印任务
- 成功后返回任务 ID
- 参数
- `file_name`
- 文件显示名称,必填
- `url`
- 文件公网地址,必填
- `media_format`
- 文件格式,必填,支持 `PDF`、`PNG`、`JPG`、`WORD`、`EXCEL`、`PPT` 等
- 返回结果
- 返回新创建的漫游任务 ID
- 使用建议
- 后续如果要改单双面、颜色、份数、纸张,都需要先有这个任务 ID
- 示例说法
- “把这个文件提交成一个漫游打印任务”
### `update_printer_side`
- 用途
- 修改漫游打印任务的单双面设置
- 什么时候用
- 用户明确说单面、双面、长边翻转、短边翻转时
- 行为
- 根据任务 ID 更新任务的打印面设置
- 参数
- `task_id`
- 漫游任务 ID,必填
- `side`
- 可选值:`ONESIDE`、`DUPLEX`、`TUMBLE`
- 返回结果
- 返回更新结果
- 使用建议
- 适用于已经创建好的漫游任务,不用于直接打印任务
- 示例说法
- “把任务 123 改成双面打印”
### `update_printer_color`
- 用途
- 修改漫游打印任务的颜色模式
- 什么时候用
- 用户明确说彩色、黑白、灰度打印时
- 行为
- 根据任务 ID 更新颜色模式
- 参数
- `task_id`
- 漫游任务 ID,必填
- `color`
- 可选值:`COLOR`、`MONOCHROME`
- 返回结果
- 返回更新结果
- 使用建议
- 当用户说“黑白打印”时应转换为 `MONOCHROME`
- 示例说法
- “把任务 123 改成黑白打印”
### `update_printer_copies`
- 用途
- 修改漫游打印任务的打印份数
- 什么时候用
- 用户说“打印 2 份”“打印 3 份”时
- 行为
- 根据任务 ID 更新打印份数
- 参数
- `task_id`
- 漫游任务 ID,必填
- `copies`
- 打印份数,必填,且必须大于等于 `1`
- 返回结果
- 返回更新结果
- 使用建议
- 如果用户没有明确说份数,默认不要擅自修改
- 示例说法
- “把任务 123 改成打印 3 份”
### `update_printer_paper`
- 用途
- 修改漫游打印任务的纸张尺寸
- 什么时候用
- 用户说 A3、A4、A5、Letter 等纸型时
- 用户直接给出宽高时
- 行为
- 支持标准纸张名称自动转换为毫米宽高
- 也支持直接传入自定义 `width` 和 `height`
- 参数
- `task_id`
- 漫游任务 ID,必填
- `paper`
- 可传纸型名称,如 `A4`
- 也可传对象,如 `{"width": 210, "height": 297}`
- 返回结果
- 返回更新结果
- 使用建议
- 宽高单位统一为毫米
- 当前支持的预设包括 `A0-A6`、`B4`、`B5`、`LETTER`、`LEGAL`、`TABLOID`
- 示例说法
- “把任务 123 改成 A4 纸”
- “把任务 123 改成宽 210、高 297 的纸张”
### `direct_print_document`
- 用途
- 直接把文件发送到指定打印机
- 什么时候用
- 用户明确指定要立刻打印到某一台打印机时
- 行为
- 根据文件信息和目标设备信息直接发起打印
- 如果目标打印机是隐藏打印机,会阻止直接打印,并提示改用漫游任务
- 参数
- `file_name`
- 文件显示名称,必填
- `url`
- 文件公网地址,必填
- `media_format`
- 文件格式,必填
- `device_name`
- 目标打印机名称,必填
- `control_sn`
- 目标打印机控制端编号,必填
- 返回结果
- 返回直接打印结果
- 使用建议
- 建议先调用 `query_printers` 确认目标打印机名称和控制端编号
- 如果是本地文件,先调用 `upload_file`
- 示例说法
- “直接把这个文件打印到前台那台打印机”
## 第一次接入建议怎么试
第一次使用时,建议这样一步一步来:
### 先检查当前账号是不是已经具备云打印条件
你可以这样理解:
- “先帮我检查一下当前环境能不能正常用云打印”
如果返回里显示客户端或设备还没准备好,那就先完成 WebPrinter 侧安装和共享配置。
### 再让它列出当前可用打印机
你可以这样说:
- “帮我看看现在都有哪些打印机”
这一步通常能拿到:
- 打印机名称
- 打印机别名
- 在线状态
- 控制端编号
### 如果你有本地文件,先上传
你可以理解成:
- “把我本地这个 PDF 上传一下,给我一个可打印地址”
本地调试时,常见参数长这样:
```json
{
"file_path": "C:\\\\docs\\\\report.pdf"
}
```
### 然后决定是“漫游打印”还是“直接打印”
如果你只是想先进入打印队列,可以这样理解:
- "把这个文件提交漫游打印"
或
- “把这个文件加入打印队列”
如果你要立刻打到某台打印机,可以这样理解:
- “直接把这个文件打到办公室那台 HP 打印机”
## 更口语化的使用示例
下面这些说法,都是这个 MCP 比较适合处理的:
- “帮我检查一下当前云打印环境能不能用”
- “帮我看看有哪些可用打印机”
- “把我桌面上的 PDF 上传一下”
- “把这个网页加入打印队列”
- “直接打印到前台那台打印机”
- “把刚才那个任务改成双面”
## 常见问题
### 为什么我运行 `webprinter_mcp` 后没反应
这是正常的。
它启动后会一直等待 MCP 客户端通过 `stdio` 连接,不会像普通命令行工具那样立刻打印很多信息。
### 启动时报 token 相关错误怎么办
请先去这里拿 token:
- `[https://get-ai-token.webprinter.cn](https://any.webprinter.cn/get-ai-server-token)`
然后确认你已经设置了:
- `WEBPRINTER_ACCESS_TOKEN`
### 命令已经安装了,但找不到 `webprinter_mcp`
通常是 Python 的 `Scripts` 目录还没加入 PATH。
这时你可以先直接使用:
```bash
python -m webprinter_mcp
```
## 任务配置工具
对于已经创建好的漫游打印任务,现在可以继续修改下面这些配置:
- `update_printer_side(task_id, side)`
- `update_printer_color(task_id, color)`
- `update_printer_copies(task_id, copies)`
- `update_printer_paper(task_id, paper)`
### 参数说明
- `task_id`
- 漫游打印任务 ID
- `side`
- 可选值:`ONESIDE`、`DUPLEX`、`TUMBLE`
- 分别表示:单面、双面长边翻转、双面短边翻转
- `color`
- 可选值:`COLOR`、`MONOCHROME`
- 分别表示:彩色、黑白
- `copies`
- 整数
- 必须大于等于 `1`
- `paper`
- 可以直接传纸张类型名称,比如 `A3`、`A4`、`A5`、`LETTER`
- 也可以传自定义对象:`{"width": 210, "height": 297}`
- 宽高单位为毫米
### 使用示例
如果你是在 MCP 客户端里通过自然语言调用,可以这样说:
- “把任务 `123` 改成双面打印”
- “把任务 `123` 改成黑白打印”
- “把任务 `123` 改成打印 3 份”
- “把任务 `123` 改成 A4 纸”
- “把任务 `123` 改成宽 210 高 297 的纸张”
如果你是在本地 CLI 里调试,可以这样用:
```bash
python scripts/mcp_client.py update-printer-side --task-id 123 --side DUPLEX
python scripts/mcp_client.py update-printer-color --task-id 123 --color MONOCHROME
python scripts/mcp_client.py update-printer-copies --task-id 123 --copies 3
python scripts/mcp_client.py update-printer-paper --task-id 123 --paper A4
python scripts/mcp_client.py update-printer-paper --task-id 123 --width 210 --height 297
```
TDQS
Scored across 10 tools
The four update_printer_* tools are named as if they configure printer hardware settings, but they actually modify roaming task parameters. This creates dangerous ambiguity with query_printer_detail (which queries actual printer capabilities), forcing agents to rely entirely on descriptions to distinguish printer properties from job configuration.
While most tools follow verb_noun patterns (create_roaming_task, upload_file), direct_print_document breaks convention by using an adjective-noun structure. More critically, the update_printer_* prefix is domain-inaccurate since these modify tasks, not printers, creating inconsistency with the actual object model.
Ten tools is a reasonable count for cloud printing functionality, covering environment checks, printer discovery, file handling, and dual print workflows. However, the granularity of four separate single-property update tools feels slightly excessive compared to a unified task update operation.
Basic printing and discovery are covered, but the roaming task workflow lacks lifecycle management: you can create and modify tasks, but cannot submit, check status, cancel, or list jobs. This leaves agents unable to track print completion or handle failures in the roaming workflow.