MCP now uses local_guard.is_local (one local check). A backup upload
request that is no upload answers 400 instead of 500. tests/test_local_guard.py.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The second batch of MCP tools: they change things, through the same code the UI uses.
- Canvas, done by the open ComfyUI page: describe_canvas, set_prompt, set_model,
add_lora, place_combo, check_workflow_models, fix_workflow_models, run_workflow,
open_in_anomalous. api/mcp_bridge.py sends the action over ComfyUI's websocket and
waits; web/modules/mcp_bridge.js claims it (visible tab first), does it with
Anomalous's canvas code and answers. Each change is one Ctrl+Z step, shows a toast and
is logged as the AI's (activity entries carry via: "mcp", with their undo).
- This server: scan_models (new / look up again / picked models, via /anomalous/scan_all),
list_voices and speak (Anomalous TTS through /prompt and /history).
- graph_splice.js takes the chain's slot types, so a LoRA can go into a model-only (UNet,
Flux) chain as LoraLoaderModelOnly; the default (MODEL and CLIP) is unchanged.
- Nothing deletes or renames files; acting tools are not marked read-only, so AI apps
ask before calling them.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An MCP endpoint (Streamable HTTP) inside ComfyUI's server, so Claude, Cursor, Cherry
Studio and other MCP apps can ask about the user's library without anything extra
installed and without memory or VRAM while nobody is connected.
- api/mcp_server.py: one JSON-RPC message per POST, answered with JSON. Serves the
2026-07-28 stateless protocol (headers must match the body) and the earlier
initialize-based versions; no sessions. This computer only: loopback peer, no proxy
headers, loopback Host and Origin (DNS rebinding).
- api/mcp_tools.py: 11 read-only tools: library overview, model search and details
(optional cover), scan status, output-image search and generation settings
(optional thumbnail), combos, workflow recipes, saved prompts, generated audio,
activity log. Ids resolve inside their roots; tool failures come back as isError.
- docs/guides/mcp.md: setup for each app, what can be asked, privacy note.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>