v0.9.0 — seven P1 fixes, and operator-set consent for clients that cannot prompt
Seven P1 defects found by two independent QA passes (Claude Code and Codex CLI). Both clients hitting the same failures is what established them as server-side rather than client quirks.
First release published to PyPI — pip install comfy-mcp.
Fixed
generate_imagewas dead. It shelled out tocomfy run-template default, butdefaulthad left the gallery, so every call failed. CI never caught it because the tests asserted the same dead constant. The on-ramp now runsimage_z_image_turbo; a template going missing in future yields an error naming templates that exist.search_templatesanswered the wrong rows.querywas a raw substring test —MiniMax Text to Videoreturned nothing whileMiniMax H3: Text to Videoexisted, andext to imagmatched 91 rows. Now a word-anchored phrase pass with an all-words fallback.- Consent gates blamed the user for refusals nobody made. Every non-accept answer collapsed into "the user declined", including clients that never showed a prompt. Gates still fail closed.
discovercould not be called at its own default — ~63 KB from the CLI, ~109 KB pretty-printed, over a typical 25,000-token cap.- Mis-paired workflow slots were relayed as fact.
set_workflow_slotwould have written into the wrong field while reporting success, withvalidate_workflowstill reporting valid. update_comfyuileaked a traceback on a detached HEAD — a normal state for a version-pinned install.- Emitted partner workflows carried no cost provenance, though the file is what gets handed to
run_workflow, where billing happens.
Added
COMFY_MCP_ASSUME_CONSENT— pre-authorize specific confirmation gates from the server's environment, for clients that cannot display a prompt. Set by whoever configures the server, in a file the model cannot edit. Spending is excluded by construction: no value, includingall, reaches the credit gates.
Changed — check before upgrading
discover()returns aschema_indexinstead of every schema body. Usecommand="<name>"for one, orschemas_only=Falsefor the full surface.generate_imageruns a different template and refusescheckpoint=on split-loader graphs, which are now the gallery norm.search_templatesmay returnmatch: "all-words", flagging a widened result.
Known issues — upstream in comfy-cli
Progress streaming delivers nothing (comfy jobs watch emits one envelope at the end), nodes(action="path") ignores from_type/max_depth while claiming "exact": true, and the slot mis-pairing above originates in comfy workflow slots — this release detects and refuses it but cannot repair the pairing.
Full notes in CHANGELOG.md.