Skip to main content
Glama
 ██████╗ ██████╗ ███╗   ███╗███████╗██╗   ██╗██████╗ ██╗██╗      ██████╗ ████████╗
██╔════╝██╔═══██╗████╗ ████║██╔════╝╚██╗ ██╔╝██╔══██╗██║██║     ██╔═══██╗╚══██╔══╝
██║     ██║   ██║██╔████╔██║█████╗   ╚████╔╝ ██████╔╝██║██║     ██║   ██║   ██║
██║     ██║   ██║██║╚██╔╝██║██╔══╝    ╚██╔╝  ██╔═══╝ ██║██║     ██║   ██║   ██║
╚██████╗╚██████╔╝██║ ╚═╝ ██║██║        ██║   ██║     ██║███████╗╚██████╔╝   ██║
 ╚═════╝ ╚═════╝ ╚═╝     ╚═╝╚═╝        ╚═╝   ╚═╝     ╚═╝╚══════╝ ╚═════╝    ╚═╝

ComfyPilot v1.9.0

CI Version License: MIT Python MCP tools MCP resources Blueprints Tests MCP spec ComfyUI Families Transports MCPB GitHub release

ComfyPilot is an MCP server for ComfyUI. It gives an AI agent a clean tool surface for workflow building, queueing, progress monitoring, image retrieval, snapshots, and VRAM safety.

Documentation

  • Production manual: docs/MANUAL.md

  • ComfyUI release compatibility audit: docs/COMFYUI_COMPATIBILITY.md

  • Release notes: CHANGELOG.md

Related MCP server: ComfyUI MCP

What This Is

  • A practical bridge between AI agents and ComfyUI.

  • A 96-tool MCP surface for workflow building, modern job inspection/cancellation, model management, image upload/download, history, monitoring, snapshots, technique memory, VRAM safety, output routing, blueprints, Mermaid viz, PNG ingest, n-dim parameter sweeps, partner-API discovery, model-hub search, Desktop-aware instance control, generic artifacts, comfy-env workers, comfy-cli lifecycle, and diagnostics.

  • Live model-folder discovery: diffusion_models/, text_encoders/, clip_vision/, style_models/, gligen/ (and every other folder the connected ComfyUI actually exposes) are searched by default - no more checkpoint-centric blind spots.

  • A workflow-oriented loop built for iteration, not one-shot guessing.

  • A small technique library for saving and replaying working patterns.

Core Thinking Model (How To Think With This MCP)

Use this loop for every non-trivial task:

  1. Check system first - Read GPU state before loading models. Start with comfy_get_system_stats, comfy_check_vram.

  2. Check memory - Before building from scratch, use comfy_search_techniques to check if a similar workflow already exists in the library.

  3. Build in small steps - Use comfy_build_workflow for any intent (txt2img, img2img, upscale, inpaint, controlnet, txt2video, img2video, image2_3d, txt2music, super_resolution, interpolate_frames, segment, train_lora, txt2audio). The family is auto-detected from the installed checkpoint for family-routed intents; family-agnostic intents (super_resolution, interpolate_frames, segment, train_lora, txt2audio) dispatch by intent name regardless of checkpoint. For common recipes, start from comfy_insert_blueprint(name="flux2-txt2img") or any of the 13 bundled blueprints. Validate with comfy_validate_workflow before queueing (6-pass: schema, catalog, graph, anti-cycle, environment, execution-risk).

  4. Monitor and retrieve - Queue with comfy_queue_prompt, watch with comfy_watch_progress, retrieve with comfy_get_output_image (returns image content blocks directly in chat).

  5. Snapshot before changes - Always comfy_snapshot_workflow before modifying a working workflow. Use comfy_diff_snapshots and comfy_restore_snapshot for undo.

  6. Route outputs - Send generated images to disk, TouchDesigner, or Blender with comfy_send_to_disk, comfy_send_to_td, comfy_send_to_blender.

Tool Map (96 Tools)

1) System + GPU

Use for connection health, GPU diagnostics, and VRAM management.

  • comfy_get_system_stats, comfy_get_gpu_info, comfy_get_features

  • comfy_list_extensions, comfy_restart, comfy_free_vram

2) Models

Use for discovering and managing every model file ComfyUI exposes. Folder taxonomy is discovered live from /models so modern families whose weights live under diffusion_models/, text_encoders/, clip_vision/, style_models/, or gligen/ are covered by default.

  • comfy_list_models - Paginated listing inside a single folder (folder, limit, offset).

  • comfy_get_model_info - Normalized node schema for a model-loader node class.

  • comfy_list_model_folders - Live folder list from GET /models, with fallback to a 16-folder static default when the endpoint is unreachable. Reports source: live | fallback.

  • comfy_search_models - Searches every discovered folder by default. Pass folders=["checkpoints", "loras"] to narrow. Empty query returns a full inventory.

  • comfy_refresh_models - Re-fetches the cache across every folder; returns per-folder counts + a total_models number.

3) Workflow Execution

Use for queueing, cancelling, and managing prompt execution.

  • comfy_queue_prompt, comfy_get_queue, comfy_cancel_run

  • comfy_list_jobs, comfy_get_job, comfy_cancel_jobs

  • comfy_interrupt, comfy_clear_queue

  • comfy_validate_workflow, comfy_export_workflow, comfy_import_workflow

4) Nodes + Schema

Use for exploring ComfyUI's node catalog and understanding widget schemas.

  • comfy_list_node_types, comfy_get_node_info, comfy_search_nodes

  • comfy_get_categories, comfy_get_embeddings, comfy_inspect_widget

5) Images + Visual Output

Use for retrieving generated images (returned as image content blocks in chat).

  • comfy_get_output_image, comfy_upload_image, comfy_list_output_images

  • comfy_download_batch, comfy_get_image_url

6) History

Use for inspecting past generations and their outputs.

  • comfy_get_history, comfy_get_run_result, comfy_delete_history

  • comfy_clear_history, comfy_search_history

7) Monitoring + Progress

Use for tracking active jobs and observing workflow dynamics.

  • comfy_watch_progress, comfy_subscribe, comfy_unsubscribe

  • comfy_get_events, comfy_describe_dynamics, comfy_get_status

8) Workflow Snapshots

Use for undo/restore and workflow version tracking.

  • comfy_snapshot_workflow, comfy_list_snapshots, comfy_diff_snapshots

  • comfy_restore_snapshot, comfy_delete_snapshot, comfy_auto_snapshot

9) Technique Memory

Use for learning, saving, and replaying reusable workflow patterns.

  • comfy_save_technique - Save a workflow as a reusable technique with tags and metadata.

  • comfy_search_techniques - Search the library by text query and/or tags.

  • comfy_list_techniques - List all saved techniques with metadata.

  • comfy_replay_technique - Load a saved technique's workflow for immediate use.

  • comfy_favorite_technique - Mark techniques as favorites and rate them (0-5).

Technique storage lives at ~/.comfypilot/techniques/ as individual JSON files.

10) Safety + VRAM Guard

Use for guardrails, pre-flight checks, and emergency control.

  • comfy_check_vram - Check GPU VRAM usage with status levels (ok/warn/critical).

  • comfy_set_limits - Configure safety thresholds (warn %, block %, max queue size).

  • comfy_detect_instability - Check for near-OOM conditions and stuck jobs.

  • comfy_validate_before_queue - Pre-flight check: VRAM headroom + queue capacity.

  • comfy_emergency_stop - Interrupt current job, clear queue, free all VRAM.

11) Workflow Builder

Use for family-aware template construction and node editing.

  • comfy_build_workflow - Family-aware: detects the checkpoint family (SD 1.5, SDXL, SD 3.5, Flux 2, Qwen-Image, Wan 2.2, LTX-2, HunyuanVideo, Hunyuan3D, ACE-Step) and dispatches to the right graph topology. Intents: txt2img, img2img, upscale, inpaint, controlnet, txt2video, img2video, image2_3d, txt2music.

  • comfy_add_node - Add a node to a workflow-in-progress.

  • comfy_connect_nodes - Wire node outputs to inputs.

  • comfy_set_widget_value - Set widget values on nodes.

  • comfy_apply_template - Alias for comfy_build_workflow.

12) Output Routing

Use for agent-orchestrated cross-app delivery of generated images.

  • comfy_send_to_disk - Save output image to local filesystem.

  • comfy_send_to_td - Route output to TouchDesigner project directory.

  • comfy_send_to_blender - Route output to Blender project directory.

  • comfy_list_destinations - List configured output destinations.

13) Subgraph Blueprints

Use for assembling workflows from named reusable macros.

  • comfy_list_blueprints - List all available blueprints (user + bundled).

  • comfy_insert_blueprint - Materialize a blueprint into a workflow dict with optional per-node input overrides.

  • comfy_publish_subgraph - Save a set of nodes as a reusable named blueprint.

Blueprint storage: user-published at ~/.comfypilot/blueprints/ (override via COMFY_BLUEPRINT_DIR); bundled examples ship in blueprints/ inside the repo.

14) Visualization + Ingest + Sweep

Use for rendering workflows, re-importing PNG outputs, and parameter sweeps.

  • comfy_visualize_workflow - Render an API-format workflow as a Mermaid flowchart TD source.

  • comfy_import_workflow_from_png - Extract the embedded workflow JSON from a ComfyUI-saved PNG (prefers 'prompt' API-format chunk, falls back to 'workflow' UI chunk).

  • comfy_sweep - Enqueue N copies of a workflow with a single parameter varying across values; returns prompt_ids + grid layout hint.

  • comfy_sweep_grid - N-dimensional Cartesian-product sweep over multiple node_id.param axes. Capped at 64 combinations by default (override with max_combinations).

Use for discovering models to download from public hubs.

  • comfy_search_hub - Search HuggingFace or CivitAI for models matching a query. Returns normalized hits (id, name, url, downloads, tags). Use source="huggingface" or source="civitai".

16) Partner APIs

Use for surfacing which vendor-hosted partner / API custom nodes are installed.

  • comfy_list_partner_apis - Intersects ComfyUI's installed-extensions list with a curated catalog (Veo, Kling, ByteDance Seedance/Seedream, GPT-Image, Topaz, Tripo3D, Rodin, Recraft, Ideogram, NanoBanana, Sonilo, ElevenLabs, etc.) and reports which are live on this server with vendor / category / homepage metadata.

17) Lifecycle (v1.8.0)

Use for full setup-to-server flow when ComfyUI isn't running yet. All five tools shell out to the official comfy-cli — install it via pipx install comfy-cli or uvx --from comfy-cli comfy ....

  • comfy_launch_server - Start ComfyUI (comfy launch --background --port N --listen H).

  • comfy_stop_server - Stop the running server (comfy stop).

  • comfy_install_node - Install a custom-node package by slug via Comfy Manager.

  • comfy_list_installed_nodes - List currently-installed custom nodes.

  • comfy_download_model - Download a model by URL into a chosen models/<folder> (supports CivitAI token).

18) Diagnostics (v1.8.0)

Use for workflow introspection, hardware verdicts, traceback extraction, and trust checks.

  • comfy_extract_schema - Workflow-level controllable param + dependency summary (parameter list, model deps, embedding refs, output nodes, with summary_only mode).

  • comfy_fetch_logs - Extract just the error traceback + completed-nodes list from /history/{prompt_id} — handles both status.exec_info.errors and status.messages shapes.

  • comfy_inspect_workflow - Trust check: classify every class_type as stock / custom and surface warnings before queueing untrusted workflows.

  • comfy_recommend_runtime - Hardware verdict (ok / marginal / cloud) + the right comfy-cli install flag for this hardware.

  • comfy_suggest_timeout - Per-workflow HTTP timeout suggestion based on long-running output classes (default 300s, up to 3600s for training).

19) Convenience (v1.8.0)

Use to compress multi-step flows that an agent would otherwise script manually.

  • comfy_install_workflow_deps - Auto-install every missing custom-node package the workflow references (wraps comfy node install-deps --workflow).

  • comfy_run_with_inputs - Upload local images + inject as workflow inputs + queue — collapses the three-step img2img / inpaint flow into one call.

  • comfy_randomize_seeds - Replace seed=-1 sentinels with cryptographic-grade random uint32 values; force=True randomises every seed widget.

20) Desktop Instance + Artifacts + Workers

Use for controlling the exact connected Desktop installation rather than guessing a workspace or port.

  • comfy_instance_doctor - Resolve the connected PID, owner/supervisor, port, code/data/user/input/output/model roots, Desktop installation, versions, and security warnings.

  • comfy_list_artifacts - Inventory image, video, audio, mesh, and other outputs, with a local output-directory fallback after history resets.

  • comfy_get_artifact - Resolve safe metadata for one output artifact without allowing path traversal.

  • comfy_get_environment_status - Inspect configured/cached comfy-env environments and runtime health.

  • comfy_list_workers - List active isolated workers, PIDs, environments, and health.

MCP Resources

Six fixed resources:

  • comfy://system/info - System stats, GPU info, ComfyUI version

  • comfy://server/capabilities - Detected server profile, version, frontend version, auth method, WebSocket availability, OpenAPI version, cache provider

  • comfy://nodes/catalog - Node catalog preview (first 100 names)

  • comfy://models/{folder} - Model listing by folder (checkpoints, loras, vae, diffusion_models, text_encoders, etc.)

  • comfy://embeddings - Available embeddings

  • comfy://api/openapi - Optional OpenAPI 3.1 ingestion when the connected deployment exposes /openapi.json; returns {"error": ...} otherwise.

Plus four resource templates (parameterized URIs):

  • comfy://nodes/catalog/{page} - Paginated node catalog, 100 nodes per page ({page} = 0, 1, 2, ...)

  • comfy://nodes/by-category/{category} - Node class_types whose category starts with the given prefix (e.g. sampling, loaders/video)

  • comfy://templates/catalog - Workflow templates advertised by ComfyUI core + custom nodes (via /workflow_templates)

  • comfy://docs/{node_class} - Localized embedded Markdown from /docs/<class>/en.md, with structured-fork and object-info fallbacks.

How To Use It (Practical Workflow)

  1. Connect MCP client to ComfyPilot.

  2. Check system state and VRAM headroom.

  3. Build a workflow (template or custom API JSON).

  4. Validate, then queue the prompt.

  5. Watch progress until complete.

  6. Retrieve the output image (displayed inline in chat).

  7. Route to disk/TD/Blender if needed. Snapshot at stable milestones.

What It Is Good At

  • Building and iterating on ComfyUI workflows through conversation.

  • Family-aware generation across 11 model families (SD 1.5, SDXL, SD 3.5, Flux 2, Qwen-Image, Wan 2.2, LTX-2, HunyuanVideo, Hunyuan3D, ACE-Step, Ernie Image) covering images, video, 3D meshes, and music. Plus 5 family-agnostic intents (super-resolution via SUPIR, frame interpolation via RIFE/FILM, segmentation via SAM 3.1, native LoRA training, text-to-audio via Stable Audio).

  • Starting from bundled blueprints for every family (13 ship in-repo) and customizing from there.

  • 6-pass workflow validation (schema + catalog + graph + anti-cycle + environment + execution-risk) catching broken links, cycles, missing models, deprecated models, oversized latents before you hit ComfyUI.

  • Monitoring GPU resources and preventing OOM situations via VRAMGuard.

  • Returning generated images directly in the chat (image content blocks).

  • Cross-app output routing to TouchDesigner and Blender with atomic writes + sidecar manifests (prompt_id, seeds, model refs, dimensions).

  • Snapshot/restore for non-destructive workflow experimentation, now optionally persistent across restarts.

  • Learning and replaying reusable workflow patterns via the technique library.

  • Parameter sweeps (queue N variations of a single widget value).

  • Importing a workflow back from a saved PNG's embedded metadata.

  • Rendering any workflow as Mermaid for quick visual inspection.

  • Searching HuggingFace and CivitAI directly for models.

What It Is Not Good At

  • Replacing artistic direction by itself.

  • Streaming real-time video output (snapshots and polls, not live frames).

  • "One shot perfect generation" without iterative refinement.

  • Running without a working ComfyUI instance somewhere (cloud or local). The lifecycle tools (comfy_launch_server, comfy_install_node, comfy_install_workflow_deps, comfy_download_model) can bring a local install from zero to ready, but they need comfy-cli on PATH — install via pipx install comfy-cli or uvx --from comfy-cli comfy ... first.

Model Families

11 first-class model families plus 5 family-agnostic intent-overrides. Each family has a builder template (or several) that emits a workflow matched to the right graph topology. The family is detected from the checkpoint filename; you can override by passing checkpoint= in params. Intent-overrides skip family detection entirely and dispatch by intent name.

Family

Intents

Distinctive nodes

SD 1.5

txt2img, img2img, upscale, inpaint, controlnet

CheckpointLoaderSimple, KSampler, EmptyLatentImage

SDXL

txt2img

CheckpointLoaderSimple, 1024x1024 defaults, karras scheduler

SD 3.5

txt2img

ModelSamplingSD3, EmptySD3LatentImage, dpmpp_2m / sgm_uniform

Flux 2 / Klein

txt2img

UNETLoader, DualCLIPLoader (flux), FluxGuidance, SamplerCustomAdvanced

Qwen-Image

txt2img

UNETLoader, CLIPLoader(type=qwen_image), EmptySD3LatentImage

Wan 2.2

txt2video, img2video

UNETLoader, CLIPLoader(type=wan), EmptyHunyuanLatentVideo, WanImageToVideo

LTX-2

txt2video

LTXVConditioning, LTXVScheduler, EmptyLTXVLatentVideo

HunyuanVideo 1.5

txt2video, img2video

DualCLIPLoader(type=hunyuan_video), EmptyHunyuanLatentVideo, HunyuanImageToVideo

Hunyuan3D 2.1

image2_3d

EmptyLatentHunyuan3Dv2, VAEDecodeHunyuan3D, SaveGLB

ACE-Step 1.5 XL

txt2music

EmptyAceStepLatentAudio, TextEncodeAceStepAudio, SaveAudio

Ernie Image

txt2img

UNETLoader, CLIPLoader(type=ernie_image), EmptySD3LatentImage

Intent-overrides (family-agnostic; dispatched by intent name regardless of detected checkpoint family):

Intent

Purpose

Distinctive nodes

Origin

super_resolution

Image super-resolution / restoration (SUPIR)

SUPIRLoader, SUPIREncode, SUPIRSample, SUPIRDecode

ComfyUI v0.20.0+

interpolate_frames

Frame interpolation (`method="rife"

"film"`)

RIFE_VFI / FILM_VFI, LoadVideo, SaveAnimatedWEBP

segment

SAM 3.1 prompt-based segmentation

SAM3Loader, SAM3Segment, MaskToImage

ComfyUI v0.20.0+

train_lora

Native LoRA training

TrainLoraDataLoader, TrainLora, SaveLora

ComfyUI v0.3.41+

txt2audio

Text-to-audio (Stable Audio 2.5)

ConditioningStableAudio, EmptyLatentAudio, VAEDecodeAudio, SaveAudio

ComfyUI v0.3.58+

Transports

  • stdio (default) - Best for local clients like Claude Code, Claude Desktop, Cursor.

  • streamable-http - Best for hosted / remote deployments. Enable with:

uv run comfypilot --transport streamable-http --host 0.0.0.0 --port 8765

Support Matrix

Feature

Status

Notes

Local ComfyUI (self-hosted)

Supported

Primary target

Comfy Cloud API

Partial

Auth and route probing supported; progress depends on remote WS support

stdio transport

Supported

Default

Streamable HTTP transport

Supported

comfypilot --transport streamable-http --host 0.0.0.0 --port 8765

Elicitation on destructive tools

Supported

clear_queue, clear_history, delete_history, delete_snapshot, emergency_stop gate on ctx.elicit when confirm=False

Structured output

Supported

Top 10 tools return typed Pydantic models (SystemStats, ValidationReport, QueueAck, RunResult, ModelList, TechniqueList, SnapshotList, VRAMStatus, DynamicsReport, WatchProgressFrame)

Paginated node catalog

Supported

comfy://nodes/catalog/{page} (100 per page) + comfy://nodes/by-category/{category}

MCP Registry publishing

Manifest ready

server.json declares io.github.dreamrec/comfypilot

Workflow JSON (v0.20+ spec)

Supported

6-pass validation: schema + catalog + graph + anti-cycle + environment + execution-risk

ComfyUI compatibility

Tested

v0.20.0 through v0.31.1; newer versions are reported as newer_than_tested in capabilities

Modern jobs API

Supported

list/get since v0.20; state-aware single/batch cancellation since v0.26; legacy queue fallback retained

OpenAPI 3.1 spec

Optional

comfy://api/openapi and capabilities.openapi_version when a deployment exposes /openapi.json

Deprecated-model lint

Supported

Validator warns on retired partner models (seedream-3-0, seedance-1-0-lite, seededit, etc.)

Native subgraph awareness

Supported

comfy_list_blueprints(source="native") reads canonical /global_subgraphs ID maps plus older fork routes

V3 custom nodes

Supported

Normalizes V3-derived COMBO/COLOR/BOUNDING_BOX/CURVE/RANGE/dynamic widgets, socket flags, output metadata, and node lifecycle metadata

Subgraph Blueprints

Supported

User + bundled store, list/insert/publish tools

Model families (builder)

Supported

SD 1.5, SDXL, SD 3.5, Flux 2, Qwen-Image, Wan 2.2 (t2v/i2v), LTX-2, HunyuanVideo (t2v/i2v), Hunyuan3D, ACE-Step

WebSocket progress events

Supported where /ws is available

Binary preview frames are ignored safely

Image content blocks

Supported

Inline image display in chat

Cross-app routing

Filesystem only

Saves to disk with suggested commands

/workflow_templates resource

Supported

Exposed as comfy://templates/catalog

comfy-cli lifecycle

Optional

5 tools wrap comfy launch/stop/node install/model download — degrades gracefully when comfy-cli is missing

Workflow diagnostics

Supported

comfy_extract_schema, comfy_fetch_logs, comfy_inspect_workflow, comfy_recommend_runtime, comfy_suggest_timeout

Cloud tier detection

Supported

capabilities.tier = free / standard / creator / pro / paid / null

Quick Setup

Option 1: MCPB (one-click, Claude Desktop)

Easiest for Claude Desktop users:

  1. Download comfypilot-v1.9.0.mcpb from the latest release.

  2. Double-click the file (or drag it into Claude Desktop's Settings > Extensions panel).

  3. Claude Desktop renders a form for COMFY_URL, COMFY_API_KEY, and the other config fields — fill in what you need.

  4. Click Install. Restart is handled automatically.

MCPB uses the type: "uv" server mode, so Python dependencies (mcp, httpx, pydantic, websockets) are resolved by uv at first run. You need uv installed on the host — install uv.

The bundle ships manifest.json + pyproject.toml + the full src/comfy_mcp/ package + the 13 bundled blueprints. Manifest: manifest.json.

Option 2: Local development runtime

git clone https://github.com/dreamrec/ComfyPilot.git
cd ComfyPilot
uv sync
uv run comfypilot

Option 3: Claude Code plugin

claude plugin add /path/to/ComfyPilot

Option 4: Codex

Install the checkout and register its stdio server:

uv sync
codex mcp add comfypilot --env COMFY_URL=http://127.0.0.1:8188 -- uv run --directory /path/to/ComfyPilot comfypilot

Codex stores MCP configuration in ~/.codex/config.toml; the CLI, IDE extension, and desktop app share that configuration. Restart Codex after changing MCP servers.

Local override

If your ComfyUI instance lives somewhere other than 127.0.0.1:8188 (Tailscale, remote LAN, custom port), copy .mcp.local.json.example to .mcp.local.json and edit it. The .mcp.local.json file is gitignored so per-machine URLs and secrets never get committed.

MCP Bundle (Standardized)

ComfyPilot ships a standard MCP bundle in-repo:

  • mcp/manifest.json

  • mcp/profiles/claude-desktop.json, cursor.json, generic.json

The bundled profile JSON files pin uv run with --directory; replace /path/to/ComfyPilot with your checkout path when copying them into a client config. If you're launching from inside this repo, .mcp.json already uses ${CLAUDE_PLUGIN_ROOT}.

Manual client configuration example (Claude Desktop):

{
  "mcpServers": {
    "comfypilot": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/ComfyPilot", "comfypilot"],
      "env": {
        "COMFY_URL": "http://127.0.0.1:8188",
        "COMFY_API_KEY": ""
      }
    }
  }
}

Environment Variables

Variable

Default

Description

COMFY_URL

http://127.0.0.1:8188

ComfyUI server URL

COMFY_API_KEY

(empty)

Optional API key (Bearer for local, X-API-Key for Comfy Cloud)

COMFY_AUTH_METHOD

auto

Auth header style: auto, bearer, or x-api-key

COMFY_TIMEOUT

300

HTTP request timeout in seconds

COMFY_SNAPSHOT_LIMIT

50

Maximum workflow snapshots retained

COMFY_SNAPSHOT_DIR

(empty)

If set, persists snapshots to this directory. If empty, snapshots are in-memory only (pre-1.3 behavior).

COMFY_BLUEPRINT_DIR

~/.comfypilot/blueprints

User-published subgraph blueprints (bundled examples fall back automatically).

COMFY_STRICT_CONFIRM

1

Destructive tools fail closed when elicitation is unavailable or errors. Set to 0 only for a trusted legacy host; callers can instead pass confirm=True after verifying intent.

COMFY_OUTPUT_DIR

~/comfypilot_output

Image output directory for disk routing

COMFY_TD_OUTPUT_DIR

~/comfypilot_output/touchdesigner

TouchDesigner output path

COMFY_BLENDER_OUTPUT_DIR

~/comfypilot_output/blender

Blender output path

Test Suite

Run the test suite:

uv run pytest -v

Run a specific category:

uv run pytest tests/test_builder.py -v

For a quick smoke run:

uv run pytest -q

Reliability Habit

Treat this as mandatory for every meaningful task: before generations check VRAM, before workflow changes snapshot, after builds validate, after errors check comfy_detect_instability.

License

MIT

dreamrec // ComfyPilot // live laugh diffuse

Available Tools

96 tools
comfy_add_nodeB
Read-onlyIdempotent

Add a node to a workflow.

Args: workflow: The workflow dictionary to modify node_id: ID for the new node (string, e.g. "8") class_type: ComfyUI node class type inputs: Optional input values for the node

Inputs: node_id (required), workflow (required), class_type (required), inputs. Returns: result

comfy_apply_templateA
Read-onlyIdempotent

Apply a workflow template and return the resulting workflow.

Convenience alias for comfy_build_workflow.

Args: template: Template name (txt2img, img2img, upscale, inpaint, controlnet) params: Optional parameters to override template defaults

Inputs: template (required), params. Returns: result

comfy_auto_snapshotB

Toggle automatic snapshot creation on workflow execution.

Args: enabled: Whether to enable auto-snapshots

Returns: JSON confirming the new auto_snapshot flag state

Inputs: enabled (required). Returns: result

comfy_build_workflowA
Read-onlyIdempotent

Build a ComfyUI workflow for an intent, routed to the detected model family.

The checkpoint family is detected from params['checkpoint'] (or auto-detected from the first installed checkpoint if ctx is provided) and dispatched to a family-specific builder. SD 1.5 is the fallback when the family can't be determined.

Intents by family: SD 1.5: txt2img, img2img, upscale, inpaint, controlnet SDXL / SD 3.5: txt2img Flux 2 / Qwen: txt2img Wan 2.2: txt2video, img2video LTX-2: txt2video HunyuanVideo: txt2video, img2video Hunyuan3D: image2_3d ACE-Step: txt2music

Args: template: Intent name (e.g. 'txt2img', 'txt2video', 'image2_3d', 'txt2music'). params: Optional param overrides. If 'checkpoint' is set, family routing uses it; otherwise the first installed checkpoint is auto-detected.

Inputs: template (required), family, params. Returns: result

comfy_cancel_jobsA
DestructiveIdempotent

Cancel multiple running or queued jobs (v0.26+, with legacy fallback).

Inputs: job_ids (required). Returns: result

comfy_cancel_runA
Destructive

Cancel a running or queued prompt by ID.

Args: prompt_id: The prompt ID to cancel

Inputs: prompt_id (required). Returns: result

comfy_check_vramA
Read-onlyIdempotent

Check current GPU VRAM usage. Returns structured VRAMStatus with per-device detail.

Inputs: no named parameters. Returns: status, devices, message, gpu_processes, +2 more

comfy_clear_historyA
DestructiveIdempotent

Clear ALL execution history. Destructive and cannot be undone.

Args: confirm: If False, the tool asks for explicit confirmation via elicitation before proceeding. Pass True to skip the prompt.

Inputs: confirm. Returns: result

comfy_clear_queueA
Destructive

Clear all pending prompts from the queue. Destructive.

Args: confirm: If False, the tool asks for explicit confirmation via elicitation before proceeding. Pass True to skip the prompt.

Inputs: confirm. Returns: result

comfy_connect_nodesA
Read-onlyIdempotent

Connect two nodes in a workflow.

Args: workflow: The workflow dictionary source_node: ID of the source node source_output: Output index on the source node target_node: ID of the target node target_input: Input name on the target node

Inputs: workflow (required), source_node (required), target_node (required), target_input (required), +1 more. Returns: result

comfy_delete_historyA
DestructiveIdempotent

Delete a specific history entry. Destructive.

Args: prompt_id: The ID of the prompt execution to delete confirm: If False, the tool asks for explicit confirmation via elicitation before proceeding. Pass True to skip the prompt.

Inputs: prompt_id (required), confirm. Returns: result

comfy_delete_snapshotB
DestructiveIdempotent

Delete a snapshot. Destructive.

Args: snapshot_id: The snapshot ID to delete confirm: If False, the tool asks for explicit confirmation via elicitation before proceeding. Pass True to skip the prompt.

Inputs: snapshot_id (required), confirm. Returns: result

comfy_describe_dynamicsA
Read-onlyIdempotent

One-shot snapshot of system dynamics (queue + recent events + active jobs).

Returns structured DynamicsReport with queue counts, recent event types, and active job summary.

Inputs: no named parameters. Returns: active_jobs, queue_pending, queue_running, active_job_count, +2 more

comfy_detect_instabilityB
Read-onlyIdempotent

Check for stuck jobs, OOM patterns, and other instability signals.

Returns: JSON with stable flag, issues list, and queue counts

Inputs: no named parameters. Returns: result

comfy_diff_snapshotsA
Read-onlyIdempotent

Diff two snapshots or a snapshot vs current workflow.

Args: id_a: First snapshot ID id_b: Optional second snapshot ID current_workflow: Optional current workflow to diff against

Returns: JSON with added_nodes, removed_nodes, modified_nodes, total_changes

Inputs: id_a (required), id_b, current_workflow. Returns: result

comfy_download_batchA
Read-onlyIdempotent

Get lightweight metadata for multiple output images.

By default this is a pure metadata lookup - no image bytes cross the wire. Each entry contains {filename, subfolder, type, url}. Pass include_size=True to also populate size_bytes, which requires downloading each image. That path should only be used for short lists.

Args: filenames: List of image filenames to query. subfolder: Optional subfolder within the output directory. include_size: If True, fetch each image to populate size_bytes. Default False - the tool advertised itself as "metadata only" but the pre-1.5.3 implementation downloaded every full body.

Inputs: filenames (required), subfolder, include_size. Returns: result

comfy_download_modelA
Idempotent

Download a model via comfy model download --url ... --relative-path models/<folder>.

Args: url: Direct download URL (HuggingFace, CivitAI, etc.). For CivitAI links, also pass civitai_api_token. folder: Subfolder under models/. Common values: checkpoints, loras, vae, diffusion_models, text_encoders, controlnet, upscale_models. civitai_api_token: Optional CivitAI API token for gated downloads. workspace: Optional --workspace path. confirm: Explicitly confirm the network download and filesystem write.

Inputs: url (required), folder, confirm, workspace, +1 more. Returns: result

comfy_emergency_stopA
Destructive

Emergency stop: interrupt current job, clear queue, and free VRAM. Destructive.

WARNING: This is destructive - it will cancel all running and pending jobs.

Args: confirm: If False, the tool asks for explicit confirmation via elicitation before proceeding. Pass True to skip the prompt (useful when firing from automated safety checks).

Inputs: confirm. Returns: result

comfy_export_workflowA
Read-onlyIdempotent

Export/serialize a workflow to JSON string.

Simply returns the workflow formatted nicely as JSON string.

Inputs: workflow (required). Returns: result

comfy_extract_schemaA
Read-onlyIdempotent

Extract the controllability / dependency surface of a workflow.

Returns a structured summary of every controllable widget input across all nodes, every model the workflow depends on (loader nodes), every embedding reference embedded in text inputs, and every output node. Lets an agent decide what to parameterise without walking the graph node-by-node.

Args: workflow: API-format workflow dict. summary_only: If True, return just the high-level counts/flags (parameter_count, has_negative_prompt, has_seed, model_count, node_count) without the per-parameter list.

Inputs: workflow (required), summary_only. Returns: result

comfy_favorite_techniqueA

Set favorite status and/or rating for a technique.

Args: technique_id: The technique ID to update favorite: Whether to mark as favorite (default True) rating: Rating from 0-5, or -1 to leave unchanged (default -1)

Inputs: technique_id (required), rating, favorite. Returns: result

comfy_fetch_logsA
Read-onlyIdempotent

Retrieve execution logs / error traceback for a specific prompt.

ComfyUI's /history/{prompt_id} response carries a status.messages array with per-step execution events and status.exec_info.errors with traceback strings on failure. This tool extracts just the log-relevant fields (status, errors, per-node traceback, completed nodes) so the caller doesn't have to walk the full response.

Args: prompt_id: Prompt ID returned by comfy_queue_prompt.

Inputs: prompt_id (required). Returns: result

comfy_free_vramA
Idempotent

Unload models and/or free VRAM memory.

Args: unload_models: Unload all loaded models from VRAM free_memory: Free cached memory allocations

Inputs: free_memory, unload_models. Returns: result

comfy_get_artifactA
Read-onlyIdempotent

Get safe metadata (and optionally base64 bytes) for one output file.

relative_path is always resolved beneath the connected local instance's argv-derived output directory. Absolute paths, .. and symlink escapes are rejected. Inline bytes are opt-in and capped at 25 MiB.

Inputs: relative_path (required), include_data, include_sha256, max_inline_bytes. Returns: result

comfy_get_categoriesA
Read-onlyIdempotent

Get all node categories.

Returns: JSON with sorted list of categories and their node counts

Inputs: no named parameters. Returns: result

comfy_get_embeddingsA
Read-onlyIdempotent

List available embeddings.

Returns: JSON with embeddings list and count

Inputs: no named parameters. Returns: result

comfy_get_environment_statusB
Read-onlyIdempotent

Inspect Env Manager runtime, node environments, and workers.

Each endpoint is independent: a broken /env-manager/runtime response is reported without hiding working environment/worker data. By default the often very large environment list is reduced to configured or materialized entries.

Inputs: limit, configured_only. Returns: result

comfy_get_eventsA

Drain buffered events from EventManager.

Args: event_type: Optional filter by event type limit: Maximum number of events to return (default 100)

Returns: JSON with events list and count

Inputs: limit, event_type. Returns: result

comfy_get_featuresA
Read-onlyIdempotent

List enabled ComfyUI features (v0.17+).

Inputs: no named parameters. Returns: result

comfy_get_gpu_infoA
Read-onlyIdempotent

Get detailed GPU info: VRAM total/free/used, torch version, device names.

Inputs: no named parameters. Returns: result

comfy_get_historyA
Read-onlyIdempotent

Get execution history with pagination.

Args: limit: Maximum number of entries to return (default 20)

Returns: JSON with entries list and total count

Inputs: limit. Returns: result

comfy_get_image_urlB
Read-onlyIdempotent

Get the URL to view an image on the ComfyUI server.

Args: filename: Image filename subfolder: Optional subfolder image_type: Image type (output, input, temp)

Inputs: filename (required), subfolder, image_type. Returns: result

comfy_get_jobB
Read-onlyIdempotent

Get a full modern job record, with a legacy history fallback.

Inputs: job_id (required). Returns: result

comfy_get_model_infoA
Read-onlyIdempotent

Get node schema for a model-related node type.

Returns the node's input/output definition from ComfyUI's object_info, not model file metadata.

Args: node_type: The node class type to inspect (e.g., "CheckpointLoaderSimple")

Inputs: node_type (required). Returns: result

comfy_get_node_infoA
Read-onlyIdempotent

Get detailed normalized info about a specific node type.

Returns a NodeSchema-shaped payload: class_type, category, description, inputs (with name/type/required/constraints/is_link_target per input), outputs, is_output_node, schema_version ('v1' or 'v3').

Args: node_type: The node type name to get info for

Inputs: node_type (required). Returns: result

comfy_get_output_imageA
Read-onlyIdempotent

Download an output image from ComfyUI and return it as an image content block.

Args: filename: Image filename (e.g. "ComfyUI_00001_.png") subfolder: Optional subfolder within the output directory

Inputs: filename (required), subfolder.

comfy_get_queueA
Read-onlyIdempotent

Get current queue state including running and pending prompts.

Inputs: no named parameters. Returns: result

comfy_get_run_resultA
Read-onlyIdempotent

Get result of a specific prompt execution. Returns structured RunResult.

Args: prompt_id: The ID of the prompt execution to retrieve

Inputs: prompt_id (required). Returns: Result of a completed prompt as returned by ComfyUI's /history/{id} endpoint.

comfy_get_statusA
Read-onlyIdempotent

One-shot status overview (queue + GPU + execution state + events).

Returns: Combined status JSON with queue info, system stats, and event health

Inputs: no named parameters. Returns: result

comfy_get_system_statsA
Read-onlyIdempotent

Get ComfyUI system stats: OS, GPU, VRAM, version info. Returns structured SystemStats.

Inputs: no named parameters. Returns: system, devices

comfy_import_workflowB
Read-onlyIdempotent

Parse a JSON string into a workflow dict.

Parses the JSON string and validates basic structure. Returns the parsed workflow dict as JSON.

Inputs: workflow_json (required). Returns: result

comfy_import_workflow_from_pngA
Read-onlyIdempotent

Extract a workflow from a ComfyUI-saved PNG's tEXt metadata.

ComfyUI embeds the workflow JSON in the PNG on save:

  • 'prompt' chunk: API format (directly queueable)

  • 'workflow' chunk: UI format (with positions, widgets)

This tool prefers 'prompt' and falls back to 'workflow'. Returns {format: 'api' | 'ui' | 'none', workflow: dict, path: str}.

Args: png_path: Absolute path to the PNG file.

Inputs: png_path (required). Returns: result

comfy_insert_blueprintA
Read-onlyIdempotent

Materialize a blueprint into a workflow dict.

Args: name: Blueprint name (from comfy_list_blueprints). inputs: Optional {node_id: {input_name: value}} overrides applied to the blueprint's nodes when inserted.

Inputs: name (required), inputs. Returns: result

comfy_inspect_widgetA
Read-onlyIdempotent

Get widget/input details for a node type (normalized, V1/V3 transparent).

Returns: node_type: class name inputs: list of {name, type_name, required, constraints, is_link_target} widget_inputs: subset of inputs that are widgets (is_link_target=False) link_inputs: subset of inputs that expect links from other nodes

Args: node_type: The node type name to inspect

Inputs: node_type (required). Returns: result

comfy_inspect_workflowA
Read-onlyIdempotent

Enumerate custom (non-stock) node class types in a workflow.

Workflow JSON is arbitrary code - custom nodes run Python on the ComfyUI server. This tool surfaces which class_types are NOT in the set of ComfyUI core / first-party node patterns, so an agent can warn the user (or refuse to auto-queue) before submitting a workflow from an untrusted source.

Returns a JSON report with trust_level (stock | mixed | fully_custom), the stock + custom class lists, and per-warning strings.

Inputs: workflow (required). Returns: result

comfy_install_nodeA
Idempotent

Install a custom node via comfy node install <name>.

Uses Comfy Manager under the hood. Name format is typically the GitHub repo's slug (e.g. 'comfyui-impact-pack', 'comfyui-controlnet-aux', 'comfyui-animatediff-evolved').

Args: name: Custom-node package name. workspace: Explicit comfy-cli workspace path. confirm: Explicitly confirm package installation.

Inputs: name (required), confirm, workspace. Returns: result

comfy_install_workflow_depsA
Idempotent

Auto-install every custom-node package the workflow references.

Wraps comfy node install-deps --workflow=<file>. The workflow is serialised to a temp file (in API format), passed to comfy-cli, and the temp file is removed after. Long-running call (each missing package downloads + installs): default timeout 600 s.

Args: workflow: API-format workflow dict. workspace: Optional --workspace path passed to comfy-cli.

Inputs: workflow (required), workspace. Returns: result

comfy_instance_doctorA
Read-onlyIdempotent

Discover the connected instance, supervisor, paths, ports, and versions.

For a local Comfy Desktop endpoint, this correlates API argv, the listening PID/process tree, and Desktop's installation registry. It never starts, stops, or changes the instance.

Inputs: no named parameters. Returns: result

comfy_interruptA
Destructive

Interrupt the currently executing prompt.

Inputs: no named parameters. Returns: result

comfy_launch_serverA
Idempotent

Start an explicitly selected ComfyUI workspace via comfy-cli.

This tool has no implicit 8188 fallback. workspace and port must be explicit, and a healthy connected endpoint blocks launch unless the caller deliberately sets allow_parallel=True. This prevents a Desktop install on port 8000 from accidentally gaining a competing CLI process.

Args: background: Run as a detached daemon (default True). False blocks until the server exits. port: Explicit port for ComfyUI's HTTP server. host: Host to bind on. Default 127.0.0.1; use 0.0.0.0 for LAN access. workspace: Optional --workspace path passed to comfy-cli (selects which ComfyUI install to launch when multiple are present). extra_args: Additional argv to forward verbatim after -- (e.g. ['--listen', '0.0.0.0', '--cpu']). allow_parallel: Permit launch while the currently selected endpoint is already healthy. Default False. confirm: Explicitly confirm this process-start mutation.

Inputs: host, port, confirm, workspace, +3 more. Returns: result

comfy_list_artifactsA
Read-onlyIdempotent

List image, video, audio, mesh, or other output artifacts.

History is merged with the local output filesystem for loopback instances, so outputs remain discoverable after ComfyUI history is reset. Paths are constrained to the output root and filesystem symlinks cannot escape it.

Inputs: kind, limit, query, offset, +2 more. Returns: result

comfy_list_blueprintsA
Read-onlyIdempotent

List subgraph blueprints from the configured sources.

Sources:

  • "all" (default): user + bundled + native (everything available).

  • "user": only the user-published store (COMFY_BLUEPRINT_DIR).

  • "bundled": only the bundled examples shipping with ComfyPilot.

  • "native": only the global subgraphs ComfyUI itself publishes.

User blueprints shadow bundled ones when names collide. Native entries are tagged with source: "native" so the caller can distinguish them from ComfyPilot-managed blueprints.

Inputs: source. Returns: result

comfy_list_destinationsA
Read-onlyIdempotent

List configured output destinations and their paths.

Inputs: no named parameters. Returns: result

comfy_list_extensionsA
Read-onlyIdempotent

List all installed ComfyUI custom nodes and extensions.

Inputs: no named parameters. Returns: result

comfy_list_installed_nodesA
Read-onlyIdempotent

List custom-node packages, preferring the live Manager V2 API.

Manager V2 is dramatically faster and, unlike comfy-cli, is guaranteed to describe the connected running installation. comfy-cli remains a compatibility fallback when no Context/API is available.

Args: workspace: Optional --workspace path passed to comfy-cli. mode: Manager inventory mode (imported by default). prefer_manager_api: Try /v2/customnode/installed first.

Returns: JSON with one of three shapes: - {status: "ok", raw_lines: [...], line_count: N} when the listing succeeded. line_count==0 means no custom nodes are installed (or only stock ComfyUI is present). - {status: "failed", comfy_cli_returncode, stderr} when the binary is present but the call exits non-zero. - {error: "...install hints..."} when comfy-cli is not on PATH.

Inputs: mode, workspace, prefer_manager_api. Returns: result

comfy_list_jobsA
Read-onlyIdempotent

List ComfyUI jobs using the v0.20+ canonical jobs API.

Args: status: Optional job state filter workflow_id: Optional workflow UUID filter sort_by: Optional server-supported sort field sort_order: asc or desc limit: Maximum records to return (1-1000) offset: Offset pagination when after is omitted after: Cursor pagination token when supported

Inputs: after, limit, offset, status, +3 more. Returns: result

comfy_list_model_foldersA
Read-onlyIdempotent

List every model-folder name the connected ComfyUI exposes.

Uses ComfyUI's /models endpoint to discover folders live. Reports the data source ("live" vs "fallback") so callers know whether the list reflects their actual install.

Inputs: no named parameters. Returns: result

comfy_list_modelsA
Read-onlyIdempotent

List models in a folder with pagination. Returns structured ModelList.

Args: folder: Model folder name (e.g., "checkpoints", "diffusion_models", "loras", "vae", "text_encoders"). Call comfy_list_model_folders to see every folder the connected ComfyUI actually exposes. limit: Maximum number of results per page. offset: Starting position for pagination. include_non_model_files: Include caches, source files, lock metadata, archives, and unknown extensions returned by custom folders.

Inputs: folder (required), limit, offset, include_non_model_files. Returns: folder, models, has_more, next_offset, +1 more

comfy_list_node_typesA
Read-onlyIdempotent

List all available node types with pagination.

Args: limit: Maximum number of results per page offset: Starting position for pagination

Returns: JSON with node_types list, total_count, has_more, next_offset

Inputs: limit, offset. Returns: result

comfy_list_output_imagesA
Read-onlyIdempotent

List output images from history with a local filesystem fallback.

Args: subfolder: Optional subfolder to filter by limit: Maximum number of filenames to return

Inputs: limit, subfolder. Returns: result

comfy_list_partner_apisA
Read-onlyIdempotent

List partner-API custom nodes installed on the connected ComfyUI.

Intersects the installed extensions list (from ComfyUI's /extensions endpoint) with ComfyPilot's curated KNOWN_PARTNER_APIS catalog. Useful before suggesting workflows that depend on cloud-backed nodes - tells the agent which vendors (Veo, Kling, Seedream, GPT-Image, etc.) are actually wired up on this server.

Returns: JSON with installed (list of detected partners) and available (full catalog) so the agent can suggest installs when needed.

Inputs: no named parameters. Returns: result

comfy_list_snapshotsA
Read-onlyIdempotent

List workflow snapshots (newest first). Returns structured SnapshotList.

Args: limit: Maximum number of snapshots to return (default 20)

Inputs: limit. Returns: count, snapshots

comfy_list_techniquesA
Read-onlyIdempotent

List all saved workflow techniques (newest first). Returns structured TechniqueList.

Args: limit: Maximum number of techniques to return (default 50)

Inputs: limit. Returns: count, techniques

comfy_list_workersA
Read-onlyIdempotent

List active comfy-env subprocess workers, PIDs, Python, and generation.

Inputs: no named parameters. Returns: result

comfy_publish_subgraphA
Idempotent

Save a set of nodes as a reusable blueprint.

Args: name: Blueprint name (must not contain '/' or '..'). nodes: Dict of {node_id: node_spec} forming the blueprint graph. description: Free-text description for discoverability. tags: Optional tags for search/filter.

Inputs: name (required), nodes (required), tags, description. Returns: result

comfy_queue_promptA

Queue a workflow for execution. Returns structured QueueAck.

Args: workflow: Workflow dict to queue front: If True, insert at front of queue instead of back workflow_id: Optional stable workflow UUID for ComfyUI job metadata workflow_version_id: Optional workflow-version UUID partial_execution_targets: Optional output node IDs to execute extra_data: Optional metadata to attach to the queued prompt

Inputs: workflow (required), front, extra_data, workflow_id, +2 more. Returns: error, prompt_id, upload_map, node_errors, +3 more

comfy_randomize_seedsA

Replace seed sentinels (-1) with fresh random uint32 values.

By default, only widgets currently set to -1 are randomised; this lets a caller "opt in" by writing -1 for the seeds they want fresh while pinning the others to specific values. Set force=True to randomise every seed widget in the workflow regardless of its current value.

Uses secrets.randbelow(2**32) for cryptographic-grade randomness - avoids the seeded global random module so concurrent randomisation calls don't share a stream.

Args: workflow: API-format workflow dict (deep-copied; caller's dict stays unchanged). force: Randomise every seed widget regardless of current value.

Returns: JSON with workflow (patched copy) and assignments mapping node_id.field -> new_seed.

Inputs: workflow (required), force. Returns: result

comfy_recommend_runtimeA
Read-onlyIdempotent

Inspect connected GPU and recommend local vs Comfy Cloud routing.

Returns one of three verdicts:

  • ok - run everything locally (>=8 GB discrete VRAM or >=32 GB unified Apple Silicon)

  • marginal - SD 1.5 OK, SDXL tight, Flux/video unlikely. Cloud recommended for heavy workloads.

  • cloud - no usable GPU, <6 GB VRAM, <16 GB unified, Intel Mac, or Rosetta Python. Route to Comfy Cloud.

Also reports the appropriate comfy-cli install flag (--nvidia, --amd, --m-series, --cpu) so the caller can pass it to comfy_install_node / comfy_launch_server flows.

Inputs: no named parameters. Returns: result

comfy_refresh_modelsA
Read-onlyIdempotent

Re-fetch the model list from ComfyUI across every known folder.

Note: this re-reads ComfyUI's current model cache. It does NOT trigger a server-side filesystem rescan. Returns per-folder counts so the caller can see where the installed weights live.

Inputs: no named parameters. Returns: result

comfy_replay_techniqueC
Read-onlyIdempotent

Get the full technique data including workflow for re-use.

Args: technique_id: The technique ID to retrieve

Inputs: technique_id (required). Returns: result

comfy_restartA
DestructiveIdempotent

Safely restart the selected local instance through Manager V2.

First call comfy_instance_doctor and pass back either its instance_id or listener PID. The selector is checked immediately before the mutation. Desktop/Manager V2 is used when available; ComfyPilot never falls back to launching a competing server on port 8188.

Inputs: confirm, expected_pid, timeout_seconds, wait_for_health, +1 more. Returns: result

comfy_restore_snapshotB
Read-onlyIdempotent

Get a snapshot's workflow data for restoration.

Args: snapshot_id: The snapshot ID to restore

Returns: JSON with full snapshot data including workflow

Inputs: snapshot_id (required). Returns: result

comfy_run_with_inputsA

Upload local images, inject as workflow inputs, then queue.

Combines the three-step img2img / inpaint flow (upload + patch + queue) into one tool call. Each entry in inputs is a (label, local_path) pair: the file is uploaded to ComfyUI's input directory and the workflow's matching input widget is set to the uploaded filename.

Args: workflow: API-format workflow dict (will be deep-copied before patching - the caller's dict is not mutated). inputs: Mapping of label -> local file path. Labels may be "node_id.input_name" for explicit targeting or just "input_name" to patch every matching widget. front: Insert at the front of the queue (default False).

Returns: QueueAck (typed) with prompt_id, queue_number, plus an auto_snapshot field listing the upload mapping that was applied.

Inputs: inputs (required), workflow (required), front. Returns: error, prompt_id, upload_map, node_errors, +3 more

comfy_save_techniqueB

Save a workflow as a reusable technique.

Args: workflow: The workflow dictionary to save name: Name for the technique description: Optional description tags: Optional list of tags for categorization

Inputs: name (required), workflow (required), tags, description. Returns: result

comfy_search_historyA
Read-onlyIdempotent

Search history for prompts containing specific node types.

Args: query: Search term (case-insensitive substring match on node class_type) limit: Maximum number of matches to return (default 20)

Returns: JSON with matching history entries

Inputs: query (required), limit. Returns: result

comfy_search_hubA
Read-only

Search a public model hub for models matching a query.

Args: query: Free-text search, e.g. "flux2 klein" or "sdxl anime". source: "huggingface" or "civitai". Default huggingface. limit: Max results (1-50). Default 10.

Inputs: query (required), limit, source. Returns: result

comfy_search_modelsA
Read-onlyIdempotent

Search for models by name across folders.

By default searches every folder ComfyUI exposes (discovered live via /models). Pass folders=["checkpoints", "loras"] to narrow.

Args: query: Case-insensitive substring match against filenames. Empty string returns every model in every folder (useful for a full inventory). folders: Explicit folder list to restrict the search. None means search all discovered folders. include_non_model_files: Include cache locks, Python sources, wheels, archives, and unknown file types. Default False.

Inputs: query (required), folders, include_non_model_files. Returns: result

comfy_search_nodesA
Read-onlyIdempotent

Search for nodes by name (case-insensitive substring match).

Args: query: Search query string limit: Maximum number of results to return

Returns: JSON with matches list and total match count

Inputs: query (required), limit. Returns: result

comfy_search_techniquesA
Read-onlyIdempotent

Search workflow techniques by text query and/or tags.

Args: query: Text to search in name, description, and tags tags: Optional list of tags to filter by limit: Maximum number of results to return (default 20)

Inputs: tags, limit, query. Returns: result

comfy_send_to_blenderA
Idempotent

Download image and save for Blender consumption atomically with sidecar manifest.

Args: filename: The image filename in ComfyUI outputs subfolder: Optional subfolder in ComfyUI outputs prompt_id: Optional prompt_id to enrich the manifest with history metadata

Inputs: filename (required), prompt_id, subfolder. Returns: result

comfy_send_to_diskA
Idempotent

Download an image from ComfyUI and save to local disk atomically with a sidecar manifest.

Args: filename: The image filename in ComfyUI outputs subfolder: Optional subfolder in ComfyUI outputs output_dir: Optional override for output directory (default: COMFY_OUTPUT_DIR env var) prompt_id: Optional prompt_id to enrich the manifest with history metadata

Inputs: filename (required), prompt_id, subfolder, output_dir. Returns: result

comfy_send_to_tdA
Idempotent

Download image and save for TouchDesigner consumption atomically with sidecar manifest.

Args: filename: The image filename in ComfyUI outputs subfolder: Optional subfolder in ComfyUI outputs prompt_id: Optional prompt_id to enrich the manifest with history metadata

Inputs: filename (required), prompt_id, subfolder. Returns: result

comfy_set_limitsA

Update VRAMGuard safety thresholds.

Args: warn_pct: VRAM percentage to trigger warn status (default 80.0) block_pct: VRAM percentage to trigger critical/block status (default 95.0) max_queue: Maximum queue depth before blocking (default 10) timeout: Job timeout in seconds (default 300)

Returns: JSON with updated threshold values

Inputs: timeout, warn_pct, block_pct, max_queue. Returns: result

comfy_set_widget_valueC
Read-onlyIdempotent

Set a widget value on a workflow node.

Args: workflow: The workflow dictionary node_id: ID of the node to modify widget_name: Name of the widget/input to set value: Value to set

Inputs: node_id (required), workflow (required), widget_name (required), value. Returns: result

comfy_snapshot_workflowA

Create a snapshot of the current workflow state.

Args: workflow: The workflow dictionary to snapshot name: Optional name for the snapshot

Returns: JSON with snapshot id, name, timestamp, and node_count

Inputs: workflow (required), name. Returns: result

comfy_stop_serverA
DestructiveIdempotent

Stop an explicitly selected non-Desktop ComfyUI server via comfy-cli.

Desktop-supervised instances are never handed to comfy stop because that can target a different comfy-cli workspace. Use Comfy Desktop itself for a full stop, or comfy_restart for Manager V2 restart.

Args: workspace: Optional --workspace path passed to comfy-cli (selects which ComfyUI install to stop when multiple are present). expected_instance_id: Optional Desktop instance selector from comfy_instance_doctor. expected_pid: Optional listener PID selector. confirm: Explicit confirmation; otherwise MCP elicitation is used.

Returns: JSON with one of three shapes: - {status: "stopped", comfy_cli_returncode: 0, stdout, stderr} on successful shutdown. - {status: "failed", comfy_cli_returncode: N, stdout, stderr} when the binary is present but the call exits non-zero (most commonly: no server was running to stop). - {error: "...install hints..."} when comfy-cli is not on PATH.

Inputs: confirm, workspace, expected_pid, expected_instance_id. Returns: result

comfy_subscribeB

Register interest in an event type.

Args: event_type: The event type to subscribe to (e.g., 'progress', 'error', 'complete')

Returns: JSON confirming subscription

Inputs: event_type (required). Returns: result

comfy_suggest_timeoutA
Read-onlyIdempotent

Recommend an HTTP timeout for a workflow based on its output nodes.

Default ComfyPilot timeout is 300 s. Video / audio / 3D / training workflows routinely exceed that. This tool walks the workflow, finds every output-producing node, and returns the largest matching timeout plus the node that drove the decision.

Args: workflow: API-format workflow dict.

Inputs: workflow (required). Returns: result

comfy_sweepA

Enqueue N copies of workflow, each with a different value for one widget.

Useful for seed sweeps, CFG sweeps, step sweeps, denoise sweeps. Every queued prompt is also registered with the job tracker so the returned prompt_ids can be fed into comfy_watch_progress.

Args: workflow: Base API-format workflow. node_id: Node id whose input to vary (e.g. "5" for KSampler). param: Input name to vary (e.g. "seed", "cfg", "steps"). values: List of values to substitute. Each produces one queued prompt.

Inputs: param (required), values (required), node_id (required), workflow (required). Returns: result

comfy_sweep_gridA

N-dimensional parameter sweep over a Cartesian product of axes.

Where comfy_sweep varies one widget across a list, this enqueues every combination across multiple axes. E.g. seed x cfg x steps with 3 values on each axis produces 27 queued prompts.

Args: workflow: Base API-format workflow. axes: Mapping of 'node_id.param' -> list of values. At least 1 axis; order is preserved for the returned grid_shape. max_combinations: Hard cap on total queued prompts. Reject the call when the Cartesian product would exceed this. Default 64.

Returns: JSON with prompt_ids list (length = product of axis sizes), the grid_shape (e.g. [3, 3, 3] for 3x3x3), and a per-prompt assignment map so the caller can label each output.

Inputs: axes (required), workflow (required), max_combinations. Returns: result

comfy_unsubscribeA

Remove subscription to an event type.

Args: event_type: The event type to unsubscribe from

Returns: JSON confirming removal

Inputs: event_type (required). Returns: result

comfy_upload_imageA

Upload an image to ComfyUI.

Args: image_data: Base64-encoded image data filename: Destination filename subfolder: Optional subfolder within the input directory overwrite: Whether to overwrite an existing file with the same name

Inputs: filename (required), image_data (required), overwrite, subfolder. Returns: result

comfy_validate_before_queueA
Read-onlyIdempotent

Pre-flight safety check before queueing a prompt.

Checks VRAM headroom and current queue depth.

Returns: JSON with safe_to_queue flag, VRAM status, queue counts, and any issues

Inputs: no named parameters. Returns: result

comfy_validate_workflowA
Read-onlyIdempotent

Validate a workflow with a 6-pass check. Returns structured ValidationReport.

Passes: schema -> catalog -> graph -> anti_cycle -> environment -> execution_risk. A pre-pass detects ComfyUI editor-format (top-level nodes/links arrays) and short-circuits with a specific re-export instruction.

Inputs: workflow (required). Returns: valid, errors, passes, warnings, +1 more

comfy_visualize_workflowA
Read-onlyIdempotent

Render an API-format workflow as a Mermaid flowchart.

The returned string is valid Mermaid source (flowchart TD). Paste into any Mermaid renderer (GitHub, mermaid.ink, mermaid-cli).

Args: workflow: API-format {node_id: {class_type, inputs}} dict. title: Optional title string inserted as a diagram comment.

Inputs: workflow (required), title. Returns: result

comfy_watch_progressA
Read-onlyIdempotent

Poll EventManager for a prompt's execution progress. Returns structured WatchProgressFrame.

Args: prompt_id: The prompt ID to watch

Inputs: prompt_id (required). Returns: status, progress, elapsed_s, prompt_id, +2 more

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 96 tools

    Disambiguation2/5

    The tool set has several near-overlapping clusters: comfy_get_status and comfy_describe_dynamics both return queue/event/execution snapshots; list_output_images, list_artifacts, and download_batch all cover output metadata listing; list_extensions and list_installed_nodes are redundant. With 96 tools, an agent will frequently struggle to pick the precise tool for a task despite good individual descriptions.

    Naming Consistency4/5

    Almost all tools share the comfy_ prefix and snake_case convention, and the majority follow a clear verb_noun pattern such as list_models, get_queue, and upload_image. However, there are notable deviations like comfy_instance_doctor, comfy_interrupt, comfy_sweep, and get_model_info, whose name misleadingly suggests model file metadata rather than node schema.

    Tool Count1/5

    96 tools is far beyond a manageable MCP surface and reflects extreme scope creep rather than disciplined coverage. Many tools handle narrow sub-tasks that could be merged or moved into separate focused servers, and the count alone will overwhelm an agent's tool-selection process.

    Completeness4/5

    The server covers nearly every major ComfyUI lifecycle area: instance discovery, queue/job management, workflow build/validate/queue, model and node inspection, image and artifact handling, snapshots, techniques, blueprints, and safety controls. Minor gaps remain, such as no delete/update operations for techniques or blueprints and some redundant history/job APIs, but no critical dead-end prevents the core workflow.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      The MCP server that drafts ComfyUI workflows a human can actually read. It lets coding agents build, repair, port, validate, and run ComfyUI workflows against your own ComfyUI instance, delivering clean, organized, fully-labeled workflows.
      29
      66 PyPI
      2
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server that enables AI agents to control a local ComfyUI instance for image generation, allowing workflow understanding, parameter modification, execution, and model discovery.
      16 npm
      3
      Apache 2.0