/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
AI Agent + PyCharm MCP 连接器配置与自定义 ComfyUI 执行器实战
让 AI 助手真正操控 PyCharm 终端、运行 ComfyUI 工作流 —— 从官方 MCP 到自建连接器的完整记录
Comfy MCP 公测:把 Claude、Cursor、CodeX、Hermes 和 WorkBuddy 变成你的创意技术专家
Comfy Cloud MCP Server 抢先体验申请图文教程
QClaw 配置 Comfy Cloud MCP,只需简单几步
WorkBuddy 接入 Comfy Cloud MCP 完整实录:从 DNS 污染到 31 个工具全部启用
WorkBuddy + 本地 Comfy MCP 实战:用自然语言调生成你的第一张 AI 图片
WorkBuddy 连接本地 ComfyUI:从零到出图的保姆级教程
WorkBuddy + 本地 ComfyUI Wan2.1 文生视频实战:从连续报错到成功出片的完整踩坑记录
WorkBuddy + 本地 ComfyUI 完全使用手册:从出图到视频生成
WorkBuddy + 本地 ComfyUI MCP:免订阅费的自建方案
omfyUI MCP 115 工具全景解析:你的 AI Agent 到底能做什么
一、背景:为什么需要 PyCharm MCP?
在日常 ComfyUI 开发中,我的终端被切分成多个标签:
| 终端 1 | ComfyUI 服务(python main.py –port 8189 …) |
| 终端 2 | comfyui-mcp 服务器(npx -y comfyui-mcp –http –port 9100) |
| 终端 3 | Git 操作 / 代码调试 |
AI 助手(WorkBuddy / Cursor / Copilot 等)虽然能读文件、写代码,但 无法进入 PyCharm 的终端环境 执行命令。当需要重启 ComfyUI、切换启动参数、提交工作流测试时,要么我自己手动操作,要么让 AI 在独立 shell 中重新构建整个环境 —— 后者往往是失败的,因为独立 shell 不会继承 PyCharm 终端里已激活的 .venv 虚拟环境。
MCP(Model Context Protocol) 正好解决了这个问题。PyCharm 2025.2+ 版本内置了 MCP 服务器,允许外部 AI 工具通过标准协议调用 IDE 功能。
二、PyCharm MCP 配置步骤
2.1 在 PyCharm 中启用 MCP Server
设置(Ctrl+Alt+S)→ 工具 → MCP Server
关键操作:
- 全称:在无需确认的情况下运行 Shell 命令或运行配置
- 不勾的话,每次执行命令 AI 都要弹窗等你点确认,效率极低

勾选“启用 MCP 服务器”之后,界面会切换出配置菜单;
往下滚动到菜单底部,找到“命令执行”选项并勾选。

2.2 在 WorkBuddy 中信任连接器
PyCharm 自动配置后,WorkBuddy 的 ~/.workbuddy/mcp.json 中会自动添加类似配置:
json
{
"mcpServers": {
"pycharm": {
"url": "http://127.0.0.1:64462/sse",
"disabled": false
}
}
}
然后进入 WorkBuddy → 连接器管理,找到 pycharm 条目,点击 "信任"。

信任后是如下界面:

2.3 验证连接
信任后,WorkBuddy 会显示 pycharm 连接器拥有的工具数。此时可以看到 pycharm_execute_tool 一个通用入口,实际支持 48 个子命令。
三、初次测试:踩坑记录
✅ 成功的测试
python
# 使用 venv Python 绝对路径,一切正常
execute_terminal_command –command "H:/PythonProjects3/Win_ComfyUI/.venv/Scripts/python.exe –version"
# 输出: Python 3.12.11 ✓
execute_terminal_command –command "netstat -ano | findstr :8189"
# 输出: 正确显示端口占用列表 ✓
❌ 失败的问题

问题 1:不继承虚拟环境
这是最大的坑。PyCharm MCP 的 execute_terminal_command 每次执行都会 启动一个全新的 shell 进程,不会继承你在 PyCharm 终端标签里已经激活的 .venv。这意味着:
python
# ❌ 这样不行!python 指向的是系统 Python,不是 venv 中的
execute_terminal_command –command "python –version"
# ✅ 必须用绝对路径
execute_terminal_command –command "H:/PythonProjects3/Win_ComfyUI/.venv/Scripts/python.exe –version"
问题 2:转义地狱
当命令中包含嵌套的引号时,Windows CMD 的转义规则会让你崩溃:
bash
# ❌ 多重转义后语法错误
curl.exe -X POST … -d "{\\\\"prompt\\\\":{\\\\"1\\\\":…}}"
# ✅ 解决方案:写脚本文件,然后执行脚本
python test_zimage.py
问题 3:端口冲突
旧的 MCP 服务器进程残留导致端口占用:
Error: listen EADDRINUSE: address already in use 127.0.0.1:9100
解决方案:用 PyCharm MCP 自己杀自己:
python
execute_terminal_command –command "taskkill /F /PID 84828"
四、自定义连接器:comfyui-runner
4.1 设计动机
PyCharm MCP 的"每次新进程不继承 venv"问题是架构性的,无法在配置层面解决。我需要一个 天生就在 venv 环境中运行 的 MCP 服务器,专门处理 ComfyUI 相关的操作。
4.2 技术选型
| Node.js MCP | 生态成熟 | 需要额外安装 npm 包 |
| Python mcp SDK | 已在 venv 中(v1.24.0),零额外依赖 | – |
| Python fastmcp | 更简洁的 API | 轻量封装,底层同 mcp |
选择 Python mcp stdio 模式:启动时用 .venv/Scripts/python.exe 作为解释器,天然继承整个虚拟环境。
4.3 架构设计
┌──────────────┐ stdio ┌───────────────────┐ REST API ┌──────────┐
│ WorkBuddy │ ◄──────────► │ comfyui-runner MCP │ ◄────────────► │ ComfyUI │
│ (AI 助手) │ JSON-RPC │ (server.py) │ HTTP :8189 │ :8189 │
└──────────────┘ └───────────────────┘ └──────────┘
│ │
│ 信任一次后自动运行 │ 运行在 ComfyUI .venv 中
│ │ 自动检测端口 → 8188/8189/8190
▼ ▼
~/.workbuddy/mcp.json H:/…/comfyui_mcp_runner/server.py
4.4 提供的 8 个工具
python
# 1. execute_python – 在 venv 中执行 Python 代码
execute_python(code="print('hello from venv')")
# 2. execute_shell – 执行 Shell 命令(自动替换 python 为 venv Python)
execute_shell(command="pip list | findstr torch")
# 3. comfyui_status – 检查 ComfyUI 运行状态
comfyui_status()
# → {"status": "running", "version": "0.27.0", "port": 8189, …}
# 4. comfyui_stop – 停止 ComfyUI
comfyui_stop()
# 5. comfyui_restart – 停止 + 启动
comfyui_restart(extra_args="–use-pytorch-cross-attention")
# 6. submit_workflow – 提交工作流并等待完成
submit_workflow(workflow_json='{"1": {…}}', timeout=120)
# → {"status": "completed", "images": [{"filename": "zimage_cat_00001_.png"}]}
# 7. list_outputs – 列出生成图片
list_outputs(count=10, prefix="zimage_cat")
# 8. read_file – 读取项目文件
read_file(path="test_zimage.py")
4.5 核心代码
python
# server.py 核心结构
from mcp.server import Server
from mcp.server.stdio import stdio_server
COMFYUI_DIR = Path(__file__).resolve().parent.parent
VENV_PYTHON = COMFYUI_DIR / ".venv" / "Scripts" / "python.exe"
server = Server("comfyui-runner")
@server.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "comfyui_status":
# 自动扫描 8188/8189/8190 端口
port = _get_comfyui_port()
# 请求 system_stats API
…
elif name == "submit_workflow":
# 提交 prompt → 轮询 history → 返回图片信息
…
async def main():
async with stdio_server() as (read_stream, write_stream):
await server.run(read_stream, write_stream, …)
4.6 注册到 WorkBuddy
在 ~/.workbuddy/mcp.json 中添加 stdio 类型的配置:
json
{
"comfyui-runner": {
"command": "H:/PythonProjects3/Win_ComfyUI/.venv/Scripts/python.exe",
"args": ["H:/PythonProjects3/Win_ComfyUI/comfyui_mcp_runner/server.py"],
"disabled": false
}
}
关键点:command 是 解释器路径,args 是 脚本路径。WorkBuddy 会启动 解释器 脚本 的子进程,通过 stdio 进行 JSON-RPC 通信。
4.7 comfyui-runner vs PyCharm MCP 互补策略
| venv 继承 | ✅ 天生继承 | ❌ 每次新进程 |
| Shell 命令 | ✅ 自动路径替换 | ⚠️ 需手动写绝对路径 |
| ComfyUI 工作流 | ✅ 内置提交/轮询 | ❌ 需手写 curl |
| PyCharm 编辑器 | ❌ 不支持 | ✅ 打开文件/搜索/替换 |
| 运行配置 | ❌ 不支持 | ✅ 执行 PyCharm 运行配置 |
| 启动方式 | 自动(stdio) | 需 PyCharm 保持运行 |
| 适用场景 | ComfyUI 运维、工作流测试 | IDE 操作、代码编辑 |
最佳实践:两者同时启用,WorkBuddy 会根据任务自动选择合适的连接器。
五、Z-Image Turbo 工作流实测
有了自定义连接器后,来实际测试一下 Z-Image Turbo 文生图。
5.1 模型准备
| UNET | z_image_turbo_bf16.safetensors | models/diffusion_models/ |
| CLIP | qwen_3_4b.safetensors | models/clip/ |
| VAE | z-image-ae.safetensors | models/vae/ |
注意:Z-Image Turbo 的 VAE 实际上复用了 Flux VAE,MD5 完全一致。可以用符号链接创建别名:
powershell
New-Item -ItemType SymbolicLink -Path "models/vae/z-image-ae.safetensors" -Target "models/vae/ae.safetensors"
5.2 工作流结构
json
{
"1": {"class_type": "UNETLoader", "inputs": {"unet_name": "z_image_turbo_bf16.safetensors", "weight_dtype": "default"}},
"2": {"class_type": "CLIPLoader", "inputs": {"clip_name": "qwen_3_4b.safetensors", "type": "qwen_image"}},
"3": {"class_type": "VAELoader", "inputs": {"vae_name": "z-image-ae.safetensors"}},
"4": {"class_type": "TextEncodeZImageOmni", "inputs": {"clip": ["2",0], "prompt": "…", "auto_resize_images": true, "vae": ["3",0]}},
"5": {"class_type": "EmptyLatentImage", "inputs": {"width": 1024, "height": 1024, "batch_size": 1}},
"6": {"class_type": "KSampler", "inputs": {"model": ["1",0], "positive": ["4",0], "negative": ["4",0], "latent_image": ["5",0], "seed": 42, "steps": 4, "cfg": 1.0, "sampler_name": "euler", "scheduler": "normal"}},
"7": {"class_type": "VAEDecode", "inputs": {"samples": ["6",0], "vae": ["3",0]}},
"8": {"class_type": "SaveImage", "inputs": {"filename_prefix": "zimage_cat", "images": ["7",0]}}
}
5.3 关键踩坑
坑 1:TextEncodeZImageOmni 只有 1 个输出
通过 /object_info/TextEncodeZImageOmni API 查询确认:这个节点只输出 一个 CONDITIONING(索引 0),不像 SDXL 的 CLIPTextEncode 那样输出 positive + negative 两个。所以 positive 和 negative 都要接到 ["4", 0]。
坑 2:–use-flash-attention 导致噪声图
第一次测试发现输出全是噪声。排查过程:
解决方案:重启 ComfyUI,去掉 –use-flash-attention,或显式指定 –use-pytorch-cross-attention。
5.4 测试结果
| euler + normal, 4 steps, seed=42 | ~21s | ⭐ 最佳:猫可识别,局部轻微伪影 |
| euler_ancestral + beta, 8 steps, seed=54321 | ~9s | ❌ 伪影严重 |
| euler + simple, 8 steps, seed=77777 | ~9s | ❌ 严重色块/条纹 |
| euler + normal, 4 steps, seed=99999 | ~6s | ⚠️ 伪影明显 |
结论:去掉 –use-flash-attention 后不再出纯噪声图,但 Z-Image Turbo 在当前环境下 仍不够稳定,对 seed 和 scheduler 高度敏感。euler + normal, 4 steps 是最佳组合,但无法保证每次都干净。
进一步优化方向:
- 用 –use-pytorch-cross-attention 显式启动再测
- 确认 z_image_turbo_bf16.safetensors 文件完整性(MD5 校验)
六、总结:MCP 连接器选型指南
经过这次完整实践,总结出 MCP 连接器的 三层金字塔 架构:
┌──────────────────┐
│ 自定义 MCP 服务器 │ ← 最高控制力,专用场景
│ (comfyui-runner) │
├──────────────────┤
│ IDE MCP 连接器 │ ← 中等控制力,IDE 操作
│ (PyCharm MCP) │
├──────────────────┤
│ 第三方 MCP 服务 │ ← 即开即用,功能固定
│ (comfyui-local) │
└──────────────────┘
选型建议:
| 日常生图 / 查模型 | comfyui-local(115 工具,即开即用) |
| 重启 ComfyUI / 改启动参数 | comfyui-runner(天生 venv 环境) |
| 编辑代码 / 搜索文件 | pycharm(IDE 深度集成) |
| 提交自定义工作流 | comfyui-runner(内置轮询等待) |
| ComfyUI 崩溃恢复 | comfyui-runner(stop + restart 一键) |
核心教训:
附录:完整文件清单
| comfyui_mcp_runner/server.py | 自定义 MCP 服务器源码(9 个工具) |
| ~/.workbuddy/mcp.json | MCP 连接器配置文件 |
| test_zimage.py | Z-Image Turbo 工作流测试脚本 |
本文为 ComfyCloudMCP 系列第 10 篇文章 上一篇:115 个 ComfyUI MCP 工具全景解析 环境:Windows 11 + PyCharm 2025.2 + ComfyUI v0.27.0 + Python 3.12 + RTX 3090



