Skip to main content

comfyui-mcp 是 stdio —— 它不能做成 compose 服务

comfyui-mcp 是一个 stdio MCP 服务器。它没有端口,也不在网络上暴露任何东西: MCP 客户端(Claude Code、Cursor、MCP 桥接……)会把它作为子进程拉起,通过 stdin/stdout 交谈。 所以在 docker-compose.yml 里加一个 comfyui-mcp 服务是死胡同 —— 它会启动,没人 跟它说话,然后退出。几乎每个把 ComfyUI 接到 compose 的人都会踩这个坑,因为一份正确的 compose 文件看起来像是「少」了一个服务。其实没有:你 compose 的是 ComfyUI,MCP 服务器跑在 MCP 客户端所在的地方,通过普通 HTTP 用 COMFYUI_URL 到达 ComfyUI。
启动服务器的 npx 命令要求跑它的那台机器(或容器)上有 Node.js >= 22 —— 精简基础镜像最容易踩的坑。

两种部署形态

本地 npx + 本地 ComfyUI

默认形态。ComfyUI 直接跑在你的机器上;MCP 客户端拉起 npx -y comfyui-mcp@latest,它会自动检测本地安装和端口。不需要配置。见 安装

本地 npx + 容器化 / 远程 ComfyUI

ComfyUI 跑在容器里(或另一台主机上);MCP 客户端仍然在本地拉起 comfyui-mcp, 用 COMFYUI_URL(或 --comfyui-url)指向它。非回环 URL 会让服务器进入 远程模式:所有 HTTP 工具都能用 —— 包括通过 ComfyUI-Manager HTTP API 安装 自定义节点。需要文件系统或本地进程的工具(安装 ComfyUI 本身、comfy-cli 操作、 读日志、删除模型文件)会返回明确错误。

示例:docker-compose 里的 ComfyUI

仓库里有一份开箱即用的例子,在 docker/compose/ —— ComfyUI 作为一个服务(默认 NVIDIA,AMD/ROCm 变体在注释里),模型与输出的绑定 挂载,以及写在文件头注释里的客户端配置:
然后把 MCP 客户端指向这个容器。在主机上(常见情况 —— Claude Code 和容器在同一台 机器),用发布出来的端口:
如果 MCP 客户端跑在同一网络上的另一个 compose 服务里(例如给 Open WebUI 做前端的 MCP-to-HTTP 桥接),请用 compose 服务名,不要用 localhost
这种布局里,拉起 comfyui-mcp 的是桥接服务,所以它的镜像必须带 Node.js >= 22,并且能 通过 npx -y comfyui-mcp@latest 启动服务器。桥接是第三方软件 —— 按它自己的文档配置; 示例 compose 文件里有一段注释掉的草图。

AMD / ROCm 注意事项

  • 使用 yanwk/comfyui-boot:rocm 镜像标签,并在示例里取消注释 ROCm 透传 —— 人们常漏 的几处:devices: [/dev/kfd, /dev/dri]group_add: [video]security_opt: [seccomp:unconfined]
  • comfyui-mcp 本身没有 GPU/CUDA 依赖 —— ROCm 主机完全支持。 智能体面板 是一个 ComfyUI 扩展,不是服务;当你用外部前端当 界面时,它可以不装。
  • 本仓库的 docker/runpod/ 是一份 面向 CUDA 的 RunPod 云镜像(见 云端部署),不是通用 ComfyUI 镜像 —— AMD 用户不该从那里起步。