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 使用者不該從那裡起步。