4 tools. Generated from the live MCP tool schemas — do not edit by hand; run
npm run docs:gen.install_comfyui
Install, update and configure the local ComfyUI installation, its sidebar panel, and this MCP server itself. Driven by theaction parameter:
- action:“install” — Install ComfyUI locally: git-clone it into
target_path, create a dedicated workspace virtualenv (<target>/.venv), and install Python requirements INTO that venv (never the Python running this MCP server) via pip or uv. ComfyUI-Manager is installed from manager_requirements.txt when present, else git-cloned as a fallback. Mirrorscomfy-cli install. LOCAL, subprocess-only and independent of any remote —comfyui-url target; the target dir must be empty or non-existent (an existing install is never overwritten). Runs SYNCHRONOUSLY and can take several minutes (large git clone + full torch/dependency install); the call blocks until done. On success returns a JSON report { installed, targetPath, venvPath, comfyuiUrl, managerInstalled, managerVia, version, pythonInstaller, steps[] }. Does NOT start ComfyUI.target_pathis REQUIRED. - action:“update” — Update the ComfyUI CORE install: runs
git pullin the configured ComfyUI directory and reinstalls its Python requirements (auto-detecting uv vs pip). Requires a local install (COMFYUI_PATH); returns a clear error when targeting a remote instance via —comfyui-url. The requirements install targets the running server’s own interpreter (recorded when this server launched ComfyUI, or an explicit COMFYUI_PYTHON); when that interpreter cannot be verified the update refuses rather than install into a guessed environment — start ComfyUI or connect first. Does NOT touch custom nodes. - action:“update_all” — Update ALL installed CUSTOM NODES via the ComfyUI-Manager HTTP API. Mirrors
comfy-cli update all. This does NOT update ComfyUI core — use action:“update” for that. Works against the connected instance (local or remote); updates run asynchronously and a ComfyUI restart may be required afterward. REFUSED while the comfyui-mcp sidebar panel is version-pinned, because ‘all’ would move the pinned panel too and ComfyUI-Manager cannot update everything-except-one-pack — clear the pin with action:“panel” + panel_action:“unpin”, or update the other packs individually by id. - action:“panel” — Install, update, reinstall, sync, pin, unpin, unlock, or report status of the ComfyUI sidebar panel (‘comfyui-agent-panel’ on the Comfy Registry; repo comfyui-mcp-panel) in the LOCAL ComfyUI’s custom_nodes, selected by
panel_action(default “status”). Uses the same ComfyUI-Manager path as install_custom_node and always targets the ‘nightly’ (git-HEAD) channel. Local-only (no-op/refuses in remote/cloud mode) and NEVER modifies a dev install (a symlinked panel dir). After install/update/reinstall/sync, ComfyUI must be RESTARTED to load the new/updated node — this tool does not auto-restart. The panel is also auto-installed-if-missing when the MCP server loads. A version PIN (panel_action:“pin”) holds the panel where it is: while a pin is set, install/update/reinstall/sync and the auto-install all refuse, and ‘sync’ only warns that a newer panel exists. Panel operations are serialized across orchestrator processes by a lock file that is never auto-reclaimed — if a crashed orchestrator wedges it, panel_action:“unlock” reclaims the lock once it is provably abandoned. This is the SIDEBAR PANEL only; it never touches ComfyUI core or this npm package. - action:“self_update” — Check or apply a self-update of the comfyui-mcp NPM PACKAGE (this MCP server), selected by
self_update_action(default “status”). The server also auto-checks on start (opt out with COMFYUI_MCP_AUTOUPDATE=0). Detects the install mode: a dev install (npm link / source checkout) is NEVER updated; global/local installs are updated via npm; npx fetches latest on next run. The running process cannot hot-swap its own code — after an update you must RECONNECT (/mcp) or restart the orchestrator to load the new version. This tool does not auto-restart. On Windows the running orchestrator holds its own sharp DLL locked, so an in-place npm replace fails (EBUSY); the update is then handed to a deferred helper that finishes it once the orchestrator has fully stopped, and the new version loads at the next start. A failed update reports npm’s own error output. This updates comfyui-mcp ITSELF — not ComfyUI (action:“update”), not the sidebar panel (action:“panel”), and not custom nodes (install_comfyui (action:“update_all”)). - action:“environment” — Report ComfyUI environment info (mirrors
comfy-cli env): the running instance details from /system_stats (OS, Python, ComfyUI version, GPU/VRAM — works for remote targets) plus local probes when a workspace path is available (Python version, git revision, ComfyUI-Manager version, and key pip packages like torch/CUDA). The local python probe targets the interpreter the RUNNING server uses (its venv / embedded / standalone python, resolved from the live server), never a barepythonon PATH. Degrades gracefully and NEVER guesses: when the correct interpreter can’t be confirmed,local.python_probe_trustedis false,local.packagesis omitted, andlocal.python_probe_reasonsays why — an absent package list means UNDETERMINED, never ‘not installed’. READ-ONLY. - action:“configure_manager” — Configure ComfyUI-Manager settings, mirroring
comfy-cli managersubcommands;manager_settingpicks which setting andvalueits new value. Most settings use the ComfyUI-Manager HTTP API (works against remote ComfyUI); set_network_mode and set_security_level have no HTTP setter and are written to Manager’s config.ini (requires a known local ComfyUI path; restart ComfyUI to apply).
Parameters
enum
required
Which install/environment operation to perform. action:“update”, action:“update_all” and action:“environment” take no other parameters; action:“install” requires
target_path; action:“panel” takes panel_action (+ version/reason for a pin); action:“self_update” takes self_update_action; action:“configure_manager” requires manager_setting (+ value).
Options: action:"install", action:"update", action:"update_all", action:"panel", action:"self_update", action:"environment", action:"configure_manager".string
action:“install” — REQUIRED absolute path to the workspace directory to install ComfyUI into. Must be empty or non-existent.
boolean
action:“install” — if true, do not clone/install ComfyUI-Manager. Default false (Manager is installed).
boolean
action:“install” — if true, prefer
uv pip install over plain pip when uv is available on PATH. Falls back to pip if uv is missing. Default false.string
action:“install” — ComfyUI version to install (comfy-cli semantics): “nightly” (default-branch HEAD), “latest” (newest release tag), or a semantic version like “0.3.40” (checked out as tag v0.3.40). Raw git refs/branches are rejected. Omit to track the default branch HEAD. ALSO used by action:“panel” + panel_action:“pin”, where it is the PANEL version to hold at, e.g. ‘0.11.20’ (take it from the installedVersion that panel_action:“status” reports).
enum
default:"status"
action:“panel” — which sidebar-panel operation to run. status: report installed/version/dev-symlink/pin plus a sync assessment (never errors). sync: bring the panel up to what this orchestrator needs — no-ops when already current, WARNS ONLY when pinned, and reports the version re-read from disk afterwards. install: add the panel (nightly). update: pull the latest nightly. Works on either install shape — a git checkout is fast-forwarded, and a Comfy Registry ZIP install (which has no .git) is replaced with a verified fresh clone, keeping the previous copy outside custom_nodes. Success is always re-read from disk. reinstall: uninstall + reinstall (nightly). pin: hold the panel at a version (requires
version). unpin: clear the pin so a sync can proceed. unlock: recover from a crashed/killed orchestrator’s leftover panel operation lock — reclaims it ONLY when it is provably abandoned (older than the stale threshold AND its recorded owner process is dead), and refuses with the observed state otherwise. install/update/reinstall/sync refuse on a dev symlink or an active pin, and require a local workspace (COMFYUI_PATH or the saved default workspace).
Options: status, install, update, reinstall, sync, pin, unpin, unlock.string
action:“panel” + panel_action:“pin” only: why the user is pinning (stored with the pin).
enum
default:"status"
action:“self_update” — status: report install mode + current vs latest version + dev-link note (never errors). update: update to the latest published version (refuses on a dev link; no-op when already up to date or for npx).
Options:
status, update.enum
action:“configure_manager” — REQUIRED. Which ComfyUI-Manager setting to change. HTTP API: set_preview_method, set_db_mode, set_component_policy, set_update_policy, set_channel, reset_queue. config.ini fallback: set_network_mode, set_security_level.
Options:
set_preview_method, set_db_mode, set_component_policy, set_update_policy, set_channel, reset_queue, set_network_mode, set_security_level.string
action:“configure_manager” — value for the chosen
manager_setting (omit only for reset_queue). Allowed values per setting — set_preview_method: auto | latent2rgb | taesd | none; set_db_mode: local | cache | remote; set_component_policy: workflow | higher | mine; set_update_policy: stable-comfyui | nightly-comfyui; set_channel: a channel name (e.g. default); set_network_mode: public | private | offline; set_security_level: strong | normal | normal- | weak. HTTP-API settings take effect live; the config.ini ones (set_network_mode, set_security_level) apply only after a ComfyUI restart.Examples
You say: Tell me about my setup — useful when I’m reporting a bug.apply_manifest
Apply a ComfyUI setup manifest from an inline object or .json/.yaml/.yml file. Composes custom-node installs and model downloads, installs pip packages, and reports apt entries as skipped (system packages need manual/root installation). LOCAL ComfyUI (COMFYUI_PATH set): nodes/models land on the local filesystem and pip installs into the ComfyUI Python env. REMOTE ComfyUI: custom_nodes and models are routed through the ComfyUI-Manager HTTP API (handled on the host), while pip and apt entries are reported as skipped (no remote equivalent). Each item reports applied/skipped/failed independently.Parameters
object
Inline manifest object. Provide exactly one of
manifest or path.string
Path to a .json, .yaml, or .yml manifest file. Provide exactly one of
manifest or path.Example
No worked example yet — the call below is a skeleton generated from the required parameters. Real examples live in
scripts/tool-doc-examples.ts; contributions welcome.workspace
Inspect and manage ComfyUI workspaces (local installs). Driven by theaction parameter:
- action:“get” — Report the active ComfyUI workspace (mirrors
comfy-cli which): the local installation path being used (from COMFYUI_PATH or auto-detection), the source of that path, any persisted default workspace, and the resolved API target the MCP server talks to. - action:“set_default” — Persist a default ComfyUI workspace path to the MCP config file (mirrors
comfy-cli set-default). The value is stored under the OS config dir (e.g. ~/.config/comfyui-mcp/workspace.json) and reported by action:“get”/action:“list”. Does NOT change the live API target.pathis REQUIRED, e.g. {action:“set_default”, path:“/opt/ComfyUI”}. - action:“list” — List known/auto-detected ComfyUI installations on this machine. Scans common install locations across macOS, Linux, and Windows and marks which one is active and which is the saved default.
Parameters
enum
required
Which workspace operation to perform. “get” and “list” take no other parameters; “set_default” requires
path.
Options: action:"get", action:"set_default", action:"list".string
action:“set_default” — REQUIRED absolute path to a ComfyUI installation directory to remember as the default workspace.
Examples
You say: Which ComfyUI am I actually using?report_issue
File or triage a GitHub issue for a bug/problem you hit (ComfyUI, a workflow, a model, custom nodes, or comfyui-mcp/its panel). For OUR repos (artokun/comfyui-mcp, artokun/comfyui-mcp-panel) it sends the report to the AI triage worker, which searches existing OPEN and CLOSED issues, version-matches, and either files a new issue, adds context to an existing one, or — if the problem was already FIXED in a newer version than the user runs — answers with the fixing PR + fixed-in version and a recommendation to upgrade (no new issue). It returns that triage result plus an instant check of whether the user is on the latest versions. TIMING: this call BLOCKS while the triage runs — typically a few minutes — and that wait is normal, not a hang. It always returns eventually (every request is time-capped and the poll budget is bounded); on a failing network the caps make that wait longer, but never indefinite. Do not abort a slow call just to retry it: once the worker has accepted the report it keeps triaging on its own — filing, deduping into an existing issue, advising an upgrade, or (rarely) reporting that it could not file — so a blind retry can double-file. If triage outlasts the polling budget the call still returns, with pending:true (and a job_id when the worker gave one — an accepted submit whose acknowledgement was unreadable returns pending without it). If the worker is unreachable it falls back to a prefilled GitHub ‘new issue’ URL. For third-party repos it returns a prefilled URL to SHARE (it does not auto-file). ALWAYS pass mcp_version and panel_version from the known environment (the env line in your context, e.g. ‘mcp=… panel=…’) so the worker can tell the user if simply upgrading fixes it — the single most common resolution. Surface the worker’s agent_message / upgrade advice to the user.Parameters
string
required
Short, specific issue title.
string
required
Issue body: what happened, steps to reproduce, the exact error text, and environment (GPU/VRAM, ComfyUI version, ComfyUI FRONTEND version, OS) if known. The FRONTEND version is a SEPARATE package from ComfyUI and they move independently — get_system_stats (action:“health”) prints both, and for any panel/UI bug it is often the deciding variable. Scrub secrets first.
string
owner/repo (default ‘artokun/comfyui-mcp’; use ‘artokun/comfyui-mcp-panel’ for the sidebar panel).
string[]
Optional GitHub label names to prefill.
string
The running comfyui-mcp version (from the env line in your context). Auto-detected if omitted.
string
The running comfyui-mcp-panel (sidebar) version, from the env line in your context, if known.
boolean
Force the prefilled-URL path even for our repos (skip the Worker). Rarely needed.