Skip to main content
Glama

comfyui-loop-mcp

それはComfyUIをただ駆動するだけではありません。ループを実行するものです: submit → get_result → get_image (LOOK) → compare_images → loop_record。ラチェット(best-so-far + ledger)はディスク上に保持されます

あなた自身の ComfyUI のためのループ対応 MCP サーバーです。 API を呼び出すだけではありません。ループを実行します: build → run → look → critique → fix、出力が実際にブリーフを満たすまで。

node_errors がゼロで実行されるグラフは、正しいのではなく、有効です。ゆがんだ手、ずれた背景、硬いマットエッジ、目に見えるタイルの継ぎ目 — そのどれもエラーログには現れません。ピクセルにのみ現れます。だからこそ、すべてのツール説明、すべてのツール応答、そしてサーバー自身の指示は、モデルがグラフを完成と宣言する前に look するよう促します。

他の誰も持っていない部分: ラチェットはツールであって、提案ではありません。 ほとんどのエージェントツールは ComfyUI を駆動します。これはループを管理します — 長いループではコンテキストが圧縮され、その瞬間に記憶されていた "best-so-far" は消えてしまいます: ラチェットは静かにラチェットを止め、モデルはすでに拒否した変更を再試行し、最終回答としてリグレッションを渡してしまうことがあります。だから、最良のグラフと台帳は、モデルのメモリではなく、ディスク上にあります。元に戻すことは、思い出しの行為ではなく、ツール呼び出しです。

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 は公式サーバーを 2つ 提供しています。これは、それらと並んで構築された3つ目の存在です — 独立して、そして問題の反対側から。

Comfy-Org/comfy-mcp (最初のコミットは 2026-07-01 で、このリポジトリの翌日ですが、公開はそちらが先でした) は、ローカルの ComfyUI を comfy-cli 経由で駆動します: すべてのツールは comfy バイナリを外部プロセスとして実行し、その JSON エンベロープを解析します。Comfy Cloud MCP (https://cloud.comfy.org/mcp) は、Comfy の GPU 上でグラフを実行するリモート HTTP サーバーです。どちらも ComfyUI チームによって構築・保守されています。

これは /prompt/object_info に直接 HTTP で通信します — CLI もアカウントも不要、httpx 以外にインストールするものもありません — そして、その機能面を、グラフが実行されたに始まる仕事の半分に費やしています。

実際の違い

彼らのローカルサーバーは、管理対象として ComfyUI インストールを扱います: 起動、停止、別バージョンへの切り替え、サインイン、ホストされたパートナーモデルへのクレジット使用、ログの追跡、パックの更新。これはこのリポジトリが持つ範囲より本当に大きく、プラットフォームベンダーが所有するのに最も適した領域です — ComfyUI や comfy-cli、パートナー API が動くたびに変化します。必要なのが インストールを駆動して保守すること なら、彼らのものを使ってください。

こちらは、管理対象を出力とみなします — それが私たちが責任を負っていた部分だからです。これは Alienrobot 自身のプロダクション業務から生まれました。そこでは、グラフが実行されることが仕事の始まりであり、終わりではありません。ここにはプロセスを起動したりクレジットを消費したりするものは何もありません。その代わりに: ピクセルをモデルに返し、2つのパスを差分してドリフトが隠れない画像にし、ブリーフが実際に要求するものを採点し、そして圧縮されたコンテキストがそれを失わないように best-so-far(現時点での最良)をディスク上に保持します。それが他の誰も持っていない部分です — /view を呼ぶのが難しいからではなく、「エージェントに look させ、リグレッションの上に構築するのを止めさせる」ことが、エンドポイントではなく規律だからです。

this repo

Comfy-Org/comfy-mcp

ComfyUI との通信方法

その HTTP API(/prompt/object_info/view

comfy-cli サブプロセス(comfy … --json

追加依存

なし(httpxpillow

comfy-cli ≥ 1.14、およびそれが認識するインストール

インストールしていない ComfyUI も扱える

はい — URL が到達できるものすべて(シェルを持たないボックスを含む)

部分的に。一部のツールは構造上ローカルのみ

結果を見る

get_imageget_video_frame — ピクセルをモデルに返す

fetch_outputs(inline_images=True)

結果を評価する

compare_images(差分モード)、image_diff_statsmeasure_image(タイルシーム / シャープネス)、video_temporal_stats

最良のものを保持する

loop_*: ディスク上のラチェット+台帳。元に戻す操作はツール呼び出し

パラメータを探索する

loop_sweep — 1 つの入力、N 個の値、1 回の呼び出し、実行に記録

vary_workflow — スロット値の直積をファイルに出力

グラフの事前チェック

check_workflow — 欠落パック、欠落モデルファイル、未設定の必須入力、デッドワイヤー、出力ノードなし、を 1 つの回答で

validate_workflow + workflow_deps + テンプレート local_check

サブグラフテンプレート

展開され再配線される(昇格したウィジェットは保持)

クライアント側で展開

探索のトークンコスト

コンパクトなノード表記(object_info 比 93% 削減、987 ノード); FlowZip グラフは litegraph 比 ~72% 削減

明言された目標ではない

不足分のインストール

ComfyUI-Manager: install_node_pack, install_model, restart_comfyui, update_comfyui

レジストリ install_node, download_model(バックグラウンド実行、キャンセル可能)、完全アップデート/バージョン切り替え

ゼロから稼働まで

エージェントが行う: comfy_install はこのマシンから埋められたプロンプト(既存インストール、この Python、このマシンのアクセラレータ)であり、失敗した呼び出しは開始/インストールコマンドを返す

ターミナルで comfy install を実行するよう指示する; launch_comfyui / stop_comfyui / switch_comfyui_version は既に存在するインストールを操作する

ComfyUI プロセスの実行

いいえ — 再起動のみ(Manager 経由); シェルはエージェントが所有

comfy-cli サブプロセスなので、可能

ホスト型/パートナーモデル、アカウント、クレジット

意図的になし

auth_login, partner_generate, 支出同意ゲート

ジョブ制御

submit_workflow, job_status, cancel_job, get_queue, interrupt

1 つの job ツール: status / wait / watch / cancel / queue

MCP サーフェス

43 ツール + 2 プロンプト + 3 リソース

39 ツール

サイズ / ライセンス

約 3,700 行、MIT

約 16,000 行、AGPL-3.0-or-later または商用

作者

Alienrobot — 当社自身の VFX/生成的作業のために構築され、使用されている

ComfyUI チーム、プラットフォーム本体と並行して

対応範囲

ループ: 発見、変換、出力の評価

インストール全体: ライフサイクル、アカウント、パートナー API、パック

どちらを使うか

  • GPU なしCloud MCP。ローカルにあるものは、手元にないハードウェアに対抗できない。

  • 「インストールして、実行して、動かし続ける」Comfy-Org/comfy-mcp。ライフサイクル、パートナーモデル、バックグラウンドダウンロード、バージョン固定。

  • 「最初の結果は動く、そして訓練された目がそれを拒否する」これ。 6 本の指、ずれた背景、硬いマットエッジ、目に見えるタイルシーム、沸騰するクリップ。それがループであり、これは完全にそのループを中心に構築されたサーバーだ。

これらは組み合わせ可能です。両方を実行することを妨げるものは何もなく、ツール名も衝突しません。 (パッケージ名は衝突しました。このリポジトリも一時的に comfy-mcp という名前でした。これは ComfyUI の名前空間を所有する人々と争っても勝ち目のない議論です。そのため comfyui-loop-mcp となり、インポートパッケージは comfy_loop で、両方をサイドバイサイドでインストールできます。)

追加しないもの

競合他社の機能リストを丸ごと取り込むと、結局は平凡なツールが 2 つになるだけです。彼らから取り入れたものは、ループが必要とするもの — 事前チェック、ジョブ状態、ログの追跡、VRAM の余裕、アップデート — だけです。意図的に除外しているものは次のとおりです:

  • アカウント、クレジット、ホスト型パートナーモデル。 売り文句は「あなたのマシンから何も出て行かない、サインアップ不要、メーターなし」です。クレジットゲートはそれと矛盾します。Kling や Veo を使いたいなら、向こうのサーバーが同意ゲート付きで適切に行います。このリポジトリが再発明する理由はありません。

  • ComfyUI プロセスの起動と停止。 HTTP クライアントは実行していないサーバーを起動できません。また、シェルを持たないボックスにこれを向けることはエッジケースではなくサポート対象です。restart_comfyui(Manager 経由)が正直な限界です — しかし「できない」は「助けない」と同じではありません。エージェントは通常シェルを持っているので、到達不能なサーバーはこのマシン用のインストール/起動コマンドを返し、エージェントがそれらを実行することを期待します。このサーバーも Comfy-Org のものも、あなたの代わりに ComfyUI をインストールしません(向こうはターミナルで comfy install を実行するよう促します)。違いは、ここでは指示がツール呼び出しを通して返され、それに対応できる人に向けられていることです。

  • ワークフローの保存/共有/サービスとしての再現。 save_workflow は往復検証済みのファイルを渡します。その後それがどこに置かれるかはあなた次第です。

Related MCP server: ComfyPilot

ループにマッピングされた 3 つの MCP プリミティブ

プリミティブ

公開内容

ループ工程

ツール

check_comfyui, list_nodes, get_node, list_models, search_models, search_templates, get_template

推測するな、発見せよ

find_missing_nodes, install_node_pack, install_model, restart_comfyui, update_comfyui

拡張(テンプレートが必要とするものをインストール)

check_workflow

GPUが関与する前に検証

inflate_workflow, flowzip_to_api

圧縮(トークン効率の高いグラフ)

template_slots, run_template

上書き付きで実績のあるテンプレートを実行(グラフはコンテキスト不要)

upload_image, submit_workflow

ビルド → 実行

get_result, get_image(実際の画像を返す)

見る

loop_start, loop_record, loop_sweep, loop_best, loop_ledger, loop_finish, loop_report

ラチェット+台帳、ディスク上

system_stats, get_queue, job_status, cancel_job, interrupt, free_vram, comfyui_logs

制御

プロンプト

comfy_loop(完全メソッド)、comfy_skill(コンパクト)、comfy_install(ブートストラップ)

規律全体をひとつのコマンドで

リソース

comfyui://object_info(ライブ)、comfyui://loop-methodcomfyui://skill

真実+ドキュメント

3つの点が、これを単なるAPIラッパーではなくループ対応にしている:

  1. get_image はレンダリング済みの出力をモデルに返す——これが「見る」を現実にするステップだ。モデルは文字通りピクセルを見る。

  2. ツールの応答がループを促進する。 submit_workflow は成功時に*「有効だが正しくはない——さあ見よ」と言い、拒否時には「イテレーションではない——指定されたノードを修正して再提出せよ」と言う。get_result は指示で締めくくる:「ここで止まるな——見て、それからパラメータを1つ変更するか、ブリーフが満たされたと宣言せよ」*

  3. サーバー指示にはループ優先ポリシー(下記参照)が含まれており、クライアントが接続時に注入する。

ループ優先ポリシー(サーバー指示)

ハンドシェイク時にサーバーはエージェントにいつループすべきか、いつすべきでないかを伝える:

  • 常にJSONを書く前にライブAPIから発見し、実行して検証する;node_errors はイテレーションではない——修正して再提出する。

  • ループを優先するのは、訓練された目が出力を拒否しうる場合——構図/数、類似性、マット/エッジ品質、アップスケール/レストア、再ライティング、テクスチャの継ぎ目、動画の時間的安定性、「見た目を良くする」など。

  • ラチェット——これまでの最良を保持し、それを上回る場合のみ変更を維持し、そうでなければ元に戻して別の方法を試す;プラトーではパラメータ → 配線 → モデルの順にピボットする。ブリーフに客観的テストがある場合のみそれをゲートとし、それ以外は目視で判断する。

  • ループをスキップするのは機械的なタスクのみ(フォーマット変換、純粋なAPIクエリ、またはユーザーが実行可能なグラフだけを明示的に望む場合)。

  • 迷ったときは、完了を宣言する前に少なくとも1回は見て批評するパスを行う。

ラチェット/台帳/ピボットは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 のトンネルを開くか(トラブルシューティング を参照)。応答する場合も、ここからレンダリング成功までの間に何が立ちはだかっているかを挙げます: CPU 上で動作している torch(すべてのレンダリングは動作しますが、約50倍遅く、エラーは報告されません)、ディスク上に重みがない(完全に機能する ComfyUI だが何もレンダリングできない)、ComfyUI-Manager がない(修正するための2つのコマンド付き。restart_comfyui 自体が Manager ルートのため)。それ以外は: ノード数、ComfyUI/torch のバージョン、デバイスごとの VRAM 空き vs 合計、ComfyUI-Manager が存在するか(Manager なし = インストール不可、再起動不可)、キューがすでにビジーかどうか — または明確な「到達不能」。

list_nodes

keyword=""

クラス名または表示名が一致するノード(スキルのクラス限定検索の厳密なスーパーセット)。キーワードを省略すると件数を返します。

get_node

class_name, verbose=False

1つのノードのインターフェースをコンパクト@Name +req:T ?opt:T -out:T として返します(トークン約90%減)。verbose=True では完全な JSON(デフォルト値、最小/最大)を返します。

list_models

class_name, input_name=""

ローダーがディスク上で提供する実際のモデルファイル(グラウンドトゥルース)を、その enum から読み取ります。レガシーリストと 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 → API/プロンプト形式(submit_workflow 用)に変換します: リンクを解決し、ウィジェット値を名前付き入力にマッピングし(型強制)、Reroute パススルーをたどって実際の生成元まで戻ります — Reroute ノードにはバックエンドクラスがないため、それを指すリンクは配線し直す必要があります。そうしないと API グラフが存在しないノードを参照することになります(未接続および循環チェーンは報告され、クラッシュしません)。サブグラフは展開され、スキップされません: 内部は <instance>:<inner> という名前空間で届き、境界をまたいで配線し直され、プロモートされたウィジェット値は保持されます。未知のクラスは引き続きスキップされ報告されます。実行前に確認してください。check_workflow が GPU 時間を費やす前に残りを捕捉します。

template_slots

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

テンプレートの上書き可能な入力(node_id → params + 現在の値)を完全なグラフを読み込まずに一覧表示します — サブグラフ内のパラメータも含みます。また、作者自身の Note/MarkdownNote テキストも返します。そこにはトリガーワードと必要な重みが実際に含まれており、命令としてではなく信頼できないデータとして引用符付きで示されます。

run_template

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

動作確認済みのテンプレートを {node_id: {input: value}} オーバーライドで実行します — 取得 → 変換 → 適用 → 送信 — グラフをコンテキストに展開せずに。その後 get_result/get_image を使用します。サブグラフテンプレートも実行されます — その内部は途中で展開されます。

拡張(テンプレートが必要とするものをインストール — ホストに ComfyUI-Manager が必要です)

ツール

引数

戻り値

find_missing_nodes

name, pack="", source="online", workflow=None

ノードクラスを /object_info と差分比較し、欠落している各ノードをインストール可能なパック ID に解決します。テンプレートまたは既に持っている workflow(API形式または litegraph)に対して動作し、サブグラフを再帰的に走査します。読み取り専用。

install_node_pack

pack_id, version="latest"

ComfyUI-Manager のキューを介してパックをインストールします(信頼されたレジストリ、任意のコードは実行されません)。その後、再起動が必要です。

install_model

name

search_models からカタログモデルを Manager 経由で適切な 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 もこれらを検出します: 送信ごとに1つ、チェックポイントの欠落はパックの欠落とまったく同じに見えます。ここでクリーンとは整形式という意味であり、正しいという意味ではありません — それでもピクセルを確認する必要があります。

構築 → 実行 → 確認

ツール

引数

戻り値

upload_image

path, overwrite=True

ローカル画像を ComfyUI の input/ ディレクトリにアップロードし、LoadImage ノードで参照する名前を返します。

submit_workflow

workflow(API形式の dict), client_id

成功時: prompt_id + 「今すぐ確認せよ」という促し。失敗時: node_errors + 「そのノードを修正して再送信せよ」という促し。

get_result

prompt_id, timeout_s=120

/history をポーリングし、各出力の filename/subfolder/type を返し、キャッシュから提供されたノード数を報告します(シードを固定していれば、編集箇所より下流のノードだけが再実行されます — 反復は意図的に安価です)。さらに、確認して反復するよう指示します。実行途中で停止した実行は、誤解を招く「完了したが出力なし」ではなく、失敗したノードとその例外として返されます(OOM の場合は「free_vram してから解像度を下げる」という促し)。

get_image

filename, subfolder="", image_type="output"

実際の画像をモデルに返し、ピクセルを判断できるようにします。

compare_images

filename_a, filename_b, mode="side_by_side"|"difference", amplify=1.0

比較結果を画像として返します。difference = 0.5+0.5*(a−b): 同一の領域はフラットな中間グレーになり、目では決して気づかないドリフトが浮き上がります。MCP クライアントには ffmpeg を実行するシェルがありません — これがないと「出力を diff する」ことは実行できません。

image_diff_stats

filename_a, filename_b

平均/最大絶対差分 + 変化したピクセルの割合(%) — 「意図した箇所だけを変更した」ことを確認するゲート。フレームをこっそり書き換えてしまう「小さな調整」を捕捉します。

measure_image

filename, metric="sharpness"|"tile_seam"|"brightness"

要件に客観的テストがある場合の、ラチェット用の客観的スコアtile_seam は、ラップアラウンドの継ぎ目を内部の継ぎ目と比較します(~1.0 = 正真正銘のタイル、>2 = 実際のシーム — 目が素通りするような主張)。sharpness = エッジエネルギーで、実際のディテールで上昇し、パスが単に画像をぼかしただけなら低下します。

video_info

filename, subfolder=""

ビデオ出力の寸法、fps、フレーム数。フレームにインデックスを付ける前に呼び出してください — 範囲が必要ですし、比較しようとしている2つのクリップがそもそも同じ長さかどうかを知る必要があります。

get_video_frame

filename, frame=0, subfolder=""

ビデオ出力の1フレームをフレームインデックス指定で画像として返します。get_image のビデオ版: get_result はすでに gifs/videos を報告しますが、他のすべての確認ツールは Pillow のみで mp4 をデコードできません。そのため、VHS/AnimateDiff/WAN のグラフでは「get_image を呼び出して確認する」ことは実行不可能でした。

compare_video_frames

filename_a, filename_b, frame=0, mode="side_by_side"|"difference", amplify=1.0

両クリップの同じフレームインデックスで同じ比較を行います。タイムスタンプで比較すると、長さが異なった時点で(フレーム上限、トリム、fps の違い)静かに誤ります — 無関係な2つの瞬間を完全な自信を持って比較することになります。フレーム数が一致しない場合、警告は画像に焼き付けられ、読み飛ばせるテキストとしては残りません。

video_temporal_stats

filename, stride=1, max_frames=120, roi=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"最良のグラフをそのまま返すので、元に戻すのは1回の呼び出しで済む — さらに、すでに試した変更のリストも返すので、行き詰まりを繰り返さない。両方のパスが客観的な score を持つ場合、数値が判定を上書きする — 終わりにしたいモデルは退行を "better" と呼ぶからだ。

loop_sweep

run_id, workflow, node_id, input_name, values

同じグラフを1つの入力の最大8つの値にわたって、1回の呼び出しで実行する — 推論で到達できない値(denoise、cfg、strength)のため。他のすべては同一に保たれるため、出力はちょうど1つの変数だけが異なる。値 → prompt_id テーブルは実行内に書き込まれるので、圧縮されたモデルはスイープを再実行する代わりに loop_ledger からそれを復元する。スイープは1つの記録されたパスを生成し、N個ではない。

loop_best

run_id

現時点での最良のグラフ。圧縮後の真実の源 — あなたの記憶ではない。

loop_ledger

run_id

追記専用のループログ:すべてのパス、何が変わったか、それが何をしたか。圧縮後にスレッドを復元する。また、承認時にユーザーに渡すログでもある。

loop_finish

run_id, summary=""

収束チェックポイントで閉じ、承認のために提示する最終的な台帳と最良のグラフを返す。

loop_report

run_id, out_path=""

実行全体を1つの自己完結型HTMLページとしてレンダリングする — すべてのパス、何が保持されたか、何が元に戻されたか、サムネイルはbase64でインライン化され、ComfyUIをオフにしても開ける。最終画像は何も証明しない。捨てたパスこそが、ループが収束したことを示すのだ。

配信

ツール

引数

戻り値

save_workflow

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

API → UI/litegraph に変換し、人間が開いて編集できるようにし、ComfyUIのワークフローリストに保存する。ラウンドトリップ検証済み:結果はAPIに変換し直され、入力と差分比較される。widgets_values は位置指定であり、静かな1つずれがパラメータをずらすからだ — もっともらしいが間違ったファイルは、何もないより悪い。

制御

ツール

引数

戻り値

system_stats

デバイス / VRAM(解像度やバッチの調整時、またはOOM後に有用)。

get_queue

実行中と保留中のもの。

job_status

prompt_id

ブロックせずに1つの実行の状態:キュー済み(位置付き)、実行中、N個の出力で完了、またはそれを殺した実行エラー。複数が進行中の場合に必要なもの — たとえば loop_sweep

cancel_job

prompt_id=""

1つのキュー済み実行を削除する。または、そのIDが実行中のものであれば中断する。IDなしでは保留キューをクリアし、実行中のジョブには触れない。interrupt は乱暴なバージョン。

interrupt

現在の実行をキャンセルする。

free_vram

unload_models=True

モデルをアンロードし、エグゼキュータのキャッシュをリセットする(POST /free)。ループ自身の軽量さはここでは逆効果になる — キャッシュされたパスはVRAMだからだ — したがって、OOMしたグラフを書き直す前に試すべき安価な方法。即時ではない(キューワーカーの次の反復で反映される)。別のプロセスのVRAMには触れない。system_stats で確認すること。

comfyui_logs

lines=60, grep=""

ComfyUI自身のログの末尾を表示する。そこでは失敗が自ら説明する:ノード内のトレースバック、OOM、起動時にインポートに失敗したカスタムノード(それが object_info にそのクラスが存在しない理由だ)。

プロンプト: comfy_loop(完全自律メソッド)と comfy_skill(コンパクトな スキル)。どちらもリポジトリのmarkdownから逐語的に提供される。さらに comfy_install — ブートストラップ手順。サーバーが実行されているマシンに対して生成される: すでにインストールがある場合のインストール方法、venvを構築するためのインタープリタ (このサーバー自身のもの。Pythonが解決の前提条件になることはない)、comfy-cligit が存在するかどうか、そしてこのボックスのアクセラレータが実際に必要とする torchビルド(CUDA / ROCm / MPS / なし)。サーバーはそのどれも実行できない。 エージェントは実行できる。そしてそれが宛先だ。 リソース: comfyui://object_info(ライブの完全ダンプ)、comfyui://loop-methodcomfyui://skill


ループが実際に動くのを見る

このMCPサーバーを通じて実際のComfyUI(RTX 4090、SD1.5)に対して完全に駆動される。 ブリーフ:「暖かい木のテーブルの上の1個の赤いりんごの、くっきりとシャープに焦点の合ったマクロスタジオ写真、細かい皮の質感、豊かなディテール。」 シードは42に固定され、各パスがちょうど1つのつまみを変更し、効果が帰属可能になる。 客観的指標はラプラシアン分散(標準的なシャープネス/焦点の尺度)。

5つのループパス、左から右へ:柔らかく平らなりんごが、くっきりと彩度の高い、豊かなテクスチャのものへとシャープになる

パス

1つの変更

シャープネス (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)。シードは全体で同じため、 各パスはちょうど 1 つのことだけを変更する。以下のすべてのテクスチャは 2×2 にタイルされている — シームは隠れる場所がない。

2×2 にタイルされた 3 つのパス: ベースラインはシームあり、円形タイルが修正、x_only がシームを復活させて差し戻し

パス

1 つの変更

tile_seam

ラチェット

1

ベースライン 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 に結果が "better" だと伝えた。実際は違った: x_only は水平にタイルし、垂直方向のラップは壊れたまま — 右の画像で 石が水平の継ぎ目に沿って平らに切り落とされているのが見える。客観スコアが その主張を覆し、パス 2 を復元し、良いグラフを渡し返した。

これこそがこのサーバーが防ぐために存在する失敗である: 終わりたいエージェントは 回帰を改善と呼ぶ。 もし best-so-far がディスク上ではなくモデルのコンテキストに あったなら、その回帰が最終回答になっていただろう。


インストール

短いバージョン: エージェントにやってもらう。 これを Claude Code(または シェルを持つ任意の MCP クライアント)に貼り付けて、そこで止める:

https://github.com/huikku/comfyui-loop-mcp から ComfyUI loop MCP をセットアップ — クライアントに登録し、ComfyUI が動いていなければインストールと起動も行う。

あなたの手を借りずにそれを完了するために必要なものはすべて揃っている: サーバーの登録は claude mcp add 1 つで、接続後には 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 なら 1 行:

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 は FastMCPMCPServer に改名し、Image ヘルパーを移動したが、 サーバーはどちらの方法でもインポートする。

comfy-mcp としてインストールしていた場合? その名前は PyPI 上で Comfy-Org のサーバーのものであるため、 これは現在 comfyui-loop-mcp(インポートパッケージ comfy_loop、コマンド comfyui-loop-mcp)。最初に pip uninstall comfy-mcp を実行し、MCP クライアント設定を更新する。ディスク上の既存のループ実行は自動的に見つかる — COMFY_LOOP_STATE_DIR を別の場所に指定するまで、古い ~/.comfy-mcp/runs が 引き続き使用される。

常時オンの規律(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 プロンプトがマークダウンを読み込む場所

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 は デフォルトではネットワーク越しに到達できない。2 つのオプションがある:

  • 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 を実行し、批判と反復を — パスごとに 1 つの変更 — 欠陥を名指しできなくなるまで行い、承認のために結果を提示する。

トラブルシューティング

  • 「ComfyUI に到達できません」 — 返信は苦情ではなく一連の指示であり、 このサーバーにはないシェルを持つエージェント宛てである: このマシン上の ComfyUI($COMFYUI_PATH、comfy-cli のワークスペース、~/ComfyUI~/comfy~/code~/github/opt)を探し、そのインストールの venv python を使った 起動コマンドか、なければクローン + venv + Manager + 起動シーケンスを返す。 COMFYUI_URLリモートの場合、ローカルへのインストールは意図的に 提案しない — それは間違ったマシンに 2 つ目の未使用 ComfyUI を残すだけであり、 代わりに SSH トンネルを提示する。すべてのツールがこれを返す — check_comfyui だけでなく、アドバイスはトランスポートに付加されている。

  • ノード/モデルが見つからない — ComfyUI 側でパック/モデルをインストールし、 その後 ComfyUI を再起動して /object_info に反映させる(それまで API は 古い情報のまま)。

  • get_image が何も返さない — グラフに SaveImage / PreviewImage ノードがあることを確認する; get_result は実際に生成されたものを列挙する。

  • install_node_pack がブロックされる / 何もしない — インストールツールは ホストに ComfyUI-Manager が必要で、 Manager のセキュリティレベルが API インストールを許可している必要がある。 インストール後、/object_info に新しいノードが表示される前に restart_comfyui が必要。

  • 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