memobird-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@memobird-mcp帮我把这句话打印出来:今天下午三点开会"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
memobird-mcp
把咕咕机(Memobird 热敏打印机)接进 AI 对话,或者用一行 Python 直接出纸。
MCP 服务:标准 Model Context Protocol,WorkBuddy / Claude Desktop / Cursor 等客户端可直接挂载
快速出纸:
uv run memobird text "..."或import memobird_mcp as mb; mb.text("...")零硬编码密钥:凭据只从
.env或环境变量读取,仓库里只有占位符标准 uv 项目:
uv sync一把装好,依赖锁定在uv.lock
一、目录结构
memobird-mcp/
├── pyproject.toml # 项目定义与依赖
├── uv.lock # 依赖锁(建议入库)
├── .python-version # 固定 3.12
├── .env.example # 凭据模板(占位符,可入库)
├── .env # 你的真实凭据(已被 .gitignore 忽略)
├── run.py # 启动入口,python run.py 即可,无需安装
├── start-sse.bat # 双击以 SSE 方式起服务
├── LICENSE
├── README.md
├── clients/ # MCP 客户端配置模板
│ └── mcp.json # 粘贴前改掉 REPLACE_WITH_PROJECT_DIR
└── src/memobird_mcp/
├── __init__.py # 对外导出 mb.text / mb.image / mb.mixed ...
├── config.py # 读 .env / 环境变量、校验凭据
├── client.py # 开放平台 HTTP 客户端(三层结构)
├── tools.py # 把打印能力注册成 MCP 工具
├── server.py # stdio / sse / http 三种传输
├── quick.py # 一行代码出纸的便捷封装
└── cli.py # 命令行 memobirdRelated MCP server: bizprint-mcp-server
二、前置条件
uv:
uv --version能输出版本即可(本项目在 uv 0.7.x 上验证)。Python 3.12:
.python-version已写死为3.12。uv sync会优先使用本机已安装的 3.12,不会额外下载新的解释器。咕咕机 + 开发者账号:到 open.memobird.cn 注册开发者、添加设备,拿到两样东西:
ak:开发者 API KeymemobirdID:设备号
三、安装
cd memobird-mcp # 进到你 clone / 解压出来的目录
uv sync执行后会出现 .venv/ 与 uv.lock,同时把 memobird_mcp 以可编辑模式装进虚拟环境。
四、配置凭据(唯一需要手动填的东西)
cp .env.example .env然后编辑 .env,填两行:
MEMOBIRD_AK=你的开发者AK
MEMOBIRD_DEVICE_ID=你的设备号说明:
.env已在.gitignore里,不会被提交。代码中没有任何真实密钥,
.env.example里只有占位符。如果系统里已经设置了同名环境变量,环境变量优先(
.env不会覆盖已有值)。也可以在启动时用
--ak/--did临时覆盖,但会被同一进程的所有调用继承,注意别把命令行历史留成泄漏点。
验证配置(只绑定设备,不出纸):
uv run memobird whoami
# 设备 <你的设备号> 绑定成功,userID = <你的 userID>五、接入 WorkBuddy(MCP)
思路只有一句话:把项目下载到本地,然后在配置里把路径改成你自己电脑上的实际路径。
作者机器上的路径写进文档没有意义——你机器上不存在,所以模板里一律是 REPLACE_WITH_PROJECT_DIR,由你来替换。
WorkBuddy 的操作入口:左下角
+→ 连接器 → 添加自定义 MCP → 粘贴 JSON → 保存 → 在列表里点一次"信任 / 启用" → 开新会话。
1. 先把项目装起来
下载仓库 ZIP 解压(或 git clone),然后:
cd 你解压出来的目录/memobird-mcp
uv sync
cp .env.example .env # 填入 AK 与设备号uv sync 之后目录里会出现 .venv\Scripts\python.exe,下一步的配置就是要指向它。
2. 复制模板,改两个路径
clients/mcp.json 的内容:
{
"mcpServers": {
"memobird": {
"command": "REPLACE_WITH_PROJECT_DIR\\.venv\\Scripts\\python.exe",
"args": ["REPLACE_WITH_PROJECT_DIR\\run.py"]
}
}
}把两处 REPLACE_WITH_PROJECT_DIR 换成你自己的目录,例如项目放在 D:\tools\memobird-mcp:
{
"mcpServers": {
"memobird": {
"command": "D:\\tools\\memobird-mcp\\.venv\\Scripts\\python.exe",
"args": ["D:\\tools\\memobird-mcp\\run.py"]
}
}
}两个要点:
Windows 路径里的
\在 JSON 中必须写成\\,写单反斜杠会解析失败macOS / Linux 把
.venv\\Scripts\\python.exe换成.venv/bin/python
3. 粘贴并信任
保存配置后一定要在列表里点一次"信任 / 启用",然后开一个新会话。新增的自定义 MCP 不会自动生效,这一步最容易漏。
4. 验证
新会话里问一句"你现在有哪些 memobird 工具",应该能看到 5 个:print_text、print_image、print_url、print_mixed、print_status。
接着直接说人话即可:
"帮我把这句话打印出来:今天下午三点开会"
"打印这张图 D:\photo.png"
"查一下 71514704 出纸了没有"
5. 连不上时按这个顺序查
现象 | 原因 | 处理 |
工具列表里没有 memobird | 没点"信任" / 配置没保存 | 重新保存并信任,再开新会话 |
提示找不到文件或程序 | 路径写错,或项目被移动/改名 | 把 |
调用时报"缺少凭据" |
| 在项目目录执行 |
进程秒退、没有任何输出 | stdio 模式在等客户端握手 | 正常现象,不要手动单独运行后干等 |
返回了 Content ID 但不出纸 | 打印机离线 / 没纸 / 电量低 | 检查设备;用 |
报 HTTP 错误 | 后端是明文 HTTP,可能被网络拦截 | 浏览器打开 |
提醒:项目一旦挪位置,配置里的两个路径要同步改,否则 MCP 会启动失败。
六、Python 模块 / 命令行快速出纸
1. 命令行(最快,无需写代码)
在本项目目录下:
uv run memobird text "今天下午三点开会"
uv run memobird image D:\photo.png
uv run memobird mixed "会议纪要" -i D:\photo.png
uv run memobird url https://example.com
uv run memobird status 71514704
uv run memobird whoami不在项目目录里也行,加 --directory:
uv run --directory /path/to/memobird-mcp memobird text "hi"参数说明:
text后面可以跟多段,会用空格拼成一句mixed把文字和图片印在同一张小票上,-i指定图片-v打开 DEBUG 日志(输出到 stderr,不干扰结果)退出码:
0成功,1打印失败,2凭据缺失
2. 在 Python 里一行调用
在项目里写脚本,用 uv run 执行:
import memobird_mcp as mb
content_id = mb.text("你好,咕咕机")
print("Content ID:", content_id)
mb.image(r"D:\photo.png")
mb.url("https://example.com")
mb.status(content_id)图文混排:
from PIL import Image
import memobird_mcp as mb
mb.mixed("今日待办\n1. 写周报\n2. 三点开会", Image.open(r"D:\photo.png"))想在别的项目里用,把它装进去即可:
uv add --editable /path/to/memobird-mcp3. 更底层一点的写法
需要复用同一台设备、或自己控制连接时:
from memobird_mcp import MemobirdDevice, PrintPayloadBuilder
from memobird_mcp.config import get_credentials
ak, device_id = get_credentials()
bird = MemobirdDevice(ak=ak, device_id=device_id) # 构造时绑定一次,之后复用
cid = bird.print_text("hello")
bird.print_payload(
PrintPayloadBuilder()
.add_text("小票标题")
.add_image(r"D:\photo.png")
.add_text("——完——")
)
bird.check_print_status(cid)设置环境变量优先级:显式传参 > 系统环境变量 > .env。
七、SSE / HTTP(给局域网设备或其他语言)
uv run python run.py -t sse -p 8000 --host 0.0.0.0或者直接双击项目根目录的 start-sse.bat(固定监听 0.0.0.0:8000)。
SSE 入口:
http://127.0.0.1:8000/sse首个事件返回
event: endpoint+data: /messages/?session_id=xxx,之后所有 JSON-RPC 通过 POST 发到该地址局域网设备用本机内网 IP 访问,记得放行 Windows 防火墙对应端口
一个 SSE 连接对应一个会话,多设备并发请起多实例或多端口
也有
-t http(streamable HTTP),给支持该传输的客户端用
八、可用工具一览
工具 | 参数 | 说明 |
|
| 纯文本,GBK 编码 |
|
| 本地绝对路径,或 |
|
| 由咕咕机服务端抓取渲染,URL 必须公网可访问 |
|
| 图文混排成一张小票 |
|
| 查询是否已出纸 |
前四个工具都返回 Content ID: xxx,可再用 print_status 复查。
九、已知限制与坑
emoji 与生僻字会静默消失:开放平台要求 GBK 编码,无法编码的字符直接被丢弃,不会报错。
图片会被缩放:超过 384px 宽等比缩到 384px,再转 1 位黑白。细节多的照片出来偏灰,建议先用高对比度版本。
print_url只能打公网页面:内网地址、需要登录的页面打不出来。后端是明文 HTTP(
http://open.memobird.cn/home):个别网络环境会被拦截或劫持,报网络错误先查这个域名通不通。AK 有每日打印条数限制:超限时开放平台返回
showapi_res_code != 1。每次启动都会调一次
setuserbind:这是正常设计,幂等,返回同一个 userID。不要移动或删除
.venv:MCP 配置里的command指向它的绝对路径,搬家后必须同步改配置。stdout 只能有 JSON-RPC:stdio 模式下任何
print()都会污染协议流,所以本项目日志统一写 stderr。
十、安全须知
真实 AK 只存在于
.env一个文件里,其余文件(含本 README、代码、clients/模板)全是占位符。分享、截图、上传这个项目前,确认
.env已被排除;.gitignore已经帮你挡住了git,但压缩包/网盘不会。不要把自己的 AK 贴到聊天窗口、issue、论坛里。AK 等同于"能往你打印机上出纸的凭证"。
一旦怀疑泄漏,去 open.memobird.cn 重置 AK,然后只改
.env一处,不用动代码。
十一、发布前的检查清单
# 1. 确认 .env 已被忽略
git check-ignore -v .env # 应输出 .gitignore:xxx:.env
# 2. 全文扫描,只应命中 .env(其余文件都该是占位符)
grep -rnE '\b[0-9a-f]{32}\b' . --exclude-dir=.venv --exclude-dir=.git
# 3. 确认没把本机绝对路径写进仓库(应无输出)
grep -rnE 'C:\\\\Users|/Users/|/home/' . --exclude-dir=.venv --exclude-dir=.git该提交:
.env.example、clients/mcp.json、uv.lock、LICENSE、README.md不该提交:
.env、.venv/、__pycache__/pyproject.toml里的authors记得改成你自己的想让别人能直接
pip install/uv add,把包发到 PyPI 即可(uv build && uv publish);国内用户走UV_DEFAULT_INDEX或清华镜像会快很多。不想发 PyPI 也没关系,别人下载 ZIP 照样能用。
Available Tools
5 toolsprint_imagePrint ImageA
把一张图片打印到咕咕机。
图片会等比缩放到 384px 宽并转成黑白,细节多的图建议先用高对比度版本。
| Name | Required | Description | Default |
|---|---|---|---|
| image_path | Yes | 本地图片绝对路径,或 data:image/png;base64,... 形式的字符串 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden. It does disclose real behavior — proportional scaling to 384px width and conversion to monochrome — which is exactly the kind of side effect an agent needs. It omits limits (file size, supported formats), failure behavior, and whether the device must be online, so coverage is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the practical caveat about image detail. No filler or redundancy, though the closing tip is advisory rather than essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter print tool with an output schema and full schema coverage, the definition covers the action and the key transformation fact. Remaining gaps — size/format limits and device-state prerequisites — are minor but would matter for an agent preparing a real print job.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter already documents both accepted forms (absolute local path and data:image base64 URI). The description adds nothing about the image_path parameter itself, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb and resource — printing an image to the 咕咕机 device — which naturally distinguishes it from the text/url/mixed siblings by payload type. It does not explicitly name those siblings as alternatives, but the resource specificity leaves little ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is a useful preparatory tip (preprocess high-detail images into a higher-contrast version), but no guidance on when to choose print_image over print_mixed or print_url, and no prerequisites such as confirming device readiness via print_status. Usage is implied by the payload type rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
print_mixedPrint MixedB
把文字和图片混排打印在同一张小票上。
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | 文字内容 | |
| image_path | No | 可选的图片绝对路径,留空则只打文字 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, and it discloses almost nothing beyond the medium: no indication of which printer/device is targeted, whether the job is physically irreversible or consumes paper, what permission or connectivity is required, or what error surfaces on printer failure. The one useful cue is that output lands on a single receipt (implying layout ordering of text and image), but that is thin for an unannotated side-effecting tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding; the core fact (mixed text+image on one receipt) leads. It is efficient but almost too terse to have any internal structure or prioritization of details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the input schema is fully documented, which covers the mechanical facts. What remains missing is contextual behaviour for a physical print action (device, failure handling, whether repeated calls duplicate receipts) and any routing guidance among the four print_* siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the key detail that image_path may be left empty to print text only, so the schema already handles parameter meaning. The description adds no format, size, dpi, or placement semantics for the image beyond the fact that both appear on one receipt, so the baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"把文字和图片混排打印在同一张小票上" gives a specific verb (打印) plus the combined resource (文字+图片) and the output medium (同一张小票), which is more informative than the bare name. It stops short of naming print_text / print_image as the one-type alternatives, so the distinction is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is for the case where both text and an image must appear together, versus the single-type siblings. There is no explicit when-to-use, when-not-to-use, or named alternative, and no note on when to prefer a plain text print.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
print_statusPrint StatusC
查询一张小票是否已经出纸。
| Name | Required | Description | Default |
|---|---|---|---|
| content_id | Yes | 打印时返回的 Content ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and delivers very little: it does not say whether this is a read-only, side-effect-free operation, whether status is final or transitional, whether repeated polling is expected, or what states can be returned. Only the bare intent of the query is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler and the core intent front-loaded. It is efficient, though its brevity borders on under-specification rather than polished conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and parameter documentation is complete, so return shape and ID semantics need not be repeated. What remains missing, given a status-polling tool, is workflow context such as when to call it relative to the print_* siblings and whether to poll.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter with 100% schema description coverage ("打印时返回的 Content ID"), so the schema already explains its origin and meaning. The description adds nothing further about the parameter, which is acceptable at the baseline for full-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"查询一张小票是否已经出纸" states a specific verb (query) and a specific object (whether a receipt has been dispensed), which is clearly a status read rather than a print action. It distinguishes itself implicitly from the print_* siblings through the verb, but never names them or explicitly contrasts the intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance: it does not say this should be called after a print_* tool, whether it must be polled repeatedly, or when to stop. The only hint that content_id originates from a prior print call lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
print_textPrint TextA
把一段纯文本打印到咕咕机。
文本按 GBK 编码发送,emoji 和部分生僻字会被静默丢弃。
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | 要打印的文本内容 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description has to carry the full weight of behavioral disclosure, and it delivers the most important trait: text is sent in GBK encoding, and emoji and some rare characters are silently dropped. That silent-loss warning is exactly the kind of context an agent cannot get from the schema, though the description says nothing about device availability or failure behavior for non-encodable input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler: the action is stated first, and the encoding caveat follows immediately. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter print tool with an existing output schema, the definition covers the key behavioral risk: losing characters under GBK. Return values need not be explained because the output schema handles them, though device-state or delivery details are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already defines the single text parameter; however, the description adds real meaning beyond it by constraining what the text may safely contain. The GBK encoding constraint lets an agent know that some strings will be truncated or dropped when printed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (print a piece of plain text) and a specific target (the Gugu machine), and the word for plain text ('纯文本') implicitly separates this tool from the image, URL, and mixed-content siblings. It does not explicitly name those siblings, so the differentiation needs to be inferred from the noun phrase, not read directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit statement of when to choose this tool over print_image, print_url, or print_mixed. The intended usage can only be inferred from the phrase '纯文本', so an agent must infer the alternative-selection rule instead of being told it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
print_urlPrint UrlA
打印某个网页的内容(由咕咕机服务端抓取渲染)。
URL 必须公网可访问,内网地址、需要登录的页面打不出来。
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | 目标网页地址 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It discloses the important trait that rendering happens server-side and that certain URL categories fail, which is genuinely useful. It does not describe what happens on fetch failure (error vs blank page), latency, or print sizing, leaving the mutation-side behavior thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the mechanism is front-loaded ahead of the failure constraint. Every clause carries information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an output schema, the description covers the essentials: what gets printed, who fetches it, and which URLs are rejected. Only error behavior and latency on failure are left unspecified, a minor gap for a tool this simple.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single url parameter is fully documented by the schema (100% coverage), and the description adds real semantics beyond it: the URL must be public-facing and must not require authentication. That constraint meaningfully sharpens how the parameter should be chosen, above the baseline for a fully documented single-parameter schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: prints the content of a web page, and notes that the server side fetches and renders it. The siblings (print_text, print_image, print_mixed) make the domain obvious, but the description never names the closest alternative (print_text) to sharpen the boundary. The purpose is nonetheless unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives useful when-not conditions: the URL must be publicly reachable, and intranet addresses or pages requiring login will not print. It never explicitly routes the agent to print_text for plain text or print_image for image URLs, so the guidance is partial (constraints present, alternatives absent).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
print_image - First observed
print_mixed - First observed
print_status - First observed
print_text - First observed
print_url
TDQS
Scored across 5 tools
print_text, print_image, and print_url target clearly distinct content types, and print_mixed is differentiated by combining text and image on one receipt. The only mild overlap is that print_mixed could arguably subsume print_text/print_image, but the descriptions make the intended use of each clear.
All five tools share a consistent 'print_' prefix with a noun suffix (text, image, url, mixed), which is highly predictable. print_status is a minor semantic deviation since it queries rather than prints, but the shared prefix keeps the set coherent.
Five tools is well-scoped for a small printer device API: one per supported content type plus a status check. Each tool earns its place with no filler or redundancy.
The surface covers all plausible print payloads (text, image, URL, mixed) plus a job status check, so core workflows are covered. Minor gaps exist around device/online status and cancelling a queued receipt, which agents would have to work around.
Related MCP Connectors
Screenshots, PDFs, image editing, QR codes, email validation and more through one hosted MCP server.
Send transactional email and manage domains, audiences, and broadcasts from any MCP client.
Drive WhatsApp from any MCP client: pair devices, send text and media, manage contacts and groups.
Connect any AI agent to 1,000+ apps and 27,000+ actions through one remote MCP server (OAuth).
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Memobird thermal printers to print text, HTML, web pages, and images directly from MCP-enabled clients. It includes tools for device binding, image conversion, and monitoring print job status.7 npm1ISC
- AlicenseAqualityDmaintenanceConnect AI agents to physical printers. Print receipts, shipping labels, and packing slips to your existing BizPrint-connected printers from Claude and other MCP clients.71MIT
- FlicenseAqualityBmaintenanceEnables Claude or any MCP client to design and print text and images to Bluetooth thermal label printers, including scanning, configuring, and managing multiple printers.12-
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to submit PDFs or JSON-rendered templates to local printers, check printer status, and manage print jobs through MCP tools.22 npmMIT