Skip to main content
Glama

comfyui-loop-mcp

It doesn't just drive ComfyUI — it runs the loop: submit → get_result → get_image (LOOK) → compare_images → loop_record, with the ratchet (best-so-far + ledger) held on disk

一个面向你自己的 ComfyUI 的循环感知 MCP 服务器。 它不只是调用 API——它运行整个循环:构建 → 运行 → 查看 → 评审 → 修复, 直到输出真正满足需求。

一个以零 node_errors 运行的图是有效的,而非正确的。扭曲的手、漂移的背景、生硬的遮罩边缘、可见的拼贴接缝——这些都不会出现在错误日志中。它们只出现在像素里。因此,每个工具描述、每个工具响应以及服务器自身的指令都会推动模型在宣布图完成之前先查看

别人没有的部分:棘轮是一个工具,而不是一个建议。 大多数代理工具驱动 ComfyUI。这个管理循环——长循环的上下文会被压缩,而一旦发生这种情况,记忆中的"迄今最佳"就消失了:棘轮悄然停止前进,模型重试它已经拒绝的更改,并可能把回退作为最终答案交给你。因此,最佳图和账本保存在磁盘上,而不是模型的记忆中。回退是一个工具调用,而不是一次回忆行为。

loop_start ─▶ submit ─▶ get_result ─▶ get_image ─▶ compare_images ─▶ loop_record ─┐
     ▲                                   (LOOK)      (what moved?)    (ratchet)   │
     └───────────────────  revert to best, try something else  ◀─────────────────┘
                                                          ↓ can't name a defect?
                                           loop_finish + loop_report → sign-off

该方法随服务器一起发布。循环提示词和 Claude Code 技能位于 comfy_loop/docs/ 中,并被打包进 wheel 包,因此 comfy_loop / comfy_skill / comfy_install 可以从服务器安装的任何位置原样提供它们——单一来源,无需同步。(它们最初诞生于 comfyui-llm-onboarding-prompt,该仓库已不再维护;现在它们保存在这个仓库中。)


与 Comfy 官方 MCP 服务器的对比

ComfyUI 自带两个官方服务器,而这是与它们并行构建的第三个东西——独立构建,并且从问题的另一端入手。

Comfy-Org/comfy-mcp(首次提交于 2026-07-01,比本仓库晚一天,但先公开)通过 comfy-cli 驱动本地 ComfyUI:每个工具都调用 comfy 二进制文件并解析其 JSON 封装。Comfy Cloud MCPhttps://cloud.comfy.org/mcp)是一个远程 HTTP 服务器,在 Comfy 的 GPU 上运行图。两者都由 ComfyUI 团队构建和维护。

这个直接通过 HTTP 与 /prompt/object_info 通信——无需 CLI、无需账户、除了 httpx 之外无需安装任何东西——并将其功能范围投入到图运行之后才开始的那一半工作上。

真正的区别

他们的本地服务器将 ComfyUI 安装视为需要管理的东西:启动它、停止它、回滚到另一个版本、登录、在托管的合作伙伴模型上花费积分、跟踪其日志、保持包更新。这确实比本仓库的功能范围更大,而且这是平台供应商最适合拥有的功能范围——每当 ComfyUI、comfy-cli 或合作伙伴 API 变动时,它也会跟着变动。如果你需要的是驱动和维护我的安装,请使用他们的。

这个将输出视为需要管理的东西——因为那是我们负责的部分。它源于 Alienrobot 自己的生产工作,在那里,一个能运行的图是工作的开始,而不是结束。这里没有任何东西会启动进程或花费积分。相反:将像素返回给模型,将两次运行差异化为一张漂移无处可藏的图像,对需求真正要求的东西进行评分,并将迄今最佳保存在磁盘上,这样压缩的上下文就不会丢失它。那是别人没有的部分——不是因为调用 /view 很难,而是因为"让代理查看,并阻止它在回退的基础上继续构建"是一种纪律,而不是一个端点。

本仓库

Comfy-Org/comfy-mcp

通过……与 ComfyUI 通信

其 HTTP API(/prompt/object_info/view

comfy-cli 子进程(comfy … --json

额外依赖

无(httpxpillow

comfy-cli ≥ 1.14,以及一个它已知的安装

能看到你未安装的 ComfyUI

能——URL 可达的任何实例,包括你没有 shell 的机器

部分能;某些工具本质上仅限本地

查看结果

get_imageget_video_frame——将像素返回给模型

fetch_outputs(inline_images=True)

评判结果

compare_images(差异模式)、image_diff_statsmeasure_image(拼贴接缝/清晰度)、video_temporal_stats

保留最佳结果

loop_*:磁盘上的棘轮 + 台账,回退是一次工具调用

探索参数

loop_sweep——一个输入、N 个值、一次调用,记录在运行中

vary_workflow——槽位值的笛卡尔积写入文件

预检工作流图

check_workflow——缺失的包、缺失的模型文件、未设置的必填输入、死连线、无输出节点,一次回答全部给出

validate_workflow + workflow_deps + 模板 local_check

子图模板

展开并重新接线(保留提升的控件)

在客户端展开

探索的 token 成本

紧凑节点表示法(比 object_info 节省 93%,987 个节点);FlowZip 图比 litegraph 节省约 72%

并非明确目标

安装缺失项

ComfyUI-Manager:install_node_packinstall_modelrestart_comfyuiupdate_comfyui

注册表 install_nodedownload_model(后台运行、可取消)、完整更新/版本切换

从零到运行

代理完成:comfy_install 是一个根据本机信息填写的提示(现有安装、此 Python、此机器的加速器),任何失败的调用都会返回启动/安装命令

告诉你在终端中运行 comfy installlaunch_comfyui / stop_comfyui / switch_comfyui_version 驱动一个已存在的安装

运行 ComfyUI 进程

不——仅重启(通过 Manager);代理掌控 shell

comfy-cli 子进程,所以可以

托管/合作模型、账户、额度

不,刻意如此

auth_loginpartner_generate、消费同意门槛

任务控制

submit_workflowjob_statuscancel_jobget_queueinterrupt

一个 job 工具:状态/等待/监视/取消/队列

MCP 接口面

43 个工具 + 2 个提示 + 3 个资源

39 个工具

规模/许可证

约 3,700 行,MIT

约 16,000 行,AGPL-3.0-or-later 或商业许可

构建者

Alienrobot——为我们的 VFX/生成式工作而构建,并用于其中

ComfyUI 团队,与平台本身一起

承诺范围

循环:发现、转换和评判输出

整个安装:生命周期、账户、合作伙伴 API、包

如何选择

  • 无 GPUCloud MCP。本地没有任何东西能与你没有的硬件竞争。

  • "安装它、运行它、让它持续工作"Comfy-Org/comfy-mcp。生命周期、合作伙伴模型、后台下载、版本固定。

  • "第一个结果能跑,但训练有素的眼睛会拒绝它"本仓库。 六根手指、漂移的背景、生硬的遮罩边缘、可见的拼贴接缝、沸腾的片段。这就是一个循环,而这是一个完全围绕它构建的服务器。

它们可以组合使用:没有任何东西阻止你同时运行两者,而且工具名不会冲突。(名确实冲突过——本仓库也曾短暂地叫 comfy-mcp,与拥有 ComfyUI 命名空间的人争论这个必输无疑。因此叫 comfyui-loop-mcp;导入包是 comfy_loop,两者可以并排安装。)

我们不会添加的内容

全盘吸收竞争对手的功能列表,最终只会得到两个平庸的工具。我们从他们那里拿来的,是一个循环所需要的——预检、任务状态、日志跟踪、VRAM 余量、更新。以下内容刻意排除在外:

  • 账户、额度、托管合作伙伴模型。 卖点是"没有任何东西离开你的机器,无需注册,无计量"。额度门槛与之矛盾。如果你想要 Kling 或 Veo,他们的服务器做得很好,带有本仓库没有理由重新发明的同意门槛。

  • 启动和停止 ComfyUI 进程。 HTTP 客户端无法启动一个未运行的服务器,而且将本仓库指向一个你没有 shell 的机器是受支持的场景,不是边缘情况。restart_comfyui(通过 Manager)是诚实的边界——但"不能"不等于"不会帮忙":代理通常确实有 shell,所以一个不可达的服务器会返回本机的安装/启动命令,并期望代理去执行它们。本服务器和 Comfy-Org 的都不会替你安装 ComfyUI(他们的是让你在终端中运行 comfy install);区别在于,这里的指令通过工具调用返回,面向任何能够执行它们的人。

  • 工作流保存/分享/作为服务复现。 save_workflow 交给你一个经过往返验证的文件。之后它存放在哪里,是你自己的事。

Related MCP server: ComfyPilot

三个 MCP 原语,映射到循环

原语

暴露什么

循环步骤

工具

check_comfyuilist_nodesget_nodelist_modelssearch_modelssearch_templatesget_template

发现,而非猜测

find_missing_nodesinstall_node_packinstall_modelrestart_comfyuiupdate_comfyui

扩展(安装模板所需的内容)

check_workflow

在 GPU 介入之前进行验证

inflate_workflowflowzip_to_api

压缩(token 高效的图)

template_slotsrun_template

使用覆盖参数运行已知良好的模板(上下文中无图)

upload_imagesubmit_workflow

构建 → 运行

get_resultget_image(返回实际图像)

查看

loop_startloop_recordloop_sweeploop_bestloop_ledgerloop_finishloop_report

棘轮 + 账本,保存在磁盘上

system_statsget_queuejob_statuscancel_jobinterruptfree_vramcomfyui_logs

控制

提示

comfy_loop(完整方法)、comfy_skill(精简)、comfy_install(引导)

整套规范,一条命令

资源

comfyui://object_info(实时)、comfyui://loop-methodcomfyui://skill

事实 + 文档

三件事让它具有循环感知能力,而不是普通的 API 封装:

  1. get_image 将渲染后的输出返回给模型 —— 这正是让"查看"成为现实的一步。模型真正看到了像素。

  2. 工具响应推动循环。 submit_workflow 在成功时返回*"有效,但不正确 —— 现在查看";在被拒绝时返回"这不是一次迭代 —— 修复指定的节点并重新提交。"* get_result 以指令结束:"不要停在这里 —— 查看,然后更改一个参数或宣布简报已满足。"

  3. 服务器指令携带偏好循环策略(见下文),客户端在连接时注入该策略。

偏好循环策略(服务器指令)

在握手时,服务器告知代理何时循环以及何时不循环

  • 始终 在编写 JSON 之前从实时 API 发现;通过执行来验证;node_errors 不是迭代 —— 修复并重新提交。

  • 偏好循环 只要受过训练的眼睛可能拒绝输出 —— 构图/数量、相似度、遮罩/边缘质量、放大/修复、重新布光、纹理接缝、视频时间稳定性、"让它看起来正确"。

  • 棘轮 —— 保留迄今最佳;仅当更改优于它时才保留,否则回退并尝试其他方案;在平台期从参数 → 接线 → 模型进行转向。仅在简报有客观测试时才以其为门槛;否则按肉眼判断。

  • 跳过 循环仅用于机械性任务(格式转换、纯 API 查询,或用户明确只需要一个可运行的图时)。

  • 不确定时,在宣布完成之前至少进行一次查看与批评的循环。

棘轮/账本/转向机制改编自 Karpathy 的 AutoResearch 循环,针对主观图像工作进行了调整(仅在存在客观门槛时设置客观门槛;以人工签核检查点代替无限运行)。这些策略行存在于服务器 instructions 和工具响应中;完整方法在 comfy_loop 提示中,该提示原样提供仓库的循环文档。

MCP 无法强制行为 —— 它暴露能力和指导。这使得循环成为代理被反复告知偏好的强、范围明确的默认。要在 Claude Code 中获得硬保证,请将相同文本安装为始终开启的技能:

mkdir -p ~/.claude/skills/comfyui-workflows
cp comfy_loop/docs/SKILL.md ~/.claude/skills/comfyui-workflows/

技能 = 始终开启的纪律,MCP = 它驱动的工具。这与 comfy_skill 提示提供的文件相同,因此它们不会分歧 —— 并且它委托 comfy_install 进行引导,而不是携带自己过时的配方。


工具参考

发现

工具

参数

返回

check_comfyui

循环步骤 0,以及一次真正的预检。当没有任何响应时,它会返回该怎么做,并针对这台机器给出具体建议——启动它找到的安装、创建一个安装,或为远程 URL 打开隧道(参见故障排除)。当它确实响应时,它仍会指出从当前状态到成功渲染之间还缺什么:torch 在 CPU 上运行(所有渲染都能工作,但慢约 50 倍,且没有任何错误报告)、磁盘上没有权重文件(一个功能完整但什么也渲染不了的 ComfyUI)、没有 ComfyUI-Manager(附上修复它的两条命令,因为 restart_comfyui 本身就是 Manager 的一个路由)。否则:节点数量、ComfyUI/torch 版本、每台设备的 VRAM 空闲/总量、ComfyUI-Manager 是否存在(没有 Manager = 无法安装、无法重启),以及队列是否已繁忙——或者明确的“不可达”。

list_nodes

keyword=""

类名或显示名称匹配的节点(是该技能仅按类搜索的严格超集)。省略 keyword 以获取数量。

get_node

class_name, verbose=False

单个节点的接口,以紧凑格式 @Name +req:T ?opt:T -out:T 呈现(约减少 90% 的 token);verbose=True 时返回完整 JSON(默认值、最小值/最大值)。

list_models

class_name, input_name=""

加载器在磁盘上提供的真实模型文件(真实情况),从其枚举中读取——同时处理旧版列表和 COMBO 编码。绝不凭空捏造文件名。

search_models

keyword="", model_type=""

可下载模型的目录(ComfyUI-Manager 的列表)——查找你可能还没有的 checkpoints/LoRAs/VAEs/upscalers;每个结果都会标记是否已安装。使用 install_model 安装。

search_templates

keyword="", source="online"

online(默认):完整的开放目录(Comfy-Org/workflow_templates,约 550 个),从 GitHub 实时按名称/标题/描述搜索——无需安装。installed:仅当前 ComfyUI 上已有的内容。

get_template

name, pack="", source="online", fmt="flowzip"

获取一个模板。fmt="flowzip"(默认)是紧凑的 FlowZip 文本(比原始 litegraph JSON 中位数小约 72%);fmt="json" 返回完整的 litegraph。无论哪种方式都是 litegraph——在提交前用 flowzip_to_api 转换。在线模板可能需要你缺少的节点/模型——用 find_missing_nodes 检查。

inflate_workflow

flowzip

将 FlowZip 文本展开回完整的 litegraph JSON。

flowzip_to_api

flowzip

将 FlowZip/litegraph 转换为 submit_workflow 所需的 API/prompt 格式:解析链接,将控件值映射到命名输入(类型强制转换),并沿着 Reroute 直通连接回溯到真正的生产者——reroute 没有后端类,因此指向它的链接必须重新接线,否则 API 图会引用一个不存在的节点(悬空和循环链会被报告,而不会崩溃)。子图会被展开,而不是跳过:内部内容以 <instance>:<inner> 命名空间形式到达,跨边界重新接线,并保留提升的控件值。未知类仍会被跳过并报告。运行前请检查;check_workflow 会在你花费 GPU 时间之前捕获其余问题。

template_slots

name, source="online", pack=""

列出模板可覆盖的输入(node_id → 参数 + 当前值),无需加载完整图——包括子图内的参数。还会返回作者自己的 Note/MarkdownNote 文本,其中实际包含触发词和所需权重,这些文本被引用为不可信数据,而非指令。

run_template

name, overrides={}, source="online", pack=""

使用 {node_id: {input: value}} 覆盖运行一个已知良好的模板——获取 → 转换 → 应用 → 提交——而无需将图转储到上下文中。然后使用 get_result/get_image。子图模板也可以运行——其内部内容会在过程中展开。

扩展(安装模板所需内容——主机上需要 ComfyUI-Manager

工具

参数

返回

find_missing_nodes

namepack=""source="online"workflow=None

将节点类与 /object_info 进行比对,并将每个缺失节点解析为可安装的包 ID。适用于模板或你已有的 workflow(API 格式或 litegraph),会递归进入子图。只读。

install_node_pack

pack_idversion="latest"

通过 ComfyUI-Manager 的队列安装包(受信任的注册表,不执行任意代码)。之后需要重启。

install_model

name

通过 Manager 将目录模型(来自 search_models)下载到正确的 models/<type>/ 文件夹中。无需重启——用 list_models 验证即可。

restart_comfyui

重启 ComfyUI(通过 Manager),使新节点注册到 /object_info 中。如实报告失败:收到 HTTP 响应 意味着什么都没重启。

update_comfyui

target="comfyui"|"nodes"|"all"

通过 Manager 的队列更新 ComfyUI 核心和/或所有已安装的包,然后告知你需要重启。会运行第三方代码——先说明这一点。不要在循环中途使用:它会在棘轮机制下改变节点行为,而此前的迭代是在旧代码上测量的。

验证 —— 在 GPU 介入之前一切可知的内容

工具

参数

返回

check_workflow

workflow(API 字典或 litegraph)

对"这能否在这台机器上运行"给出一个答案:你没有的节点类(同一轮中解析为包 ID)、不在该加载器列表中的模型文件名(附上你确实拥有的最接近项)、未设置的必填输入、指向不存在节点的连线、超出节点声明范围的值,以及一个没有输出节点的图——它运行全绿却没有任何可看的东西。/prompt 也能发现这些问题:每次提交一个,缺失检查点看起来和缺失包一模一样。这里"干净"意味着格式良好,并非正确——你仍然需要看像素。

构建 → 运行 → 查看

工具

参数

返回

upload_image

pathoverwrite=True

将本地图片上传到 ComfyUI 的 input/ 目录;返回可在 LoadImage 节点中引用的名称。

submit_workflow

workflow(API 格式字典)、client_id

成功时:返回 prompt_id + 一个"现在查看"的提示。失败时:返回 node_errors + 一个"修复该节点,重新提交"的提示。

get_result

prompt_idtimeout_s=120

轮询 /history;返回每个输出的 filename/subfolder/type,报告有多少节点由缓存提供(固定种子时只有你编辑位置下游的节点会重新运行——迭代刻意保持低成本),外加一条查看并迭代的指令。执行中途死掉的运行会返回失败节点及其异常(OOM 会得到"释放 free_vram,然后降低分辨率"的提示),而不是误导性的"已完成但无输出"。

get_image

filenamesubfolder=""image_type="output"

实际图片,返回给模型以便其判断像素。

compare_images

filename_afilename_bmode="side_by_side"|"difference"amplify=1.0

图片形式返回对比结果。difference = 0.5+0.5*(a−b):相同区域显示为平坦的中灰色,肉眼难以察觉的漂移会立刻显现。MCP 客户端没有运行 ffmpeg 的 shell——没有这个工具,"对比你的输出"根本无法执行。

image_diff_stats

filename_afilename_b

平均/最大绝对差 + 像素变化百分比——"我只改了我打算改的部分"的关卡。能捕捉到悄悄重写整个画面的"小调整"。

measure_image

filenamemetric="sharpness"|"tile_seam"|"brightness"

当任务简报包含客观测试时,为棘轮机制提供客观分数tile_seam 将环绕接缝与内部接缝进行比较(~1.0 = 真正可平铺,>2 = 真实接缝——肉眼一扫而过的断言);sharpness = 边缘能量,随真实细节增加而上升,当某次迭代只是柔化了图像时下降。

video_info

filenamesubfolder=""

视频输出的尺寸、帧率和帧数。在索引帧之前调用它——你需要知道范围,也需要知道即将对比的两个片段是否长度相同。

get_video_frame

filenameframe=0subfolder=""

视频输出的按帧索引的单帧,以图片形式返回。这是 get_image 的视频版:get_result 已经报告了 gifs/videos,但其他所有查看工具都只支持 Pillow,无法解码 mp4——因此对于 VHS/AnimateDiff/WAN 图,"调用 get_image 并查看"根本无法执行。

compare_video_frames

filename_afilename_bframe=0mode="side_by_side"|"difference"amplify=1.0

两个片段的同一帧索引处进行相同的对比。按时间戳对比会在长度不同时悄然出错(帧上限、裁剪、不同帧率)——你满怀信心地对比两个毫无关联的时刻。帧数不匹配时,警告会烧录在图片上,而不是留在你可以略过的文字里。

video_temporal_stats

filenamestride=1max_frames=120roi=None

帧间不稳定性以数字呈现——"是否闪烁"的客观关卡,任何单帧都无法展示这一点。使用朴素连续帧差分,因此真实运动会计入:在同一片段变更前后使用它,或对应当静止的区域传入 roi。已在已知样本对上验证(原始逐帧交换 3.53 → 光流平滑 2.38)。

循环,作为持久状态 —— 棘轮是一个工具,不是记忆练习。 一个很长的循环会被压缩;如果最佳结果和账本只存在于模型的 上下文中,棘轮就会悄悄停止转动,模型会重试它已经 拒绝过的更改,并且可能把一个回退版本当作最终结果交出来。所以它们存放在磁盘上。

工具

参数

返回

loop_start

brief, gate=""

开启一次运行 → run_idgate 是客观测试如果简报中有的话("必须无缝平铺"、"正好 3 个苹果")。

loop_record

run_id, change, outcome, graph=None, score=None

记录一次通过并应用棘轮"better" 将该图存储为新的最佳结果(可回退)。"worse"/"same"直接把最佳图交回来,这样回退只需一次调用——外加已经尝试过的更改列表,避免重复走死胡同。如果两次通过都带有客观 score数字会覆盖判定——一个想尽快结束的模型会把回归称为"更好"。

loop_sweep

run_id, workflow, node_id, input_name, values

在一次调用中,对一个输入的至多 8 个值运行同一个图——用于那些你无法靠推理得出的值(denoise、cfg、strength)。其他一切保持不变,因此输出只在一个变量上有所不同。值 → prompt_id 表被写入运行记录中,这样压缩后的模型可以从 loop_ledger 恢复它,而不是重新运行扫描。一次扫描产生一条记录的通过,而不是 N 条。

loop_best

run_id

目前最佳图。压缩后的真相来源——你的记忆不是。

loop_ledger

run_id

只追加的循环日志:每次通过、改了什么、效果如何。压缩后恢复线索;这也是你在签收时交给用户的日志。

loop_finish

run_id, summary=""

在收敛检查点关闭;返回最终账本 + 最佳图以供签收。

loop_report

run_id, out_path=""

将整个运行渲染为一个自包含的 HTML 页面——每次通过、保留了什么、回退了什么,缩略图以 base64 内联,因此即使 ComfyUI 关闭也能打开。最终图像证明不了什么;你丢弃的那些通过才表明循环已经收敛。

交付

工具

参数

返回

save_workflow

workflow (API dict), name="", save=True

API → UI/litegraph,这样人类可以打开并编辑它,保存到 ComfyUI 的工作流列表中。往返验证:结果被转换回 API 并与你的输入进行差异比对,因为 widgets_values 是按位置排列的,静默的差一错误会移动参数——一个看似合理但错误的文件比没有更糟。

控制

工具

参数

返回

system_stats

设备 / VRAM(在调整分辨率/批处理或 OOM 之后很有用)。

get_queue

正在运行和排队等待的内容。

job_status

prompt_id

一次运行在不阻塞的情况下处于什么状态:已排队(含其位置)、运行中、已完成并带有 N 个输出,或导致其终止的执行错误。当有多个任务在飞行中时——比如 loop_sweep——这正是你想要的。

cancel_job

prompt_id=""

丢弃一个排队的运行,或者如果该 id 正在执行则中断它。不带 id 会清空待处理队列但让正在运行的作业继续。interrupt 是粗暴版本。

interrupt

取消当前运行。

free_vram

unload_models=True

卸载模型并重置执行器缓存(POST /free)。循环自身的轻量在这里反而对你不利——缓存的通过占用 VRAM——所以在重写一个 OOM 的图之前,这是值得先试的廉价方案。不是即时的(要等到队列工作者的下一次迭代)且无法触及另一个进程的 VRAM;用 system_stats 确认。

comfyui_logs

lines=60, grep=""

跟踪 ComfyUI 自己的日志,失败会在那里自我解释:节点内部的 traceback、OOM、启动时导入失败的自定义节点(这正是它的类在 object_info 中缺失的原因)。

提示词: comfy_loop(完整自主方法)和 comfy_skill(紧凑 技能),两者都原样从仓库的 markdown 提供,外加 comfy_install—— 引导配方,针对服务器所运行的机器生成:如果已经有一个安装则进行安装, 用于构建 venv 的解释器(本服务器自己的,因此 Python 永远不是需要解决的先决条件), comfy-cligit 是否存在,以及这台机器的加速器实际需要的 torch 构建 (CUDA / ROCm / MPS / none)。服务器无法运行其中任何内容;代理可以, 而它正是这些内容的收件人。 资源: comfyui://object_info(实时完整转储)、comfyui://loop-methodcomfyui://skill


观看循环实际工作

完全通过这个 MCP 服务器驱动一个真实的 ComfyUI(RTX 4090,SD1.5), 简报:"一张清晰、锐利对焦的微距影棚照片,一个红苹果放在 温暖的木桌上,细腻的皮肤纹理,丰富的细节。" 种子固定为 42,这样每次通过 只改变一个旋钮,效果可以归因。客观指标是 Laplacian 方差(一种标准的清晰度/对焦度量)。

五次循环通过,从左到右:一个柔和扁平的苹果逐渐锐化为清晰、饱和、纹理丰富的一个

通过

一个更改

清晰度 (varLap)

通过观察得出的判定

1

基线 — 6 步,cfg 2.5

425

柔和、扁平、哑光。最弱。

2

步数 6 → 24

1204

更锐利——但高数字来自木纹,苹果皮仍然塑料感。

3

cfg 2.5 → 7.5

515

苹果变得更丰富(饱和、皮上斑点)——指标下降因为背景变柔和了。

4

euler → dpmpp_2m + karras

740

胜者。 清晰的高光、可见的皮孔、可信的木头。

5

步数 24 → 36

661

≈ 通过 4。收益递减 → 停止。

这个循环所基于的教训,现场捕捉:指标在第 2 轮达到峰值,但第 2 轮并不是最好的图像——它的分数被背景纹理抬高了,而不是苹果细节。获胜者(第 4 轮)是通过观察选出的。绿色数字是有效的,不一定是正确的。(example_apple.png 就是第 4 轮的结果。)

……以及另一半:当模型出错的时候

苹果的例子说明了为什么不能盲目信任指标。这次运行说明了为什么不能盲目信任模型——这正是棘轮机制是一个工具而不是提示词里的一句话的全部原因。

需求描述:"一种可无缝平铺的鹅卵石纹理——在接缝处没有可见的缝隙," 并带有一个客观门控(measure_imagetile_seam)。全程使用相同的种子,因此每一轮只改变一件事。下面的每个纹理都平铺为 2×2——接缝无处可藏。

三轮平铺 2x2 的结果:基线有接缝,循环平铺修复了它,x_only 让接缝回归并被回滚

轮次

唯一改动

tile_seam

棘轮

1

baseline SDXL

h 1.77 · v 1.23 → 临界

保留(首个)

2

SeamlessTile + MakeCircularVAE

h 0.78 · v 1.12 → 无缝

新最佳

3

tilingx_only

h 1.03 · v 1.56 → 接缝回归

已回滚

在第 3 轮,模型告诉 loop_record 结果是**"更好"**。但事实并非如此:x_only 只做水平平铺,让垂直方向的环绕仍然断裂——在右侧图像中可以看到石头在水平接缝处被平切。客观分数推翻了这一说法,恢复了第 2 轮,并把好的图交还回来。

这正是这个服务器存在的意义所要防止的失败:一个想要尽快收工的智能体会把回归称为改进。 如果"目前最佳"存在于模型的上下文中而不是磁盘上,那次回归就会成为最终答案。


安装

简而言之:让你的智能体来做。 把这段粘贴到 Claude Code(或任何带 shell 的 MCP 客户端)里,然后就不用管了:

https://github.com/huikku/comfyui-loop-mcp 设置 ComfyUI loop MCP——在我的客户端中注册它,如果 ComfyUI 没有在运行,也一并安装并启动它。

它拥有在不需要你的情况下完成这一切所需的一切:注册服务器只需一条 claude mcp add,一旦连接,comfy_install 提示会返回针对你的机器的引导方案——要启动的现有 ComfyUI、用来构建 venv 的解释器、你的显卡真正需要的 torch 构建版本、ComfyUI-Manager,以及模型应该放在哪里。然后 check_comfyui 会把仍然缺失的东西(没有权重、torch 跑在 CPU 上、没有 Manager)列为智能体需要修复的事项,而不是报告事项。

如果你更愿意粘贴配置而不是文字说明,下面这条可以直接从 GitHub 运行服务器——无需克隆,无需 pip install

{
  "mcpServers": {
    "comfyui": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/huikku/comfyui-loop-mcp", "comfyui-loop-mcp"],
      "env": { "COMFYUI_URL": "http://localhost:8188" }
    }
  }
}

Claude Code,一行命令:

claude mcp add comfyui -- uvx --from git+https://github.com/huikku/comfyui-loop-mcp comfyui-loop-mcp

改为克隆仓库,.mcp.json 就已经在那里了——Claude Code 在首次打开时就会提供该服务器,完全不需要命令。添加后重新连接客户端;MCP 服务器是在连接时读取的。

在其上进行开发:

git clone https://github.com/huikku/comfyui-loop-mcp && cd comfyui-loop-mcp
pip install -e .            # or: uv tool install --editable .

需要 Python ≥ 3.10 和一个可访问的 ComfyUI。安装 mcp[cli]httpxanyiopillow。兼容 MCP SDK 1.x 和 2.x——2.0 将 FastMCP 重命名为 MCPServer 并移动了 Image 辅助工具,服务器无论哪种方式都能导入。

之前安装的是 comfy-mcp 那个名字属于 PyPI 上的 Comfy-Org 的服务器,所以这个现在叫 comfyui-loop-mcp(导入包 comfy_loop,命令 comfyui-loop-mcp)。先运行 pip uninstall comfy-mcp,并更新你的 MCP 客户端配置。磁盘上已有的循环运行记录会被自动找到——旧的 ~/.comfy-mcp/runs 会继续被使用,直到你把 COMFY_LOOP_STATE_DIR 指向别处。

常驻纪律(Claude Code)

该方法也可以作为技能安装,这样它会在触发词出现时自动加载,而不是等待被要求——也让智能体来做这件事,或者:

mkdir -p ~/.claude/skills/comfyui-workflows
cp comfy_loop/docs/SKILL.md ~/.claude/skills/comfyui-workflows/

comfy_skill 提示所服务的文件相同,因此技能和服务器不会产生偏差。

配置

环境变量

默认值

用途

COMFYUI_URL

http://localhost:8188

你的 ComfyUI 服务器

COMFYUI_ONBOARDING_DIR

本包之上的仓库根目录

comfy_loop / comfy_skill 提示读取其 markdown 的位置

COMFYUI_TEMPLATES_REF

main

在线模板目录读取的 Comfy-Org/workflow_templates 的 Git 引用

COMFYUI_TEMPLATES_LIVE

未设置

设为 1 以从 GitHub 获取最新的目录索引,而不是使用捆绑的压缩快照

COMFY_LOOP_STATE_DIR

~/.comfyui-loop-mcp/runs

棘轮和账本的存放位置。如果你的运行记录已经在更名前的 ~/.comfy-mcp/runs 中,则回退到该路径

指向远程 ComfyUI

ComfyUI 通常绑定到 127.0.0.1,因此另一台机器上的 ComfyUI 默认无法通过网络访问。两种选择:

  • SSH 隧道(最简单,保持 ComfyUI 私有): 转发端口,然后让 COMFYUI_URL 保持为 localhost:

    ssh -N -L 8188:localhost:8188 your-remote-host
    # COMFYUI_URL stays http://localhost:8188
  • 将 ComfyUI 绑定到网络并直接指向它(仅在可信网络上——这会暴露一个未经认证的 API):

    python main.py --listen 0.0.0.0 --port 8188
    # COMFYUI_URL=http://<remote-ip>:8188

使用

  1. 在你的智能体中,加载 comfy_loop 提示(或让它读取 comfyui://loop-method 资源)以引入完整方法。如果你的客户端注入了服务器指令,偏好循环的策略已经生效。

  2. 给它一个目标。它会 check_comfyuilist_nodes / get_node / list_models → 构建 API 格式的 JSON → submit_workflowget_resultget_image,然后进行批评和迭代——每轮只改一处——直到它说不出缺陷,然后呈现结果供确认。

故障排查

  • "ComfyUI is NOT reachable"(ComfyUI 不可达) — 回复是一组指令,而不是抱怨,而且它们是发给智能体的,智能体拥有这个服务器没有的 shell:它会在本机上查找 ComfyUI($COMFYUI_PATH、comfy-cli 的工作区、~/ComfyUI~/comfy~/code~/github/opt),然后要么返回使用该安装自身的 venv python 的启动命令,要么在没有的情况下返回克隆 + venv + Manager + 启动的完整流程。如果 COMFYUI_URL远程的,它会有意提供本地安装——那只会在一台错误的机器上留下第二个未使用的 ComfyUI——而是给你 SSH 隧道方案。每个工具都会返回这个,不只是 check_comfyui;建议是在传输层附加的。

  • 找不到节点/模型 — 在 ComfyUI 一侧安装该包/模型,然后重启 ComfyUI,让 /object_info 反映它(在此之前 API 是过期的)。

  • get_image 返回空 — 确保图中有 SaveImage / PreviewImage 节点;get_result 会列出实际生成的内容。

  • install_node_pack 被阻止 / 无操作 — 安装工具需要主机上有 ComfyUI-Manager,并且 Manager 的安全级别必须允许 API 安装。安装后,需要 restart_comfyui 才能让 /object_info 显示新节点。

  • find_missing_nodes 选择了"错误的"包 — 多个包可能导出同名的节点;解析会取第一个注册表匹配项。如果某个安装没有提供该类,请检查报告的包并显式安装正确的那个。

许可证

MIT。

Install Server
A
license - permissive license
B
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • MCP server for Hailuo (MiniMax) AI video generation

  • MCP server for Luma Dream Machine AI video generation

  • MCP server for Flux AI image generation

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/huikku/comfyui-loop-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server