claude mcp list 显示 ✘ Failed to connect - cc-switch (Claude Code)
Quick fix
Windows 下 cc-switch 会把 MCP 的 npx 命令自动包装成 cmd /c,破坏 stdio 管道导致连接失败;手动改回 ~/.claude.json 或用 claude mcp add 重写可临时解决。
Symptom
Section titled “Symptom”claude mcp list 显示 ✘ Failed to connect在 Windows 上,cc-switch 的 MCP 模块(claude_mcp.rs)在把配置写入 ~/.claude.json 时,会自动把用户填写的 command: npx 包装成 command: cmd、args: ["/c", "npx", ...]。这层包装是某次更新引入的,目的是消除 Claude Code /doctor 报的 "Windows requires 'cmd /c' wrapper to execute npx" 警告。
但 issue 之间存在明确矛盾:#453 希望加上 cmd /c 以消除 /doctor 警告;而 #5132 和 #1500 的用户报告这层包装破坏了 MCP 的 stdin/stdout 管道,导致 claude mcp list 显示 ✘ Failed to connect,浏览器与编辑器类 MCP 无法打通,手动用 claude mcp add 直接写 command: npx 反而正常。维护者将 #5132 按 #1286 的重复关闭,但有用户反馈"只要在 mcp 管理器里面编辑一次后,就多了 cmd /c 包装",问题并未解决。此外 #673 确认在 Windows 上编辑 WSL 的配置时也会被错误包装(is_wsl_path() 只认 \\wsl$ 开头的 UNC 路径),该 WSL 场景已由维护者确认修复;#134 的 WSL .claude.json 路径问题同样已修复。
先确认你的 MCP 失败是否由 cmd /c 包装引起:打开 ~/.claude.json,如果看到 command 是 "cmd"、args 以 "/c" 开头,即命中本问题。
~/.claude.json(问题状态,Windows 下被自动包装) "mcpServers": {"chrome-devtools": {"type": "stdio","command": "cmd","args": ["/c", "npx", "-y", "chrome-devtools-mcp@latest"]}}临时解决:手动把该 MCP 条目改回原始命令(command 改为 "npx",args 去掉 "/c" 前缀),或先执行 claude mcp remove 再用 claude mcp add 直接写入,可恢复正常连接(#5132 报告者确认有效)。
~/.claude.json(修复后,恢复原始 npx 命令) "mcpServers": {"chrome-devtools": {"type": "stdio","command": "npx","args": ["-y", "chrome-devtools-mcp@latest"]}}注意权衡:去掉 cmd /c 后 Claude Code 的 /doctor 可能重新报 "Windows requires 'cmd /c' wrapper to execute npx" 警告。某些 MCP 必须无包装才能工作(如 chrome-devtools),某些场景则相反(#1500 有用户反馈不加 cmd /c 才正常),请按你实际使用的 MCP 选择。
避免在 cc-switch 的 MCP 管理面板里再次编辑该条目——有用户反馈只要编辑保存一次,cmd /c 包装就会被重新加回去。
如果你的配置是给 WSL 里的 Claude Code 用的(配置文件位于 /home/<user>/.claude.json),升级 cc-switch 即可,WSL 场景的误包装问题维护者已确认修复(#673),MCP 目录随 Claude 目录切换的问题也已修复(#134)。
Windows 原生场景的修复仍在跟踪中,请关注 cc-switch issue #1286 的进展。
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 10 个真实 issue
- #134mcp 管理功能不支持 wsl
- #453[claude code skills] Windows requires 'cmd /c' wrapper to execute npx
- #673在 Windows 上编辑 WSL 配置时,MCP 服务器命令被错误地包装成 cmd /c 格式
- #1042fix: MCP import ignores external config changes
- #1500[BUG反馈] MCP配置功能异常
- #3082[Bug] 通过 claude mcp remove 卸载 MCP 后,切换供应商时被恢复
- #4644ccswitch 扩展功能中 MCP已有无法导入和添加无法注入问题
- #4645ccswitch 扩展功能中 MCP服务器管理 导入及保存 都无效
- #5132[Windows] MCP stdio 配置中 command 被错误包装为 cmd /c,导致 Claude Code 连接失败
- #5289CC-Switch 在Windows平台启动有黑框弹出。
- 为什么 cc-switch 要把 npx 包装成 cmd /c?
- 这是 cc-switch 的自动行为,引入是为了消除 Claude Code /doctor 报的 "Windows requires 'cmd /c' wrapper to execute npx" 警告,让 MCP Server 在 Windows 上能正常启动。但这层包装对部分 MCP(如 chrome-devtools)反而会破坏 stdio 通信。
- Windows 上启动 MCP 时弹出黑色控制台窗口,是 cc-switch 的问题吗?
- 不是。维护者在 #5289 中确认:cc-switch 只负责把配置写进 ~/.claude.json,从不启动 MCP 子进程;真正用 cmd /c 拉起 MCP Server 的是 Claude Code 自己,窗口是否隐藏取决于 Claude Code 的进程启动逻辑,需要向 Claude Code 官方反馈。cc-switch 自己发起的子进程调用已全部加了 CREATE_NO_WINDOW。
- 用 claude mcp remove 删掉的 MCP,为什么切换供应商后又回来了?
- 这是 #3082 报告的已知问题:cc-switch 切换供应商时会把数据库里所有 enabled 的 MCP 无条件写回 ~/.claude.json,数据库是唯一信任源,感知不到 CLI 侧的删除。临时方案是到 cc-switch 的 MCP 面板里删除对应条目;也可打开 ~/.CC-switch 下的 cc-switch.db,在 mcp_servers 表中删除对应记录,并删除供应商配置中的引用(用户 zouri 提供的方法)。
- 导入已有 MCP 时提示“未发现需要导入的 MCP 服务器”,或外部改了配置重新导入不生效,怎么办?
- 先检查:MCP 是否为全局安装、是否使用了自定义 claude config dir、配置是否在 ~/.claude.json 而不是 ~/.claude/.claude.json(#4645)。另外 #1042 确认了一个代码缺陷:导入函数只更新 app 标记、不合并外部对 url/args 等配置的修改,导致外部改动永远无法同步进 cc-switch,该 issue 目前仍是 open 状态。
- 我在 Windows 上用 cc-switch 管理 WSL 里的 Claude Code,配置也被包装成 cmd /c,怎么办?
- 这是 #673 报告的问题,原因是 is_wsl_path() 只识别 \\wsl$ 或 \\wsl.localhost 开头的 UNC 路径。维护者已回复“已修复,会随新版发布”,升级到最新版即可。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。