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

Un servidor MCP consciente del bucle para tu propio ComfyUI. No solo llama a la API — ejecuta el bucle: construir → ejecutar → mirar → criticar → arreglar, hasta que el resultado cumple realmente el encargo.

Un grafo que se ejecuta sin node_errors es válido, no correcto. Manos deformadas, un fondo desplazado, un borde de mate duro, una costura de mosaico visible — nada de eso aparece en un registro de errores. Solo se ve en los píxeles. Por eso cada descripción de herramienta, cada respuesta de herramienta y las propias instrucciones del servidor empujan al modelo a mirar antes de declarar un grafo como terminado.

La parte que nadie más tiene: el trinquete es una herramienta, no una sugerencia. La mayoría de las herramientas de agente controlan ComfyUI. Esta gestiona el bucle — un bucle largo hace que su contexto se compacte, y en el momento en que eso ocurre, un "mejor hasta ahora" recordado se pierde: el trinquete deja de funcionar silenciosamente, el modelo reintenta cambios que ya rechazó, y puede entregarte una regresión como respuesta final. Así que el mejor grafo y el registro viven en disco, no en la memoria del modelo. Revertir es una llamada a una herramienta, no un acto de memoria.

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

El método se incluye con el servidor. El prompt del bucle y la skill de Claude Code viven en comfy_loop/docs/ y se empaquetan en la wheel, de modo que comfy_loop / comfy_skill / comfy_install los sirven textualmente desde donde esté instalado el servidor — una sola fuente, nada que mantener sincronizado. (Nacieron en comfyui-llm-onboarding-prompt, que ya no se mantiene; este repositorio es donde se conservan ahora).


Cómo se compara con los propios servidores MCP de Comfy

ComfyUI incluye dos servidores oficiales, y esto es una tercera cosa construida junto a ellos — de forma independiente, y desde el otro extremo del problema.

Comfy-Org/comfy-mcp (primer commit 2026-07-01, un día después que este, aunque fue público primero) controla un ComfyUI local a través de comfy-cli: cada herramienta ejecuta el binario comfy y analiza su sobre JSON. Comfy Cloud MCP (https://cloud.comfy.org/mcp) es un servidor HTTP remoto que ejecuta el grafo en las GPU de Comfy. Ambos están construidos y mantenidos por el equipo de ComfyUI.

Este habla HTTP directamente a /prompt y /object_info — sin CLI, sin cuenta, nada que instalar más allá de httpx — y dedica su superficie a la mitad del trabajo que comienza después de que un grafo se ejecuta.

La diferencia real

Su servidor local trata la instalación de ComfyUI como lo que hay que gestionar: iniciarlo, detenerlo, cambiarlo a otra versión, iniciar sesión, gastar créditos en modelos de socios alojados, revisar sus registros, mantener los paquetes actualizados. Esa es una superficie genuinamente más grande que la de este repositorio, y es la superficie que mejor puede poseer un proveedor de plataforma — se mueve cada vez que ComfyUI, comfy-cli o las API de los socios se mueven. Si lo que necesitas es controlar y mantener mi instalación, usa el suyo.

Este trata la salida como lo que hay que gestionar — porque esa es la parte de la que éramos responsables. Salió del propio trabajo de producción de Alienrobot, donde un grafo que se ejecuta es el comienzo del trabajo, no el final. Nada de esto inicia un proceso ni gasta un crédito. En su lugar: devuelve los píxeles al modelo, compara dos pasadas en una imagen donde la deriva no puede esconderse, puntúa lo que el encargo realmente exige, y mantiene el mejor-hasta-ahora en disco para que un contexto compactado no pueda perderlo. Esa es la parte que nadie más tiene — no porque sea difícil llamar a /view, sino porque "haz que el agente mire, y evita que construya sobre una regresión" es una disciplina, no un punto final.

este repo

Comfy-Org/comfy-mcp

Habla con ComfyUI mediante

su API HTTP (/prompt, /object_info, /view)

subprocesos de comfy-cli (comfy … --json)

Dependencia adicional

ninguna (httpx, pillow)

comfy-cli ≥ 1.14 y una instalación que conozca

Ve un ComfyUI que no instalaste

sí: cualquier cosa a la que llegue la URL, incl. una máquina en la que no tienes shell

parcialmente; algunas herramientas son solo locales por construcción

Ver el resultado

get_image, get_video_frame: píxeles de vuelta al modelo

fetch_outputs(inline_images=True)

Evaluar el resultado

compare_images (modo diferencia), image_diff_stats, measure_image (costura de tesela / nitidez), video_temporal_stats

Conservar el mejor

loop_*: trinquete + registro en disco, revertir es una llamada de herramienta

Explorar un parámetro

loop_sweep: una entrada, N valores, una llamada, registrado en la ejecución

vary_workflow: producto cruzado de valores de ranura en archivos

Comprobación previa de un grafo

check_workflow: paquetes faltantes, ARCHIVOS de modelo faltantes, entradas obligatorias sin definir, cables muertos, sin nodo de salida, en una sola respuesta

validate_workflow + workflow_deps + plantilla local_check

Plantillas de subgrafo

expandidas y recableadas (los widgets promovidos se conservan)

expandidas en el cliente

Coste de tokens del descubrimiento

notación compacta de nodos (93% menos de object_info, 987 nodos); grafos FlowZip ~72% menos que litegraph

no es un objetivo declarado

Instalar lo que falta

ComfyUI-Manager: install_node_pack, install_model, restart_comfyui, update_comfyui

registro install_node, download_model (en segundo plano, cancelable), actualización completa/cambio de versión

De cero a funcionando

lo hace el agente: comfy_install es un prompt rellenado desde esta máquina (instalación existente, este Python, el acelerador de esta máquina), y cualquier llamada fallida devuelve los comandos de inicio/instalación

te dice que ejecutes comfy install en una terminal; launch_comfyui / stop_comfyui / switch_comfyui_version gestionan una instalación que ya existe

Ejecutar el proceso de ComfyUI

no: solo reinicio (vía Manager); el agente es quien tiene el shell

subprocesos de comfy-cli, así que sí

Modelos alojados/de socios, cuentas, créditos

no, deliberadamente

auth_login, partner_generate, puertas de consentimiento de gasto

Control de trabajos

submit_workflow, job_status, cancel_job, get_queue, interrupt

una herramienta job: estado / espera / vigilancia / cancelación / cola

Superficie MCP

43 herramientas + 2 prompts + 3 recursos

39 herramientas

Tamaño / licencia

~3.700 líneas, MIT

~16.000 líneas, AGPL-3.0-or-later o comercial

Creado por

Alienrobot: creado para, y usado en, nuestro propio trabajo de VFX/generativo

el equipo de ComfyUI, junto con la propia plataforma

Alcance del compromiso

el bucle: descubrimiento, conversión y evaluación de la salida

toda la instalación: ciclo de vida, cuentas, API de socios, paquetes

Cuál usar

  • Sin GPUCloud MCP. Nada local compite con el hardware que no tienes.

  • "Instálalo, ejecútalo, mantenlo funcionando"Comfy-Org/comfy-mcp. Ciclo de vida, modelos de socios, descargas en segundo plano, fijación de versiones.

  • "El primer resultado funciona, y un ojo entrenado lo rechaza"este. Seis dedos, un fondo a la deriva, un borde de mate duro, una costura de tesela visible, un clip que hierve. Eso es un bucle, y este es un servidor construido enteramente en torno a él.

Se complementan: nada te impide ejecutar ambos, y los nombres de las herramientas no chocan. (Los nombres de paquete sí chocaban: este también fue comfy-mcp, brevemente, que es una discusión perdida con la gente que posee el espacio de nombres de ComfyUI. De ahí comfyui-loop-mcp; el paquete de importación es comfy_loop, y ambos pueden instalarse lado a lado.)

Lo que no vamos a añadir

Absorber la lista de funciones de un competidor al por mayor es como se acaba con dos herramientas mediocres. Lo que hay aquí de las suyas es lo que un bucle necesita: comprobación previa, estado del trabajo, seguimiento de registros, margen de VRAM, actualizaciones. Lo que queda fuera, a propósito:

  • Cuentas, créditos, modelos de socios alojados. La propuesta es "nada sale de tu máquina, sin registro, sin medidor." Una puerta de créditos la contradice. Si quieres Kling o Veo, su servidor lo hace correctamente, con puertas de consentimiento que este repo no tiene razón para reinventar.

  • Iniciar y detener el proceso de ComfyUI. Un cliente HTTP no puede iniciar un servidor que no está en ejecución, y apuntar esto a una máquina en la que no tienes shell es un caso soportado, no uno marginal. restart_comfyui (vía Manager) es el límite honesto — pero "no poder" no es lo mismo que "no ayudar": el agente normalmente sí tiene shell, así que un servidor inalcanzable devuelve los comandos de instalación/inicio para esta máquina y espera que el agente los ejecute. Ni este servidor ni el de Comfy-Org instalan ComfyUI por ti (el suyo te remite a comfy install en una terminal); la diferencia es que aquí las instrucciones vuelven a través de la llamada de herramienta, dirigidas a quien pueda actuar sobre ellas.

  • Guardar / compartir / reproducir workflow como servicio. save_workflow te entrega un archivo verificado de ida y vuelta. Dónde viva después es asunto tuyo.

Related MCP server: ComfyPilot

Las tres primitivas de MCP, mapeadas al bucle

Primitiva

Qué expone

Paso del bucle

Herramientas

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

Descubre, no adivines

find_missing_nodes, install_node_pack, install_model, restart_comfyui, update_comfyui

Amplía (instala lo que necesita una plantilla)

check_workflow

Verifica antes de que intervenga la GPU

inflate_workflow, flowzip_to_api

Comprime (grafos eficientes en tokens)

template_slots, run_template

Ejecuta una plantilla probada con anulaciones (sin grafo en contexto)

upload_image, submit_workflow

Construir → Ejecutar

get_result, get_image (devuelve la imagen real)

Mira

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

Trinquete + registro, en disco

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

Control

Prompts

comfy_loop (método completo), comfy_skill (compacto), comfy_install (arranque)

Toda la disciplina, un solo comando

Recursos

comfyui://object_info (en vivo), comfyui://loop-method, comfyui://skill

Verdad + documentación

Tres cosas lo hacen consciente del bucle en lugar de un simple envoltorio de API:

  1. get_image devuelve la salida renderizada al modelo — ese es el paso que hace que «mirar» sea real. El modelo ve literalmente los píxeles.

  2. Las respuestas de las herramientas impulsan el bucle. submit_workflow en caso de éxito dice «válido, no correcto — ahora MIRA»; en caso de rechazo dice «no es una iteración — corrige el nodo indicado y vuelve a enviarlo». get_result termina con una directiva: «no te detengas aquí — MIRA, luego cambia un parámetro o declara cumplido el encargo».

  3. Las instrucciones del servidor incluyen una política de preferencia por el bucle (ver más abajo) que el cliente inyecta al conectarse.

La política de preferencia por el bucle (instrucciones del servidor)

En el apretón de manos, el servidor le dice al agente cuándo hacer bucle y cuándo no:

  • SIEMPRE descubre desde la API en vivo antes de escribir JSON; valida ejecutando; node_errors no son iteraciones — corrige y vuelve a enviar.

  • PREFIERE EL BUCLE siempre que un ojo entrenado pudiera rechazar la salida — composición/conteo, parecido, calidad de mate/bordes, upscale/restauración, reiluminación, costuras de textura, estabilidad temporal del vídeo, «haz que se vea bien».

  • TRINQUETE — conserva el mejor hasta ahora; mantén un cambio solo si lo supera, si no revierte y prueba algo distinto; pivota parámetro → cableado → modelo en meseta. Aplica un criterio objetivo solo donde el encargo lo tenga; juzga a ojo en caso contrario.

  • OMITE el bucle solo para tareas mecánicas (conversión de formato, una consulta de API pura, o cuando el usuario quiere explícitamente solo un grafo ejecutable).

  • Cuando dudes, haz al menos una pasada de mirar-y-criticar antes de declarar terminado.

El trinquete/registro/pivote están adaptados del bucle AutoResearch de Karpathy, ajustados para trabajo de imagen subjetivo (criterio objetivo solo donde exista; un punto de control de aprobación humana en lugar de ejecutarse para siempre). Estas líneas de política viven en las instructions del servidor + las respuestas de las herramientas; el método completo está en el prompt comfy_loop, que sirve el documento del bucle del repositorio textualmente.

MCP no puede forzar el comportamiento — expone capacidades y orientación. Esto convierte el bucle en el predeterminado fuerte y bien delimitado que se le dice repetidamente al agente que prefiera. Para una garantía firme en Claude Code, instala el mismo texto como una skill siempre activa:

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

Skill = disciplina siempre activa, MCP = las herramientas que impulsa. Es el mismo archivo que sirve el prompt comfy_skill, así que no pueden discrepar — y delega en comfy_install para el arranque en lugar de llevar su propia receta obsoleta.


Referencia de herramientas

Descubrir

Herramienta

Argumentos

Devuelve

check_comfyui

Paso 0 del bucle y una verificación previa real. Cuando no responde, devuelve qué hacer al respecto, específico de esta máquina: iniciar la instalación que encontró, crear una o abrir el túnel para una URL remota (ver Solución de problemas). Cuando responde, también señala lo que se interpone entre aquí y un renderizado funcional: torch ejecutándose en la CPU (todos los renders funcionan, ~50x más lento, no se notifica ningún error), sin pesos en disco (un ComfyUI totalmente funcional que no puede renderizar nada), sin ComfyUI-Manager (con los dos comandos para solucionarlo, ya que restart_comfyui es en sí una ruta del Manager). De lo contrario: cantidad de nodos, versiones de ComfyUI/torch, VRAM por dispositivo libre vs total, si ComfyUI-Manager está presente (sin Manager = sin instalaciones, sin reinicio) y si la cola ya está ocupada — o un claro «no accesible».

list_nodes

keyword=""

Nodos cuyo nombre de clase o nombre mostrado coincide (un superconjunto estricto de la búsqueda solo de clases de la skill). Omite keyword para el recuento.

get_node

class_name, verbose=False

La interfaz de un nodo en formato compacto @Name +req:T ?opt:T -out:T (~90 % menos de tokens); verbose=True para el JSON completo (valores predeterminados, mínimo/máximo).

list_models

class_name, input_name=""

Los archivos de modelo reales que un cargador ofrece en disco (fuente de verdad), leídos de su enum: admite tanto la lista heredada como las codificaciones COMBO. Nunca inventes un nombre de archivo.

search_models

keyword="", model_type=""

El catálogo de modelos descargables (la lista de ComfyUI-Manager): encuentra checkpoints/LoRAs/VAEs/upscalers que quizá aún no tengas; cada resultado indica si ya está instalado. Instala con install_model.

search_templates

keyword="", source="online"

online (predeterminado): el catálogo abierto completo (Comfy-Org/workflow_templates, ~550), buscado por nombre/título/descripción en vivo desde GitHub; sin instalación. installed: solo lo que hay en este ComfyUI.

get_template

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

Obtiene una plantilla. fmt="flowzip" (predeterminado) es texto FlowZip compacto (~72 % más pequeño que el JSON litegraph sin formato, mediana); fmt="json" para el litegraph completo. En cualquier caso es litegraph — convierte con flowzip_to_api antes de enviarlo. Una plantilla online puede necesitar nodos/modelos que no tienes: compruébalo con find_missing_nodes.

inflate_workflow

flowzip

Expande el texto FlowZip de vuelta al JSON litegraph completo.

flowzip_to_api

flowzip

Convierte FlowZip/litegraph → formato API.

Herramienta

Argumentos

Devuelve

find_missing_nodes

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

Compara las clases de nodos con /object_info y resuelve cada una de las que faltan al id de paquete instalable. Funciona sobre una plantilla o sobre un workflow que ya tengas (formato API o litegraph), recursando en subgrafos. Solo lectura.

install_node_pack

pack_id, version="latest"

Instala un paquete a través de la cola de ComfyUI-Manager (registro de confianza, sin código arbitrario). Luego se requiere un reinicio.

install_model

name

Descarga un modelo del catálogo (de search_models) en la carpeta correcta models/<type>/ a través de Manager. No se necesita reinicio — verifica con list_models.

restart_comfyui

Reinicia ComfyUI (a través de Manager) para que los nuevos nodos se registren en /object_info. Informa del fallo con honestidad: una respuesta HTTP significa que no se reinició nada.

update_comfyui

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

Actualiza el núcleo de ComfyUI y/o todos los paquetes instalados a través de la cola de Manager, luego te dice que se requiere un reinicio. Ejecuta código de terceros — dilo primero. No en medio del bucle: mueve el comportamiento de los nodos bajo un trinquete cuyas pasadas anteriores se midieron contra el código antiguo.

Verificar — todo lo que se puede saber antes de que la GPU esté involucrada

Herramienta

Argumentos

Devuelve

check_workflow

workflow (API dict o litegraph)

Una respuesta a "¿se ejecutará esto en esta máquina?": clases de nodos que no tienes (resueltas a ids de paquete en la misma pasada), nombres de archivos de modelo que no están en la lista de ese cargador (con lo más cercano que tienes), entradas requeridas sin establecer, cables que apuntan a nodos ausentes, valores fuera del rango declarado de un nodo, y un grafo sin nodo de salida — que se ejecuta en verde y no produce nada que mirar. /prompt también encuentra estos: uno por envío, con un checkpoint faltante que se ve exactamente como un paquete faltante. Limpio aquí significa bien formado, no correcto — todavía tienes que mirar los píxeles.

Construir → Ejecutar → Mirar

Herramienta

Argumentos

Devuelve

upload_image

path, overwrite=True

Sube una imagen local al directorio input/ de ComfyUI; devuelve el nombre para referenciar en un nodo LoadImage.

submit_workflow

workflow (dict en formato API), client_id

En éxito: prompt_id + un empujón de "ahora MIRA". En fallo: node_errors + un empujón de "arregla ese nodo, reenvía".

get_result

prompt_id, timeout_s=120

Consulta /history; devuelve el filename/subfolder/type de cada salida, informa cuántos nodos fueron servidos desde caché (con semillas fijas solo los nodos aguas abajo de tu edición se re-ejecutan — las iteraciones son baratas a propósito), + una directiva para mirar e iterar. Una ejecución que murió a mitad de ejecución regresa como el nodo que falló y su excepción (OOM recibe un empujón de "free_vram, luego baja resolución") en lugar del engañoso "terminado pero sin salidas".

get_image

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

La imagen real, devuelta al modelo para que pueda juzgar los píxeles.

compare_images

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

La comparación como imagen. difference = 0.5+0.5*(a−b): las regiones idénticas se leen como gris medio plano, así que la deriva que nunca captarías a simple vista salta. Un cliente MCP no tiene shell para ffmpeg — sin esto, "diff tus salidas" es inejecutable.

image_diff_stats

filename_a, filename_b

Diferencia absoluta media/máxima + % de píxeles cambiados — la puerta de "cambié solo lo que quería". Detecta el "pequeño ajuste" que reescribió silenciosamente el fotograma.

measure_image

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

Una puntuación objetiva para el trinquete, donde el brief tiene una prueba objetiva. tile_seam compara la unión envolvente con una unión interior (~1.0 = realmente azulejos, >2 = una costura real — la afirmación que un ojo deja pasar); sharpness = energía de borde, sube con detalle real, baja cuando una pasada solo suavizó la imagen.

video_info

filename, subfolder=""

Dimensiones, fps y número de fotogramas para una salida de video. Llámalo antes de indexar fotogramas — necesitas el rango, y necesitas saber si dos clips que vas a comparar son siquiera de la misma longitud.

get_video_frame

filename, frame=0, subfolder=""

Un fotograma de una salida de video por índice de fotograma, devuelto como imagen. La mitad de video de get_image: get_result ya informa gifs/videos, pero cualquier otra herramienta LOOK es solo Pillow y no puede decodificar un mp4 — así que para grafos VHS/AnimateDiff/WAN "llamar a get_image y MIRAR" era inejecutable.

compare_video_frames

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

La misma comparación, en el mismo índice de fotograma en ambos clips. Comparar por marca de tiempo falla silenciosamente en cuanto las longitudes difieren (un límite de fotogramas, un recorte, un fps diferente) — comparas dos momentos no relacionados con total confianza. En un desajuste de número de fotogramas, la advertencia está quemada en la imagen, no dejada en texto que puedas pasar por alto.

video_temporal_stats

filename, stride=1, max_frames=120, roi=None

Inestabilidad fotograma a fotograma como número — la puerta objetiva para "¿hierve?", que ningún fotograma fijo puede mostrar. Diferencia ingenua entre fotogramas consecutivos, así que el movimiento real cuenta: úsalo en el MISMO clip antes/después de un cambio, o pasa un roi sobre una región que debería ser estática. Validado en un par conocido (intercambio bruto por fotograma 3.53 → suavizado por flujo óptico 2.38).

El bucle, como estado duradero — el trinquete es una herramienta, no un ejercicio de memoria. Un bucle largo se compacta; si el mejor-hasta-ahora y el registro viven solo en el contexto del modelo, el trinquete deja de funcionar silenciosamente, el modelo reintenta cambios que ya rechazó y puede devolver una regresión como resultado final. Por eso viven en disco.

Tool

Args

Returns

loop_start

brief, gate=""

Abre una ejecución → run_id. gate es la prueba objetiva si el brief tiene una ("debe tener teselas sin costuras", "exactamente 3 manzanas").

loop_record

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

Registra una pasada y aplica el trinquete. "better" guarda ese grafo como el nuevo mejor (reversible). "worse"/"same" devuelve directamente el mejor grafo para que revertir sea una sola llamada — más la lista de cambios ya probados, para que no repita un callejón sin salida. Si ambas pasadas llevan un score objetivo, el número anula el veredicto — un modelo que quiere terminar llamará "better" a una regresión.

loop_sweep

run_id, workflow, node_id, input_name, values

Ejecuta el mismo grafo con hasta 8 valores de una entrada, en una sola llamada — para los valores que no se pueden razonar (denoise, cfg, strength). Todo lo demás se mantiene idéntico, así que las salidas difieren exactamente en una variable. La tabla valor → prompt_id se escribe dentro de la ejecución, de modo que un modelo compactado la recupera desde loop_ledger en lugar de volver a ejecutar el barrido. Un barrido produce una pasada registrada, no N.

loop_best

run_id

El mejor grafo hasta ahora. La fuente de verdad después de una compactación — tu recuerdo no lo es.

loop_ledger

run_id

El registro de bucle de solo añadidura: cada pasada, qué cambió, qué hizo. Recupera el hilo tras la compactación; también es el registro que se entrega al usuario al finalizar.

loop_finish

run_id, summary=""

Cierra en el punto de control de convergencia; devuelve el registro final + el mejor grafo para presentar para aprobación.

loop_report

run_id, out_path=""

Renderiza toda la ejecución como una página HTML autocontenida — cada pasada, qué se conservó, qué se revirtió, miniaturas incrustadas en base64 para que se abra con ComfyUI apagado. La imagen final no prueba nada; las pasadas que descartaste son las que demuestran que el bucle convergió.

Entrega

Tool

Args

Returns

save_workflow

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

API → UI/litegraph para que un humano pueda abrirlo y editarlo, guardado en la lista de workflows de ComfyUI. Ida y vuelta verificado: el resultado se convierte de nuevo a API y se compara con tu entrada, porque widgets_values es posicional y un desfase silencioso de uno desplaza los parámetros — un archivo plausible pero incorrecto es peor que ninguno.

Control

Tool

Args

Returns

system_stats

Dispositivo / VRAM (útil al ajustar resolución/lote o tras un OOM).

get_queue

Qué se está ejecutando y qué está pendiente.

job_status

prompt_id

Dónde está una ejecución sin bloquear: en cola (con su posición), ejecutándose, terminada con N salidas, o el error de ejecución que la mató. Lo que quieres con varias en vuelo — un loop_sweep, por ejemplo.

cancel_job

prompt_id=""

Elimina una ejecución en cola, o la interrumpe si ese id es el que se está ejecutando. Sin id, limpia la cola pendiente y deja el trabajo en ejecución intacto. interrupt es la versión contundente.

interrupt

Cancela la ejecución actual.

free_vram

unload_models=True

Descarga modelos y restablece la caché del ejecutor (POST /free). La propia eficiencia del bucle juega en tu contra aquí — las pasadas en caché son VRAM — así que esto es lo primero que probar antes de reescribir un grafo que provocó OOM. No es inmediato (se aplica en la siguiente iteración del trabajador de cola) y no puede tocar la VRAM de otro proceso; confírmalo con system_stats.

comfyui_logs

lines=60, grep=""

Muestra el final del registro de ComfyUI, donde los fallos se explican solos: el traceback dentro de un nodo, el OOM, el nodo personalizado que no se importó al inicio (que es por lo que su clase falta en object_info).

Prompts: comfy_loop (método autónomo completo) y comfy_skill (skill compacta), ambos servidos textualmente desde el markdown del repositorio, más comfy_install — la receta de arranque, generada contra la máquina en la que se ejecuta el servidor: una instalación si ya hay una, el intérprete para construir el venv (el del propio servidor, así que Python nunca es un requisito previo a resolver), si comfy-cli y git están presentes, y la compilación de torch que el acelerador de esta máquina realmente quiere (CUDA / ROCm / MPS / ninguna). El servidor no puede ejecutar nada de esto; el agente sí, y a él va dirigido.

Recursos: comfyui://object_info (volcado completo en vivo), comfyui://loop-method, comfyui://skill.


Observa el bucle en acción

Impulsado enteramente a través de este servidor MCP contra un ComfyUI real (RTX 4090, SD1.5), brief: "a crisp, sharply focused macro studio photo of a single red apple on a warm wooden table, fine skin texture, rich detail." Semilla fijada en 42 para que cada pasada cambie exactamente un parámetro y el efecto sea atribuible. La métrica objetiva es la varianza del laplaciano (una medida estándar de nitidez/enfoque).

Cinco pasadas del bucle, de izquierda a derecha: una manzana suave y plana se afila hasta convertirse en una nítida, saturada y con mucha textura

Pasada

Un cambio

Nitidez (varLap)

Veredicto mirando

1

línea base — 6 pasos, cfg 2.5

425

Suave, plana, mate. La más débil.

2

pasos 6 → 24

1204

Más nítida — pero el número alto es la veta de la madera, la piel de la manzana sigue siendo plástica.

3

cfg 2.5 → 7.5

515

La manzana se vuelve más rica (saturada, con pecas en la piel) — la métrica baja porque el fondo se suavizó.

4

euler → dpmpp_2m + karras

740

Ganadora. Destello nítido, lenticelas visibles, madera creíble.

5

pasos 24 → 36

661

≈ pasada 4. Rendimientos decrecientes → detenerse.

La lección sobre la que se construye el bucle, captada en directo: la métrica alcanzó su máximo en el pase 2, pero el pase 2 no es la mejor imagen — su puntuación se vio inflada por la textura del fondo, no por el detalle de la manzana. El ganador (pase 4) se eligió mirando. Un número en verde es válido, no correcto. (example_apple.png es ese resultado del pase 4).

…y la otra mitad: cuando el que se equivoca es el modelo

La manzana demuestra por qué no puedes fiarte a ciegas de la métrica. Esta ejecución demuestra por qué no puedes fiarte a ciegas del modelo — que es exactamente la razón por la que el trinquete es una herramienta y no una nota en un prompt.

Encargo: «una textura de adoquines perfectamente embaldosable — sin costura visible en el borde», con una compuerta objetiva (measure_imagetile_seam). Misma semilla en todo momento, de modo que cada pase cambia exactamente una cosa. Cada textura de abajo está embaldosada 2×2 — una costura no tiene dónde esconderse.

Tres pases embaldosados 2x2: la línea base tiene costuras, el embaldosado circular lo arregla, x_only devuelve la costura y se revierte

Pase

Un cambio

tile_seam

Trinquete

1

línea base SDXL

h 1.77 · v 1.23 → en el límite

conservado (primero)

2

SeamlessTile + MakeCircularVAE

h 0.78 · v 1.12 → sin costuras

NUEVO MÁXIMO

3

tilingx_only

h 1.03 · v 1.56 → vuelve la costura

REVERTIDO

En el pase 3, el modelo le dijo a loop_record que el resultado era "better". No lo era: x_only embaldosa horizontalmente y deja el borde vertical roto — visible en la imagen de la derecha como piedras cortadas a ras contra la unión horizontal. La puntuación objetiva anuló la afirmación, restauró el pase 2 y devolvió el buen grafo.

Ese es el fallo que este servidor existe para prevenir: un agente que quiere terminar llamará mejora a una regresión. Si lo mejor hasta ahora hubiera vivido en el contexto del modelo en lugar de en disco, esa regresión habría sido la respuesta final.


Instalación

La versión corta: pídele a tu agente que lo haga. Pega esto en Claude Code (o en cualquier cliente MCP con shell) y no hagas nada más:

Configura el MCP de bucle de ComfyUI desde https://github.com/huikku/comfyui-loop-mcp — regístralo en mi cliente, e instala y lanza ComfyUI también si no está en ejecución.

Tiene todo lo que necesita para terminar eso sin ti: registrar el servidor es un claude mcp add, y una vez conectado, el prompt comfy_install devuelve el bootstrap para tu máquina — un ComfyUI existente que arrancar, el intérprete con el que construir el venv, la compilación de torch que tu tarjeta realmente quiere, ComfyUI-Manager y dónde poner los modelos. check_comfyui entonces nombra cualquier cosa que aún falte (sin pesos, torch en CPU, sin Manager) como cosas que el agente debe arreglar, no informar.

Si prefieres pegar configuración antes que prosa, esto ejecuta el servidor directamente desde GitHub — nada que clonar, nada que 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, una línea:

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

Clona el repositorio en su lugar y .mcp.json ya está ahí — Claude Code ofrece el servidor al abrirlo por primera vez, sin ningún comando. Reconecta el cliente después de añadirlo; los servidores MCP se leen en el momento de la conexión.

Desarrollando sobre él:

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

Requiere Python ≥ 3.10 y un ComfyUI accesible. Instala mcp[cli], httpx, anyio, pillow. Funciona tanto con el SDK de MCP 1.x como 2.x — 2.0 renombró FastMCP a MCPServer y movió el helper Image, que el servidor importa de cualquier manera.

¿Lo tenías instalado como comfy-mcp? Ese nombre pertenece al servidor de Comfy-Org en PyPI, así que este ahora es comfyui-loop-mcp (paquete de importación comfy_loop, comando comfyui-loop-mcp). Ejecuta pip uninstall comfy-mcp primero y actualiza la configuración de tu cliente MCP. Las ejecuciones de bucle ya en disco se encuentran automáticamente — el antiguo ~/.comfy-mcp/runs se sigue usando hasta que apuntes COMFY_LOOP_STATE_DIR a otro sitio.

Disciplina siempre activa (Claude Code)

El método también se instala como skill, de modo que se carga con las palabras de activación en lugar de esperar a que se lo pidan — pídele al agente que haga esto también, o:

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

El mismo archivo que sirve el prompt comfy_skill, de modo que el skill y el servidor no pueden divergir.

Configuración

Variable de entorno

Por defecto

Propósito

COMFYUI_URL

http://localhost:8188

Tu servidor de ComfyUI

COMFYUI_ONBOARDING_DIR

raíz del repo por encima de este paquete

Dónde leen su markdown los prompts comfy_loop / comfy_skill

COMFYUI_TEMPLATES_REF

main

Ref de Git de Comfy-Org/workflow_templates que lee el catálogo de plantillas en línea

COMFYUI_TEMPLATES_LIVE

sin definir

Ponlo a 1 para obtener el índice de catálogo más reciente de GitHub en lugar de la instantánea comprimida incluida

COMFY_LOOP_STATE_DIR

~/.comfyui-loop-mcp/runs

Dónde viven el trinquete y el libro de registro. Recurre al ~/.comfy-mcp/runs anterior al cambio de nombre si ahí es donde ya están tus ejecuciones

Apuntando a un ComfyUI remoto

ComfyUI normalmente se vincula a 127.0.0.1, así que un ComfyUI en otra máquina no es accesible a través de la red por defecto. Dos opciones:

  • Túnel SSH (lo más simple, mantiene ComfyUI privado): reenvía el puerto y deja COMFYUI_URL en localhost:

    ssh -N -L 8188:localhost:8188 your-remote-host
    # COMFYUI_URL stays http://localhost:8188
  • Vincula ComfyUI a la red y apunta directamente a él (solo en una red de confianza — esto expone una API sin autenticación):

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

Úsalo

  1. En tu agente, carga el prompt comfy_loop (o deja que lea el recurso comfyui://loop-method) para incorporar el método completo. Si tu cliente inyecta las instrucciones del servidor, la política de preferir el bucle ya está activa.

  2. Dale un objetivo. Hará check_comfyuilist_nodes / get_node / list_models → construirá JSON en formato API → submit_workflowget_resultget_image, y luego criticará e iterará — un cambio por pase — hasta que no pueda nombrar un defecto, y entonces presentará el resultado para su aprobación.

Solución de problemas

  • «ComfyUI no es accesible» — la respuesta es un conjunto de instrucciones, no una queja, y van dirigidas al agente, que tiene un shell del que este servidor carece: busca un ComfyUI en esta máquina ($COMFYUI_PATH, el espacio de trabajo de comfy-cli, ~/ComfyUI, ~/comfy, ~/code, ~/github, /opt) y o bien devuelve el comando de arranque usando el python del venv propio de esa instalación, o la secuencia de clonado + venv + Manager + lanzamiento si no hay ninguno. Si COMFYUI_URL es remoto, deliberadamente no ofrece instalar en local — eso solo dejaría un segundo ComfyUI sin usar en la máquina equivocada — y te da el túnel SSH en su lugar. Cada herramienta devuelve esto, no solo check_comfyui; el consejo va adjunto en el transporte.

  • Node/modelo no encontrado — instala el paquete/modelo en el lado de ComfyUI y luego reinicia ComfyUI para que /object_info lo refleje (la API está obsoleta hasta entonces).

  • get_image no devuelve nada — asegúrate de que el grafo tenga un nodo SaveImage / PreviewImage; get_result enumera lo que se produjo realmente.

  • install_node_pack bloqueado / sin efecto — las herramientas de instalación necesitan ComfyUI-Manager en el host, y el nivel de seguridad de Manager debe permitir instalaciones por API. Después de instalar, se requiere restart_comfyui antes de que /object_info muestre los nuevos nodos.

  • find_missing_nodes elige el paquete «equivocado» — varios paquetes pueden exportar un nodo con el mismo nombre; la resolución toma la primera coincidencia del registro. Si una instalación no proporciona la clase, comprueba el paquete indicado e instala el correcto explícitamente.

Licencia

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