comfygenmcp
# uncomfymcp
A Model Context Protocol (MCP) server that connects an AI assistant to a running
ComfyUI instance. It fetches a workflow saved in ComfyUI, writes the prompt and
seed into it, runs it, and returns the image inline in the chat — so it only
works with text-to-image workflows that have a single prompt node and seed to
inject into.
**This is a third-party MCP server for ComfyUI. The official one, comfy-mcp, is available at [https://github.com/Comfy-Org/comfy-mcp](https://github.com/Comfy-Org/comfy-mcp)**
## Install
Requires Python 3.10+ and a running ComfyUI.
Linux and macOS:
```bash
git clone https://github.com/aschet/uncomfymcp.git
cd uncomfymcp
python3 -m venv .venv
.venv/bin/pip install -e .
```
Windows:
```bat
git clone https://github.com/aschet/uncomfymcp.git
cd uncomfymcp
python -m venv .venv
.venv\Scripts\pip install -e .
```
That gives you the command `.venv/bin/uncomfymcp` (`.venv\Scripts\uncomfymcp.exe`
on Windows), which a client launches for you — nothing to start by hand beyond
ComfyUI itself.
## Connecting a Client
Any MCP client works. By default the server speaks stdio, meaning the client
launches `.venv/bin/uncomfymcp` itself and talks to it over the process
pipes. With `--transport http` it instead listens on
`http://127.0.0.1:8000/mcp` for clients that connect over the network — with
no authentication, so don't expose it without one in front.
Add this `mcpServers` entry to the client's config. Flags go in an `"args"`
array, e.g. `"args": ["--comfy-url", "http://host:8188", "--timeout", "600"]`
— add the first if ComfyUI isn't on localhost, and raise the timeout if your
workflows are slow or an agent chains several generations.
```json
{
"mcpServers": {
"uncomfy": {
"command": "/path/to/uncomfymcp/.venv/bin/uncomfymcp"
}
}
}
```
On Windows, `command` is the `.venv\Scripts\uncomfymcp.exe` path instead.
- Claude Desktop: add it to `claude_desktop_config.json`.
- AnythingLLM: add it to `anythingllm_mcp_servers.json`
(`~/.config/anythingllm-desktop/storage/plugins/` on Linux), then start it
from Settings → Agent Skills → MCP Servers and invoke with `@agent`. It
renders no image at all, so add `--no-inline-image` to `"args"` — otherwise
every generation wastes tens of thousands of tokens on base64 the agent
can't even display.
## Use
### Claude Desktop
```
you: which image workflows do I have?
claude: [list_workflows]
Ready to generate with:
Krea2
Z-Image Turbo
Present but not usable:
Ideogram 4 -- needs models that are not installed:
flux2-vae.safetensors, gemma4_e4b_it_fp8_scaled.safetensors,
ideogram4_fp8_scaled.safetensors
you: generate a red fox in deep snow using Krea2
claude: [image] Krea2 · seed 12345 ·
http://127.0.0.1:8188/view?filename=Krea2_turbo_00007_.png
```
The image shows inside the collapsed tool card — expand it, or use the URL.
### AnythingLLM
Tool calls need the `@agent` prefix, and with `--no-inline-image` set (see
above) there is no `[image]` block, only the line with the seed and URL:
```
you: @agent generate a red fox in deep snow using Krea2
agent: Krea2 · seed 12345 ·
http://127.0.0.1:8188/view?filename=Krea2_turbo_00007_.png
```
Two tools are exposed:
| Tool | Description |
| --- | --- |
| `generate_image(prompt, workflow, seed?)` | Generate and return the image. Seeds are random unless you pass one, and every result reports the seed it used. Pass `--no-inline-image` on the command line for a client that can't render one — it then returns only the seed and URL. |
| `list_workflows()` | The workflows saved in ComfyUI, split into those ready to run and those that cannot. |
## Limitations
- Only the prompt and seed change — no width, height, steps or sampler; those
come from the workflow. A sampler set to "fixed" in ComfyUI is not honoured.
- Node detection can pick the wrong node when a workflow has several prompt
boxes; set a node's Title to `MCP:prompt` to override.
- Images are sent as WebP, downscaled and compressed to fit a 1 MB limit,
with transparency preserved. The full-resolution original stays in
ComfyUI's output folder.
## Configuration
All settings are command-line flags.
| Flag | Default | Description |
| --- | --- | --- |
| `--comfy-url` | `http://127.0.0.1:8188` | Address of the ComfyUI server to generate on |
| `--transport` | `stdio` | `stdio`, or `http` to listen on a port |
| `--listen` | `127.0.0.1:8000` | Address this server binds to, with `--transport http` |
| `--timeout` | `300` | Seconds before giving up on a generation |
TDQS
Scored across 2 tools
list_workflows and generate_image are completely distinct: one discovers available workflows, the other executes generation. There is no possibility of confusing their roles.
Both tool names follow the same verb_noun pattern (list_workflows, generate_image), making the interface predictable and consistent.
At only 2 tools, the server feels thin, but the narrow scope of listing and generating ComfyUI workflows makes this minimal surface reasonable. Still, it is borderline per the calibration guideline.
The core workflow is complete: list ready workflows and generate images from them. Minor gaps exist, such as no workflow detail endpoint or explicit handling of input-image workflows, but these are edge cases rather than dead ends.