{"name":"io.github.MIt9/comfy-ui-builder","slug":"mit9-comfy-ui-builder","title":"ComfyUI Builder","description":"ComfyUI MCP server: knowledge base, workflow builder, real-time execution, models, plugins.","url":"https://mcp.market/server/mit9-comfy-ui-builder","rating":null,"grade":"B","score":74,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":31,"stars":3,"forks":0,"downloads_week":102,"last_push_at":"2026-09-23T19:31:53.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/MIt9/mcp-comfy-ui-builder","website":null,"version":"2.4.1","remotes":[],"packages":[{"registryType":"npm","identifier":"mcp-comfy-ui-builder","version":"2.4.1","transport":{"type":"stdio"},"environmentVariables":[{"description":"ComfyUI API URL (e.g. http://127.0.0.1:8188). Required for execution, queue, outputs.","format":"string","name":"COMFYUI_HOST"},{"description":"Path to ComfyUI install. Required for install_custom_node, install_model.","format":"string","name":"COMFYUI_PATH"},{"description":"Path to knowledge directory (default: package knowledge/). Use when MCP runs from different cwd.","format":"string","name":"COMFYUI_KNOWLEDGE_DIR"}]}],"tools":[{"name":"add_node","description":"Add a node to a dynamic workflow. Returns the new node id (e.g. \"1\", \"2\").","write_action":false,"price_micros":0,"input_schema":null},{"name":"apply_template","description":"Apply parameter values to a workflow template. Returns workflow JSON ready to execute or save. Use create_template to build a template, then apply_template with values.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_workflow","description":"Build a ComfyUI workflow from a template and parameters. Returns workflow JSON ready to execute or save. For txt2img_flux, call get_system_resources first and use only when flux_ready is true (FLUX needs ~12GB+ VRAM).","write_action":false,"price_micros":0,"input_schema":null},{"name":"check_compatibility","description":"Check if output of one node can connect to input of another (using node-compatibility.json).","write_action":false,"price_micros":0,"input_schema":null},{"name":"check_model_exists","description":"Check if a model exists on the ComfyUI server (in object_info model lists). Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"check_workflow_models","description":"Check which models required by a workflow exist on the ComfyUI server. Returns ready (boolean), missing, and found lists. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"clear_queue","description":"Clear ComfyUI queue: remove all pending and stop/clear running. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"connect_nodes","description":"Connect an output of one node to an input of another in a dynamic workflow.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_template","description":"Create a parameterized workflow template from a workflow and parameter definitions. Returns template JSON for use with apply_template or validate_template_params. Parameters bind to node inputs via nodeBindings (nodeId, inputName).","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_workflow","description":"Create a new empty workflow context. Returns workflow_id to use with add_node, connect_nodes, get_workflow_json, validate_workflow, finalize_workflow, execute_workflow.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_queue_items","description":"Remove specific items from ComfyUI queue by prompt_id. Use list_queue to get prompt_ids. Requires COMFYUI_HOST.","write_action":true,"price_micros":0,"input_schema":null},{"name":"discover_nodes_live","description":"Get all node definitions from the running ComfyUI instance (GET /object_info). Returns class names and categories. Requires ComfyUI to be running at COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"download_all_outputs","description":"Download all output files for a prompt into a directory. Returns list of saved paths. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"download_by_filename","description":"Download an output file by filename (no prompt_id needed). Uses GET /view. Use when you have filename from get_history or get_last_output. If return_base64 is true, file is not written to disk; returns base64 data. When size > 800 KB, automatically converts to WebP to stay under 1MB base64 limits. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"download_output","description":"Download a single output file to a local path. Use list_outputs to get file info. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"execute_batch","description":"Execute multiple workflows in batch. Submits each workflow and waits for completion (polling). Optional concurrency and stop_on_error. Requires COMFYUI_HOST.","write_action":true,"price_micros":0,"input_schema":null},{"name":"execute_chain","description":"Execute a chain of workflows in sequence. Each step runs after the previous completes. Use inputFrom and outputTo to pass the output image from one step to the next (e.g. txt2img → upscale → img2img). Steps can use workflow JSON or saved workflow name. Prefer saved workflow name (string) for large workflows to avoid ENAMETOOLONG in some clients. Requires COMFYUI_HOST.","write_action":true,"price_micros":0,"input_schema":null},{"name":"execute_workflow","description":"Submit a ComfyUI workflow to run. Returns prompt_id. Use get_execution_status(prompt_id) to check result. Requires COMFYUI_HOST and ComfyUI running.","write_action":true,"price_micros":0,"input_schema":null},{"name":"execute_workflow_stream","description":"Execute workflow with streaming real-time progress updates. Requires WebSocket support. Returns result and progress event history. Use for monitoring execution progress. Requires COMFYUI_HOST and WebSocket connection.","write_action":true,"price_micros":0,"input_schema":null},{"name":"execute_workflow_sync","description":"Submit a ComfyUI workflow and wait until execution completes with real-time progress (WebSocket if available, polling fallback). Returns prompt_id, status (completed/failed/timeout), and outputs. When timeout_ms is omitted, uses recommended_timeout_ms from get_system_resources (higher on MPS/Apple). Use when you need the result before continuing. Requires COMFYUI_HOST.","write_action":true,"price_micros":0,"input_schema":null},{"name":"finalize_workflow","description":"Get the workflow JSON for a dynamic workflow (same as get_workflow_json). Use with execute_workflow or save_workflow.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_error_details","description":"Get full error details for a prompt (node_id, exception_type, exception_message, full traceback). Use when execute_workflow_sync failed or get_execution_status shows errors. Returns structured errors from ComfyUI history status.messages. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_execution_progress","description":"Get real-time execution progress for a prompt (WebSocket if available, polling fallback). Returns status, current_node, progress%, queue_position, and outputs. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_execution_status","description":"Get execution status and outputs for a prompt. Returns status, image filenames, and view URLs. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_generation_recommendations","description":"Get recommendations for image generation: system resources (max resolution, model size, batch) and, if the user prompt suggests text/letters in the image, advice on models and settings. Many base models (SD 1.5, SD XL) render text poorly; FLUX, SD 3, or checkpoints trained for text work better. Call when planning a txt2img or img2img workflow; pass the user's image description as prompt to get tex","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_history","description":"Get ComfyUI execution history (GET /history) without prompt_id. Returns last N prompts with prompt_id, status, outputs (filenames), elapsed. Use when execute_workflow_sync did not return prompt_id (e.g. WebSocket timeout) to find the latest run and its outputs. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_last_output","description":"Get info for the most recent prompt that has image output (skips failed prompts). Use when prompt_id was lost (e.g. execute_workflow_sync timed out). Returns prompt_id, filename, subfolder, view_url. Then use download_by_filename to save the file. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_model_info","description":"Get info for a model by name and type. Returns name, type, path; null if not found. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_node_info","description":"Get full node information for a ComfyUI node by its class name. Uses live ComfyUI when COMFYUI_HOST is set, otherwise knowledge base.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_node_inputs","description":"Get detailed input definitions for a node (required and optional). Uses live ComfyUI if available, otherwise knowledge base.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_node_outputs","description":"Get output types and names for a node. Uses live ComfyUI if available, otherwise knowledge base.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_system_resources","description":"Get ComfyUI station resources (GPU/VRAM/RAM) and recommendations for model size, resolution, and batch size. Returns flux_ready (FLUX needs ~12GB+ VRAM) and platform_hints (e.g. Apple Silicon: M-Flux, ComfyUI-MLX). Call this first before building or executing workflows to avoid OOM. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_workflow_json","description":"Get the current workflow JSON for a dynamic workflow (for execute_workflow or save_workflow).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_workflow_models","description":"Extract required models from a workflow (loader nodes: CheckpointLoaderSimple, LoraLoader, VAELoader, ControlNetLoader, UpscaleModelLoader, etc.). Returns list of { name, type, nodeId, nodeClass, inputName }. No ComfyUI connection needed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"insert_macro","description":"Insert a macro (sub-workflow) into a dynamic workflow. Connects macro input ports to existing nodes. Returns nodeIdMap and outputPorts so you can connect macro outputs. Use workflow_id from create_workflow.","write_action":true,"price_micros":0,"input_schema":null},{"name":"install_custom_node","description":"Install one or more custom nodes via ComfyUI-Manager cm-cli (e.g. ComfyUI-Blip, WAS-Node-Suite). Requires COMFYUI_PATH and ComfyUI-Manager installed in custom_nodes. ComfyUI-Manager cm-cli requires Python package \"rich\" (pip install rich in your ComfyUI Python environment). Restart ComfyUI after install to load new nodes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"install_model","description":"Download and install a model (checkpoint, LoRA, VAE, etc.) by URL. Requires COMFYUI_PATH. Uses comfy-cli if available (pip install comfy-cli), otherwise fetches the file directly. model_type: checkpoint, lora, vae, controlnet, clip, embeddings, hypernetwork, upscale_models, clip_vision, unet, diffusers.","write_action":false,"price_micros":0,"input_schema":null},{"name":"interrupt_execution","description":"Stop the currently running workflow on ComfyUI. Optionally pass prompt_id to interrupt only that prompt. If cleanup_after_ms is set (and prompt_id given), after interrupt the tool will poll the queue and remove the prompt from queue if it is still there (frees GPU for next job). Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_macros","description":"List available workflow macros (built-in sub-workflows). Returns id, name, description, inputs, outputs.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_models","description":"List models available on the ComfyUI server (from object_info). Optionally filter by type: checkpoint, lora, vae, controlnet, upscale, embedding, clip. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_node_categories","description":"List all node categories from live ComfyUI and knowledge base (merged, unique).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_node_types","description":"List ComfyUI node types from the knowledge base. Optionally filter by category or priority.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_outputs","description":"List all output files (images, gifs) for a completed prompt. Returns prompt_id, node_id, type, filename, url. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_plugins","description":"List loaded plugins (from plugins/*/plugin.json) and counts of macros/templates contributed by each.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_queue","description":"List current ComfyUI queue (running and pending prompts). Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_saved_workflows","description":"List saved workflows (names and paths) from workflows/ directory.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_templates","description":"List available workflow template ids (e.g. txt2img). No ComfyUI connection needed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"load_workflow","description":"Load a saved workflow by name (from workflows/<name>.json) or by path. Returns workflow JSON for use with execute_workflow or save_workflow.","write_action":false,"price_micros":0,"input_schema":null},{"name":"prepare_image_for_workflow","description":"Fetch the first output image from a completed prompt and upload it to ComfyUI input folder. Returns the filename to use in LoadImage for a follow-up workflow (e.g. image caption / verification). Use after get_execution_status confirms the prompt finished with image output. Requires COMFYUI_HOST.","write_action":false,"price_micros":0,"input_schema":null},{"name":"reload_comfyui","description":"Restart ComfyUI so that newly installed custom nodes are loaded, then optionally sync them to the knowledge base. Requires COMFYUI_PATH (ComfyUI installation directory) and uses COMFYUI_HOST for the port. Kills the process on the ComfyUI port and starts main.py from COMFYUI_PATH. After restart, call sync_nodes_to_knowledge to pick up custom nodes (or set sync_after_restart to true).","write_action":false,"price_micros":0,"input_schema":null},{"name":"reload_plugins","description":"Reload plugins from plugins/*/plugin.json and refresh macro registry.","write_action":false,"price_micros":0,"input_schema":null},{"name":"remove_node","description":"Remove a node from a dynamic workflow. Does not fix references (validation will report dangling refs).","write_action":true,"price_micros":0,"input_schema":null},{"name":"save_workflow","description":"Save a workflow JSON to file (workflows/<name>.json). Returns path. Use after build_workflow to persist for later load_workflow or execute_workflow.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_nodes","description":"Search nodes by query string and optional filters (category, input_type, output_type). Searches both live ComfyUI and knowledge base; live overrides KB for same class.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_node_input","description":"Set a literal input on a node in a dynamic workflow (overwrites existing value or link).","write_action":false,"price_micros":0,"input_schema":null},{"name":"suggest_nodes","description":"Suggest ComfyUI nodes for a task (search by description/use_cases) or by output type they produce.","write_action":false,"price_micros":0,"input_schema":null},{"name":"suggest_template_for_checkpoint","description":"Suggest workflow template (txt2img_flux or txt2img) from checkpoint filename. FLUX checkpoints (e.g. flux1-dev-fp8.safetensors) use txt2img_flux; SD XL / SD 1.5 use txt2img. Call before build_workflow when the user did not specify a template.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sync_nodes_to_knowledge","description":"Sync node definitions from running ComfyUI to the knowledge base. Adds only nodes that are not already in base-nodes.json. Creates knowledge/ if missing (or set COMFYUI_KNOWLEDGE_DIR to point to the knowledge directory). Requires ComfyUI to be running.","write_action":false,"price_micros":0,"input_schema":null},{"name":"validate_template_params","description":"Validate that parameter values satisfy a workflow template (required params, types).","write_action":false,"price_micros":0,"input_schema":null},{"name":"validate_workflow","description":"Validate a dynamic workflow: checks that all node references exist and output indices are valid.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":74,"grade":"B","scanned_at":"2026-09-28T14:29:39.302Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-09-28T14:29:39.253Z","components":{"code":{"score":13,"max":25,"notes":["52 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 5 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.shell-concat","severity":"high","component":"code","title":"Shell command built from a string (injection risk)","evidence":"dist/manager-cli.js: … === 'win32') { const out = execSync(`netstat -ano | findstr :${port}`, { encoding: 'utf8', stdio: ['pip…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"mcp-comfy-ui-builder","version":"2.4.1","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":6,"publishedAt":"2026-02-03T18:07:59.693Z","repositoryUrl":"git+https://github.com/MIt9/mcp-comfy-ui-builder.git","weeklyDownloads":102}],"repo":{"found":true,"owner":"MIt9","repo":"mcp-comfy-ui-builder","archived":false,"pushedAt":"2026-09-23T19:31:53Z","stars":3,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/3037823?v=4","ownerCreatedAt":"2012-12-13T22:54:06Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/3037823?v=4&s=128","source":"github"},"presence":{"stars":3,"forks":0,"downloadsWeek":102,"license":"MIT","lastPushAt":"2026-09-23T19:31:53.000Z","score":31}}}},"grade_history":[],"reviews":[]}