WorkBuddy 能把 Word、Excel、浏览器都当工具使,唯独画不出一张图。ComfyUI 反过来:图能出得很精确,但要你坐到画布前拖节点。
真正省事的状态是让它去调它——你在聊天框里说「给这期周报做一张封面」,后半段没人再动手。
结论先给:装 comfy-mcp,把几行配置写进 WorkBuddy 的 mcp.json,之后用自然语言出图。不想碰 MCP 也行,直接打 ComfyUI 的 HTTP 接口,代价是轮询、取图、错误处理都得自己写。
两条路的分工
| MCP 路线 | 裸 HTTP 路线 | |
|---|---|---|
| 谁干活 | WorkBuddy 自己挑工具、自己等任务 | 你的脚本 |
| 需要写代码 | 只有 JSON 配置 | 至少几十行,含轮询 |
| 知道本机有什么模型 | 知道,能查 | 不知道,写死 |
| 适合 | 日常出图、自动化 | 批量流水线、接进自己的系统 |
两条都能通往同一个地方,区别在于「谁知道上下文」。MCP 那一侧,模型列表、节点列表、任务状态都是 agent 现场查的;HTTP 那一侧全靠你提前写死。
一、先让 ComfyUI 变成可调用的东西
Comfy 官方有个 comfy-mcp,就是干这件事的:本地跑一个 stdio 服务,把你的本地 ComfyUI 暴露成一组工具。
前提四个,缺一个都起不来:
- Python 3.10 以上
comfy-cli1.14.0 以上(pip install "comfy-cli>=1.14.0")- 一个 ComfyUI 工作目录(没有就
comfy install,已有的用comfy set-default <路径>) - ComfyUI 正在运行(
comfy launch),MCP 不会替你把它拉起来
然后:
pip install comfy-mcp # 装上之后 `comfy-mcp` 这个命令就是服务器本体
装完先别急着配客户端。有个坑几乎所有非默认环境都会踩:MCP 客户端启动服务器时用的是它自己的环境变量,里面通常没有你 shell 的 PATH。comfy 装在虚拟环境里的话,要给它绝对路径:
COMFY_BIN=/Users/you/venv/bin/comfy
这个变量后面还要用到。
二、写进 WorkBuddy
WorkBuddy 的 MCP 是可视化配置,但你填的其实还是 JSON。入口在侧边栏的 插件 → MCP 服务器 → 配置 MCP,可以选用户级(~/.workbuddy/mcp.json,所有项目复用)或项目级(<项目>/.workbuddy/mcp.json)。
出图这种能力建议放项目级——不同项目的模型和节点不一样,混在一起反而容易乱。
{
"mcpServers": {
"comfy": {
"command": "comfy-mcp",
"env": { "COMFY_BIN": "/Users/you/venv/bin/comfy" }
}
}
}
保存之后看状态灯:绿的是通了,红的说明命令路径或者环境有问题,先去看 COMFY_BIN 指的对不对。
连通之后,第一句话别急着要图,先确认它认得出本机环境:
先看本地 ComfyUI 是否在运行,再告诉我装了哪些模型
它背后调的是 server_info 和 search_models。这两个能答上来,说明链路没问题,剩下的只是工作流的事。
三、工作流要导出成 API 格式
这是最容易卡住的一步。你在画布上存下来的工作流,是给人看的、带界面坐标和分组信息的版本;API 调用要的是另一种——每个节点只留 class_type 和 inputs,连线用 ["节点id", 输出序号] 表示。
从菜单里选 Export (API),存成 txt2img.json 之类,放进一个固定目录。之后让它跑:
跑 ~/workflows/cover.json,把出来的图给我
MCP 那边会依次调 run_workflow(提交,可以选同步等或异步拿 prompt_id)、wait_for_job 或 watch_job(等),最后 fetch_outputs 把结果拷到你指定的目录。ComfyUI 自己也会把图写进工作目录的 output/,但拷一份到你方便的位置更省事。
跑之前如果怕白等几分钟,先让它 validate_workflow:这个工具拿你本机的 object_info 去核一遍,缺模型、缺节点、输入类型不对,提交前就能报出来。
四、不想用 MCP 的话
裸接口就三个动作:提交、查状态、取文件。
import json, urllib.request
workflow = json.load(open("cover.json")) # API 格式
req = urllib.request.Request(
"http://127.0.0.1:8188/prompt",
data=json.dumps({"prompt": workflow}).encode("utf-8"),
)
prompt_id = json.loads(urllib.request.urlopen(req).read())["prompt_id"]
拿到 prompt_id 之后,轮询 /history/{prompt_id} 直到出现结果,再从返回的 outputs 里拿文件名,去 /view?filename=...&subfolder=...&type=output 下载。
想省掉轮询就开 WebSocket(/ws?clientId=...),能收到进度事件,代价是多一个 websocket-client 依赖。批量出图值得,单张不值得。
这条路适合放进定时脚本或者已有的流水线。缺点也说清楚:模型换了、节点升级了,脚本不会自己知道,报错得你自己看日志。
五、接起来之后能做什么
单次出图只是热身。WorkBuddy 那边还有个「自动化」功能:给个定时规则、一个工作空间、一段提示词,到点自己跑。
把两件事拼起来,能落地的一版大概长这样:
- 每天 8:50,按当天选题写三版不同的提示词
- 调用同一个工作流出三张封面,落到
~/covers/2026-10-28/ - 出完接另一个 MCP(企微机器人那类),把缩略图和路径推到群里
配一次,之后每天不用管。真觉得这套流程稳定了,还能把它写成一个「技能」,下次直接说「照上周那套做封面」。
几个具体的坑
Mac 别硬跑开源大模型。 Comfy 官方在 MCP 文档里就写了:今天的开源权重模型在本机 GPU 上跑不出可接受的速度,Mac 用户建议用云连接。云连接的地址是 https://cloud.comfy.org/mcp,走 OAuth,新账号送 5 次运行,之后要订阅。
显存档位决定你能干什么。 官方口径:24GB 以上显存基本都能跑,含视频;8–24GB 出图没问题,视频要么慢要么放不下;8GB 以下就别本机跑了。
红灯泡多半不是配置写错。 JSON 括号对不上会红,但更常见的是 command 指向的命令在客户端的 PATH 里不存在。先用绝对路径试一次。
云和本是两套登录。 两个连接可以同时挂,但各签各的,签了一个不等于另一个也通了。
别把画布版本的 JSON 喂给 API。 那个文件里全是界面字段,服务端不认,报错还很难懂。
要不要上这套,判断标准很简单:你出图的动作一周有三次以上,而且每次都在重复同样的流程,那配置这一下的时间能挣回来;一周出一张、每张都要手调半天,那就在画布上老实调,别为了自动化而自动化。
先跑通 comfy launch,再让 WorkBuddy 的 server_info 认出来。认出来了,后面才谈得上自动化。