Skip to main content
Glama

comfyui-mcp-secure

A secure MCP (Model Context Protocol) server for ComfyUI. Enables AI assistants to generate images, run workflows, and manage jobs through ComfyUI — with built-in security controls that existing ComfyUI MCP servers lack.

Using OpenCode? This repo ships agent configuration under .opencode/ — grounding rules (.opencode/rules/), a read-only review subagent, a /preflight command, and a graphify plugin — all pre-wired to the MCP server. See AGENTS.md for the entry point. The server itself works with any MCP client over stdio or Streamable HTTP.

Why this exists

Every existing ComfyUI MCP server is a thin passthrough to ComfyUI's API with no security guardrails. They allow arbitrary workflow execution (including malicious custom nodes that run eval/exec), have no input validation, no file path sanitization, no rate limiting, and no audit trail.

This server adds five security layers between the AI assistant and ComfyUI:

Layer

What it does

Workflow Inspector

Parses every workflow before execution, extracts node types, flags dangerous patterns (eval, exec, __import__, subprocess). Recurses into subgraph nodes so nested dangerous nodes can't evade inspection. First-party ComfyUI cloud API nodes (Kling, Veo, OpenAI, Gemini, Recraft, etc. — 135 nodes across 16 vendors) are flagged by default for network egress + cost. Warns when a submitted class_type has a server-side replacement (/node_replacements) — what executes may differ from what was vetted. The warning lists every replacement candidate and recurses into subgraphs; the residual known limitation is that audit-mode inspection does not re-inspect the post-replacement graph. Configurable audit-only or enforcement mode. In enforce mode, dangerous-node and suspicious-input warnings elicit the user for confirmation before submission.

Path Sanitizer

Validates all filenames, subfolders, and URL path segments — blocks path traversal (../), null bytes, percent-encoded attacks, absolute paths, and disallowed file extensions. Templated resources (comfyui://models/{folder}) also inherit FastMCP 4's built-in path-traversal screening.

SecurityMiddleware

Centralized rate-limit checks + entry audit logging across every tool call via the FastMCP 4 on_call_tool hook. Sensitive tool arguments (token, password, api_key) are redacted before the audit record is written.

Audit Logger

Structured JSON logging of every operation with automatic redaction of sensitive fields (tokens, passwords).

Selective API Surface

Only exposes safe ComfyUI endpoints. Dangerous endpoints (/userdata, /free, /users) are never proxied. /system_stats is called internally by comfyui_get_system_info but only a strict whitelist (GPU VRAM, queue counts, version) is returned.

Resources & Prompts (FastMCP 4)

The server exposes read-only ComfyUI state as resources the LLM can browse by URI without a tool call, and prompts as reusable workflow-template recipes:

  • Resources: comfyui://models/{folder}, comfyui://nodes/installed, comfyui://queue, comfyui://system, comfyui://settings

  • Prompts: txt2img_prompt, img2img_prompt, inpaint_prompt, upscale_prompt

Dependency injection & background tasks (FastMCP 4)

  • Depends() DI — tool modules may declare their dependencies (client, audit, inspector, limiter) via Depends() providers (auto-excluded from the MCP schema) instead of receiving them through register_*_tools() factories. history_di.py is the canonical DI module; the remaining tools migrate incrementally.

  • Background tasks (optional) — long-running workflows can run as background tasks via TasksExtension (Docket-backed) instead of holding the request open. Disabled by default; see Background tasks.

Real-time progress tracking

When wait=True is passed to comfyui_generate_image or comfyui_run_workflow, the server connects to ComfyUI's WebSocket to track execution in real time — reporting step progress, current node, and output files when complete. If the WebSocket connection fails, it automatically falls back to HTTP polling. Use comfyui_get_progress to check status of any job at any time.

For workflow streaming, use the mode that matches your use case:

  • comfyui_run_workflow(..., wait=True) returns a summarized, tool-friendly completion response.

  • comfyui_run_workflow_stream(...) returns raw WebSocket event flow (progress, executing, executed, etc.) plus final status and outputs.

Structured output & rich schemas

Tools expose Pydantic Field constraints on input parameters (ranges, lengths, descriptions) and outputSchema for structured responses. MCP clients get:

  • Input validation: Parameter constraints like steps: 1-100, cfg: 1.0-30.0, width: 64-4096 appear in the tool's JSON schema

  • Output schemas: 26 tools return structured data with auto-generated outputSchema, enabling clients to parse responses without guessing the shape

  • Streamable HTTP transport: Optional remote transport via transport.remote.enabled using the MCP spec's recommended Streamable HTTP protocol

Related MCP server: ComfyUI MCP

Recent Breaking Changes (2026-05)

2.1.0 (2026-05-12) is additive — no breaking changes since 2.0.0. Adds comfyui_analyze_workflow, replaces the bespoke Ollama eval runner with an Inspect AI Task module, and introduces a Phase 5 live-execution eval. See the CHANGELOG for the full per-PR breakdown. The breaking changes below all shipped in 2.0.0.

Parameter renames — update keyword arguments (positional calls are unaffected):

  • comfyui_install_custom_node, comfyui_uninstall_custom_node, comfyui_update_custom_node: idnode_id.

  • comfyui_summarize_workflow: formatoutput_format, restricted to text or mermaid via a Pydantic Literal.

Response-shape changes — these tools now return the standard pagination envelope {items, total, offset, limit, has_more} instead of bare lists or raw dicts:

  • comfyui_list_extensions (was: list[str])

  • comfyui_list_model_folders (was: list[str])

  • comfyui_list_workflows (was: dict[package_name, list[template]]; now flattened to items: [{package, templates}])

Callers must update to read result["items"] instead of indexing the response directly. The new envelope also exposes limit and offset parameters for pagination.

Unified return envelope for workflow-submitting toolscomfyui_run_workflow, comfyui_run_workflow_stream, comfyui_generate_image, comfyui_transform_image, comfyui_inpaint_image, comfyui_upscale_image now all return a uniform dict[str, Any] regardless of wait/stream mode:

{
  "status": "submitted" | "completed" | "interrupted" | "error" | "timeout",
  "prompt_id": "<uuid>",
  "warnings": [...]             # only when the workflow inspector produced warnings
  # When wait=True or stream:
  "outputs": [...],
  "elapsed_seconds": float,
  "step" / "total_steps" / "current_node" / "queue_position": ...,
  # When stream:
  "events": [...]
}

Previously these tools returned either a free-form sentence (wait=False) or a JSON-serialized string (wait=True/stream), forcing callers to try both shapes. Callers that previously parsed the response as text — or via json.loads() for wait=True — must update to read fields directly off the dict.

Quick start

Prerequisites

  • Python 3.12+

  • uv package manager

  • A running ComfyUI instance (local or remote)

Install

Option A: From PyPI

pip install comfyui-mcp-secure

For an isolated CLI install, use one of:

uv tool install comfyui-mcp-secure
pipx install comfyui-mcp-secure

For a one-shot run without installing first:

uvx comfyui-mcp-secure --help
git clone https://github.com/hybridindie/comfyui_mcp.git
cd comfyui_mcp
uv sync

Option C: Docker (no clone required)

docker pull ghcr.io/hybridindie/comfyui_mcp:latest

Or build locally from the repo:

docker build -t comfyui-mcp-secure .

Configure

Create a minimal config for your ComfyUI instance:

mkdir -p ~/.comfyui-mcp
cat > ~/.comfyui-mcp/config.yaml << 'EOF'
comfyui:
  url: "http://127.0.0.1:8188"
EOF

For a remote server:

cat > ~/.comfyui-mcp/config.yaml << 'EOF'
comfyui:
  url: "https://your-gpu-server:8188"
EOF

Add to your MCP client

The MCP server communicates over stdio. Add one of the following configurations to your MCP client (OpenCode, Claude Desktop, Cursor, or any stdio MCP client) depending on how you installed.

From source (uv):

{
  "mcpServers": {
    "comfyui": {
      "command": "uv",
      "args": ["--directory", "/path/to/comfyui_mcp", "run", "comfyui-mcp-secure"]
    }
  }
}

From PyPI / pipx / uv tool install:

{
  "mcpServers": {
    "comfyui": {
      "command": "comfyui-mcp-secure"
    }
  }
}

From PyPI without a persistent install (uvx):

{
  "mcpServers": {
    "comfyui": {
      "command": "uvx",
      "args": ["comfyui-mcp-secure"]
    }
  }
}

Docker (GitHub Container Registry):

{
  "mcpServers": {
    "comfyui": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "COMFYUI_URL=http://host.docker.internal:8188",
        "-v", "~/.comfyui-mcp:/home/app/.comfyui-mcp:ro",
        "ghcr.io/hybridindie/comfyui_mcp:latest"
      ]
    }
  }
}

Note: host.docker.internal routes to your host machine from inside Docker. If ComfyUI runs on a remote server, replace with that server's URL. On Linux, you may need to add --add-host=host.docker.internal:host-gateway.

Agent configuration (OpenCode)

This repository ships agent configuration under .opencode/ for OpenCode (and any harness that reads AGENTS.md). The server itself is harness-agnostic — it works with any MCP client over stdio or Streamable HTTP.

Agent-related files in this repo:

  • AGENTS.md — harness-agnostic entry point; index of the grounding rules

  • .opencode/opencode.json — wires context7 (MCP/FastMCP/Pydantic/httpx docs), a review subagent, a /preflight command, the graphify plugin, and a watcher.ignore

  • .opencode/rules/ — path-scoped constitutional rules (security, architecture, tools, testing, workflow, enforcement, graphify); loaded as instructions in opencode.json

  • .opencode/agents/review.md — read-only pre-PR reviewer subagent

  • .opencode/commands/preflight.md/preflight command (lint/format/type/tests gate)

  • .opencode/hooks/check-no-skipped-tests.sh — zero-skip suite-health gate

  • .opencode/plugins/graphify.js — knowledge-graph reminder plugin

  • skills/ — convenience recipes that wrap common multi-tool flows (gen, workflow, status, progress, history, models, troubleshooting, workflows)

Skills

The skills/ directory contains pre-authored recipes that wrap common multi-tool flows so a user doesn't have to choreograph the calls themselves. They are harness-agnostic markdown and work with any agent that loads them. The two "knowledge" skills (workflows, troubleshooting) are auto-applied when the conversation matches their topic.

Skill

What it does

gen <prompt>

Generate an image. Picks a model via comfyui_list_models, calls comfyui_generate_image(wait=True), fetches the result via comfyui_get_image.

workflow <description>

Build a workflow from a built-in template, validate it, then offer to run or modify.

workflows

Knowledge skill — auto-applied when the conversation involves building/modifying workflows. Covers workflow JSON format, common node chains (txt2img/img2img/ControlNet/LoRA), and the key node reference.

status

Show queue state (running + pending jobs).

progress <prompt_id>

Per-job execution progress (current node, step X of Y, status).

history

Recent completions with prompt IDs and output filenames.

models [folder]

List models in a folder type (defaults to checkpoints).

troubleshooting

Knowledge skill — auto-applied when users report connection, model, workflow, or security errors. Covers connection failures, model-not-found, workflow execution failures, queue-stuck, security warnings, and the two upstream-plugin (ComfyUI-Manager, ComfyUI-Model-Manager) setup issues.

Security warnings in the tool response

The workflow inspector and node auditor surface warnings directly in the tool response envelope. When comfyui_run_workflow, comfyui_generate_image, comfyui_audit_dangerous_nodes, comfyui_install_custom_node, or comfyui_update_custom_node detect dangerous node patterns ("Dangerous node type", "Suspicious input", or dangerous.count > 0), the response includes a warnings array. The agent reads this from the tool output and asks the user to confirm before proceeding — exactly the audit-mode-default behavior the project ships with.

End-to-end example

A user asks to generate "a yellow apple, photorealistic, 4k". The layers cooperate:

  1. The gen skill parses the prompt and applies defaults (512×512, 20 steps, cfg 7.0).

  2. It calls comfyui_list_models(folder="checkpoints"), picks an available model from the paginated items list, and confirms with the user if ambiguous.

  3. It calls comfyui_generate_image(prompt=..., model=..., wait=True).

  4. Server-side, the MCP tool runs WorkflowInspector.inspect() on the workflow before submitting it to ComfyUI. With a clean built-in workflow there are no warnings.

  5. ComfyUI executes; the tool blocks until the unified envelope comes back with status="completed".

  6. The skill reads result["outputs"][0] (a {node_id, filename, subfolder} dict), calls comfyui_get_image(filename=..., subfolder="output", preview_format="webp", preview_quality=80) for a cheap thumbnail, and presents the image inline.

Contrast that with running a user-supplied custom workflow that contains an Exec-class node: step 4's inspector emits warnings: ["Dangerous node type: Exec..."], and the response envelope carries:

SECURITY: Dangerous node patterns detected. Review the audit results above before proceeding.

The agent sees this in the tool output and asks the user to confirm before continuing — exactly the audit-mode-default behavior the project ships with.

Verify

# From source
uv run python -c "from comfyui_mcp.server import mcp; print(f'Server {mcp.name!r} ready')"

# Docker
docker run --rm ghcr.io/hybridindie/comfyui_mcp:latest --help

Tools

Generation & Workflows

Tool

Description

comfyui_generate_image

Text-to-image using a built-in workflow. Params: prompt, negative_prompt, width, height, steps, cfg, model. Set wait=True to block until complete and return outputs.

comfyui_transform_image

Image-to-image transformation. Params: image (filename), prompt, negative_prompt, strength (0.0-1.0), steps, cfg, model. Input must be uploaded via comfyui_upload_image first.

comfyui_inpaint_image

Inpaint masked regions of an image. Params: image, mask (filenames), prompt, negative_prompt, strength, steps, cfg, model. Both files must be uploaded first.

comfyui_upscale_image

Upscale an image using a model-based upscaler. Params: image (filename), upscale_model (default: RealESRGAN_x4plus.pth).

comfyui_run_workflow

Submit arbitrary ComfyUI workflow JSON. Inspected for dangerous nodes before execution. Set wait=True to block until complete and return outputs.

comfyui_run_workflow_stream

Submit workflow JSON and capture ComfyUI websocket stream events (progress, executing, executed, etc.) until terminal status, returning events plus final outputs/status.

comfyui_summarize_workflow

Summarize a workflow's structure, data flow, models, and parameters. Supports output_format="text" (default) or output_format="mermaid" for diagram markup.

comfyui_create_workflow

Create a workflow from templates including txt2img/img2img/upscale/inpaint, txt2vid_animatediff/txt2vid_wan, controlnet_canny/controlnet_depth/controlnet_openpose, ip_adapter, lora_stack, face_restore, flux_txt2img, and sdxl_txt2img.

comfyui_modify_workflow

Apply batch operations (add_node, remove_node, set_input, connect, disconnect) to a workflow.

comfyui_analyze_workflow

Return a structured analysis of a workflow as a dict (node_count, class_types, flow, models, parameters, pipeline, prompt_nodes, negative_nodes). Use this when you want to read fields like pipeline programmatically; use comfyui_summarize_workflow for a human-readable text or Mermaid rendering.

comfyui_validate_workflow

Validate workflow structure, server compatibility, and security.

Job Management

Tool

Description

comfyui_get_queue

Get current execution queue state.

comfyui_list_jobs

List jobs across queue + history with status filter, sorting, and pagination.

comfyui_get_job

Look up a single job (queued/running/finished) by prompt_id.

comfyui_cancel_job

Cancel a running or queued job. Uses the native /api/jobs/{id}/cancel endpoint and falls back to the legacy /queue delete on 404 (older ComfyUI builds).

comfyui_cancel_jobs

Batch-cancel one or more jobs by prompt_id via /api/jobs/cancel.

comfyui_interrupt

Interrupt the running workflow (global, or targeted via optional prompt_id).

comfyui_get_queue_status

Get detailed queue status including running and pending prompts.

comfyui_clear_queue

Clear pending and/or running items from the queue.

comfyui_get_progress

Get execution progress for a workflow by prompt_id. Returns status, queue position, and outputs.

Discovery

Tool

Description

comfyui_list_models

List available models by folder (checkpoints, loras, vae, etc.).

comfyui_list_models_detailed

List models in a folder with file metadata (name, pathIndex, modified, created, size) from /experiment/models/{folder}. Use this when you need the pathIndex for preview lookups.

comfyui_get_model_preview

Fetch a model's preview image via /experiment/models/preview/{folder}/{path_index}/{filename}. Returns base64-encoded image data + mime type, or {"available": false} on 404.

comfyui_list_nodes

List all available node types.

comfyui_get_node_info

Get detailed info about a specific node type.

comfyui_list_workflows

List saved workflow templates.

comfyui_list_extensions

List available ComfyUI extensions.

comfyui_get_server_features

Get ComfyUI server features and capabilities.

comfyui_list_model_folders

List available model folder types.

comfyui_get_model_metadata

Get metadata for a specific model file.

comfyui_audit_dangerous_nodes

Scan all installed nodes to identify potentially dangerous ones.

comfyui_list_subgraphs

List available reusable subgraph templates from ComfyUI (/global_subgraphs).

comfyui_get_subgraph

Fetch a single subgraph's JSON for inspection or insertion (/global_subgraphs/{id}).

comfyui_get_system_info

Sanitized GPU VRAM, queue depth, and ComfyUI version (whitelist-filtered from /system_stats).

comfyui_get_settings

Read ComfyUI server settings (sampler defaults, UI prefs, feature flags) from GET /settings.

comfyui_update_settings

Merge new settings into the ComfyUI server config via POST /settings (audit-logged; mutating).

Custom Node Management

Tool

Description

comfyui_search_custom_nodes

Search ComfyUI Manager registry custom node packs by name/description/author.

comfyui_install_custom_node

Queue install for a custom node pack by node_id; optional restart and post-install security audit.

comfyui_uninstall_custom_node

Queue uninstall for a custom node pack by node_id; optional restart.

comfyui_update_custom_node

Queue update for a custom node pack by node_id; optional restart and post-update security audit.

comfyui_get_custom_node_status

Get custom node queue status (pending/running/completed).

Requires: ComfyUI-Manager available on the target ComfyUI server. If unavailable, node-management tools return a helpful error.

History

Tool

Description

comfyui_get_history

Browse execution history (read-only). Server-side paging via limit (1-100, default 25) and offset (no upper bound). Returns {items, count, offset, limit, has_more, total}; total is only set on the last page (the upstream endpoint does not expose a count).

Model Search & Download

Tool

Description

comfyui_search_models

Search HuggingFace or CivitAI for models. Returns name, download URL, size, and stats.

comfyui_download_model

Download a model via ComfyUI-Model-Manager. URL and extension validated.

comfyui_get_download_tasks

Check status of active model downloads (progress, speed, status).

comfyui_cancel_download

Cancel or clean up a model download task.

comfyui_get_model_presets

Return recommended sampler/scheduler/steps/CFG defaults for a model family.

comfyui_get_prompting_guide

Return model-family prompt engineering tips and negative prompt guidance.

Requires: ComfyUI-Model-Manager installed in your ComfyUI instance. Download tools are gated behind lazy detection — if Model Manager is not installed, these tools return a helpful error message. comfyui_search_models works without it.

Model Manager download lifecycle

Model Manager tracks downloads as tasks. After a download completes, the task remains in the list with status: "pause" and progress: 100 — this is upstream Model Manager behavior. Call comfyui_cancel_download to remove it:

comfyui_download_model(url="...", folder="checkpoints", filename="model.safetensors")
→ { "taskId": "abc123", ... }

comfyui_get_download_tasks()
→ { "tasks": [{ "taskId": "abc123", "status": "pause", "progress": 100, ... }] }

comfyui_cancel_download(task_id="abc123")
→ { "success": true, ... }

The comfyui_download_model tool always sends a previewFile field (required by Model Manager even when empty). Omitting it causes the server to silently fail and delete the task.

File Operations

Tool

Description

comfyui_upload_image

Upload a base64-encoded image to ComfyUI. Path-sanitized. Params: filename, image_data, subfolder, destination="input"|"output"|"temp" (default input), overwrite (default False — ComfyUI auto-renames duplicates).

comfyui_get_image

Download a generated image. response_format="data_uri" (default) returns inline base64; response_format="url" returns a direct /view URL. With data_uri, optional preview_format="webp"|"jpeg" + preview_quality=1-100 request a server-rendered thumbnail (smaller payload, lossy). Optional base_url_override can override URL host per call. Path-sanitized.

comfyui_list_outputs

List generated output filenames from history.

comfyui_upload_mask

Upload a mask image to ComfyUI. Path-sanitized. Params: filename, mask_data, original_image, subfolder, original_subfolder, destination="input"|"output"|"temp" (default input), overwrite (default False — ComfyUI auto-renames duplicates).

comfyui_get_workflow_from_image

Extract embedded workflow and prompt metadata from a ComfyUI-generated PNG.

Resources

Read-only state the LLM can browse by URI without a tool call. Templated resources inherit FastMCP 4's built-in path-traversal screening.

URI

Description

comfyui://models/{folder}

List models in a folder (checkpoints, loras, vae, etc.). Path-traversal in {folder} is screened.

comfyui://nodes/installed

Sorted list of all available ComfyUI node class types from /object_info.

comfyui://queue

Current queue state — running and pending job counts.

comfyui://system

Whitelisted system info: ComfyUI version, GPU VRAM, queue counts. Sensitive fields (hostname, OS, CPU, paths) excluded.

comfyui://settings

ComfyUI server settings (sampler defaults, UI prefs, feature flags) from GET /settings.

Prompts

Reusable, parameterized prompt recipes for the built-in workflow templates. Return a plain string the LLM can use as guidance.

Prompt

Description

txt2img_prompt

Text-to-image recipe. Params: prompt, style="photorealistic".

img2img_prompt

Image-to-image recipe. Params: image, prompt, style="photorealistic".

inpaint_prompt

Inpaint recipe. Params: image, mask, prompt, style="photorealistic".

upscale_prompt

Upscale recipe. Params: image, upscale_model="RealESRGAN_x4plus.pth".

Deliberately not exposed

These ComfyUI endpoints are never proxied due to security risks:

  • /userdata — arbitrary file read/write

  • /free — unload models (DoS vector)

  • /users — user management

  • /history POST — delete history

/system_stats is called internally only by comfyui_get_system_info, which applies a strict whitelist and never forwards the raw response.

Configuration

Config file: ~/.comfyui-mcp/config.yaml

comfyui:
  url: "http://127.0.0.1:8188"   # ComfyUI server URL
  external_url: null               # Optional public URL for get_image URL responses
                                   # If unset, URL responses use comfyui.url
  tls_verify: true                 # TLS certificate verification
  timeout_connect: 30              # Connection timeout (seconds)
  timeout_read: 300                # Read timeout (seconds)

security:
  mode: "audit"                    # "audit" (log only) or "enforce" (block unapproved)
  allowed_nodes: []                # Enforce mode: only these nodes can run
  dangerous_nodes:                 # Always flagged in audit log (showing subset)
    - "Terminal"                   # comfyui-colab: shell via subprocess
    - "interpreter_tool"           # comfyui_LLM_party: exec/eval
    - "KY_Eval_Python"             # ComfyUI-KYNode: exec Python
    - "Image Send HTTP"            # was-node-suite: arbitrary HTTP
    - "Load Text File"             # was-node-suite: reads arbitrary files
    - "Save Text File"             # was-node-suite: writes arbitrary files
    # ... see config.py _DEFAULT_DANGEROUS_NODES for the full list
  max_upload_size_mb: 50
  allowed_extensions:
    - ".png"
    - ".jpg"
    - ".jpeg"
    - ".webp"
    - ".gif"
    - ".json"

rate_limits:                       # Requests per minute
  workflow: 10
  generation: 10
  file_ops: 30
  read_only: 60

model_search:
  huggingface_token: ""            # Optional; needed for gated/private HF models
  civitai_api_key: ""              # Optional; needed for auth-only CivitAI access
  max_search_results: 10

logging:
  audit_file: "~/.comfyui-mcp/audit.log"

transport:
  remote:
    enabled: false
    host: "127.0.0.1"
    port: 8080

When transport.remote.enabled is true, the server starts in Streamable HTTP mode and binds to transport.remote.host and transport.remote.port. Keep this bound to localhost unless you are running behind authenticated TLS reverse proxy infrastructure.

Environment variables

Environment variables override config file values:

Variable

Overrides

COMFYUI_URL

comfyui.url

COMFYUI_EXTERNAL_URL

comfyui.external_url

COMFYUI_TLS_VERIFY

comfyui.tls_verify

COMFYUI_TIMEOUT_CONNECT

comfyui.timeout_connect

COMFYUI_TIMEOUT_READ

comfyui.timeout_read

COMFYUI_SECURITY_MODE

security.mode

COMFYUI_AUDIT_FILE

logging.audit_file

COMFYUI_HUGGINGFACE_TOKEN

model_search.huggingface_token

COMFYUI_CIVITAI_API_KEY

model_search.civitai_api_key

COMFYUI_MAX_SEARCH_RESULTS

model_search.max_search_results

COMFYUI_ALLOWED_DOWNLOAD_DOMAINS

security.allowed_download_domains

COMFYUI_TASKS_ENABLED

tasks.enabled (optional background tasks)

COMFYUI_TASKS_BACKEND_URL

tasks.backend_url (memory:// or redis://...)

HuggingFace and CivitAI API keys

comfyui_search_models and comfyui_download_model work without API keys for many public models. Add keys when you need access to gated/private resources or higher provider limits.

Set them in config:

model_search:
  huggingface_token: "hf_xxx"
  civitai_api_key: "xxx"

Or via environment variables:

export COMFYUI_HUGGINGFACE_TOKEN="hf_xxx"
export COMFYUI_CIVITAI_API_KEY="xxx"

Security notes:

  • Prefer environment variables in production so secrets do not live in files committed to git.

  • Audit logs redact sensitive fields (token, api_key, etc.), but avoid printing secrets in shell history when possible.

Security modes

Audit mode (default)

Every workflow is inspected and logged, but nothing is blocked. Use this during development to understand what nodes your workflows use.

security:
  mode: "audit"

Audit log entries look like:

{
  "timestamp": "2026-02-25T14:30:00+00:00",
  "tool": "run_workflow",
  "action": "inspected",
  "nodes_used": ["KSampler", "CLIPTextEncode", "VAEDecode", "SaveImage"],
  "warnings": []
}

When a dangerous node is detected, warnings are included in the tool response:

Workflow submitted. prompt_id: abc123

⚠️ Warnings detected:
  - Dangerous node type: ExecutePython
  - Suspicious input in node 5 (ExecutePython), field 'code'

The MCP instructions tell the LLM to inform users and ask for confirmation before proceeding when warnings are present.

Building your dangerous node list

Use the comfyui_audit_dangerous_nodes tool to scan your ComfyUI installation for potentially dangerous nodes:

Tool

Description

comfyui_audit_dangerous_nodes

Scans all installed nodes and returns dangerous/suspicious ones with reasons

Run this once to see what dangerous nodes are installed:

comfyui_audit_dangerous_nodes() → {
  "total_nodes": 456,
  "dangerous": {
    "count": 12,
    "nodes": [
      {"class": "ExecutePython", "reason": "Name matches pattern: \\bexec\\b"},
      {"class": "RunPython", "reason": "Name matches pattern: \\brunpython\\b"},
      {"class": "ShellCommand", "reason": "Name matches pattern: \\bshell\\b"}
    ]
  },
  "suspicious": {...}
}

Add these to your config:

security:
  mode: "audit"
  dangerous_nodes:
    - "ExecutePython"      # from audit_dangerous_nodes
    - "RunPython"
    - "ShellCommand"
    # ... other nodes found by audit

Enforce mode

Only explicitly approved nodes can run. Any workflow containing an unapproved node is rejected.

security:
  mode: "enforce"
  allowed_nodes:
    - "KSampler"
    - "CheckpointLoaderSimple"
    - "CLIPTextEncode"
    - "VAEDecode"
    - "EmptyLatentImage"
    - "SaveImage"
    - "LoadImage"
    - "LoraLoader"

Tip: Use comfyui_audit_dangerous_nodes to identify dangerous nodes, run workflows in audit mode to see which nodes you use, then switch to enforce mode with that allowlist.

Elicitation gate (Phase 5): when enforce mode is on and the inspector produces warnings (dangerous-node types, suspicious inputs like eval()/exec(), or missing models), the generation tools (comfyui_run_workflow, comfyui_generate_image, comfyui_transform_image, comfyui_inpaint_image, comfyui_upscale_image) ask the user to confirm before submitting — ctx.elicit(..., response_type=bool). A decline or cancel raises WorkflowBlockedError without calling post_prompt. Unapproved-node enforcement (the allowed_nodes allowlist) still blocks hard inside the inspector before elicitation; the gate fires on the warning path. Programmatic callers without a live MCP context keep the pre-existing behavior (immediate WorkflowBlockedError in enforce mode with warnings).

Audit log

All tool invocations are logged as JSON lines to ~/.comfyui-mcp/audit.log:

# Watch the audit log in real time
tail -f ~/.comfyui-mcp/audit.log | python -m json.tool

# Find all workflows that used dangerous nodes
grep '"warnings":\[' ~/.comfyui-mcp/audit.log | grep -v '"warnings":\[\]'

Sensitive fields (token, password, secret, api_key, authorization) are automatically redacted from log entries.

Security

Threat model

Threat

Impact

Mitigation

Arbitrary code execution via workflow nodes

Critical

Workflow inspector (audit/enforce mode)

Path traversal via file operations

High

Path sanitizer blocks .., null bytes, encoded attacks, absolute paths

Denial of service via request flooding

Medium

Token-bucket rate limiter per tool category

Credential leakage in logs

Medium

Automatic redaction of token, password, secret, api_key, authorization

Information disclosure via API

Low

Dangerous endpoints (/userdata, /free) never proxied; /system_stats whitelist-filtered by comfyui_get_system_info

MITM on ComfyUI connection

Medium

Configurable TLS verification

Security controls by component

Workflow Inspector (security/inspector.py)

  • Parses workflow JSON, extracts node types, checks against configurable blocklist

  • Recursive pattern matching for __import__(), eval(), exec(), os.system(), subprocess in all input values (including nested dicts/lists)

  • Audit mode: logs warnings, allows execution. Enforce mode: blocks unapproved nodes

  • Limitation: static blocklist can be bypassed with obfuscation or unknown custom nodes

Path Sanitizer (security/sanitizer.py)

  • Validates filenames, subfolders, and URL path segments: blocks path traversal, null bytes, absolute paths, control characters

  • URL path segment validation on discovery tools (comfyui_list_models, comfyui_get_model_metadata) prevents folder/filename injection

  • Allowlist-based extension filtering (default: .png, .jpg, .jpeg, .webp, .gif, .json)

  • Handles percent-encoded inputs (URL decoding before validation)

  • Enforces max upload size (default 50MB), max filename length (255 chars)

Rate Limiter (security/rate_limit.py) + SecurityMiddleware (middleware.py)

  • Token-bucket per tool category: workflow (10/min), generation (10/min), file_ops (30/min), read_only (60/min)

  • In-memory only (resets on restart, no distributed support)

  • SecurityMiddleware centralizes rate-limit checks + entry audit logging across every tool call (FastMCP 4 on_call_tool hook), so the per-tool limiter.check() / audit.async_log(action="called") boilerplate can be dropped. Tools keep their domain-specific lifecycle audit logs (submitted, completed, etc.)

  • Sensitive tool arguments (token, password, api_key, ...) are redacted by the middleware before the entry audit record is written

  • mask_error_details=True on the server constructor masks internal exception tracebacks from clients — only ToolError messages (which we control) include details

  • Built-in FastMCP 4 middleware wired alongside SecurityMiddleware (see build_middleware_stack()): ResponseCachingMiddleware (caches read-only tools + the 4 comfyui:// resources, 30s TTL), ResponseLimitingMiddleware (caps list_nodes/list_models/get_history payloads at 500KB), PingMiddleware (keeps long-lived HTTP connections alive), StructuredLoggingMiddleware (ops/observability, include_payloads=False — the AuditLogger already redacts).

HTTP Client (client.py)

  • Configurable TLS verification, connect/read timeouts

  • Retries on connection errors with backoff (3 retries default). HTTP 4xx/5xx errors raised immediately (no retry)

WebSocket Progress (progress.py)

  • On-demand WebSocket connections for real-time execution tracking (step progress, current node, outputs)

  • Automatic HTTP polling fallback if WebSocket connection fails

  • TLS/SSL passthrough for secure ComfyUI connections

  • Per-prompt event filtering (ignores events from other concurrent jobs)

Configuration (config.py)

  • yaml.safe_load only, env var overrides limited to specific keys, Pydantic type validation

Production deployment

For production, run behind a reverse proxy (nginx, Traefik) to add TLS termination, authentication, and CSP headers. No PII is collected. No external telemetry.

Background tasks (optional, Phase 6)

Long-running workflows (comfyui_run_workflow(wait=True), image generation) can run as background tasks instead of holding the MCP request open. Disabled by default — most useful for the HTTP/remote transport where a long generation can return a task handle immediately and the client polls for progress.

tasks:
  enabled: true
  backend_url: "memory://"   # in-memory (default, single-process)
  # backend_url: "redis://localhost:6379/0"  # persistent, horizontally scalable

Env overrides: COMFYUI_TASKS_ENABLED, COMFYUI_TASKS_BACKEND_URL. When enabled, the server registers TasksExtension (backed by Docket) and async tools become task-capable — a client that opts in to the tasks capability gets a handle and polls; a client that does not gets synchronous execution as before. Use the Redis backend for deployments where tasks must survive restarts or run across workers. ctx.elicit() is not supported inside a background task — use the guard pattern (InputRequiredResult) for mid-task user input when serving 2026-07-28 connections.

Architecture

flowchart TB
    subgraph Client["LLM Client"]
        MC[AI Assistant / MCP Client]
    end

    subgraph MCP["ComfyUI MCP Server (FastMCP 4)"]
        CONFIG[Config<br/>YAML/env]
        AL[Audit Logger<br/>JSON logs]

        subgraph Security["Security Layers"]
            WI[Workflow Inspector<br/>Dangerous nodes<br/>Suspicious input<br/>+ Elicitation gate]
            PS[Path Sanitizer<br/>Traversal block<br/>Extension filter]
            RL[Rate Limiter<br/>Token-bucket]
        end

        MW[SecurityMiddleware<br/>rate limit + entry audit<br/>on_call_tool hook]
        DI[Dependencies<br/>Depends() providers]

        subgraph Tools["Tool Groups"]
            TG[generation.py<br/>jobs.py<br/>discovery.py<br/>history_di.py<br/>files.py]
        end

        RES[Resources<br/>comfyui://models, nodes, queue, system]
        PR[Prompts<br/>txt2img, img2img, inpaint, upscale]
        TASKS[TasksExtension<br/>optional, Docket-backed]

        API[ComfyUI Client<br/>httpx]
        WS[WebSocket Progress<br/>websockets]
    end

    subgraph ComfyUI["ComfyUI Server"]
        CS[REST API<br/>port 8188]
        CWS[WebSocket<br/>/ws]
    end

    MC <--MCP--> MCP
    CONFIG --> MCP
    AL --> MCP

    MCP --> MW
    MW --> Security
    MW --> Tools
    DI --> Tools
    Security --> Tools
    Tools --> API
    Tools --> WS
    API --httpx--> CS
    WS --websockets--> CWS

Components

Component

File

Responsibility

Server

server.py

Entry point, wires components, registers tools/resources/prompts/middleware

Config

config.py

Pydantic settings, YAML loading, env overrides (incl. tasks.*)

Client

client.py

Async HTTP client for ComfyUI REST API

SecurityMiddleware

middleware.py

Centralized rate-limit + entry-audit via FastMCP 4 on_call_tool hook

Dependencies

dependencies.py

Depends() providers for client/audit/inspector/limiter singletons

Resources

resources.py

@mcp.resource URIs — models, nodes, queue, system (read-only browsing)

Prompts

prompts.py

@mcp.prompt workflow-template recipes (txt2img, img2img, inpaint, upscale)

Progress

progress.py

WebSocket progress tracking with HTTP polling fallback

Audit

audit.py

Structured JSON logging with redaction

Workflow Inspector

security/inspector.py

Node type detection, dangerous pattern matching, elicitation gate

Node Auditor

security/node_auditor.py

Scans installed nodes for dangerous patterns

Path Sanitizer

security/sanitizer.py

Path traversal, extension filtering

Rate Limiter

security/rate_limit.py

Token-bucket per tool category (enforced by SecurityMiddleware)

Download Validator

security/download_validator.py

URL domain/path and extension validation for downloads

Model Checker

security/model_checker.py

Proactive missing model detection in workflows

Model Manager

model_manager.py

Lazy detection of ComfyUI-Model-Manager availability

Development

Project structure

src/comfyui_mcp/
├── server.py              # MCP server entry point, wires all components + middleware
├── config.py              # Pydantic settings, YAML loading, env overrides
├── client.py              # Async HTTP client for ComfyUI API
├── middleware.py          # SecurityMiddleware (rate limit + entry audit, on_call_tool)
├── dependencies.py        # Depends() providers (client/audit/inspector/limiter singletons)
├── resources.py           # @mcp.resource URIs (models, nodes, queue, system)
├── prompts.py             # @mcp.prompt workflow-template recipes
├── progress.py            # WebSocket progress tracking with HTTP polling fallback
├── pagination.py          # Offset-based pagination helper for list tools
├── audit.py               # Structured JSON audit logger
├── model_manager.py       # Lazy Model Manager detection and validation
├── security/
│   ├── inspector.py       # Workflow node inspection (audit/enforce)
│   ├── node_auditor.py    # Scans installed nodes for dangerous patterns
│   ├── sanitizer.py       # File path validation
│   ├── rate_limit.py      # Token-bucket rate limiter
│   ├── download_validator.py  # URL/extension validation for model downloads
│   └── model_checker.py   # Proactive model availability checking
├── workflow/
│   ├── templates.py       # Built-in workflow templates (txt2img, img2img, upscale, etc.)
│   ├── operations.py      # Workflow graph operations (add/remove nodes, connect, etc.)
│   └── validation.py      # Workflow analysis and validation
└── tools/
    ├── generation.py      # generate_image, run_workflow, summarize_workflow (elicitation-gated)
    ├── workflow.py        # create_workflow, modify_workflow, validate_workflow, analyze_workflow
    ├── jobs.py            # get_queue, get_job, cancel_job, interrupt, get_progress
    ├── discovery.py       # list_models, list_nodes, audit_dangerous_nodes, etc.
    ├── history_di.py      # get_history (DI version — Depends())
    ├── files.py           # upload_image, get_image, list_outputs, upload_mask, get_workflow_from_image
    ├── models.py          # search_models, download_model, get_download_tasks, cancel_download
    └── nodes.py           # search/install/uninstall/update custom nodes

scripts/
├── smoke_test.py             # Operator smoke-test against a live ComfyUI instance
├── compare_evals.py          # Diff two Inspect AI eval runs (PASS/FAIL + per-tag breakdown)
└── run_multimodel_eval.py    # Run one Task against N models in a single invocation

evals/
├── comfyui_mcp_task.py                       # Inspect AI Task definitions (Phase 4, Phase 5)
├── 2026-05-11-comfyui-mcp-v1.jsonl           # Phase 4 dataset (10 static questions, tagged)
└── 2026-05-12-comfyui-mcp-phase5.jsonl       # Phase 5 dataset (5 live-execution questions, tagged)

Run tests

uv sync
uv run pytest -v

Evaluation

The MCP ships with an Inspect AI-based eval harness for measuring how well an LLM uses the tools end-to-end. Two task suites are defined:

  • Phase 4 — 10 static questions exercising templates, presets, the prompting guide, and the workflow validator/summarizer. ~1-6 min per run for cloud-tier models.

  • Phase 5 — 5 live-execution questions exercising multi-step tool chains, state passing, recovery from intentionally broken workflows, and reading structured outputs. Generation questions actually submit work to the connected ComfyUI server (so you need one reachable at $COMFYUI_URL).

Every question is tagged with what it tests (e.g. template, recovery, state-passing, output-reading) so results can be sliced per category.

Run a single model against one suite:

COMFYUI_URL=https://comfyui.example.net uv run inspect eval \
    evals/comfyui_mcp_task.py@comfyui_mcp_phase5 \
    --model ollama/gpt-oss:120b-cloud \
    --log-dir ./logs/phase5
uv run inspect view --log-dir ./logs/phase5

Run one suite against N models in a single invocation (wraps the eval_set() Python API because the CLI's --model flag is single-value by Click's default):

uv run python scripts/run_multimodel_eval.py \
    evals/comfyui_mcp_task.py@comfyui_mcp_phase4 \
    --models ollama/gpt-oss:120b-cloud,ollama/qwen3-coder:480b-cloud,anthropic/claude-sonnet-4-6 \
    --log-dir ./logs/phase4-cross-model

Compare two runs (per-sample PASS/FAIL diff plus a per-tag breakdown when either log has tagged samples):

uv run python scripts/compare_evals.py logs/phase4-before logs/phase4-after

Each path can be either a specific .eval file or a directory (uses the most recent .eval by mtime).

Build and publish

Build the distributable artifacts locally:

uv build
uvx twine check dist/*

Publish a release to PyPI:

# After bumping pyproject.toml [project].version and updating CHANGELOG.md
git tag v2.1.0
git push origin v2.1.0

The GitHub Actions workflow in .github/workflows/pypi.yml builds the sdist and wheel, verifies the metadata, and publishes to PyPI using GitHub Trusted Publishing on tag push. The GitHub Release is created manually after the workflow succeeds (gh release create v<x.y.z>). Before the first release, create the comfyui-mcp-secure project on PyPI, configure a trusted publisher for this repository in the PyPI project settings, and use the pypi GitHub environment.

Smoke test against a live instance

Verify connectivity, Model Manager availability, and download lifecycle against a running ComfyUI server:

# Full test (connectivity + folder listing + download task lifecycle)
uv run python scripts/smoke_test.py

# Quick connectivity + folder check only
uv run python scripts/smoke_test.py --no-download

# Target a different server
uv run python scripts/smoke_test.py --url http://localhost:8188

The download probe uses a tiny (~520 KB) safetensors file from hf-internal-testing/tiny-random-bert. The file is created with a timestamped name and cleaned up automatically on every run.

Docker

A pre-built Docker image is published to the GitHub Container Registry. No need to clone the repo.

docker pull ghcr.io/hybridindie/comfyui_mcp:latest

How it works

The container runs as a non-root app user with uv run comfyui-mcp-secure as its entrypoint, communicating over stdin/stdout (stdio). This makes it compatible with OpenCode, Claude Desktop, Cursor, and any MCP client. Config is read from /home/app/.comfyui-mcp/config.yaml inside the container — mount your local config directory to provide it, or use environment variables.

Running standalone

# Using the hosted image
docker run --rm -i \
  -e COMFYUI_URL=http://host.docker.internal:8188 \
  -v ~/.comfyui-mcp:/home/app/.comfyui-mcp:ro \
  ghcr.io/hybridindie/comfyui_mcp:latest

# Or build and run locally
docker build -t comfyui-mcp-secure -f deploy/docker/Dockerfile .
docker run --rm -i \
  -e COMFYUI_URL=http://host.docker.internal:8188 \
  -v ~/.comfyui-mcp:/home/app/.comfyui-mcp:ro \
  comfyui-mcp-secure

Linux users: Add --add-host=host.docker.internal:host-gateway if using host.docker.internal.

Docker Compose

A docker-compose.yml is included in deploy/docker/ for persistent deployments:

# Start (from the repo root)
COMFYUI_URL=http://your-comfyui:8188 docker compose -f deploy/docker/docker-compose.yml up -d

# View logs
docker compose -f deploy/docker/docker-compose.yml logs -f comfyui-mcp-secure

The compose file mounts config.yaml (from the repo root) and persists audit logs to a named volume:

services:
  comfyui-mcp-secure:
    build:
      context: ../..
      dockerfile: deploy/docker/Dockerfile
    image: comfyui-mcp-secure:latest
    container_name: comfyui-mcp-secure
    environment:
      - COMFYUI_URL=${COMFYUI_URL:-http://comfyui:8188}
      - COMFYUI_SECURITY_MODE=${COMFYUI_SECURITY_MODE:-audit}
    volumes:
      - ../../config.yaml:/home/app/.comfyui-mcp/config.yaml:ro
      - comfyui-mcp-secure-data:/home/app/.comfyui-mcp/logs
    restart: unless-stopped

volumes:
  comfyui-mcp-secure-data:

Connecting via Docker

See the Docker configuration in Quick Start above. The key points:

  • Use docker run --rm -i (interactive, no detach) so stdio works

  • Mount your config: -v ~/.comfyui-mcp:/home/app/.comfyui-mcp:ro

  • Set COMFYUI_URL to reach your ComfyUI instance from inside the container

  • Use host.docker.internal to reach ComfyUI running on your host machine

  • The GHCR image (ghcr.io/hybridindie/comfyui_mcp:latest) means no local build needed

License

MIT

Available Tools

46 tools
comfyui_analyze_workflowA
Read-onlyIdempotent

Analyze a ComfyUI workflow and return its structured shape.

    Unlike ``comfyui_summarize_workflow`` (which formats a human-readable
    text or Mermaid summary), this tool returns the raw analysis as a dict
    so callers can read individual fields directly without parsing prose.

    Args:
        workflow (required): JSON string of the workflow to analyze. The
            workflow JSON is a dict keyed by node ID; each value has
            ``class_type`` and ``inputs``.

    Returns:
        Dict with keys:

        - ``node_count`` (int): number of nodes in the workflow.
        - ``class_types`` (list[str]): every ``class_type`` in topological
          order.
        - ``flow`` (list[dict]): per-node info — ``node_id``, ``class_type``,
          ``display_name``, ``inputs`` — in topological order.
        - ``models`` (list[dict]): single-field loader values, e.g.
          ``[{"name": "v1-5-pruned.safetensors", "type": "checkpoints"}]``.
        - ``parameters`` (dict): flat key/value of common sampler/latent
          parameters extracted from the graph (``steps``, ``cfg``, ``width``,
          ``height``, etc.).
        - ``pipeline`` (str): coarse type — one of ``txt2img``,
          ``img2img``, ``upscale``, ``img2img -> upscale``,
          ``txt2img -> upscale``, or ``unknown``.
        - ``prompt_nodes`` (list[str]): ids of ``CLIPTextEncode`` nodes
          that are NOT wired into any sampler's ``negative`` input
          (the analyzer treats every non-negative CLIPTextEncode as
          a positive prompt — it does not separately verify that it
          is wired into a sampler's positive input).
        - ``negative_nodes`` (list[str]): ids of ``CLIPTextEncode`` nodes
          wired into a sampler's ``negative`` input.

    Display-name enrichment is best-effort via ComfyUI's ``/object_info``
    endpoint; if the server is unreachable, ``display_name`` falls back to
    the bare ``class_type``.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
workflowYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it as read-only and idempotent, and the description adds substantial context: raw dict return shape, best-effort display-name enrichment via /object_info with a documented fallback, and the prompt_nodes detection limitation. This goes well beyond the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Structured with clear Description/Args/Returns sections and bullet-list return keys. Although lengthy, every sentence contributes distinct, useful information and the formatting keeps it scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description still documents every return key with types and examples, plus graceful fallback behavior. For a single-parameter read-only tool, this is fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description fully compensates by explaining that workflow is a JSON string keyed by node ID with class_type and inputs. This gives the agent the exact format needed, which the schema alone does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States 'Analyze a ComfyUI workflow and return its structured shape' — a specific verb plus resource. It also distinguishes itself from comfyui_summarize_workflow, making the tool's unique role immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to use this tool instead of comfyui_summarize_workflow when a raw dict is needed without parsing prose. This provides a clear alternative and a concrete when-to-use criterion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_audit_dangerous_nodesA
Read-onlyIdempotent

Audit all installed nodes to identify potentially dangerous ones.

    Scans for nodes that could execute arbitrary code, run shell commands,
    or access the file system. Useful for building a dangerous node blacklist.

    Returns:
        Dictionary with dangerous and suspicious node counts and lists
    
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description need not restate safety. It adds value by disclosing what is scanned for (arbitrary code, shell commands, file system access) and the return structure (dictionary with counts and lists), which are behavioral details beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the core purpose, then expands on scope, use case, and return value. It is concise with no wasted words, and the 'Returns:' section clearly separates output info.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, strong safety annotations, and an output schema, the description fully covers the tool's behavior. It explains what it does, why you'd use it, what it looks for, and what it returns. No critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero properties, so there are no parameters to describe. The description correctly omits parameter details. With 0 params, a baseline of 4 is appropriate, and the description does not need to compensate for any schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line states 'Audit all installed nodes to identify potentially dangerous ones' with a specific verb ('audit') and resource ('all installed nodes'), clearly distinguishing this from sibling tools like list_nodes or get_node_info. The description further elaborates on the scanning criteria, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear use case ('Useful for building a dangerous node blacklist') and describes the scan focus (code execution, shell commands, file system access). It does not explicitly mention alternatives or when not to use, but the context is sufficient for an AI agent to infer when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_cancel_downloadA
Destructive

Cancel and remove a model download task.

    Args:
        task_id: ID of the download task to cancel
    
ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal destructive behavior (destructiveHint=true), and the description adds the phrase 'and remove,' clarifying that the task is deleted. However, it doesn't disclose side effects like whether partial downloads are deleted or if the action is irreversible, so it adds only marginal context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the action, but the docstring format is rather minimal. It earns its place without verbose explanations, though it could be slightly more structured with clearer separation of purpose and parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and an output schema, the description is adequate but lacks guidance on when to use it and what happens to the underlying download files. It doesn't address edge cases like canceling a completed or already-canceled task, making it only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description provides a clear docstring for task_id, stating it is the ID of the download task to cancel. This adds meaningful context over the schema's bare 'Task Id' label, though it could be even more explicit about where to find this ID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Cancel') and the resource ('model download task'), and uses the verb 'remove' to add specificity. It distinguishes itself from sibling tools like comfyui_cancel_job, which targets jobs rather than download tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for canceling model downloads but does not explicitly mention when to use it instead of alternatives like comfyui_cancel_job. There is no exclusions or comparison, so the guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_cancel_jobA
DestructiveIdempotent

Cancel a running or queued job by its prompt_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
prompt_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation risk is disclosed. The description adds the scope (running or queued jobs) but does not explain what happens to partial outputs or whether canceling an already-finished job is a no-op. Since annotations provide the core safety profile, the description offers only marginal additional behavioral context, earning a 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no unnecessary words. It front-loads the action ('Cancel') and immediately specifies the resource and target parameter, making it highly efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter tool, the description is largely complete: it states the action, the resource, and the targeting mechanism. With annotations covering destructive behavior and idempotency, and an output schema present, the remaining gaps are minor—missing guidance on alternatives and error handling when the job doesn't exist. Given the tool's simplicity, this is very close to fully sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies that prompt_id is the identifier of the job to cancel, which adds meaning beyond the schema's bare type declaration. However, it does not explain how to obtain a prompt_id or what formats are valid, leaving some ambiguity for a parameter central to the operation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Cancel' with the resource 'job' and the targeting mechanism 'by its prompt_id'. This clearly distinguishes the tool from siblings like comfyui_interrupt (which stops the running job) and comfyui_clear_queue (which clears the entire queue), making its unique role obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have a prompt_id and want to cancel that specific job, but it does not explicitly state when to prefer this tool over alternatives like comfyui_interrupt or comfyui_clear_queue. No exclusions or alternative recommendations are provided, leaving the guidance at an implied level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_clear_queueA
DestructiveIdempotent

Clear items from the execution queue.

    Args:
        clear_running: Stop the currently running workflow
        clear_pending: Remove pending workflows from the queue
    
ParametersJSON Schema
NameRequiredDescriptionDefault
clear_pendingNo
clear_runningNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses important behavioral details beyond the annotations, such as 'Stop the currently running workflow' for clear_running and 'Remove pending workflows' for clear_pending. This adds context about the destructive nature and the distinction between flags. It aligns with the destructiveHint and idempotentHint annotations, with no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. It starts with a clear one-line summary, then provides a brief Args block. Every sentence is meaningful, and the formatting is clean, making it easy for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive queue-clearing tool, the description covers the core behavior and parameter effects. The presence of annotations (destructiveHint, idempotentHint) and an output schema reduces the burden on the description. It could mention return behavior or edge cases, but it is reasonably complete for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no descriptions for the parameters, but the description adds explicit semantics for both clear_running and clear_pending, explaining what each flag does. This is valuable beyond the schema's type and title information, making the tool's behavior clearer.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Clear items from the execution queue.' This is a specific verb+resource combination that distinguishes it from sibling tools like get_queue or run_workflow. However, it does not explicitly differentiate from close siblings such as comfyui_interrupt or comfyui_cancel_job, which might also affect queue/running workflows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives like comfyui_cancel_job or comfyui_interrupt. There is no mention of prerequisites, suitable contexts, or exclusions. The usage is only implied by the tool's name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_create_workflowA
Read-onlyIdempotent

Create a ComfyUI workflow from a template with optional parameter overrides.

    Available templates: ``txt2img``, ``img2img``, ``upscale``, ``inpaint``,
    ``txt2vid_animatediff``, ``txt2vid_wan``, ``controlnet_canny``,
    ``controlnet_depth``, ``controlnet_openpose``, ``ip_adapter``,
    ``lora_stack``, ``face_restore``, ``flux_txt2img``, ``sdxl_txt2img``.

    Args:
        template (required): Template name from the list above.
        params (optional): JSON string of parameter overrides. Defaults to
            an empty string, meaning "use template defaults". Pass either
            ``""`` or ``"{}"`` for no overrides. Common keys:
            ``prompt``, ``negative_prompt``, ``width``, ``height``,
            ``steps``, ``cfg``, ``model``, ``denoise``, ``controlnet_model``,
            ``control_strength``, ``lora_name``, ``lora_strength``.

    Example:
        ``comfyui_create_workflow(template="txt2img",
        params='{"prompt": "a sunset", "width": 768, "steps": 30}')``
    
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
templateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context about parameter overrides and default behavior ('Pass either "" or "{}" for no overrides'), but it does not explicitly state that the workflow is not executed, which would further clarify side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with a clear purpose statement, a bulleted list of templates, an Args section, and a usage example. Every element adds value, and the structure makes it easy to scan and understand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the tool (multiple templates and JSON parameters), the description is highly complete. It covers all necessary inputs, defaults, constraints, and provides an example. The presence of an output schema means return values do not need to be explained in the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, yet the description fully compensates. It lists all valid template names, explains that params is a JSON string, documents common keys, provides default behavior, and gives a concrete example. This is exemplary parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb+resource: 'Create a ComfyUI workflow from a template with optional parameter overrides.' It clearly distinguishes this from sibling tools like comfyui_run_workflow and comfyui_generate_image by focusing on creation rather than execution or generation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly communicates when to use this tool: to create a workflow from one of the listed templates. It does not explicitly mention alternatives or exclusions, but the template list and example imply that this is the right choice for workflow creation, not execution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_download_modelA

Download a model from HuggingFace or CivitAI via ComfyUI-Model-Manager.

    Returns:
        JSON with download task status. Use comfyui_get_download_tasks to check progress.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesDirect download URL (must be from an allowed domain)
folderYesTarget model folder (e.g. "checkpoints", "loras", "vae")
filenameNoFilename to save as (optional — inferred from URL if empty)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is not read-only and is open-world, but the description adds valuable behavioral context by stating that the tool returns a 'JSON with download task status' and that progress should be checked via another tool. This implies an asynchronous task model, which is important beyond the raw annotation flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short, front-loaded sentences. The first sentence states the core purpose and mechanism; the second explains the return value and next step. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and parameter schema is fully covered, the description does not need to repeat those details. It provides enough context: what the tool does, what it returns, and how to follow up. This is complete for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage of parameters, so the baseline is 3. The description adds meaning by naming HuggingFace and CivitAI, which clarifies the 'allowed domain' constraint on the 'url' parameter and gives the agent a better sense of valid inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Download a model'), the specific sources ('from HuggingFace or CivitAI'), and the mechanism ('via ComfyUI-Model-Manager'). This distinguishes it from sibling tools like comfyui_search_models or comfyui_get_download_tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool (to download models) and gives a direct follow-up instruction ('Use comfyui_get_download_tasks to check progress'). It does not explicitly mention alternatives or exclusions, but the context is clear enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_generate_imageA

Generate an image from a text prompt using a default txt2img workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
cfgNoClassifier-free guidance scale
waitNoIf True, block until complete and return result
modelNoCheckpoint model name (leave empty for default)
stepsNoNumber of sampling steps
widthNoImage width in pixels
heightNoImage height in pixels
promptYesText description of the image
negative_promptNoWhat to avoid in the outputbad quality, blurry

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey that this is not read-only, is not idempotent, and is open-world. The description adds the 'default txt2img workflow' context, but it does not disclose behavioral details like asynchronous queueing or blocking behavior, which are partially covered by the 'wait' parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that is front-loaded with the verb and resource. Every word contributes meaning, with no fluff or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 parameters and an output schema, the description is minimal but adequate for the core intent. It doesn't mention important behaviors like whether jobs are queued asynchronously or return immediately, which is a notable gap given the 'wait' parameter exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema documents all 8 parameters with clear descriptions (100% coverage), so the description does not need to elaborate. The phrase 'text prompt' reinforces the primary 'prompt' parameter, but adds no extra semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Generate an image') with a clear resource ('from a text prompt') and method ('using a default txt2img workflow'). It distinguishes itself from sibling tools like upscale or transform, though it doesn't explicitly contrast with comfyui_run_workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the description: it is for generating an image from a text prompt. However, there is no explicit guidance on when to choose this over alternatives like comfyui_run_workflow or when not to use it, so the guidance is indirect.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_custom_node_statusA
Read-onlyIdempotent

Check the custom node operation queue status.

    Returns:
        JSON with queue status: total tasks, completed, in progress, and
        whether the queue is currently processing.
    
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds return payload details (total tasks, completed, in progress, processing), which is useful but does not disclose additional behaviors like rate limits or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with a clear action, followed by a concise return format explanation. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (no parameters, simple status query), the description is complete enough. It explains what is returned and is consistent with annotations, though it could mention related tools or usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the baseline for 0-parameter tools is 4. The description does not need to explain parameters, and the schema coverage is trivially 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks 'custom node operation queue status' with a specific verb and resource. While it is distinct from siblings like comfyui_get_queue, it does not explicitly differentiate itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as comfyui_get_queue_status or comfyui_get_progress. The user must infer its use case from the name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_download_tasksA
Read-onlyIdempotent

Check the status of active model downloads.

    Returns:
        JSON with list of download tasks including progress, speed, and status.
    
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context by specifying that it returns a list of download tasks with progress, speed, and status, and clarifies that it focuses on 'active' downloads. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one sentence for purpose and a brief returns line. It is front-loaded and every sentence adds value. The docstring formatting is acceptable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple tool with no parameters, strong annotations, and the existence of an output schema, the description is sufficiently complete. It could mention when to use it relative to siblings (e.g., for monitoring downloads), but that gap is already reflected in usage_guidelines. The core behavior and return structure are covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. There are no parameter semantics to add beyond the schema, and the description correctly focuses on the return value rather than input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('check') and resource ('active model downloads'), and the return format (JSON list with progress, speed, status). This distinguishes it from sibling tools like get_queue or get_progress, which relate to workflow execution rather than download tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. With siblings like comfyui_download_model, comfyui_cancel_download, and comfyui_get_progress, the description does not explain why this tool should be preferred for checking download status or which contexts favor it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_historyA
Read-onlyIdempotent

Browse ComfyUI execution history (read-only).

    Uses server-side `/history?offset=N&max_items=M` so callers can page
    arbitrarily far back. The tool requests one extra entry per page so it
    can set ``has_more`` without an additional round-trip.

    Args:
        limit: Maximum number of results to return (default: 25, max: 100)
        offset: Zero-based starting index (default: 0)

    Returns:
        Envelope with keys ``items``, ``count`` (items in this page),
        ``offset``, ``limit``, ``has_more``, and ``total``.

        ``total`` is set only when we can prove the true count:

        - ``offset + count`` on the last page when ``count > 0``
          (the upstream returned at most ``limit`` entries, so we've seen
          everything from ``offset`` onward).
        - ``0`` when ``offset == 0`` and the upstream returned nothing
          (history is genuinely empty).
        - ``None`` otherwise (``has_more`` is True, OR we paged past the
          end and got back an empty result — in the latter case the true
          count is somewhere in ``[0, offset]`` and we can't tell which).

        ``has_more`` is the canonical end-of-history signal.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1-100, default varies by tool).
offsetNoZero-based starting index for pagination.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations, explaining server-side pagination, the extra entry request for has_more, and detailed edge cases for total. This reveals significant behavioral traits (such as round-trip optimization and total's conditional semantics) that are not in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections for purpose, behavior, args, and returns. It is detailed but every sentence earns its place, especially the bullet-pointed return semantics. The front-loaded first sentence immediately conveys the tool's core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description is thorough: it explains pagination, return envelope keys, and all edge cases for total and has_more. The output schema exists but the description goes beyond it, making the tool fully understandable for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description only restates the parameter defaults and ranges already present in the schema, adding no new semantic meaning beyond what is already structured.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool browses ComfyUI execution history in a read-only manner. The verb 'Browse' is specific and the resource 'execution history' is distinct from sibling tools like get_queue or get_job, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While no explicit alternatives are mentioned, the description provides clear context that this tool is for read-only browsing of execution history, which distinguishes it from mutating tools. However, it does not explicitly say when not to use it or mention alternatives like get_job.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_imageA
Read-onlyIdempotent

Download a generated image from ComfyUI or return a direct view URL.

    Returns:
        Base64-encoded image data with content type prefix, or a direct image URL.
        When response_format='data_uri' and preview_format is set, ComfyUI re-encodes
        the image server-side as a smaller webp or jpeg thumbnail.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesName of the image file to retrieve
subfolderNoSubfolder within ComfyUI's output directory. Use the subfolder value from comfyui_list_outputs or generation results.
preview_formatNoIf set with response_format='data_uri', request a server-rendered thumbnail in this format instead of the original (smaller payload, lossy).
preview_qualityNoEncoder quality (1-100) for preview_format. Default: 90 when preview_format is set.
response_formatNo'data_uri' to inline the image, or 'url' to return a /view URLdata_uri
base_url_overrideNoOptional override for URL responses; falls back to configured base URL

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses useful behavioral details beyond annotations: it explains the return format (Base64 or URL) and the server-side re-encoding behavior when preview_format is used. Annotations already declare read-only/idempotent safety, so the additional context about response formats and thumbnail generation adds value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a clear opening sentence and a brief Returns section. It is front-loaded and each sentence contributes useful information, though the docstring-style 'Returns:' block is slightly formal but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich schema annotations and output schema, the description covers the essential behavior (download vs URL, preview re-encoding). It is sufficient for an agent to understand the tool's capabilities, though it does not detail edge cases or error conditions, which are not critical here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds a small amount of context about the behavior of response_format='data_uri' and preview_format re-encoding, but does not significantly enhance parameter understanding beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('Download') and resource ('a generated image from ComfyUI'), and mentions the alternative of returning a direct view URL. This distinguishes it from sibling tools like comfyui_list_outputs (which lists images) and comfyui_upload_image (which uploads).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving or downloading generated images, but does not explicitly state when to use this tool versus alternatives (e.g., comfyui_list_outputs for browsing, comfyui_get_workflow_from_image for extracting workflows). The context is clear but there are no explicit exclusions or alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_jobA
Read-onlyIdempotent

Look up a single job by prompt_id across queue + history.

    Returns a flat unified job object with top-level keys: prompt_id, status
    (pending/in_progress/completed/failed/cancelled), timing fields (created_at,
    started_at, completed_at, execution_duration), outputs (when completed),
    and error (when failed). Use this to check on a job that may be queued,
    running, or already finished.

    Note: this replaces the previous /history/{prompt_id} envelope shape
    (`{prompt_id: {...}}`); callers should index fields directly on the
    returned object.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
prompt_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint/idempotentHint annotations by detailing the exact return structure: a unified job object with specific fields (status values, timing fields, outputs, error). It also transparently discloses the breaking change in the envelope shape, which is crucial behavioral context for callers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then logically expands into return shape, usage, and a migration note. Every sentence adds value and the structure is easy to scan. It is slightly longer than minimal but all content is necessary for a tool that replaces a previous API shape.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (single parameter, simple lookup), the description is complete: it explains the operation, the unified return schema (including statuses and error fields), when to use it, and an important backward-incompatibility note. The presence of an output schema further reduces the burden, but the description already covers the essential context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema_description_coverage at 0%, the description does compensate by tying the sole parameter to the lookup action ('by prompt_id'). However, it does not explain what a prompt_id is, how it is created, or its format. The reference in the return keys reinforces its role but adds no syntactic detail. Despite this gap, the single-parameter context makes the meaning reasonably clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair: 'Look up a single job by prompt_id' and further scopes it 'across queue + history.' This clearly distinguishes it from sibling tools like comfyui_list_jobs (listing) and comfyui_get_history (history envelope). The purpose is unambiguous and immediately actionable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states exactly when to use the tool: 'Use this to check on a job that may be queued, running, or already finished.' Additionally, the note about replacing the old /history/{prompt_id} envelope shape gives explicit migration guidance, making the when-not and alternative context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_model_metadataB
Read-onlyIdempotent

Get metadata for a model file.

    Args:
        folder: Model folder type (checkpoints, loras, vae, etc.)
        filename: Name of the model file
    
ParametersJSON Schema
NameRequiredDescriptionDefault
folderYes
filenameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is known. However, the description adds no additional behavioral context, such as what the metadata contains, potential errors, or rate limits. It simply restates the function name and arguments, providing no value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: a one-sentence purpose followed by a two-item argument list. It is front-loaded with the key verb phrase and uses a clean, structured format. Every sentence earns its place without unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two string parameters, an output schema, and rich annotations, the description is mostly sufficient. It explains the purpose and parameters clearly. However, it lacks any usage context or behavioral details (e.g., what metadata fields are returned), though the output schema likely covers return values. Overall, it is complete enough for a basic metadata getter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the description compensates by explaining both parameters: folder is 'Model folder type (checkpoints, loras, vae, etc.)' and filename is 'Name of the model file.' The folder examples (checkpoints, loras, vae) add practical meaning beyond the raw schema, making the parameters more understandable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Get metadata for a model file.' It specifies the resource (model file) and the verb (get), which is unambiguous. However, it does not explicitly differentiate this from sibling tools like comfyui_list_models or comfyui_get_model_presets, so it lacks sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. It only lists the arguments, which implies the user needs to supply folder and filename but gives no context about the typical use case or when other tools might be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_model_presetsA
Read-onlyIdempotent

Get recommended generation presets for a model family.

    The presets are static data baked into this MCP — they reflect
    community best-practice defaults, not anything the connected ComfyUI
    server reports. At least one of ``model_name`` or ``model_family``
    must be supplied; if both are given, ``model_family`` takes
    precedence and ``model_name`` is ignored.

    Args:
        model_name (required if ``model_family`` is omitted): Model
            filename to auto-detect the family from (e.g.
            ``sd_xl_base_1.0.safetensors`` → ``sdxl``). Used as a
            fallback when ``model_family`` is empty.
        model_family (required if ``model_name`` is omitted): Explicit
            family identifier. Valid values: ``sd15``, ``sdxl``,
            ``flux``, ``sd3``, ``cascade`` (aliases like ``sd1.5``,
            ``stable-diffusion-xl``, ``flux.1``, ``sd3.5``,
            ``stable-cascade`` are also accepted).

    Returns:
        Dict ``{"family": "<id>", "recommended": {<settings>}}`` where
        ``recommended`` always contains the keys ``sampler`` (str),
        ``scheduler`` (str), ``steps`` (int), ``cfg`` (float),
        ``resolution`` (str like ``"1024x1024"``), ``clip_skip`` (int),
        and ``notes`` (str). Callers that only need the settings can
        read ``result["recommended"]`` directly.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
model_nameNo
model_familyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly, idempotent, non-destructive), the description adds valuable behavioral detail: presets are baked into the MCP rather than fetched from the ComfyUI server, model_family takes precedence when both args are supplied, and the exact shape of the return value is specified. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a short summary, Args section, and Returns section. Every sentence adds useful information—precedence, static data source, return keys—without redundancy or filler. It is detailed but appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for this tool: it covers purpose, data source, parameter semantics, edge-case precedence, and return format. Even though an output schema exists, the description's explicit return structure helps callers know exactly which keys are available.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides no descriptions (0% coverage), so the description fully compensates by explaining each parameter, including valid family identifiers, accepted aliases, requiredness conditions, and an example filename-to-family mapping. This is far beyond baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-object pair: 'Get recommended generation presets for a model family.' This clearly distinguishes it from sibling tools like comfyui_get_model_metadata or comfyui_get_prompting_guide by stating exactly what resource it returns and for what purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool: it returns static community presets and requires at least one of model_name or model_family, with precedence rules. However, it does not explicitly mention when not to use it or name alternative tools, so it stops short of the highest bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_node_infoA
Read-onlyIdempotent

Get the input/output schema and metadata for a single ComfyUI node type.

    Returns a dict with keys: input, input_order, is_input_list, output,
    output_is_list, output_name, name, display_name, description, python_module,
    category, output_node, search_aliases, plus optional flags like deprecated,
    experimental, and api_node when set on the node.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
node_classYesNode class name (e.g. 'KSampler', 'CLIPTextEncode'). Use comfyui_list_nodes to discover available class names.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds useful context about the return dict and optional flags like deprecated and experimental, without contradicting any annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a clear front-loaded purpose sentence followed by a compact enumeration of return keys. Every sentence contributes value with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only info tool, the description fully covers the return structure and the parameter, and it is supported by strong annotations and schema. No gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the parameter description includes an example and a pointer to list_nodes. The tool description itself adds no additional parameter semantics, so it meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves input/output schema and metadata for a single ComfyUI node type, using the specific verb 'Get' and a specific resource. This distinguishes it from siblings like comfyui_list_nodes (which lists all nodes) and comfyui_get_model_metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for single-node lookups but does not explicitly state when to use it over alternatives. The schema hint about using comfyui_list_nodes to discover class names is helpful, but it is not part of the description text itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_progressA
Read-onlyIdempotent

Get the current execution progress for a workflow via HTTP.

    Returns status (queued/running/completed/error/unknown), queue position,
    and output files when available. Step progress and current node are only
    available when using wait=True on run_workflow/generate_image (WebSocket).

    Args:
        prompt_id: The prompt_id returned by run_workflow or generate_image.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
prompt_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a read-only, idempotent, non-destructive operation. The description adds useful context: it returns status, queue position, and output files when available, and clarifies that step-level detail is inaccessible via this endpoint—information not captured by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the primary action and return summary, and each sentence adds value. The Args section is slightly redundant with the schema but adds the origin detail. Overall efficient with minimal fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the core behavior, return contents, and the key WebSocket limitation, which is sufficient for a simple progress getter with an output schema. Could elaborate on error/unknown status meanings, but the status list is already explicit. Adequate for agent invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only lists 'prompt_id' as a string with zero description coverage. The description compensates by explaining that prompt_id is the one returned by run_workflow or generate_image, giving the agent crucial provenance and usage context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool fetches workflow execution progress via HTTP, using a specific verb and resource. It also distinguishes itself from sibling tools by mentioning the WebSocket limitation, setting it apart from get_queue, get_history, and get_job.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when this tool is appropriate (basic progress via HTTP) and when to use an alternative (wait=True on run_workflow/generate_image for step progress and current node via WebSocket). This is a clear when/when-not/alternative framing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_prompting_guideA
Read-onlyIdempotent

Get the prompting guide for a model family.

    The guide is static data baked into this MCP — it gives stylistic
    and structural advice tuned to each family (prompt structure,
    weighting syntax conventions, recommended quality tags, negative
    prompt tips). It does not reflect the connected ComfyUI server's
    installed models or state.

    Args:
        model_family (required): Family identifier. Valid values:
            ``sd15``, ``sdxl``, ``flux``, ``sd3``, ``cascade`` (aliases
            like ``sd1.5``, ``stable-diffusion-xl``, ``flux.1``,
            ``sd3.5``, ``stable-cascade`` are also accepted).

    Returns:
        Dict ``{"family": "<id>", "guide": {<advice>}}`` where ``guide``
        always contains the keys ``prompt_structure`` (str),
        ``weight_syntax`` (str), ``quality_tags`` (list[str]), and
        ``negative_prompt_tips`` (str). Callers that only need the
        advice can read ``result["guide"]`` directly.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
model_familyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only, idempotent, and non-destructive. The description adds that the data is baked into the MCP and always returns a guide with specific keys, and advises reading result['guide'] directly, which clarifies the return behavior beyond the annotations. It does not describe error handling for invalid family identifiers, but the parameter guidance mitigates that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with a one-sentence summary, a short explanatory paragraph, and labeled Args/Returns sections. Every sentence adds either purpose, context, or parameter guidance without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that this is a simple static lookup tool with one parameter, the description covers the parameter values, the static nature, and the exact return shape. It even includes a usage tip for reading the guide directly, making it sufficiently complete for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides only the parameter name and title with no description or enum, so schema coverage is 0%. The description compensates by listing all valid family identifiers and accepted aliases (sd15, sdxl, flux, etc.), giving the agent actionable syntax and exact accepted values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Get the prompting guide for a model family,' which combines a specific verb and resource. It further clarifies that the guide is static and separate from server state, distinguishing it from sibling tools like get_model_metadata or get_server_features.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides the context that this tool returns static data and explicitly notes that it does not reflect the connected server's installed models or state. This tells the agent when not to expect dynamic information, but it does not name alternative tools for server-specific data, so the guidance is helpful but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_queueA
Read-onlyIdempotent

Get the current ComfyUI execution queue state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to repeat safety behaviors. It adds only the context 'current' to imply a point-in-time snapshot, which is a slight enrichment, but it does not disclose additional behavioral details. This is consistent with annotations, so no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no fluff. Every word earns its place, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only tool, the description is largely sufficient, especially with an output schema covering return values. However, the lack of disambiguation from comfyui_get_queue_status creates a minor completeness gap, leaving the agent to guess which queue-related tool is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, the schema coverage is trivially 100%, and the baseline is 4. The description adds no parameter details, but none are needed since there are no parameters to explain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and identifies the resource as 'the current ComfyUI execution queue state', which clearly states what the tool does. It is not a tautology and is distinguishable from siblings like comfyui_clear_queue or comfyui_interrupt, despite potential ambiguity with comfyui_get_queue_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as comfyui_get_queue_status or comfyui_get_progress. There is no mention of use cases, prerequisites, or exclusions, leaving the agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_queue_statusA
Read-onlyIdempotent

Get detailed queue status including currently running and pending prompts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds that it returns running and pending prompts but no further behavioral context such as response format or latency. Annotations carry most of the responsibility here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with a clear verb-first structure. It front-loads the purpose and contains no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (no parameters, output schema present, annotations for safety), the description is sufficient. A minor gap exists in not differentiating from 'comfyui_get_queue', but the core purpose is well-covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so schema coverage is trivially 100%. The baseline for zero-parameter tools is 4, and the description does not need to add parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('Get') and resource ('queue status') and clearly states the inclusion of running and pending prompts. However, it does not explicitly distinguish from the sibling 'comfyui_get_queue', which is likely a simpler variant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'comfyui_get_queue' or 'comfyui_get_progress'. The description simply states what the tool does without any context on selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_server_featuresA
Read-onlyIdempotent

Get the feature flags advertised by the ComfyUI server.

    Returns the raw ``/features`` response — typically a dict of
    {feature_name: bool}. Useful for capability-based branching, e.g.
    checking ``supports_preview_metadata`` before requesting preview-format
    images via ``comfyui_get_image``.
    
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds the raw response format ('typically a dict of {feature_name: bool}') and notes it returns the raw `/features` response without post-processing. This goes beyond the annotations by revealing the exact response shape and the 'raw' nature, which helps set expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first line states the core purpose, the second adds the return format, and a third sentence provides a directed usage example. Every sentence earns its place, with no redundancy or filler. Code formatting (`/features`, `{feature_name: bool}`, `supports_preview_metadata`) improves readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple zero-parameter tool with strong annotations and a clear description that fully explains the return type and provides a motivating use case. The description is complete for an agent to select and invoke the tool correctly without needing additional context. The presence of an output schema also reduces the need to document return values further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the schema carries no parameter information and the description needs no parameter explanations. The baseline for 0 params is 4, and the description appropriately avoids inventing parameters while still mentioning the output shape and usage context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Get the feature flags advertised by the ComfyUI server' — a specific verb ('Get'), a clear resource ('feature flags' from the server), and it distinguishes this from sibling tools like comfyui_get_system_info by focusing on feature flags. The exact endpoint `/features` and the 'dict of {feature_name: bool}' structure further clarify the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly frames when to use the tool: 'Useful for capability-based branching' and gives a concrete example involving `comfyui_get_image`. It does not explicitly state when not to use it or name alternative tools for exclusion, but the context is clear enough that an agent can decide appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_system_infoA
Read-onlyIdempotent

Return sanitized ComfyUI system information.

    Returns a whitelist-filtered subset of system stats useful for making
    generation decisions: GPU VRAM, queue depth, and ComfyUI version.
    Sensitive fields (hostname, OS, CPU details, file paths, Python version,
    network interfaces) are deliberately excluded.

    Returns:
        Dictionary with keys: comfyui_version, devices (list of GPU info),
        queue (running/pending counts).
    
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as read-only and idempotent, so the bar is lower. The description adds important behavioral context by explaining that the information is sanitized and whitelist-filtered, with sensitive fields deliberately excluded. This goes beyond the annotations and helps the agent understand privacy and safety aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: it opens with the main purpose, specifies the relevant system stats, and explains excluded sensitive fields. The Returns section is clearly formatted. Every sentence contributes useful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters), the description is complete. It explains both what is returned and what is deliberately excluded, providing adequate context for an agent to decide to call it. The output schema likely details the return types, so the description does not need to elaborate further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description adds value by describing the return structure (keys like comfyui_version, devices, queue), which indirectly clarifies what the caller can expect, even though parameter semantics are not applicable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns sanitized ComfyUI system information, with a specific verb and resource. It details what is included (GPU VRAM, queue depth, ComfyUI version) and excluded (sensitive fields), which distinguishes it from siblings like comfyui_get_queue_status and comfyui_get_server_features, though it does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: it is 'useful for making generation decisions'. It does not explicitly state when not to use it or name alternatives, but the context is sufficient to infer appropriate use cases. No exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_get_workflow_from_imageA
Read-onlyIdempotent

Extract embedded workflow and prompt metadata from a ComfyUI-generated PNG.

    ComfyUI embeds the full workflow JSON and prompt data in PNG text chunks.
    This enables extracting the exact settings used to generate an image
    for inspection or re-execution.

    Args:
        filename: Name of the PNG file to extract metadata from
        subfolder: Subfolder within ComfyUI's output directory (default: empty)

    Returns:
        Dict with 'workflow' (parsed JSON or None), 'prompt' (parsed JSON or None),
        and 'message' (human-readable status).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYes
subfolderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only and non-destructive behavior. The description adds value by explaining the underlying mechanism ('ComfyUI embeds the full workflow JSON and prompt data in PNG text chunks') and detailing return values (workflow/prompt parsed JSON or None, plus a message). This goes beyond the annotation hints, though it does not discuss error handling or edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a summary paragraph, a short explanation of why, and a clean Args/Returns layout. Every sentence contributes necessary detail; there is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the presence of output schema plus annotations, the description is complete. It explains the parameters, return shape, and purpose. No critical information is missing for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the Args section provides meaningful definitions: filename is 'Name of the PNG file to extract metadata from', and subfolder is 'Subfolder within ComfyUI's output directory (default: empty)'. This fully compensates for the missing schema descriptions and clarifies the expected path semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Extract embedded workflow and prompt metadata from a ComfyUI-generated PNG', which is a specific verb and resource. It clearly differentiates from siblings like comfyui_get_model_metadata and comfyui_get_image by focusing on embedded workflow extraction. The phrase 'for inspection or re-execution' further clarifies why this tool exists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear context: 'This enables extracting the exact settings used to generate an image for inspection or re-execution.' This implies when to use the tool but does not explicitly mention alternatives or when-not-to-use conditions. Because alternatives are not named, it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_inpaint_imageA

Inpaint regions of an image using a mask and text prompt.

    Both the input image and mask must already be uploaded via
    comfyui_upload_image/comfyui_upload_mask.
    White regions in the mask indicate areas to regenerate.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
cfgNoClassifier-free guidance scale
maskYesMask image filename (white=inpaint, black=keep)
waitNoIf True, block until complete and return result
imageYesFilename of the image in ComfyUI's input directory
modelNoCheckpoint model name (leave empty for default)
stepsNoNumber of sampling steps
promptYesText description for the inpainted region
strengthNoHow much to deviate from the input image
negative_promptNoWhat to avoid in the outputbad quality, blurry

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the useful precondition about prior uploads and clarifies mask semantics. However, it does not disclose asynchronous behavior or output handling beyond what the 'wait' parameter already describes. Annotations include readOnlyHint=false and destructiveHint=false, and the description does not contradict these, so the additional behavioral context is moderate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the main action. The three sentences are efficient, though the mask white-region note slightly duplicates the schema's parameter description. Overall, it is concise and structured logically: purpose, prerequisite, mask interpretation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (9 params, output schema present) and annotations, the description provides the essential operational context: the upload prerequisite and mask meaning. The wait behavior and model selection are covered by the schema. This is adequate for a well-documented tool, though a note about asynchronous default could further improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage across all 9 parameters. The tool description mostly reiterates mask semantics ('White regions in the mask indicate areas to regenerate') that are already in the schema. Since the schema fully documents each parameter, the description adds minimal extra parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb+resource: 'Inpaint regions of an image using a mask and text prompt.' This clearly defines the tool's purpose and distinguishes it from sibling image tools like comfyui_generate_image or comfyui_upscale_image by emphasizing mask-based inpainting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear prerequisite: both image and mask must already be uploaded via comfyui_upload_image/comfyui_upload_mask. This tells the agent the necessary setup step, though it does not explicitly mention when not to use this tool or when an alternative like comfyui_transform_image would be preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_install_custom_nodeA

Install a custom node pack from the ComfyUI Manager registry.

    Args:
        node_id: Node pack ID from the registry (use search_custom_nodes to find IDs).
        version: Specific version to install (empty string = latest).
        restart: If True, restart ComfyUI after install and run a security audit
                 on all installed nodes. If False, manual restart is needed.

    Returns:
        Status message. If restart=True, includes security audit results.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
node_idYesCustom-node pack ID from the ComfyUI Manager registry. Use comfyui_search_custom_nodes to discover IDs.
restartNoIf True, restart ComfyUI after install and run a security audit.
versionNoSpecific version to install. Empty string = latest.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description details key behaviors beyond annotations: the restart option triggers a security audit, and if False a manual restart is needed. It also explains the return value includes audit results when restart=True. This significantly increases transparency for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with purpose, Args, and Returns sections. Every line provides meaningful guidance, and the format is easy to parse. No unnecessary repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters, an output schema, and annotations, the description is complete. It covers the action, parameters, behavioral differences, and return format, leaving no critical gaps for an agent to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are well-documented already. The description adds extra value by pointing to search_custom_nodes for node_id discovery and clarifying the consequence of restart=False, going beyond the schema's descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool installs a custom node pack from the ComfyUI Manager registry, using a specific verb and resource. It distinguishes from siblings like uninstall/update by naming the 'install' action and registry source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool (installing from registry) and even references 'use search_custom_nodes to find IDs' as a prerequisite. However, it doesn't explicitly mention alternatives or when-not conditions, though the purpose statement is sufficient for basic selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_interruptA
DestructiveIdempotent

Interrupt the currently executing workflow.

    Without prompt_id: global interrupt — stops whatever is running now.
    With prompt_id: targeted — only interrupts if that prompt is the
    running one. ComfyUI silently no-ops if prompt_id is queued but
    not yet running.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
prompt_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (destructive, idempotent), the description discloses specific behavioral traits: the global vs. targeted interruption scope and the silent no-op for queued-but-not-running prompts. This is exactly the kind of context that helps an agent predict side effects. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured with clear bullet-like lines distinguishing the two modes. Every sentence contributes essential information with no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is fully self-contained for a tool with one optional parameter and an output schema. It covers the main behavior, both modes, and the edge case of queued prompts, making it complete for effective selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description fully compensates by explaining the meaning and effect of prompt_id: absence triggers global interrupt, presence triggers targeted interrupt, and the queued-but-not-running case. This adds significant value beyond the bare schema field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Interrupt the currently executing workflow.' It specifies two modes (global and targeted) which distinguishes it from sibling tools like cancel_job or clear_queue. The verb+resource structure is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use each mode ('Without prompt_id: global interrupt', 'With prompt_id: targeted'), including an important caveat about queued prompts silently no-opping. It does not explicitly mention alternative tools, but it offers clear usage context within the tool itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_list_extensionsA
Read-onlyIdempotent

List installed ComfyUI extensions (front-end / back-end JavaScript modules registered with the ComfyUI server).

    Returns a paginated envelope: ``{items, total, offset, limit, has_more}``.
    Each item is the extension's URL/path string.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1-100, default varies by tool).
offsetNoZero-based starting index for pagination.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent safety. Description adds the paginated envelope structure and item type, providing useful behavioral context beyond what annotations declare.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with purpose and return format. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity list tool with rich annotations and output schema, the description is complete: it states what is listed, the return envelope fields, and the item type. No major gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both limit and offset with descriptions, and the description mentions pagination envelope. No additional parameter semantics beyond schema, so baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'List installed ComfyUI extensions' with a specific resource and scope. Differentiates from sibling list tools by specifying 'front-end / back-end JavaScript modules registered with the ComfyUI server.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit alternatives or when-not-to-use guidance, but the description implies usage for querying installed extensions. Lacks exclusions compared to high-calibration example.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_list_jobsA
Read-onlyIdempotent

List jobs across queue and history with filtering, sorting, and pagination.

    Returns {"jobs": [...], "pagination": {"offset", "limit", "total", "has_more"}}.
    Each job includes prompt_id, status (pending/in_progress/completed/failed/cancelled),
    timing, and outputs (when completed).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax jobs to return.
offsetNoJobs to skip for pagination.
statusNoFilter by job status (any combination).
sort_byNoSort field.created_at
sort_orderNoSort direction.desc
workflow_idNoFilter by workflow ID set in extra_data.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds valuable behavioral context by documenting the return structure, job fields (prompt_id, status, timing, outputs), and pagination response, which go beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, immediately states the core function, and adds return format details without any redundant text. Every sentence earns its place, making it both concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool, the description covers the core behavior, return format, job fields, and pagination. It does not mention potential edge cases like empty results or large datasets, but the output schema and high schema coverage reduce the burden on the description. Overall, it is sufficiently complete for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 6 parameters have descriptions in the schema (100% coverage), so the schema already documents each parameter thoroughly. The description only provides a high-level summary of filtering, sorting, and pagination without adding new meaning beyond the parameter descriptions, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' with resource 'jobs' and explicitly scopes 'across queue and history' with filtering, sorting, and pagination. This clearly distinguishes it from sibling tools like comfyui_get_queue (queue only) and comfyui_get_history (history only).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the tool lists jobs across both queue and history, providing clear context for when to use it. However, it does not explicitly name alternatives or state when not to use it, though the scope language makes the differentiation from similar tools implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_list_model_foldersA
Read-onlyIdempotent

List the model-folder types ComfyUI recognizes (checkpoints, loras, vae, controlnet, etc.). Pass any returned name as the folder argument to comfyui_list_models or comfyui_get_model_metadata.

    Returns a paginated envelope: ``{items, total, offset, limit, has_more}``.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1-100, default varies by tool).
offsetNoZero-based starting index for pagination.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, non-destructive, idempotent behavior. The description adds useful behavioral context by disclosing the paginated envelope format and the tool's role as a precursor to other operations. There is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences deliver the tool's purpose, chaining guidance, and return shape with zero redundancy. The description is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation, the description combined with the annotations and output schema gives complete context: what it returns, how to paginate, and how to integrate with related tools. No important gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, with both `limit` and `offset` fully described in the schema. The description does not add extra parameter semantics, but none are necessary given the complete schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List the model-folder types ComfyUI recognizes', and gives concrete examples (checkpoints, loras, vae, controlnet). It clearly differentiates from sibling tools by focusing on folder types rather than models, and even names the downstream tools that consume its output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly explains how to use the output: pass any returned name as the `folder` argument to `comfyui_list_models` or `comfyui_get_model_metadata`. This provides clear context for when to use this tool, though it does not discuss exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_list_modelsA
Read-onlyIdempotent

List available models in a folder (checkpoints, loras, vae, etc.).

    Args:
        folder: Model folder type (checkpoints, loras, vae, etc.)
        limit: Maximum number of results to return (default: 25, max: 100)
        offset: Starting index for pagination (default: 0)
    
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1-100, default varies by tool).
folderNocheckpoints
offsetNoZero-based starting index for pagination.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds pagination details and folder scoping, but these are already present in the schema. No additional behavioral traits (e.g., sorting, response format) are disclosed beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description has a concise one-sentence summary followed by a structured Args block. It is appropriately sized, though the Args section repeats default values already present in the schema. Overall efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with an output schema, the description covers purpose and parameters sufficiently. It could mention that valid folder types can be obtained from comfyui_list_model_folders, but this is not essential for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explicitly explains the 'folder' parameter with examples, which is missing from the input schema. It also restates limit and offset details, slightly duplicating the schema, but the added folder semantics compensate for the schema's 67% coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear verb-resource pair: 'List available models in a folder' with examples of folder types (checkpoints, loras, vae). This clearly distinguishes it from sibling tool comfyui_list_model_folders, which lists folder names rather than models.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through the 'folder' parameter but does not explicitly state when to use this tool versus alternatives like comfyui_search_models or comfyui_list_model_folders. No exclusions or alternative recommendations are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_list_nodesA
Read-onlyIdempotent

List all available ComfyUI node types.

    Args:
        limit: Maximum number of results to return (default: 25, max: 100)
        offset: Starting index for pagination (default: 0)
    
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1-100, default varies by tool).
offsetNoZero-based starting index for pagination.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds no additional behavioral context beyond 'all available' and pagination, which is already implied by the schema. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the core purpose, and includes a clearly formatted Args block. Every sentence serves a purpose, and the redundancy with schema is minimal and harmless.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple read-only listing tool with complete schema coverage, rich annotations, and an output schema. The description sufficiently covers the tool's behavior and parameters; no additional information is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with detailed descriptions for limit and offset, including defaults and bounds. The description repeats these details without adding deeper semantic meaning, so it meets the baseline but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List all available ComfyUI node types' with a specific verb ('list') and resource ('node types'). This distinguishes it from sibling listing tools like comfyui_list_models and comfyui_list_workflows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: use this tool to list node types, with pagination parameters. However, it does not explicitly mention alternatives or when not to use it (e.g., for detailed node info, use comfyui_get_node_info). The lack of exclusions is the only gap from a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_list_outputsA
Read-onlyIdempotent

List output files from ComfyUI's execution history.

    Args:
        limit: Maximum number of results to return (default: 25, max: 100)
        offset: Starting index for pagination (default: 0)

    Returns:
        JSON envelope with paginated list of objects with 'filename' and
        'subfolder' keys. Pass these values to comfyui_get_image to retrieve files.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1-100, default varies by tool).
offsetNoZero-based starting index for pagination.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds valuable context: pagination via limit/offset, the JSON envelope with filename/subfolder keys, and the relationship to comfyui_get_image. It doesn't cover edge cases or error behavior, but it goes beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear first sentence followed by Args and Returns sections. It is scannable and not overly verbose, though the Args section repeats information already present in the schema. Overall it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple paginated listing tool, the description is complete: it covers purpose, pagination parameters, return envelope structure, and the next step to retrieve files. The presence of an output schema and strong annotations reduces the burden on the description. Minor gaps like clarifying what counts as an 'output' or how history is scoped are not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both limit and offset are fully described in the schema. The description repeats the default values and semantics but adds no additional parameter-level meaning. Baseline 3 is appropriate since the schema carries the descriptive burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'List output files from ComfyUI's execution history.' It differentiates from siblings like comfyui_get_image by noting it returns metadata (filename/subfolder) rather than the files themselves, and from list_models/list_workflows by focusing on execution history outputs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for when to use the tool (listing output files from execution history) and explicitly directs the caller to use comfyui_get_image with the returned keys to retrieve actual files. However, it doesn't explicitly state alternatives or when not to use the tool, such as when history details are needed from comfyui_get_history.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_list_workflowsA
Read-onlyIdempotent

List workflow templates registered on the ComfyUI server (the /workflow_templates endpoint, populated by installed front-end packages).

    This is distinct from ``comfyui_create_workflow``'s built-in template names
    (txt2img, img2img, etc.) which are hard-coded in the MCP for graph generation.

    Returns a paginated envelope: ``{items, total, offset, limit, has_more}``.
    Each item is ``{"package": str, "templates": [...]}`` from the server.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1-100, default varies by tool).
offsetNoZero-based starting index for pagination.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey read-only and safe behavior, and the description adds valuable context: the exact endpoint, the paginated response envelope, and the per-item structure. This goes beyond the schema and annotations to set accurate expectations about the return payload.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized into four concise sentences, each serving a purpose: listing the core action, giving endpoint context, distinguishing from a sibling, and describing the response. No filler or redundancy is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, strong annotations, complete parameter schema, and presence of an output schema, the description fully covers what an agent needs to select and invoke it correctly. It explains the source, the distinction from related functionality, and the return shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for limit and offset, so the baseline applies. The description mentions pagination and the response envelope, which indirectly relates to these parameters, but it does not add detail beyond what the schema already provides. It is adequate but not additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List workflow templates registered on the ComfyUI server.' It also distinguishes this from comfyui_create_workflow's hard-coded template names, which prevents confusion with a sibling tool. The intent is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly calls out the difference from comfyui_create_workflow's built-in templates, giving the agent a clear rule for when to use this tool instead. The endpoint context ('/workflow_templates', populated by installed packages) also clarifies the tool's scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_modify_workflowA
Read-onlyIdempotent

Apply batch operations to a ComfyUI workflow.

    Operations execute sequentially in array order. If any operation fails,
    the call raises ``ValueError`` and the input workflow is left
    unmodified (atomic — operations are applied to a deep copy).

    Args:
        workflow (required): JSON string of the workflow to modify.
        operations (required): JSON string of an array of operation objects.

    Operation reference:

    - ``add_node`` — append a new node. Fields:
      ``{"op": "add_node", "class_type": "<NodeType>",
         "node_id": "<id>" (optional, auto-assigned if omitted),
         "inputs": {...} (optional default inputs)}``
    - ``remove_node`` — drop a node. Fields:
      ``{"op": "remove_node", "node_id": "<id>"}``
    - ``set_input`` — set or replace a single input value. Fields:
      ``{"op": "set_input", "node_id": "<id>",
         "input_name": "<key>", "value": <any>}``
    - ``connect`` — wire one node's output into another's input. Fields:
      ``{"op": "connect", "from_node": "<id>", "from_output": <int>,
         "to_node": "<id>", "to_input": "<key>"}``
    - ``disconnect`` — clear an existing input connection. Fields:
      ``{"op": "disconnect", "node_id": "<id>", "input_name": "<key>"}``

    Example:
        ``operations='[{"op": "set_input", "node_id": "3",
        "input_name": "steps", "value": 50},
        {"op": "add_node", "class_type": "LoraLoader"}]'``
    
ParametersJSON Schema
NameRequiredDescriptionDefault
workflowYes
operationsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false), the description discloses key behaviors: operations execute sequentially, any failure raises ValueError, the input workflow is left unmodified because operations are applied to a deep copy (atomic). This significantly adds context and aligns with the annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with a summary, behavior notes, parameter definitions, an operation reference, and an example. Every section earns its place; it is long but appropriately detailed for the complexity, and the main purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is complex due to the operation format, but the description covers all operations, error handling, atomicity, and includes a concrete example. An output schema exists, so return semantics need not be explained. The description is fully self-contained for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description fully compensates by explaining both parameters: workflow is a JSON string and operations is a JSON string of an array of operation objects. It also details each operation type with fields and provides an example, making the parameter semantics exceptionally clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Apply batch operations to a ComfyUI workflow', specifying the action (apply), the resource (workflow), and the scope (batch operations). It also distinguishes this tool from siblings like comfyui_create_workflow, comfyui_run_workflow, and comfyui_validate_workflow by focusing on modification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool (modifying workflows via batch operations) and detailed operational guidance, but it does not explicitly mention when not to use it or name alternative tools. The sequential/atomic behavior informs how operations are applied, but no exclusions or alternatives are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_run_workflowA

Submit an arbitrary ComfyUI workflow for execution.

    See also: comfyui_run_workflow_stream for a streaming variant that emits
    per-node progress events while the workflow executes.

    Args:
        workflow: JSON string of a ComfyUI workflow (API format).
                  Each key is a node ID, each value has 'class_type' and 'inputs'.
        wait: If True, block until execution completes and return structured result
              with status, outputs, and elapsed time. If False (default), return
              immediately with just the prompt_id.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
waitNo
workflowYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses important behavioral details beyond annotations: the tool can block until completion (wait=True) and return structured results with status, outputs, and elapsed time, or return immediately with only a prompt_id (wait=False). It does not contradict any annotations and adds useful context about execution behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly written: a one-sentence purpose, a single 'See also' note, and a structured Args section. Every sentence adds value with no repetition of schema details or unnecessary filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is moderately complex (executing arbitrary workflows) and the description covers parameters, wait behavior, and return variants. The presence of an output schema lightens the need to explain return values. Missing some edge-case context like error handling or side effects, but it is reasonably complete for an execution tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description fully compensates. It explains the workflow parameter's structure ('JSON string of a ComfyUI workflow (API format). Each key is a node ID, each value has class_type and inputs') and describes the wait parameter's effect and default value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb and resource: 'Submit an arbitrary ComfyUI workflow for execution.' This clearly states the tool's function and distinguishes it from the streaming variant by naming 'comfyui_run_workflow_stream' as a variant that emits per-node progress events.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides an alternative: 'See also: comfyui_run_workflow_stream for a streaming variant...' This tells the agent when to consider the sibling tool instead. It also explains the wait parameter's behavior, giving clear context for choosing synchronous vs. asynchronous execution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_run_workflow_streamA

Submit a ComfyUI workflow and return websocket stream events plus final status.

    Uses ComfyUI's websocket stream endpoint internally to capture per-event
    execution updates (for example, `progress`, `executing`, `executed`).
    Events are filtered by `prompt_id` when that field is present in the
    websocket payload.

    See also: comfyui_run_workflow for a non-streaming variant. Use this
    streaming version when you need real-time per-node progress events
    (intended for tooling that surfaces progress to a user); use the
    non-streaming variant for fire-and-forget submission or when you only
    need the final result.

    Args:
        workflow: JSON string of a ComfyUI workflow (API format).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
workflowYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint=false, idempotentHint=false) already signal that this is a mutating, non-idempotent operation. The description adds behavioral context not present in annotations: it uses a WebSocket stream endpoint, captures per-event updates like 'progress', 'executing', and 'executed', and filters events by 'prompt_id'. It also notes the return type (stream events plus final status). This is valuable, though it does not explain error handling, timeouts, or cancellation, so a 4 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized: a one-sentence summary, followed by technical behavior, usage guidance, and a parameter description. Each sentence serves a distinct purpose, and there is no filler or repetition. Despite being longer than two sentences, every part adds value, making it appropriately concise for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's streaming complexity and the existence of an output schema, the description covers the main aspects: what the tool does, how it works internally (WebSocket), what events are captured, and when to use it. It does not mention potential error conditions, long-running behavior, or how to cancel, but the output schema likely handles return-value details. Overall, it is complete for selecting and invoking the tool correctly, with only minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for the only parameter, `workflow`. The description compensates by specifying 'workflow: JSON string of a ComfyUI workflow (API format).' This adds key meaning beyond the schema by clarifying the required format (JSON string) and the format variant (API format), which is essential for correct use. A higher score would require more detail like examples or constraints, but for a single param this is solid.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear statement: 'Submit a ComfyUI workflow and return websocket stream events plus final status.' This specifies the verb (submit), resource (ComfyUI workflow), and output (stream events + final status), and it distinguishes the tool from its sibling comfyui_run_workflow by explicitly mentioning the streaming nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool versus the alternative: 'Use this streaming version when you need real-time per-node progress events... use the non-streaming variant for fire-and-forget submission or when you only need the final result.' This names the alternative and clarifies the intended use cases, fully satisfying the dimension.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_search_custom_nodesA
Read-onlyIdempotent

Search installed custom node packs by name, description, or author.

    Args:
        query: Search term to match against installed node pack metadata.
        limit: Maximum number of results to return (default: 10, max: 25)
        offset: Starting index for pagination (default: 0)

    Returns:
        JSON with matching node packs including name, description, author,
        install status, version, and ID.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of matches to return (1-25).
queryYesSearch term matched against installed node-pack name, ID, description, and author.
offsetNoZero-based starting index for pagination.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, and the description adds context about the return format (name, description, author, install status, version, ID) and search scope. This goes beyond annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear one-line purpose followed by Args and Returns sections. It is not overly verbose, though the Args section repeats schema details. The main sentence is front-loaded and every section serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with pagination and filters, the description explains the return format and search scope. It covers the essential behavior adequately. Combined with rich annotations and full schema coverage, it is nearly complete, though it could mention what 'install status' entails or pagination limits explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage of all three parameters with descriptions and constraints. The description's Args section mostly duplicates this information, adding no new meaning beyond the schema. Baseline of 3 is appropriate since the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches installed custom node packs by name, description, or author, which is a specific verb+resource+scope. It distinguishes itself from sibling tools like list_extensions or get_custom_node_status by focusing on search functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for finding installed packages matching a query, but does not explicitly mention when to use this versus alternatives like listing all extensions or checking status. There are no exclusion criteria or alternative tool references, so it is adequate but lacks explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_search_modelsA
Read-onlyIdempotent

Search for models on HuggingFace or CivitAI.

    Returns:
        JSON with search results including name, download URL, size, and stats.
        Use comfyui_download_model with the URL to install a model.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (0 for default page size; values above server max are capped)
queryYesSearch query (model name, style, etc.)
offsetNoStarting index for pagination
sourceNoWhere to search — "civitai" or "huggingface"civitai
model_typeNoFilter by type. CivitAI: Checkpoint, LORA, TextualInversion, etc. HuggingFace: text-to-image, etc.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the bar is lower. The description adds meaningful contextual detail beyond annotations: it specifies the external sources (HuggingFace/CivitAI), the return format (JSON with name, URL, size, stats), and the recommended follow-up (download_model). This gives the agent a clear behavioral model, though it does not mention rate limits, authentication, or the fact that only one source is searched at a time (as implied by the 'source' parameter).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three sentences: a clear purpose statement, a return-value description, and a usage link to the download tool. It is front-loaded with the primary action and has no redundant filler. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with 5 parameters, good annotations, and an output schema, the description is sufficiently complete. It explains what the tool does, what it returns, and how to use the results (with comfyui_download_model). It does not explain default source behavior or pagination nuances, but those are covered by the schema and annotations. Minor gaps exist, but the overall context is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the parameter descriptions in the schema are clear (query, source, limit, offset, model_type). The tool description does not add much beyond what the schema already provides, except for the mention of 'HuggingFace or CivitAI' which maps to the source enum. Since the schema does the heavy lifting, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for models on HuggingFace or CivitAI, with a specific verb ('Search') and resource ('models') plus the external platforms. It distinguishes itself from sibling tools like comfyui_list_models (which lists local models) and explicitly states the return output ('JSON with search results including name, download URL, size, and stats'). This is a specific, unambiguous purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear follow-up action ('Use comfyui_download_model with the URL to install a model'), indicating when this tool is useful in a workflow. However, it does not explicitly state when not to use it or contrast with comfyui_list_models or comfyui_get_model_metadata. The guidance is helpful but lacks explicit exclusions or alternative tool comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_summarize_workflowA
Read-onlyIdempotent

Summarize a ComfyUI workflow's structure, data flow, and key parameters.

Parses the workflow graph, extracts models, parameters, and execution flow. Enriches with display names from the ComfyUI server when available.

ParametersJSON Schema
NameRequiredDescriptionDefault
workflowYesJSON string of a ComfyUI workflow (API format). Each top-level key is a node ID, each value has 'class_type' and 'inputs'.
output_formatNoOutput format: 'text' (human-readable summary) or 'mermaid' (Mermaid flowchart markup).text

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only and idempotent. The description adds useful behavioral detail by noting that it enriches the summary with display names from the ComfyUI server 'when available', implying a conditional server call and fallback. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact but has some redundancy—'key parameters' in the first sentence is echoed by 'extracts models, parameters' in the second. It is structured with a clear lead sentence and supporting bullets, though it could be slightly tightened without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple 2-parameter schema, presence of an output schema, and safety annotations, the description adequately covers the tool's purpose and enrichment behavior. It doesn't need to explain return values because the output schema exists, so it is sufficiently complete for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters are fully documented in the schema with descriptions (100% coverage), so the schema carries the parameter semantics. The tool description does not add parameter-specific details beyond restating 'workflow', so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Summarize a ComfyUI workflow's structure, data flow, and key parameters', which is a clear verb+resource statement. It doesn't explicitly differentiate from sibling tools like comfyui_analyze_workflow or comfyui_validate_workflow, but the summarize verb makes the intended action obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is provided on when to use this tool versus alternatives. The description implies it should be used for obtaining a workflow overview, but it doesn't mention exclusions or alternative tools, so usage context is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_transform_imageA

Transform an existing image using a text prompt (img2img).

    The input image must already be uploaded to ComfyUI via comfyui_upload_image.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
cfgNoClassifier-free guidance scale
waitNoIf True, block until complete and return result
imageYesFilename of the image in ComfyUI's input directory
modelNoCheckpoint model name (leave empty for default)
stepsNoNumber of sampling steps
promptYesText description guiding the transformation
strengthNoHow much to deviate from the input image
negative_promptNoWhat to avoid in the outputbad quality, blurry

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds only the upload prerequisite, which is operational context rather than behavioral disclosure. It does not mention side effects, asynchronous behavior (despite the wait parameter), or what happens to the input image. Annotations already cover readOnly/destructive hints, so this minimal addition provides little extra transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—two sentences, front-loaded with the core purpose. Every word earns its place, and there is no redundancy or filler. This is an example of efficient writing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the schema and annotations cover parameter semantics and safety, the description lacks broader context such as when to prefer this over comfyui_generate_image or comfyui_inpaint_image, or any workflow overview. The upload prerequisite is helpful but the description remains minimal for a tool with 8 parameters and an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 8 parameters have full schema descriptions (100% coverage), so the description is not required to elaborate on parameter meanings. The description itself adds no parameter-specific guidance, but the schema already handles this adequately, making 3 the appropriate baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies a unique action: 'Transform an existing image using a text prompt (img2img).' This distinguishes it from sibling tools like comfyui_generate_image (likely txt2img) and comfyui_inpaint_image (region-specific editing). The verb+resource+method is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states a prerequisite: 'The input image must already be uploaded to ComfyUI via comfyui_upload_image.' This gives clear context for when to use the tool. However, it does not name alternatives or explicitly exclude other tools, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_uninstall_custom_nodeA
Destructive

Uninstall a custom node pack.

    Args:
        node_id: Node pack ID to uninstall.
        restart: If True, restart ComfyUI after uninstall.

    Returns:
        Status message.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
node_idYesCustom-node pack ID to uninstall.
restartNoIf True, restart ComfyUI after uninstall.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds the restart behavior and return type, but does not disclose what files are affected or that removal is permanent. It provides some context beyond annotations but not rich detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with a clear first sentence followed by an Args/Returns section. No waste; every line is informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter destructive tool, the description covers the core action, parameters, and return. However, it lacks explicit warnings about permanence or side effects, though the destructiveHint annotation partially compensates. The output schema is not shown, but the return status message is mentioned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are fully documented in the schema. The description repeats the parameter names and purposes without adding additional meaning or usage details beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Uninstall a custom node pack' with a specific verb and resource. It unambiguously distinguishes from sibling tools like install_custom_node and update_custom_node.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool or when not to. The description does not mention alternatives or prerequisites; usage is only implied by the verb 'uninstall'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_update_custom_nodeA

Update a custom node pack to the latest version.

    Args:
        node_id: Node pack ID to update.
        restart: If True, restart ComfyUI after update and run a security audit
                 on all installed nodes.

    Returns:
        Status message. If restart=True, includes security audit results.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
node_idYesCustom-node pack ID to update to the latest version.
restartNoIf True, restart ComfyUI after update and run a security audit.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate non-read-only and non-idempotent behavior. The description adds valuable context about the restart flag: restarting ComfyUI after update and running a security audit on all installed nodes. It also explains return values, providing transparency beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with Args and Returns sections, and the core purpose is stated first. It is not overly verbose, though the Args section duplicates schema information rather than adding new value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a relatively simple update tool, the description covers purpose, parameters, and return values sufficiently. It does not mention error conditions or prerequisites, but given the schema completeness and the presence of an output schema, it is adequately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with detailed descriptions for both node_id and restart. The description's Args section essentially restates the schema without adding new meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Update a custom node pack to the latest version.' This uses a specific verb ('Update') and resource ('custom node pack'), and it distinctly separates this tool from siblings like install, uninstall, search, and audit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool is for updating custom nodes, but it does not explicitly state when to use it versus alternatives (e.g., installing or uninstalling). There is no mention of prerequisites or exclusions, so the guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_upload_imageA

Upload an image to ComfyUI.

Defaults to ComfyUI's input directory (the destination workflows read from). Set destination='output' or 'temp' only if you have a specific reason.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesName for the uploaded file (e.g. 'reference.png')
overwriteNoIf True, replace any existing file with the same name. If False (default), ComfyUI auto-renames by suffixing ' (N)'.
subfolderNoOptional subfolder within the destination directory
image_dataYesBase64-encoded image data
destinationNoDestination directory. 'input' (default) is where workflows read user-supplied images from; 'output' and 'temp' are usually only useful for testing or scripted setups.input

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate a write operation (readOnlyHint=false) and non-destructive nature (destructiveHint=false), which the description supports by stating it uploads. The description adds context about the input directory being the default and the intended use of output/temp, going beyond what annotations alone convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief, front-loaded with the core action, and uses a bulleted list to convey important notes clearly. No redundancy or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature of the tool, full schema coverage, and existing output schema, the description adequately covers what the tool does and key usage considerations. It includes practical destination guidance without needing to restate return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% description coverage for all parameters, including details about overwrite behavior and destination. The description does not add significant extra meaning, though it does highlight the destination parameter's context with 'destination workflows read from'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Upload an image to ComfyUI' which is a specific verb and resource, clearly distinguishing it from sibling tools like comfyui_upload_mask by name and function. It is concise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides guidance on when to use the default destination ('input') and advises setting other destinations 'only if you have a specific reason.' However, it does not explicitly discuss alternatives or when not to use this tool, such as when uploading a mask would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_upload_maskA

Upload a mask image to ComfyUI.

The mask's alpha channel is merged into the original image's alpha channel by the ComfyUI server. The original image must already exist in ComfyUI. Defaults to ComfyUI's input directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesName for the uploaded mask file (e.g. 'mask.png')
mask_dataYesBase64-encoded mask image data
overwriteNoIf True, replace any existing file with the same name. If False (default), ComfyUI auto-renames by suffixing ' (N)'.
subfolderNoOptional subfolder for the mask file
destinationNoDestination directory. 'input' (default) is where workflows read user-supplied masks from; 'output' and 'temp' are usually only useful for testing or scripted setups.input
original_imageYesFilename of the original image the mask applies to (must already exist in ComfyUI's input directory)
original_subfolderNoOptional subfolder of the original image

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behavioral details beyond the annotations: the server-side merging of the mask's alpha channel into the original image's alpha channel, and the requirement that the original image pre-exists. Annotations already indicate a non-read-only, non-destructive operation, but the description adds meaningful context about how the server processes the upload. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences, front-loaded with the primary purpose. Each sentence adds essential information (action, merge behavior, prerequisite, default directory) without redundant or wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich input schema (7 params, full descriptions, output schema present), the description covers the core behavior and the critical prerequisite. It could be slightly more explicit about error conditions (e.g., what happens if the original image doesn't exist) or relationship to the sibling upload_image tool, but it is sufficient for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with descriptions for all 7 parameters, including defaults and enums. The description only vaguely references the default input directory, which is already documented in the schema. It adds no extra parameter-specific semantics, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Upload a mask image to ComfyUI', a specific verb+resource statement that clearly identifies the tool's function. It further distinguishes itself from sibling tools like comfyui_upload_image by explaining the unique alpha-channel merging behavior and the prerequisite that the original image must already exist.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear contextual prerequisite: 'The original image must already exist in ComfyUI.' This implies when the tool is appropriate. However, it does not explicitly name alternative tools (e.g., comfyui_upload_image) or state when not to use this tool, so it falls short of the explicit when/when-not guidance that would earn a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_upscale_imageA

Upscale an image using a model-based upscaler.

    The input image must already be uploaded to ComfyUI via comfyui_upload_image.
    The scale factor is determined by the upscale model (e.g. RealESRGAN_x4plus = 4x).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
waitNoIf True, block until complete and return result
imageYesFilename of the image in ComfyUI's input directory
upscale_modelNoName of the upscale model file. Use comfyui_list_models with folder='upscale_models' to see available models.RealESRGAN_x4plus.pth

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a write operation (readOnlyHint=false). The description adds context about the upload prerequisite and model-determined scale factor, which is valuable. However, it does not disclose other behavioral aspects such as whether it runs asynchronously, where the output is stored, or any side effects beyond what the annotations and schema imply. With annotations present, the description offers moderate additional transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, consisting of three short sentences that each carry essential information: the action, the prerequisite, and the model-determined scale factor. It is front-loaded with the primary verb and contains no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters, an output schema, and annotations, the description covers the critical workflow steps: upload first, then upscale, with model selection influencing the result. Some minor gaps exist (e.g., where the result is stored, async behavior), but the schema and output schema fill most of these; the description is largely complete for a simple upscale operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers all parameters (coverage 100%), so the baseline is 3. The description enhances parameter understanding by explaining that the upscale model determines the scale factor (e.g., RealESRGAN_x4plus = 4x) and that the image must be pre-uploaded. This goes beyond the schema descriptions, adding meaningful context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Upscale an image using a model-based upscaler'), clearly identifying the tool's function. It distinguishes this from sibling tools by emphasizing model-based upscaling and the prerequisite of prior upload, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states a key prerequisite: the image must already be uploaded via comfyui_upload_image. It also explains that the scale factor is determined by the selected model, helping the agent understand the tool's behavior. However, it does not explicitly mention alternative tools or when not to use this tool, stopping short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_validate_workflowA
Read-onlyIdempotent

Validate a ComfyUI workflow for structural correctness and security.

    Checks: node structure, connection references, installed node types,
    available models, dangerous nodes, and suspicious inputs.

    Args:
        workflow (required): JSON string of the workflow to validate.

    Returns:
        Dict with keys:

        - ``valid`` (bool): True only if there are zero entries in ``errors``.
        - ``errors`` (list[str]): blocking issues — invalid structure,
          connections that reference nonexistent nodes, ``class_type``
          not installed on the connected server, missing required
          inputs, security blocks, etc. Each entry is a human-readable
          string identifying the offending node id and what's wrong.
        - ``warnings`` (list[str]): non-blocking concerns — missing model
          files, dangerous node names, suspicious input patterns
          (e.g. ``__import__``), or a server-unreachable note when the
          installed-class_type check has to be skipped.
        - ``node_count`` (int): number of nodes in the workflow.
        - ``pipeline`` (str): coarse type — one of ``txt2img``,
          ``img2img``, ``upscale``, ``img2img -> upscale``,
          ``txt2img -> upscale``, or ``unknown``. (For the full
          structural breakdown, use ``comfyui_analyze_workflow``.)
    
ParametersJSON Schema
NameRequiredDescriptionDefault
workflowYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, but the description adds substantial behavioral context: it performs security blocks, detects suspicious inputs like '__import__', and may skip the installed-class_type check with a server-unreachable note. This goes well beyond the annotation hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a one-sentence summary, followed by a compact list of checks and a clear bulleted return-value specification. Each part earns its place, and the formatting makes it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully covers the tool's behavior, including the output schema keys (valid, errors, warnings, node_count, pipeline) and their meanings, the distinction between blocking errors and non-blocking warnings, and the fallback behavior when the server is unreachable. It is sufficiently complete for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only says 'workflow' is a string; the description clarifies it must be a JSON string of the workflow to validate. This is critical semantic information that the schema does not convey. With 0% schema coverage, the description fully compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Validate a ComfyUI workflow for structural correctness and security.' It clearly distinguishes the tool from siblings like comfyui_analyze_workflow and comfyui_audit_dangerous_nodes by enumerating its unique checks (node structure, connections, installed node types, models, dangerous nodes, suspicious inputs).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states what the tool checks and when it is appropriate, and it points to a specific alternative: 'For the full structural breakdown, use comfyui_analyze_workflow.' This gives clear usage guidance and excludes overlap with a sibling tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 46 tool updatesv2.1.0
    • First observedcomfyui_analyze_workflow
    • First observedcomfyui_audit_dangerous_nodes
    • First observedcomfyui_cancel_download
    • First observedcomfyui_cancel_job
    • First observedcomfyui_clear_queue
    • First observedcomfyui_create_workflow
    • First observedcomfyui_download_model
    • First observedcomfyui_generate_image
    • First observedcomfyui_get_custom_node_status
    • First observedcomfyui_get_download_tasks
    • First observedcomfyui_get_history
    • First observedcomfyui_get_image
    • First observedcomfyui_get_job
    • First observedcomfyui_get_model_metadata
    • First observedcomfyui_get_model_presets
    • First observedcomfyui_get_node_info
    • First observedcomfyui_get_progress
    • First observedcomfyui_get_prompting_guide
    • First observedcomfyui_get_queue
    • First observedcomfyui_get_queue_status
    • First observedcomfyui_get_server_features
    • First observedcomfyui_get_system_info
    • First observedcomfyui_get_workflow_from_image
    • First observedcomfyui_inpaint_image
    • First observedcomfyui_install_custom_node
    • First observedcomfyui_interrupt
    • First observedcomfyui_list_extensions
    • First observedcomfyui_list_jobs
    • First observedcomfyui_list_model_folders
    • First observedcomfyui_list_models
    • First observedcomfyui_list_nodes
    • First observedcomfyui_list_outputs
    • First observedcomfyui_list_workflows
    • First observedcomfyui_modify_workflow
    • First observedcomfyui_run_workflow
    • First observedcomfyui_run_workflow_stream
    • First observedcomfyui_search_custom_nodes
    • First observedcomfyui_search_models
    • First observedcomfyui_summarize_workflow
    • First observedcomfyui_transform_image
    • First observedcomfyui_uninstall_custom_node
    • First observedcomfyui_update_custom_node
    • First observedcomfyui_upload_image
    • First observedcomfyui_upload_mask
    • First observedcomfyui_upscale_image
    • First observedcomfyui_validate_workflow

TDQS

A3.7/5.0

Scored across 46 tools

Disambiguation3/5

There are several overlapping tool pairs, notably comfyui_get_queue vs comfyui_get_queue_status, and comfyui_get_history vs comfyui_list_jobs vs comfyui_get_job. The descriptions are detailed and cross-referenced, so the boundaries are clear on close reading, but an agent could easily misselect between these similar-purpose tools.

Naming Consistency5/5

Every tool uses the consistent comfyui_ prefix followed by a snake_case verb_noun pattern (list_models, create_workflow, cancel_job). No mixed camelCase or irregular verb usage; parallel operations share the same verb (get_, list_, run_, upload_), making the naming predictable and easy to navigate.

Tool Count2/5

At 46 tools, the set is well above the 25+ threshold where it becomes hard to discover and choose among options. While each tool is individually purposeful, the surface could be consolidated—for example, merging queue-status variants and unifying history/job listing—to make the server more manageable.

Completeness4/5

The tool set provides broad coverage of the ComfyUI domain: workflow creation/validation/modification/execution, image manipulation (transform, inpaint, upscale), model and custom-node management, and queue/job lifecycle control. Minor gaps like deleting models/images or retrying failed jobs exist but are easily worked around.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers