{
  "markdown": "# comfyui-mcp — drive ComfyUI with ANY LLM\n\n<p align=\"center\">\n  <a href=\"https://comfyui-mcp.artokun.io/docs\">\n    <img src=\"docs/images/demo-poster.jpg\" width=\"760\"\n         alt=\"The Agent panel driving ComfyUI end to end. Click to watch the demo\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <em>The Agent panel driving ComfyUI end to end. It reads what is installed locally,\n  wires the graph, frees VRAM, and runs the render.<br>\n  <a href=\"https://comfyui-mcp.artokun.io/docs\">Watch the 76s demo &rarr;</a></em>\n</p>\n\n**The local-first, agent-native control plane for [ComfyUI](https://github.com/comfyanonymous/ComfyUI).** An MCP server plus a live sidebar agent that generates images, video and audio, authors and runs workflows, manages models and custom nodes, and **edits your live ComfyUI graph in natural language**. Bring whatever model you have: **Claude or ChatGPT on your subscription, Gemini on your Google login, a free local model via Ollama (fully offline), or any hosted model over one API key** (DeepSeek, GLM, MiMo, Kimi, GPT, Claude via OpenRouter). The tools and the panel are the same on every tier, and the built-in [LLM Arena](https://comfyui-mcp.artokun.io/docs/arena) scores each model on real ComfyUI tasks so you know what yours can do. One config targets local installs, LAN, VPS, or Comfy Cloud.\n\n[![npm version](https://img.shields.io/npm/v/comfyui-mcp)](https://www.npmjs.com/package/comfyui-mcp)\n[![Node.js](https://img.shields.io/badge/node-%3E%3D22.0.0-brightgreen)](https://nodejs.org)\n[![License](https://img.shields.io/npm/l/comfyui-mcp)](./LICENSE)\n[![Documentation](https://img.shields.io/badge/docs-comfyui--mcp.artokun.io-2563EB?logo=readthedocs&logoColor=white)](https://comfyui-mcp.artokun.io/docs)\n\n[![comfyui-mcp MCP server](https://glama.ai/mcp/servers/artokun/comfyui-mcp/badges/card.svg)](https://glama.ai/mcp/servers/artokun/comfyui-mcp)\n[![comfyui-mcp MCP server](https://glama.ai/mcp/servers/artokun/comfyui-mcp/badges/score.svg)](https://glama.ai/mcp/servers/artokun/comfyui-mcp)\n\n[![Deploy on RunPod](https://img.shields.io/badge/Deploy_on-RunPod-673AB7?style=for-the-badge)](https://console.runpod.io/deploy?template=bnqtkvcer3&ref=dkx71w9b) [![Join the Discord](https://img.shields.io/badge/Discord-Join_%26_get_help-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/cW9arBhzCu) &nbsp;**One-click GPU pod.** A ready-to-run ComfyUI with this project + [Agent Panel](https://github.com/artokun/comfyui-mcp-panel) + ComfyUI-Manager v2 preinstalled, on your own GPU. No setup.\n\nWorks on macOS, Linux, and Windows. Auto-detects your ComfyUI installation and port.\n\n**Stuck or have a question? [Join the Discord](https://discord.gg/cW9arBhzCu)** for help, model tips, and release announcements.\n\n**38 MCP tools** | **42 AI skills** (Flux · WAN · LTX 2.3 video · MiniMax H3 · Qwen · Z-Image · Ideogram 4 · ERNIE · ANIMA · model registry · Civitai · node authoring · launch/perf flags) | **56 installer packs** | **11 slash commands** | **4 autonomous agents** | **3 hooks**\n\nThe plugin ships skills that grow with every release: model-specific generation guides with curated download URLs, workflow recipes, troubleshooting, and custom-node authoring. With them, Claude knows the right sampler, CFG, resolution, and model files for each architecture without trial and error.\n\n> ### Now available: the [ComfyUI Agent Panel](https://registry.comfy.org/nodes/comfyui-agent-panel) on ComfyUI-Manager & the Comfy Registry\n> An autonomous AI agent in your ComfyUI sidebar, running **on Claude, ChatGPT, Gemini, or ANY local/hosted LLM** (Ollama and every OpenAI-compatible endpoint). Subscriptions work with no API key; local models work with no account at all. Pick a provider and it drives your live graph: edits, spatial layout, one-shot workflow/pack loads, rewind/rollback, a pending-message tray, activity cards, multi-tab. It asks before spending paid API credits.\n> Search `comfyui-agent-panel` in ComfyUI-Manager to install. [Read more →](https://comfyui-mcp.artokun.io/docs/panel)\n\n**Full documentation: [comfyui-mcp.artokun.io/docs](https://comfyui-mcp.artokun.io/docs)**\n\n---\n\n## Quick Start\n\n**1. Install ComfyUI** (if you haven't already): [ComfyUI Desktop](https://www.comfy.org/download) or [from source](https://github.com/comfyanonymous/ComfyUI)\n\n**2. Add the MCP server** to your Claude Code config (`~/.claude/settings.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"comfyui\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"comfyui-mcp\"],\n      \"env\": {\n        \"CIVITAI_API_TOKEN\": \"\"\n      }\n    }\n  }\n}\n```\n\n**3. Start using it.** With ComfyUI running, ask Claude to generate an image:\n\n```\n> Generate an image of a sunset over mountains\n```\n\nClaude will find (or download) a checkpoint, build a workflow, execute it, and return the image.\n\n> **Note**: This runs as a standalone MCP server, so there is no need to clone this repo. `npx` downloads and runs it.\n\n### Scope: local, remote, or Comfy Cloud\n\n`comfyui-mcp` is **local-first**. A self-hosted ComfyUI on Mac/Linux/Windows is the primary target, and the same agent reaches remote installs (RunPod, VPS, LAN, reverse-proxied) from one config. Local-first, not local-only.\n\n**More than a bridge.** Most ComfyUI MCP servers are thin connectors. They forward a prompt and hand back an image. `comfyui-mcp` is a full control plane. It authors and edits the graph node by node, runs and iterates on workflows, manages models and custom nodes, and ships model-specific expertise (samplers, CFG, resolutions, curated model URLs) so the agent gets it right without trial and error. If you want a minimal local relay, a lightweight server is fine. If you want an agent that *operates* ComfyUI, that's this project.\n\nFor Comfy Cloud users, Comfy-Org ships its own [agent tooling](https://docs.comfy.org/agent-tools): Comfy Cloud MCP (public beta, hosted on Comfy Cloud GPUs), the Comfy In-App Agent (private alpha, inside Comfy Cloud), and a first-party Comfy Local MCP (private test, not publicly available yet), all maintained by the Comfy team. If you don't have a GPU or you want zero setup, that's the better path; go use it.\n\nWhere this project differs is that it runs on **your** install and **your** choice of model, including a free local one via Ollama with no account and no network at all. `comfyui-mcp` *also* includes a community cloud mode (set `COMFYUI_API_KEY`, see [Deployment modes](#deployment-modes)) so a single MCP can target all three deployment shapes from one config.\n\n**[Local vs. Comfy Cloud agent](https://comfyui-mcp.artokun.io/docs/local-vs-comfy-cloud)** is a side-by-side comparison, including when Comfy Cloud is the right answer. *(Statuses above are as of July 2026. Comfy-Org ships fast, so check their docs for the current state.)*\n\n### Remote / hosted connector (one command)\n\nTo use `comfyui-mcp` from Claude Desktop's Custom Connectors or any remote\nclient, like Comfy's own `cloud.comfy.org/mcp` connector, run it as an\nauthenticated, publicly reachable Streamable-HTTP server with one flag:\n\n```bash\nnpx -y comfyui-mcp@latest --tunnel\n```\n\nThis forces the HTTP transport, generates an auth token, opens a\n[cloudflared](https://github.com/cloudflare/cloudflared) quick tunnel, and prints\na ready-to-paste `https://…/mcp` URL + token + Claude Desktop connector snippet.\nAuth accepts `Authorization: Bearer <token>` or `X-API-Key: <token>` (matching\nComfy Cloud's convention). See the\n[Remote / hosted connector guide](https://comfyui-mcp.artokun.io/docs/remote-connector)\nfor the full walkthrough and headless usage.\n\n> Auth is opt-in. With no `COMFYUI_MCP_HTTP_TOKEN` set and no `--tunnel`, the\n> default stdio (and plain `--http` on loopback) behavior is unchanged. It stays open and\n> local. OAuth (Comfy's browser sign-in flow) is a planned follow-up.\n\n---\n\n## Claude Code Plugin\n\nThis package also ships as a Claude Code plugin that adds slash commands, skills, agents, and hooks on top of the MCP tools.\n\n### Install as a plugin\n\n```bash\n# In Claude Code\n/plugin marketplace add artokun/comfyui-mcp\n/plugin install comfy\n```\n\n### Slash commands\n\n| Command | Description |\n|---------|-------------|\n| `/comfy:gen <prompt>` | Generate an image from a text description — auto-selects checkpoint, builds workflow, returns image |\n| `/comfy:viz <workflow>` | Visualize a workflow as a Mermaid diagram with nodes grouped by category |\n| `/comfy:node-skill <pack>` | Generate a Claude skill for a custom node pack from Registry ID or GitHub URL |\n| `/comfy:debug [prompt_id]` | Diagnose why a workflow failed — reads history, logs, traces root cause, suggests fixes |\n| `/comfy:batch <prompt, params>` | Parameter sweep generation across cfg, sampler, steps, seed, etc. |\n| `/comfy:convert <file>` | Convert between UI format and API format workflows |\n| `/comfy:install <pack>` | Install a custom node pack — git clone, pip install, optional restart |\n| `/comfy:gallery [filter]` | Browse generated outputs with metadata — filter by date, count, or filename |\n| `/comfy:compare <a vs b>` | Diff two workflows side by side — shows added/removed nodes and changed parameters |\n| `/comfy:recipe <name> <prompt>` | Multi-step recipes: `portrait`, `hires-fix`, `style-transfer`, `product-shot` |\n\n### Built-in skills\n\n42 skills total: model-family guides (Flux, WAN, LTX 2.3, MiniMax H3, Qwen, Z-Image, Ideogram 4, ERNIE, ANIMA + anime / WAN / Z-Image LoRA training), the **model-registry** (curated download URLs), the **civitai** pairing skill, node authoring, the **launch/performance-flags** matrix, and the core four below. Full list on the [plugin docs page](https://comfyui-mcp.artokun.io/docs/plugin).\n\n> **Installer packs.** [`packs/`](packs/) bundles 13 one-command ComfyUI setups: ANIMA, Ideogram 4, LTX-2.3, ERNIE, WAN (animate / longer-videos / transparent), Qwen (image / image-edit), Z-Image (turbo / base / xy-plot) and artokun-flow (WAN Animate: replace / animate). Each is a manifest of custom nodes + model URLs + workflow that drives both `apply_manifest` and generated `install-windows.bat` / `install-runpod.sh`, with CI that validates every model link + payload size. See [`packs/README.md`](packs/README.md).\n\n| Skill | Description |\n|-------|-------------|\n| **comfyui-core** | Workflow format, node types, data flow patterns, pipeline architecture, MCP tool usage guide |\n| **prompt-engineering** | CLIP weight syntax `(word:1.3)`, BREAK tokens, embeddings, model-specific prompting for SD1.5/SDXL/Flux/SD3 |\n| **troubleshooting** | Common error catalog — OOM, dtype mismatches, missing nodes, NaN tensors, black images, CUDA errors, with VRAM estimates per model |\n| **model-compatibility** | Compatibility matrix — loaders, resolutions, CFG, samplers, ControlNets, LoRAs, and VAEs per model family (SD1.5/SDXL/Turbo/Lightning/Flux/SD3/LTXV) |\n\n### Agents\n\n| Agent | Model | Description |\n|-------|-------|-------------|\n| **comfy-explorer** | Sonnet | Researches custom node packs — reads docs, queries `/object_info`, generates skill files |\n| **comfy-debugger** | Sonnet | Autonomously diagnoses workflow failures — gathers logs + history, identifies failing node, checks models + custom nodes, proposes and optionally applies fixes |\n| **comfy-optimizer** | Sonnet | Analyzes workflows for performance — detects redundant nodes, VRAM waste, wrong CFG/steps for model family, precision issues, suggests optimizations |\n| **comfy-researcher** | Sonnet | Discovers and ranks ComfyUI custom node packs for a stated image-generation problem |\n\n### Hooks\n\n| Event | Trigger | Action |\n|-------|---------|--------|\n| PreToolUse | `enqueue_workflow` | **VRAM watchdog** — checks GPU memory via `/system_stats` and warns if < 1GB free before execution |\n| PreToolUse | `restart_comfyui` (actions `stop`/`restart`) | **Save warning** — prompts user to save unsaved workflow changes before stopping ComfyUI |\n| PostToolUse | Any comfyui tool | **Job completion notify** — checks for completed jobs and injects completion summaries into the conversation |\n\n### Background Scripts\n\n| Script | Description |\n|--------|-------------|\n| `monitor-progress.mjs` | **Progress monitor** — connects to ComfyUI's WebSocket for real-time step progress (e.g., `step 5/14 (36%)`). Run as a background Bash task after enqueuing workflows. Reports completion with output filenames, errors with node details. Replaces polling `queue` (action:\"status\") in a loop. |\n\n---\n\n## Panel agent (Claude · ChatGPT · Gemini · any local/hosted LLM)\n\nBeyond the headless MCP server, this package ships the panel orchestrator that\npowers the [ComfyUI Agent Panel](https://github.com/artokun/comfyui-mcp-panel),\nan autonomous agent embedded in ComfyUI's sidebar that drives the live canvas. It\nruns in the background on your own subscription (Claude *or* ChatGPT), started\non demand by the panel's **Connect** button:\n\n```bash\nnpx -y comfyui-mcp@latest connect\n```\n\n### Drive a REMOTE ComfyUI from your own machine (`connect`)\n\nWhen ComfyUI runs somewhere with no Node or agent (a RunPod pod, a cloud box) you\ncan still run the agent on your machine and drive that remote ComfyUI. There is no\nagent login on the box and nothing to install or configure remotely:\n\n```bash\nnpx -y comfyui-mcp@latest connect https://abcd1234-3000.proxy.runpod.net\n```\n\nThis is sugar for `--panel-orchestrator` with `COMFYUI_URL` set from the URL. The\norchestrator runs locally on your Claude/ChatGPT login and reaches the remote\nComfyUI over its public proxy URL. For a remote HTTPS pod, `connect`\nopens a token-gated `wss://` tunnel (via Cloudflare) to\nthe local agent bridge and hands the pod's panel that URL, so the pod's HTTPS page\nreaches your machine with no browser prompt, in any browser. A secure page\ncan't open a plain `ws://` socket to your box because of mixed-content and Private Network\nAccess rules. A local ComfyUI uses the plain `ws://127.0.0.1:9199` loopback bridge.\nAdd `--insecure-bridge` to force that loopback for a remote pod, then arrange\nyour own path to it, e.g. an SSH port-forward. Either way the panel JS runs in\nyour local browser, and the agent and your login run only on your\nmachine, so nothing is installed remotely.\n\nTo finish, with `connect` still running on your machine, open the remote ComfyUI in\nyour browser and click **Connect** in the Agent panel. The panel is a pure-frontend\nextension. It links to the bridge your `connect` process is already serving, rather\nthan asking the ComfyUI host to spawn an orchestrator it cannot run.\n\n**Multi-provider, full parity.** The orchestrator depends on a provider-neutral\n`AgentBackend` port (dependency injection), with two adapters:\n\n- `ClaudeBackend` wraps the [Claude Agent SDK](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk)\n  (`@anthropic-ai/claude-agent-sdk`), a persistent streaming session over the\n  claude.ai subscription (OAuth, no key).\n- `CodexBackend` wraps OpenAI Codex over the `codex app-server` JSON-RPC\n  protocol (`@openai/codex`), on the ChatGPT subscription (`codex login`, no key).\n\nFurther adapters follow the same port: Gemini CLI (ACP), Antigravity\n(`agy`, the Google AI Pro/Ultra subscription path; install from\n[antigravity.google](https://antigravity.google) and run `agy` once to sign\nin), Grok, Kimi, GLM, Ollama/LM Studio/llama.cpp (local), OpenRouter, and\nany OpenAI-compatible endpoint. See\n[docs/backends](https://comfyui-mcp.artokun.io/docs/backends) for the full\nmatrix.\n\nBoth are optional dependencies, and the panel picks a provider, not a port.\nEach backend runs its own orchestrator on its own loopback bridge port. A\ncapability matrix tells the panel which features each backend supports (e.g. conversation-rollback is\nClaude-only today, since the Codex app-server resumes whole threads only).\n\n**The live-canvas tools and model knowledge are identical across providers.** The\n`panel_*` tool definitions live in one shared list, registered onto both the\nin-process Claude SDK MCP server *and* a `@modelcontextprotocol/sdk` server over a\nloopback streamable-HTTP MCP that the orchestrator hosts for Codex (which can\nonly host config-declared MCP servers). The headless `comfyui` MCP is likewise\ninjected into both, in-process for Claude and declared via `codex app-server -c\nmcp_servers` for ChatGPT, so generation, models, and workflow tools are the same\neverywhere.\n\nNew tools that give every backend the same expertise and a cost guardrail:\n\n| Tool | Description |\n|------|-------------|\n| `list_packs` (`action: \"skill_list\"` / `\"skill_read\"`) | Discover and read bundled model-family + workflow skills — the knowledge Claude loads natively, exposed to any MCP client (e.g. the Codex backend) |\n| `list_packs` (`action: \"list\"` / `\"read_workflow\"`) | List one-command installer packs (custom nodes + weights + ready workflow; all local-GPU / free) and read a pack's graph |\n| `list_packs` (`action: \"list_templates\"`) | List the connected ComfyUI's custom-node-contributed workflow templates |\n| `list_packs` (`action: \"check_runtime\"`) | Classify a workflow as **local** (your GPU, free) or **api** / **mixed** / **unknown** (hosted API nodes = paid credits) so the agent asks before spending paid API credits |\n| `list_packs` (`action: \"extract_deps\"` / `\"install_deps\"`) | Work out which custom node packs a workflow needs, and install the missing ones through ComfyUI-Manager |\n| `panel_load_workflow` | (panel tool) Load a full workflow onto the live canvas in one shot — by bundled `pack` name (read server-side, never shuttled through chat) or by graph JSON |\n| `panel_strip_workflow` / `panel_slice_workflow` | (panel tools) De-virtualize a tangled graph (Get/Set buses, Reroutes, subgraphs, bypass → real connections) or carve one rgthree-toggled pipeline out of a monolith — by `pack`, server-side `path`, or inline graph; for understanding/rebuilding expert workflows without hand-tracing |\n\nSee the design doc, [design/agent-backend-injection.md](design/agent-backend-injection.md),\nfor the port, the capability matrix, and the per-provider \"clink\" points, and the\n[panel docs](https://comfyui-mcp.artokun.io/docs/panel) for the full sidebar UX.\n\n---\n\n## MCP Tools\n\n38 tools across workflow execution, generation, iteration, composition, models, and more:\n\n### Image Generation (high-level)\n\n| Tool | Description |\n|------|-------------|\n| `generate_image` `action: \"image\"` | Generate from a text prompt — builds a txt2img workflow, fills unspecified params from your defaults, auto-selects a checkpoint |\n| `generate_image` `action: \"controlnet\"` | Generate conditioned by a ControlNet image (pose/depth/canny/normal) + prompt |\n| `generate_image` `action: \"ip_adapter\"` | Generate guided by a reference image's style/subject via IP-Adapter (needs ComfyUI_IPAdapter_plus) |\n| `generate_image` `action: \"video\"` / `\"3d\"` | Generate a short video clip (LTX-2.3, local GPU) or a 3D model (hosted partner API nodes) from the same one-line entry point |\n| `generate_image` `action: \"upscale\"` | Post-process an uploaded or staged image with ESRGAN super-resolution |\n| generate_image (action:\"remove_background\") | Post-process an uploaded or staged image into a transparent BiRefNet cutout |\n\n### Audio Generation (high-level)\n\n| Tool | Description |\n|------|-------------|\n| `generate_image` `action: \"audio\"` | Generate audio from a text prompt — supports ACE Step 1.5 (music with lyrics/structure) and Stable Audio 3 (music, instruments, SFX); auto-selects local models |\n\n### Assets & Iteration\n\n| Tool | Description |\n|------|-------------|\n| `get_image (action:\"view\")` | Return a generated asset's bytes as an inline image so the agent can see the result |\n| `get_image (action:\"analyze_color\")` | Palette / contrast / color statistics for a generated image (dominant colors, average + luminance stats, contrast checks) so the agent can reason about color without a vision round-trip |\n| generate_image (action:\"regenerate\") | Re-run the workflow that produced an `asset_id`, with optional parameter overrides |\n| `get_image (action:\"list_assets\")` | Browse recently generated assets (newest-first) by `asset_id` |\n| `get_image (action:\"asset_metadata\")` | Full provenance for an asset, including the originating workflow |\n\n### Defaults\n\n| Tool | Description |\n|------|-------------|\n| `get_defaults` `action:\"get\"` | Show merged generation defaults with per-source attribution |\n| `get_defaults` `action:\"set\"` | Update runtime defaults; `persist: true` writes the config file |\n| `get_defaults` `action:\"get_ui\"` / `action:\"set_ui\"` | Read/write ComfyUI's OWN frontend UI settings (the `Comfy.*` ids) — a separate store from the generation defaults above |\n\n### Workflow Execution\n\n| Tool | Description |\n|------|-------------|\n| `enqueue_workflow` `action: \"enqueue\"` | Submit a workflow (API format JSON) — returns `prompt_id` immediately, non-blocking |\n| `enqueue_workflow` `action: \"rerun\"` / `\"run_url\"` / `\"template_schema\"` | Re-run a past generation, or read/run a shared workflow from a URL, or inspect a bundled template's overridable slots |\n| enqueue_workflow (action:\"run_template\") | One-shot: resolve a bundled pack's expert graph, apply `<nodeId>.<widget>` overrides, and enqueue it |\n| `queue` | One action-parameterized tool for the execution queue: `list` (running + pending), `status` (one job by prompt ID), `get_workflow` (a pending job's full payload), `move`/`edit` (requeue a pending job front/back, patched or replaced, with a new prompt ID), `cancel` (interrupt the running job — escalates interrupt → verify → `/free`, reports WEDGED if it won't die; `clear_pending: true` also drops all pending), `cancel_queued`, `clear` |\n| `get_system_stats` | Get system info — GPU, VRAM, Python version, OS |\n\n### Workflow Visualization\n\n| Tool | Description |\n|------|-------------|\n| `visualize_workflow` | One action-parameterized tool for rendering and converting a workflow you pass in: `render` (Mermaid flowchart, nodes grouped by category), `render_hierarchical` (the same graph sectioned — overview, one section in detail, a listing, or an AI-oriented summary), `mermaid` (a Mermaid diagram back to executable workflow JSON), `to_dsl`/`from_dsl` (the compact, losslessly round-tripping authoring DSL) |\n\n### Workflow Composition\n\n| Tool | Description |\n|------|-------------|\n| `create_workflow` | One action-parameterized tool for authoring: `create` (from templates: `txt2img`, `img2img`, `upscale`, `inpaint`, `controlnet`, `ip_adapter`, `ace_step_15`, `stable_audio_3`), `modify` (operations: `set_input`, `add_node`, `remove_node`, `connect`, `insert_between`), `validate` (dry-run — missing nodes, broken connections, invalid output indices, missing model files), `node_info` (query available node types from ComfyUI's `/object_info` endpoint) |\n\n### Workflow Library\n\n| Tool | Description |\n|------|-------------|\n| `get_workflow` | One action-parameterized tool for READING a saved workflow file: `list` (the user library, subfolders included), `get` (one workflow's JSON by filename), `analyze` (a structured summary instead of raw JSON), `query` (filter/traverse/aggregate a big graph without dumping it), `strip` (**de-virtualize** any workflow from an absolute path, library filename, or inline graph — resolve GetNode/SetNode buses, Reroutes, subgraph defs, and bypassed nodes into real connections and return the flat graph; reads ANY path server-side, so it loads ad-hoc/expert workflows the cached library can't), `slice` (**un-chunk** a toggle-template monolith — one rgthree Fast-Groups-Bypass-toggled pipeline out into a standalone activated graph; pair with `strip` to then flatten the buses), `from_image` (the workflow ComfyUI embedded in a PNG), `prompt_director` (Prompt Director's sanitized runtime state) |\n| `save_workflow` | One action-parameterized tool for WRITING to the library: `save` (store a workflow — overwrites a same-filename file), `lock` (record a provenance lock: SHA-256 per model, git commit per node pack), `verify_lock` (report drift against that lock) |\n\n### Image Management\n\n| Tool | Description |\n|------|-------------|\n| `upload_image` | Copy a local image into ComfyUI's `input/` directory for img2img, inpaint, or ControlNet |\n| `get_image (action:\"list_outputs\")` | Browse recently generated images **and videos** from the output directory, sorted newest-first — recurses into subfolders (e.g. SaveVideo's `output/video/…`) and returns each result's `subfolder` |\n\n### Model Management\n\n| Tool | Description |\n|------|-------------|\n| `download_model` | Find and fetch model weights, and track the transfers. `action`: `download` (from a URL, into the correct ComfyUI subdirectory), `status`, `cancel`, `search` (HuggingFace), `search_civitai`, `search_creators`, `download_civitai`, `resolve_missing` |\n| `list_local_models` | What is installed, and where ComfyUI looks. `action`: `list` (installed models by type: checkpoints, loras, vae, upscale_models, controlnet, embeddings, clip, unet, diffusion_models, text_encoders), `remove` (**deletes a model file**), `embeddings`, `list_paths`, `add_path`, `remove_path` (the last three view/edit the extra search-path YAML) |\n\n### Memory Management\n\n| Tool | Description |\n|------|-------------|\n| `clear_vram` | Free GPU VRAM by unloading cached models — calls ComfyUI's `/free` endpoint, reports before/after stats |\n\n### Registry & Discovery\n\n| Tool | Description |\n|------|-------------|\n| `search_custom_nodes` | Search the ComfyUI Registry for node packs by keyword (`action: \"search\"`), or get one pack's full details (`action: \"details\"`) |\n| `list_packs` (`action: \"generate_skill\"`) | Generate a Claude skill `.md` file from a Registry ID or GitHub URL |\n| `comfy_cli` | Search actual loaded node classes through official `comfy nodes search` (action:\"search_nodes\") |\n\n### Official comfy-cli\n\nInstall [comfy-cli](https://docs.comfy.org/comfy-cli/getting-started#install-cli) 1.11.1 or newer to enable the official JSON-backed tools. The MCP resolves `comfy` from `COMFY_CLI_PATH`, `PATH`, or the selected workspace's `.venv`/`venv`. Local custom-node operations prefer `comfy node` when a supported CLI is available and otherwise fall back to Manager HTTP; remote targets keep using Manager HTTP.\n\n| Tool | Description |\n|------|-------------|\n| `comfy_cli` | One action-parameterized tool for the whole official CLI: `status`, `server_start`/`server_stop`/`server_restart`, `jobs_list`/`jobs_status`/`jobs_wait`/`jobs_watch`/`jobs_cancel`, `search_nodes`, `workflow_validate`/`workflow_run`, `transfer_upload`/`transfer_download`, `models_*` (list/search/show/download/remove), `skills_*` (list/show/validate/install/status/uninstall) |\n\n### Diagnostics\n\n| Tool | Description |\n|------|-------------|\n| `get_system_stats (action:\"logs\")` | Get ComfyUI server logs with optional keyword filter (e.g., `error`, `warning`, a node name) |\n| `kitchen` | See what comfy-kitchen can do on this GPU (`status`), find where a graph leaves it on the table (`assess`), and apply the faster path (`apply`) — a failed probe is unknown, never a no |\n| `get_history` `action: \"list\"` | Get execution history with full error details, Python tracebacks, timing, and cached node info |\n| `get_history` `action: \"diagnose\"` | Explain a FAILED run in one call — the failed node and traceback PLUS the missing models (file + widget) and missing node types |\n\n### Process Control\n\n| Tool | Description |\n|------|-------------|\n| `restart_comfyui` `action:\"restart\"` | Stop and restart ComfyUI, preserving all launch arguments |\n| `restart_comfyui` `action:\"stop\"` | Stop the running ComfyUI process (saves PID and launch args for restart) |\n| `restart_comfyui` `action:\"start\"` | Start ComfyUI using info saved from a previous stop |\n\n### Generation Tracker\n\n| Tool | Description |\n|------|-------------|\n| `get_history` `action: \"suggest\"` | Suggest proven sampler/scheduler/steps/CFG settings from local generation history — query by model family, LoRA hash, or text search |\n| `get_history` `action: \"stats\"` | Show local generation tracking statistics — total runs, unique combos, breakdown by model family |\n\nEvery `enqueue_workflow` call logs settings to a local SQLite database (`generations.db`). Repeated settings combos get a `reuse_count` bump instead of a duplicate row, so the count works as a popularity signal. The tracker identifies models and LoRAs by content hash (AutoV2 / SHA256), not filename, so renamed files still group together.\n\n```bash\n# View local stats from the CLI\nnpm run generations:stats\n```\n\n---\n\n## Examples\n\n### Generate an image\n\n```\n> /comfy:gen a cyberpunk city at night with neon lights\n```\n\nClaude will:\n1. Check installed checkpoints (download one if needed)\n2. Build a txt2img workflow with your prompt\n3. Execute it on ComfyUI\n4. Return the generated image\n\n### Visualize a workflow\n\n```\n> /comfy:viz ~/workflows/my-workflow.json\n```\n\nProduces a Mermaid diagram with nodes grouped by category:\n\n```mermaid\nflowchart LR\n  subgraph Loaders\n    1[\"CheckpointLoaderSimple\"]\n  end\n  subgraph Conditioning\n    2([\"Positive Prompt\"])\n    3([\"Negative Prompt\"])\n  end\n  subgraph Sampling\n    5{{\"KSampler<br/>steps:20 cfg:8\"}}\n  end\n  1 -->|MODEL| 5\n  2 -->|CONDITIONING| 5\n  3 -->|CONDITIONING| 5\n```\n\n### Debug a failed workflow\n\n```\n> /comfy:debug\n```\n\nReads the last execution history and logs, identifies the failing node, checks for missing models or node packs, and suggests a fix.\n\n```\n> /comfy:debug abc123-def456\n```\n\nDiagnose a specific execution by prompt ID.\n\n### Parameter sweep\n\n```\n> /comfy:batch a cat in a field, cfg:5-10:2, sampler:euler,dpmpp_2m\n```\n\nGenerates a grid of images across all parameter combinations and presents a summary table with results.\n\nSupported sweep parameters: `cfg`, `steps`, `sampler`, `scheduler`, `seed`, `denoise`, `width`, `height`.\n\n### Multi-step recipes\n\n```\n> /comfy:recipe hires-fix a dramatic fantasy landscape with castles\n```\n\nRuns two passes: txt2img at 512x768, then an img2img upscale to 1024x1536 that adds detail.\n\nAvailable recipes:\n\n| Recipe | Description |\n|--------|-------------|\n| `portrait` | Generate at 1024x1024, then 2x upscale to 2048x2048 |\n| `hires-fix` | Low-res generation → img2img upscale with denoise 0.4-0.5 |\n| `style-transfer` | Apply a style prompt to an existing image via img2img |\n| `product-shot` | Product image with clean white background |\n\n### Convert workflow format\n\n```\n> /comfy:convert ~/workflows/my-ui-workflow.json\n```\n\nConverts between ComfyUI's UI format (nodes + links arrays) and API format (node IDs → {class_type, inputs}).\n\n### Install a custom node pack\n\n```\n> /comfy:install comfyui-impact-pack\n```\n\nSearches the registry, shows details, clones the repo to `custom_nodes/`, installs dependencies, and offers to restart ComfyUI.\n\n### Browse output gallery\n\n```\n> /comfy:gallery last 5\n> /comfy:gallery today\n```\n\nLists recent outputs with their embedded metadata: checkpoint, prompt, seed, steps, CFG, and sampler for each image.\n\n### Compare workflows\n\n```\n> /comfy:compare workflow-a.json vs workflow-b.json\n```\n\nShows added/removed nodes, changed parameters (old → new values), and optional Mermaid diagrams for visual comparison.\n\n### Validate before running\n\n```\n> Validate this workflow before I run it\n```\n\nChecks for missing node types, broken connections, invalid output indices, and missing model files without executing the workflow.\n\n### Manage models\n\n```\n> What checkpoints do I have installed?\n> Search HuggingFace for SDXL turbo models\n> Download this model to my checkpoints folder\n```\n\n### Manage VRAM\n\n```\n> Free my VRAM\n> What embeddings do I have?\n```\n\n### Extract workflow from an image\n\n```\n> Extract the workflow from this image: ~/outputs/ComfyUI_00042_.png\n```\n\nReads the PNG metadata chunks to recover the exact workflow and prompt used to generate the image.\n\n### Explore custom nodes\n\n```\n> /comfy:node-skill comfyui-impact-pack\n```\n\nGenerates a skill file documenting every node, its inputs/outputs, and usage patterns.\n\n### Process control\n\n```\n> Restart ComfyUI\n> Stop ComfyUI\n> Start ComfyUI back up\n```\n\n---\n\n## Configuration\n\nThe server auto-detects your ComfyUI installation and port. Override with environment variables if needed.\n\nWhere to put keys and overrides:\n\n- **Panel users.** Use the **API Keys** card (▾ menu next to \"connected\"). Keys are stored in `~/.comfyui-mcp/panel-secrets.json` and take effect without a restart.\n- **MCP-only setups** (Claude Desktop, Claude Code, etc.). Use the `env` block of your MCP client config, as shown in the setup examples above.\n- Real environment variables always take precedence over stored keys. For development, the server also loads `~/.comfyui-mcp/.env` as an override file; regular installs shouldn't need it.\n\n### Deployment modes\n\n`comfyui-mcp` operates in one of three modes, auto-selected from the environment:\n\n| Mode | Trigger | Local FS / process tools? |\n|------|---------|----------------------------|\n| **Local** | default | yes |\n| **Remote** | `--comfyui-url` / `COMFYUI_URL` points at a non-loopback host, or `--force-remote` is set | no — server skips `COMFYUI_PATH` auto-detection so stale local installs can't silently absorb uploads |\n| **Cloud** | `COMFYUI_API_KEY` is set (targets [Comfy Cloud](https://cloud.comfy.org)) | no — HTTP primitives route via `cloud.comfy.org` over `X-API-Key`; WebSocket and local-only tools throw `CLOUD_UNSUPPORTED` |\n\nSome setups (e.g. [dstack](https://dstack.ai) driving ComfyUI on RunPod) port-forward\na remote ComfyUI back to `localhost:8188`, so the loopback check above reports a\nlocal install that isn't one. Pass `--force-remote` (or set\n`COMFYUI_MCP_FORCE_REMOTE=1`) alongside `--comfyui-url`/`COMFYUI_URL` to force\nremote mode regardless of hostname:\n\n```bash\nnpx -y comfyui-mcp@latest --comfyui-url http://localhost:8188 --force-remote\n```\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `COMFYUI_URL` | | Full ComfyUI URL, e.g. `https://comfy.example.com:8443` — overrides `COMFYUI_HOST`/`PORT`/`SSL` and skips auto-detection. A **path prefix is preserved** (e.g. `https://host/comfyapi`) for reverse-proxied instances. Non-loopback hosts opt into **remote mode**. |\n| `COMFYUI_MCP_FORCE_REMOTE` | | Set to `1`/`true` (or pass `--force-remote`) to force **remote mode** even when `COMFYUI_URL`/`--comfyui-url` resolves to a loopback host — for port-forwarded remote installs (e.g. dstack/RunPod) that are reachable at `localhost`. No effect without a `COMFYUI_URL`/`--comfyui-url`. |\n| `COMFYUI_HOST` | `127.0.0.1` | ComfyUI server address |\n| `COMFYUI_PORT` | *(auto-detect)* | ComfyUI server port (tries 8188, then 8000) |\n| `COMFYUI_PATH` | *(auto-detect)* | Path to the ComfyUI data/base directory used for models, input/output and user state. In a conventional install this is also the checkout. Auto-detection suppressed in remote/cloud modes. |\n| `COMFYUI_CODE_PATH` | `COMFYUI_PATH` | Optional path to the ComfyUI checkout (`main.py`, `.venv`, core git) when code and data live under different roots. Pip, venv, and core updates use this checkout (core updates prefer the checkout observed from the connected local server and use this as their fallback). Pack reads/writes — `custom_nodes`, comfy-cli `--workspace`, `apply_manifest` clone/checkout, workflow-lock pack commits — stay on the live `--base-directory` / `COMFYUI_PATH` data root (#1770). |\n| `COMFY_CLI_PATH` | *(auto-detect)* | Path to the official `comfy` executable (comfy-cli >=1.11.1). Resolution also checks `PATH` and the selected workspace's `.venv`/`venv`. |\n| `COMFYUI_PYTHON` | `python` | Python interpreter used by legacy git-clone dependency fallbacks. Point it at your ComfyUI venv's Python when needed. |\n| `COMFYUI_MCP_BRIDGE_HOST` | `127.0.0.1` | Panel-bridge bind host. Set `0.0.0.0` (or a LAN IP) to run the orchestrator on a 24/7 server and connect panels from other machines — **requires a token** (below); the orchestrator prints a ready-to-paste `ws://…/?token=…` Bridge URL. |\n| `COMFYUI_MCP_BRIDGE_TOKEN` | *(generated when needed)* | Shared secret gating every bridge connection (checked constant-time on the WS upgrade). Mandatory for a non-loopback `COMFYUI_MCP_BRIDGE_HOST`; pin it so the Bridge URL survives restarts. Never logged beyond the startup banner. |\n| `COMFYUI_MCP_DATA_DIR` | `~/.comfyui-mcp` | Base dir for per-instance data (the `generations.db` behind `get_history` `action: \"suggest\"`) when there's no local `COMFYUI_PATH` (remote/cloud/undetected). Scoped per target under `instances/<host_port>/`. |\n| `COMFYUI_API_KEY` | | Comfy Cloud API key. When set, **cloud mode** is active and the server talks to `cloud.comfy.org`. Never logged. |\n| `COMFYUI_CLOUD_URL` | `https://cloud.comfy.org` | Override the Comfy Cloud endpoint (testing/staging). |\n| `COMFYUI_AUTH_TOKEN` | | Generic auth token for a **self-hosted ComfyUI behind a reverse proxy / API gateway** (distinct from Comfy Cloud). When set, attached to every ComfyUI request. Never logged. |\n| `COMFYUI_AUTH_HEADER` | `Authorization` | Header name for `COMFYUI_AUTH_TOKEN` (e.g. `X-API-Key`). |\n| `COMFYUI_AUTH_SCHEME` | `Bearer` for `Authorization`, else none | Scheme prefix on the token value (e.g. `Bearer`, `Token`). |\n| `CIVITAI_API_TOKEN` | | CivitAI API token for model downloads |\n| `HUGGINGFACE_TOKEN` | | HuggingFace token for higher API rate limits |\n| `COMFYUI_DOWNLOAD_PROXY` | | Optional HTTP/HTTPS proxy for model-download traffic only; standard proxy environment variables and static Windows WinINet settings are also honored |\n| `GITHUB_TOKEN` | | GitHub token for skill generation (avoids rate limits) |\n| `REGISTRY_ACCESS_TOKEN` | | Comfy Registry API key for `node_pack` (`action: \"publish\"`) (env-only, never logged) |\n| `COMFYUI_DOWNLOAD_CACHE_DIR` | `~/.comfyui-mcp/cache` | Content-addressed model-download cache (dedup + concurrent coalescing) |\n| `COMFYUI_LRU_CACHE_SIZE_GB` | `0` | Cap the download cache in GB; `0` disables LRU eviction |\n| `COMFYUI_STARTUP_CHECK_INTERVAL_S` / `…_MAX_TRIES` | `1` / `60` | Readiness-probe interval + max tries when starting a local ComfyUI |\n| `COMFYUI_ALWAYS_RESTART` | `false` | Auto-restart a crashed local ComfyUI (bounded by `COMFYUI_RESTART_MAX_ATTEMPTS` / `COMFYUI_RESTART_WINDOW_S`) |\n| `COMFYUI_MCP_STALL_S` | `180` | Render-wedge watchdog: seconds a sampler step can re-emit the same progress before a STALL/BACKLOG note is prepended to the agent's next turn (clamped 15–3600s; live-tunable from the panel) |\n| `COMFYUI_MCP_INTERRUPT_S` | `30` | Seconds `queue` (action:\"cancel\") waits for an interrupt to actually stop a job before escalating to `/free` and reporting it wedged |\n| `LOG_LEVEL` | `info` | Logging verbosity: `debug`, `info`, `warn`, `error` |\n\n### Transports\n\nThe server speaks stdio by default, which is what Claude Code, Claude Desktop, and the MCP Inspector expect, so no flags are needed. For MCP gateways, remote/hosted setups, or `fetch`-based clients, opt into streamable-HTTP:\n\n```bash\n# stdio (default)\nnpx -y comfyui-mcp@latest\n\n# streamable-HTTP on http://127.0.0.1:9100/mcp\nnpx -y comfyui-mcp@latest --http\nnpx -y comfyui-mcp@latest --http --host 0.0.0.0 --port 9100   # bind/port overrides\n```\n\n| Flag | Env | Default | Description |\n|------|-----|---------|-------------|\n| `--http` / `--transport http` | `MCP_TRANSPORT=http` | `stdio` | Serve streamable-HTTP at `/mcp` instead of stdio |\n| `--host <h>` | `MCP_HOST` | `127.0.0.1` | HTTP bind host (use `0.0.0.0` to expose) |\n| `--port <n>` | `MCP_PORT` | `9100` | HTTP port |\n| `--comfyui-url <url>` | `COMFYUI_URL` | *(auto-detect)* | Target a specific (incl. remote) ComfyUI |\n| `--force-remote` | `COMFYUI_MCP_FORCE_REMOTE` | `false` | Force remote mode for a loopback `--comfyui-url` (e.g. dstack/RunPod port-forwards to `localhost`) |\n\n### Other agents & local LLMs (Hermes, OpenClaw, Copilot CLI, Ollama)\n\ncomfyui-mcp supports non-Claude harnesses. One command\nwrites the server entry into the harness's own config (it merges into an existing\nfile rather than overwriting it):\n\n```bash\nnpx -y comfyui-mcp setup hermes     # → ~/.hermes/config.yaml      (compact by default)\nnpx -y comfyui-mcp setup openclaw   # → ~/.openclaw/openclaw.json  (compact by default)\nnpx -y comfyui-mcp setup copilot    # → ~/.copilot/mcp-config.json (full by default)\n# flags: --compact | --full, --comfyui-url <url>, --dry-run\n```\n\n**Model requirements.** Tool calling is a hard requirement; a model without tool calling\ndoesn't work. Thinking and vision are recommended. Without\nthinking, multi-step tool chains degrade; without vision the agent can\ngenerate but can't see its own outputs.\n\n**Compact tool mode.** `--compact` /\n`COMFYUI_MCP_TOOL_MODE=compact` registers 3 meta-tools (`list_tools` →\n`describe_tool` → `call_tool`) instead of the direct tool set, pulling schemas\ninto context one tool at a time. That is the right trade for small local models. The\ndirect tool set is the default and is what frontier-model harnesses want.\n**Run it locally\nfor free with our fine-tuned models.** `ollama pull artokun/gemma4-comfyui-mcp:e4b`\n(also `:e2b` for ~2 GB VRAM, `:12b` for ~8 GB) is Gemma 4, QLoRA-trained on 1,055\nserver-verified trajectories over the full comfyui-mcp tool set, and is the\npanel's Ollama default. Stock `gemma4:*`/`qwen3:4b` are also validated end-to-end\n(`npm run test:local-llm`); gemma3 has no native tool calling and is\nunsupported. The full guide, covering hosted-model guidance (DeepSeek/MiMo/GLM class),\nper-harness setup, and troubleshooting, is\n**[Local LLMs & other agents](https://comfyui-mcp.artokun.io/docs/local-llms)**.\n\n| Flag | Env | Default | Description |\n|------|-----|---------|-------------|\n| `setup <agent>` | | | Write the comfyui entry into hermes / openclaw / copilot config, then exit |\n| `--compact` / `--tool-mode compact` | `COMFYUI_MCP_TOOL_MODE=compact` | `full` | Opt into the 3 meta-tools (`list_tools` / `describe_tool` / `call_tool`) instead of the direct tool set — recommended for small local models. `--full` is still accepted and is now a no-op |\n\n### Remote ComfyUI\n\nPoint the server at a ComfyUI running anywhere; no local install is required:\n\n```bash\nnpx -y comfyui-mcp@latest --comfyui-url http://192.168.1.50:8188\nnpx -y comfyui-mcp@latest --http --comfyui-url https://comfy.example.com:8443\n```\n\n**Behind a reverse proxy / API gateway** (path prefix + auth header). For a\nself-hosted ComfyUI exposed under a prefixed route with its own auth layer (this\nis *not* Comfy Cloud, which is `COMFYUI_API_KEY`):\n\n```bash\nCOMFYUI_URL=https://gateway.example.com/comfyapi \\\nCOMFYUI_AUTH_TOKEN=your-token \\\n  npx -y comfyui-mcp@latest --http        # → Authorization: Bearer your-token, requests under /comfyapi\n\n# custom header / scheme:\nCOMFYUI_URL=https://gateway.example.com/comfyapi \\\nCOMFYUI_AUTH_HEADER=X-API-Key COMFYUI_AUTH_TOKEN=your-token \\\n  npx -y comfyui-mcp@latest --http        # → X-API-Key: your-token\n```\n\n### Auto-detection\n\n**Port**: Probes `8188` (CLI default) then `8000` (Desktop app default) via `/system_stats`.\n\n**Path**: Checks common locations in order:\n\n- `~/Documents/ComfyUI` (macOS/Windows Desktop app data directory)\n- `~/Library/Application Support/ComfyUI` (macOS)\n- `~/AppData/Local/Programs/ComfyUI/resources/ComfyUI` (Windows Desktop app install)\n- `~/AppData/Local/ComfyUI` (Windows)\n- `~/ComfyUI`, `~/code/ComfyUI`, `~/projects/ComfyUI`, `~/src/ComfyUI`\n- `/opt/ComfyUI`, `~/.local/share/ComfyUI` (Linux)\n- Scans `~/Documents` and `~/My Documents` for any directory containing \"ComfyUI\"\n\nSet `COMFYUI_PATH` to skip detection and use an explicit path.\n\n---\n\n## How It Works\n\nThe server communicates with ComfyUI through its REST API and WebSocket interface:\n\n- **WebSocket.** Enqueue workflows, receive real-time progress updates (step by step via the background monitor script), get execution results\n- **REST API.** System stats, node definitions (`/object_info`), logs, history, queue management, workflow library, VRAM control (`/free`), embeddings\n- **File system.** Read/write the models directory, detect installation paths, upload images, extract PNG metadata, browse outputs\n- **External APIs.** HuggingFace (model search), ComfyUI Registry (custom node discovery), GitHub (skill generation), CivitAI (model downloads)\n\nAll communication with the MCP client (Claude Code) happens over stdio using the [Model Context Protocol](https://modelcontextprotocol.io). Logs go to stderr so they never mix into the protocol stream.\n\n---\n\n## Development\n\n### Prerequisites\n\n- [Node.js](https://nodejs.org) >= 22.0.0\n- [ComfyUI](https://github.com/comfyanonymous/ComfyUI) running locally\n\n### Setup\n\n```bash\ngit clone https://github.com/artokun/comfyui-mcp.git\ncd comfyui-mcp\nnpm install\n```\n\n### Scripts\n\n| Script | Description |\n|--------|-------------|\n| `npm run dev` | Run from source with tsx (hot reload) |\n| `npm run build` | Compile TypeScript to `dist/` |\n| `npm start` | Run compiled output |\n| `npm test` | Run unit tests (vitest) |\n| `npm run test:integration` | Run integration tests (requires running ComfyUI) |\n| `npm run lint` | Type-check without emitting |\n| `npm run generations:stats` | Show local generation tracking statistics |\n| `npm run sync-agents` | Sync Claude skills/commands/hooks to Google Antigravity, OpenCode, and other AI IDE formats that supports .agents files |\n\n### Local testing with Claude Code\n\nPoint Claude Code at your local build instead of the npm package:\n\n```json\n{\n  \"mcpServers\": {\n    \"comfyui\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/comfyui-mcp/dist/index.js\"],\n      \"env\": {}\n    }\n  }\n}\n```\n\nOr test the plugin directly:\n\n```bash\nclaude --plugin-dir ./plugin\n```\n\n### Project structure\n\n```\nscripts/\n  generation-stats.mjs         # CLI: npm run generations:stats\nsrc/\n  index.ts                 # MCP server entry point (stdio transport)\n  config.ts                # Auto-detection & environment config\n  comfyui/\n    client.ts              # ComfyUI WebSocket/HTTP client wrapper\n    types.ts               # TypeScript interfaces\n  services/\n    workflow-executor.ts   # Execute workflows, handle images & errors\n    workflow-composer.ts   # Templates (txt2img, img2img, upscale, inpaint)\n    workflow-validator.ts  # Dry-run validation (missing nodes, models, connections)\n    image-management.ts    # Upload images, extract PNG metadata, list outputs\n    mermaid-converter.ts   # Workflow → Mermaid diagram\n    workflow-converter.ts  # UI → API: de-virtualize Get/Set buses + Reroutes, expand subgraphs, resolve bypass (powers get_workflow's strip action)\n    workflow-slicer.ts     # sliceWorkflow() — rgthree Fast-Groups-Bypass pipeline un-chunker (shared by the CLI + get_workflow's slice action)\n    mermaid-parser.ts      # Mermaid diagram → Workflow\n    model-resolver.ts      # HuggingFace search, local models, downloads\n    generation-tracker.ts  # SQLite generation log, settings dedup, stats\n    file-hasher.ts         # SHA256 hashing of .safetensors with cache\n    workflow-settings-extractor.ts  # Extract settings from workflow JSON\n    process-control.ts     # Stop, start, restart ComfyUI process\n    registry-client.ts     # ComfyUI Registry API\n    skill-generator.ts     # Generate node pack skill docs\n  tools/                   # MCP tool registration (one file per group)\n    workflow-execute.ts    # enqueue_workflow, get_system_stats\n    workflow-visualize.ts  # visualize_workflow (render/render_hierarchical/mermaid/to_dsl/from_dsl)\n    workflow-compose.ts    # create_workflow (create/modify/validate/node_info)\n    workflow-validate.ts   # the validate action's body\n    workflow-library.ts    # get_workflow (8 read actions), save_workflow (save/lock/verify_lock)\n    image-management.ts    # get_image (7 read actions), upload_image (5 write actions)\n    model-management.ts    # download_model, list_local_models (the two consolidated model tools)\n    memory-management.ts   # clear_vram\n    registry-search.ts     # search_custom_nodes (search/details)\n    node-management.ts     # install_custom_node (install/update/fix/uninstall/enable/disable/list/…)\n    node-pack.ts           # node_pack (scaffold/verify/publish/read/write/patch/git/…)\n    generation-tracker.ts  # the get_history suggest/stats jobs\n    diagnostics.ts         # get_system_stats (action:\"logs\"), get_history\n    process-control.ts     # restart_comfyui (restart/start/stop)\n    index.ts               # Registers all tool groups\n  utils/\n    errors.ts              # Custom error hierarchy with MCP integration\n    logger.ts              # stderr-only logging (safe for stdio transport)\n    image.ts               # Base64 encoding utilities\nplugin/\n  .claude-plugin/          # Plugin manifest\n  .mcp.json                # MCP server config for plugin\n  commands/                # Slash commands\n    gen.md                 # /comfy:gen — image generation\n    viz.md                 # /comfy:viz — workflow visualization\n    node-skill.md          # /comfy:node-skill — skill generation\n    debug.md               # /comfy:debug — failure diagnosis\n    batch.md               # /comfy:batch — parameter sweeps\n    convert.md             # /comfy:convert — format conversion\n    install.md             # /comfy:install — node pack installation\n    gallery.md             # /comfy:gallery — output browser\n    compare.md             # /comfy:compare — workflow diff\n    recipe.md              # /comfy:recipe — multi-step pipelines\n  skills/                  # Knowledge bases\n    comfyui-core/          # Workflow format, node types, pipeline patterns\n    prompt-engineering/    # CLIP syntax, model-specific prompting\n    troubleshooting/       # Error catalog with patterns and fixes\n    model-compatibility/   # Compatibility matrix per model family\n  agents/                  # Autonomous agents\n    explorer.md            # Research custom node packs, generate skills\n    debugger.md            # Diagnose workflow failures\n    optimizer.md           # Analyze and optimize workflows\n  hooks/                   # Pre/post tool-use hooks\n    hooks.json             # Hook configuration\n    vram-check.mjs         # VRAM watchdog before execution\n    save-warning.mjs       # Save prompt before stop/restart\n    job-complete-notify.mjs # Job completion notification via temp files\n  scripts/                 # Background scripts\n    monitor-progress.mjs   # Real-time WebSocket progress monitor\n    launch-server.mjs      # MCP server launcher — global install if present, else npx with a\n                           #   cold-start handshake rescue so a first run cannot time out (#1447)\n```\n\n---\n\n## Troubleshooting\n\n**\"ComfyUI not detected on ports 8188, 8000\"**\nMake sure ComfyUI is running. The Desktop app uses port 8000 by default; the CLI uses 8188. Set `COMFYUI_PORT` if you're using a custom port.\n\n**\"COMFYUI_PATH is not configured\"**\nThe auto-detection couldn't find your ComfyUI data directory. Set `COMFYUI_PATH` to the directory containing your `models/` folder (e.g., `~/Documents/ComfyUI`).\n\n**\"Multiple ComfyUI installations detected\"**\nThis is informational. The server uses the first one found. Set `COMFYUI_PATH` to pick a specific installation.\n\n**Model downloads fail**\nFor HuggingFace gated models, set `HUGGINGFACE_TOKEN`. For CivitAI, set `CIVITAI_API_TOKEN`.\n\n**Workflow execution errors**\nUse `/comfy:debug` to diagnose failures. Or call `get_history` (`action: \"diagnose\"`) / `get_system_stats (action:\"logs\")` directly to see the full error messages, including Python tracebacks from ComfyUI.\n\n**Out of memory (OOM)**\nUse `clear_vram` to free GPU memory before running large workflows. The VRAM watchdog hook warns you when less than 1GB is free before a workflow runs. See the **troubleshooting** skill for model-specific VRAM estimates.\n\n**Missing custom nodes**\nUse `/comfy:install <pack>` to install missing node packs from the registry. The debug command detects missing packs and suggests them.\n\n---\n\n## Contributing\n\nContributions are welcome. See [CONTRIBUTING.md](./CONTRIBUTING.md) for the dev setup, project\nconventions, how to add an MCP tool, and the release process.\n\nQuick version: fork → branch (`feat/my-feature`) → make changes (make sure `npm run build` and\n`npm test` pass; run `npm run docs:gen` if you touched tools) → open a PR.\n\n---\n\n## Maintainer\n\nBuilt and maintained by [**@artokun**](https://github.com/artokun), a regular contributor across the Comfy-Org ecosystem:\n\n- **[Comfy-Org/ComfyUI_frontend](https://github.com/Comfy-Org/ComfyUI_frontend/pulls?q=is%3Apr+author%3Aartokun).** 10 merged PRs, mostly on the v2 graph renderer: subgraph rendering, promoted-widget plumbing, viewport persistence, with backports across `cloud/1.41`, `cloud/1.42`, `core/1.41`, and `core/1.42`.\n- **[Comfy-Org/ComfyUI](https://github.com/Comfy-Org/ComfyUI/pulls?q=is%3Apr+author%3Aartokun)** (core). Crash fixes in the Python backend's video/audio save path ([#12683](https://github.com/Comfy-Org/ComfyUI/pull/12683), [#12550](https://github.com/Comfy-Org/ComfyUI/pull/12550)).\n\nIf you're at Comfy-Org (or hiring around the ComfyUI ecosystem), I'd love to chat. Email me at **[art.longbottom.jr@gmail.com](mailto:art.longbottom.jr@gmail.com)**.\n\n---\n\n## License\n\nMIT. See [LICENSE](./LICENSE) for details.\n\n---\n\n## Changelog\n\nSee [CHANGELOG.md](./CHANGELOG.md) for the full, structured release history.\n",
  "bytes": 53382,
  "sha": "8e6d404115688793201c73bbd2b8477d09a232d3b70c6c78472cbd1ebbae8d9c",
  "repo_slug": "artokun/comfyui-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_artokun_comfyui_mcp_ee3d8c3e/readme"
}