Skip to main content
Glama

comfyui-mcp

An MCP server that drives a local ComfyUI - including the workflow you have open in the browser.

English | Русский | Changelog


Point your assistant at ComfyUI and it can list your workflows, work out what parameters each one takes, run them, watch the progress, and show you the result. With the optional bridge node installed it can also read and edit the canvas on screen, unsaved changes and all.

you: run the ideogram workflow at 1.5 megapixels, portrait
     -> describe_workflow  finds `megapixels` and `aspect_ratio` and where they land
     -> run_workflow       submits, streams progress, returns the file
     -> show_image         you look at it

Why the bridge is the interesting half

ComfyUI's HTTP API knows about files, models and the queue. It knows nothing about the workflow being edited: that lives in litegraph, inside the page, and the only copy of its unsaved state is in the tab's memory.

The bridge turns the WebSocket ComfyUI already holds open to every client into a request/response channel, so an assistant can read the live graph, change widget values, rewire links, tidy the layout, take a screenshot of the canvas, and queue the workflow the same way the Queue button does.

It also goes the other way. A question can be put on the ComfyUI screen and answered there - below the canvas rather than over it, so the graph stays visible and usable while you decide. That is the whole point: the question worth asking is "look at this and tell me", and a modal box covers the thing to look at.

Everything else works without it, and the tools say plainly which of the two setup steps is missing rather than failing vaguely.

Related MCP server: ComfyPilot

Requirements

  • ComfyUI - a portable build or any local install.

  • Nothing else. The installer fetches uv, which then builds an isolated .venv with the right Python. No global Python, no system packages.

  • An MCP client. Eleven are supported out of the box; see below.

Install

Windows

install.bat

Linux and macOS

./install.sh

Five steps: fetch uv, build the .venv, seed .env from the template, check the server imports, run the test suite. Safe to run again - each step checks whether it is already done.

Prefer a menu to remembering names? launcher.bat / ./launcher.sh opens one window over every script in the folder, and installs first if there is no .venv yet.

Tell it where ComfyUI is

configure_comfy.bat        ./configure_comfy.sh

Root folder, port, launch script, the model and export directories, the download token. The installer opens this window by itself if it cannot resolve COMFYUI_ROOT. Everything it writes goes to .env; see .env.example for the full list of settings.

Connect your MCP client

configure_clients.bat      ./configure_clients.sh

Generates a ready config for Claude Code, Cursor, Kilo Code, OpenCode, LM Studio, Cherry Studio, MiMo Code, OpenClaw, Hermes, Codex and llama.cpp - the right shape, the right container key, the right file format, with the absolute paths into this checkout already filled in. An existing config is merged rather than replaced, and a file with comments in it is never rewritten.

Install the bridge node

install_node.bat           ./install_node.sh
uninstall_node.bat         ./uninstall_node.sh

A directory junction (symlink on Unix) into custom_nodes, so there is no second copy to drift. No administrator rights needed.

Restart ComfyUI afterwards - custom nodes are imported once at startup. After that, opening a tab is all it takes; workspace_status says whether both halves are in place.

What the 50 tools cover

Group

What it is for

Status

is ComfyUI up, what is the VRAM and the queue doing

Workflows and reference

list workflow files, work out their parameters, search the node catalogue, read a node's schema

Logs

ComfyUI's own console, and the browser console - where a failed extension is the only place it says anything

Canvas: reading

the live graph, a screenshot of it, which workflow tabs are open, a diagnosis of what is wrong with it

Canvas: editing

widget values, properties, on-screen labels, links, node modes, layout, groups, undo

Asking the user

put a question on the ComfyUI screen and wait for the person to answer

Running

run a file or the canvas, follow the progress, fetch the result, show an image

Downloading models

fetch a model to the directory ComfyUI actually reads, with progress

Process and tab

start, stop or restart ComfyUI; reload the browser tab

A ComfyUI this server started is stopped when the server exits, and stopping it takes the whole tree rather than the launcher it runs behind. A ComfyUI you started yourself is never touched by any of this. If the server is killed outright its ComfyUI keeps running - the next server recognises it and can stop it, but does not do so on its own, because a generation outlives an editor crash and may still be running.

Not all of them have to be offered. configure.bat writes one line to .env that narrows the set - a switched-off tool is not registered at all, so its schema never reaches the model's context. What is off is reported by comfy_status, so the assistant does not conclude the server cannot do it.

Security

The server, ComfyUI and the browser tab all run on your own machine, under your own account, over stdio. Nothing leaves it except the model downloads you ask for. What follows is what that still leaves open, because "it runs locally" is not the whole answer.

The download is the sharp end. A model URL routinely arrives from somebody else's document - a "Model Links" note inside a shared workflow, or a loader's properties.models - reaches the assistant as ordinary text, and the assistant has a downloader. So download_model refuses three things before it opens a socket, and refuses a dry_run the same way:

  • A host you did not allow. COMFYUI_DOWNLOAD_ALLOW_HOSTS ships non-empty. An injected instruction can name any URL; it cannot name a host that is not on the list.

  • A format that executes as it loads. .ckpt .pt .pth .bin .pkl are pickle; .safetensors and .gguf are data. Refused unless COMFYUI_DOWNLOAD_ALLOW_PICKLE says otherwise.

  • A file the volume cannot hold, plus a ceiling of your own if you want one.

A download token, if you set one, reaches the origin host and no further: the redirect chain is walked by hand so that a signed CDN link never sees it.

There is no authentication by default, and ComfyUI has none either. On localhost that is the posture you already have. If ComfyUI listens wider than that, set COMFYUI_BRIDGE_TOKEN here and COMFYUI_MCP_BRIDGE_TOKEN in ComfyUI's own environment - the bridge adds routes to ComfyUI's server, and one of them restarts the process.

A ComfyUI behind a reverse proxy is the other half of that. COMFYUI_USER and COMFYUI_PASSWORD send Basic Auth on both the HTTP calls and the WebSocket, which is what a proxy asking for credentials in front of the whole API needs - where the bridge token guards only the bridge's own routes. Set both or neither: one alone authenticates with nothing, and comfy_status says so rather than leaving you with a bare 401. The password goes in .env, not into the URL, where it would show up in process lists, logs and error text.

After editing .env, restart the server process. Reconnecting from the MCP client makes a new session against the same process, and the configuration was read once when that process started - so a reconnect leaves the old values in place with nothing saying so.

The tool switch is not a security boundary, and the tool descriptions say so. configure.bat decides what is offered, which is a coarse grid: the question about download_model is not whether it exists but where it may point, and that is what the settings above are for. Your MCP client's own permission prompts are the other half.

Workflows

Workflow files live in workflows/ and must be API format - Workflow -> Export (API) in ComfyUI. A UI-format export is refused with an explanation rather than half-read.

A workflow may ship a same-named .md beside it: an instruction file for whoever fills the parameters in, served verbatim by get_workflow_guide. Some graphs need input in a shape the node list cannot express, and prose gets you nowhere.

Two languages

Every window, the installer and .env.example speak English or Russian. COMFYUI_LANG decides; left empty it asks the machine. --lang=en opens any window in the other language for one run.

The tool descriptions the model reads stay English throughout, deliberately: they describe an interface to a program.

When something is wrong

  • A node type cannot be found, or a pack behaves as though half of it is missing: read get_comfy_log. A custom node whose import failed is simply absent from /object_info, and absent looks exactly like never installed.

  • A node is on the canvas but behaves wrongly: read get_console_log. The frontend catches an extension's import error and only logs it to the browser console, so that is the only place it exists.

  • A workspace tool fails: workspace_status names which of the two things is missing - the node, or an open tab. Neither is worth retrying.

Licence

GPL-3.0. ComfyUI itself is GPL-3.0, and the bridge half of this project is a custom node that runs inside it, so the same terms are the honest fit: use it, change it, distribute it - and pass the source and the credit along with it.

Copyright (C) 2026 pytraveler

Available Tools

50 tools
add_workspace_nodeA

Add a node to the workflow open in the browser, wired up and configured.

Inserting a node is one edit, so it is one call and one Ctrl+Z: the widgets and links go in with it. Doing it in three calls would take three presses to undo one intention, and a failure partway would leave a stray node behind.

Nothing is added unless every value and link validates. Link types are checked against the slots before anything is written, because litegraph refuses a mismatched connection by doing nothing and reporting nothing.

Args: type: the registered node type, e.g. "ImageScale" or "VAEEncodeTiled". find_node_types looks one up, by slot type when the name is not known; an unknown one comes back with near matches rather than a bare refusal. title: the label on the node. Defaults to the type's own. pos: [x, y] on the canvas. Defaults to the middle of the current view, so the user can see what arrived. values: widget values for the new node, {"<widget>": value} - no node id, since it does not have one yet. connect: links to make at the same time, [{"from": ..., "to": ...}] with both ends written "<node_id>.<slot>". The new node is "this", as in {"from": "this.IMAGE", "to": "9.images"}. A slot can be named or given by index. scope: "root" for the whole workflow, "active" for the subgraph on screen. client_id: which tab to edit; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
posNo
typeYes
scopeNoroot
titleNo
valuesNo
connectNo
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden. It discloses atomicity (one edit, one Ctrl+Z), all-or-nothing validation ('Nothing is added unless every value and link validates'), link type checking with litegraph's silent failure, and defaults for pos, title, and client_id. This goes well beyond a simple 'adds a node' statement.

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

Conciseness4/5

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

The description is well-structured with a purpose statement, rationale, validation note, and parameter breakdown. It is slightly verbose with the explanation of the one-call undo advantage, but that content is relevant and not wasteful. Overall, it is appropriately sized for the tool's complexity.

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

Completeness5/5

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

Given the tool's complexity (7 parameters, connect syntax, error behavior), the description is complete. It covers all parameters, defaults, validation, and failure modes. The output schema exists, so not detailing return values is acceptable. The context of the workflow editor and user experience (e.g., default pos to current view) is also addressed.

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

Parameters5/5

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

The Args section explains every parameter in detail, providing examples, defaults, and syntax. For instance, 'connect' is illustrated with `{"from": "this.IMAGE", "to": "9.images"}` and the meaning of 'scope' is defined. Since schema description coverage is 0%, this description fully compensates and adds significant value.

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

Purpose5/5

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

The description begins with a clear, specific statement: 'Add a node to the workflow open in the browser, wired up and configured.' This distinguishes the tool from siblings like set_workspace_links or set_workspace_values, as it covers the full addition with wiring and configuration in one operation.

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

Usage Guidelines4/5

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

The description explicitly advises doing the addition in one call to get a single Ctrl+Z undo and avoid stray nodes from partial failures. It contrasts this with splitting the work into three calls, thus giving clear context for when to use this tool over a combination of separate operations. It does not mention alternative tool names explicitly, but the guidance is clear enough.

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

align_workspaceA

Line nodes up on a common edge, space them evenly, or both.

Unlike arrange_workspace this never reads a link: it moves the nodes it is given along one axis and changes nothing else about the layout. That is the point - straightening a row of loaders should not rearrange the workflow around them. Reach for this when the graph is already laid out the way the author wants and only looks untidy.

Edges account for how big each node draws, so aligning right lines up the far edges of nodes of different widths rather than their positions, and a collapsed node lines up by its title bar rather than by the size it reports.

Args: nodes: the node ids to align - at least two. From get_workspace_graph. edge: "left", "right", "top", "bottom", "centre_x" or "centre_y". The centre forms use the middle of the whole selection. distribute: "x" or "y" - even out the gaps between the nodes along that axis. The outermost two stay where they are and the rest are shared out between them; gaps rather than centres, since nodes differ in size enough that even centres look uneven. spacing: an exact gap for distribute, in canvas units, instead of filling the space the nodes already span. edge and distribute combine only across axes: aligning tops while spreading horizontally is one intention, aligning lefts while spreading horizontally is two contradictory ones. apply: write the positions. False reports them without touching the canvas; the same dict can be passed to set_workspace_layout. scope: "root" for the whole workflow, "active" for the subgraph on screen. client_id: which tab to edit; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
edgeNo
applyNo
nodesYes
scopeNoroot
spacingNo
client_idNo
distributeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: it moves nodes along one axis only, accounts for node draw sizes including collapsed nodes, explains the effect of apply=false, and warns about contradictory edge/distribute combinations. This goes far beyond basic operation.

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

Conciseness5/5

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

The description is front-loaded with the main purpose, then uses concise paragraphs for distinction, edge cases, and parameter details. Every sentence earns its place, and the structure flows logically from use-case to parameter explanations.

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

Completeness5/5

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

Given the output schema exists, return values need no explanation. The description covers all parameters, usage scenarios, edge cases, and even interactions between parameters. It is complete for a complex tool with 7 parameters.

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

Parameters5/5

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

Despite 0% schema description coverage, the Args section documents all seven parameters with meaningful details (e.g., 'centre forms use the middle of the whole selection', 'spacing: an exact gap for distribute'). This compensates completely for the schema's lack of descriptions.

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

Purpose5/5

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

The description starts with a specific verb and resource: 'Line nodes up on a common edge, space them evenly, or both.' It explicitly contrasts with sibling tool arrange_workspace, stating 'Unlike arrange_workspace this never reads a link...' This clearly distinguishes the tool's purpose and scope.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: 'Reach for this when the graph is already laid out the way the author wants and only looks untidy.' It also names the alternative tool (arrange_workspace) and explains the difference, making the choice context clear.

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

arrange_workspaceA

Lay the workflow out left to right, in the order the data flows through it.

Each node goes as far right as its consumers allow, so a loader sits beside the sampler that reads it rather than in a column of loaders at the far edge, and the nodes in a column are ordered and placed to face what they are wired to. The result keeps the top-left corner it already had, so it lands where the author left it rather than at the origin.

Groups are laid out as groups. A group is a rectangle with no membership - what is in it is whatever falls inside - so arranging a grouped canvas flat scatters each group across the columns and its box stretches to follow, which on a real workflow turned eight tidy groups into overlapping sheets covering everything. So the layout runs inside each group first and then over the blocks they form, and ungrouped nodes travel together as one more block.

It still moves every node it is given, which is the blunt instrument. only is the narrow one: it arranges just those nodes and leaves the rest of the canvas alone - and since the caller has already said which nodes they mean, groups are not consulted in that case.

Args: only: node ids to arrange, leaving every other node where it is. Links to nodes outside the list are ignored, since they cannot place anything. spacing_x: gap between columns, past the widest node in the left one. spacing_y: gap between nodes stacked in one column. origin: [x, y] for the top-left of the result. Defaults to the top-left of what is being arranged, so nothing wanders off. apply: write the positions. False computes and reports them without touching the canvas - the same dict can then be passed to set_workspace_layout. scope: "root" for the top level, "active" for the subgraph on screen. Not "all": a subgraph is a canvas of its own with its own coordinates, so there is no one layout that covers several. Use navigate_workspace to go in and arrange with "active". client_id: which tab to arrange; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
onlyNo
applyNo
scopeNoroot
originNo
client_idNo
spacing_xNo
spacing_yNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and meets it: it warns that arranged groups otherwise scatter into overlapping sheets, discloses that the result keeps its existing top-left corner, and explains that apply=False computes without touching the canvas. It also calls out the blunt behavior that every node it is given will be moved.

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

Conciseness5/5

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

The description is longer than average but earns its length: each paragraph covers one behavioral facet—layout rule, group handling, scope, and parameters—and the most important outcome is front-loaded in the first sentence. The prose examples clarify rather than pad.

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

Completeness5/5

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

Given the tool's complexity, the absence of annotations, and the presence of an output schema, the description is complete: it explains the algorithm, group block behavior, node-scoped mode, coordinate meanings, apply vs report, scope constraints, and tab targeting. No critical operational question is left unanswered.

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

Parameters5/5

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

Schema coverage is 0%, so the description must compensate, and it does: an Args section defines all seven parameters with meaningful semantics, e.g. origin defaults to the arranged content's top-left, client_id means the recently focused tab, and scope explains why 'all' is not supported. This goes far beyond bare parameter names.

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

Purpose5/5

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

States a specific verb and resource: 'Lay the workflow out left to right, in the order the data flows through it.' The description explains the layout rule and the preserved corner, making it clear this is a data-flow-aware arrangement rather than a generic alignment tool.

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

Usage Guidelines5/5

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

Gives explicit when-to-use and when-not-to-use guidance: 'only' arranges just those nodes and leaves the rest alone, and scope is explicitly limited: 'Not "all"' with a pointer to navigate_workspace for subgraphs. It also directs users to set_workspace_layout when apply is False, naming the alternative path.

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

ask_workspaceA

Ask the person at the ComfyUI screen a question, and wait for their answer.

This is the one tool whose answer comes from a human rather than from the graph. Reach for it when the next step turns on something only they know - which of two results they preferred, what the subject of a prompt should be, whether a value looks right - instead of guessing and building on the guess.

The question goes in a panel below the canvas, not over it. That matters for the question most worth asking - "look at this and tell me" - because a modal dialog hides the canvas and closes on a click beside it, so looking is what cancels it. In the panel the graph stays visible and usable, and they can pan around before answering. modal=True puts it back in a dialog for a question that should interrupt rather than wait to be noticed.

It costs them an interruption either way, so it is worth one question rather than three: only one can be waiting at a time, on either surface, and a second call while one is open is refused rather than queued.

choices turns it into a pick, which is the cheaper question to answer. One click instead of typing, and the answer comes back as one of the strings you offered rather than something to parse - with choice_index beside it, because two options can read alike once phrased and an index cannot. Up to six are drawn as buttons and more become a dropdown. Choices need the panel: a dialog has no way to offer them, so modal=True with choices is refused.

allow_other adds a free-text box beside the buttons, for when the list may not cover it; the answer then comes back with choice_index: -1. Leave it off when the options really are exhaustive - it is one more thing on screen.

Three outcomes, and they mean different things. answer is what they typed or picked. dismissed means they closed the box without answering - easy to do by accident, since clicking beside it counts, so it is not a "no" and not permission to carry on regardless. timed_out means the wait ran out with the question still on screen; they may yet answer it, and until they do, another question cannot be asked.

Args: question: what to ask. Shown as the body of the dialog. title: heading above it. Defaults to "Question". default: text the input starts with, for when there is an obvious answer. placeholder: grey hint inside an empty input, or in the allow_other box. choices: options to offer instead of a text box. Each is a button (or an entry in a dropdown past six of them) and answering picks one. allow_other: add a free-text box beside the choices, answering with choice_index: -1. Ignored when there are no choices. modal: ask in a dialog over the canvas instead of the panel below it. Harder to miss, but it hides the graph and a stray click dismisses it, so it suits a question whose answer needs nothing on screen. seconds: how long to wait, 1 to 600. Keep it well under the per-call timeout your MCP client enforces, or the client gives up first. client_id: which tab to ask; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
modalNo
titleNo
choicesNo
defaultNo
secondsNo
questionYes
client_idNo
allow_otherNo
placeholderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full disclosure burden and does so thoroughly. It explains panel versus modal behavior, refusal conditions (modal+choices), the meaning of dismissed vs timed_out vs answer, and the consequence of dismissal ('not permission to carry on regardless'). This is far beyond what annotations would typically provide.

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

Conciseness5/5

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

Although long, the description earns its length by covering interactive edge cases that are invisible in the schema. It is front-loaded with the core purpose and uses bold lead-ins and short paragraphs to keep each behavioral section scannable.

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

Completeness5/5

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

For a human-interaction tool with no annotations, this description is remarkably complete. It covers the three answer outcomes, timeout considerations vs client timeout, multi-client targeting, choices rendering, and all invalid combinations, leaving no critical ambiguity for invocation.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully explain parameters, and it does. Every one of the 9 parameters has an individual entry with meaning, default behavior, and often edge-case constraints, such as allow_other producing choice_index: -1 and modal being refused with choices.

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

Purpose5/5

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

The description opens with a precise verb and resource: 'Ask the person at the ComfyUI screen a question, and wait for their answer.' It explicitly distinguishes itself from graph-derived tools by stating it is 'the one tool whose answer comes from a human rather than from the graph,' which separates it from all sibling tools.

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

Usage Guidelines5/5

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

It gives explicit when-to-use guidance: 'Reach for it when the next step turns on something only they know' with concrete examples, and contrasts with guessing. It also documents conditions to avoid misuse, such as not making multiple simultaneous questions because 'a second call while one is open is refused rather than queued.'

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

cancel_downloadA

Stop a download that is still running.

What has arrived stays in the .part file, so calling download_model again with the same arguments continues rather than starting over. For a transfer that is merely slow this is counter-productive.

Args: job_id: '/', or just the file name, or empty for the most recent download.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses a key side effect: 'What has arrived stays in the .part file' and that subsequent download_model calls continue rather than restart. It also cautions about counter-productive use on slow transfers. However, it doesn't mention edge cases like idempotency or error behavior when the download is already finished, which would round out transparency.

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

Conciseness5/5

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

The description is efficiently structured: a clear one-sentence purpose, a brief behavioral note, and a labeled Args section. Every sentence adds unique value, and the format is front-loaded with the essential verb and resource.

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

Completeness5/5

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

For a tool with a single optional parameter and an output schema, the description covers all necessary aspects: purpose, usage guidance, parameter semantics, and behavioral transparency. It is fully complete for the tool's simplicity and leaves no critical gaps 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.

Parameters5/5

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

The schema only provides job_id with a default of '', but the description adds complete semantics: it specifies the format '<folder>/<filename>', the shorthand of just the filename, and that empty means 'the most recent download.' This fully compensates for the 0% schema description coverage.

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

Purpose5/5

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

The description clearly states 'Stop a download that is still running,' which is a specific verb+resource action. It distinguishes itself from sibling tools like download_model (starts downloads) and get_download_progress (queries progress), and from interrupt which likely targets workflows rather than file downloads.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use (stop a running download) and when-not-to-use guidance: 'For a transfer that is merely slow this is counter-productive.' It also explains the alternative of calling download_model again to resume, effectively providing a clear usage context and exclusion.

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

close_workspace_tabA

Close one of the workflow tabs open in the ComfyUI window.

The counterpart to switch_workspace_tab, and the way to tidy up after a run of loads - each one opens its own tab, and they stay until something closes them.

Nothing here is written to disk and nothing can be undone. A closed workflow is out of the tab bar; if it had unsaved changes, they are gone. So a tab with unsaved changes is refused unless force says otherwise, and only ComfyUI's own Save in the browser clears that flag - save_workspace writes a copy to disk and leaves the workflow just as modified.

Closing the tab on screen moves to a neighbour first, so the canvas never ends up showing a workflow that is no longer open. The last remaining tab is refused: closing it would leave the window with nothing.

Args: tab: which one - an index from switch_workspace_tab, its path, or its filename. Empty closes the tab currently on screen. A name matching two open tabs is refused rather than guessed. force: close even when the tab has unsaved changes, losing them. client_id: which browser tab to ask; defaults to the most recently focused.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNo
forceNo
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses the irreversible nature, the unsaved changes risk, the force behavior, tab matching ambiguity, the refusal of the last remaining tab, and the canvas neighborhood transition. It also states that nothing is written to disk and nothing can be undone, providing essential behavioral context beyond annotations.

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

Conciseness5/5

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

The description is organized into a purpose paragraph, a behavioral caution paragraph, a canvas behavior note, and a parameter list. Every sentence adds useful information, and the structure makes it easy to scan. While detailed, each part contributes to safe selection and effective invocation.

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

Completeness5/5

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

The tool has an output schema and no required parameters, and the description still covers why, when, how, and what consequences apply. It explains ambiguous cases, refused edge cases, and save-related interaction with other tools. The description is fully sufficient for an agent to select and call this tool correctly.

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

Parameters5/5

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

Even though the input schema has no descriptions (coverage 0%), the description explains all three parameters clearly: tab's accepted forms (index/path/filename/empty), force's meaning and risk, and client_id's role as the browser tab identifier. This fully compensates for the schema gap.

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

Purpose5/5

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

The description opens with a specific verb and resource: "Close one of the workflow tabs open in the ComfyUI window." It clearly distinguishes itself from related tools like switch_workspace_tab, save_workspace, and the various workspace manipulation tools by focusing on tab lifecycle cleanup.

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

Usage Guidelines5/5

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

The description explicitly frames when to use this tool: as the counterpart to switch_workspace_tab, and as the way to tidy up after loads that each open a tab. It contrasts behavior with save_workspace and explains that only ComfyUI's own Save clears the dirty flag, giving clear functional context and exclusions.

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

comfy_startA

Launch the portable ComfyUI instance.

Args: wait: block until the HTTP API answers (up to COMFYUI_STARTUP_TIMEOUT).

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the burden of disclosing behavior. It does add useful context: the 'wait' argument blocks until the HTTP API responds, with a timeout. However, it omits other important behaviors like what happens if the instance is already running, error handling, or whether it launches asynchronously when wait=false.

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

Conciseness4/5

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

The description is very short and front-loaded with the core purpose. The 'Args' section is minimal but earns its place by explaining the single parameter. There is no fluff, though it could arguably include one or two more essential details without becoming wordy.

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

Completeness3/5

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

For a tool with a single optional parameter and an output schema, the description covers the main action and wait behavior. However, it leaves gaps such as behavior when already running, the meaning of COMFYUI_STARTUP_TIMEOUT, and any failure modes. This is average completeness for a launch tool of low complexity.

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

Parameters4/5

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

The schema only provides a boolean named 'wait' with a default, but the description explains its meaning: block until the HTTP API answers, subject to COMFYUI_STARTUP_TIMEOUT. This adds meaningful semantic context that the schema lacks, especially with 0% schema description coverage.

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

Purpose5/5

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

The description uses the specific verb 'Launch' and identifies the resource as 'the portable ComfyUI instance', clearly distinguishing it from sibling tools like comfy_stop and restart_comfy. While it doesn't explicitly say 'start the server', 'Launch' is unambiguous in this context.

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

Usage Guidelines2/5

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

No guidance is given on when to use comfy_start instead of alternatives such as restart_comfy or comfy_status. The 'wait' argument implies a use case (blocking until ready) but there is no explicit when-to-use or when-not-to-use instruction.

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

comfy_statusA

Check whether ComfyUI is running and report GPU/VRAM and queue state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description is the sole source. It clearly communicates a read-only status check by stating 'Check... report', but does not disclose error behavior or potential side effects, which are relevant for a diagnostic tool.

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

Conciseness5/5

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

A single concise sentence that front-loads the verb and lists specific report items. No wasted words, making it easy to parse.

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

Completeness5/5

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

Given the tool's simplicity (no params, output schema present), the description adequately covers the check functionality and report scope. No additional context is required.

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

Parameters4/5

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

The tool has zero parameters, so the schema fully covers parameter semantics. The description does not need to add parameter details, and therefore the baseline score of 4 applies.

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

Purpose5/5

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

The description uses a specific verb ('Check') and resource ('ComfyUI') and specifies the exact outputs (GPU/VRAM and queue state), clearly distinguishing it from start/stop sibling tools.

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

Usage Guidelines3/5

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

The description implies usage for health checks, but does not explicitly compare to alternatives like get_queue or get_comfy_log, and does not state when not to use it. Guidance is implied rather than explicit.

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

comfy_stopA

Stop the ComfyUI process that this server started, and everything under it.

A ComfyUI you launched yourself is not touched - ownership is the test, not whether something is answering the port.

This reaches a ComfyUI started before the server was last restarted as well: ownership is recorded on disk and taken back at startup, so an instance orphaned by a crash is still stoppable here.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full responsibility of explaining that this is a potentially destructive operation. It discloses that it stops the process 'and everything under it,' that it deliberately avoids user-launched ComfyUIs, and that it can target even orphaned instances recorded on disk from before a restart. This is all substantive behavioral context beyond basic 'stops the process.'

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

Conciseness5/5

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

The description is compact, front-loaded, and contains no filler. Each sentence earns its place: the core action, the ownership boundary, and a necessary edge-case about orphaned instancestarted before restart.

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

Completeness5/5

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

For a zero-parameter mutating tool with no annotations, this description covers its main purpose, scope, limitations, and edge cases. The output schema is present, so there is no hidden expectation to explain return values, and nothing important for an agent to make the right call is missing.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description adds relevant operational context about what will be stopped but does not need to document argument semantics because there are none.

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

Purpose5/5

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

The description begins with a specific verb-resource combination: 'Stop the ComfyUI process that this server started, and everything under it.' It clearly distinguishes the target from related tools such as comfy_start, restart_comfy, and interrupt by focusing on stopping the whole managed process tree.

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

Usage Guidelines4/5

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

The description gives explicit context for when this tool applies: it can only stop instances owned by this server, and the ownership test is explained sharply ('not whether something is answering the port'). It says when not to use it, but does not name alternative tools such as comfy_start or interrupt, so it stops short of full alternative routing.

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

confirm_workspaceA

Ask the person at the ComfyUI screen a yes/no question, and wait.

The same interruption as ask_workspace, for when the answer is a decision rather than a value - before something slow, or something with no undo.

Asked in the panel below the canvas by default, so the graph stays visible; modal=True puts it in a dialog over it. In the panel all three answers always have a button. In a dialog they do not:

confirmed has three values, and which are reachable depends on kind. True is agreement and null is dismissal - they closed the box, which says only that they did not engage with the question, and must not be read as either answer. A plain false needs a deny button, and ComfyUI draws one for dirtyClose and nothing else: every other kind offers Cancel and Confirm, so Cancel answers null and false never arrives. Ask for dirtyClose when telling "no" from "never mind" actually matters.

Args: question: what to ask. title: heading above it. Defaults to "Confirm". hint: smaller helper text under the question. deny_label: caption for the deny button. Only kind="dirtyClose" has one, so this is refused with any other kind rather than silently ignored. modal: ask in a dialog over the canvas instead of the panel below it. kind and deny_label describe ComfyUI's dialog and apply only then; the panel always offers Yes, No and Dismiss. kind: which of ComfyUI's confirmation dialogs to use - "default", "delete" and "overwrite" style the confirming button for a destructive act, "dirtyClose" is the three-way one, "reinstall" is ComfyUI's own. Only the wording and the buttons differ; nothing here acts on the answer. seconds: how long to wait, 1 to 600. client_id: which tab to ask; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
hintNo
kindNodefault
modalNo
titleNo
secondsNo
questionYes
client_idNo
deny_labelNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

No annotations are provided, so the description carries full responsibility, and it delivers extensively: panel versus modal behavior, the three possible answer values, why null must not be read as either answer, which kinds can produce false, and that deny_label is refused with non-dirtyClose kinds. It also clarifies that kind only affects wording/buttons, not actions.

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

Conciseness5/5

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

The first sentence front-loads the core action, and the bolded key statement distills the trickiest behavioral nuance. Though the description is long, each sentence earns its place by covering a distinct behavioral or parameter detail necessary for correct invocation.

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

Completeness5/5

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

Given 8 parameters with 0% schema coverage and no annotations, the description is remarkably complete: it covers every parameter, answer semantics, panel/dialog differences, kind-specific button availability, and timeout duration. Since an output schema exists, omitting explicit return-value prose is acceptable.

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

Parameters5/5

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

Schema description coverage is 0%, but the Args section documents all eight parameters with meaningful behavior beyond the schema: title defaults to 'Confirm', seconds ranges from 1 to 600, deny_label only applies to dirtyClose, and modal changes whether kind and deny_label apply. This fully compensates for the schema's lack of descriptions.

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

Purpose5/5

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

The description opens with a specific verb-resource pair: 'Ask the person at the ComfyUI screen a yes/no question, and wait.' It then explicitly distinguishes itself from ask_workspace by contrasting a decision with a value, making its purpose unmistakable.

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

Usage Guidelines5/5

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

It explicitly says this is the same interruption as ask_workspace but for decisions rather than values, and names concrete scenarios: 'before something slow, or something with no undo.' It also gives targeted guidance on when to use dirtyClose when distinguishing 'no' from 'never mind' matters.

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

describe_nodeA

Look up one node type: its inputs, their valid values, and what it outputs.

Use before wiring a node in with add_workspace_node, or to check allowed combo values (sampler names, schedulers, model files) before passing them to run_workflow. find_node_types is how you get the class_type in the first place.

Args: class_type: the node's class name, e.g. 'KSampler'. full: return the raw /object_info entry instead of the summary. Combo option lists are complete there and can be very large - one node on this install measures 199k characters - so only ask when a truncated option list is actually the problem.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNo
class_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the difference between summary and raw output, warns about the potentially huge size of full option lists (199k characters), and implies that summaries may be truncated. It could also explicitly state the tool is read-only, though 'look up' strongly implies this.

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

Conciseness5/5

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

The description is concise and front-loaded, starting with a clear purpose statement and then logically flowing into usage context and parameter explanations. Every sentence adds value, with no wasted words or repetition.

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

Completeness5/5

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

The description is complete for a lookup tool. It explains what the tool returns, how to use it with related tools, and the trade-offs of the 'full' parameter. An output schema exists, so detailed return values are not needed in the description. The tool's simplicity and good documentation make this fully adequate.

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

Parameters5/5

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

The schema provides only basic types and titles, and the context signals show 0% schema description coverage, so the description must fully compensate. It does: class_type is explained as 'the node's class name, e.g., KSampler,' and full is described as returning the raw /object_info entry with important caveats about size and completeness.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Look up one node type: its inputs, their valid values, and what it outputs.' It distinguishes itself from related tools by referencing find_node_types for obtaining class_type and by explaining how describe_node fits into the workflow with add_workspace_node and run_workflow.

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

Usage Guidelines5/5

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

The description explicitly tells when to use the tool: 'Use before wiring a node in with add_workspace_node, or to check allowed combo values... before passing them to run_workflow.' It also clarifies the relationship to find_node_types and advises when to use the 'full' parameter, providing clear context and exclusions.

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

describe_workflowA

Report the parameters a workflow accepts, plus its outputs and model files.

Each parameter lists where it is actually written in the graph. Values reached through primitives and switches are resolved automatically, so steps points at the primitive node feeding the sampler rather than the sampler itself.

When ComfyUI is running, each parameter also carries its real type, allowed options and numeric range, taken from the node's own schema.

Args: name: workflow file name, without the .json extension. refresh_schemas: re-read node schemas from ComfyUI. Use after installing models or custom nodes, since schemas are cached.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
refresh_schemasNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses automatic resolution through primitives/switches, dynamic schema enrichment when ComfyUI is running, and the fact that schemas are cached (prompting refresh_schemas). It does not explicitly state the operation is read-only, but 'Report' implies no mutation; this is a minor omission.

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

Conciseness5/5

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

The description is well-structured: a purpose sentence, a paragraph on parameter resolution behavior, a paragraph on dynamic schema details, and an Args list. Every sentence adds value with no fluff or redundancy, achieving strong conciseness for a tool with moderate complexity.

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

Completeness4/5

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

The description covers inputs, key behaviors (resolution, caching, dynamic types), and mentions outputs. Since an output schema exists, return-value details need not be in the description. It lacks explicit guidance on when to use versus alternatives (covered in usage_guidelines) and does not mention error cases, but overall it is sufficiently complete for an agent to invoke correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. The Args section explains both parameters: 'name' is the workflow file name without .json extension, and 'refresh_schemas' re-reads node schemas and should be used after installing models/custom nodes because schemas are cached. This adds meaningful semantics beyond the raw schema.

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

Purpose5/5

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

The description opens with 'Report the parameters a workflow accepts, plus its outputs and model files,' which specifies the verb and resource. It clearly distinguishes from siblings like list_workflows (listing) and describe_node (node-specific), while sharing the 'workflow' domain.

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

Usage Guidelines3/5

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

The description implies usage when you need to inspect a workflow's parameters/outputs, but it does not explicitly state when to use this over describe_node, get_workflow_guide, or list_workflows. No exclusions or alternative tool mentions are provided.

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

diagnose_workspaceA

Report what is wrong with the workflow open in the browser, worst first.

Reads the live graph and checks it against ComfyUI's own node schemas: node types that are not installed, required inputs with nothing plugged in, links whose types do not match, widget values outside the declared range, and inputs a node no longer has. Muted and bypassed nodes are reported too - they are the commonest reason a workflow "does nothing" while looking fine.

Defaults to scope="all" because a workflow built from subgraphs keeps almost everything that can break inside them; checking only the top level would pass a graph that cannot run.

Each finding names the node and, where there is one, a fix - the other workspace tools are what applies it: set_workspace_links to rewire, set_workspace_values to bring a value into range, set_workspace_node_modes to un-mute, add_workspace_node to replace something missing.

A clean report is not a promise the run will succeed: ComfyUI validates more at queue time, and a value can be legal and still wrong.

Args: scope: "all", "root" or "active" - see get_workspace_graph. refresh_schemas: re-fetch /object_info first. Schemas are cached for the life of the process, so pass this after installing nodes or models. client_id: which tab to inspect; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoall
client_idNo
refresh_schemasNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

No annotations exist, so the description carries full burden. It discloses that it reads the live graph, checks against node schemas, reports muted/bypassed nodes, includes caching behavior for schemas, and explicitly states that it does not guarantee the run will succeed. This is thorough behavioral disclosure.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the main purpose. It is somewhat longer than the minimal needed, but each sentence adds meaningful context (e.g., node schema checks, fix tools, limitations, parameter details). No fluff or repetition.

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

Completeness5/5

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

Given the tool's complexity, the description covers functionality, parameter semantics, relationship to fix tools, default behavior, and limitations. With an output schema present, there is no need to describe return values, making the description complete for an agent to select and invoke the tool correctly.

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

Parameters5/5

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

Schema coverage is 0%, but the description explains all three parameters: scope ('all', 'root', or 'active' with reference to get_workspace_graph), refresh_schemas (re-fetch /object_info, caching lifecycle), and client_id (which tab to inspect, default behavior). This fully compensates for the missing schema descriptions.

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

Purpose5/5

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

The description opens with 'Report what is wrong with the workflow open in the browser, worst first,' a specific verb+resource statement. It clearly distinguishes itself from sibling tools by mentioning that 'the other workspace tools are what applies it' and listing them.

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

Usage Guidelines5/5

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

Provides explicit alternatives and guidance: names set_workspace_links, set_workspace_values, etc. as the tools that apply fixes, explains why default scope='all' is set, and states that a clean report is not a promise of run success. This gives clear when-to-use and when-not-to-rely guidance.

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

download_modelA

Download a model file into the folder ComfyUI will actually load it from.

Meant for the models a workflow declares on its own loaders: at detail="full" get_workspace_graph reports each node's properties.models as [{name, url, directory}], and directory is this tool's folder. Graphs without that property usually ship a "Model Links" note saying the same thing in prose. Either way, check what is already there with list_models(folder) first and fetch only the rest.

Where the file lands is decided by ComfyUI, not by this server: the directory list honours extra_model_paths.yaml, so it is routinely on another drive entirely, and a model written anywhere else is invisible however right the bytes are. The reply always names the directory it chose.

Interrupted transfers resume: the bytes go to a .part file beside the target and re-issuing the same call continues from where it stopped, so a failure costs the remainder rather than the whole file.

Args: url: direct link to the file, as written in the note. folder: ComfyUI model folder, e.g. 'vae' or 'diffusion_models'. list_models() with no arguments lists the valid names. filename: name to save as. Defaults to the last segment of the URL. A 'subdir/name.safetensors' is allowed; ComfyUI loads those. directory: which of the folder's registered directories to use. Defaults to the first one that exists, which is what ComfyUI's own is_default ordering intends. wait: wait for the download to finish. False returns immediately and the transfer keeps running, so get_download_progress reports it - prefer that for anything large, since a multi-gigabyte file outlasts most tool-call deadlines. overwrite: fetch again even though the file is already there. dry_run: report size, checksum and destination without fetching anything. Worth doing first: a link in a note is often several gigabytes.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
waitNo
folderYes
dry_runNo
filenameNo
directoryNo
overwriteNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description uniquely carries the full burden of behavioral disclosure. It covers critical quirks: ComfyUI decides the actual directory honoring extra_model_paths.yaml, interrupted transfers resume via .part files, wait vs. asynchronous behavior, and that the reply names the chosen directory. No annotation contradiction exists.

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

Conciseness5/5

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

The description is long but every sentence adds value. It is front-loaded with a crisp purpose, then logically flows into usage context, behavioral caveats, and a clear Args list. The formatting with bolded keys and defaults makes it scannable despite its length.

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

Completeness5/5

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

The tool is complex (7 params, ComfyUI integration, resumable downloads), and the description covers all aspects: purpose, prerequisites (checking list_models), alternatives, error-prone behaviors, and parameter usage. An output schema exists, so not detailing return values is appropriate.

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

Parameters5/5

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

Schema has 0% coverage, so the description must and does explain every parameter in depth. It clarifies url's provenance, folder examples, filename defaults and subdirectory support, directory selection logic, wait's async behavior, overwrite semantics, and dry_run's purposeful size/checksum preview.

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

Purpose5/5

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

The description opens with a specific verb+resource: 'Download a model file into the folder ComfyUI will actually load it from.' It clearly distinguishes from siblings like list_models and get_download_progress by focusing on the actual download action and its integration with ComfyUI's model folders.

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

Usage Guidelines5/5

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

Provides explicit guidance: 'check what is already there with list_models(folder) first', recommends dry_run ('Worth doing first'), and directs large downloads to get_download_progress ('prefer that for anything large'). It also explains when the tool is intended ('for the models a workflow declares on its own loaders').

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

find_node_typesA

Find a node type to add to a workflow, by name or by what it connects to.

Filters are ANDed and all are optional; with none of them this lists what is installed. Each result carries the node's slots, so it is usually enough on its own - reach for describe_node when you need a widget's allowed values.

The type filters answer the question a graph editor actually asks. "What turns a LATENT into an IMAGE" is input_type='LATENT', output_type='IMAGE'; searching for the word 'latent' would never find VAEDecode, whose name and category contain neither word.

Args: search: case-insensitive substring, matched against the node's name, title, category, description, and the search aliases ComfyUI ships - which is why 'latent to image' finds VAEDecode. input_type: only nodes accepting this slot type, e.g. 'IMAGE', 'MODEL'. output_type: only nodes producing it. Wildcard ('*') slots match anything, as they do when the link is drawn, but rank below nodes that name the type. category: substring of the node's category path, e.g. 'upscal', 'loaders'. pack: substring of the pack it came from, e.g. 'kjnodes', 'comfy_extras'. include_deprecated: include nodes ComfyUI marks as superseded. Off by default because something replaced them. Experimental nodes are always included - that flag means new, not unreliable. include_api: include paid cloud API nodes, which need an account. refresh: re-fetch /object_info first. Needed after installing nodes. limit: maximum results. What matched beyond it is still counted.

ParametersJSON Schema
NameRequiredDescriptionDefault
packNo
limitNo
searchNo
refreshNo
categoryNo
input_typeNo
include_apiNo
output_typeNo
include_deprecatedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and excels. It discloses AND semantics, wildcard behavior ('Wildcard ('*') slots match anything'), default exclusions (include_deprecated off), inclusion of experimental nodes, the refresh requirement after installing nodes, and limit behavior ('What matched beyond it is still counted'). It also notes that each result carries the node's slots, so additional calls may be unnecessary. This is deep, actionable transparency.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by a short paragraph on filter semantics, then a structured Args list. Every sentence earns its place: examples, exclusions, and parameter details are dense but not redundant. Despite covering 9 params, it remains appropriately sized and well organized.

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

Completeness5/5

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

Given the tool's complexity (9 optional parameters, no annotations) and the presence of an output schema, the description is complete. It explains all parameters, usage context, alternatives, and behavioral nuances. There are no obvious gaps; an agent will know exactly when and how to invoke this tool.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate, and it does. Every one of the 9 parameters is explained with examples ('search: case-insensitive substring... why 'latent to image' finds VAEDecode'), type semantics ('input_type' vs 'output_type'), wildcard ranking, and default behaviors. This adds substantial meaning beyond the bare parameter names and types in the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Find a node type to add to a workflow, by name or by what it connects to.' It clearly distinguishes this from sibling tools like describe_node by stating when to use describe_node instead (for a widget's allowed values). The purpose is unmistakable and differentiated.

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

Usage Guidelines5/5

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

Explicit guidance is provided: 'Filters are ANDed and all are optional; with none of them this lists what is installed.' It also names the alternative: 'reach for describe_node when you need a widget's allowed values.' The 'type filters answer the question a graph editor actually asks' gives concrete use cases, making when/how to use this tool clear.

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

free_memoryA

Ask ComfyUI to unload models and free VRAM.

ParametersJSON Schema
NameRequiredDescriptionDefault
unload_modelsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations provided, the description accurately discloses the main behavior: asking ComfyUI to unload models and free VRAM. However, it omits potential side effects like reloading delays or impact on running workflows, though the action itself is clearly and transparently described.

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

Conciseness5/5

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

The description is a single concise sentence, efficiently conveying the tool's purpose without any fluff. Every word earns its place, and the structure is appropriately front-loaded.

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

Completeness3/5

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

The tool is simple with one optional parameter and an output schema, so the description covers the basic function adequately. However, it lacks context about when to use it, potential side effects, or prerequisites like ComfyUI being running, making it not fully complete for an AI agent.

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

Parameters1/5

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

The input schema has one parameter (unload_models) with 0% description coverage, and the tool description does not mention this parameter at all. The description adds no meaning beyond the parameter's name and default value, failing to compensate for the schema's lack of detail.

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

Purpose5/5

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

The description clearly states the tool's purpose with a specific verb and resource: 'unload models and free VRAM.' It distinguishes this from sibling tools like comfy_stop (which stops ComfyUI) and restart_comfy, making the tool's unique role apparent.

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

Usage Guidelines3/5

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

The description implies usage when the user wants to free VRAM by unloading models, but it does not explicitly state when to use this tool versus alternatives or mention any prerequisites. There is no guidance on when not to use it, such as during active workflows.

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

get_comfy_logA

Read ComfyUI's console - the Python side, where import and dependency failures land.

This is the terminal ComfyUI is running in, not the browser. It is where a custom node says it could not import, where a missing package is named, and where a traceback from inside a node ends up. Nothing else in this server can see any of it: a node that failed to load simply does not appear in /object_info, which looks identical to a node that was never installed.

Args: lines: how many of the most recent matching lines to return; 0 for all of them. level: keep only this severity and above (DEBUG/INFO/WARNING/ERROR/CRITICAL). Untagged output - third-party packs printing directly - is dropped by this. search: keep only lines containing this text, case-insensitive. regex: treat search as a regular expression instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNo
linesNo
regexNo
searchNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It clearly states this reads the Python-side console, not the browser, and explains what kind of output it returns (import errors, tracebacks). It also discloses filtering behavior (level drops untagged output, search/regex). This is strong behavioral disclosure, though it stops short of describing the exact output format or side effects.

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

Conciseness5/5

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

The description is moderately sized but every sentence adds value. The opening paragraph establishes the tool's unique value, and the Args section is terse and unambiguous. No filler or redundancy.

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

Completeness5/5

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

Given the tool's niche role, the description covers the core use case, differentiates from other tools, and explains all parameters. An output schema is present, so return structure details are not required. The context of sibling tools is addressed through the Python-vs-browser distinction.

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

Parameters5/5

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

Schema descriptions are absent (0% coverage), but the description thoroughly explains all four parameters: lines, level, search, regex. It clarifies that level drops untagged output, and regex modifies search. This fully compensates for the schema's lack of descriptions.

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

Purpose5/5

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

The description opens with 'Read ComfyUI's console - the Python side', giving a specific verb and resource. It clarifies this is the terminal, not the browser, differentiating it from the sibling get_console_log. The contrast with /object_info also helps distinguish its niche.

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

Usage Guidelines4/5

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

The description explains that import failures and tracebacks land here, and that nothing else in the server can see this data. This implies use when a node fails to load or when debugging dependency issues. It contrasts with /object_info but does not explicitly name the sibling get_console_log as the alternative, though the Python-vs-browser distinction makes the intended usage clear.

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

get_console_logA

Read the browser console - the frontend half, where extension failures land.

The companion to get_comfy_log, and it answers a different question. A node has two halves: a Python class ComfyUI imports, and often a JavaScript extension that gives it its widgets and menus. When the JavaScript half fails, the Python half still registers, so the node appears in /object_info and on the canvas and merely behaves wrongly - which is the one failure nothing else here can see.

failed_extensions is the direct answer to that: the frontend catches an extension's import error and only console.errors it, so this is the only place it is recorded at all.

Needs a connected tab, and only sees what was logged since that tab loaded - a reload starts the record over.

Args: lines: how many of the most recent matching entries to return; 0 for all. level: keep only this severity and above (DEBUG/INFO/WARNING/ERROR/CRITICAL). search: keep only entries containing this text, case-insensitive. regex: treat search as a regular expression instead. client_id: which tab to ask, when several are open.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNo
linesNo
regexNo
searchNo
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it reveals the ephemeral nature of logs ('only sees what was logged since that tab loaded'), the need for a connected tab, and that extension import errors are only console.error'd, making this the sole record. It could go further by describing the output structure, but an output schema exists, so the return format is covered elsewhere. The description adds meaningful behavioral context beyond the schema.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core purpose, followed by context, limitations, and an Args list. While it contains extra explanatory prose about node architecture, every sentence adds value by distinguishing this tool from alternatives and explaining why it exists. It is slightly longer than strictly necessary but not wasteful, earning a 4 rather than a 5.

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

Completeness5/5

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

Given the tool's moderate complexity (5 parameters, no annotations, output schema present), the description is remarkably complete. It covers purpose, usage scenario, prerequisite, data scoping, and all parameter semantics. The only missing piece would be concrete examples, but they are not essential for a read-only log retrieval tool. The description fully equips an agent to select and invoke this tool correctly.

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

Parameters5/5

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

The input schema only provides titles and defaults, with 0% description coverage. The description compensates fully by explaining each parameter in plain language: lines (how many recent matching entries, 0 for all), level (severity filter with allowed values), search (case-insensitive text filter), regex (treat search as regular expression), and client_id (which tab). This adds clear meaning beyond the schema titles.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Read the browser console - the frontend half.' It explicitly distinguishes itself from sibling get_comfy_log by explaining that it answers a different question about frontend extension failures. The purpose is unmistakable and well-scoped.

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

Usage Guidelines5/5

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

The description clearly contrasts with get_comfy_log, stating 'it answers a different question' and details the scenario where a JavaScript half fails while the Python half succeeds, making this the only tool that can see such failures. It also notes a prerequisite: 'Needs a connected tab' and warns that only logs since tab load are visible. This gives explicit when-to-use and behavioral context.

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

get_download_progressA

Report how far a download has got: bytes, percent, speed and an ETA.

silent_for_s is the telling number, as it is for a run: a slow link keeps it small while a dead one lets it grow. A stalled transfer does not need cancelling - the retry logic resumes by itself - so act only on a silence that outlasts COMFYUI_DOWNLOAD_TIMEOUT several times over.

Args: job_id: '/', or just the file name, or empty for the most recent download.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that stalled transfers auto-resume and should not be cancelled, and explains how to interpret silent_for_s. It also implies read-only nature via 'Report', but does not explicitly confirm non-mutation or error handling.

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

Conciseness5/5

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

The description is well-structured with a concise main purpose, a useful interpretive note, and a clear argument specification. Every sentence adds value; no fluff or repetition.

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

Completeness5/5

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

For a single-parameter read-only tool with an output schema, the description covers all needed context: parameter format, interpretation of results, and actionable guidance. It is complete enough for an agent to use correctly.

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

Parameters5/5

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

The description fully documents the only parameter job_id, providing three acceptable forms: folder/filename, filename only, or empty for most recent. This goes far beyond the schema, which only shows a default value.

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

Purpose5/5

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

Begins with a specific verb and resource: 'Report how far a download has got' and lists concrete outputs (bytes, percent, speed, ETA). This clearly distinguishes it from related tools like download_model and cancel_download.

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

Usage Guidelines4/5

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

Provides clear operational guidance: explains that silent_for_s indicates stall vs. slow link, and advises waiting for silence exceeding COMFYUI_DOWNLOAD_TIMEOUT before acting. However, it does not explicitly mention alternative tools or when not to use this tool.

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

get_progressA

Report how far a run has got: step, percent, elapsed time and an ETA.

A generation takes minutes, and nothing about a long silence distinguishes real work from a hang - so check here instead of guessing. silent_for_s is the telling number: it stays small while the job advances, and only a large and growing one means something is actually wrong. Loading a model produces no steps for a minute or more, which is normal and shows up as working.

Interrupting and re-running costs more than waiting: the models are already resident and a re-run pays for them again.

Args: prompt_id: which run to report on. Defaults to the most recent one.

ParametersJSON Schema
NameRequiredDescriptionDefault
prompt_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden. It discloses how to interpret the output: 'silent_for_s is the telling number: it stays small while the job advances, and only a large and growing one means something is actually wrong.' It also explains expected behaviors like model loading producing no steps for a minute, showing up as 'working'. This is exemplary transparency beyond a simple operation description.

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

Conciseness5/5

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

The description is well-structured, starting with a succinct summary, followed by essential context and an args explanation. Every sentence adds value—no fluff. While it is longer than minimal, the additional details (e.g., 'silent_for_s', cost of interrupting) directly support correct usage, making it appropriately sized for the tool's complexity.

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

Completeness5/5

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

Given the tool has only one optional parameter and no annotations, the description fully covers the parameter semantics, output interpretation, and behavioral context. It explains what is reported (step, percent, elapsed time, ETA), how to interpret silent_for_s, and why waiting is preferable to interrupting. No critical information is missing.

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

Parameters5/5

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

The input schema only defines prompt_id as a string with a default. The description compensates fully with an Args section: 'prompt_id: which run to report on. Defaults to the most recent one.' This clarifies the exact meaning and default behavior, going significantly beyond the schema. Since schema description coverage is 0%, this compensation is essential and well-executed.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Report how far a run has got: step, percent, elapsed time and an ETA.' It uses a specific verb ('report') and resource ('a run'), and distinguishes itself from sibling tools like get_download_progress and get_result by focusing on run progress.

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

Usage Guidelines4/5

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

The description gives strong guidance on when to use the tool: 'A generation takes minutes... check here instead of guessing.' It also advises against interrupting and re-running: 'Interrupting and re-running costs more than waiting.' While it doesn't explicitly name alternative tools, it provides clear contextual direction.

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

get_queueA

Show what ComfyUI is currently running and what is queued behind it.

Running items carry their progress when this server started them; get_progress gives the same detail for one run.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses a useful behavioral nuance: running items carry progress only when started by this server, and it notes that get_progress gives the same detail for one run. However, it doesn't mention side effects, safety, or potential absences of progress information beyond this caveat. This is adequate but not rich.

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

Conciseness5/5

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

Two sentences, front-loaded with the main purpose, and every sentence adds value. The second sentence provides a caveat and a sibling reference without wasted words.

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

Completeness5/5

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

The tool is simple (no params) and has an output schema that presumably describes the return format. The description covers what the tool shows, the progress nuance, and a pointer to get_progress, making it complete for this context.

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

Parameters4/5

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

The tool has zero parameters and 100% schema coverage, so no parameter guidance is needed. The description correctly omits parameter details, and the baseline for 0 params is 4.

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

Purpose5/5

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

The description opens with a specific verb ('Show') and resource ('ComfyUI currently running and queued'), clearly stating what the tool does. It also distinguishes itself from the sibling tool get_progress by noting that get_progress is for a single run, making the purpose unambiguous.

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

Usage Guidelines4/5

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

The description implies when to use this tool (for an overview of the queue) and explicitly mentions get_progress as an alternative for one-run detail. It provides clear context but doesn't explicitly state exclusions or other alternatives, so a 4 is appropriate.

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

get_resultC

Fetch the outputs of a previously submitted prompt.

ParametersJSON Schema
NameRequiredDescriptionDefault
prompt_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description bears full responsibility for disclosing behavior. It only states that outputs are fetched without explaining what happens if the prompt ID is invalid, whether the operation blocks until outputs are ready, or whether partial outputs are possible. The minimal detail leaves key behavioral traits unspecified.

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

Conciseness4/5

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

The description is a single, front-loaded sentence with no wasted words. It is appropriately concise for a simple tool, though it omits usage details that would not significantly lengthen it. The structure is clean and readable.

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

Completeness2/5

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

Despite an output schema existing, the description does not cover when to use the tool, prerequisite conditions, or error behavior. The single sentence is under-specified for a tool that likely depends on a prior submission, and it does not reference sibling tools or lifecycle context, leaving notable gaps.

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

Parameters3/5

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

The schema has zero description coverage for prompt_id, so the description must compensate. It implies that prompt_id refers to the ID of a previously submitted prompt, which is useful context. However, it does not explain how to obtain the ID, its format, or any constraints, leaving some ambiguity.

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

Purpose4/5

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

The description states a clear action ('Fetch the outputs') and a resource ('previously submitted prompt'), which distinguishes it from tools like get_progress or get_queue. It is not as specific as naming an alternative or the exact prompt format, but it is unambiguous about the tool's core function.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention that it should be called after submitting a prompt, nor does it point to get_progress for status checking. The lack of any usage context or exclusions leaves the agent to infer the appropriate timing.

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

get_workflow_guideA

Read the instruction file that ships with a workflow.

A graph says which inputs exist, never what belongs in them. Some workflows only work with input in a particular shape - Ideogram 4 wants a JSON caption carrying bounding boxes, not a prose prompt - and that convention lives in a Markdown file named after the workflow. Read it and follow it before calling run_workflow.

Workflows that have one are flagged as guide by list_workflows and describe_workflow.

Args: name: workflow file name, without the .json extension.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that this is a read operation ('Read'), explains the purpose of the file, and gives an example of the kind of content it contains. It does not explicitly mention error handling or return format, but the output schema is present, and the description adds useful context about the file's naming convention and when guides exist.

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

Conciseness5/5

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

Although the description is longer than a simple sentence, every part earns its place: the opening sentence states the purpose, the middle explains the reasoning with a concrete example, the third gives usage guidance, and the final documents the parameter. It is well-structured and front-loaded, with no redundancy.

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

Completeness5/5

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

For a simple one-parameter tool, the description is comprehensive. It explains why the tool exists, when to use it, how to identify applicable workflows, and the exact format of the parameter. The output schema presumably covers return values, so the description needn't elaborate further. This is complete for an agent to select and invoke the tool correctly.

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

Parameters5/5

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

The schema has one parameter with no description, but the description provides the necessary clarification: 'workflow file name, without the .json extension.' This is critical information that the schema lacks, fully compensating for the 0% schema description coverage. The parameter is fully explained.

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

Purpose5/5

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

The description clearly states the tool reads an instruction file that ships with a workflow, using the specific verb 'Read' and specifying the resource. It also distinguishes itself from sibling tools like describe_workflow by explaining that it retrieves the guide file, not the workflow definition. The example with Ideogram 4 adds concrete context.

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

Usage Guidelines5/5

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

The description explicitly says to read and follow the guide before calling run_workflow, which is a clear when-to-use directive. It also explains that workflows with a guide are flagged as `guide` by list_workflows and describe_workflow, providing a way to identify when this tool is applicable versus alternatives.

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

get_workspace_graphA

Read the workflow currently open in the browser, unsaved edits included.

This is the one view of a workflow that no file and no HTTP endpoint can give: what the user is actually looking at. Use it to answer questions about the graph on screen; use describe_workflow for the files in the workflows directory.

The summary reports selected - the nodes and groups the user has clicked on. Treat it as them pointing: when a request says "this one" or "these", that is which ones, and it beats guessing from a title. set_workspace_selection points back the other way.

A large workflow does not fit in one answer at any detail that includes its wiring, so the report steps down a level at a time until it does and says so in reduced. When that happens the next move is only - outline the whole graph, then ask again about the handful of nodes that matter. Each node in a subset also carries feeds, the nodes reading from it, so a subset can be walked downstream as well as up.

Args: format: "summary" for a structured report - nodes, links, groups and a list of issues (missing node types, muted or bypassed nodes, unconnected required inputs). "ui" for the raw graph as a Save would write it. "api" for the API-format prompt, the same JSON that Export (API) and run_workflow use - only the frontend can produce it, which is why it is available here and nowhere else in this server. scope: "root" for the top level of the workflow, "active" for the subgraph on screen, "all" to descend into every subgraph. On a workflow built from subgraphs "root" is a handful of boxes and everything inside them is invisible, so reach for "all" when the question is about the whole thing. Nested nodes come back with path ids - 98:12 is node 12 inside subgraph node 98 - the same shape the API format and progress events use. Only "summary" descends; "ui" and "api" already cover the lot. detail: how much to say about each node. "full" is everything including widget values; "links" drops the widgets but keeps the wiring and positions; "outline" is one line per node - type, title, and how many links go in and out. Only a ceiling: a report over COMFYUI_GRAPH_MAX_CHARS is reduced further whatever was asked for. only: report just these node ids, at the detail asked for, however big the graph is. Pass "selected" for whatever the user has clicked on. client_id: which tab to ask; defaults to the most recently focused one. workspace_status lists them.

ParametersJSON Schema
NameRequiredDescriptionDefault
onlyNo
scopeNoroot
detailNofull
formatNosummary
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the burden and excels. It discloses unsaved edits inclusion, the 'reduced' step-down behavior for large graphs, the 'api' format being frontend-only, scope semantics with path ids, and the ceiling behavior of detail. This goes well beyond what annotations could provide.

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

Conciseness5/5

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

The description is long but every sentence earns its place. It front-loads the core purpose and then systematically explains parameters and edge cases. The 'Args' section is well-structured and avoids fluff.

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

Completeness5/5

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

Given the tool's complexity (5 params, 0% schema coverage, no annotations), the description is remarkably complete. It explains return formats, reduction semantics, subset walking with 'feeds', and the unique api format value. The presence of an output schema reduces the need to describe return structures, and the description covers everything else needed for correct invocation.

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

Parameters5/5

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

Schema description coverage is 0%, yet the description explains all five parameters in depth: format with three distinct return types, scope with examples and nested-node path ids, detail with three levels and ceiling behavior, only with the special 'selected' value, and client_id with default and listing source. This fully compensates for the missing schema descriptions.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Read the workflow currently open in the browser, unsaved edits included.' It clearly differentiates itself from siblings by stating 'use describe_workflow for the files in the workflows directory' and emphasizes its unique ability to report what the user is looking at.

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

Usage Guidelines5/5

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

Explicit usage guidance is provided: when to use this tool vs describe_workflow, how to interpret 'selected' as pointing during user requests, when to use 'only' for reduced large graphs, and how set_workspace_selection points back the other way. This covers both when and when-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.

interruptA

Interrupt the job ComfyUI is currently executing.

For a run that is merely slow this is counter-productive - the steps already computed are lost and the models get reloaded. Check get_progress first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description must carry the full behavioral disclosure burden. It does so by explaining the destructive consequence ('steps already computed are lost') and the side effect ('models get reloaded'), which is exactly the kind of context an agent needs before calling an interrupt operation.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the primary action, and every sentence earns its place by adding either purpose or usage warnings. There is no wasted or redundant text.

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

Completeness5/5

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

Given that the tool takes no parameters and an output schema exists, the description fully covers what an agent needs: what the tool does, when not to use it, and what to do instead. It is complete and self-contained for this simple operation.

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

Parameters4/5

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

The tool has zero parameters and the input schema is empty, so there is nothing to clarify. The baseline of 4 is appropriate because no parameter information is needed beyond what the schema already states.

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

Purpose5/5

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

The description uses a specific verb ('Interrupt') and clearly identifies the resource ('the job ComfyUI is currently executing'). This distinguishes it from sibling tools like cancel_download or get_progress, making its purpose unambiguous.

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

Usage Guidelines5/5

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

The description provides explicit when-not-to-use guidance: it is counter-productive for merely slow runs. It also directly advises checking get_progress first, giving a clear alternative action and helping the agent decide when this tool is appropriate.

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

list_modelsA

List the models ComfyUI can actually load.

Asks ComfyUI itself, so the result honours extra_model_paths.yaml and matches the values a loader node will accept. A plain disk scan does not: model folders are routinely mapped in from elsewhere and ComfyUI/models/ can be almost empty.

Args: folder: which folder to list, e.g. 'loras', 'checkpoints', 'diffusion_models'. Empty lists the available folder names instead. search: case-insensitive substring filter on the file name. limit: maximum number of files to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
folderNo
searchNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It reveals that the tool 'Asks ComfyUI itself,' meaning it depends on a running ComfyUI instance and reflects live configuration. It also explains the risk of disk scans due to mapped model folders, giving useful context beyond a simple list operation. However, it does not mention error behavior or authentication assumptions, which keeps it from a 5.

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

Conciseness5/5

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

The description is efficiently structured: a one-sentence summary, a short explanatory paragraph about why it differs from disk scans, and a clean Args list. Every sentence contributes information without redundancy, making it easy to scan.

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

Completeness4/5

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

Given the output schema exists and this is a read-only listing operation, the description covers the core requirements: purpose, behavior, rationale, and parameter usage. It lacks explicit mention of failure modes (e.g., ComfyUI not running), but that is implied by 'Asks ComfyUI itself' and does not undermine effective use. The description is robust and complete enough for an agent to select and invoke the tool correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must explain all three parameters. It does so thoroughly: folder lists example values and default behavior (empty means folder names), search is specified as case-insensitive substring filter, and limit is defined as maximum files returned. This fully compensates for the bare schema and adds meaningful guidance.

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

Purpose5/5

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

The description immediately states the exact function: 'List the models ComfyUI can actually load.' It goes further by distinguishing this from a plain disk scan, clarifying that it queries ComfyUI itself to honor extra_model_paths.yaml. This sets it apart from any filesystem-based listing and clearly identifies the resource and verb.

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

Usage Guidelines4/5

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

The description provides clear context: use this tool to get the list of models ComfyUI actually accepts, especially when extra_model_paths.yaml is in play. It explicitly advises against a plain disk scan, offering a concrete 'when not to use' scenario. It doesn't name alternative sibling tools like download_model, but the guidance is strong enough to avoid misuse.

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

list_workflowsA

List API-format workflow files available in the workflows directory.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. The word 'List' indicates a read-only operation, but the description does not disclose details such as whether subdirectories are recursively searched, file extensions filtered, or what happens if the directory is missing. This is acceptable for a simple list but lacks richer 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.

Conciseness5/5

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

The description is a single sentence that efficiently conveys the essential action and target. Every word earns its place, and there is no redundant information.

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

Completeness4/5

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

Given the simplicity of a list operation and the presence of an output schema, the description is sufficient for understanding the tool's behavior. It could optionally mention whether the list is sorted or includes file schemas, but the core purpose is clear and complete.

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

Parameters4/5

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

The tool has zero parameters, so there is no parameter semantic burden. The schema is empty and the description does not need to explain any inputs, aligning with the baseline for parameterless tools.

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

Purpose4/5

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

The description clearly states the verb 'List' and the resource 'API-format workflow files' with the location 'workflows directory'. It implicitly distinguishes from siblings like describe_workflow or run_workflow by focusing on listing files, but it does not explicitly contrast with any sibling.

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

Usage Guidelines3/5

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

The usage context is implied: this tool lists available workflow files, presumably for discovery before running or describing them. However, there is no explicit guidance on when to use this tool versus alternatives like list_models or describe_workflow, and no exclusions are stated.

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

load_workspaceA

Open a saved workflow in the browser, as a tab in the ComfyUI window.

The other half of save_workspace, and the way to put a workflow file under the workspace tools: load it, edit it with them, save it back. Without this they can only reach whatever the user happened to have open.

Both formats work and neither has to be named - a file in workflows/ is API format, one in exports/ is UI format, and this reads which it is. UI format keeps the layout it was saved with; API format has none, so ComfyUI lays it out itself and the result is tidy rather than familiar.

It opens a tab rather than replacing the one on screen. ComfyUI reuses a tab only when its own workflow store already knows the name, and that store does not sync from this server's workflows directory - so a file usually arrives in a new tab marked unsaved, with the workflow that was on screen still open in its own. Loading that same file again reuses the tab it made the first time, and that one is replaced. The reply reports the tabs and whether one was added; switch_workspace_tab moves between them afterwards.

A name ComfyUI already knows is refused. It resolves the name against its own saved workflows rather than against the directory the file came from, so a file whose name matches one of the user's workflows would fill that workflow's tab instead of opening one - leaving it looking edited, one Ctrl+S from overwriting their work. Rename the file, or pass force when replacing that workflow is the actual intent.

This is not undoable. ComfyUI resets the undo history when a workflow is loaded, so Ctrl+Z will not bring the previous canvas back. That is what the backup is for, and it is the reused-tab case it covers: the canvas is written to the export directory first and the reply names the file.

Args: name: the file, with or without .json. Looked for in the workflows directory first, then the export directory; an absolute path also works. backup: write the current canvas to the export directory before replacing it. Leave it on unless the canvas is known to be worth nothing. force: load even when ComfyUI already has a saved workflow of this name, taking over its tab. Only when replacing that workflow is meant. client_id: which tab to load into; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
forceNo
backupNo
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

The description is exceptionally transparent about non-obvious behavior: it opens a tab rather than replacing the current one, explains when tab reuse occurs, warns that the operation is not undoable, and documents the backup mechanism. Since no annotations are provided, the description fully bears the burden of behavioral disclosure and does so thoroughly.

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

Conciseness5/5

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

While the description is lengthy, the length is justified by the complexity of the behavior. It starts with a summary, then covers important edge cases in focused paragraphs, and ends with a clear Args section. Each sentence adds value, and the structure makes the information easy to parse.

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

Completeness5/5

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

The description covers all critical context: file format differences, tab behavior, naming conflicts, undo behavior, backup fallback, and parameter semantics. It also references what the reply contains, such as tab information and backup file naming, which aligns with the existing output schema. This is a comprehensive description for a tool with this level of behavioral nuance.

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

Parameters5/5

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

The input schema provides zero description coverage (0%), but the description's Args section compensates fully by explaining what each parameter means, including name resolution order, backup behavior and default, force semantics, and client_id targeting. This goes well beyond the raw schema and gives the agent the necessary context to invoke each parameter correctly.

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

Purpose5/5

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

The description opens with a clear, specific action: 'Open a saved workflow in the browser, as a tab in the ComfyUI window.' It distinguishes this tool from save_workspace and other workspace tools by explaining its role as the counterpart that loads saved workflow files into the UI.

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

Usage Guidelines5/5

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

It provides strong guidance on when to use this tool: it is the way to put a workflow file under workspace tools, and it explains why this capability matters when the user has no workflow open. It also gives explicit caveats about refusal when ComfyUI already knows the name, advises renaming or using 'force', and points to switch_workspace_tab as the follow-up for navigating tabs.

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

open_workspaceA

Open ComfyUI in a browser, so the workspace tools have a tab to talk to.

The bridge needs a page open - with none, every workspace_* tool fails with no_workspace and the only fix is a human opening one. This is that fix.

It waits for the tab to register itself rather than firing and returning, because the caller's next move is a workspace tool: coming back before the page has loaded its JavaScript would just fail again, for a reason that no longer has anything to do with what went wrong.

A tab that is already connected is left alone and reported - a second one would work, but it becomes the preferred client and the user's own tab silently stops being the one that gets edited. Pass force to open anyway.

Args: wait: seconds to wait for the tab to connect. 0 returns as soon as the browser has been handed the URL. force: open a tab even when one is already connected.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNo
forceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations to lean on, the description fully discloses behavior: it waits for the tab to register, explains the rationale for waiting, and warns about the side effect of opening a second tab (it becomes the preferred client and the user's tab silently stops being edited). It also details the meaning of the wait and force parameters. This is excellent transparency for an unattributed tool.

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

Conciseness5/5

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

The description is longer than a one-liner but every sentence earns its place. It front-loads the core action, then logically explains the waiting behavior, the already-connected case, and parameter semantics. The structure is clear and the prose is tight, with no fluff or repetition.

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

Completeness5/5

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

The description covers the tool's role (fixing the no_workspace issue), its waiting semantics, the force edge case, and the side-effect of multiple tabs. Given the output schema exists and parameters are well-documented, there are no significant gaps. It even covers the failure mode that would otherwise confuse an agent: 'coming back before the page has loaded its JavaScript would just fail again.'

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

Parameters5/5

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

The schema only provides types and defaults, but the description's 'Args' section fully explains both parameters: wait is 'seconds to wait for the tab to connect. 0 returns as soon as the browser has been handed the URL' and force means 'open a tab even when one is already connected.' This adds crucial meaning beyond the schema, making the 0% schema description coverage irrelevant.

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

Purpose5/5

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

The description opens with a specific, actionable statement: 'Open ComfyUI in a browser, so the workspace tools have a tab to talk to.' It clearly identifies the resource (ComfyUI) and the action (open in browser), and distinguishes itself from sibling workspace tools by emphasizing it's the setup prerequisite for them. It's not a tautology and provides a clear purpose.

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

Usage Guidelines5/5

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

The description explicitly states when to use the tool: 'The bridge needs a page open - with none, every workspace_* tool fails with no_workspace and the only fix is a human opening one. This is that fix.' It even provides behavioral exclusions, such as leaving an already-connected tab alone and the caveat that using force can cause the user's own tab to silently stop being controlled. This goes beyond generic context.

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

pack_workspace_subgraphA

Wrap nodes and groups into a new subgraph, or dissolve one back out.

ComfyUI's "Convert to Subgraph" and its Unpack counterpart. Folding a stage into a subgraph is how a workflow stops being a wall of nodes: the box keeps its own wiring, and promote_workspace_inputs decides which of its values show on the outside.

It acts on the graph on screen, so packing while inside a subgraph nests one. Ids are the plain local ones a read of that graph reports, not the 98:12 path form - a selection only ever belongs to one graph. Use navigate_workspace first when the nodes are a level down.

A group can be named instead of listing its nodes: it goes in along with everything inside it, which is what selecting one on the canvas amounts to.

One call is one Ctrl+Z, and unpacking happens before packing - so a single call can dissolve a subgraph and re-wrap its parts differently.

Ids do not survive either direction. Packing replaces the nodes with one new node; unpacking hands the contents fresh ids rather than the ones they went in with - measured, 144 and 145 came back out as 158 and 159. Read the graph again afterwards rather than reusing ids from before.

This is not the same as moving a node into a subgraph that already exists. ComfyUI has no operation for that; unpack the subgraph, then pack the parts together with whatever else belongs there.

Args: pack: node and group ids to fold into one new subgraph. Anything that is not one convertible block is refused by litegraph, which says nothing else, so the refusal names that. unpack: subgraph node ids to dissolve, putting their contents back into the graph on screen. A node that is not a subgraph is refused. client_id: which browser tab to act in; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
packNo
unpackNo
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations to rely on, this description carries the full burden of behavioral disclosure—and excels. It states the tool 'acts on the graph on screen' and that IDs do not survive in either direction, complete with concrete before/after examples (144/145 reused as 158/159). It also reveals the call order semantics (unpack before packing) and how invalid inputs are 'refused by litegraph', demonstrating deep transparency.

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

Conciseness5/5

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

Though lengthy, the description earns its length: it's organized into short, scannable paragraphs with a clear logical flow (purpose → scoping → parameter nuances → caveats). The Args section is neatly formatted. Every sentence adds informative value, and the structure supports quick comprehension for an AI agent.

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

Completeness5/5

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

For a tool with no annotations and a generic schema, the description is remarkably complete. It covers edge cases (nested subgraphs, ID invalidation), specifies preconditions (call navigate_workspace first), details interactions with undo, and explicitly contrasts with a sibling operation that does not exist. No obvious gaps remain for an agent to misuse the tool.

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

Parameters5/5

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

The schema provides zero parameter descriptions, so the tool's Args section becomes critical. It explains that 'pack' expects node/group IDs and mentions what gets refused, 'unpack' identifies subgraph nodes to dissolve, and 'client_id' determines the target browser tab. This adds essential semantics beyond the bare union types in the schema.

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

Purpose5/5

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

The description opens with a precise verb-resource pairing: 'Wrap nodes and groups into a new subgraph, or dissolve one back out.' It immediately distinguishes the dual packing/unpacking behavior and grounds it in ComfyUI's 'Convert to Subgraph' and 'Unpack' concepts, making the tool's purpose unmistakable even to an agent familiar with the UI.

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

Usage Guidelines5/5

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

Explicit usage guidance is woven throughout: 'Use navigate_workspace first when the nodes are a level down' and 'This is not the same as moving a node into a subgraph that already exists...' The description clarifies when to use this tool over alternatives and even explains the workaround for a missing operate-on-existing-subgraph feature. It also sets expectations with 'One call is one Ctrl+Z'.

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

promote_workspace_inputsA

Expose an inner node's inputs on the face of the subgraph that holds it.

A subgraph with nothing promoted is a sealed box: the values that drive it can only be reached by going inside, and nothing outside can be wired to it. This is what ComfyUI offers as "Promote widget" on a widget's context menu, and it is the difference between a subgraph that is usable from the outside and one that merely hides its contents.

Both kinds of input take the same path. A widget row (steps, cfg) becomes a widget on the subgraph node's face; a plain socket (image, model) becomes a socket that can be wired to. Name them the same way either way.

The id names both ends. 98:12 is node 12 inside subgraph node 98, and the input is exposed on 98. There is no separate "which subgraph" argument and no need to navigate inside first. To carry something further out, ask again with the shorter id - each level is its own step, and its own entry in the reply.

One call is one Ctrl+Z. Nothing is written unless every named input resolves, so a typo refuses the batch rather than half-applying it.

Args: promote: which inputs to expose, as {":": [names]}. An input already exposed is reported in skipped, not an error. An input already wired to something inside the subgraph is refused, since promoting it would replace that link. demote: which to take off again, same shape. A boundary slot with something wired into it from outside is disconnected rather than removed, so the outer link survives. client_id: which browser tab to act in; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
demoteNo
promoteNo
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description fully carries the transparency burden. It discloses what happens to widget inputs vs socket inputs, how ids map to both ends, atomicity ('Nothing is written unless every named input resolves'), skipped vs refused promote cases, and demote's disconnect-instead-of-remove behavior. This is far richer than typical tool descriptions.

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

Conciseness5/5

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

The description is dense but every sentence earns its place. It front-loads the core action, then adds conceptual context, id semantics, atomicity, and organized parameter explanations. The Args block makes the parameter details scannable without redundant filler.

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

Completeness5/5

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

This is a conceptually complex tool involving nested subgraph ids, two input kinds, promote/demote operations, and atomic behavior. The description covers all of these, including edge cases like already-exposed inputs, wired inputs, and outer links surviving demotion. An output schema exists, so return-value details are not required.

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

Parameters5/5

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

The schema provides only bare object/string types with defaults, so the description is the sole source of meaning. It precisely defines the promote/demote shape as {"<subgraph node>:<node>": [names]}, explains skipped/refused outcomes, wired-input refusal, demote disconnection semantics, and client_id default behavior.

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

Purpose5/5

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

The opening sentence names the exact operation and resource: 'Expose an inner node's inputs on the face of the subgraph that holds it.' It further clarifies by distinguishing widget promotion from plain socket promotion and referencing ComfyUI's 'Promote widget', so the purpose is unambiguous and differentiated.

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

Usage Guidelines4/5

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

The description gives strong contextual guidance: sealed-box subgraphs need promotion to be usable externally, nested promotion is done step-by-step with shorter ids, and demote is the inverse operation. It does not explicitly contrast with sibling tools, but the unique purpose and clear examples make usage conditions evident.

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

reload_workspaceA

Reload the ComfyUI browser tab, and wait for it to come back.

This is the fix for exactly one thing: changed extension JavaScript. The bridge's own JS, and every node pack's, is served from disk on each page load and never re-read otherwise, so editing it takes a reload and nothing else - restarting ComfyUI would cost minutes and achieve the same thing by accident. Installing or upgrading a node is the opposite case and needs restart_comfy, because Python packs are imported once at startup.

It waits for the tab to register again rather than firing and returning, for the reason open_workspace does: a page part-way through loading fails exactly like no page at all.

The browser can refuse. ComfyUI asks "Leave site?" when a workflow has unsaved edits, and that dialog waits for a human - nothing here can dismiss it. So a tab with edits is refused by default; force reloads anyway, having first written the canvas to the export directory so nothing can be lost. Opening a second tab is the other way round the problem: a new tab loads the current JavaScript without disturbing this one.

Args: wait: seconds to wait for the tab to reconnect. 0 returns immediately. force: reload even though the browser may put a confirmation on screen. client_id: which tab, when several are open. Defaults to the focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNo
forceNo
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the behavioral disclosure burden. It discloses that the tool waits for tab registration, may be refused by the browser's 'Leave site?' dialog on unsaved edits, and that force writes the canvas to the export directory before reloading.

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

Conciseness5/5

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

The description is appropriately sized and well-structured, with each paragraph serving a distinct purpose: the core action, the waiting rationale, the browser refusal edge case, and parameter details. It avoids redundancy and is front-loaded with the primary verb and resource.

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

Completeness5/5

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

The description covers all necessary context: the exact purpose, the failure mode when a page is half-loaded, the browser confirmation issue, the force fallback, and the client_id default behavior. Given the output schema exists, no return value explanation is required. The description is complete for this tool's complexity.

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

Parameters5/5

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

The description's Args section provides complete semantic meaning for all three parameters: wait seconds, force bypass confirmation, and client_id to select a tab. This fully compensates for the 0% schema description coverage.

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

Purpose5/5

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

The description clearly states the tool reloads the ComfyUI browser tab and waits for it to return. It explicitly defines the specific fix scenario (changed extension JavaScript) and distinguishes itself from restart_comfy by contrasting with node installation upgrades.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool (changed extension JavaScript) and when not to (node installation/upgrades requiring restart_comfy). It also provides an alternative (opening a second tab) and explains the force option for dealing with unsaved edits.

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

remove_workspace_nodesA

Delete nodes from the workflow open in the browser.

The whole batch is one undo step and nothing is removed unless every id exists. The response reports links_lost per node: deleting a node unwires everything attached to it, which is not part of what the caller asked for and cannot be seen from an id alone.

To take a node out of the picture without losing its wiring, prefer set_workspace_node_modes - bypassing passes inputs straight through.

Args: nodes: node ids, from get_workspace_graph. scope: "root" for the whole workflow, "active" for the subgraph on screen. client_id: which tab to edit; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodesYes
scopeNoroot
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description fully carries the behavioral disclosure burden. It explicitly reveals batch atomicity ('nothing is removed unless every id exists'), the single-undo-step behavior, and the side effect of unwiring attached links reported as `links_lost`. These are important, non-obvious behaviors that would otherwise be invisible to the agent.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by essential behavioral caveats and parameter details. Every sentence earns its place; the structure with an Args section makes the parameter mappings easy to parse, and no content is redundant or fluff.

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

Completeness5/5

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

For a delete operation with side effects, the description is remarkably complete. It covers atomicity, undo grouping, the `links_lost` side effect, the alternative tool, and all parameter meanings. Although an output schema exists, the description still clarifies expected response content, making the tool fully understandable without needing to infer behavior.

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

Parameters5/5

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

Although schema description coverage is 0%, the Args section compensates completely by describing all three parameters. It states that `nodes` come from get_workspace_graph, explains the two `scope` values, and clarifies that `client_id` selects the browser tab with a sensible default. This is far more informative than the raw schema.

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

Purpose5/5

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

The description opens with a specific verb and resource ('Delete nodes from the workflow open in the browser'), making the tool's core action unambiguous. It also distinguishes this tool from the sibling set_workspace_node_modes by explicitly positioning deletion vs. bypassing, which prevents confusion.

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

Usage Guidelines5/5

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

The description gives clear when-to-use guidance: delete nodes when you truly want them removed, and prefer set_workspace_node_modes if you want to avoid unwiring. It also notes where node ids come from (get_workspace_graph) and explains the scope options, giving actionable context for choosing the right invocation.

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

restart_comfyA

Restart ComfyUI and wait for it to answer again.

What a newly installed or edited node needs: nodes.py imports every pack once at startup and nothing re-reads them, so a pack added while ComfyUI runs is simply absent from /object_info. Changed extension JavaScript is the other case and needs only reload_workspace - a restart there is minutes spent on a page reload.

Two mechanisms, picked by who owns the process. One this server started is stopped and relaunched through COMFYUI_LAUNCH_SCRIPT. One you started yourself is asked to re-exec itself, through the bridge node - which is the only way to reach it at all, and has the advantage of coming back on the exact command line and environment it already had, rather than on this server's guess at them. That path therefore needs the node installed.

Schemas and model directories are dropped, since a restart is precisely what makes them stale. A tab that was connected reconnects on its own and is waited for; the workflow on its canvas survives, being the browser's, not ComfyUI's.

Args: wait: seconds to wait for ComfyUI to come back. force: restart even with jobs running or queued, throwing that work away.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNo
forceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so richly. It discloses side effects (schemas/model directories dropped), process handling (server-started vs self-started, bridge-node re-exec), persistence of browser tabs, and the force parameter's destructive effect on queued jobs. It also notes that a restart is the only way to reach a self-started process. No annotation contradictions exist.

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

Conciseness5/5

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

The description is long but meticulously structured: it leads with the core action, then covers the 'when' (node vs JS), the 'how' (two mechanisms), the 'side effects' (schemas dropped, tabs reconnect), and finally the arguments. Every sentence conveys a distinct piece of decision-relevant information; none is wasted or redundant.

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

Completeness5/5

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

Given the tool's complexity (restart affects external process, UI state, and running work), the description covers all critical aspects: prerequisites (bridge node), side effects (schemas/models), workflow persistence, queued-job behavior, and parameter semantics. The output schema is not provided, but per instructions description needn't explain return values when an output schema exists.

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

Parameters5/5

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

Schema provides only types and defaults, with 0% schema description coverage. The description fully compensates by explaining 'wait: seconds to wait for ComfyUI to come back' and 'force: restart even with jobs running or queued, throwing that work away.' This adds meaning far beyond the raw schema fields.

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

Purpose5/5

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

The description opens with a specific verb+resource: 'Restart ComfyUI and wait for it to answer again.' It clearly distinguishes this from siblings like reload_workspace (which handles JS-only changes) and comfy_start/stop by naming the exact restart action focused exclusively on ComfyUI.

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

Usage Guidelines5/5

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

Provides explicit when-to-use guidance: a restart is needed for newly installed/edited node packs because nodes.py imports only at startup. It also names alternatives and exclusions: JS changes only need reload_workspace, and it explains the two restart mechanisms depending on process ownership, including the bridge-node prerequisite. This is far beyond a generic 'use this to restart'.

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

run_workflowA

Run a workflow and return the paths of the files it produced.

Call describe_workflow first to see which parameter names a workflow accepts. Pass seed=-1 to randomise the seed.

Args: name: workflow file name, without the .json extension. params: parameter overrides, e.g. {"prompt": "a red fox", "seed": -1, "steps": 8}. Raw '.' keys are accepted for anything not discovered. wait: wait for the run to finish. When False, returns the prompt_id immediately and the run keeps being watched in the background, so get_progress(prompt_id) reports its steps as they happen. Prefer this for anything slow: waiting blind is what makes a caller mistake a working generation for a hung one. timeout: seconds to wait before giving up on a running job. save_outputs: convert PreviewImage nodes to SaveImage so results are written to output/ instead of the temp folder that ComfyUI clears on restart. free_on_switch: unload models from VRAM before this run when it needs a different set than the previous one AND free VRAM is already below COMFYUI_FREE_VRAM_MIN_FRACTION. Defaults to COMFYUI_FREE_ON_SWITCH. Low free VRAM is normal on its own - ComfyUI keeps models cached - so this deliberately does nothing when there is headroom.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
waitNo
paramsNo
timeoutNo
save_outputsNo
free_on_switchNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description fully carries the behavioral disclosure burden. It covers return values, background execution behavior (wait=False returns prompt_id immediately), output persistence via save_outputs, and nuanced VRAM handling in free_on_switch (defaults and conditions). It even explains why low free VRAM is normal, demonstrating deep transparency.

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

Conciseness5/5

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

The description is well-structured and appropriately sized for a complex tool. It opens with a one-sentence purpose, then gives a prerequisite, a seed tip, and a clear 'Args:' list. Every line adds value, with no fluff or repetition.

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

Completeness5/5

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

For a complex tool with 6 parameters and significant behavioral nuances, the description covers all important aspects: purpose, parameters, return behavior, side effects, and monitoring via get_progress. The availability of an output schema reduces the need to describe return structures in detail, and the description still mentions the top-level return type.

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

Parameters5/5

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

The input schema has no parameter descriptions (0% schema coverage), but the description explains every parameter in detail: name format, params with examples and raw key syntax, wait semantics, timeout, save_outputs conversion, and free_on_switch conditions/default. This fully compensates for the schema's lack of documentation.

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

Purpose5/5

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

The description clearly states 'Run a workflow and return the paths of the files it produced,' which uses a specific verb and resource while distinguishing it from sibling tools like run_workspace. It also mentions describe_workflow, reinforcing its role in the workflow run/inspect cycle.

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

Usage Guidelines4/5

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

The description provides explicit usage guidance: 'Call describe_workflow first' and 'Prefer this for anything slow' when deciding between wait=True and wait=False. It also warns against 'waiting blind,' which helps avoid misuse. However, it does not explicitly name alternative tools or state when not to use this tool, so it falls short of a perfect 5.

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

run_workspaceA

Press Queue Prompt in the browser and watch the run from here.

The tab queues its own canvas, unsaved edits and all, so everything reacts the way it does when the button is clicked by hand: nodes light up, progress bars fill, sampler previews appear, and the result lands in the node that produced it. Nothing is written to the workflows directory. Use this when the user is working on a graph in front of them; use run_workflow for a file.

It has to be the tab that queues. ComfyUI addresses execution events to whoever submitted the job, and the frontend only tracks jobs it queued itself, so a graph submitted from here leaves the canvas reporting someone else's run. The events are copied back to this server so progress is still reported; if that copy cannot be set up the run still happens and progress_mirrored says it did not, which is the one case where get_progress goes quiet.

Two consequences of it being the real button. Widget callbacks run, so a seed set to randomize advances on its own - no two runs are alike unless the canvas says so. And the graph is not rewritten on the way out: a PreviewImage stays a PreviewImage and its result lands in temp/, which ComfyUI clears on restart. Change the node itself with set_workspace_values to keep it.

There is no params argument on purpose: set_workspace_values makes the edit, reports what changed from and to, and leaves it as one Ctrl+Z. Folding that into a run would hide an edit to the user's canvas inside a call that reads as read-only, and spend GPU minutes before anyone had seen the change.

Muted and bypassed nodes are dropped when the graph is converted, so a muted SaveImage produces no output at all. get_workspace_graph lists both under issues, which is worth a look when a run finishes with nothing to show.

Args: wait: wait for the run to finish. When False, returns the prompt_id immediately and keeps watching in the background, so get_progress(prompt_id) reports steps as they happen. Prefer this for anything slow - waiting blind is what makes a caller mistake a working generation for a hung one. timeout: seconds to wait before giving up on a running job. client_id: which tab to run; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNo
timeoutNo
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description takes full responsibility for behavioral disclosure. It covers side effects (no writes to workflows directory), event mirroring behavior, widget callback execution (random seeds advance), graph non-rewriting, muted/bypassed node handling, and the rationale for omitting a params argument. This is exceptionally transparent and prevents surprising behavior.

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

Conciseness4/5

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

The description is long but each paragraph contributes essential information about a tool with complex runtime behavior. The opening sentence is front-loaded with the primary action, and the structure (overview, behavioral nuances, rationale, args) is logical. Slightly verbose but every sentence earns its place.

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

Completeness5/5

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

Despite no annotations, the description covers all essential context: usage timing, side effects, edge cases (progress_mirrored failure, muted nodes), parameter semantics, and interaction with sibling tools. It even accounts for the output schema indirectly by referencing progress reporting. No critical gaps remain.

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

Parameters5/5

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

Schema description coverage is 0%, but the description's Args section fully compensates. Each parameter (wait, timeout, client_id) is explained with its effect, default, and behavioral implications (e.g., wait=false returns prompt_id and continues background watching). This far exceeds the bare schema.

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

Purpose5/5

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

The description opens with a clear, concrete action ('Press Queue Prompt in the browser and watch the run from here') and immediately differentiates from the sibling tool run_workflow ('Use this when the user is working on a graph in front of them; use run_workflow for a file'). This makes the tool's purpose unmistakable and contextually framed.

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

Usage Guidelines5/5

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

Explicit usage guidance is provided: when to use this tool versus run_workflow, and when to use set_workspace_values instead of passing params. It also advises preferring wait=false for slow runs to avoid mistaking a working generation for a hung one, giving clear decision rules for parameter choices.

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

save_workspaceA

Write the workflow open in the browser to a file.

This is how to get at a graph too large to fit in one answer: the reply is a path and a few numbers, and the file can then be read in slices or searched like any other. It is also how an unsaved canvas becomes something that survives the tab being closed.

Args: name: file name, with or without .json. format: "ui" writes exactly what ComfyUI's own Save writes - positions, groups, titles, collapsed state - into the export directory, and it can be opened in ComfyUI again. "api" writes the API-format prompt into the workflows directory, where run_workflow and describe_workflow find it. The two are not interchangeable: UI format keeps the layout and cannot be run, API format is runnable and has no layout at all. scope: "root" for the whole workflow, "active" for the subgraph on screen. overwrite: replace the file if it already exists. client_id: which tab to ask; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
scopeNoroot
formatNoui
client_idNo
overwriteNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It explains the behavioral differences between 'ui' and 'api' formats, overwrite semantics, scope options, and the nature of the reply ('a path and a few numbers'). It does not mention permissions or side effects, but for a save operation this is adequate.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded. The opening sentence states the core action, followed by rationale, then a structured Args list. Every sentence contributes useful information; there is no redundancy or filler.

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

Completeness5/5

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

Given the tool's complexity (5 parameters, no annotations), the description is remarkably complete. It covers purpose, use cases, format distinctions, scope, overwrite, and even the response shape. It also relates to sibling tools (run_workflow, describe_workflow) to ground its context.

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

Parameters5/5

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

Schema coverage is 0%, so the description must compensate. It does so thoroughly with an Args section explaining each parameter: 'name' (file name), 'format' (ui vs api with detailed consequences), 'scope' (root vs active), 'overwrite' (replace file), and 'client_id' (which tab to ask). This adds meaning far beyond the schema's bare property names.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Write the workflow open in the browser to a file.' It clearly distinguishes from siblings like load_workspace and open_workspace. The additional context about handling large graphs further clarifies the tool's unique role.

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

Usage Guidelines4/5

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

It provides clear use cases ('This is how to get at a graph too large to fit in one answer' and 'how an unsaved canvas becomes something that survives the tab being closed'). It also explains format-specific destinations, implicitly guiding when to use 'ui' vs 'api' in relation to run_workflow and describe_workflow. No explicit 'when not to use' is given, but context is strong.

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

screenshot_workspaceA

Photograph the ComfyUI canvas: what the workflow looks like, not what it says.

This answers the questions a graph dump cannot - whether the layout reads as a mess, which boxes overlap, where a link crosses the whole screen, what the user means by "that one over there". After a layout change it is the only way to check the result rather than assume it.

It is a picture of the canvas, and that has a hard edge: prompts, image previews, markdown notes and audio players are HTML drawn over the canvas and are not in it. An empty-looking prompt box in the picture says nothing about the prompt - get_workspace_graph is what reads values. The report says how many such widgets the graph has.

Always the graph on screen. To photograph a subgraph, navigate_workspace into it first; the report names which graph it is.

Args: fit: what to frame. "graph" for the whole workflow, "view" for the viewport exactly as the user has it, "selected" for what they have clicked on, or a list of node ids to frame those. A whole large graph is legible only as a shape - for reading titles, frame a handful of nodes. max_edge: longest edge in pixels, 256 to 4096. Bigger reads better and costs more; it does not make a wide graph legible, only a small subset. format: "png" keeps the text crisp and is the right answer for a diagram. "jpeg" and "webp" are smaller and blur it. client_id: which tab to ask; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
fitNograph
formatNopng
max_edgeNo
client_idNo

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the transparency burden. It discloses a critical limitation: HTML overlays (prompts, previews, notes) are not captured, and states that an empty-looking prompt box does not reflect the prompt. It also explains that max_edge affects legibility and cost, and that the default client_id is the most recently focused tab.

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

Conciseness5/5

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

The description is well-structured with a clear introduction, explanation of limitations, and an Args section. Every sentence earns its place, providing necessary context without fluff. It is front-loaded with the core purpose and then expands into actionable details.

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

Completeness5/5

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

Given the tool has no output schema, the description adequately sets expectations about outputs (a picture of the canvas, plus a report mentioning widget count and graph name). It also covers all parameters and scenarios (entire graph, subgraph, viewport, selected nodes) making it sufficiently complete for an agent to invoke correctly.

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

Parameters5/5

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

The input schema has 0% description coverage, but the description compensates fully. Each parameter is explained with concrete meanings, examples, and usage guidance: fit options and their visual implications, max_edge range and trade-offs, format rationale for crispness vs. size, and client_id default behavior. This adds substantial value beyond the raw schema.

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

Purpose5/5

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

The description opens with a clear verb and resource: 'Photograph the ComfyUI canvas' and immediately distinguishes its purpose from graph dumps by highlighting what visual information it captures (overlaps, crossing links, layout mess). This directly addresses the tool's role among siblings like get_workspace_graph.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool: 'After a layout change it is the only way to check the result rather than assume it.' It also names alternatives and exclusions: get_workspace_graph for reading values, navigate_workspace to frame subgraphs. This gives clear context for choosing between tools.

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

set_workspace_groupsA

Create, edit and delete the group boxes on the canvas open in the browser.

A group is a labelled rectangle drawn behind the nodes that fall inside it. It holds no membership of its own - which nodes are "in" it is decided by where the box is - so creating one around a list of nodes means fitting the box to them, and that is what this does.

Deleting a group takes only the box: the nodes it framed stay exactly where they are. Get the current groups, with their ids and members, from get_workspace_graph.

Args: create: [{"title": ..., "nodes": ["3", "8"]}] - a box fitted around those nodes. "color" takes a palette name ("green", "blue", "pale_blue", ...) or #rrggbb; "padding" is the gap to the nodes, 10 by default. A group with no nodes needs an explicit "bounding": [x, y, width, height] instead. update: [{"group": <id or title>, ...}] with any of "title", "color", "nodes" (refit around these) or "fit": true (refit around whatever it currently holds, after the nodes inside it have moved). remove: groups to delete, by id or title. scope: "root" for the whole workflow, "active" for the subgraph on screen. client_id: which tab to edit; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoroot
createNo
removeNo
updateNo
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses behavioral traits: groups hold no membership, deleting only removes the box, nodes stay in place, create refits the box to nodes with padding, update can refit the box, and empty groups need an explicit bounding box. This exceeds annotations by providing concrete side-effect information.

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

Conciseness5/5

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

The description is well-structured with a short lead sentence followed by detailed yet efficient explanations. It uses an Args block for parameter details. Every sentence adds value—there is no fluff. The length is justified by the tool's complexity.

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

Completeness5/5

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

Given zero annotations and zero schema description coverage, the description thoroughly covers all necessary context: what the tool does, how each operation variant works, parameter formats, defaults, and pointers to related tools. The presence of an output schema reduces the need to describe return values, so the description is complete for an agent to use.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden, and it succeeds. It explains each parameter in detail with examples ('create: [{"title": ..., "nodes": ["3", "8"]}]'), defaults ('padding 10', 'scope: root', 'client_id defaulting to most recently focused'), and clarification on behavior ('refit around these', 'refit around whatever it currently holds'). This goes well beyond the minimal schema.

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

Purpose5/5

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

The description opens with 'Create, edit and delete the group boxes on the canvas open in the browser.' This uses a specific verb set and clearly identifies the resource (canvas groups), distinguishing it from sibling tools like set_workspace_selection or set_workspace_layout. The sentence directly conveys the tool's purpose and scope.

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

Usage Guidelines4/5

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

The description implicitly guides usage by defining when to use it ('creating one around a list of nodes') and mentioning related tools ('Get the current groups, with their ids and members, from get_workspace_graph'). It does not explicitly state when not to use it or list alternative tools, but the contextual guidance is sufficient.

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

set_workspace_layoutA

Move, resize, fold and unfold nodes on the canvas open in the browser.

None of this changes what a workflow does - it runs the same however it is laid out - so this is purely about making a graph readable. The whole batch is one undo step and nothing is written unless every id exists.

Groups follow the nodes they were holding. A group is only a rectangle, and what is "inside" it is whatever falls within it, so moving nodes out from under one would silently empty it; membership is read before anything moves and each affected group is refitted around those same nodes afterwards.

arrange_workspace computes positions rather than taking them, and its answer can be passed straight in here.

Args: positions: {"<node_id>": [x, y]}. Canvas coordinates, y downwards. A pinned node is skipped rather than moved, and reported in skipped - pinning is the author saying "not this one". sizes: {"<node_id>": [width, height]}. A size below what the node needs to draw its widgets is raised to that minimum and reported. collapsed: {"<node_id>": true} to fold a node down to its title bar, false to unfold it. The desired state, not a toggle, so asking for what a node already is does nothing. get_workspace_graph reports the current state per node. refit_groups: refit every group that held one of the changed nodes. Turning this off leaves the boxes where they were, which is what you want when moving a node deliberately out of a group. scope: "root" for the whole workflow, "active" for the subgraph on screen. client_id: which tab to edit; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoroot
sizesNo
client_idNo
collapsedNo
positionsNo
refit_groupsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries full responsibility and excels. It discloses atomicity ('The whole batch is one undo step and nothing is written unless every id exists'), group behavior ('membership is read before anything moves and each affected group is refitted around those same nodes afterwards'), pinning behavior ('A pinned node is skipped rather than moved, and reported in `skipped`'), and idempotent collapsed semantics ('asking for what a node already is does nothing'). These are non-obvious traits that would affect invocation.

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

Conciseness4/5

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

The description is longer than average but front-loaded with the core purpose and caveat that workflow behavior is unchanged. The Args section is dense but each sentence adds value – no fluff. It could be slightly tightened, but the complexity of group behavior and multiple parameters justifies the length.

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

Completeness5/5

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

The description covers all six parameters, explains edge cases (pinning, minimum sizes, empty groups), describes side effects (undo step, atomic validation), and references related tools (arrange_workspace, get_workspace_graph). With an output schema present, the lack of return-value detail is acceptable. The tool is fully contextualized for an agent.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate. It explains every parameter in detail: positions with coordinates and pinning, sizes with minimum raising, collapsed as desired state not toggle, refit_groups with rationale, scope values, and client_id default. This goes beyond simple type information to provide actionable semantics.

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

Purpose5/5

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

The description opens with a specific verb+resource: 'Move, resize, fold and unfold nodes on the canvas open in the browser.' This clearly distinguishes it from siblings by listing concrete operations and later references arrange_workspace for computed positions, making the tool's unique role obvious.

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

Usage Guidelines5/5

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

The description states when to use it: 'purely about making a graph readable' (layout vs workflow semantics) and explicitly names an alternative: 'arrange_workspace computes positions rather than taking them, and its answer can be passed straight in here.' It also mentions get_workspace_graph for reading current collapsed state, offering clear contextual guidance.

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

set_workspace_node_modesA

Mute or bypass nodes in the workflow open in the browser.

Muted ("never") stops a node producing anything; bypassed passes its inputs straight through to whatever it feeds, which is how a branch is taken out without unwiring it. Both are how a workflow gets narrowed to the part being worked on.

Like set_workspace_values, the whole call is one undo step and nothing changes unless every entry is valid.

Args: modes: {"<node_id>": "always" | "muted" | "bypassed"}. scope: "root" for the whole workflow, "active" for the subgraph on screen. client_id: which tab to edit; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
modesYes
scopeNoroot
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and excels. It explains the behavioral difference between 'muted' and 'bypassed' with concrete examples ('stops a node producing anything' vs 'passes its inputs straight through') and discloses atomicity ('the whole call is one undo step') and validation behavior ('nothing changes unless every entry is valid'). This is comprehensive disclosure beyond simply stating the action.

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

Conciseness5/5

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

The description is well-structured and every sentence earns its place. It opens with a clear statement of purpose, then defines key terms, notes atomicity, and lists arguments with meaningful descriptions. It is appropriately sized for a tool with three parameters and a non-trivial modes object.

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

Completeness5/5

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

Given the tool's moderate complexity and the presence of an output schema (which handles return values), the description is complete. It covers all parameters with semantics, explains the core concepts, and provides usage context. The atomicity and validation behavior are disclosed, leaving no obvious gaps for an agent to select or invoke it correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully explain parameters, and it does. It defines the exact format for modes (`"{\<node_id\>: \"always\" | \"muted\" | \"bypassed\"}"`), explains scope values ('root' vs 'active'), and provides the default behavior for client_id. This adds significant meaning beyond the bare schema structure.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Mute or bypass nodes in the workflow open in the browser.' It distinguishes itself from sibling tools by explaining the specific semantics of muted and bypassed states and how they help narrow a workflow. The reference to set_workspace_values for atomicity further positions it within the workspace tool family.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool: 'Both are how a workflow gets narrowed to the part being worked on.' It implies usage where temporary node deactivation is needed without unwiring, but does not explicitly state when not to use it or point to alternatives like remove_workspace_nodes. This is a clear context with no exclusions, fitting the 'no exclusions' criteria.

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

set_workspace_selectionA

Highlight nodes and groups on the canvas, so the user can see which ones you mean.

The write half of what get_workspace_graph reports as selected. Pointing is how people hand work over, and it is worth having in both directions: four node ids in a sentence are hard to check, while four highlighted boxes are not. Use it before an edit the user should agree to, and to answer "which ones?" without a list.

Selecting nothing clears the selection. A selection is not part of the workflow, so this does not go on the undo stack and Ctrl+Z will not take it back.

Args: nodes: node ids to select, as they appear in get_workspace_graph. They are local to the graph on screen - navigate_workspace first for a subgraph, and drop any 98:12 prefix once inside. groups: group ids or titles to select as well. add: add to what is already selected instead of replacing it. centre: move the view to fit the selection. Off by default, since the user may be looking somewhere deliberately. client_id: which tab; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
addNo
nodesNo
centreNo
groupsNo
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description fully discloses important behavioral traits: selecting nothing clears the selection, selection is not part of the workflow and thus not on the undo stack, and Ctrl+Z will not revert it. It also explains the 'add' parameter semantics and the default for 'centre,' providing a clear mental model of the tool's effects.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose in the first sentence. Every paragraph earns its place: the rationale, the usage guidance, the behavioral caveats, and the parameter explanations are all relevant and non-redundant. The length is appropriate for a tool with five parameters and several subtleties.

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

Completeness5/5

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

The description is complete for the tool's complexity: it covers purpose, usage timing, side effects, relationship to the undo stack, and parameter specifics. It even instructs on prerequisite actions like navigate_workspace. With an output schema present, explaining return values is unnecessary, and none of the important operational aspects are left ambiguous.

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

Parameters5/5

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

The description includes an explicit 'Args' section that explains each of the five parameters beyond the bare schema. For 'nodes,' it adds critical details about IDs being local to the visible graph and dropping prefixes like '98:12' after navigating into a subgraph. It also clarifies the semantics of 'add' and 'centre' defaults, which the schema leaves ambiguous.

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

Purpose5/5

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

The description opens with a clear, specific purpose: 'Highlight nodes and groups on the canvas, so the user can see which ones you mean.' It distinguishes the tool from siblings by calling it 'the write half of what get_workspace_graph reports as selected,' clarifying its role relative to a related read tool. The verb 'set' and resource 'workspace selection' are explicit.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: 'Use it before an edit the user should agree to, and to answer "which ones?" without a list.' It also offers context on the read/write pairing with get_workspace_graph and advises calling navigate_workspace first for subgraphs. No alternatives are excluded, but the intended use cases are clearly delineated.

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

set_workspace_valuesA

Set widget values, node properties and on-screen labels in the open workflow.

This edits the live canvas, exactly as if the values had been typed in. The change lands on the frontend's undo stack as a single step, so one Ctrl+Z in the browser takes back the whole call - which is the reason to pass several values at once rather than one per call, and why properties live here rather than in a tool of their own.

Nothing is written unless every key validates, so a rejected call leaves the graph as it was. Numeric ranges are enforced; a combo value outside the listed options is reported as a note and written anyway, because a node's option list is not a whitelist - ComfyUI decides.

Args: values: {"<node_id>.<widget>": value}, e.g. {"37.megapixels": 1.5}. Node ids and widget names come from get_workspace_graph. properties: {"<node_id>.<property>": value} - the second, separate set of settings a node carries, the ones ComfyUI edits through the Properties Panel on its context menu. Some nodes keep their whole configuration there and their widget values mean nothing without it. A separate argument because the two namespaces can collide: one node here has a delimiter in both. Written through the node's own setProperty, so a pack that rebuilds its widgets in response gets the chance to. labels: {"<node_id>": {"title": ..., "inputs": {...}, "outputs": {...}, "widgets": {...}}} - the text drawn on a node rather than in it. This is what makes a workflow readable in another language: a graph written in Chinese keeps its headings in node titles, slot labels and widget rows, and no widget value reaches any of them. Addressed by the stable name from get_workspace_graph, and null or "" clears an override so the name shows through again - which is how a translation is taken back off. widgets is separate from inputs because a converted widget has both, and only the widget's own label changes the row on screen - but that one is not saved with the workflow and lasts until the page reloads, which the change log says each time. Keyed by node id alone, because a node has one title and several sets of names, and "1.title" would collide with a widget called title. Do not try to write localized_name: that one is ComfyUI's own translation for the current locale and is regenerated on load. scope: "root" for the whole workflow, "active" for the subgraph on screen. client_id: which tab to edit; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoroot
labelsNo
valuesNo
client_idNo
propertiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so exceptionally. It discloses the undo-stack single-step behavior, all-or-nothing validation, numeric range enforcement, the note-and-write behavior for out-of-list combo values, label persistence (not saved with workflow), the localized_name caveat, and setProperty mechanics. This is far beyond typical transparency.

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

Conciseness4/5

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

The description is long but front-loaded with a one-sentence summary and a clean Args section. Most sentences add valuable behavioral or usage detail, but a few asides (e.g., the Chinese-language example) are somewhat tangential and could be trimmed without losing core information. Overall it is well-structured and dense, but not perfectly concise.

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

Completeness5/5

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

This is a complex tool with 5 parameters, and the description covers all of them thoroughly, including side effects, validation, undo behavior, persistence, and edge cases. It references get_workspace_graph for IDs. Since an output schema exists, not explaining return values is acceptable. This is a complete and self-sufficient description for the tool's complexity.

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

Parameters5/5

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

Schema description coverage is 0%, and the description fully compensates. For every parameter it gives detailed semantics: values format and example, properties explanation with collision warning, labels structure with override-clearing and persistence caveats, scope meaning, and client_id default. It even explains why labels are keyed by node id alone—far more than the schema provides.

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

Purpose5/5

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

The description opens with a specific verb+resource+scope: 'Set widget values, node properties and on-screen labels in the open workflow.' It clearly distinguishes from sibling tools like set_workspace_layout (layout), align_workspace (alignment), and set_workspace_node_modes (modes) by naming exactly what is being changed and where.

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

Usage Guidelines4/5

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

It provides clear context: the tool edits the live canvas exactly as if typed, and explicitly explains why to pass several values at once and why properties live here rather than a separate tool. It also references get_workspace_graph for node ids and widget names. However, it does not explicitly state when NOT to use this tool versus alternatives, so it stops short of a full when/when-not specification.

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

show_imageA

Return a generated image so it can be viewed, downscaled to keep it small.

Args: path: a path from run_workflow's outputs. max_edge: longest edge in pixels after downscaling.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
max_edgeNo

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the downscaling behavior ('downscaled to keep it small') and that it returns an image for viewing, which are useful. However, it does not describe the return format, potential errors, or any side effects, leaving some behavioral aspects unspecified.

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

Conciseness5/5

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

The description is concise, with two sentences for the purpose and behavior, followed by a clear Args block. It is front-loaded with the main purpose and contains no filler or redundant information.

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

Completeness4/5

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

For a simple tool with only two parameters and no output schema, the description provides sufficient context: how to obtain the path (from run_workflow), what max_edge does, and that the image is downscaled. It omits details like return format or error conditions, but these are not critical given the tool's simplicity and the absence of annotations.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate for explaining parameters. It does so thoroughly: 'path' is explained as a path from run_workflow's outputs, and 'max_edge' is explained as the longest edge in pixels after downscaling. This fully adds meaning beyond the raw schema.

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

Purpose5/5

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

The description clearly states the tool returns a generated image for viewing, with a specific verb ('Return') and resource ('generated image'). It distinguishes itself from sibling tools by referencing 'run_workflow's outputs', making its role unique among the listed tools.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool: after running a workflow, to view a generated image by specifying a path from run_workflow's outputs. It does not explicitly exclude alternatives, but the reference to run_workflow gives enough contextual guidance for an agent to select it appropriately.

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

switch_workspace_tabA

List the workflow tabs open in the ComfyUI window, and switch between them.

These are the tabs along the top of ComfyUI: open workflows, exactly one of which is on screen. They are not browser tabs - one browser tab holds all of them, and client_id plus workspace_status is where that sense of the word lives.

With no to it reports and moves nothing, which is also how to find out what is open before naming one. Every other workspace tool acts on the workflow that is on screen, so this is what points them at a different one.

Switching does what clicking the tab does, and no more: the canvas is reloaded from that workflow's own stored state. Unsaved edits in the tab being left behind are not lost - they belong to that workflow, which is why a tab can report modified while a different one is on screen.

"new" opens a blank workflow and switches to it, which is the same command the + button on the tab bar runs. That is the way to start something from nothing without disturbing what the user already has open.

Args: to: which tab - an index from a previous call, its path or its filename, or "next", "previous", "recent" for the one active before this, or "new" for a fresh blank workflow. Empty reports without moving. A name matching two open tabs is refused rather than guessed. force: reload the tab already on screen instead of reporting that it is already there. client_id: which browser tab to ask; defaults to the most recently focused.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
forceNo
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It discloses key behaviors: switching reloads the canvas from that workflow's stored state, unsaved edits are not lost, 'force' reloads the current tab, and ambiguous names are refused. It even states 'Switching does what clicking the tab does, and no more', setting accurate expectations.

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

Conciseness4/5

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

The description is well-organized with front-loaded purpose and an Args list. While slightly verbose, every sentence adds useful context, such as clarifying how 'new' works and the relationship with workspace_status. It earns its length, though a minor trim could improve conciseness.

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

Completeness5/5

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

Given the tool's complexity (multiple parameter value types, edge cases) and lack of annotations, the description is remarkably complete. It covers all parameters, ambiguous name handling, the 'new' action, and the interaction with other workspace tools. An output schema exists, so return values need no explanation.

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

Parameters5/5

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

Schema description coverage is 0% and parameters lack descriptions, but the description's 'Args:' section fully compensates. It explains the semantics of 'to' (index, path, filename, special keywords), 'force', and 'client_id', adding rich meaning beyond the bare schema types and defaults.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'List the workflow tabs open in the ComfyUI window, and switch between them.' It specifies the resource (workflow tabs in ComfyUI) and distinguishes itself from browser tabs and other workspace tools, making it unambiguous and well-differentiated from siblings.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: it explains when to use the tool (to point other workspace tools at a different workflow), how to discover open tabs (call with no 'to'), and when to use 'new'. It also contrasts with 'Every other workspace tool', giving clear alternatives.

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

undo_workspaceA

Undo the last edit in the browser, exactly as Ctrl+Z would.

Every workspace edit is bracketed so that one call is one undo step - a batch of three values set together comes back in one press. This is that press, which is what makes a wrong edit cheap to take back rather than something to reconstruct by hand.

The history is the user's, not this server's. Their own edits sit on the same stack, interleaved with ours in the order they happened, and nothing distinguishes them. One step back is almost always ours; several steps back is taking back whatever was there, theirs included. Undo one, look, undo again.

Args: steps: how many to take back, 1 to 50. Pass 0 to read the depth without moving - the only way to tell an undo that will do something from one that will silently do nothing, since an empty history is not an error. redo: step forward instead. A redo history exists only until the next edit, which clears it. client_id: which tab; defaults to the most recently focused one.

ParametersJSON Schema
NameRequiredDescriptionDefault
redoNo
stepsNo
client_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so thoroughly. It discloses bracketing (batch edits come back in one undo), interleaving of user history, redo history clearing on next edit, and the silent no-op on empty history. This goes far beyond what the schema or annotations could convey.

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

Conciseness5/5

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

The description is well-structured with a one-line summary, a critical warning, and a clear args list. Every sentence adds value—from the Ctrl+Z analogy to the interleaving caveat to the redo behavior. It is appropriately sized for the tool's complexity and front-loaded with the core purpose.

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

Completeness5/5

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

Given the tool's moderate complexity and no annotations, the description is remarkably complete. It covers the main behavior, edge cases (empty history, steps=0), redo semantics, and client scoping. The output schema exists, so return values need not be described. No obvious gaps remain.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must explain the parameters, and it does so completely. It defines steps (1-50, with 0 as a special depth check), redo (step forward, cleared by next edit), and client_id (which tab, defaulting to most recently focused). Each parameter receives meaningful behavioral context that the bare schema lacks.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Undo the last edit in the browser, exactly as Ctrl+Z would.' This clearly distinguishes it from sibling tools that set, run, or load workspace state. It also immediately conveys the tool's scope and user-facing analogy.

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

Usage Guidelines4/5

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

The description explains when to use undo (to cheaply take back wrong edits) and even warns about caution when stepping back multiple times ('several steps back is taking back whatever was there, theirs included'). It also describes redo usage. However, it does not explicitly name alternative tools or state when not to use it, so it stops short of a 5.

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

upload_input_imageA

Upload a local image into ComfyUI's input folder so workflows can load it.

Returns the name to pass to a LoadImage node.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
subfolderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the core behavior (uploads to input folder, returns a name for LoadImage) but does not mention overwriting behavior, file format limitations, or how the subfolder parameter affects the upload. This is adequate but not rich.

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

Conciseness5/5

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

The description is two concise sentences, front-loaded with the main action and purpose. No redundant or filler content.

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

Completeness4/5

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

For a simple upload tool with an output schema present, the description covers the essential behavior and return value. It lacks parameter details and edge-case disclosures, but the tool's complexity is low, and the description is sufficient for basic invocation.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain either parameter. 'path' is somewhat inferable as the local file path, but 'subfolder' is entirely unexplained, including its relationship to the input folder and how it affects the returned name.

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

Purpose5/5

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

The description clearly identifies the action: 'Upload a local image into ComfyUI's input folder'. It names the specific resource (local image, input folder) and the purpose ('so workflows can load it'). This distinguishes it from siblings like show_image or list_models.

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

Usage Guidelines4/5

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

The description implies when to use the tool: when you need to make a local image accessible to ComfyUI workflows. It doesn't explicitly state when not to use it or name alternatives, but the context is clear enough for a simple upload operation.

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

workspace_statusA

Check whether the live ComfyUI workspace can be reached.

The workspace is the workflow open in the browser. Reaching it needs two things beyond a running ComfyUI - the bridge node installed and a tab connected - and this reports which one is missing. Call it before the other workspace_* tools when they fail, and to find client_id values when several tabs are open.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It explains the core behavior (reports which prerequisite is missing) and the additional capability (client_id discovery). It implicitly indicates a read-only check, but does not explicitly state side-effect-free behavior or behavior when ComfyUI is not running, which would push it to a 5.

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

Conciseness5/5

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

The description is three sentences total: a clear purpose statement, a brief explanation of prerequisites, and a usage directive. Every sentence carries necessary information with no waste.

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

Completeness5/5

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

For a zero-parameter diagnostic tool with an output schema, the description fully covers the tool's purpose, prerequisites, and recommended usage. It tells the agent what the workspace refers to, what conditions are needed, and how to use the results.

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

Parameters4/5

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

The tool has zero parameters, so the schema is trivially complete. The baseline for 0-param tools is 4, and the description logically explains the state being checked without needing parameter details.

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

Purpose5/5

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

The description uses a specific verb ('Check whether') and resource ('live ComfyUI workspace'), defining what the workspace is. It clearly distinguishes itself from siblings by explaining it reports which prerequisite (bridge node/tab) is missing and can find client_id values, which is unique among the listed tools.

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

Usage Guidelines5/5

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

Explicit guidance is given: 'Call it before the other workspace_* tools when they fail' and 'to find client_id values when several tabs are open.' This tells the agent exactly when to use this tool versus alternatives.

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

TDQS

A3.9/5.0
Disambiguation4/5

Almost every tool has a distinct resource and action: workspace_* covers graph editing, comfy_*/restart covers process control, and separate tools handle runs, models, downloads, and logs. A few close pairs (get_comfy_log/get_console_log, get_progress/get_download_progress, arrange/align/set_workspace_layout) require reading descriptions, but each is clearly scoped.

Naming Consistency4/5

The dominant pattern is verb_noun snake_case, with a strong workspace_* family and consistent comfy_*, workflow, model, and download verbs. Minor inconsistencies such as comfy_start vs restart_comfy, interrupt/free_memory without a get_ prefix, and run_workflow vs run_workspace are understandable but not perfectly uniform.

Tool Count2/5

48 tools is well above the 25+ threshold and is a lot of surface area for an agent to choose from, even though ComfyUI is a complex domain and many tools are narrow workspace operations. A consolidated set (e.g. fewer layout/arrange/align variations or grouped subcommands) would be easier to navigate.

Completeness5/5

The server covers the full local ComfyUI lifecycle: process management, logs, workspace inspection/editing/layout, workflow file handling, node/model discovery, downloads, running both files and live canvases, outputs, queue control, and image upload. There are no obvious dead ends; missing capabilities like deleting workflow files or installing custom nodes are peripheral.

Maintenance

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

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

Latest Blog Posts

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/pytraveler/local-comfyui-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server