Skip to main content
Glama
README.md
# 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

A4.7/5.0

Scored across 2 tools

Disambiguation5/5

list_workflows and generate_image are completely distinct: one discovers available workflows, the other executes generation. There is no possibility of confusing their roles.

Naming Consistency5/5

Both tool names follow the same verb_noun pattern (list_workflows, generate_image), making the interface predictable and consistent.

Tool Count3/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues