comfy-draftsman
comfy-draftsman is an MCP server that lets AI agents build, organize, validate, diagnose, port, and run ComfyUI workflows against a live ComfyUI instance, producing human-readable, fully-labeled workflows with automatic layout, colored groups, and guidance notes.
Discovery & Exploration
get_instance_info— Get ComfyUI version, OS, VRAM, and queue statussearch_nodes/get_node_info— Search installed node classes and fetch full input/output schemaslist_models— Browse installed model files by folder with search filteringlist_templates/list_workflows— Browse bundled templates and saved workflows
Workflow Authoring & Editing
create_workflow— Start a blank workflow or seed from a templateimport_workflow— Import from pasted JSON (UI or API format) or load by name from the workflow browserinspect_workflow— View nodes, links, groups, and subgraph internalsedit_workflow— Batched operations: add/remove nodes, connect slots, set widget values, titles, mute/bypass nodes (with live schema validation)organize_workflow— Auto-layout into pipeline stage bands, colored groups, human-readable titles, highlights on user-editable knobs, and model-aware guidance noteslint_workflow— Check for readability issues: unlabeled prompts, orphan nodes, overlapping nodes
Validation, Diagnosis & Porting
validate_workflow— Live validation against the running instance: node classes, widget ranges, combo choices, model file presencediagnose_workflow— Deep-check broken/old workflows, identify missing nodes with Comfy Registry suggestionsport_workflow— Cross-family model porting (e.g., SDXL → Flux): swap loader topology, retune CFG/steps/samplers, pick installed model files, flag items needing human review
Execution & Output Management
run_workflow— Queue and run a workflow with optional inline preview; supports background queuing (wait=False) and auto-relocation of outputsget_run_status— Check queue position, live step progress, and final outputs for background runsview_output— Fetch rendered images (downscaled by default, full resolution on demand)save_output— Copy finished renders out of ComfyUI's output folder to an accessible locationupload_image— Upload source images for img2img, inpainting, or ControlNet workflowsmanage_queue— Inspect, interrupt, clear, delete prompts, or free VRAM/RAMsave_workflow— Save to ComfyUI's workflow browser (validates first, never overwrites without confirmation)export_workflow_json— Export as UI format (shareable, keeps layout) or API format
Ecosystem & Knowledge
resolve_missing_nodes— Find which installable node packs provide missing node classes via the Comfy Registrysearch_node_packs— Search the Comfy Registry for node packs by capabilityget_model_guidance— Get tuned settings (CFG, steps, samplers, resolutions) for a model family, variant-aware (turbo/lightning/distill)record_learning— Persist researched settings so future sessions start smarter, with auto-detection patterns for new model families
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@comfy-draftsmanDraft a simple txt2img SDXL workflow with a face detailer."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
comfy-draftsman
The MCP server that drafts ComfyUI workflows a human can actually read.
A local-first Model Context Protocol server that lets coding agents (Claude Code, Claude Desktop, Cursor, ...) build, repair, port, validate, and run ComfyUI workflows against your own ComfyUI instance — and deliver them as clean, organized, fully-labeled workflows: computed layout, colored stage groups, titled nodes, green-highlighted "knobs you may touch", and markdown guidance notes explaining which tuned settings to leave alone and why.

Every agent tool for ComfyUI can emit raw API-format JSON — a working but unreadable pile of unpositioned nodes. Draftsman's reason to exist is the finished drawing:

The note above was generated automatically: draftsman detected the checkpoint was a DMD-distilled SDXL merge and tuned CFG to 1.0, 4 steps, lcm/sgm_uniform — then wrote down why, so the person opening the workflow doesn't "fix" it back to CFG 7.
What it does
Draft — seed from ComfyUI's bundled templates (always current with the latest models) or build from scratch with semantic graph operations (
add_node,connect,set_widget— validated against the live instance's schemas).Organize — the differentiator: pipeline-stage auto-layout, colored groups, human titles (
✅ Positive Prompt,Base Pass), green highlights on user-editable knobs, and generated notes in two registers: "👇 type your prompt here" vs "⚙️ turbo model — CFG stays at 1.0". Everything you'd tweak (source images, canvas size, models/LoRAs, prompts) reads left-to-right first, and preview/Show Text nodes sit right beside the node they display — no tracing wires across the canvas to figure out which sampler made which image.Diagnose & modernize — hand it an old broken workflow: it reports every incompatibility against your live instance (renamed nodes, changed widget layouts, missing model files with closest-installed suggestions) and resolves missing custom nodes to installable packs via the official Comfy Registry.
Port — retarget across model families (
sdxl→flux, ...): swaps loader topology (checkpoint ⇄ separate UNET/CLIP/VAE loaders) and rewires consumers, retunes CFG/steps/samplers and technique nodes (FaceDetailer settings are family-specific — there is no universal detailer config), swaps latent node classes, picks installed model files, and flags everything needing human judgment.Validate & prove — structural + live validation, then an actual render with an inline preview, before the workflow is ever delivered.
V3 dynamic combos — modern nodes whose choices reveal conditional sub-widgets (
COMFY_DYNAMICCOMBO_V3— e.g.SaveImageAdvanced'sformat, Depth-Anything-3'smode/output) are first-class: their values are set, round-tripped, validated, and serialized to the API's dotted-key form (output.normalization), so a graph containing them runs end-to-end through the draftsman alone. The rest of the V3 io system is handled alongside them: autogrow inputs (COMFY_AUTOGROW_V3— a growing socket list likeBatchImagesNode's images) expand to their real, connectable slot names with the dotted API keys the backend actually matches on, match types wire freely the way ComfyUI's own executor treats them, and inputs ComfyUI flags as widget-rendered (socketless/widgetType) are set as widgets rather than mistaken for required sockets.Run & watch — run any workflow (one you just built, or one already saved in your ComfyUI) and see the output right in the conversation: previews come back as downscaled thumbnails to keep the chat light, with
view_outputfetching full resolution on demand. Long renders can queue in the background (wait=False) with live step progress viaget_run_status. If the instance already has a long queue, draftsman says so instead of silently waiting — and can queue your test run to go next (front=True) without touching the jobs already in line. Upload source images for img2img/inpaint, and manage the queue when something needs interrupting. (wait=False + get_run_status polling for long/paid renders — see run_workflow's docstring)Learn — a two-layer knowledge system: a curated per-family floor (SD1.5/SDXL/SD3.5/FLUX/Krea-2/Chroma/Qwen-Image/Wan/LTX, variant-aware for turbo/lightning/DMD/distills) plus a persistent learned overlay: when the agent researches better settings for a new model,
record_learningsaves them so every future session starts smarter. A learned entry can carry its owndetectblock, so a brand-new model researched once becomes self-detecting next session instead of being mistaken for a lookalike family.Stay current — ground truth is your running ComfyUI (
/object_info, live templates, live model lists), never a bundled snapshot.
Related MCP server: ComfyPilot
Requirements
Python ≥ 3.11 with uv (or pip)
A running ComfyUI instance (default
http://127.0.0.1:8188)
Install
Claude Code:
claude mcp add comfy-draftsman \
-e COMFYUI_URL=http://127.0.0.1:8188 \
-e COMFYUI_MOUNT_DIR=/path/your/agent/can/reach \
-- uvx --from git+https://github.com/EnragedAntelope/comfy-draftsman comfy-draftsmanClaude Desktop / other MCP clients (mcpServers config):
{
"mcpServers": {
"comfy-draftsman": {
"command": "uvx",
"args": ["--from", "git+https://github.com/EnragedAntelope/comfy-draftsman", "comfy-draftsman"],
"env": {
"COMFYUI_URL": "http://127.0.0.1:8188",
"COMFYUI_MOUNT_DIR": "/path/your/agent/can/reach"
}
}
}
}Prefer the published package? uv tool install comfy-draftsman (or
pip install comfy-draftsman) puts the server on PATH, and both configs above
shorten to plain uvx comfy-draftsman / "args": ["comfy-draftsman"]. The
git+https form above tracks unreleased commits.
COMFYUI_MOUNT_DIR is optional but recommended: it's a folder your agent (or a
sandboxed client like Claude Desktop / Cowork) can actually read, and save_output
/ run_workflow relocate finished renders there — otherwise renders stay inside
ComfyUI's output/ tree and every save needs an explicit dest_dir. On Windows use
a native path, e.g. C:\\Users\\you\\comfy-renders. See Configuration
for all environment variables.
Then just ask your agent things like:
"Build me a Krea workflow with LoRA support and a face detailer, labeled so my friend can use it."
"Here's an old SD1.5 workflow JSON that doesn't load anymore — fix it and port it to SDXL."
"Take this workflow I downloaded and make it neat and organized."
It checks your hardware before you spend forty minutes on a download: ask for
guidance on a model family your GPU can't comfortably hold and the answer comes
back with a fit verdict — what's needed, what you have, and what to do about
it. When it fits, it says nothing.
Updating
uvx caches, and it will not tell you. uv keys a git+https:// dependency
on the resolved commit hash, and uvx reuses a cached environment rather than
re-resolving — so a config pointing at the git URL keeps running whatever commit
it first installed, indefinitely, with no warning. A plain uvx comfy-draftsman
behaves the same way once published.
Pick whichever shape you prefer:
Config | Updates | Trade-off |
| Every time the server starts | Needs PyPI reachable at start-up — uv errors rather than falling back to its cache on a network failure |
| When you run | Starts offline, but you have to remember |
| Only after | Tracks unreleased commits; silently stale otherwise |
@latest is the right default for most people. If you work offline often,
take the uv tool install row and run uv tool upgrade comfy-draftsman (or
uv tool upgrade --all) when you want a new version.
To find out what you're running, ask your agent to call check_setup — the
first line of its report is the running comfy-draftsman version. The
draftsman://capabilities resource carries it too.
To hear about new versions, watch the repo on GitHub: Watch → Custom →
Releases. Every tagged release publishes to PyPI and creates a GitHub Release
whose notes are that version's CHANGELOG.md section. The server itself never
phones home — it talks only to your ComfyUI and (read-only) the Comfy Registry,
and checking for updates is deliberately your call, not a background poll.
Migrating an existing install costs nothing but a config edit. Session state
and learned knowledge live in ~/.comfy-draftsman/ and saved workflows live in
ComfyUI's own browser, so neither depends on how the server was installed —
change the args line, restart your client, and optionally
uv cache clean comfy-draftsman to reclaim the old checkout.
Configuration
Env var | Default | Purpose |
|
| The ComfyUI instance to drive |
|
| Where in-progress workflows persist |
|
| Persistent learned model knowledge |
| (unset) | Folder a sandboxed client can reach; |
|
| HTTP timeout (seconds) |
| (unset) | Comfy Org API key for partner/* nodes (Luma, Seedance, Kling, Runway); injected into the prompt payload's |
Using with Claude Cowork / Code
ComfyUI's save nodes only ever write inside ComfyUI's own output/ tree, so a
finished render has to be copied out before a sandboxed agent can open, edit,
or show it to you. That copy lands in COMFYUI_MOUNT_DIR — and the one rule that
makes it work is:
COMFYUI_MOUNT_DIRmust be a folder that both the draftsman server (next to ComfyUI) and your agent's sandbox can see — typically your Cowork/Code workspace directory, or a subfolder of it.
Set it to an absolute path. The server runs with its own working directory (MCP hosts often launch it from a system directory like
System32), so a relativedest_dir/save_dirwould resolve somewhere invisible — draftsman now refuses a relative path with a clear error rather than misplacing your render.Same machine (typical): point it at your project folder, e.g.
COMFYUI_MOUNT_DIR=I:\source\repos\my-project\renders(Windows) or/home/you/project/renders.run_workflowauto-relocates the finished output files there — images, video and audio alike — and returns theirsaved_paths; the agent opens those paths directly. (Relocation needs finished files, so it applies to a blocking run; a backgroundwait=Falserun relocates afterwards withsave_output(prompt_id=...), and says so rather than ignoringsave_dir.)Check readiness first.
get_instance_info(call it first anyway) returns arelocationblock —{"configured": true, "writable": true, "path": ...}when you're good to go, or ahinttelling you to setCOMFYUI_MOUNT_DIRwhen you're not.check_setupis the dedicated doctor — it also confirms ComfyUI itself is reachable and never raises — and thedraftsman://capabilitiesresource reports the same relocation status. If it's unset, the agent can ask you to configure it before spending a render instead of after.
Without COMFYUI_MOUNT_DIR, everything except handing you the finished file still
works — you'd just pass an explicit absolute save_dir= per run, or fetch previews
inline with view_output.
Reducing permission prompts
Building a workflow makes many tool calls (schema lookups, validation, layout), so
your agent may ask to approve each one. Draftsman marks its read-only tools with MCP
readOnlyHint annotations and batches schema lookups (get_node_info takes a list),
but the actual prompting is your client's policy. To "approve once", add the
read-only tools to your client's allowlist — see docs/PERMISSIONS.md
for a copy-paste Claude Code permissions.allow block (and the tradeoffs of allowing
the mutating tools like run_workflow / save_workflow).
Tools
Discovery — get_instance_info (version, VRAM in raw bytes and GB, queue — and a relocation block reporting whether renders can be handed to a sandboxed client; call first), check_setup (one-shot doctor: ComfyUI reachable? renders relocatable? — never raises, so it's the first call when something's off), search_nodes, get_node_info (long combo lists — fonts, model files — are capped for chat-friendliness; choices_filter='substring' / max_choices=N browse the full list), list_models (per-folder, with search substring filtering; long lists are capped for chat-friendliness — the true count and a search= hint always come back — and metadata_for='file.safetensors' returns a LoRA's embedded training metadata: base model and top trigger tags, so trigger words come from ground truth, not guesses), list_templates (~450 bundled templates — the response carries the true match count and a search= hint, never a silent truncation), list_workflows (what's already in ComfyUI's workflow browser, by name), find_workflow (describe a goal — "flux portrait at 1024 with a face detailer" — and get a few ranked, compact matches from your saved workflows: family, base model, resolution, feature tags, and why each matched; profiled from the saved JSON so hand-built ones count too. Reuse-before-rebuild without importing every candidate — the fetch/parse happens server-side, only the top summaries come back)
Authoring — create_workflow (blank or template-seeded), import_workflow (paste UI/API-format JSON, or name=... to load one straight from ComfyUI's workflow browser — no pasting), inspect_workflow (for subgraph-packaged workflows — how newer bundled templates ship — it lists each subgraph's inner nodes and wiring, marking which boundary inputs the instance actually exposes as sockets), edit_workflow (batched ops with strict per-op schemas — a failing op stops the batch and leaves the graph unchanged; widget values are checked against the live schema at write time, so a made-up sampler or model filename fails immediately with closest-match suggestions instead of at run time; supports Note/MarkdownNote annotation nodes via their single text widget; connect reports when it replaces an existing link; returns a compact delta — summary=true for the full graph), organize_workflow (never overwrites human-authored node titles), lint_workflow (readability checks, including no-prompt-preview: a wildcard-generated positive prompt should reach a Show Text node — inline before the encoder or tapped off the generator — so the user sees the final text)
Correctness — validate_workflow (live checks + closest-match suggestions), diagnose_workflow (validation + registry resolution of missing nodes), port_workflow (cross-family model ports like SDXL→Flux — missing-node repair is diagnose_workflow/resolve_missing_nodes, not this)
Execution & delivery — run_workflow (validates, renders, returns an inline preview thumbnail; wait=False queues in the background; allow_invalid=True submits past the local validator when you're sure a graph is fine; save_dir=... — or a configured COMFYUI_MOUNT_DIR — auto-relocates the finished renders and returns their saved_paths, so one call gets you a presentable file), get_run_status (queue position, live step progress, outputs when done), view_output (fetch any rendered image so the agent — and you — can see it; downscaled by default, max_dim=None for full resolution), save_output (copy a finished render — image, video or audio — out of ComfyUI's output/ tree into a folder the caller can reach; needed because ComfyUI's save nodes only write inside output/ and reject absolute paths; takes a prompt_id or an explicit filename), upload_image (put a source image/mask into ComfyUI's input folder for img2img / inpaint / ControlNet), manage_queue (status / interrupt / clear / delete / free memory), save_workflow (validates first — refuses to save a broken workflow unless allow_invalid=True — then lands in ComfyUI's workflow browser; never overwrites an existing workflow file unless overwrite=True — a taken name saves as <name> (draftsman) so your original is preserved), export_workflow_json
Ecosystem & knowledge — resolve_missing_nodes, search_node_packs, get_model_guidance (tuned per-family settings, plus a fit verdict when your GPU can't comfortably hold the model — silent when it can), record_learning
Prompts — build_workflow, modernize_workflow (guided flows) · Resources — draftsman://workflow-format, draftsman://knowledge/{family}, draftsman://capabilities (relocation readiness, background runs, partner-node key)
Run it and see the result
Whether the agent just built a workflow or imported one you already had, running it puts the picture in the conversation. A real session looks like this:
You: Run my "ZITx Zimage Turbo" workflow and show me what it makes.
Agent: One of its model files was moved since it was saved — I've repointed the checkpoint loader to the installed file. Rendering now… done in 9 seconds. Here's the result:
The full-resolution file is
ZIT_00042_.pngin ComfyUI's output folder — want me to copy it somewhere, tweak the prompt, or queue a batch of variations?
The agent sees the same image you do, so "make it warmer and less cluttered"
works as a follow-up. Long renders queue in the background with live step
progress; inline previews are size-optimized thumbnails (the files on disk are
untouched originals), and view_output fetches full resolution on demand.
With COMFYUI_MOUNT_DIR set, finished renders are also copied to a folder your
agent can reach, so sandboxed clients can hand you the actual file.
How it stays correct
The graph model round-trips ComfyUI's UI workflow format (schema 0.4, including subgraph
definitions) faithfully and serializes to API format with the fiddly bits handled: positional widget arrays (includingcontrol_after_generateslots — even the ones the frontend adds by name to legacy seed widgets with no schema flag), V3 dynamic-combo and autogrow dotted keys, converted-widget connections, PrimitiveNode baking, Reroute tracing, mute/bypass semantics.Headless runs match the browser. Behaviors ComfyUI implements in frontend JS — which the raw
/promptAPI never performs — are replayed at submit time: custom pack-specific widget inputs (e.g. a LoRA autocomplete box) are serialized instead of dropped,%date:…%filename tokens are substituted, and seeds onrandomize/increment/decrementre-roll per run (run_workflow(roll_seeds=False)to opt out). Combo-value validation blocks on missing model files and core-node enums but only warns on custom nodes that repopulate their pickers client-side, so it doesn't flood.Subgraph-packaged workflows run. Instances are flattened to API format the way the frontend does it at queue time (boundary rewiring, promoted
proxyWidgetsvalues, nested definitions), andvalidatechecks the inner nodes too. Each inner finding is tagged with its subgraph provenance and thedefinition_id/inner_node_idthatedit_workflow's definition-scoped ops take — so a wrong model path inside a bundled template is a one-call fix, not a rebuild.Everything is validated against the live
/object_info— combo checks double as "is this model actually installed" checks, refreshed right before every run/save.The test suite includes protocol-level end-to-end tests that build, validate, organize, render, and save real workflows on a real ComfyUI instance — including a subgraph-packaged one.
Module map, data flow, and design gotchas: docs/ARCHITECTURE.md.
Security notes
Runs over stdio only; the server opens no listening port.
Talks only to the ComfyUI URL you configure and (read-only) the official Comfy Registry at
api.comfy.org.It never installs custom nodes.
resolve_missing_nodestells you which pack provides a missing node and how to install it yourself — custom node packs execute arbitrary code, so that decision stays with you.Partner/API nodes never run without your say-so. Luma, Kling, Runway, Seedance and friends execute on the provider's hardware and bill your Comfy Org account per submit, so
run_workflowasks before queueing one (and tells the agent how to ask you, on clients that can't prompt). A graph needing them withoutCOMFY_API_KEYset fails immediately by name instead of as a confusing queue-timeUnauthorized.Other people's renders are not draftsman's to discard.
manage_queue's interrupt/clear/delete confirm first when the affected jobs weren't queued by this session — and stay quiet when it's just cleaning up after itself.
Development
git clone https://github.com/EnragedAntelope/comfy-draftsman
cd comfy-draftsman
uv sync --group dev
uv run pytest # unit tests (no ComfyUI needed)
uv run pytest -m integration # needs a live instance: COMFYUI_TEST_URL=http://127.0.0.1:8288
uv run ruff check .The repo's .comfyui-test/ convention (gitignored) holds a disposable ComfyUI clone for integration testing — see tests/test_integration_live.py.
Publishing a release
.github/workflows/release.yml publishes to PyPI via Trusted Publishing —
no API token is stored in this repo. One-time setup: create the pypi and
testpypi GitHub environments, then register a pending publisher on
pypi.org and test.pypi.org (owner EnragedAntelope, repo comfy-draftsman,
workflow release.yml, matching environment name).
Then: Actions → Release → Run workflow → testpypi for a dry run, and
git tag vX.Y.Z && git push origin vX.Y.Z for the real thing. The workflow
refuses to publish when the tag disagrees with comfy_draftsman.__version__,
and re-runs CI's wheel-data assertion before uploading. A PyPI version number
can never be reused — do the TestPyPI run first.
A tag push also creates a GitHub Release, with that version's CHANGELOG.md
section as its notes and the built artifacts attached — that Release is what
notifies anyone watching the repo, so write the changelog entry before tagging.
tests/test_packaging.py fails the build if the current __version__ has no
matching section.
Acknowledgments
The execution-side tools — view_output, upload_image, background runs with
get_run_status progress, and manage_queue — were inspired by
KerbalTheGathering/ComfyUI_MCP,
whose author suggested merging those capabilities into draftsman. They were
re-implemented independently for this codebase; the ideas (return-refs-by-default
with a dedicated view tool, thumbnail downscaling, websocket progress tracking)
are credited to KerbalTheGathering.
License
MIT
Available Tools
29 toolscheck_setupARead-onlyIdempotent
One-shot setup diagnostic for a fresh install or a sandboxed client (Cowork/
Desktop/Code): can I reach ComfyUI, can I hand finished renders back to the user
(COMFYUI_MOUNT_DIR), is the partner-node key present. Unlike get_instance_info it
never raises - a down instance is a failed check, not an error - so run it first
when a render can't be delivered or the instance seems unreachable. Returns
{ok, checks:[{name, ok, detail}], hint?}; ok gates on ComfyUI being reachable,
relocation is a soft check surfaced via hint.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with annotations declaring readOnlyHint, openWorldHint, and idempotentHint, the description adds behavioral context beyond them: it never raises, a down instance is a failed check rather than an error, and it explains the gate ('ok gates on ComfyUI reachable') and soft checks ('relocation is a soft check surfaced via hint'). This is substantial 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient: three sentences cover purpose, usage guidance, behavioral guarantee, and return shape. It front-loads the core diagnostic role and avoids fluff, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and a rich output schema, the description still provides the non-obvious context: what the checks mean, how to interpret the response gates, and how it behaves on a down instance. Combined with the annotations and output schema, an agent has everything needed to correctly invoke and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so no parameter semantics are needed. The description adds meaning by detailing what the diagnostic checks and how the results are structured, which effectively covers the absence of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is a 'one-shot setup diagnostic' and enumerates the exact three checks: ComfyUI reachability, render handoff via COMFYUI_MOUNT_DIR, and partner-node key presence. It explicitly contrasts itself with get_instance_info, making the agent able to discriminate the tool from siblings without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says both what the tool is for ('fresh install or a sandboxed client (Cowork/Desktop/Code)') and gives concrete when-to-use guidance: 'run it first when a render can't be delivered or the instance seems unreachable.' It also provides an exclusion by contrasting with get_instance_info, which raises on a down instance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_workflowA
Start a workflow: blank, or seeded from a bundled template (recommended for current model families - see list_templates). Returns workflow_id + node summary.
| Name | Required | Description | Default |
|---|---|---|---|
| template | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover read-only and destructive hints without contradiction. The description adds that the tool returns 'workflow_id + node summary' and that a template can seed the workflow, which is helpful. Still, it doesn't clarify persistence, side effects, or what happens if the template is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action, and no redundant wording. Every phrase adds signal: blank vs template, recommendation, template source, and output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool with a single required parameter and one template optional parameter, the description is mostly complete. The return value is mentioned, and the template source is provided. Minor missing detail is what exactly a node summary contains, but the presence of an output schema lowers the burden on the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description partially compensates by explaining that 'template' seeds from a bundled template and telling the user to consult list_templates. However, it does not explain the required 'title' parameter or specify the expected template identifier format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the operation: start/create a workflow, with the key options 'blank' or 'seeded from a bundled template'. It also signals the output. However, it does not explicitly distinguish itself from sibling tools like run_workflow, import_workflow, or save_workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful context about when to prefer a template ('recommended for current model families') and points to list_templates. However, it does not clearly state when to use this tool over alternatives such as import_workflow or run_workflow, or provide any when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_workflowARead-onlyIdempotent
Deep-check an old/broken workflow and propose fixes: everything from validate_workflow PLUS Comfy Registry resolution for missing custom-node classes (which pack provides them, how to install). Apply fixes via edit_workflow, or port_workflow for model-family moves.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds transparency by stating that the tool only proposes fixes and that actual modification should happen through edit_workflow or port_workflow, which is consistent with the annotations and extends the behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but short: two sentences, with the primary purpose front-loaded and follow-up routing placed at the end. Every clause earns its place without wasting the agent's attention.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only diagnostic tool with one obvious parameter and an output schema, the description gives enough guidance for correct invocation and follow-up. It clarifies relationship with validate_workflow, edit_workflow, and port_workflow, so the agent can decide when and how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, workflow_id, and its name plus schema type already make the meaning obvious. Although schema description coverage is 0%, the low parameter complexity and the repeated workflow context in the description reduce the impact of having no additional parameter-level explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a concrete verb ('Deep-check') and identifies the exact resource ('workflow') and the expected outcome ('propose fixes'). It explicitly positions itself as a superset of validate_workflow and adds Comfy Registry resolution for missing custom-node classes, making it easy to distinguish from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear selection context: use this for old/broken workflows that need deeper diagnosis and repair proposals, and it routes follow-up actions to edit_workflow or port_workflow for model-family moves. It does not explicitly say 'when not to use this tool', but the superset relationship with validate_workflow, plus the explicit alternatives makes the usage boundary fairly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_workflowA
Apply batched edits. Each op is a dict with 'op' plus:
{"op": "add_node", "class_type": str, "title"?: str, "widgets"?: {name: value}}
{"op": "remove_node", "node_id": int}
{"op": "connect", "from_node": int, "from_output": str|int, "to_node": int, "to_input": str}
{"op": "set_widget", "node_id": int, "input": str, "value": any}
{"op": "set_title", "node_id": int, "title": str}
{"op": "set_mode", "node_id": int, "mode": int} # 0 normal, 2 mute, 4 bypass
All six have a definition-scoped twin taking an extra "definition_id", for editing inside a subgraph definition: add_node_to_definition, remove_node_from_definition, and connect/set_widget/set_title/ set_mode_in_definition. A malformed op reports its own required keys.
Layout/group ops (no definition twin): set_pos {node_id, pos:[x,y], size?:[w,h]}; add_group {title, node_ids:[int,...], color?}; set_group {group_id, title?, node_ids?, color?}; remove_group {group_id}. Groups are addressed by member node_ids - bounding comes from their own extents. organize_workflow re-lays out and re-groups everything, so run these AFTER it, not before.
Slot/widget names come from get_node_info. Virtual classes: Note/MarkdownNote take one widget 'text'; Reroute/PrimitiveNode take none at add - connect a PrimitiveNode to a widget input to mirror its type, then set_widget 'value' (+ 'control_after_generate' for number/combo, to advance each run).
Ops apply in order; a failing op stops the batch (graph unchanged past that point). Widget values and link types are checked live - "force": true on set_widget/add_node/connect overrides; on connect it also lets a frontend-only input (no /object_info entry - rgthree switches, dynamic collectors) be wired by creating the socket.
Result is a compact delta (applied ops + changed nodes); pass summary=true or call inspect_workflow for the full graph.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | No | ||
| operations | Yes | ||
| workflow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavior well beyond the annotations: operations apply in order, a failing operation stops the batch with the graph unchanged past that point, and widget values and link types are checked live with a 'force' override. It also states the result shape as a compact delta versus the full graph via summary, so the agent knows what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well structured, using a literal list for operation shapes and clearly separated notes for ordering, virtual classes, force behavior, failure semantics, and result. It contains no filler and every sentence adds a load-bearing detail for calling the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex editing tool with an output schema, this description covers operation formats, failure atomicity, override behavior, ordering relative to sibling tools, naming sources, virtual node requirements, and return options. Nothing needed to invoke the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With no schema-level parameter descriptions, the description carries the full semantic burden and compensates strongly: it documents each operation dict, the definition_id variants, set_group and position fields, mode codes, virtual node classes, and summary behavior. The only parameter left implicit is workflow_id, but its name and required type make its purpose self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description immediately states a clear action and resource: 'Apply batched edits' to a workflow, then enumerates every supported operation type. It also distinguishes definition-scoped operations from top-level edits by naming the definition twins, so an agent can tell exactly what the tool does and how its variants relate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete routing and ordering guidance: layout/group ops should run 'AFTER' organize_workflow, slot/widget names come from get_node_info, and full-graph queries belong to inspect_workflow. It also explains the difference between top-level and definition-scoped operations, which tells the agent which variant to choose in which context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_workflow_jsonARead-onlyIdempotent
The workflow as JSON: 'ui' (shareable, opens in the editor, keeps layout & notes) or 'api' (for POST /prompt automation).
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | ui | |
| workflow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only and idempotent, and the description adds meaningful behavioral detail by explaining the purpose and effect of each output format. The described behavior is consistent with the read-only annotation since it presents an export/rendering action rather than a mutating one.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, tightly written sentence places the core concept first and packs precise format guidance into a minimal structure. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema is present and the annotations cover read-only and idempotency, the description provides sufficient context for selecting between formats. The main gap is that it doesn't mention how the workflow_id is obtained or when to choose this tool over alternative workflow-related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate for parameter meaning. It thoroughly explains the 'format' parameter's enum values, but it does not explicitly describe 'workflow_id', even though the name and type make its role largely self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a workflow as JSON and distinguishes between the 'ui' and 'api' export formats. It relies on the tool name and the two format options to convey the export action, and it does not explicitly differentiate this tool from sibling tools, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete guidance on which format to use: 'ui' for a shareable editor-compatible JSON and 'api' for POST /prompt automation. It provides clear context for the tool's main decision but does not explain when to reach for this tool over siblings like save_workflow or inspect_workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_workflowARead-onlyIdempotent
Find saved workflows that already DO what you're about to build, so reuse beats rebuilding from scratch. Describe the goal in words - model, subject, resolution, extras - e.g. "flux portrait at 1024 with a face detailer", and get back a few RANKED, compact matches: family, base model, resolution, feature tags (detailer / upscale / lora / controlnet / inpaint / img2img), and why each matched. Profiles are extracted from the saved JSON, so hand-built workflows are covered too. Returns summaries only, never full graphs - load the one you want with import_workflow(name=...). Prefer this over importing+inspecting each result of list_workflows.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| intent | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds meaningful behavioral context: it returns ranked compact summaries only, never full graphs, and it covers hand-built workflows by extracting profiles from saved JSON. No-match behavior is not mentioned, but that is a minor gap given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but every sentence earns its place: purpose, query example, output shape, coverage characteristics, and the alternative tool. It is front-loaded with the key value proposition and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is an output schema, the description does not need to explain return types in detail. It covers the motivation, input guidance, output summary, safety via annotations, and the appropriate follow-up tool enough for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is zero, so the description carries the burden. It explains the intent parameter well with an example ('flux portrait at 1024 with a face detailer') and implied fields like model/subject/resolution/extras. However, the limit parameter is not explicitly described, only vaguely implied by 'a few ranked matches.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('find') with a clear resource ('saved workflows') and a distinct purpose: reuse existing workflows instead of rebuilding. It differentiates itself from list_workflows and import_workflow by describing intent-based ranking search and by explicitly saying it returns summaries only, not full graphs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Prefer this over importing+inspecting each result of list_workflows.' It also explains how to formulate the intent query and points the user to import_workflow(name=...) when a full graph is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instance_infoARead-onlyIdempotent
ComfyUI version, OS, VRAM, queue length, and render-relocation readiness of
the connected instance. Call first. The relocation block reports whether
COMFYUI_MOUNT_DIR is set and writable - if it isn't, renders can't be handed to
the user automatically, so surface that to them before spending a render.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld behavior. The description adds useful behavioral context by specifying that the relocation block reports whether COMFYUI_MOUNT_DIR is set and writable, and what the consequence is when it is not. This goes 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the concrete output fields before giving the call-order and relocation caveat. Every sentence earns its keep, though the final sentence could be trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no inputs and an output schema, the description only needs to clarify when to call the tool and what to do with a critical result. It does both, including concrete reasons for checking relocation readiness before starting render work.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the 0-parameter baseline of 4 is appropriate. There are no parameters for the description to document, and it correctly focuses on what the returned metadata means.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates the exact data returned: ComfyUI version, OS, VRAM, queue length, and render-relocation readiness, and additionally says to call it first. This is clear even though it lacks a full verb phrase, and the 'Call first' instruction gives it a distinct role among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: call this tool first, and before spending a render, surface the relocation readiness issue to the user. It does not explicitly name or exclude alternatives, so it misses the highest level of routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_model_guidanceARead-onlyIdempotent
Tuned settings for a model family: sampling (CFG/steps/samplers), native
resolutions, technique blocks (face_detailer, hires_fix...), prompt style notes.
Variant-aware: pass model_filename so turbo/lightning/distill overrides apply.
Includes any learned overlay from past research plus a research directive -
for brand-new models, verify online and record_learning what you find. A fit
block appears only when this GPU can't comfortably hold the model.
| Name | Required | Description | Default |
|---|---|---|---|
| family | No | ||
| model_filename | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond annotations: results may include learned overlay from past research, a research directive, variant-aware overrides, and a fit block that only appears when the GPU cannot hold the model. This helps the agent anticipate dynamic or conditional output content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well organized: core purpose first, then variant-aware usage, then learned/research behavior, then a conditional output note. Every sentence adds new useful information and none is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and strong annotations, the description covers the main behavioral and usage nuances: what the guidance includes, when variant overrides apply, when to research external information, and when the fit block appears. The main gap is that parameter defaults and family semantics are not fully spelled out, but the description is still strong enough for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 does explain model_filename as a variant override selector, and family is inferable as the model-family identifier. However, it does not specify valid or default values for either parameter, what happens when both are empty, or how family and model_filename interact more precisely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the exact deliverable—tuned settings for a model family—and enumerates its content: sampling settings, resolutions, technique blocks, and prompt style notes. It is clear enough to distinguish from sibling tools like get_node_info or list_models, but it never uses an explicit retrieval verb beyond the name 'get_model_guidance'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: pass model_filename so variant-specific overrides apply, and for brand-new models verify online and call record_learning. It lacks explicit comparisons like 'use this instead of X' or 'not for Y', but it gives enough situational guidance for choosing and using the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_infoARead-onlyIdempotent
Full input/output schema for node classes: slot names, types, widget defaults/ranges, combo choices, tooltips.
BATCH your lookups: pass class_types=["A", "B", "C"] to fetch many in ONE call (returns {class_type: schema}) instead of one call per node. A single class_type=... still returns that one node's schema directly.
Long combo lists (fonts, model files...) are capped at 24 choices by default; to browse the rest, pass choices_filter='substring' (case-insensitive, applies to every combo of the node) and/or max_choices=N to raise the cap.
| Name | Required | Description | Default |
|---|---|---|---|
| class_type | No | ||
| class_types | No | ||
| max_choices | No | ||
| choices_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already confirm read-only, idempotent behavior. The description adds meaningful behavioral details beyond annotations: combo lists are capped at 24 choices by default, choices_filter is substring-based and case-insensitive, and it is applied to every combo of the node. This is exactly the behavioral context an agent needs to correctly interpret limited results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly organized and every sentence conveys operational value. It front-loads what the tool returns, then covers batching efficiency, single vs batch return shape, and list-cap behavior without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter read-only tool with an output schema, the description is complete: it covers all parameters in practice, explains both invocation modes and their return structures, and clarifies the only surprising behavior (cap and filtering of combo choices). Nothing critical is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the tool description carries the parameter semantics, and it does so well for class_type, class_types, and choices_filter. The only ambiguity is max_choices: the schema default is 0 while the text says 24 is the default cap, leaving it unclear whether max_choices=0 means 'use the default cap' or 'no limit'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as node-class schemas and enumerates exactly what is returned: slot names, types, widget defaults/ranges, combo choices, and tooltips. It further distinguishes single vs batch return shapes, which makes the tool's behavior unambiguous and distinguishes it from sibling lookup tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage direction: batch lookups with class_types when multiple schemas are needed, and use choices_filter/max_choices to control long combo lists. It does not explicitly name alternative tools or exclusionary conditions, so the when-to-use guidance is clear but not fully comparative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_run_statusARead-onlyIdempotent
Polling tool for runs queued with run_workflow(wait=False). For long/paid renders, see run_workflow's long-render pattern.
Status of a run queued with run_workflow(wait=False): queue position, live
step progress while sampling, and outputs (+ error details) once finished.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only and idempotent behavior. The description goes further by detailing what the tool reports: queue position, live step progress, and outputs/error details. The only omission is any discussion of poll cadence or rate limits, but the provided context is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and starts with the most important purpose-context right away. It loses a point because the same phrase 'runs queued with run_workflow(wait=False)' is repeated twice in the text, slightly reducing efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one simple parameter, a clarifying notation about returns available through an output schema, and clear routing guidance, the description gives the agent enough to select and invoke this tool effectively. It also anticipates the main sibling-tool confusion via long-render vs. polling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 for prompt_id. It implies that prompt_id relates to a run queued with run_workflow(wait=False), but does not explicitly say 'pass the prompt_id returned by run_workflow' or describe its format. This is adequate for a single obvious parameter but not fully explicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly identifies the tool as a polling companion for run_workflow(wait=False), with the exact fields it returns: queue position, live step progress, and outputs/errors. It also distinguishes itself from run_workflow's long-render pattern, making its purpose unambiguous among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use this tool: to poll a run queued with run_workflow(wait=False). It also tells the agent to see run_workflow's long-render pattern for long/paid renders, providing an explicit alternative condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_workflowA
Import an existing workflow into the session. EITHER paste JSON as
workflow_json (UI format with nodes/links, or API format
{id: {class_type, inputs}}), OR pass name to load one straight from
ComfyUI's workflow browser (see list_workflows) - preferred for large files,
no pasting needed. Use for beautifying/diagnosing/porting outside work.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| workflow_json | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description communicates that this is an import action that modifies the session and that it can read from either pasted JSON or a named workflow. It does not disclose whether importing replaces/merges the current session workflow, what happens if both parameters are supplied, or error behavior on invalid JSON. Annotations don't contradict it, but they don't carry much behavioral weight either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core action appears first, then the two parameter modes, then the usage purpose. The final phrase 'porting outside work' is slightly awkward, but each sentence contributes useful information without bloating the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only two optional parameters and an output schema, the description is nearly sufficient. It explains the two mutually exclusive input options and names the companion list_workflows lookup. The main remaining gaps are precedence if both parameters are set and how an invalid or missing workflow is handled, but these are minor for choosing and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, and it does thoroughly. It explains exactly what `workflow_json` accepts (UI format with nodes/links or API format) and what `name` refers to (a workflow from ComfyUI's browser, obtainable via list_workflows). This is precisely the information an agent needs beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb and resource: import an existing workflow into the session, and it distinguishes the two supported input modes. It could more explicitly differentiate itself from create_workflow or port_workflow, but 'existing' workflow and 'import... into the session' make the core purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when to use the tool: for beautifying, diagnosing, or porting outside work, and it tells the agent that the `name` path is preferred for large files. It points to list_workflows for resolving workflow names. It does not explicitly state when not to use it or which sibling to prefer instead, but the guidance is reasonably concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_workflowARead-onlyIdempotent
Compact view of a session workflow: nodes (id/class/title/widgets), links, groups - plus full inner node/wiring detail for any subgraph definitions (newer bundled templates package their graph as a subgraph).
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint, openWorldHint=false, and idempotentHint=true. The description adds meaningful behavioral detail by specifying the compact scope and the fact that subgraph definitions can contain full inner node/wiring detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence packs in purpose, content, and the subgraph caveat without redundant words. Front-loaded key phrase 'Compact view of a session workflow'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one simple parameter and an output schema present, the description provides enough for immediate use: it describes the structural view, node details, group views, and subgraph coverage. It does not provide parameter lookup guidance, but this is minor given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries full responsibility for parameter meaning. Although workflow_id's purpose is inferable from the tool name, the description adds no explicit detail about the parameter's format, origin, or relationship to resources like list_workflows.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a compact inspection view of a session workflow, enumerating what is included (nodes, links, groups, and subgraph detail). This distinguishes it from siblings like get_node_info or search_nodes that cover only a narrow portion of workflow structure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: use this tool to get a compact structural overview of a workflow, with expanded detail for subgraph definitions. It implies when the tool is appropriate but does not explicitly name alternatives or conditions not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lint_workflowARead-onlyIdempotent
Readability/wiring lint: unlabeled prompts, missing groups/notes, orphan nodes, unconnected required inputs, overlapping nodes, misaligned resolution (when a family with a known alignment requirement is detected). Empty list = clean.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and openWorldHint, covering safety and side effects. The description adds useful behavioral context: it returns an empty list when clean, it detects orphan nodes, unconnected inputs, empty list means clean, and it narrows the alignment check to families with a known alignment requirement. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight, front-loaded, and information-dense. 'Readability/wiring lint:' establishes the purpose, a concise list defines scope, and 'Empty list = clean.' closes with an unambiguous contract. There is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only lint with an output schema, the description covers the necessary behavioral and scoping details well. The only contextual gap is the undocumented workflow_id parameter semantics, which keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only says workflow_id is a required string, with 0% description coverage. The tool description does not explain what a workflow_id should look like, where to obtain it, or how it is used in the lint. The parameter name provides a minimal hint, but the description fails to compensate for the empty schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb and resource precisely: a readability/wiring lint. It then enumerates the specific classes of issues it detects, which strongly separates it from generic validation or diagnostic siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly scopes the tool to readability and wiring concerns by naming concrete lint categories, so an agent can infer when to use it. It does not explicitly or alternately, but the sibling names like validate_workflow and diagnose_workflow make the distinction fairly obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsARead-onlyIdempotent
Model files installed on the instance. folder picks the model type:
checkpoints, loras, vae, diffusion_models, text_encoders, upscale_models,
controlnet, embeddings, ... (unknown folder -> the full available list).
search filters filenames (case-insensitive substring). metadata_for
(a .safetensors filename from this folder) returns its embedded training
metadata instead - base model + top trigger tags, key for using a LoRA.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | checkpoints | |
| search | No | ||
| metadata_for | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already signal read-only, idempotent, and open-world behavior, so the description adds real value by explaining conditional behavior: unknown folder values produce the full list, search is case-insensitive substring matching, and metadata_for switches from listing to embedded training metadata. These are precisely the behaviors an agent would not infer from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the primary purpose. Each sentence earns its place, and even the longer metadata_for sentence is dense with useful, non-redundant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description does not need to explain return shapes. It covers default-oriented behavior, edge cases like unknown folders, search matching, and the special metadata_for mode, making the tool safe and effective to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning. It fully compensates by explaining folder with examples and fallback behavior, clarifying search semantics, and defining metadata_for's special behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'model files installed on the instance' and makes the tool's scope obvious relative to workflow/template siblings. However, it lacks an explicit verb such as 'lists' or 'returns' in the opening sentence, relying partly on the tool name to establish the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational guidance: folder selects the model category, search filters filenames, and metadata_for fetches metadata instead. It does not explicitly name alternatives or exclusions among the sibling tools, but the context strongly implies when this read-only model-listing tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_templatesARead-onlyIdempotent
ComfyUI's bundled workflow templates - the best starting points for current models (they ship with every release). Seed one via create_workflow(template=...). Narrow with search= (matched against title/description/models); the catalog is ~450 templates, far more than one response should carry.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint; the description adds valuable behavior beyond those, including catalog size, bundled origin, and how search matches title/description/models. This context is consistent and meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences carry the full needed context: what the tool returns, how to use the result, and how/when to narrow. No filler or redundant restating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple one-parameter read-only tool with an output schema and safety annotations, so the description doesn't need to explain return values. It provides the extra operational context about catalog size and downstream use that makes the tool easy to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates completely by explaining that search is a narrowing filter against title, description, and models. Since there is only one optional parameter, this is sufficient for correct use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (ComfyUI's bundled workflow templates) and the action (listing a catalog of them), adding scope by noting they ship with every release and are the best starting points. This distinguishes it from siblings like list_workflows because it's specifically bundled templates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage guidance: narrow with search= and use the result to seed via create_workflow(template=...). It also warns about the catalog size, which implies you should not simply fetch everything. It doesn't spell out when-not-to-use alternatives, but the practical context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workflowsARead-onlyIdempotent
Workflows already saved in ComfyUI's workflow browser (userdata). Use a
returned name with import_workflow(name=...) to load one WITHOUT pasting its
JSON. search filters names (case-insensitive substring).
| Name | Required | Description | Default |
|---|---|---|---|
| search | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and openWorld semantics. The description adds useful context about the data source (userdata) and search behavior, but does not go much deeper; 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all relevant. The core resource is front-loaded, the related tool is referenced, and the parameter semantics are stated precisely without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list-type tool with one optional parameter and an output schema, the description fully covers data source, filtering behavior, and intended next step. Missing return details are not an issue because an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only a bare string with a default and zero description coverage, but the description explains exactly what the search does: case-insensitive substring filtering of names. That is sufficient for a single optional parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource: lists saved Workflow browser workflows from userdata. It also distinguishes itself from import_workflow by indicating these are already-saved items, not arbitrary JSON.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly connects to import_workflow(name=...) as the follow-up action, giving the agent an immediate workflow chain. It does not spell out when to choose list_workflows over find_workflow or other siblings, so a tiny gap remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_queueADestructive
Inspect or manage the instance's run queue: status (queued prompt ids; draftsman_submitted maps the ones THIS session queued to their workflow_id - the rest are someone else's job), interrupt (stop the running prompt), clear (drop ALL pending), delete (drop given pending prompt_ids), free (release cached VRAM/RAM; unload_models=True also unloads models). clear/delete/ interrupt are gated when they'd discard prompts this session didn't queue; confirm=True once the user agrees.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| confirm | No | ||
| prompt_ids | No | ||
| unload_models | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by explaining the exact destructive scope: clear drops ALL pending prompts, delete drops specific prompt_ids, and interrupt stops the running prompt. It also discloses side effects such as 'free' releasing cached VRAM/RAM and unload_models=True unloading models, plus the ownership guard for prompts queued by other sessions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but extremely information efficient, with every phrase adding essential detail. It is front-loaded with the main purpose and action list, then covers safety constraints. No filler or redundant statements appear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complex multi-action behavior, destructive annotations, and 4 parameters, the description is complete: it covers all actions, gating requirements, session ownership semantics, confirmation flow, and memory/model side effects. An output schema exists, so return-value description is not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 does: the 'action' enum values are all described, 'prompt_ids' context is established via 'delete (drop given pending prompt_ids)', 'confirm' is explained via gating and user agreement, and 'unload_models' is explicitly tied to model unloading. Every parameter receives meaningful semantic explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Inspect or manage the instance's run queue' and enumerates distinct actions. It is specific about the resource and verb, though it does not explicitly differentiate itself from sibling tools like get_run_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful guidance about when actions are allowed, noting that clear/delete/interrupt are 'gated when they'd discard prompts this session didn't queue' and that 'confirm=True' is needed once the user agrees. It does not explicitly mention alternatives or when to choose a sibling tool instead, but the action-by-action breakdown gives clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
organize_workflowA
THE finishing step: auto-layout into pipeline stage bands, colored groups, human titles, green highlights on user-editable knobs, and markdown guidance notes (model-family aware, two registers: 'touch this' vs 'leave alone'). Run after wiring is done and before save_workflow. Idempotent.
MUTATES the session workflow in place - the applied block in the result
summarizes the layout/group/note changes; inspect_workflow or
export_workflow_json shows the full reorganized graph.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by explicitly stating that the tool MUTATES the session workflow in place and is idempotent. It also explains what the result contains (the applied block) and how to see the full reorganized graph, which is valuable context that the annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact but information-dense: two sentences carry purpose, sequencing, mutation semantics, idempotence, and output behavior. The key instruction 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main operational requirements: when to call it, what it mutates, idempotence, what the result contains, and how to inspect the complete output. Since an output schema exists, the description does not need to restate return values, and it gives the agent enough context to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage for workflow_id is 0%, and the description does not explain workflow_id explicitly. However, the repeated mention of 'session workflow' and 'workflow' implies that this ID selects the target workflow to be organized. For a single, self-describing identifier parameter, this is adequate but not fully explicit compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a clear verb and resource: it auto-layouts the workflow into pipeline stage bands, colored groups, human titles, highlights, and guidance notes. It also distinguishes itself from sibling tools by being explicitly 'the finishing step' before save_workflow, rather than an inspection, validation, or save operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear lifecycle guidance: run after wiring and before save_workflow. It also tells the agent that inspect_workflow or export_workflow_json can be used afterward to view the full result. It does not explicitly name alternatives for when not to use it, so it falls just short of a perfect dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_workflowA
CROSS-FAMILY MODEL PORT ONLY (e.g. 'sdxl' -> 'flux'): swaps loader topology when needed, retunes CFG/steps/sampler/scheduler and technique nodes (FaceDetailer etc.) from family knowledge, swaps latent node class, picks installed model files. NOT for fixing missing/uninstalled nodes - that's diagnose_workflow + resolve_missing_nodes. Returns changes + flags for anything that needs your judgment. Families: get_model_guidance / get_instance_info.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes | ||
| target_family | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal but the description goes beyond them by explaining that the tool swaps, rewrites, repicks, and retunes a workflow, and that it returns changes plus flags for human judgment. This gives the agent a realistic picture of the mutation behavior, though it stops short of spelling out every side effect (e.g., whether original workflow files are modified in place).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence/segment pulls its weight: scope, concrete behavior, exclusion, alternatives, and output summary. There is no filler and the crucial 'CROSS-FAMILY ONLY' constraint is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two parameters, no schema descriptions, and no enums, the description supplies most of what an agent needs: purpose, scope, help resources, and what the return value indicates. The main missing piece is a precise mapping/example of the two arguments, which the succinct schema alone does not provide, but the overall behavior is well-covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description carries the burden for parameter meaning. It communicates that `target_family` is a model family (via the sdxl->flux example) and `workflow_id` is implicitly the workflow being ported, but it does not explicitly name either parameter or list valid families. It partially compensates but leaves the exact value-space and workflow_id semantics to the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a very specific scope, 'CROSS-FAMILY MODEL PORT ONLY', and gives a concrete example ('sdxl' -> 'flux'). It then enumerates exactly what the tool does: swaps loader topology, retunes CFG/steps/sampler/scheduler, swaps latent node class, and picks model files. This clearly distinguishes it from generic editing or diagnostic tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when NOT to use it ('NOT for fixing missing/uninstalled nodes') and names the exact alternative tools to use instead ('diagnose_workflow + resolve_missing_nodes'). It also points to supporting tools for family knowledge ('get_model_guidance / get_instance_info'), leaving minimal inference for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_learningA
Persist researched settings so FUTURE sessions start smarter. updates uses the guidance shape, e.g. {"sampling": {"cfg": {"default": 3.5}}} or {"techniques": {"face_detailer": {"denoise": 0.4}}}. source = URL/model page. Any family name works; for a NEW family also include a "detect" block so it's auto-recognized next session: {"detect": {"checkpoint_patterns": ["mymodel"]}, "loader": "unet_clip_vae"}.
A "sources" list teaches organize_workflow's Models note where to download each file - it never invents a URL, so this is the only way one appears: {"sources": [{"match": ["mymodel_v1.safetensors"], "what": "checkpoint", "url": "https://..."}]}. Verify the URL resolves before recording it.
| Name | Required | Description | Default |
|---|---|---|---|
| family | Yes | ||
| source | Yes | ||
| updates | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations present (readOnlyHint=false, destructiveHint=false), the bar is lower, and the description adds real behavioral context: persistence affects future sessions, a 'detect' block enables auto-recognition next session, and the tool 'never invents a URL, so this is the only way one appears' — a genuine policy disclosure. It also instructs URL verification before recording. Nothing contradicts the annotations: readOnlyHint=false is consistent with a persist operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat long, but every segment earns space: the purpose is front-loaded, the updates shape needs its examples, and the NEW-family and sources-list paragraphs cover mandatory edge cases. It is densely structured with little fluff, though the many inline JSON examples make it verbose by necessity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All three required parameters are explained, edge cases (new family detection, sources-only URL introduction) are covered, and an output schema exists, so return values need no explanation. The remaining gaps are minor: it presupposes familiarity with 'the guidance shape', and it does not describe what happens on failure or how recorded settings interact with get_model_guidance. For a high-complexity tool the description is still complete enough for a first-call agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden and fully compensates: it assigns meaning to 'family' (any family name, with the NEW-family detect/loader variant), 'source' (URL/model page) and 'updates', with concrete shape examples such as {"sampling": {"cfg": {"default": 3.5}}}. It also explains the separate 'sources' list block and how the pattern matches checkpoint filenames. This is exemplary parameter documentation for a bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource: 'Persist researched settings so FUTURE sessions start smarter.' This clearly expresses a write/update operation over a learning/guidance resource, which is readily distinguishable from the retrieval-oriented sibling get_model_guidance and from organize_workflow. The intent is unambiguous even without reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description is rich with intra-tool guidance: when updating provide the guidance shape, for a NEW family include a detect block, and include a sources list only to introduce URLs. However, it does not explicitly say when to use this tool vs. the alternatives (e.g., get_model_guidance for the read side of the same data), nor does it state any exclusions or conditions that would route an agent elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_missing_nodesARead-onlyIdempotent
Find which installable node packs provide these node class names (official Comfy Registry). THIS is the tool for missing/uninstalled nodes (port_workflow is for model-family moves, not missing nodes). Returns pack ids, repos, and install hints. Installing custom nodes runs third-party code - surface the choice to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| class_types | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, and idempotentHint, so the description is free to add context. It does so by specifying that the tool returns pack ids, repos, and install hints, and by flagging the third-party code risk associated with installing custom nodes. This adds meaningful behavioral context without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight and purposeful: a clear first sentence names the tool's function, the second distinguishes it from a sibling, and the third adds output and risk context. Every sentence earns its place without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema and three annotations, the description covers purpose, selection criteria, return values, and the important user-consent caveat. There is no major contextual gap for an agent to successfully select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate. It usefully clarifies the parameter as node class names, but it does not fully explain the expected format or source of those class names beyond their obvious semantic connection to missing nodes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: find which installable node packs provide the queried node class names, scoped to the official Comfy Registry. It also explicitly states this is the tool for missing/uninstalled nodes and names a sibling tool it is not, making differentiation clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit boundary: use this for missing/uninstalled nodes, while port_workflow is for model-family moves and not for missing nodes. It also gives operational guidance by warning that installing custom nodes runs third-party code, so the user's choice must be surfaced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_workflowA
Queue the workflow and (by default) wait for completion. Returns status, node errors on failure, output file refs, any non-file return values (data_outputs: generated text, paths a save node wrote), and an inline preview thumbnail so you can SEE the result (view_output fetches full size). wait=False returns {status: queued, prompt_id} - poll get_run_status. Prove a workflow works before saving/delivering.
Text-only caller (no image input)? Pass return_preview=False - the result then carries a file path instead of a thumbnail if save_dir/COMFYUI_MOUNT_DIR is set.
roll_seeds=True (default) mirrors the browser: every seed/PrimitiveNode set to randomize/increment/decrement is re-rolled and persisted before submit - the raw /prompt API never does, so headless runs repeat forever. False re-runs the stored values.
allow_invalid=True submits despite local validation errors (ComfyUI is the final judge; use it if a valid graph is wrongly blocked). save_dir (or the configured COMFYUI_MOUNT_DIR) relocates every finished output file - images, video, audio alike - into a folder the caller can reach, returning saved_paths. Needs finished files (wait=True); a background run relocates later via save_output(prompt_id=...).
front: None (default) refuses to queue when >=2 prompts are already pending and returns {status: queue_busy} so the USER can choose; True runs next (pending jobs untouched); False waits at the back of the line.
confirm_spend: partner/API nodes charge the user's account per submit, so a graph containing one is gated - pass True only after they have agreed.
LONG RENDERS: a timeout cancels the caller's wait, not the ComfyUI job. Submit wait=False, front=False, then poll get_run_status(prompt_id) until success/error/partial and call save_output. prompt_id survives in manage_queue(status).draftsman_submitted if your session dies mid-poll.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | ||
| front | No | ||
| save_dir | No | ||
| roll_seeds | No | ||
| workflow_id | Yes | ||
| allow_invalid | No | ||
| confirm_spend | No | ||
| return_preview | No | ||
| timeout_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without rich annotations, the description carries the burden and exceeds it: it explains seed re-rolling and persistence versus the raw /prompt API, server-side validation authority, spending gates, timeout behavior that does not kill the ComfyUI job, and recovery via draftsman_submitted after the session dies. This is substantial context beyond what annotations state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but every paragraph earns its place: core behavior first, then wait/front semantics, then edge cases and long-render polling guidance. The structure is scannable and the wording is dense without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides the full return contract, including failure and queued responses. It also tells the agent what to do when the pipeline times out and where prompt_id can be recovered after an interrupted session. For a 9-parameter tool with side effects, the contextual surface is fully covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains wait, roll_seeds, allow_invalid, confirm_spend, return_preview, front, save_dir, and timeout_seconds. workflow_id is the sole obviously-nameable parameter and does not need elaboration, so the coverage is nearly complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a clear verb+resource pair ('Queue the workflow') and then enumerates exactly what it returns (status, node errors, output file refs, data_outputs, inline preview thumbnail). It also explicitly separates itself from view_output and get_run_status, so an agent can distinguish it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete conditional guidance: use wait=False for long renders, poll with get_run_status, save with save_output, pass return_preview=False when no image input is needed, set confirm_spend=True only after explicit user agreement, and allow_invalid only when local validation can be lax. It even names the alternative tools and the scenarios that select them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_outputA
Copy a finished render out of ComfyUI's output tree into a folder the caller (e.g. a Claude Desktop / Cowork sandbox) can reach. ComfyUI's save nodes only write inside its own output/ dir and reject absolute paths, so a render must be relocated before it can be presented or edited.
Pass prompt_id (relocates every output FILE of that finished job - images, video, audio) OR an explicit filename (+subfolder/type, as reported in a run's outputs). dest_dir defaults to COMFYUI_MOUNT_DIR; dest_filename renames a single file. Returns {saved_paths, dest_dir}.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | output | |
| dest_dir | No | ||
| filename | No | ||
| overwrite | No | ||
| prompt_id | No | ||
| subfolder | No | ||
| dest_filename | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only and not destructive. The description adds valuable behavioral detail: ComfyUI save nodes reject absolute paths, the tool relocates output files, dest_dir defaults to COMFYUI_MOUNT_DIR, and the return contains saved_paths and dest_dir. The only mild gap is not detailing overwrite semantics, but that is covered enough by the parameter names and defaults.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The first sentence states the purpose, the second gives the 'why', and the subsequent sentences explain usage and return value. Every sentence adds useful information, and nothing feels repetitive or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is nearly complete for a 7-parameter tool, covering the major options and the return shape, and an output schema exists. It could be slightly more explicit about how overwrite and type/subfolder combine with filename, but the essential knowledge an agent needs to run the command is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry the parameter-load. It explains prompt_id, filename, dest_dir, and dest_filename well, and refers to subfolder/type inferring their usage. It does not explicitly define every parameter (e.g., overwrite), but the core selection logic is clear and materially more helpful than the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear action and scope: 'Copy a finished render out of ComfyUI's output tree into a folder the caller can reach.' It identifies the source, the destination constraint, and the rationale, so an agent knows exactly what this tool does and how it differs from purely viewing or uploading content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong context on why relocation is needed and explains the two invocation modes: pass a prompt_id for all outputs or a filename for a single file. It does not explicitly list when to choose alternatives, but the use case is well scoped and the two modes are clearly contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_workflowA
Save the workflow (UI format, with layout/groups/notes) into ComfyUI's workflow browser + the session dir. Run organize_workflow first - this is the deliverable. REFUSES to save with validation errors unless allow_invalid=True. Never overwrites by default: a taken name saves as ' (draftsman)' (result.renamed_from says so); overwrite=True replaces deliberately.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| overwrite | No | ||
| workflow_id | Yes | ||
| allow_invalid | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses several non-obvious behaviors beyond the annotations: it refuses invalid saves unless allow_invalid=True, never overwrites by default, renames collisions to '<name> (dartsman)', reports this through result.renamed_from, and replaces only when overwrite=True. The annotation destructiveHint=false is compatible with the default non-destructive path; overwrite is an explicit opt-in rather than an annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause adds information: purpose/format, prerequisite/mission, validation behavior, collision behavior, and overwrite semantics. There is no filler or repetition of schema/annotation fields, and the most important purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with an output schema, the description covers the key invocation constraints: prerequisite, validation gating, overwrite risk, and collision naming. The main gap is that workflow_id and name are not explained in the description, so the agent must rely on parameter names and schema type information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 0% of the parameters, so the description must compensate. It does explain the behavior of allow_invalid and overwrite, and the naming behavior around name collisions, but it never explicitly explains workflow_id or that name is the new save name. These are inferable, but the description leaves part of the parameter-load to the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Save the workflow'), the resource ('UI format, with layout/groups/notes'), and the destination ('ComfyUI's workflow browser + session dir'). It does not explicitly name a sibling it is not, but the UI-format qualifier and the mention of session-dir saving distinguish it from export-only or output-saving tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete precondition ('Run organize_workflow first'), explicitly says this is the deliverable, and explains when validation errors block saving unless allow_invalid=True. It does not explicitly contrast itself with sibling tools such as export_workflow_json or save_output, so the routing guidance is clear but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_node_packsARead-onlyIdempotent
Search the Comfy Registry for node packs by capability (e.g. 'face detailer', 'wildcards', 'video interpolation').
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already report readOnly, openWorld, and idempotent, and the description's 'search' wording is consistent. It adds the domain context of the Comfy Registry, but it does not disclose extra behavioral details such as rate limits, result size, pagination, or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that explains the operation, resource, scope, and examples real.true. There is no filler, repetition, or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This compact one-parameter, read-only, idempotent search tool with an output schema needs only modest explanation. The description succeeds exception it could not mention whether the query accepts natural language, exact terms, or a specific search syntax.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only says 'query' is a string, so the description must compensate for the bare schema. It tells the agent that the query should be a capability and gives meaningful examples ('face detailer', 'wildcards', 'video interpolation'), making the parameter's intended semantics clear despite no extra schema help.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states an operation ('search'), a resource ('Comfy Registry node packs'), and the search facet ('by capability') with concrete examples. This distinguishes it from sibling search_nodes because it targets node packs rather than nodes or other resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The capability examples imply when the tool should be used, but the description never explains when to prefer it over search_nodes or another sibling. There is no explicit exclusion, alternative routing, or contextual condition beyond the phrase 'by capability.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_nodesARead-onlyIdempotent
Search node classes installed on the instance (name/display-name/description).
Use category to narrow (e.g. 'loaders', 'conditioning', 'sampling', 'ImpactPack'). Set detail=True to fold each hit's full input/output schema in-line (use a specific query + small limit) so you can skip the follow-up get_node_info.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| detail | No | ||
| category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open world aspects. The description adds useful behavioral context: what fields are searched, how category narrows results, and that detail=True folds full I/O schema into each hit, letting the agent avoid a second call. No contradictions with the read-only/idempotent hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences front-load the core purpose and then give targeted usage and efficiency tips. Every clause adds value, no redundancy or filler. The structure is easy to parse for an agent: search, narrow, get details as needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for this read-only search tool given the output schema and annotations. It tells the agent what it searches, how to narrow with category, when to request detail, and how to avoid a follow-up get_node_info. Nothing essential for selecting or invoking this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It explains query semantics (search over name/display-name/description), category (narrow with examples), detail (in-line schema), and limit (small limit when using detail). It doesn't describe the bare 'limit' term, but that is semantically evident from the schema default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Search node classes installed on the instance' with explicit match fields (name/display-name/description). It distinguishes itself from sibling tools by noting that setting detail=True lets you 'skip the follow-up get_node_info', and the word 'classes' separates it from search_node_packs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides actionable guidance with concrete category examples ('loaders', 'conditioning', 'sampling', 'ImpactPack') and a rule for detail usage: set detail=True with a specific query and small limit to skip get_node_info. It clearly explains how to adjust behavior, though it doesn't enumerate when *not* to use this tool versus all possible siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_imageA
Upload a source image into ComfyUI's input folder so LoadImage can use it (img2img / inpaint / ControlNet). Exactly one of image_path (local file) or image_base64. mask_for={filename, subfolder?, type?} uploads this as a MASK for that already-uploaded image instead.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| mask_for | No | ||
| overwrite | No | ||
| subfolder | No | ||
| image_path | No | ||
| image_base64 | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavioral context beyond the sparse annotations: the uploaded file lands in the input folder, exactly one of image_path or image_base64 must be supplied, and mask_for changes the behavior to upload as a MASK instead of an image. It does not cover the effect of the overwrite parameter, which could be a destructive operation, nor the filename derivation semantics; this is a minor gap given the destructiveHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler; the core purpose is front-loaded and the second sentence captures the two critical behavior twists (exclusivity and mask mode). Every sentence earns its place and does not repeat schema contents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's real complexity (6 params, 0% schema coverage, limited annotations), the description covers the highest-risk information: the destination, the input modes, and the mask variant. An output schema exists so the return value is already covered, but the description still omits overwrite and subfolder edge behavior, which an agent may need for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden and largely delivers: it explains image_path (local file) vs image_base64, their mutual exclusivity, and decomposes mask_for's shape with its subfields. It is silent on name, subfolder, and overwrite, whose semantics are inferable from their names and defaults, so the compensation is solid but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: uploads a source image into ComfyUI's input folder so LoadImage can use it, and names the use cases (img2img / inpaint / ControlNet). This clearly distinguishes it from the sibling tools, especially save_output which moves data out rather than into the ComfyUI input folder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use this tool: before workflows that need LoadImage to reference an input image for img2img, inpaint, or ControlNet. It documents the exclusive either/or of image_path vs image_base64 and the mask_for alternative mode. It does not explicitly state when not to use it or name a sibling as an alternative, so no exclusion is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_workflowARead-onlyIdempotent
Validate against the LIVE instance: node classes installed, widget values in range, combo/model-file values actually present (with closest-match suggestions), required inputs connected. Fix errors before run_workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It clearly communicates that validation happens against the live instance and includes detailed behaviors such as 'closest-match suggestions'. This adds practical nuance beyond the readOnlyHint/idempotentHint annotations. No contradictory behavior is implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose. Every clause adds meaningful detail, though the closing instruction 'Fix errors before run_workflow' is a behavioral guideline rather than a descriptive detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers the key validation dimensions and current environment scope, and the output schema handles structured return information. The only minor gap is the absence of explicit mention whether validation fully blocks execution or merely warns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has only one parameter, workflow_id, but the description never explicitly explains this parameter beyond the inferred meaning of 'validate the workflow'. With schema description coverage at 0%, the description should compensate, and it does not add direct parameter-level guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific action and target: 'Validate against the LIVE instance'. It enumerates concrete validation checks (node classes installed, widget values, combo/model-file values, required inputs connected), which clearly separates this from static analysis tools like lint_workflow or diagnose_workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Fix errors before run_workflow' makes the intended context explicit: this is a pre-flight validation step before execution. It does not name alternatives or state when not to use this tool, so it stops short of the strongest form of usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_outputARead-onlyIdempotent
Fetch a rendered image so you (and the user) can SEE it - refs come from run_workflow/get_run_status outputs. Downscaled to max_dim px to keep the conversation light; max_dim=None for full resolution.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | output | |
| max_dim | No | ||
| filename | Yes | ||
| subfolder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotent behavior, so the safety profile is clear. The description adds meaningful behavioral context beyond the annotations by disclosing downscaling to max_dim and the full-resolution behavior when max_dim is None. It is honest about what it fetches and why the scaling behavior exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it says what the tool is in the first clause and the why behind the behavior in the same breath. Every sentence earns its place, with no repeated information or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no output schema, the description is a bit thin: It leaves filename semantics and the meaning of type/subfolder implicit, and it does not mention how the fetched image is returned to the agent. The source-of-truth pointer to run_workflow/get_run_status outputs helps, but more documentation would improve usability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the responsibility for explaining parameters. It only explains max_dim and its resolution behavior. filename, type, and subfolder are left undocumented, and the description does not state how these map to the output refs received from run_workflow/get_run_status. This is a meaningful gap for an agent trying to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Fetch a rendered image') and why it is used ('so you and the user can SEE it'). It also anchors the image source to run_workflow/get_run_status outputs, which helps differentiate this viewer from the workflow-management siblings. It does not explicitly name or distinguish a sibling tool, so it stops just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the intended use: fetch an image after running a workflow and looking at run status output. It does not explicitly state when not to use this tool or mention alternatives such as save_output, upload_image, or get_run_status. Some usage context is present, but it is largely implicit.
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. Dates show when Glama detected each change.
29 tool updates
v0.15.1- Added
check_setup - Changed
create_workflow3 fields changed- removed
Input schema / properties / template / titleRemoved value: -"Template" - removed
Input schema / properties / titleRemoved value: -{ - "title": "Title", - "type": "string" -} - removed
Input schema / titleRemoved value: -"create_workflowArguments"
- Changed
diagnose_workflow2 fields changed- removed
Input schema / properties / workflow_id / titleRemoved value: -"Workflow Id" - removed
Input schema / titleRemoved value: -"diagnose_workflowArguments"
- Changed
edit_workflow4 fields changed- removed
Input schema / properties / operations / titleRemoved value: -"Operations" - added
Input schema / properties / summaryAdded value: +{ + "default": false, + "type": "boolean" +} - removed
Input schema / properties / workflow_id / titleRemoved value: -"Workflow Id" - removed
Input schema / titleRemoved value: -"edit_workflowArguments"
- Changed
export_workflow_json3 fields changed- removed
Input schema / properties / format / titleRemoved value: -"Format" - removed
Input schema / properties / workflow_id / titleRemoved value: -"Workflow Id" - removed
Input schema / titleRemoved value: -"export_workflow_jsonArguments"
- Added
find_workflow - Changed
get_instance_info1 field changed- removed
Input schema / titleRemoved value: -"get_instance_infoArguments"
- Changed
get_model_guidance3 fields changed- removed
Input schema / properties / family / titleRemoved value: -"Family" - removed
Input schema / properties / model_filename / titleRemoved value: -"Model Filename" - removed
Input schema / titleRemoved value: -"get_model_guidanceArguments"
- Changed
get_node_info5 fields changed- removed
Input schema / properties / choices_filter / titleRemoved value: -"Choices Filter" - removed
Input schema / properties / class_type / titleRemoved value: -"Class Type" - removed
Input schema / properties / class_types / titleRemoved value: -"Class Types" - removed
Input schema / properties / max_choices / titleRemoved value: -"Max Choices" - removed
Input schema / titleRemoved value: -"get_node_infoArguments"
- Changed
get_run_status2 fields changed- removed
Input schema / properties / prompt_id / titleRemoved value: -"Prompt Id" - removed
Input schema / titleRemoved value: -"get_run_statusArguments"
- Changed
import_workflow4 fields changed- removed
Input schema / properties / name / titleRemoved value: -"Name" - removed
Input schema / properties / titleRemoved value: -{ - "default": "", - "title": "Title", - "type": "string" -} - removed
Input schema / properties / workflow_json / titleRemoved value: -"Workflow Json" - removed
Input schema / titleRemoved value: -"import_workflowArguments"
- Changed
inspect_workflow2 fields changed- removed
Input schema / properties / workflow_id / titleRemoved value: -"Workflow Id" - removed
Input schema / titleRemoved value: -"inspect_workflowArguments"
- Changed
lint_workflow2 fields changed- removed
Input schema / properties / workflow_id / titleRemoved value: -"Workflow Id" - removed
Input schema / titleRemoved value: -"lint_workflowArguments"
- Changed
list_models4 fields changed- removed
Input schema / properties / folder / titleRemoved value: -"Folder" - added
Input schema / properties / metadata_forAdded value: +{ + "default": "", + "type": "string" +} - removed
Input schema / properties / search / titleRemoved value: -"Search" - removed
Input schema / titleRemoved value: -"list_modelsArguments"
- Changed
list_templates6 fields changed- removed
Input schema / properties / search / titleRemoved value: -"Search" - removed
Input schema / titleRemoved value: -"list_templatesArguments" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "items": { - "additionalProperties": true, - "type": "object" - }, - "title": "Result", - "type": "array" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"list_templatesOutput"New value: +"list_templatesDictOutput"
- Changed
list_workflows2 fields changed- removed
Input schema / properties / search / titleRemoved value: -"Search" - removed
Input schema / titleRemoved value: -"list_workflowsArguments"
- Changed
manage_queue5 fields changed- removed
Input schema / properties / action / titleRemoved value: -"Action" - added
Input schema / properties / confirmAdded value: +{ + "default": false, + "type": "boolean" +} - removed
Input schema / properties / prompt_ids / titleRemoved value: -"Prompt Ids" - removed
Input schema / properties / unload_models / titleRemoved value: -"Unload Models" - removed
Input schema / titleRemoved value: -"manage_queueArguments"
- Changed
organize_workflow2 fields changed- removed
Input schema / properties / workflow_id / titleRemoved value: -"Workflow Id" - removed
Input schema / titleRemoved value: -"organize_workflowArguments"
- Changed
port_workflow3 fields changed- removed
Input schema / properties / target_family / titleRemoved value: -"Target Family" - removed
Input schema / properties / workflow_id / titleRemoved value: -"Workflow Id" - removed
Input schema / titleRemoved value: -"port_workflowArguments"
- Changed
record_learning4 fields changed- removed
Input schema / properties / family / titleRemoved value: -"Family" - removed
Input schema / properties / source / titleRemoved value: -"Source" - removed
Input schema / properties / updates / titleRemoved value: -"Updates" - removed
Input schema / titleRemoved value: -"record_learningArguments"
- Changed
resolve_missing_nodes2 fields changed- removed
Input schema / properties / class_types / titleRemoved value: -"Class Types" - removed
Input schema / titleRemoved value: -"resolve_missing_nodesArguments"
- Changed
run_workflow10 fields changed- removed
Input schema / properties / allow_invalid / titleRemoved value: -"Allow Invalid" - added
Input schema / properties / confirm_spendAdded value: +{ + "default": false, + "type": "boolean" +} - added
Input schema / properties / frontAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / return_preview / titleRemoved value: -"Return Preview" - added
Input schema / properties / roll_seedsAdded value: +{ + "default": true, + "type": "boolean" +} - removed
Input schema / properties / save_dir / titleRemoved value: -"Save Dir" - removed
Input schema / properties / timeout_seconds / titleRemoved value: -"Timeout Seconds" - removed
Input schema / properties / wait / titleRemoved value: -"Wait" - removed
Input schema / properties / workflow_id / titleRemoved value: -"Workflow Id" - removed
Input schema / titleRemoved value: -"run_workflowArguments"
- Changed
save_output8 fields changed- removed
Input schema / properties / dest_dir / titleRemoved value: -"Dest Dir" - removed
Input schema / properties / dest_filename / titleRemoved value: -"Dest Filename" - removed
Input schema / properties / filename / titleRemoved value: -"Filename" - removed
Input schema / properties / overwrite / titleRemoved value: -"Overwrite" - removed
Input schema / properties / prompt_id / titleRemoved value: -"Prompt Id" - removed
Input schema / properties / subfolder / titleRemoved value: -"Subfolder" - removed
Input schema / properties / type / titleRemoved value: -"Type" - removed
Input schema / titleRemoved value: -"save_outputArguments"
- Changed
save_workflow5 fields changed- removed
Input schema / properties / allow_invalid / titleRemoved value: -"Allow Invalid" - removed
Input schema / properties / name / titleRemoved value: -"Name" - removed
Input schema / properties / overwrite / titleRemoved value: -"Overwrite" - removed
Input schema / properties / workflow_id / titleRemoved value: -"Workflow Id" - removed
Input schema / titleRemoved value: -"save_workflowArguments"
- Changed
search_node_packs2 fields changed- removed
Input schema / properties / query / titleRemoved value: -"Query" - removed
Input schema / titleRemoved value: -"search_node_packsArguments"
- Changed
search_nodes5 fields changed- removed
Input schema / properties / category / titleRemoved value: -"Category" - removed
Input schema / properties / detail / titleRemoved value: -"Detail" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / query / titleRemoved value: -"Query" - removed
Input schema / titleRemoved value: -"search_nodesArguments"
- Changed
upload_image7 fields changed- removed
Input schema / properties / image_base64 / titleRemoved value: -"Image Base64" - removed
Input schema / properties / image_path / titleRemoved value: -"Image Path" - removed
Input schema / properties / mask_for / titleRemoved value: -"Mask For" - removed
Input schema / properties / name / titleRemoved value: -"Name" - removed
Input schema / properties / overwrite / titleRemoved value: -"Overwrite" - removed
Input schema / properties / subfolder / titleRemoved value: -"Subfolder" - removed
Input schema / titleRemoved value: -"upload_imageArguments"
- Changed
validate_workflow2 fields changed- removed
Input schema / properties / workflow_id / titleRemoved value: -"Workflow Id" - removed
Input schema / titleRemoved value: -"validate_workflowArguments"
- Changed
view_output5 fields changed- removed
Input schema / properties / filename / titleRemoved value: -"Filename" - removed
Input schema / properties / max_dim / titleRemoved value: -"Max Dim" - removed
Input schema / properties / subfolder / titleRemoved value: -"Subfolder" - removed
Input schema / properties / type / titleRemoved value: -"Type" - removed
Input schema / titleRemoved value: -"view_outputArguments"
27 tool updates
v0.2.0- First observed
create_workflow - First observed
diagnose_workflow - First observed
edit_workflow - First observed
export_workflow_json - First observed
get_instance_info - First observed
get_model_guidance - First observed
get_node_info - First observed
get_run_status - First observed
import_workflow - First observed
inspect_workflow - First observed
lint_workflow - First observed
list_models - First observed
list_templates - First observed
list_workflows - First observed
manage_queue - First observed
organize_workflow - First observed
port_workflow - First observed
record_learning - First observed
resolve_missing_nodes - First observed
run_workflow - First observed
save_output - First observed
save_workflow - First observed
search_node_packs - First observed
search_nodes - First observed
upload_image - First observed
validate_workflow - First observed
view_output
TDQS
Most tools have clearly separated roles: instance introspection, node/module discovery, workflow editing, workflow checking, execution, output handling, and queue management. A few pairs like get_instance_info/check_setup and lint_workflow/validate_workflow/diagnose_workflow are close enough to require careful reading, but they are not interchangeable.
Every tool uses clear, predictable snake_case verb_noun naming: get_, list_, create_, import_, edit_, run_, save_, search_, and manage_ are applied consistently. The many *workflow tools all share the same suffix pattern, and there are no mixed conventions or vague verbs.
At 29 tools, this is a heavy toolset, but the count maps fairly well to the broad ComfyUI lifecycle: setup, discovery, workflow creation/editing, validation/repair, execution, output retrieval, queue control, and persisted knowledge. It is slightly over-scoped, with a few validation/status/output tools that could theoretically be merged, but the count is not bloated given the domain.
The surface is nearly complete for a ComfyUI drafting assistant: one can discover nodes/models/templates, create and import workflows, edit and organize them, validate or diagnose them, run them, fetch outputs, upload images, manage the queue, and save or export the result. The main missing lifecycle niceties are explicit workflow deletion and uninstall/manage node packs, which are minor gaps rather than dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Remote MCP server for RunComfy Serverless API (ComfyUI): deployments and async inference.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceMCP server that connects local ComfyUI to AI agents, enabling natural language control of ComfyUI for creating workflows, generating images, and managing the queue.-
- AlicenseBqualityBmaintenanceAn MCP server that bridges AI agents with ComfyUI for automated workflow building, execution, monitoring, and output routing.961MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that enables AI agents to control a local ComfyUI instance for image generation, allowing workflow understanding, parameter modification, execution, and model discovery.233Apache 2.0
- AlicenseAqualityCmaintenanceA universal MCP server that lets agents discover ComfyUI nodes, build/edit/run API workflows, manage queues, retrieve outputs, and optionally render graphs on a ComfyUI canvas.23Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/EnragedAntelope/comfy-draftsman'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
