Skip to main content
Glama

ComfyUI MCP Server

CI codecov PyPI version Python 3.10+ License: MIT

DSL-first workflow management for ComfyUI via Model Context Protocol (MCP)

A production-ready MCP server that enables AI agents to manage ComfyUI workflows using a human-readable Domain Specific Language (DSL). The core design philosophy is DSL-first: agents work entirely in DSL format, with JSON conversion happening transparently.

πŸš€ Quick Start

Installation

pip install comfy-mcp

Usage with Claude Code

  1. Create MCP configuration:

{
  "mcpServers": {
    "comfyui-workflows": {
      "command": "comfy-mcp",
      "args": [],
      "env": {}
    }
  }
}
  1. Start Claude Code with MCP:

claude --mcp-config mcp_config.json
  1. Use in conversation:

"Execute this workflow: [paste DSL]"
"List workflows in examples directory"
"Show ComfyUI queue status"

Related MCP server: ComfyUI MCP Server

✨ Features

πŸ”„ DSL-First Design

  • Agents work entirely in human-readable DSL

  • Automatic JSON ↔ DSL conversion

  • No need to think about format conversion

πŸ“ File Operations

  • read_workflow - Auto-converts JSON to DSL

  • write_workflow - Saves DSL as JSON/DSL

  • list_workflows - Discovers workflow files

  • validate_workflow - DSL syntax validation

  • get_workflow_info - Workflow analysis

⚑ Execution Operations

  • execute_workflow - Run DSL workflows on ComfyUI

  • get_job_status - Monitor execution & download images

  • list_comfyui_queue - View ComfyUI queue status

🎨 DSL Syntax Example

## Model Loading

checkpoint: CheckpointLoaderSimple
  ckpt_name: sd_xl_base_1.0.safetensors

## Text Conditioning

positive: CLIPTextEncode
  text: a beautiful landscape, detailed, photorealistic
  clip: @checkpoint.clip

negative: CLIPTextEncode
  text: blurry, low quality
  clip: @checkpoint.clip

## Generation

latent: EmptyLatentImage
  width: 1024
  height: 1024

sampler: KSampler
  model: @checkpoint.model
  positive: @positive.conditioning
  negative: @negative.conditioning
  latent_image: @latent.latent
  seed: 42
  steps: 20

## Output

decode: VAEDecode
  samples: @sampler.latent
  vae: @checkpoint.vae

save: SaveImage
  images: @decode.image
  filename_prefix: output

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   AI Agent      │────│  MCP Server  │────│  ComfyUI    β”‚
β”‚   (Claude)      β”‚    β”‚              β”‚    β”‚   Server    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚                       β”‚                  β”‚
         β”‚ DSL Workflows         β”‚ JSON API         β”‚
         β”‚                       β”‚                  β”‚
         β–Ό                       β–Ό                  β–Ό
   Natural Language ────► DSL Parser ────► JSON Converter

Key Components:

  • DSL Parser: Converts human-readable DSL to Abstract Syntax Tree

  • JSON Converter: Bidirectional conversion between DSL and ComfyUI JSON

  • MCP Server: Exposes tools via Model Context Protocol

  • Execution Engine: Integrates with ComfyUI API for workflow execution

πŸ“– Documentation

Core Classes

  • DSLParser: Parse DSL text into Abstract Syntax Tree

  • DslToJsonConverter: Convert DSL AST to ComfyUI JSON

  • JsonToDslConverter: Convert ComfyUI JSON to DSL AST

MCP Tools

Tool

Description

Example

read_workflow

Read and convert workflows to DSL

read_workflow("workflow.json")

write_workflow

Write DSL to disk as JSON/DSL

write_workflow("output.json", dsl)

list_workflows

Find workflow files

list_workflows("./workflows")

validate_workflow

Check DSL syntax

validate_workflow(dsl_content)

get_workflow_info

Analyze structure

get_workflow_info(dsl_content)

execute_workflow

Run on ComfyUI

execute_workflow(dsl_content)

get_job_status

Monitor execution

get_job_status(prompt_id)

list_comfyui_queue

View queue

list_comfyui_queue()

πŸ› οΈ Development

Setup

git clone https://github.com/christian-byrne/comfy-mcp.git
cd comfy-mcp
pip install -e ".[dev]"
pre-commit install

Testing

# Run all tests
pytest

# Run with coverage
pytest --cov=comfy_mcp --cov-report=html

# Run specific test types
pytest -m unit
pytest -m integration
pytest -m "not slow"

Code Quality

# Format code
black .

# Lint code  
ruff check .

# Type checking
mypy comfy_mcp

Documentation

cd docs
make html

πŸ”§ Configuration

Environment Variables

  • COMFYUI_SERVER: ComfyUI server address (default: 127.0.0.1:8188)

  • MCP_DEBUG: Enable debug logging

  • MCP_LOG_LEVEL: Set log level (DEBUG, INFO, WARNING, ERROR)

ComfyUI Setup

  1. Install ComfyUI

  2. Start server: python main.py --listen 0.0.0.0

  3. Ensure models are installed in models/checkpoints/

🀝 Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines.

Development Workflow

  1. Fork the repository

  2. Create a feature branch: git checkout -b feature-name

  3. Make changes and add tests

  4. Run tests and linting: pytest && black . && ruff check .

  5. Submit a pull request

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

  • ComfyUI - Amazing stable diffusion GUI

  • FastMCP - Excellent MCP framework

  • Anthropic - Model Context Protocol specification

πŸ“ˆ Roadmap

  • v0.2.0: Enhanced DSL features (templates, macros)

  • v0.3.0: Web UI for workflow management

  • v0.4.0: Git integration for workflow versioning

  • v0.5.0: ComfyUI node discovery and documentation

  • v1.0.0: Production deployment features


Built with ❀️ for the ComfyUI and AI automation community

Available Tools

16 tools
execute_workflowA

Execute a DSL workflow on ComfyUI server.

Converts DSL to JSON and submits to ComfyUI for execution. Can optionally wait for completion and return results.

Args: dsl: Workflow content in DSL format server_address: ComfyUI server address (default: 127.0.0.1:8188) wait_for_completion: Whether to wait for execution to complete timeout_seconds: Maximum time to wait for completion

Returns: Execution result with prompt_id, status, and outputs if completed

Examples: execute_workflow(dsl_content) execute_workflow(dsl_content, server_address="192.168.1.100:8188") execute_workflow(dsl_content, wait_for_completion=False)

ParametersJSON Schema
NameRequiredDescriptionDefault
dslYes
server_addressNo127.0.0.1:8188
wait_for_completionNo
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: conversion of DSL to JSON, submission to ComfyUI, optional waiting for completion, and timeout handling. However, it lacks details on error handling, rate limits, authentication needs, or what happens if the server is unreachable, leaving gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the core purpose, followed by clear sections for Args, Returns, and Examples. Every sentence adds value without redundancy, and the examples efficiently illustrate common usage patterns.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (execution with 4 parameters), no annotations, and an output schema present (which handles return values), the description is largely complete. It covers purpose, parameters, and basic behavior, but could improve by addressing error cases or prerequisites, though the output schema reduces the need for return value details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for all 4 parameters: 'dsl' as workflow content in DSL format, 'server_address' with default and purpose, 'wait_for_completion' as a boolean flag, and 'timeout_seconds' as maximum wait time. This effectively explains parameter roles beyond the bare schema.

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 clearly states the specific action ('Execute a DSL workflow on ComfyUI server') and distinguishes it from siblings like 'validate_workflow' or 'get_job_status' by emphasizing execution rather than validation or status checking. It specifies the resource (DSL workflow) and the target system (ComfyUI server).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context through examples and parameter defaults (e.g., local server address, waiting for completion), but does not explicitly state when to use this tool versus alternatives like 'get_job_status' for checking status or 'validate_workflow' for validation. It provides clear operational context but lacks explicit sibling differentiation.

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

generate_from_templateA

Generate a workflow from a template with custom parameters.

Creates a complete DSL workflow by substituting parameters into the template. Optionally saves to file.

Args: template_name: Name of the template to use parameters: Dictionary of parameter values to substitute save_path: Optional path to save the generated workflow

Returns: Generated DSL content and validation results

Examples: generate_from_template("text2img_basic", {"prompt": "sunset"}) generate_from_template("img2img", {"image_path": "input.png"}, "workflows/my_img2img.dsl")

ParametersJSON Schema
NameRequiredDescriptionDefault
template_nameYes
parametersNo
save_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses that it 'creates a complete DSL workflow' and 'optionally saves to file', indicating mutation behavior and file system interaction. However, it doesn't mention permissions needed, error conditions, rate limits, or what happens if save_path conflicts with existing files.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening sentence, organized Args and Returns sections, and practical examples. Every sentence adds valueβ€”no fluff or repetition. It's appropriately sized for a 3-parameter tool with complex functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters with 0% schema coverage and no annotations, the description does a good job explaining parameters and purpose. The presence of an output schema means it doesn't need to detail return values. However, for a mutation tool that interacts with file systems, more behavioral context (e.g., error handling, idempotency) would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides clear semantic explanations for all 3 parameters: template_name (name of template), parameters (dictionary for substitution), and save_path (optional save location). This adds significant value beyond the bare schema, though it doesn't detail parameter formats or constraints.

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 clearly states the specific action ('Generate a workflow from a template with custom parameters') and distinguishes it from siblings like get_template (which retrieves) or write_workflow (which writes raw content). It specifies the resource (workflow) and method (substituting parameters into template).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for creating workflows from templates, but doesn't explicitly state when to use this versus alternatives like write_workflow (for manual creation) or validate_template_parameters (for checking parameters first). It provides context through examples but lacks explicit 'when-not' guidance or named alternatives.

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

get_job_statusA

Get status and results of a ComfyUI job.

Checks execution status and optionally downloads generated images.

Args: prompt_id: The prompt ID returned by execute_workflow server_address: ComfyUI server address download_images: Whether to download generated images image_save_path: Directory to save images (relative to workflows/)

Returns: Job status with completion info and image paths if downloaded

Examples: get_job_status("12345-abcde-67890") get_job_status("12345-abcde-67890", download_images=True)

ParametersJSON Schema
NameRequiredDescriptionDefault
prompt_idYes
server_addressNo127.0.0.1:8188
download_imagesNo
image_save_pathNooutputs

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it's a read operation (no mutation implied), it can download images to a specific directory, and it returns status with image paths. However, it lacks details on error handling (e.g., invalid prompt_id), rate limits, authentication needs, or whether it modifies server state (e.g., by downloading).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded: the first sentence states the core purpose, followed by specific functionality. The Args/Returns/Examples sections are organized efficiently with no wasted sentences. Each part adds value, such as clarifying parameter relationships and providing usage examples.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters with 0% schema coverage and an output schema (implied by 'Returns'), the description is mostly complete. It explains all parameters and the return value ('Job status with completion info and image paths'). However, for a job status tool with no annotations, it could better cover edge cases (e.g., job failures, timeouts) or server interaction details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for all 4 parameters: 'prompt_id' is linked to 'execute_workflow', 'server_address' is implied as ComfyUI server, 'download_images' controls image retrieval, and 'image_save_path' specifies directory relative to 'workflows/'. This goes beyond schema types, though it doesn't detail formats (e.g., prompt_id structure).

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 clearly states the tool's purpose with specific verbs ('Get status and results', 'Checks execution status', 'download generated images') and identifies the resource ('ComfyUI job'). It distinguishes from siblings like 'execute_workflow' (which creates jobs) and 'list_comfyui_queue' (which lists queued jobs) by focusing on status retrieval for specific jobs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: after 'execute_workflow' returns a prompt_id, to check job completion and optionally download results. It mentions the sibling 'execute_workflow' as the source of prompt_id. However, it doesn't explicitly state when NOT to use it or compare with alternatives like 'list_comfyui_queue' for broader status checks.

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

get_templateA

Get detailed information about a specific template.

Retrieves complete template information including parameters, requirements, and DSL preview.

Args: template_name: Name of the template to retrieve

Returns: Template details with parameters and DSL preview

Examples: get_template("text2img_basic") get_template("controlnet_pose")

ParametersJSON Schema
NameRequiredDescriptionDefault
template_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It states the tool retrieves information (implying read-only) and lists what's included (parameters, requirements, DSL preview), but doesn't disclose behavioral aspects like error handling, authentication needs, rate limits, or response format details beyond the high-level 'Template details'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the core purpose, followed by sections for Args, Returns, and Examples. Every sentence earns its placeβ€”no fluff or repetitionβ€”making it easy to scan and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (single parameter, read operation) and the presence of an output schema (which handles return values), the description is largely complete. It covers purpose, parameter meaning, and examples, but could improve by addressing behavioral transparency gaps like error cases or usage guidelines vs. siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates well by explaining the single parameter 'template_name' as 'Name of the template to retrieve' and providing concrete examples. This adds meaningful context beyond the bare schema, though it doesn't detail constraints like format or length.

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 clearly states the specific action ('Get detailed information about a specific template') and resource ('template'), distinguishing it from siblings like list_templates (which lists multiple) or get_template_dsl (which focuses only on DSL). The verb 'retrieves' is precise and the scope is well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when detailed template info is needed, but doesn't explicitly state when to use this vs. alternatives like list_templates (for overview) or get_template_dsl (for DSL only). No exclusions or prerequisites are mentioned, leaving some ambiguity in tool selection.

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

get_template_dslA

Get DSL content for any template (custom or official).

Retrieves the DSL representation of a template, which can then be modified or executed directly.

Args: template_name: Name of the template source: Template source ("custom", "official", or "auto")

Returns: Template DSL content and metadata

Examples: get_template_dsl("text2img_basic") get_template_dsl("openai_dalle_3_text_to_image", "official")

ParametersJSON Schema
NameRequiredDescriptionDefault
template_nameYes
sourceNoauto

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool retrieves DSL content and metadata, which is useful behavioral context. However, it doesn't mention potential limitations like rate limits, authentication needs, error conditions, or whether the operation is idempotent. For a read operation with no annotations, this is adequate but leaves gaps in behavioral understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by clear sections for Args, Returns, and Examples. Each sentence earns its place: the first states what it does, the second explains the use case, and the structured sections provide actionable details without redundancy. It's efficiently sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (so return values are documented elsewhere), no annotations, and moderate complexity with 2 parameters, the description is reasonably complete. It covers purpose, parameters, and usage context. However, for a tool with 0% schema coverage and no annotations, it could better address behavioral aspects like error handling or performance characteristics to be fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining template_name as 'Name of the template' and source with its possible values ('custom', 'official', or 'auto'), which clarifies beyond the bare schema. However, it doesn't detail format constraints for template_name or the implications of 'auto' vs. explicit sources, leaving some semantic gaps.

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 clearly states the verb 'Get' and resource 'DSL content for any template', specifying both custom and official templates. It distinguishes from siblings like get_template (likely returns different metadata), list_templates (lists rather than retrieves content), and execute_workflow (executes rather than retrieves). The purpose is specific and well-differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving DSL content that can be modified or executed, suggesting it's a precursor to tools like generate_from_template or write_workflow. However, it lacks explicit guidance on when to use this vs. alternatives like get_template (which might return different data) or read_workflow (which might handle workflows vs. templates). No when-not-to-use or prerequisite information is provided.

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

get_workflow_infoB

Analyze workflow structure and return metadata.

Parses DSL and extracts structural information like node types, sections, and connections without executing the workflow.

Args: dsl: Workflow content in DSL format

Returns: Workflow metadata including nodes, sections, and connections

Examples: get_workflow_info(dsl_content)

ParametersJSON Schema
NameRequiredDescriptionDefault
dslYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/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. It discloses that the tool 'parses DSL and extracts structural information' and doesn't execute, which is useful. However, it lacks details on permissions needed, rate limits, error handling, or what happens with invalid DSL. For a tool with no annotation coverage, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and concise: it starts with a clear purpose statement, followed by behavioral details, then lists args and returns with brief explanations, and ends with an example. Every sentence adds value without redundancy, and it's front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (analyzing workflow structure), no annotations, and an output schema exists (so return values are documented elsewhere), the description is reasonably complete. It covers purpose, behavior, parameters, and returns, though it could benefit from more behavioral context like error cases or performance notes. The output schema likely handles return details, reducing the burden on the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema provides no parameter details. The description adds value by explaining 'dsl: Workflow content in DSL format', giving basic semantics. However, it doesn't specify the DSL format, constraints, or examples beyond the generic example, leaving room for ambiguity. With 1 parameter and low schema coverage, this is a minimal but adequate explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Analyze workflow structure and return metadata' with specific verbs ('analyze', 'parses', 'extracts') and resources ('workflow structure', 'DSL'). It distinguishes from siblings like execute_workflow (which runs workflows) and read_workflow (which likely reads raw content), but doesn't explicitly differentiate from validate_workflow or get_template_dsl, which might have overlapping analysis functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context: 'without executing the workflow' suggests this is for inspection rather than execution, distinguishing it from execute_workflow. However, it doesn't provide explicit when-to-use guidance versus alternatives like validate_workflow (which might also analyze structure) or get_template_dsl (which might return DSL content), nor does it mention prerequisites or exclusions.

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

list_comfyui_queueA

List current ComfyUI execution queue.

Shows running and pending jobs in the ComfyUI queue.

Args: server_address: ComfyUI server address

Returns: Queue information with running and pending jobs

Examples: list_comfyui_queue() list_comfyui_queue("192.168.1.100:8188")

ParametersJSON Schema
NameRequiredDescriptionDefault
server_addressNo127.0.0.1:8188

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses the tool's read-only nature (list/shows) and scope (running and pending jobs), but doesn't mention rate limits, authentication needs, pagination, or error conditions. The behavioral disclosure is adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with a clear purpose statement, brief elaboration, and well-organized sections for Args, Returns, and Examples. Every sentence adds value without redundancy, and information is appropriately front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (queue listing), no annotations, and the presence of an output schema (which handles return value documentation), the description is reasonably complete. It covers purpose, parameter meaning, and examples, though could benefit from more behavioral context about limitations or edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates well by explaining the single parameter's purpose ('ComfyUI server address') and providing examples with default and explicit values. For a tool with only one optional parameter, this provides sufficient semantic context beyond the bare schema.

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 clearly states the specific verb 'List' and resource 'current ComfyUI execution queue', with additional detail about 'running and pending jobs'. It distinguishes from siblings like get_job_status (single job) and list_workflows (workflow definitions).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing queue status, but doesn't explicitly state when to use this vs alternatives like get_job_status for specific job details or execute_workflow for queueing new jobs. No explicit exclusions or prerequisites are mentioned.

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

list_official_templatesB

List official ComfyUI templates.

Returns templates from the official Comfy-Org repository that have been synced and converted to DSL format.

Returns: List of official template metadata

Examples: list_official_templates()

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions the source (official Comfy-Org repository) and format (DSL), but doesn't disclose behavioral traits like whether it's read-only, pagination, rate limits, authentication needs, or what 'synced' entails. The description adds some context but lacks critical operational details.

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 appropriately sized and front-loaded, starting with the core purpose. The 'Returns' and 'Examples' sections add value without redundancy. However, the example 'list_official_templates()' is somewhat redundant with the name, slightly reducing efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 0 parameters, 100% schema coverage, and an output schema exists, the description is moderately complete. It explains what the tool does and the source/format, but as a list operation with no annotations, it should more explicitly state it's a read-only fetch and clarify the return structure beyond 'metadata', despite the output schema covering details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0 parameters and 100% schema description coverage, the baseline is 4. The description doesn't need to explain parameters, and it correctly indicates no inputs are required by including an example with empty parentheses. No additional parameter semantics are needed or provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and resource 'official ComfyUI templates', specifying they come from the official Comfy-Org repository and are synced/converted to DSL format. It distinguishes from generic 'list_templates' by focusing on official ones, though doesn't explicitly contrast with 'search_templates' or other siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like 'list_templates' or 'search_templates'. The description implies it's for official templates only, but doesn't specify use cases, prerequisites, or exclusions. It's left to the agent to infer context from sibling names.

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

list_templatesA

List available workflow templates.

Discover workflow templates by category, difficulty, or tags. Templates provide ready-to-use workflows for common use cases.

Args: category: Filter by category (Generation, Enhancement, Editing, etc.) difficulty: Filter by difficulty (beginner, intermediate, advanced) tag: Filter by tag (text2img, inpainting, controlnet, etc.)

Returns: List of template metadata with names, descriptions, and parameters

Examples: list_templates() list_templates(category="Generation") list_templates(difficulty="beginner") list_templates(tag="text2img")

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNo
difficultyNo
tagNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions that templates 'provide ready-to-use workflows' and returns 'List of template metadata', but lacks details on permissions, rate limits, pagination, or whether it's read-only. For a list tool with no annotations, this leaves significant behavioral gaps.

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?

Well-structured with purpose statement, usage context, parameter details, return info, and examples. Each section adds value, though it could be slightly more front-loaded by moving examples later. Overall efficient with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters with 0% schema coverage and an output schema exists (so return values don't need explanation), the description provides good coverage: purpose, parameters with examples, and return type. It could improve by addressing sibling differentiation and more behavioral context, but it's largely complete for a list tool.

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?

Schema description coverage is 0%, so the description must compensate. It fully documents all 3 parameters (category, difficulty, tag) with clear explanations and examples, adding substantial meaning beyond the bare schema. This effectively bridges the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'List available workflow templates' with the specific verb 'List' and resource 'workflow templates'. It distinguishes from some siblings like 'get_template' (singular) and 'search_templates' (search vs list), though not explicitly. However, it doesn't fully differentiate from 'list_official_templates' which seems similar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides implied usage through examples and parameter explanations, suggesting when to use filters like category or difficulty. However, it lacks explicit guidance on when to choose this tool over alternatives like 'search_templates' or 'list_official_templates', and doesn't mention prerequisites or exclusions.

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

list_workflowsA

List workflow files in a directory.

Discovers workflow files (.json and .dsl) in the specified directory. Supports glob patterns for filtering.

Args: directory: Directory to search (default: "workflows") pattern: Glob pattern for filtering (default: "*" for all files)

Returns: List of workflow info dicts with name, size, modified time

Examples: list_workflows() list_workflows("workflows", "*.json") list_workflows("../dsl/examples/dsl")

ParametersJSON Schema
NameRequiredDescriptionDefault
directoryNoworkflows
patternNo*

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool discovers files and supports glob patterns, but lacks details on permissions needed, error handling (e.g., invalid directory), rate limits, or whether it's a read-only operation (implied by 'list' but not explicit). Some behavioral context is given, but gaps remain for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the core purpose, followed by details on discovery, filtering, args, returns, and examples. Every sentence adds value without redundancy, and the bullet-like formatting enhances readability while maintaining brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 2 parameters with 0% schema coverage and no annotations, the description does a solid job: it explains the tool's purpose, parameters, return values, and includes examples. Since an output schema exists (context signals indicate true), it doesn't need to detail return structure extensively. However, for a file-listing tool, it could mention pagination or sorting behavior, but overall it's fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaningful context: 'directory' is where to search with a default, and 'pattern' is a glob filter with a default. This clarifies beyond the schema's basic string types, though it doesn't detail glob syntax or directory path requirements. With 0% schema coverage, this is good but not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'List workflow files in a directory' with specific file types (.json and .dsl). It distinguishes from siblings like 'list_templates' or 'list_official_templates' by focusing on workflow files, but doesn't explicitly contrast with 'get_workflow_info' or 'read_workflow' which might retrieve individual workflows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing to discover workflow files with optional filtering via glob patterns. However, it doesn't explicitly state when to use this versus alternatives like 'list_templates' (for templates) or 'get_workflow_info' (for detailed info on a specific workflow), leaving some ambiguity in sibling tool selection.

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

read_workflowA

Read a workflow file and return it as DSL format.

Supports both JSON and DSL input files. Automatically detects format and converts JSON to DSL transparently.

Args: filepath: Path to workflow file (.json or .dsl)

Returns: Workflow content in DSL format

Examples: read_workflow("workflows/my_workflow.json") read_workflow("../dsl/examples/dsl/simple.dsl")

ParametersJSON Schema
NameRequiredDescriptionDefault
filepathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses key behavioral traits: automatic format detection, transparent JSON-to-DSL conversion, and file format support (.json or .dsl). However, it doesn't mention error handling, file size limits, or authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, format support, Args, Returns, Examples). Every sentence earns its place by providing essential information without redundancy. The front-loaded purpose statement immediately communicates core functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 1 parameter with 0% schema coverage and no annotations, the description does well by explaining parameter semantics, return format, and behavioral aspects. Since an output schema exists, the description doesn't need to detail return values. The main gap is lack of error/edge-case handling information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides clear semantics for the single parameter 'filepath' including purpose ('Path to workflow file'), supported extensions (.json or .dsl), and examples. This adds substantial value beyond the bare schema.

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 clearly states the specific action ('Read a workflow file'), the resource ('workflow file'), and the output format ('return it as DSL format'). It distinguishes from siblings like 'get_workflow_info' (which likely provides metadata) and 'write_workflow' (which creates/modifies).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by mentioning support for both JSON and DSL input files, but doesn't explicitly state when to use this tool versus alternatives like 'get_workflow_info' or 'validate_workflow'. No explicit when-not-to-use guidance or prerequisite context is provided.

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

search_templatesB

Search templates by name, description, or tags.

Performs fuzzy search across template metadata to find relevant workflow templates.

Args: query: Search query (searches name, description, tags)

Returns: List of matching templates

Examples: search_templates("pose") search_templates("upscaling") search_templates("text to image")

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/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 of behavioral disclosure. It mentions 'fuzzy search' which implies approximate matching behavior, but doesn't cover other important aspects like pagination, rate limits, authentication requirements, error conditions, or what 'matching templates' includes in the return. For a search tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves.

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 well-structured and appropriately sized. It starts with a clear purpose statement, adds behavioral context in the second sentence, then provides arg/return documentation and examples. Every sentence adds value, though the examples could be slightly more concise. It's front-loaded with essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (which handles return values) and only one parameter with good semantic explanation in the description, the description is moderately complete. However, with no annotations and multiple sibling tools, it should provide more behavioral context and usage differentiation. The examples help but don't fully compensate for the missing guidance on when to use this versus other template-related tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, but the description compensates well by explaining the 'query' parameter's purpose: 'Search query (searches name, description, tags).' This adds meaningful context beyond the bare schema, clarifying what fields the query targets. However, it doesn't detail query syntax, case sensitivity, or fuzzy matching rules, keeping it from a perfect score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Search templates by name, description, or tags' and 'Performs fuzzy search across template metadata to find relevant workflow templates.' This specifies the verb (search), resource (templates), and scope (metadata fields). However, it doesn't explicitly differentiate from sibling tools like 'list_templates' or 'list_official_templates,' which likely have different filtering mechanisms.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With multiple sibling tools related to templates (get_template, list_templates, list_official_templates), there's no indication of when this fuzzy search is preferred over listing or retrieving specific templates. The examples show usage but don't explain context or exclusions.

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

sync_official_templatesA

Sync official ComfyUI templates from GitHub.

Downloads and processes official workflow templates from the Comfy-Org/workflow_templates repository. Converts them to DSL format for use with the template system.

Returns: Sync status with count of successfully processed templates

Examples: sync_official_templates()

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behaviors: it downloads from GitHub, processes templates, converts to DSL, and returns sync status with counts. However, it lacks details on error handling, rate limits, authentication needs, or whether it overwrites existing templates. The description doesn't contradict annotations (none exist).

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 front-loaded with the core purpose, followed by details on processing and returns, and includes an example. It's appropriately sized, but the 'Examples:' section is redundant since it mirrors the tool name without parameters, slightly reducing efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 0 parameters, no annotations, and an output schema exists (implied by 'Returns:'), the description is fairly complete. It explains what the tool does, the transformation involved, and the return value. However, it could improve by mentioning potential side effects (e.g., overwriting) or dependencies, but the output schema likely covers return details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are 0 parameters, and schema description coverage is 100% (empty schema). The description doesn't need to add parameter semantics, but it correctly notes no parameters in the example 'sync_official_templates()'. Baseline for 0 params is 4, as it adequately handles the lack of inputs.

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 clearly states the specific action ('sync official ComfyUI templates from GitHub'), resource ('official workflow templates'), and transformation ('converts them to DSL format'). It distinguishes this tool from siblings like 'list_official_templates' (which likely only lists) and 'get_template_dsl' (which retrieves existing DSL).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by stating it 'syncs official templates from GitHub' and 'converts them to DSL format for use with the template system,' suggesting it's for initial setup or updates. However, it doesn't explicitly state when to use this vs. alternatives like 'list_official_templates' or prerequisites (e.g., internet connectivity).

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

validate_template_parametersA

Validate parameters for a template without generating.

Checks if provided parameters are valid for the template and returns detailed validation results.

Args: template_name: Name of the template parameters: Dictionary of parameters to validate

Returns: Validation results with errors and warnings

Examples: validate_template_parameters("text2img_basic", {"width": "512"})

ParametersJSON Schema
NameRequiredDescriptionDefault
template_nameYes
parametersYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/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. It discloses the tool's behavior: it validates parameters and returns detailed results with errors and warnings. However, it does not mention authentication needs, rate limits, side effects, or what constitutes 'valid' parameters. The description adds basic context but lacks depth for a validation tool with no annotation coverage.

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 well-structured with clear sections (purpose, args, returns, examples) and uses only essential sentences. It is front-loaded with the core purpose. Minor improvements could include merging or trimming some lines, but overall it is efficient and easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 2 parameters, 0% schema coverage, no annotations, but an output schema exists, the description is reasonably complete. It covers purpose, parameters, returns, and includes an example. However, for a validation tool, more details on error formats or validation rules would enhance completeness, though the output schema may cover return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains both parameters: 'template_name' as the name of the template and 'parameters' as a dictionary to validate. The example illustrates usage but does not detail parameter formats or constraints. The description adds meaningful semantics beyond the bare schema, though not exhaustively.

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 clearly states the specific action ('validate parameters for a template without generating'), identifies the resource ('template'), and distinguishes it from siblings like 'generate_from_template' (which would generate) and 'validate_workflow' (which validates workflows, not template parameters). The phrase 'without generating' explicitly differentiates it from generation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: to check parameter validity before generation. It implies an alternative ('generate_from_template') but does not explicitly state when NOT to use it or compare with other validation tools like 'validate_workflow'. The guidance is helpful but lacks explicit exclusions or detailed comparisons.

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

validate_workflowA

Validate DSL workflow syntax.

Parses DSL and checks for syntax errors without executing the workflow. Returns validation status and any errors found.

Args: dsl: Workflow content in DSL format

Returns: Validation result with is_valid, errors, and warnings

Examples: validate_workflow(dsl_content)

ParametersJSON Schema
NameRequiredDescriptionDefault
dslYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/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. It discloses key behavioral traits: it's a read-only validation (no execution), returns validation status and errors, and checks syntax. However, it does not mention potential limitations like rate limits, authentication needs, or what happens with invalid input beyond errors, leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded, starting with the core purpose, followed by behavior, args, returns, and an example. Every sentence adds value without redundancy, making it efficient and easy to parse for an AI agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (validation without execution), no annotations, and an output schema (which covers return values), the description is mostly complete. It explains purpose, usage, and parameters adequately, but could benefit from more behavioral details like error handling or prerequisites to be fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaningful semantics beyond the input schema, which has 0% coverage. It explains that the 'dsl' parameter is 'Workflow content in DSL format,' providing context not in the schema. With only one parameter, this is sufficient to compensate for the low schema coverage, though more details on DSL format could enhance it.

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 clearly states the tool's purpose with a specific verb ('validate') and resource ('DSL workflow syntax'), distinguishing it from siblings like execute_workflow (which executes) or read_workflow (which reads). It explicitly mentions parsing DSL and checking for syntax errors without execution, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: to validate workflow syntax before execution, as implied by 'without executing the workflow.' However, it does not explicitly state when not to use it or name alternatives (e.g., validate_template_parameters for templates), so it lacks full exclusion guidance.

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

write_workflowA

Write a workflow to disk.

Takes DSL content and writes it to disk. By default, converts to JSON format. Can optionally save as .dsl format directly.

Args: filepath: Destination file path dsl: Workflow content in DSL format format: Output format ("json" or "dsl", default: "json")

Returns: Status dict with path, size, and format info

Examples: write_workflow("workflows/new_workflow.json", dsl_content) write_workflow("workflows/backup.dsl", dsl_content, format="dsl")

ParametersJSON Schema
NameRequiredDescriptionDefault
filepathYes
dslYes
formatNojson

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool writes to disk and converts formats, but lacks details on permissions, error handling, or side effects. It adds some context (e.g., default format) but is incomplete for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the core purpose, followed by concise sections for args, returns, and examples. Every sentence adds value without redundancy, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (mutation with 3 params, no annotations) and an output schema (implied by 'Returns' statement), the description is fairly complete. It covers purpose, parameters, and output, but could improve by addressing behavioral aspects like error cases or dependencies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains all three parameters ('filepath', 'dsl', 'format') with meanings, default values, and options, adding significant value beyond the bare schema. However, it doesn't detail constraints like filepath formats or DSL syntax.

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 clearly states the specific action ('Write a workflow to disk') with the resource ('workflow') and distinguishes it from siblings like 'read_workflow' and 'execute_workflow'. It specifies the transformation from DSL content to disk files, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by mentioning default behavior (converts to JSON) and an optional format, but does not explicitly state when to use this tool versus alternatives like 'read_workflow' or 'execute_workflow'. It provides basic context without exclusions or clear alternatives.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updates
    • First observedexecute_workflow
    • First observedgenerate_from_template
    • First observedget_job_status
    • First observedget_template
    • First observedget_template_dsl
    • First observedget_workflow_info
    • First observedlist_comfyui_queue
    • First observedlist_official_templates
    • First observedlist_templates
    • First observedlist_workflows
    • First observedread_workflow
    • First observedsearch_templates
    • First observedsync_official_templates
    • First observedvalidate_template_parameters
    • First observedvalidate_workflow
    • First observedwrite_workflow

TDQS

A3.9/5.0

Scored across 16 tools

Disambiguation4/5

Most tools have distinct purposes, but there is some overlap between get_template and get_template_dsl, as both retrieve template details, which could cause confusion. However, descriptions clarify that get_template provides metadata while get_template_dsl focuses on DSL content, helping to differentiate them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case, such as execute_workflow, list_templates, and validate_workflow. This predictability makes the set easy to navigate and understand.

Tool Count4/5

With 16 tools, the count is slightly high but reasonable for a ComfyUI server covering workflow execution, template management, and file operations. It feels comprehensive without being overwhelming, though some tools like get_template and get_template_dsl could potentially be consolidated.

Completeness5/5

The tool set provides complete coverage for the domain, including workflow execution (execute_workflow), status tracking (get_job_status), template handling (list_templates, generate_from_template), file operations (read_workflow, write_workflow), and validation (validate_workflow). There are no obvious gaps for core ComfyUI operations.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers