comfyui-mcp 0.49.0 → 0.49.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -10
- package/dist/comfyui/cloud-client.js +2 -2
- package/dist/comfyui/cloud-client.js.map +1 -1
- package/dist/orchestrator/call-tool-admission.js +160 -0
- package/dist/orchestrator/call-tool-admission.js.map +1 -0
- package/dist/orchestrator/index.js +169 -137
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/orchestrator/panel-tools.js +545 -75
- package/dist/orchestrator/panel-tools.js.map +1 -1
- package/dist/orchestrator/session-store.js +22 -0
- package/dist/orchestrator/session-store.js.map +1 -1
- package/dist/services/civitai-resolver.js +22 -7
- package/dist/services/civitai-resolver.js.map +1 -1
- package/dist/services/comfy-cli.js +1 -1
- package/dist/services/download-jobs.js +1 -1
- package/dist/services/extra-paths.js +7 -7
- package/dist/services/extra-paths.js.map +1 -1
- package/dist/services/graph-query.js +10 -4
- package/dist/services/graph-query.js.map +1 -1
- package/dist/services/manager-config.js +11 -2
- package/dist/services/manager-config.js.map +1 -1
- package/dist/services/model-resolver.js +4 -4
- package/dist/services/model-resolver.js.map +1 -1
- package/dist/services/node-authoring.js +3 -3
- package/dist/services/node-authoring.js.map +1 -1
- package/dist/services/node-dev.js +3 -3
- package/dist/services/node-dev.js.map +1 -1
- package/dist/services/node-management.js +185 -9
- package/dist/services/node-management.js.map +1 -1
- package/dist/services/node-snapshots.js +117 -12
- package/dist/services/node-snapshots.js.map +1 -1
- package/dist/services/node-verify.js +1 -1
- package/dist/services/node-verify.js.map +1 -1
- package/dist/services/output-dir.js +1 -1
- package/dist/services/output-dir.js.map +1 -1
- package/dist/services/panel-installer.js +466 -6
- package/dist/services/panel-installer.js.map +1 -1
- package/dist/services/panel-pending-cancel.js +446 -0
- package/dist/services/panel-pending-cancel.js.map +1 -0
- package/dist/services/panel-pin-guard.js +50 -3
- package/dist/services/panel-pin-guard.js.map +1 -1
- package/dist/services/panel-sync.js +3 -20
- package/dist/services/panel-sync.js.map +1 -1
- package/dist/services/process-control.js +37 -8
- package/dist/services/process-control.js.map +1 -1
- package/dist/services/queue-manager.js +1 -1
- package/dist/services/queue-manager.js.map +1 -1
- package/dist/services/queue-monitor.js +1 -1
- package/dist/services/queue-monitor.js.map +1 -1
- package/dist/services/queue-monitor.self-attribution.test.js +1 -1
- package/dist/services/queue-monitor.self-attribution.test.js.map +1 -1
- package/dist/services/ui-bridge.js +180 -17
- package/dist/services/ui-bridge.js.map +1 -1
- package/dist/services/update-comfyui.js +29 -2
- package/dist/services/update-comfyui.js.map +1 -1
- package/dist/services/workspace-env.js +3 -3
- package/dist/services/workspace-env.js.map +1 -1
- package/dist/tools/api-nodes.js +1 -1
- package/dist/tools/api-nodes.js.map +1 -1
- package/dist/tools/batches.js +1 -1
- package/dist/tools/batches.js.map +1 -1
- package/dist/tools/compact.js +32 -6
- package/dist/tools/compact.js.map +1 -1
- package/dist/tools/extra-paths.js +1 -1
- package/dist/tools/extra-paths.js.map +1 -1
- package/dist/tools/generate-3d.js +2 -2
- package/dist/tools/generate-3d.js.map +1 -1
- package/dist/tools/install-panel.js +62 -22
- package/dist/tools/install-panel.js.map +1 -1
- package/dist/tools/model-explorer.js +175 -117
- package/dist/tools/model-explorer.js.map +1 -1
- package/dist/tools/queue-management.js +117 -135
- package/dist/tools/queue-management.js.map +1 -1
- package/dist/tools/run-template.js +4 -4
- package/dist/tools/run-template.js.map +1 -1
- package/dist/tools/vocabulary.js +123 -19
- package/dist/tools/vocabulary.js.map +1 -1
- package/dist/tools/workflow-autoload.js +5 -5
- package/dist/tools/workflow-autoload.js.map +1 -1
- package/dist/tools/workflow-execute.js +1 -1
- package/dist/tools/workflow-execute.js.map +1 -1
- package/dist/tools/workspace-env.js +53 -28
- package/dist/tools/workspace-env.js.map +1 -1
- package/docs/design/panel-surface.txt +1 -0
- package/docs/design/tool-surface.txt +3 -0
- package/package.json +1 -1
- package/plugin/commands/batch.md +1 -1
- package/plugin/commands/gen.md +2 -2
- package/plugin/scripts/monitor-progress.mjs +1 -1
- package/plugin/skills/comfyui-core/SKILL.md +15 -13
- package/plugin/skills/director/SKILL.md +1 -1
- package/plugin/skills/ltxv2-video/SKILL.md +1 -1
- package/plugin/skills/troubleshooting/SKILL.md +1 -1
- package/plugin/skills/video-extend/SKILL.md +1 -1
- package/plugin/skills/workflow-layout/SKILL.md +4 -5
- package/scripts/arena-scenarios.mjs +5 -5
- package/scripts/check-tool-vocabulary.mts +9 -0
- package/scripts/gen-tool-docs.ts +31 -10
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ Works on **macOS**, **Linux**, and **Windows**. Auto-detects your ComfyUI instal
|
|
|
16
16
|
|
|
17
17
|
**Stuck or have a question? [Join the Discord](https://discord.gg/cW9arBhzCu)** — help, model tips, and release announcements.
|
|
18
18
|
|
|
19
|
-
**
|
|
19
|
+
**151 MCP tools** | **37 AI skills** (Flux · WAN · LTX 2.3 video · Qwen · Z-Image · Ideogram 4 · ERNIE · ANIMA · model registry · Civitai · node authoring · launch/perf flags) | **55 installer packs** | **11 slash commands** | **4 autonomous agents** | **3 hooks**
|
|
20
20
|
|
|
21
21
|
The plugin ships **expert skills that grow with every release** — model-specific generation guides with curated download URLs, workflow recipes, troubleshooting, and custom-node authoring — so Claude knows the right sampler, CFG, resolution, and model files for each architecture without trial and error.
|
|
22
22
|
|
|
@@ -154,7 +154,7 @@ This package also ships as a **Claude Code plugin**, providing slash commands, s
|
|
|
154
154
|
|
|
155
155
|
| Script | Description |
|
|
156
156
|
|--------|-------------|
|
|
157
|
-
| `monitor-progress.mjs` | **Progress monitor** — connects to ComfyUI's WebSocket for real-time step progress (e.g., `step 5/14 (36%)`). Run as a background Bash task after enqueuing workflows. Reports completion with output filenames, errors with node details. Replaces polling `
|
|
157
|
+
| `monitor-progress.mjs` | **Progress monitor** — connects to ComfyUI's WebSocket for real-time step progress (e.g., `step 5/14 (36%)`). Run as a background Bash task after enqueuing workflows. Reports completion with output filenames, errors with node details. Replaces polling `queue` (action:"status") in a loop. |
|
|
158
158
|
|
|
159
159
|
---
|
|
160
160
|
|
|
@@ -248,7 +248,7 @@ for the port, the capability matrix, and the per-provider "clink" points, and th
|
|
|
248
248
|
|
|
249
249
|
## MCP Tools
|
|
250
250
|
|
|
251
|
-
|
|
251
|
+
151 tools across workflow execution, generation, iteration, composition, models, and more:
|
|
252
252
|
|
|
253
253
|
### Image Generation (high-level)
|
|
254
254
|
|
|
@@ -286,12 +286,7 @@ for the port, the capability matrix, and the per-provider "clink" points, and th
|
|
|
286
286
|
| Tool | Description |
|
|
287
287
|
|------|-------------|
|
|
288
288
|
| `enqueue_workflow` | Submit a workflow (API format JSON) — returns `prompt_id` immediately, non-blocking |
|
|
289
|
-
| `
|
|
290
|
-
| `get_queue` | View the current execution queue (running + pending) |
|
|
291
|
-
| `get_queued_workflow` | Inspect the full workflow payload for one pending queue item |
|
|
292
|
-
| `move_queued_job` | Move a pending job to the front/back by requeueing it with a new prompt ID |
|
|
293
|
-
| `edit_queued_job` | Patch or replace a pending queued workflow and requeue it with a new prompt ID |
|
|
294
|
-
| `cancel_job` | Interrupt the currently running job — escalates (interrupt → verify → `/free`) and reports WEDGED if it won't die; `clear_pending: true` also drops all pending jobs in the same call |
|
|
289
|
+
| `queue` | One action-parameterized tool for the execution queue: `list` (running + pending), `status` (one job by prompt ID), `get_workflow` (a pending job's full payload), `move`/`edit` (requeue a pending job front/back, patched or replaced, with a new prompt ID), `cancel` (interrupt the running job — escalates interrupt → verify → `/free`, reports WEDGED if it won't die; `clear_pending: true` also drops all pending), `cancel_queued`, `clear` |
|
|
295
290
|
| `get_system_stats` | Get system info — GPU, VRAM, Python version, OS |
|
|
296
291
|
|
|
297
292
|
### Workflow Visualization
|
|
@@ -621,7 +616,7 @@ npx -y comfyui-mcp@latest --comfyui-url http://localhost:8188 --force-remote
|
|
|
621
616
|
| `COMFYUI_STARTUP_CHECK_INTERVAL_S` / `…_MAX_TRIES` | `1` / `20` | Readiness-probe interval + max tries when starting a local ComfyUI |
|
|
622
617
|
| `COMFYUI_ALWAYS_RESTART` | `false` | Auto-restart a crashed local ComfyUI (bounded by `COMFYUI_RESTART_MAX_ATTEMPTS` / `COMFYUI_RESTART_WINDOW_S`) |
|
|
623
618
|
| `COMFYUI_MCP_STALL_S` | `180` | Render-wedge watchdog: seconds a sampler step can re-emit the same progress before a STALL/BACKLOG note is prepended to the agent's next turn (clamped 15–3600s; live-tunable from the panel) |
|
|
624
|
-
| `COMFYUI_MCP_INTERRUPT_S` | `30` | Seconds `
|
|
619
|
+
| `COMFYUI_MCP_INTERRUPT_S` | `30` | Seconds `queue` (action:"cancel") waits for an interrupt to actually stop a job before escalating to `/free` and reporting it wedged |
|
|
625
620
|
| `LOG_LEVEL` | `info` | Logging verbosity: `debug`, `info`, `warn`, `error` |
|
|
626
621
|
|
|
627
622
|
### Transports
|
|
@@ -112,10 +112,10 @@ export async function interrupt(promptId) {
|
|
|
112
112
|
logger.info("Cloud: job cancelled", { prompt_id: promptId });
|
|
113
113
|
}
|
|
114
114
|
export async function deleteQueueItem(_id) {
|
|
115
|
-
throw new ComfyUIError("delete_queue_item is not supported in Comfy Cloud mode. Use
|
|
115
|
+
throw new ComfyUIError("delete_queue_item is not supported in Comfy Cloud mode. Use queue (action:\"cancel\") with a prompt_id.", "CLOUD_UNSUPPORTED");
|
|
116
116
|
}
|
|
117
117
|
export async function clearQueue() {
|
|
118
|
-
throw new ComfyUIError("
|
|
118
|
+
throw new ComfyUIError("queue (action:\"clear\") is not supported in Comfy Cloud mode.", "CLOUD_UNSUPPORTED");
|
|
119
119
|
}
|
|
120
120
|
export async function getJobStatus(promptId) {
|
|
121
121
|
const res = await cloudFetch(`/api/job/${promptId}/status`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-client.js","sourceRoot":"","sources":["../../src/comfyui/cloud-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cloud-client.js","sourceRoot":"","sources":["../../src/comfyui/cloud-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admission for the orchestrator's direct tool channel (call_tool frames from a
|
|
3
|
+
* mobile/canvas-less client). Extracted from src/orchestrator/index.ts so the
|
|
4
|
+
* decision is a pure, unit-testable function — the dispatcher is a one-line
|
|
5
|
+
* call site.
|
|
6
|
+
*/
|
|
7
|
+
/** The direct tool channel: a mobile client can invoke these READ/DOWNLOAD backend
|
|
8
|
+
* tools without an agent turn (structured nav data + rig downloads). The
|
|
9
|
+
* bridge is already token-gated; this whitelist keeps call_tool to non-destructive
|
|
10
|
+
* tools (no restart/remove/clear/install). */
|
|
11
|
+
const CALL_TOOL_WHITELIST = new Set([
|
|
12
|
+
"list_workflows",
|
|
13
|
+
"get_workflow",
|
|
14
|
+
"analyze_workflow",
|
|
15
|
+
"query_workflow",
|
|
16
|
+
"workflow_from_image",
|
|
17
|
+
"list_output_images",
|
|
18
|
+
"get_image",
|
|
19
|
+
"list_local_models",
|
|
20
|
+
// Read-only CivitAI lookups (creator-search feature): let a client browse
|
|
21
|
+
// models/creators through the rig without an agent turn.
|
|
22
|
+
"search_civitai_models",
|
|
23
|
+
"search_civitai_creators",
|
|
24
|
+
"download_civitai_model",
|
|
25
|
+
"download_model",
|
|
26
|
+
"enqueue_workflow",
|
|
27
|
+
// Persist a workflow to the ComfyUI library (mobile "pull workflow from a
|
|
28
|
+
// CivitAI example" → save_workflow). Writes a workflow file (auto-converts
|
|
29
|
+
// API-format graphs to canvas-openable UI format); overwrites same-filename,
|
|
30
|
+
// so the client generates a unique name. No model/system mutation.
|
|
31
|
+
"save_workflow",
|
|
32
|
+
// One-tap cancel of the RUNNING render (the mobile queue monitor's stop
|
|
33
|
+
// button). User-initiated and narrowly scoped: the client passes the
|
|
34
|
+
// prompt_id it saw in `queue_status`, and action:"cancel" only interrupts
|
|
35
|
+
// when the running job still matches — it can never kill a job that started
|
|
36
|
+
// after the tap, and (without clear_pending, which the mobile client never
|
|
37
|
+
// sends) it never touches other pending jobs in a shared queue. 0.49.0
|
|
38
|
+
// slice 4 folded the eight queue/jobs tools into this one name, so admission
|
|
39
|
+
// is ACTION-scoped below to exactly what its retired single-purpose
|
|
40
|
+
// predecessor entry covered — see CALL_TOOL_ACTION_WHITELIST.
|
|
41
|
+
"queue",
|
|
42
|
+
// "Why did my render fail?" for canvas-less clients. The panel answers this from
|
|
43
|
+
// live canvas state (panel_get_errors); a phone has no canvas, so it reads
|
|
44
|
+
// the same story server-side from history + re-validating the graph that ran.
|
|
45
|
+
// Read-only.
|
|
46
|
+
"diagnose_run",
|
|
47
|
+
// Read-only training surface: flow/model discovery + progress polling +
|
|
48
|
+
// docker/GPU/image preflight for the panel/mobile Training tab, and the
|
|
49
|
+
// dataset/job-config/file readers behind its Jobs/Datasets views.
|
|
50
|
+
"train_list_flows",
|
|
51
|
+
"train_status",
|
|
52
|
+
"train_doctor",
|
|
53
|
+
"train_list_datasets",
|
|
54
|
+
"train_dataset_detail",
|
|
55
|
+
"train_job_config",
|
|
56
|
+
"train_file",
|
|
57
|
+
"train_preview_config",
|
|
58
|
+
"train_dataset_update",
|
|
59
|
+
"train_dataset_delete",
|
|
60
|
+
"train_caption_image",
|
|
61
|
+
"train_caption_dataset",
|
|
62
|
+
"train_delete_job",
|
|
63
|
+
// User-initiated training ops (panel/mobile Training wizard): stage a dataset,
|
|
64
|
+
// launch a GPU-container training run, cancel one. All validation lives in the
|
|
65
|
+
// tools themselves (dataset checks, docker/image preflight, liveness-verified
|
|
66
|
+
// cancel); the whitelist only gates reachability.
|
|
67
|
+
"train_prepare_dataset",
|
|
68
|
+
"train_start",
|
|
69
|
+
"train_cancel",
|
|
70
|
+
// RunPod control panel (desktop + mobile): the one-tap pod lifecycle + the
|
|
71
|
+
// local⇄pod host switch. Read-only status/list/troubleshoot, the COST-SAVING
|
|
72
|
+
// actions (stop/use_local), connect (retarget only — a pod must already be
|
|
73
|
+
// RUNNING, so it neither spins nor keeps one billing), watch/unwatch, and the
|
|
74
|
+
// referral deploy link. Each tool validates its own pod state; the whitelist
|
|
75
|
+
// only gates reachability from a canvas-less client.
|
|
76
|
+
// NOTE: runpod_pod_create AND runpod_pod_start are deliberately EXCLUDED
|
|
77
|
+
// (#269/#278) — both put a pod into a BILLING state (create deploys; start
|
|
78
|
+
// RESUMES billing on a stopped pod). A confirmation-less mirrored/foreign tab
|
|
79
|
+
// must not be able to spend money, so both go through an agent turn / explicit
|
|
80
|
+
// UI action. stop is kept (it SAVES money).
|
|
81
|
+
"runpod_pod_status",
|
|
82
|
+
"runpod_list_pods",
|
|
83
|
+
"runpod_pod_stop",
|
|
84
|
+
"runpod_pod_connect",
|
|
85
|
+
"runpod_pod_troubleshoot",
|
|
86
|
+
"runpod_use_local",
|
|
87
|
+
"runpod_watch",
|
|
88
|
+
"runpod_unwatch",
|
|
89
|
+
"runpod_deploy_link",
|
|
90
|
+
// Micro-Apps (panel "Apps" feature): the canvas-less client's list/run/poll
|
|
91
|
+
// surface, plus registry install. One tool since 0.49.0 slice 2, so the
|
|
92
|
+
// whitelist can no longer distinguish the actions — the risk posture is judged
|
|
93
|
+
// over the whole tool. Run queues a job the user explicitly tapped (same as
|
|
94
|
+
// enqueue_workflow, already whitelisted); list/get/run_status are read-only;
|
|
95
|
+
// import (mobile Explore) has the rig fetch a bundle from the public registry
|
|
96
|
+
// and write it locally, the same risk as save_workflow + download_model
|
|
97
|
+
// (already whitelisted) — no model/system mutation, and deps install stays a
|
|
98
|
+
// separate consented action.
|
|
99
|
+
"apps",
|
|
100
|
+
// App dependency side-panel (Explore/detail): the ✓/download panel reads what
|
|
101
|
+
// an app needs vs what's installed and offers per-item fetches. Reads are safe
|
|
102
|
+
// (missing-model detection + candidate resolution, node-pack presence); model
|
|
103
|
+
// downloads reuse the already-whitelisted download_civitai_model/download_model.
|
|
104
|
+
// install_custom_node is a MUTATION that runs the pack's code on install —
|
|
105
|
+
// reachable for the panel's "install missing node" button, gated behind an
|
|
106
|
+
// explicit themed confirm client-side. (Revisit if a canvas-less/foreign tab
|
|
107
|
+
// must not be able to trigger a node install.)
|
|
108
|
+
"resolve_missing_models",
|
|
109
|
+
"extract_workflow_dependencies",
|
|
110
|
+
"list_installed_nodes",
|
|
111
|
+
"install_custom_node",
|
|
112
|
+
]);
|
|
113
|
+
/**
|
|
114
|
+
* ACTION-scoped admission, layered on top of the name whitelist.
|
|
115
|
+
*
|
|
116
|
+
* The whitelist predates the 0.49.0 consolidation, which folds tool FAMILIES
|
|
117
|
+
* into single action-parameterized names — and the call_tool dispatcher
|
|
118
|
+
* authorizes by tool NAME only, then forwards arbitrary action arguments.
|
|
119
|
+
* Whitelisting a consolidated name would therefore silently admit EVERY action
|
|
120
|
+
* the family folds, including ones the retired per-tool entry never covered. A
|
|
121
|
+
* tool listed here is admitted only when args.action names one of these
|
|
122
|
+
* actions; a tool NOT listed here keeps plain name-level admission (its
|
|
123
|
+
* whitelist entry was already judged over the whole tool).
|
|
124
|
+
*
|
|
125
|
+
* Wired ONLY where a slice's whitelist swap would otherwise broaden admission.
|
|
126
|
+
*/
|
|
127
|
+
const CALL_TOOL_ACTION_WHITELIST = new Map([
|
|
128
|
+
// The `queue` entry above replaces the retired standalone cancel entry
|
|
129
|
+
// (0.49.0 slice 4), which admitted CANCEL semantics only: interrupt the
|
|
130
|
+
// running job, optionally prompt_id-matched, optionally with clear_pending —
|
|
131
|
+
// and that is exactly action:"cancel", clear_pending included (its
|
|
132
|
+
// wipe-all-pending effect the old entry already admitted). Every other
|
|
133
|
+
// action stays refused, because none was reachable before:
|
|
134
|
+
// move/edit/cancel_queued mutate pending
|
|
135
|
+
// jobs the old entry couldn't touch individually; clear drops pending while
|
|
136
|
+
// SPARING the running job, a combination the old entry could not express;
|
|
137
|
+
// and list/status/get_workflow, though read-only, were never whitelisted.
|
|
138
|
+
["queue", new Set(["cancel"])],
|
|
139
|
+
]);
|
|
140
|
+
/**
|
|
141
|
+
* The admission decision for one call_tool frame: null when admitted,
|
|
142
|
+
* otherwise the refusal reason (pushed as the tool_result error and logged).
|
|
143
|
+
*
|
|
144
|
+
* The name-level refusal string is byte-identical to what the dispatcher
|
|
145
|
+
* produced before this extraction, so a client that was refused for a
|
|
146
|
+
* non-whitelisted tool sees no change.
|
|
147
|
+
*/
|
|
148
|
+
export function callToolAdmission(tool, args) {
|
|
149
|
+
if (!CALL_TOOL_WHITELIST.has(tool))
|
|
150
|
+
return `tool "${tool}" is not permitted`;
|
|
151
|
+
const actions = CALL_TOOL_ACTION_WHITELIST.get(tool);
|
|
152
|
+
if (actions !== undefined) {
|
|
153
|
+
const action = typeof args.action === "string" ? args.action : undefined;
|
|
154
|
+
if (action === undefined || !actions.has(action)) {
|
|
155
|
+
return `tool "${tool}" is not permitted for action "${action ?? "(missing)"}"`;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=call-tool-admission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-tool-admission.js","sourceRoot":"","sources":["../../src/orchestrator/call-tool-admission.ts"],"names":[],"mappings":"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"}
|