跳转到内容

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 重写可临时解决。

报错原文
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 路径问题同样已修复。

  1. 先确认你的 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"]
    }
    }
  2. 临时解决:手动把该 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"]
    }
    }
  3. 注意权衡:去掉 cmd /c 后 Claude Code 的 /doctor 可能重新报 "Windows requires 'cmd /c' wrapper to execute npx" 警告。某些 MCP 必须无包装才能工作(如 chrome-devtools),某些场景则相反(#1500 有用户反馈不加 cmd /c 才正常),请按你实际使用的 MCP 选择。

  4. 避免在 cc-switch 的 MCP 管理面板里再次编辑该条目——有用户反馈只要编辑保存一次,cmd /c 包装就会被重新加回去。

  5. 如果你的配置是给 WSL 里的 Claude Code 用的(配置文件位于 /home/<user>/.claude.json),升级 cc-switch 即可,WSL 场景的误包装问题维护者已确认修复(#673),MCP 目录随 Claude 目录切换的问题也已修复(#134)。

  6. Windows 原生场景的修复仍在跟踪中,请关注 cc-switch issue #1286 的进展。

ToolClaude Code
Version3.8.2 - 3.16.5(受影响版本范围;WSL 场景的误包装已在 #673 之后的新版修复,Windows 原生场景截至 3.16.5 仍未解决)
PlatformsWindowsLinux
为什么 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。本站不分发任何软件。