ComfyUI MCP Server
Dynamically loads ComfyUI workflows as MCP tools, enabling AI assistants to generate images, videos, and audio by executing workflows across categories like text-to-image, image-to-video, and text-to-audio with automatic parameter mapping and progress monitoring.
README
ComfyUI MCP 服务器
这是一个 Model Context Protocol (MCP) 服务器,用于动态加载和执行 ComfyUI 工作流。它会自动扫描指定文件夹中的工作流,并将每个工作流作为独立的工具暴露给大模型。
功能特点
- 动态加载 ComfyUI 工作流文件夹
- 基于描述文件的参数映射系统
- 通过 WebSocket 监听工作流执行进度
- 支持 WSL2 环境(自动绕过代理)
- 灵活的参数配置和默认值
- 支持自定义输出目录
快速开始
1. 安装和构建
# 克隆或进入项目目录
cd comfyui-mcp
# 安装依赖
npm install
# 构建项目
npm run build
# 记录当前目录的绝对路径(后续配置需要)
pwd # 例如:/home/username/comfyui-mcp
2. 配置环境
WSL2 用户:检测 Windows 主机 IP
bash scripts/detect-wsl2-host.sh
创建配置文件
cp .env.example .env
编辑 .env 文件:
# ComfyUI 工作流文件夹路径
WORKFLOWS_DIR=./workflows
# ComfyUI 服务器配置
COMFYUI_HOST=172.22.240.1 # WSL2 中的 Windows 主机 IP
COMFYUI_PORT=8000
# 绕过系统代理(WSL2 环境建议开启)
BYPASS_PROXY=true
3. 测试连接
node test-connection.js
4. 在 Claude Desktop 中配置
编辑 Claude Desktop 配置文件:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
添加 MCP 服务器配置(使用绝对路径):
{
"mcpServers": {
"comfyui": {
"command": "npx",
"args": ["/absolute/path/to/comfyui-mcp"],
"env": {
"WORKFLOWS_DIR": "/absolute/path/to/comfyui-mcp/workflows",
"COMFYUI_HOST": "172.22.240.1",
"COMFYUI_PORT": "8000",
"BYPASS_PROXY": "true"
}
}
}
}
示例配置(WSL2):
{
"mcpServers": {
"comfyui": {
"command": "npx",
"args": ["/home/yarnb/xcan/comfyui-mcp"],
"env": {
"WORKFLOWS_DIR": "/home/yarnb/xcan/comfyui-mcp/workflows",
"COMFYUI_HOST": "172.22.240.1",
"COMFYUI_PORT": "8000",
"BYPASS_PROXY": "true"
}
}
}
}
注意事项:
WORKFLOWS_DIR必须是绝对路径COMFYUI_HOST使用检测脚本获取的 IP- 配置后需要重启 Claude Desktop
5. 验证安装
重启 Claude Desktop 后,在对话中输入:
使用 Qwen 模型生成一张中国山水画
Claude 会自动识别并调用对应的工具。
6. 使用自定义输出目录
所有工具都支持指定输出目录参数:
使用 run_text_to_image_workflow_flux_schnell 工具生成图片,
prompt: "beautiful sunset",
output_dir: "/home/username/my_images"
如果不指定 output_dir,文件将保存到默认的 outputs 目录。
工作流组织结构
工作流按照功能分类组织,每个工作流都在独立的文件夹中:
workflows/
├── text-to-image/ # 文本生成图像
│ └── image_qwen_image/ # Qwen 视觉语言模型
├── image-to-image/ # 图像转图像/编辑
│ ├── omnigen2_image_edit/ # OmniGen2 智能编辑
│ ├── qwen_image_edit/ # Qwen 图像编辑
│ ├── qwen_image_controlnet_patch/ # Qwen + ControlNet Patch
│ ├── qwen_image_instantx_controlnet/ # Qwen + InstantX ControlNet
│ ├── qwen_image_union_control/ # Qwen + Union Control
│ ├── rmbg_multiple_models/ # 多模型背景移除
│ └── yolo_cropper/ # YOLO 智能裁剪
├── image-to-video/ # 图像生成视频
│ ├── wan2_2_14b_i2v/ # WAN 2.2 14B 图生视频
│ └── wan2_2_14b_flf2v/ # WAN 2.2 14B 首尾帧插值
├── text-to-video/ # 文本生成视频
│ └── wan2_2_14b_t2v/ # WAN 2.2 14B 文生视频
├── text-to-audio/ # 文本生成音频
│ ├── audio_ace_step_1_t2a_instrumentals/ # ACE 纯器乐生成
│ └── audio_ace_step_1_t2a_song/ # ACE 带歌词音乐生成
└── audio-to-audio/ # 音频编辑
└── audio_ace_step_1_a2a_editing/ # ACE 音频编辑
每个工作流文件夹包含:
├── workflow.json # ComfyUI 导出的工作流 JSON(统一命名)
├── descriptor.json # 参数描述文件(包含分类信息)
└── README.md # 工作流详细说明(可选)
描述文件格式
descriptor.json 定义了工作流的参数及其在 JSON 中的路径:
{
"description": "工作流的描述",
"parameters": [
{
"name": "prompt", // 参数名称
"type": "string", // 参数类型(string/number/boolean)
"subtype": "image", // 子类型(可选,用于标识特殊参数如图片)
"description": "描述词", // 参数说明
"required": true, // 是否必需
"path": "6.inputs.text", // JSON 路径
"default": "默认值" // 默认值(可选)
}
]
}
参数路径说明
path 字段使用点号分隔的路径来定位 JSON 中的值:
"6.inputs.text"对应workflow[6].inputs.text"3.inputs.seed"对应workflow[3].inputs.seed
添加新工作流
步骤 1:导出 ComfyUI 工作流
- 在 ComfyUI 中创建或打开工作流
- 点击菜单 → Save (API Format)
- 保存 JSON 文件
步骤 2:创建工作流文件夹
根据工作流类型选择正确的分类目录:
text-to-image/- 文本生成图像image-to-image/- 图像编辑、转换、处理image-to-video/- 图像生成视频text-to-video/- 文本生成视频text-to-audio/- 文本生成音频/音乐audio-to-audio/- 音频编辑、风格转换
# 例如添加一个新的文生图工作流
mkdir workflows/text-to-image/my_workflow
# 复制工作流文件(必须命名为 workflow.json)
cp path/to/exported.json workflows/text-to-image/my_workflow/workflow.json
步骤 3:创建描述文件 (descriptor.json)
创建 workflows/[category]/my_workflow/descriptor.json:
{
"description": "详细的工具能力描述(参考下方编写指南)",
"category": "text-to-image",
"parameters": [
{
"name": "prompt",
"type": "string",
"description": "参数的详细说明,包含使用建议",
"required": true,
"path": "6.inputs.text",
"default": "默认值示例"
},
{
"name": "input_image",
"type": "string",
"subtype": "image", // 标记为图片参数,系统会自动处理上传
"description": "输入图片路径",
"required": true,
"path": "10.inputs.image",
"default": ""
}
]
}
📝 描述文件编写指南
1. 工具描述 (description) 编写要点
必须包含的信息:
- 核心功能:这个工具能做什么
- 技术特点:使用什么模型/技术,有何独特优势
- 应用场景:适合什么场景使用
- 关键参数:重要的参数说明(如分辨率、时长等)
- 特殊要求:如必须提供的输入
⚠️ 重要:参数默认值处理规则
- 必填参数(required: true):
- 不应设置默认值,或设置为空字符串
"" - 用户必须明确提供输入值
- 例如:正面提示词、输入图片路径、音频描述等
- 不应设置默认值,或设置为空字符串
- 非必填参数(required: false):
- 影响创作结果的参数(如负面提示词)应设为
null而非具体值 - 技术参数(如 steps、cfg、seed)可以有合理的默认值
- 避免预设内容影响用户的创作意图
- 影响创作结果的参数(如负面提示词)应设为
好的描述示例:
{
"description": "使用 FLUX.1 Schnell 极速版模型,仅需4步即可生成高质量图像,是速度最快的文生图模型。特别优化了生成速度,适合需要快速预览、实时交互或批量生成的场景。虽然步数少但质量依然出色,支持1024x1024及更高分辨率。是快速原型设计的首选。"
}
描述模板:
使用 [模型名称] [核心功能描述]。[技术特点说明]。[适用场景列举]。[关键能力或限制]。[特殊说明]。
2. 参数描述 (parameter description) 编写要点
必须说明的内容:
- 参数的作用
- 可接受的值或范围
- 对结果的影响
- 使用建议
参数描述示例:
{
"parameters": [
{
"name": "prompt",
"description": "描述想要生成的图像内容,支持中英文,越详细效果越好"
},
{
"name": "denoise",
"description": "去噪强度 (0-1):0.1-0.3轻微修改,0.4-0.7中等变化,0.8-1.0大幅重绘"
},
{
"name": "duration",
"description": "音频时长(秒):1-5秒短音效,10-30秒音乐片段,30-180秒完整作品"
},
{
"name": "input_image",
"type": "string",
"subtype": "image", // 重要:图片参数必须添加此标记
"description": "输入图片的绝对路径,支持 jpg/png 等常见格式"
}
]
}
特殊参数类型说明:
-
图片参数:必须添加
"subtype": "image"标记- 系统会自动检测并处理图片上传
- 支持本地文件路径(自动上传)或已上传的文件名
- 支持多个图片输入(如 start_image、end_image)
-
输出目录参数(自动添加到所有工具):
- 参数名:
output_dir - 类型:string(可选)
- 功能:指定生成文件的保存位置
- 示例:
"/home/username/project/assets" - 默认:项目根目录下的
outputs文件夹
- 参数名:
3. 分类选择指南
| 分类 | 说明 | 工具名称格式 |
|---|---|---|
| text-to-image | 根据文本生成图像 | run_text_to_image_workflow_[name] |
| image-to-image | 修改或转换现有图像 | run_image_to_image_workflow_[name] |
| image-to-video | 静态图像转动态视频 | run_image_to_video_workflow_[name] |
| text-to-video | 根据文本生成视频 | run_text_to_video_workflow_[name] |
| text-to-audio | 根据文本生成音频/音乐 | run_text_to_audio_workflow_[name] |
| audio-to-audio | 编辑或转换现有音频 | run_audio_to_audio_workflow_[name] |
步骤 4:创建 README.md(可选但推荐)
为工作流创建详细文档 workflows/[category]/my_workflow/README.md:
# 工作流名称
## 概述
工作流的详细介绍
## 工作流特点
- 特点1
- 特点2
## 主要参数
详细的参数说明
## 使用示例
具体的使用案例
## 注意事项
使用时的注意点
步骤 5:查找参数路径
- 打开工作流 JSON 文件
- 找到需要暴露的参数节点
- 记录节点 ID 和输入字段名
- 组合成路径格式:
节点ID.inputs.字段名
例如,在 JSON 中找到:
{
"6": {
"inputs": {
"text": "提示词内容"
}
}
}
对应路径为:6.inputs.text
步骤 6:重启 Claude Desktop
添加新工作流后,需要重启 Claude Desktop 以重新加载工作流。
📚 描述编写最佳实践
让 AI 更好理解你的工具
✅ 好的工具描述
"description": "基于现有图像进行智能修改和风格转换的强大工具。可以将照片转换为不同艺术风格(油画、水彩、动漫等),修改图像内容(更换背景、改变季节、调整光线),或增强图像质量。通过调节去噪强度(denoise)精确控制修改程度,从轻微调整到完全重绘。必须提供输入图片路径。"
为什么好?
- 明确说明了工具的核心能力(修改、转换)
- 列举了具体功能(风格转换、内容修改、质量增强)
- 提供了关键参数说明(denoise)
- 强调了必需输入(图片路径)
❌ 差的工具描述
"description": "图生图工作流"
为什么差?
- 太简短,AI 不知道具体能做什么
- 没有说明使用场景
- 缺少技术特点
参数描述技巧
1. 对于数值参数,提供范围和效果说明
{
"name": "cfg",
"description": "CFG强度(1-20):1-3创意自由,4-7平衡效果,8-20严格遵循提示"
}
2. 对于文件路径,说明格式要求
{
"name": "input_image",
"description": "输入图片的绝对路径,支持 jpg/png/webp 格式,建议分辨率不低于512x512"
}
3. 对于选择型参数,列出所有选项
{
"name": "style",
"description": "艺术风格:realistic(写实)、anime(动漫)、oil_painting(油画)、watercolor(水彩)"
}
4. 对于复杂参数,提供示例
{
"name": "prompt",
"description": "图像描述,示例:'阳光明媚的海滩,椰子树,蓝天白云,4K高清,专业摄影'"
}
常用描述词汇参考
技术特点词汇:
- 极速生成、高质量、专业级、优化版、增强版
- 智能识别、精确控制、自动优化、实时处理
- 支持批量、多格式兼容、高分辨率
应用场景词汇:
- 适合...场景、特别擅长...、专为...优化
- 创意设计、专业制作、快速原型、批量处理
- 个人创作、商业应用、教育演示
能力描述词汇:
- 可以...、支持...、能够...、实现...
- 生成、转换、修改、增强、优化、创建
- 自定义、调节、控制、设置
📖 相关文档
- Negative Prompt 使用规范 - 了解如何正确编写负向提示词
✔️ 添加工作流前的检查清单
在添加新工作流前,请确保:
- [ ] 工作流放在正确的分类文件夹中
- [ ] workflow.json 文件名正确
- [ ] descriptor.json 包含 category 字段
- [ ] 工具描述清晰说明了能力和使用场景
- [ ] 每个参数都有详细的描述
- [ ] 必需参数都标记为 required: true
- [ ] 提供了合理的默认值
- [ ] 参数路径 (path) 正确对应 JSON 节点
- [ ] (可选)创建了 README.md 详细文档
开发模式
本地开发
# 开发模式(自动重载)
npm run dev
# 重新构建
npm run build
直接运行
# 直接运行编译后的文件
node dist/index.js
# 或在 Claude 配置中使用
{
"command": "node",
"args": ["/absolute/path/to/comfyui-mcp/dist/index.js"]
}
故障排除
Claude Desktop 无法找到工具
- 确认项目路径正确(使用绝对路径)
- 检查 Claude 配置文件格式是否正确
- 查看 Claude 的开发者工具日志
WSL2 连接问题
如果无法连接到 Windows 上的 ComfyUI:
- 确保 ComfyUI 启动时使用
--listen 0.0.0.0参数 - 检查 Windows 防火墙是否允许端口访问
- 运行
scripts/detect-wsl2-host.sh重新检测 IP - 确保
BYPASS_PROXY=true已设置
工作流加载失败
检查以下几点:
- 工作流文件夹名称与内部 JSON 文件名一致
descriptor.json格式正确- JSON 路径与实际工作流结构匹配
- 查看控制台错误信息
npx 执行错误
如果 npx 无法执行:
# 确保使用绝对路径
npx /home/username/comfyui-mcp
# 或直接使用 node
node /home/username/comfyui-mcp/dist/index.js
工作原理
- 工作流加载:启动时扫描
workflows文件夹的分类目录,加载所有工作流 - 工具注册:每个工作流注册为
run_{category}_workflow_{name}格式的工具- 例如:
run_text_to_image_workflow_flux_schnell - 例如:
run_image_to_video_workflow_image_to_video_wan
- 例如:
- 参数处理:接收输入参数,根据描述文件的路径映射修改工作流 JSON
- 执行监控:通过 WebSocket 连接 ComfyUI,监听执行进度
- 结果返回:执行完成后返回生成结果
示例工作流
项目包含多个分类的专业工作流:
文本生成图像 (text-to-image)
run_text_to_image_workflow_image_qwen_image- Qwen 视觉语言模型,支持中英文提示词
图像编辑与处理 (image-to-image)
run_image_to_image_workflow_omnigen2_image_edit- OmniGen2 多模态图像编辑run_image_to_image_workflow_qwen_image_edit- Qwen 智能图像编辑run_image_to_image_workflow_qwen_image_controlnet_patch- Qwen + ControlNet 精确控制run_image_to_image_workflow_qwen_image_instantx_controlnet- Qwen + InstantX 深度控制run_image_to_image_workflow_qwen_image_union_control- Qwen + Union Control 边缘控制run_image_to_image_workflow_rmbg_multiple_models- 多模型背景移除run_image_to_image_workflow_yolo_cropper- YOLO 智能物体检测与裁剪
视频生成 (image-to-video & text-to-video)
run_image_to_video_workflow_wan2_2_14b_i2v- WAN 2.2 14B 图片转动态视频run_image_to_video_workflow_wan2_2_14b_flf2v- WAN 2.2 14B 首尾帧智能插值run_text_to_video_workflow_wan2_2_14b_t2v- WAN 2.2 14B 文本生成视频
音频与音乐生成 (text-to-audio & audio-to-audio)
run_text_to_audio_workflow_audio_ace_step_1_t2a_instrumentals- ACE 纯器乐音乐生成run_text_to_audio_workflow_audio_ace_step_1_t2a_song- ACE 带歌词歌曲生成run_audio_to_audio_workflow_audio_ace_step_1_a2a_editing- ACE 音频智能编辑
使用示例:
# 文本生成图像
run_text_to_image_workflow_image_qwen_image:
prompt: "山水画,中国传统风格,青山绿水"
width: 1024
height: 1024
output_dir: "/home/user/outputs"
output_name: "chinese_painting"
# 智能图像编辑
run_image_to_image_workflow_qwen_image_edit:
input_image: "/path/to/image.jpg"
positive_prompt: "去除图片中的文字水印"
output_dir: "/home/user/outputs"
output_name: "clean_image"
# 背景移除
run_image_to_image_workflow_rmbg_multiple_models:
input_image: "/path/to/product.jpg"
model: "BEN2"
output_dir: "/home/user/outputs"
output_name: "transparent_bg"
# 图片生成视频
run_image_to_video_workflow_wan2_2_14b_i2v:
input_image: "/path/to/landscape.jpg"
positive_prompt: "缓慢的云朵飘动,阳光穿过云层"
length: 81
fps: 16
output_dir: "/home/user/videos"
output_name: "animated_landscape"
# 音乐生成
run_text_to_audio_workflow_audio_ace_step_1_t2a_song:
tags: "anime, j-pop, female vocals, piano, emotional"
lyrics: "[verse]\n春の風が吹いて\n桜の花びら舞う\n[chorus]\n君と歩いた道\n忘れない思い出"
seconds: 120
output_dir: "/home/user/music"
output_name: "spring_song"
环境变量说明
| 变量 | 说明 | 默认值 |
|---|---|---|
WORKFLOWS_DIR |
工作流文件夹路径 | ./workflows |
COMFYUI_HOST |
ComfyUI 服务器地址 | localhost |
COMFYUI_PORT |
ComfyUI 服务器端口 | 8000 |
BYPASS_PROXY |
是否绕过系统代理 | true |
许可证
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。