Dreamer MCP
Dreamer MCP lets AI assistants control a remote ComfyUI instance to generate, edit, and manage media workflows through MCP tools.
Check ComfyUI health, queue, GPU/VRAM/RAM, versions, installed models, workflows, and missing requirements.
Generate or edit images (Qwen Image 2.1) and create transparent-background PNG assets with optional upscaling and trimming.
Design, edit, and decompose UI screens, banners, and posters into reusable RGBA layers/assets with Ming Image 0.1 Design.
Generate videos with sound (MiniMax H3), music with vocals (YuE2), ABC sheet music, song-to-ABC transcription, and covers.
Run, convert, save, and inspect custom ComfyUI workflows using friendlier params or raw node overrides.
Manage jobs: poll status/progress, cancel or clear queue, free memory, upload input files, and retrieve output files.
View images inline and deliver media via signed streaming/download links or player pages without exposing ComfyUI.
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., "@Dreamer MCP generate an image of a golden retriever puppy playing in snow"
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.
Dreamer MCP
Servidor MCP que dá a assistentes de IA (Claude, Cursor, VS Code…) o controle de uma instalação remota do ComfyUI: gerar e editar imagens, criar assets com fundo transparente, gerar vídeo e áudio, acompanhar a fila e baixar os resultados.
Inspirado no Comfy-Org/comfy-mcp, com uma diferença de arquitetura: em vez de rodar na mesma máquina do ComfyUI, o Dreamer MCP fala com a API HTTP dele e expõe o MCP via Streamable HTTP. Assim ele roda como um container stateless (Docker ou Kubernetes) apontando para o ComfyUI onde quer que ele esteja. O modo stdio também está disponível.
Destaques
Presets de um comando:
comfyui_generate_image,comfyui_generate_asset,comfyui_generate_video,comfyui_generate_music,comfyui_song_to_abcecomfyui_upscale, cada um ligado a um workflow seu.Música com partitura: o YuE2 pode seguir uma partitura ABC sua (escrita por você ou por um LLM), que é reescrita automaticamente no dialeto que o modelo entende; covers a partir de uma música de referência.
Gerar ou editar no mesmo workflow: sem imagens, gera; com 1 a 9 imagens de referência, edita. Os slots não usados são removidos do grafo automaticamente.
Design de telas, banners e posters: o Ming Image 0.1 Design gera telas de app/jogo/site com texto exato a partir de uma legenda estilo Figma, edita (mover, trocar, remover elementos) e decompõe a tela em camadas RGBA reutilizáveis.
Assets transparentes: PNG com canal alpha real, largura/altura exatas e cópias recortadas no objeto.
Qualquer tamanho: pixels exatos, qualquer proporção (
"16:9","5:4","1.5") com megapixels, ou o tamanho da imagem que está sendo editada.Seus workflows, sem código: um manifesto YAML dá nomes amigáveis às entradas dos nós, e os workflows podem ficar salvos no próprio ComfyUI.
Conversão UI → API: converte workflows salvos pela interface, resolvendo
SetNode/GetNode, reroutes e nós em bypass.Mídia por streaming: links assinados e temporários para vídeo, áudio e imagens, repassados pelo MCP, sem expor o ComfyUI.
Related MCP server: ComfyUI MCP Server
Ferramentas
Tool | O que faz |
| Online?, fila, GPU, VRAM/RAM, versões |
| Nós e modelos que os presets usam, com o que está faltando e onde baixar |
| Lista modelos (por pasta, com filtro) |
| Lista workflows (locais + salvos no ComfyUI), params e presets |
| Params amigáveis + inputs editáveis de cada nó |
| Últimos jobs executados (inclusive os feitos pela interface web) |
| Salva no ComfyUI o workflow (formato API) de um job do histórico |
| Converte um workflow do formato UI para API (sem executar) |
| Executa um workflow (por nome ou JSON inline) com params/overrides |
| pending (posição na fila) / running (nó atual, passo do sampling, %) / success / error / interrupted |
| Remove da fila ou interrompe o job em execução |
| Arquivos gerados + links de download/streaming |
| Retorna a imagem (reduzida) para o modelo ver |
| Lista ou limpa a fila |
| Envia imagem/áudio/vídeo (URL/base64) para a pasta |
| Descarrega modelos e libera VRAM |
| Preset |
| Preset |
| Preset |
| Preset |
| Preset |
| Preset |
| Preset |
| Preset |
| Presets |
| Preset |
| Converte ABC qualquer para o dialeto do YuE2 e aponta problemas (sem executar nada) |
Início rápido
Docker (modo HTTP):
docker run -d -p 8000:8000 \
-e COMFYUI_URL=http://192.168.0.10:8188 \
-e MCP_AUTH_TOKEN=troque-este-token \
-v ./workflows:/app/workflows:ro \
djavanryuuzaki/dreamer-mcp:latestConecte o cliente, por exemplo o Claude Code:
claude mcp add --transport http dreamer http://localhost:8000/mcp --header "Authorization: Bearer troque-este-token"Local (stdio), sem Docker, usando uv:
claude mcp add dreamer -e COMFYUI_URL=http://192.168.0.10:8188 -- uvx --from git+https://github.com/djavan-ryuuzaki/dreamer-mcp dreamer-mcpNomes
.local(mDNS) normalmente não resolvem dentro de containers. Use o IP do ComfyUI,--add-hostno Docker ouhostAliasesno Kubernetes.
Requisitos no ComfyUI
Os presets usam modelos e alguns nós que precisam estar instalados no ComfyUI. Ao iniciar, o
Dreamer MCP consulta o servidor e mostra no log o que já está lá e o que falta, com o link de
download e a pasta de destino de cada modelo. A verificação roda em segundo plano, sem atrasar o
MCP, e pode ser desligada com CHECK_REQUIREMENTS=false. Para ver o relatório sem subir o
servidor:
docker run --rm -e COMFYUI_URL=http://192.168.0.10:8188 djavanryuuzaki/dreamer-mcp requirementsuvx --from git+https://github.com/djavan-ryuuzaki/dreamer-mcp dreamer-mcp requirementsO comando termina com código 1 se faltar algo; --offline só lista os requisitos, sem consultar o
ComfyUI. Com o MCP conectado, o assistente pode usar a tool comfyui_requirements.
Versão testada: ComfyUI 0.37.0. Os nós marcados como core vêm com o próprio ComfyUI; se estiverem faltando, atualize-o.
Nós
Pacote | Usado em | Nós |
ComfyUI (core) | imagem/asset |
|
ComfyUI (core) | design |
|
ComfyUI (core) | vídeo |
|
ComfyUI (core) | áudio |
|
imagem/asset/áudio |
| |
ComfyUI-KJNodes (opcional) | imagem/asset |
|
Modelos
Cada arquivo vai para ComfyUI/models/<pasta>/; subpastas também valem.
Imagens e assets (comfyui_generate_image, comfyui_generate_asset), Qwen Image 2.1, ~17 GB:
Arquivo | Pasta | Tamanho |
| 7,3 GB | |
| 9,4 GB | |
| 0,7 GB |
Design de telas (comfyui_generate_ui_design, comfyui_edit_ui_design, comfyui_decompose_ui),
Ming Image 0.1 Design + Design-Layer, ~52 GB:
Arquivo | Pasta | Tamanho |
| 6,2 GB | |
| 19,5 GB | |
| 6,2 GB | |
| 19,5 GB | |
| 0,25 GB |
Os dois arquivos _layer só são usados na decomposição em camadas.
Vídeo com som (comfyui_generate_video), MiniMax H3 reference-to-video, ~52 GB:
Arquivo | Pasta | Tamanho |
| 21,0 GB | |
| 27,1 GB | |
| 2,8 GB | |
| 0,6 GB | |
| 0,2 GB |
A LoRA TaoMate acelera o vídeo para 3 passos.
Música com vocais (comfyui_generate_music, comfyui_song_to_abc), YuE2 + SheetSage2, ~5,4 GB:
Arquivo | Pasta | Tamanho |
| 4,0 GB | |
| 1,4 GB |
O SheetSage2 só é usado em covers e em comfyui_song_to_abc.
Só é preciso instalar o que for usar: cada grupo funciona sozinho. Os workflows já vêm com o MCP (veja abaixo), então basta ter os nós e os modelos.
Workflows e presets
O MCP executa workflows no formato API do ComfyUI. Há três maneiras de obtê-los:
Conversão:
comfyui_convert_workflow("comfyui:MEU_FLUXO.json", "meu_fluxo")converte um workflow salvo pela interface e grava o resultado no ComfyUI emworkflows/api/meu_fluxo.json. ResolveSetNode/GetNode, reroutes e nós em bypass (include_bypassed=trueos ativa), e avisa sobre nós que só existem na interface. Não funciona com subgraphs.Pelo histórico: rode o workflow uma vez na interface e use
comfyui_history→comfyui_save_workflow(prompt_id, "meu_nome"). Funciona com qualquer workflow, inclusive com subgraphs.Manual: Workflow → Export (API) na interface, com o
.jsonsalvo emWORKFLOWS_DIR.
Workflows salvos no ComfyUI aparecem como comfyui:<caminho> e não exigem redeploy.
Workflows incluídos
Os presets já vêm prontos, em workflows/ (também embutidos no pacote e na imagem):
Arquivo | Preset | Modelo |
|
| Qwen Image 2.1: gera ou edita (1 a 9 referências) + upscale |
|
| Qwen Image 2.1: PNG com fundo transparente + upscale |
|
| Ming Image 0.1 Design: tela/banner/poster a partir de legenda estilo Figma |
|
| Ming Image 0.1 Design: edita uma tela, com até 7 imagens de referência |
|
| Ming Image 0.1 Design-Layer: decompõe em N camadas RGBA |
|
| MiniMax H3: vídeo com som a partir de 2 imagens de referência |
|
| YuE2: música com vocais a partir de estilo + letra, com partitura ABC opcional; devolve o áudio e o ABC usado ( |
|
| YuE2 + SheetSage2: cover (nova letra/estilo sobre a melodia de uma música) |
|
| SheetSage2: transcreve uma música para ABC |
| – | YuE2: versão anterior (estilo + letra) |
| – | Qwen Image 2.1: template original de texto para imagem |
No manifesto, cada preset aponta primeiro para comfyui:api/<nome>.json e usa a cópia incluída
(fallback) quando esse arquivo não existe no ComfyUI. Para personalizar um fluxo, salve sua versão
em workflows/api/ no ComfyUI: ela passa a ter prioridade, sem redeploy.
Se os seus modelos estiverem em subpastas (por exemplo models/diffusion_models/QWEN/...), não é
preciso editar o workflow: um nome que não existe no ComfyUI é trocado automaticamente pelo arquivo
de mesmo nome em uma subpasta, desde que haja só um.
Partituras ABC no YuE2
Escreva ABC "normal", com tudo o que o registro da música pede; o MCP converte para o YuE2 e gera o PDF a partir do texto original:
X:1
T:Luz da Janela
C:Letra e música: Fulano de Tal
M:4/4
L:1/8
Q:1/4=104
K:G
V:Voz clef=treble name="Voz"
V:Piano clef=treble name="Piano"
%%text VERSO 1
V:Voz
"G"z2 B B A G G2|"D"A A B A A4|"Em"G G A B A G G2|"C"E G A G E4|
w: A ma-nhã cha-mou|meu no-me bai-xo|e a ja-ne-la a-briu|de-va-gar o céu
V:Piano
G,2D2G2D2|F,2A,2D2A,2|E,2B,2E2B,2|C,2G,2C2G,2|T:(título, também nome do PDF),C:(autores) e seções em%%text;cada voz sob a sua linha
V:(ou com[V:Voz]no início da linha); a segunda voz vira a linha instrumental do YuE2;uma linha
w:sob cada linha da voz cantada: uma sílaba por nota, hífen dentro da palavra,|nas barras,_na nota que segura a sílaba anterior (inclusive a nota depois de uma ligadura-, que senão recebe a próxima sílaba) e*na nota sem sílaba;as tags
[Verse]/[Chorus]dolyricsna mesma ordem das seções cantadas, com o mesmo texto dosw:. Ao mudar a letra, reescreva osw:. O ABC que um job devolve (escrito pelo YuE2 ou pelo SheetSage2) não tem letra: reenviado semw:, a partitura em PDF sai só com as notas.
O guia completo para um agente compor e anotar músicas está na skill
skills/compor-musica.
O YuE2 não interpreta ABC: o YuE2GenerateMusic só tokeniza o texto e o coloca no prompt do
modelo. Por isso a partitura só funciona se tiver a cara das que o próprio YuE2
(YuE2GenerateABC) e o SheetSage2 escrevem, e é para isso que o ABC normal é convertido:
X:1
T:
M:4/4
L:1/16
Q:1/4=104
V: Vocal clef=treble name="Vocal Melody" snm="Vocal"
V: Ins clef=treble name="Ins Melody" snm="Inst."
K:G
% verse
V: Vocal
"G"z2d2d2e2d2B2A4|"Em"G2z2A2B2G4z4|"Am"z2e2e2d2e2B2c4|"D"d2B2A2G2F2A2d4|
V: Ins
Z4|Duas vozes intercaladas a cada (até) 4 compassos, L:1/16, seções como comentários % verse,
% chorus..., acordes entre aspas no início do compasso (nenhum no modo melody) e sem
linhas w: (a letra vai separada, com tags [Verse]/[Chorus] na mesma ordem das seções
cantadas). Um ABC já nesse dialeto é mantido, só sem as linhas w: e %%. Escreva sempre uma
linha instrumental sob o vocal (respostas, levada, contracanto): com a voz Ins só em pausa
(Z4) o arranjo tende a soar como playback de karaokê. A conversão é feita pelo parâmetro abc
(transform: yue2_abc no manifesto); comfyui_normalize_abc mostra o resultado e os avisos
antes de gerar.
Para o YuE2 cantar a partitura com fidelidade. Quando a partitura não "cabe" no que o modelo canta, ele improvisa e a música sai mais longa que o escrito (nos testes, +18% com poucas notas para uma letra em português, contra −1% com a partitura do próprio YuE2). O que ajuda:
Notas suficientes para a letra: cerca de uma nota por sílaba cantada, mais nos melismas. Português e espanhol pedem mais notas do que as sílabas escritas sugerem; evite espremer vogais (
do~a) numa nota só.O ritmo do gênero, não só colcheias retas: 3+3+2 no dance-pop, funk e reggaeton (
g3/2f3/2eemL:1/8) e antecipações ligadas por cima do tempo ou da barra (e-|e…); síncope no samba e no pagode; notas longas nas baladas.O refrão é o pico: a nota mais alta do refrão acima da do verso e da do pré-refrão.
Harmonia própria no pré-refrão (o IV ou o ii, uma dominante) para criar tensão.
Frases regulares (2 ou 4 compassos, seções de 4 ou 8) e uma linha instrumental que muda entre as seções (riff na intro, levada nos versos, mais cheia nos refrões).
Partitura em PDF
comfyui_generate_music (músicas e covers) e comfyui_song_to_abc também devolvem a partitura em
PDF (saída com label: "score"), gravada no ComfyUI em output/dreamer-mcp/scores/ e entregue com
os mesmos links da mídia:
se você (ou o LLM) passou
abc_notation, a partitura é desse texto original, com a letra das linhasw:e as seções do jeito que foram escritas, e sai já na resposta (score), mesmo comwait=false;senão, é do ABC que o workflow escreveu (YuE2 ou SheetSage2), criada quando o job termina: na resposta com
wait=true, ou emcomfyui_job_status/comfyui_get_output.
A renderização roda no próprio MCP, sem ComfyUI: abcm2ps (ABC → PostScript) + Ghostscript
(PostScript → PDF). A imagem Docker já traz os dois; fora dela, instale-os
(apt install abcm2ps ghostscript). Sem eles, a música é gerada normalmente e a resposta traz
score_error. No manifesto, isso é a opção score: {param: abc, output: abc} do workflow.
O manifesto workflows.yaml
Dê aos nós de entrada títulos como [$PROMPT] e [$IMAGEM_0] e referencie-os pelo título, que
não muda quando você reorganiza o fluxo (o id do nó também funciona):
presets:
image: meu_flux # usado por comfyui_generate_image
asset: meu_asset # comfyui_generate_asset
upscale: upscale
video: wan_i2v
audio: ace_step
workflows:
meu_flux:
file: "comfyui:api/meu_flux.json" # ou um arquivo local em WORKFLOWS_DIR
fallback: meu_flux.json # opcional: cópia local se não existir no ComfyUI
description: Flux dev
params:
prompt: {target: "[$PROMPT].value", type: string}
seed: {target: "25.noise_seed", type: seed} # aleatório se não informado
steps: {target: "KSampler.steps", type: int} # id, título ou classe do nó
image: {target: "[$IMAGEM].image", type: file} # upload automático (URL/base64)Tipos: string, int, float, bool, seed, choice, file, file_list. Workflows sem
entrada no manifesto também rodam com comfyui_run(inputs={"6.text": "..."}); veja o que pode ser
alterado com comfyui_workflow_info.
Imagens opcionais (gerar ou editar no mesmo fluxo). Um LoadImage não pode ficar vazio, então
os slots sem arquivo são removidos do grafo, junto com o que depende deles:
params:
images:
target: ["[$IMAGEM_0].image", "[$IMAGEM_1].image", "[$IMAGEM_2].image"]
type: file_list
prune_missing: true
flatten_alpha: "#ffffff" # PNGs transparentes são achatados antes do upload
when_missing: # overrides quando o param NÃO é enviado
images: {"[$MANTER_RESOLUCAO].value": false}
when_set: # overrides quando o param É enviado
width: {"[$MANTER_RESOLUCAO].value": false}Várias saídas e etapas opcionais. Cada arquivo volta com um rótulo, e remover um SaveImage
basta para pular uma etapa, porque o ComfyUI só executa o que alimenta alguma saída:
outputs: {base: "160", upscale: "118"} # "label": "upscale" em cada arquivo
params:
upscale: {type: bool, default: true, remove_when_false: ["118"]}Tamanho em pixels. Quando width/height não são enviados, a regra size converte proporção
e megapixels em pixels ou usa o tamanho da imagem editada:
size:
aspect_ratio: aspect_ratio # "16:9" @ 1 MP = 1360x768
megapixels: megapixels # 1.0 = ~1024x1024
from_image: images # editando sem tamanho: tamanho exato de <image1>
max_side: 1536 # teto para imagens grandes
params:
width: {target: "[$WIDTH].value", type: int, default: 1024, multiple_of: 16}
height: {target: "[$HEIGHT].value", type: int, default: 1024, multiple_of: 16}
aspect_ratio: {type: string} # param sem target: só alimenta regras
megapixels: {type: float}A prioridade é: width/height explícitos, depois aspect_ratio/megapixels, depois o tamanho
de <image1> e, por fim, os defaults.
Outras opções:
Opção | Onde | Efeito |
| tipo | Valida contra as opções do combo (lidas de |
| param de texto | Acrescenta um texto fixo quando um param |
| param de texto | Põe um texto fixo numa linha antes do valor quando um param |
| param | Remove nós quando o valor é true |
| workflow | Devolve também cópias das saídas transparentes recortadas no objeto ( |
| workflow | Corta saídas transparentes em um PNG por objeto, com |
| workflow | Um rótulo por arquivo de um lote, ex.: |
| workflow | Devolve também a partitura em PDF: do ABC passado em |
| param de texto | Reescreve o valor depois de aplicar todos os params, ex.: |
Regras condicionais nunca sobrescrevem um param enviado explicitamente. Os presets aceitam extra
para params adicionais ou overrides crus ({"KSampler.cfg": 4}), e comfyui_run sorteia as seeds
que você não fixou (randomize_seed=true) para o cache do ComfyUI não repetir o resultado.
Assets com fundo transparente
comfyui_generate_asset foi pensado para o Qwen Image 2.1, cuja VAE decodifica RGBA: o SaveImage
grava um PNG com transparência real, sem nó de remoção de fundo. O manifesto acrescenta ao prompt,
e também ao prompt da passada de upscale, a instrução "This is an RGBA image with transparency.
The image has an alpha channel and the background is transparent."; quem chama só descreve o
objeto.
Tamanho em pixels (padrão 1024×1024); editando sem tamanho, usa o de
<image1>.Imagens de entrada transparentes são achatadas sobre branco, porque o
LoadImagedescarta o alpha.trim(ligado por padrão) devolve tambémbase_trimmed/upscale_trimmed, recortados no objeto com margem, salvos ao lado dos originais.As previews mostram a transparência sobre um xadrez.
Design de telas, banners e posters
Três presets com o Ming Image 0.1 Design, que diagrama a tela e renderiza o texto exato:
comfyui_generate_ui_design: o assistente expande o pedido ("uma tela de menu de um jogo") numa legenda estilo Figma em JSON:canvas_settingselayersdo fundo para a frente, cada uma comdescription,coordinates("cx: 0.500, cy: 0.500, w: 1.000, h: 1.000"),hierarchy_and_relationecolor_specs. As regras do rewriter oficial do Ming estão na descrição da tool. O MCP confere a legenda (chaves, coordenadas, caixas fora da tela, cores hex, texto repetido), avisa emapplied.prompt_warningse preencheaspect_ratiocom o tamanho real ("16:9, 1936 × 1088 px"). Padrão: 2 MP;aspect_ratio"9:19.5"para celular,"16:9"para desktop/TV. Comtransparent=trueo prompt começa com a frase fixa que o Ming conhece para RGBA (RGBA, 4-channel, transparent background): sai um PNG transparente (ícone, botão, um conjunto de ícones) e também um PNG por objeto (design_asset_01…). Liste só os objetos: uma camada de fundo em tela cheia faz o modelo pintar um fundo opaco, então o MCP a remove. Nos testes o alpha só sai em ~1 de cada 3 seeds; semseedfixa, o MCP gera de novo com outra seed atéattemptsvezes (padrão 4) e informa emtransparent_attempts.comfyui_edit_ui_design: edita uma tela (image, inclusive um resultado anterior como"dreamer-mcp/ui_design_00001_.png [output]"). Para mover ou remover elementos, use uma instrução curta citando os textos, dizendo o que fica no lugar antigo e nomeando os vizinhos que ficam (senão o modelo pode apagá-los também); com a legenda JSON completa o modelo mantém uma cópia do elemento na posição original. Até 7references(logo, ícone, estilo).comfyui_decompose_ui: separa a tela em camadas RGBA com o checkpoint Design-Layer e corta cada camada em assets:layerstraz uma descrição por camada, da frente (Layer 1) para o fundo (última); o MCP monta o pedidoDecompose this image into N layers.... Escreva esse plano olhando a imagem: ele separa bem melhor. Semlayers, usa o pedido genérico de 4 camadas da skillling-ui-design(texto, imagens, containers e fundo), pensado para páginas web com fotos; em telas de jogo ou app ele tende a misturar placas, rótulos e arte.Volta
composite(a tela recomposta),layer_01… em tela cheia (empilham de volta no lugar) e um PNG por objeto de cada camada,layer_01_asset_01…, combbox(pixels da camada) esource_bbox(pixels da imagem original). Um arquivomanifest(JSON) lista tudo.O corte usa regiões de alpha sólido (sombras fracas não colam vizinhos); as palavras de um rótulo ficam juntas;
asset_gapajusta a distância de união ewhole_layersmantém uma camada inteira como um asset (logo, personagem).region[x, y, w, h]decompõe só um pedaço da imagem, na resolução de trabalho inteira: serve para separar de novo um objeto que veio misturado, passando a própria camada comoimage; osource_bboxcontinua apontando para a imagem passada. A última camada é sempre o fundo opaco (a camada passada comoimageé achatada sobre branco), então termine esse plano com "Plain white background" depois dos objetos a separar.As previews são folhas de contato das camadas e dos assets.
Diferenças em relação aos fluxos de interface (GENERATE_UI_DESIGN, EDIT_UI_DESIGN, DECOM_UI):
os subgraphs foram achatados à mão; no edit, a legenda vem de quem chama, em vez dos
CreateBoundingBoxes; no DECOM_UI a imagem não chegava ao text encoder (só dava o tamanho) e o
fluxo usava os checkpoints de geração em vez dos _layer.
Vídeo, áudio e imagens: streaming
As tools devolvem links que qualquer player abre por streaming (com suporte a Range). Vídeo
e áudio também vêm como blocos resource_link com o tipo MIME. Com MCP_PUBLIC_URL definido:
{ "filename": "clip_00005_.mp4", "mime_type": "video/mp4",
"url": "https://dreamer.example.com/media/<token>/clip_00005_.mp4",
"player": "https://dreamer.example.com/media/<token>/player" }O arquivo é repassado pelo MCP: o ComfyUI não precisa ser exposto.
O
<token>é assinado (HMAC), expira e dá acesso só àquele arquivo, já que players não enviam o headerAuthorization.playeré uma página simples com<video>/<audio>/<img>e link de download.
Sem MCP_PUBLIC_URL (ou em stdio), os links apontam para o /view do ComfyUI.
Progresso dos jobs
Enquanto um job roda, comfyui_job_status traz progress com o nó em execução e o passo do
sampling:
{"status": "running", "progress": {"node": "115", "node_type": "KSampler", "step": 20,
"steps": 30, "percent": 67, "nodes_done": 18, "nodes_total": 22, "elapsed_s": 108.6}}Com wait=true, as notificações de progresso do MCP mostram o mesmo resumo
(running, KSampler, step 20/30 (67%), node 18/22). O ComfyUI só envia esses dados pelo WebSocket
/ws e só para o client_id que enfileirou o prompt, então o servidor mantém uma conexão com o
mesmo id dos envios. Jobs enfileirados por outro cliente (a interface web, ou outra réplica do
MCP) aparecem só como running, sem progress. Se o WebSocket estiver inacessível, nada quebra:
o status volta a ser só pending/running. percent é do nó atual (cada sampler conta de novo do
zero); nodes_total conta todos os nós do grafo, inclusive os que o ComfyUI acaba não executando.
Configuração
Variável | Padrão | Descrição |
|
| URL usada pelo servidor para acessar o ComfyUI |
| = | Base das URLs diretas devolvidas |
| – | Bearer enviado ao ComfyUI (se estiver atrás de um proxy com auth) |
|
| Acompanhar os jobs pelo WebSocket do ComfyUI (nó e passo em |
|
| Pasta dos workflows + |
|
| Listar também os workflows salvos no ComfyUI |
|
| Segundos de espera quando |
|
| Lado máximo das previews inline |
|
|
|
|
| Endpoint HTTP |
| – | Se definido, exige |
|
| Maior corpo de requisição HTTP aceito, em MiB (um upload vai em base64 no JSON) |
| – | URL externa deste MCP; ativa os links de mídia |
| derivado do | Chave HMAC dos links (igual em todas as réplicas) |
|
| Validade dos links de mídia, em segundos |
|
| Verificar e mostrar no log, ao iniciar, os nós/modelos que faltam |
|
| Nível de log |
Veja .env.example.
Kubernetes
Os manifestos (kustomize) estão em deploy/k8s:
cp deploy/k8s/secret.env.example deploy/k8s/secret.env # defina MCP_AUTH_TOKEN
kubectl apply -k deploy/k8sAjuste COMFYUI_URL e MCP_PUBLIC_URL em kustomization.yaml e coloque o seu workflows.yaml
em deploy/k8s/workflows/: ele vira um ConfigMap, e qualquer alteração gera um rollout
automático. O ingress.yaml opcional já vem com timeout longo e sem buffering, para wait=true e
streaming.
Desenvolvimento
uv sync
uv run pytest
uv run ruff check src testsAvailable Tools
20 toolscomfyui_cancelADestructive
Cancel a job: removes it from the queue if pending, interrupts it if running. Without prompt_id, interrupts whatever is running now.
Inputs: prompt_id. Returns: object
comfyui_convert_workflowA
Convert a UI-format workflow saved in ComfyUI (e.g. "comfyui:MY_FLOW.json") to API format and save it as workflows/api/.json, without having to run it first. Resolves Set/Get nodes, reroutes and bypassed nodes. Not for workflows with subgraphs.
Args: include_bypassed: Treat bypassed nodes as active (e.g. optional LoadImage slots that are bypassed in the editor but should exist in the API version).
Inputs: name (required), workflow (required), overwrite, include_bypassed. Returns: object
comfyui_free_memoryB
Ask ComfyUI to unload models and free cached VRAM/RAM.
Inputs: unload_models. Returns: object
comfyui_generate_assetA
Generate or edit a single asset (object, sprite, icon, character cut-out) as a PNG with a
transparent background, using the default asset workflow (preset "asset").
Describe only the subject; the workflow adds the transparency instructions itself.
Size is exact pixels: width/height (default 1024x1024, rounded to multiples of 16). With
images and no width/height, the size of is used (scaled down if very large).
Refer to the images as , ... in the prompt; transparent input images are
flattened onto white first. transparent=false keeps a normal background. upscale
toggles the extra upscaled output; trim (default on) also returns copies cropped to the
object. Each output file has a label ("base", "upscale", "base_trimmed"...). Previews
show transparency as a checkerboard.
extra sets more workflow params or raw "." overrides; workflow swaps the
preset for another workflow.
Inputs: prompt (required), seed, trim, wait, +9 more.
comfyui_generate_audioA
Generate audio/music with the default audio workflow (preset "audio").
prompt describes the sound/style, lyrics is for song models, duration in seconds.
Empty arguments keep the workflow's own values. extra sets more workflow params or raw
"." overrides; workflow swaps the preset for another workflow.
Inputs: prompt (required), seed, wait, extra, +6 more.
comfyui_generate_imageA
Generate or edit images with the default image workflow (preset "image").
Without images it generates from the prompt. With images (URLs, base64, or ComfyUI
input filenames) it edits them following the prompt, if the workflow supports it; refer to
them in the prompt as , ... in the order given.
Size: width/height in pixels, or aspect_ratio (any ratio: "16:9", "5:4", "1.5") and/or
megapixels (1.0 = ~1024x1024), converted to pixels. Without any size it generates
1024x1024; when editing it uses the size of (scaled down if very large).
upscale toggles the extra upscaled output when the workflow has one. Each output file has a
label (e.g. "base", "upscale") when the workflow defines them.
Empty arguments keep the workflow's own values. extra sets more workflow params or raw
"." overrides; workflow swaps the preset for another workflow.
Inputs: prompt (required), cfg, seed, wait, +13 more.
comfyui_generate_videoA
Generate a video with the default video workflow (preset "video"). image/image2 are
start or reference images (URL, base64 or ComfyUI input filename) if the workflow uses them.
Use duration (seconds) or length (frames), whichever the workflow maps.
Video is slow: by default returns immediately; poll comfyui_job_status.
Empty arguments keep the workflow's own values. extra sets more workflow params or raw
"." overrides; workflow swaps the preset for another workflow.
Inputs: prompt (required), fps, seed, wait, +12 more.
comfyui_get_outputARead-only
List the files produced by a finished job (images, videos, audio...). Each file has a
url that supports streaming/seeking and, for media, a player page to open in a browser.
Args: prompt_id: Job id returned by comfyui_run or a preset tool. include_temp: Also include temporary preview files (PreviewImage nodes).
Inputs: prompt_id (required), include_temp.
comfyui_historyARead-only
Recent finished jobs (newest first), including ones run from the ComfyUI web UI. Use a prompt_id from here with comfyui_save_workflow to turn that run into a workflow.
Inputs: limit. Returns: object
comfyui_job_statusARead-only
Status of a job: pending (with queue_position), running, success, error, interrupted, or not_found. Finished jobs include their output files.
Inputs: prompt_id (required). Returns: object
comfyui_modelsARead-only
List installed models.
Args: folder: Model folder, e.g. "checkpoints", "loras", "vae", "upscale_models", "diffusion_models", "text_encoders". Omit to list every folder. search: Case-insensitive substring filter on file names.
Inputs: folder, search. Returns: object
comfyui_queueA
Show the running and pending jobs, or clear all pending jobs (action="clear"; the running job is not affected).
Inputs: action. Returns: object
comfyui_runA
Queue a workflow on ComfyUI.
Args:
workflow: Workflow name from comfyui_workflows.
params: Friendly params defined in workflows.yaml, e.g. {"prompt": "a cat", "steps": 20}.
inputs: Raw node overrides, keyed ".", e.g. {"6.text": "a cat",
"KSampler.cfg": 6.5}.
workflow_json: An inline API-format workflow, used instead of workflow.
randomize_seed: Give seed/noise_seed inputs that were not set explicitly a new random
value (otherwise ComfyUI may return a cached result and skip execution).
wait: Block until the job finishes (or timeout seconds) and return its outputs.
timeout: Seconds to wait when wait=true (default DEFAULT_WAIT_TIMEOUT).
preview: With wait=true, also return downscaled previews of the resulting images.
Inputs: wait, inputs, params, preview, +4 more.
comfyui_save_workflowA
Save the exact API-format workflow of a past job as a reusable workflow, stored in ComfyUI under workflows/api/.json. This is how UI-format workflows become runnable: run it once in the ComfyUI web UI, then save it from comfyui_history.
Inputs: name (required), prompt_id (required), overwrite. Returns: object
comfyui_statusARead-only
ComfyUI health: whether it is reachable, queue size, GPU and VRAM/RAM usage, versions.
Inputs: no named parameters. Returns: object
comfyui_upload_fileA
Upload an image/audio/video into ComfyUI's input folder, for use in Load* nodes.
Args: source: An http(s) URL, a data: URI or raw base64 content.
Inputs: source (required). Returns: object
comfyui_upscaleA
Upscale an image with the default upscale workflow (preset "upscale").
image may be a URL, data URI, base64, or the name of a file already in ComfyUI's input
folder (e.g. a previous output uploaded with comfyui_upload_file).
Empty arguments keep the workflow's own values. extra sets more workflow params or raw
"." overrides; workflow swaps the preset for another workflow.
Inputs: image (required), wait, extra, scale, +3 more.
comfyui_view_imageARead-only
Return an image so it can be seen inline (downscaled to max_size px).
Either pass prompt_id (+ index among its image outputs) or an explicit filename
(+ subfolder/type), e.g. to look at an uploaded input image.
Inputs: type, index, filename, max_size, +2 more.
comfyui_workflow_infoARead-only
Show a workflow's friendly params and every node's literal inputs, i.e. what can be
changed via comfyui_run params or inputs (".").
Inputs: workflow (required). Returns: object
comfyui_workflowsARead-only
List available workflows (local files and those saved in ComfyUI), their friendly params and which preset (image/upscale/video/audio) each one backs.
Inputs: no named parameters. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 20 tools
Each tool targets a distinct purpose: workflow introspection, execution, generation, file I/O, and job management are clearly separated. Even overlapping concepts like comfyui_run vs the generate_* wrappers are differentiated by generic vs preset usage. The descriptions reinforce these boundaries, so an agent is unlikely to misselect.
All tools share the comfyui_ prefix and use snake_case, but the pattern mixes verb_noun (generate_image, save_workflow) with noun-only names (status, models, history, queue). This is a minor inconsistency; the prefix and clear resource names keep the convention mostly predictable.
At 20 tools, the server is on the heavy side for an MCP integration, falling into the 16-25 range that feels borderline. The count is justified by the breadth of ComfyUI operations, but several generate_* wrappers plus a generic run tool add redundancy in scope.
The surface covers the core workflow lifecycle: list/inspect, run, save/convert, status/history, outputs, upload, cancel/queue, and model/resource management. Minor gaps like workflow deletion or explicit file download are absent but workarounds exist (e.g., URLs from get_output).
Maintenance
Related MCP Connectors
Remote MCP for RunComfy: ComfyUI deployments, hosted models, LoRA training. 31 tools.
LLM chat, text tools, image generation, editing, batch image jobs, and asynchronous video generation
Image and video AI tools and your own pipelines, run from any AI assistant.
Generate images, videos and music with model discovery, cost estimates and asynchronous results.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables comprehensive ComfyUI workflow automation including image generation, workflow management, node discovery, and system monitoring through natural language interactions with local or remote ComfyUI servers.3152 PyPI14MIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to interact with local ComfyUI installations to list nodes, validate workflows, and execute image generation workflows directly without requiring an HTTP server.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to generate images using ComfyUI by exposing tools for image generation, batch processing, and status checking through the Model Context Protocol.MIT
- FlicenseBqualityDmaintenanceConnects AI assistants to ComfyUI for image, video, and audio generation, providing full control over ComfyUI through 40+ tools including quick generation, cloud API nodes, and custom workflow building.46-