Skip to main content
Glama

save_workflow

Save workflows to ComfyUI's user library, capture a provenance lock for exact reproducibility, and verify it against the local install to detect drift.

Instructions

WRITE to the ComfyUI user library: persist a workflow, or capture/verify its provenance lock. This is the only tool here that writes — reading is get_workflow. Driven by the action parameter:

  • action:"save" — Save a workflow JSON to the connected ComfyUI server's user library so it appears in the ComfyUI web UI. Requires a running ComfyUI server; this writes to that server's userdata and OVERWRITES any existing file with the same filename without confirmation. Web-UI-format JSON ({ nodes: [], links: [] }) is saved as-is and is the preferred input — when re-saving an existing workflow, load it with get_workflow (action:"get", format='ui') and modify THAT. API-format graphs ({ '1': { class_type, inputs } }) are AUTO-CONVERTED to Web UI format with a generated layout so the saved file always opens in the ComfyUI canvas (the canvas cannot open raw API format). Returns a confirmation message (noting the conversion and any warnings), or the HTTP status and error text on failure.

  • action:"lock" — Capture a provenance lock for a saved workflow so it can be exactly reproduced later. Walks the workflow's model loaders (CheckpointLoaderSimple, UNETLoader, VAELoader, LoraLoader, ControlNetLoader, etc.), SHA-256s every referenced model file, records the git commit currently checked out for every custom node pack the workflow's class_types come from, and captures ComfyUI's reported version. WRITES <filename>.lock.json next to the workflow in ComfyUI's user library. Requires a local install (COMFYUI_PATH) — SHA-256 needs raw file bytes and pack commits come from custom_nodes/*/.git/HEAD. Pair with action:"verify_lock" later to detect drift.

  • action:"verify_lock" — Compare a saved workflow's lock file against the current state of the local install and report drift. Loads <filename>.lock.json, re-computes a current lock from the same workflow, and diffs: which models have a different SHA-256, which custom node packs are on a different commit, whether ComfyUI's version changed. Use before re-running an important workflow days or weeks later to confirm it'll behave the same. Requires a local install (COMFYUI_PATH). Read-only; returns a structured drift report (empty arrays everywhere mean perfect parity).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
actionYesWhich write/provenance operation to perform. All three require `filename`; "save" also requires `workflow`.
filenameNoWorkflow filename in the ComfyUI user library (e.g. 'my_workflow.json'). REQUIRED for every action. For action:"save" this OVERWRITES an existing file of the same name; for "lock"/"verify_lock" the lock is read/written as '<filename>.lock.json' alongside it.
workflowNoaction:"save" (REQUIRED) — Workflow JSON to save. Web UI format ({ nodes: [], links: [] }) is stored verbatim; API format ({ '1': { class_type, inputs } }) is auto-converted to Web UI format (generated layout) so it stays openable in ComfyUI's canvas. Not validated against the server before saving.
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—and it delivers. It discloses critical side effects: 'writes to that server's userdata and OVERWRITES any existing file with the same filename without confirmation.' It reveals requirements (running ComfyUI server for save, local install/COMFYUI_PATH for lock), the auto-conversion behavior for API-format graphs, and return behavior for both success and failure. It even flags that verify_lock is 'Read-only' within a tool that otherwise writes, which is important nuance.

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 structured into a clear lead sentence and three distinct action bullets, each with necessary caveats and requirements. It is not verbose for its complexity—every sentence adds behavioral or usage information. While it could theoretically be tightened, the organization and front-loaded purpose justify the length, earning a 4 rather than 5 only because it demands close reading.

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 (three modes, no annotations, no output schema), the description is exceptionally complete. It covers prerequisites (server/local install), side effects (overwrite behavior), return values (confirmation/error for save, structured drift report for verify_lock), and usage context. It also references sibling tools and pairings (verify_lock complements lock), ensuring the agent has everything needed to use 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?

Although the schema already has 100% parameter description coverage, the tool description adds substantial additional meaning. For example, it explains the three action enum values in depth, clarifies that filename always requires '<filename>.lock.json' for lock operations, and details the workflow parameter's auto-conversion between Web UI and API formats and the fact that it is not validated before saving. These details go well beyond the schema and are essential for correct invocation.

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 an explicit, specific verb+resource: 'WRITE to the ComfyUI user library: persist a workflow, or capture/verify its provenance lock.' It goes on to enumerate three distinct actions (save, lock, verify_lock), and explicitly distinguishes the tool from siblings by noting 'This is the only tool here that writes — reading is get_workflow.' This leaves no ambiguity about the tool's purpose or its relationship to similar 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?

The description provides strong usage guidance: it explicitly says this is the only write tool and identifies get_workflow as the read alternative. It also gives specific workflow advice ('when re-saving an existing workflow, load it with get_workflow (action:'get', format='ui') and modify THAT') and notes when verify_lock should be used ('before re-running an important workflow days or weeks later'). Each action includes its context and prerequisites, making it easy to decide when to use the tool.

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

Install Server

Other Tools

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/artokun/comfyui-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server