1. 项目概述与核心价值

如果你和我一样,深度使用 Claude Code 作为日常开发的主力 AI 助手,那么管理其 MCP 服务器绝对是个绕不开的痛点。Claude Code 的 Model Context Protocol 功能强大,能通过第三方服务器接入文件系统、数据库甚至浏览器,极大地扩展了 AI 的能力边界。但问题也随之而来:项目一多,配置的 MCP 服务器就杂,有些只在特定项目需要,长期开着不仅占用资源,还可能带来安全风险或配置冲突。官方 claude mcp 命令虽然提供了基础的增删查改,但每次切换都像在手动编辑配置文件,繁琐且容易出错。

这就是 claude-mcp-switch 诞生的背景。它不是一个全新的 MCP 管理平台,而是一个极其轻量、零依赖的 CLI 工具,核心目标只有一个:让你能像开关电灯一样,轻松地启用或禁用已配置的 Claude Code MCP 服务器。它的设计哲学非常明确—— 做最少的事,但做到极致可靠 。它不尝试替换或包装 claude CLI,而是巧妙地利用它,读取你的真实运行配置,并在此基础上增加一个“软开关”层。这意味着,你通过它禁用的服务器,其完整配置会被安全地备份起来,随时可以一键恢复,而无需重新记忆复杂的 claude mcp add 命令参数。

对我而言,它的价值在于将“管理”变成了“操作”。以前我需要记住哪个服务器对应哪个项目,手动执行 claude mcp remove ,等需要时再翻出笔记重新添加。现在,只需要 ccmcp disable <name> ccmcp enable <name> ,一切都在瞬间完成,状态清晰可见。尤其对于需要频繁在多个开发环境(比如前端项目用到的浏览器自动化 MCP 和后台项目用到的数据库 MCP)之间切换的开发者来说,这工具节省的心智成本和时间成本是实实在在的。

2. 核心设计思路与实现原理拆解

2.1 为什么是“零依赖”的 npx CLI?

初次看到“零依赖”的 npx 工具,你可能会好奇它是如何工作的。这其实是现代 Node.js 生态中一种非常优雅的轻量级工具分发模式。 claude-mcp-switch 本身不依赖任何第三方 npm 包(除了开发依赖),它的 package.json 里没有 dependencies 字段。这意味着:

  1. 极速安装与执行 :当你运行 npx claude-mcp-switch 时,npm 会直接从 registry 下载这个包并临时安装执行,过程几乎瞬间完成,没有复杂的依赖树需要解析和安装,用户体验接近原生命令。
  2. 无环境污染 :由于是临时安装,它不会在你的全局 node_modules 中留下任何痕迹,避免了版本冲突和“我到底装了什么”的困扰。
  3. 降低使用门槛 :用户无需先执行 npm install -g ,降低了初次尝试的心理负担和操作步骤,一句 npx 命令就能体验全部功能。

那么,零依赖如何实现复杂功能?答案在于它巧妙地利用了 Node.js 的内置模块和系统命令。

  • 文件操作 :使用 fs/promises path 等核心模块处理配置文件的读写和路径解析。
  • 子进程管理 :使用 child_process 模块的 execFile spawn 来可靠地调用底层的 claude CLI 命令,并捕获其输出和错误码。
  • 参数解析 :虽然可以自己解析 process.argv ,但为了更好的开发者体验,它合理使用了 commander 这个开发依赖来构建清晰的 CLI 界面。注意, commander devDependencies ,在打包发布时,工具会通过 npm 的打包配置(或许配合 pkg ncc )将所需的最小化代码直接捆绑进单一可执行文件或入口脚本中,因此最终用户运行时依然不需要安装它。

这种设计体现了“工具链思维”:不重复造轮子,而是作为现有强大工具( claude CLI)的一个贴心“增强插件”。

2.2 状态管理的核心:与 claude CLI 的协同

这是理解 claude-mcp-switch 如何工作的关键。它没有自己维护一套独立的 MCP 服务器列表,而是始终以官方的 claude CLI 为唯一信源。

“启用”状态 :直接通过 claude mcp list 命令获取。这个命令返回的是 Claude Code 应用当前实际加载和使用的服务器列表。工具会解析这个列表,将其标记为“活跃”。

“禁用”状态 :这是工具自己维护的。当你执行 disable 命令时,它会:

  1. 先调用 claude mcp get <server-name> 获取该服务器的完整配置信息(包括 transport 类型、command、args、env 等所有细节)。
  2. 将这个配置对象以 JSON 格式,安全地存储到用户目录下的一个特定文件中(例如 ~/.claude-mcp-switch/disabled-servers.json )。
  3. 最后,调用 claude mcp remove <server-name> ,将其从 Claude Code 的活跃配置中真正删除。

这样一来,“禁用”本质上就是“备份配置并移除”,而“启用”则是“从备份恢复配置并重新添加”。这个设计的好处非常明显:

  • 一致性 :工具看到的“活跃”列表永远和 Claude Code 应用内部保持一致,不会出现工具显示启用但实际未加载的尴尬情况。
  • 安全性 :配置备份是完整的,恢复时能确保服务器行为和禁用前一模一样,包括那些容易忘记的环境变量或复杂参数。
  • 透明性 :你可以随时用原生 claude mcp 命令验证状态,工具没有引入任何黑魔法。

实操心得:理解 claude mcp 命令的输出格式 工具需要稳定地解析 claude mcp list 的输出。在早期版本中,如果 Claude CLI 的输出格式稍有变动(比如表格的列宽、分隔符),解析逻辑就可能出错。一个健壮的实现不能只依赖简单的字符串分割。更可靠的做法是:

  1. 优先尝试使用 --json 输出标志(如果 claude CLI 支持),直接获得结构化数据。
  2. 如果不支持,则使用更稳健的解析器,比如按行解析,通过表头确定列边界,或者使用正则表达式匹配关键模式。
  3. claude-mcp-switch 的源码中,可以看到它很可能使用了 claude mcp list --json 来获得稳定解析,这是与底层 CLI 交互的最佳实践。

2.3 配置文件的存储策略与兼容性

工具需要将禁用的服务器配置持久化存储。它选择了 ~/.claude-mcp-switch/ 这个目录。这个选择有几个考量:

  1. 遵循 XDG 基目录规范(如果考虑更周全) :在 Linux 系统上,严格遵循规范的工具可能会将数据存储在 $XDG_DATA_HOME/claude-mcp-switch/ (通常是 ~/.local/share/claude-mcp-switch/ )。但 ~/.claude-mcp-switch 更为直观,且与 ~/.claude 配置目录并列,用户更容易找到。
  2. 跨平台路径处理 :工具必须正确处理不同操作系统的路径。它不能硬编码 /home/user C:\Users\user 。通过 Node.js 的 os.homedir() 函数可以动态获取用户主目录,再拼接上相对路径 .claude-mcp-switch ,就能实现跨平台兼容。
  3. 文件格式与结构 :使用 JSON 格式存储是自然的选择,因为它易于读写、人类可读(便于调试),且与 claude mcp get 命令的 JSON 输出天然兼容。文件结构可能是一个对象,以服务器名称为键,对应的完整配置对象为值。
  4. 并发安全 :虽然 CLI 工具通常单线程运行,但理论上如果两个终端同时运行该工具操作同一个服务器,可能会造成文件读写冲突。一个健壮的实现会在写入文件时使用锁机制(如 fs.writeFile 配合 wx 标志创建文件锁,或使用更复杂的库),或者至少通过错误处理来提示用户。

3. 从安装到上手:全平台实操指南

3.1 环境准备与前置条件

在开始使用 claude-mcp-switch 之前,你需要确保基础环境已经就绪。这不仅仅是安装 Node.js 那么简单。

1. Node.js 版本管理建议 工具要求 Node.js >= 18。我强烈建议不要直接使用系统自带的 Node.js,而是使用版本管理工具,如 nvm (macOS/Linux) 或 nvm-windows 。这允许你为不同项目切换 Node.js 版本,且安装过程更干净。

# 使用 nvm 安装并切换到 LTS 版本(通常 >= 18)
nvm install --lts
nvm use --lts

安装后,在终端运行 node --version 确认版本符合要求。

2. 安装并配置 Claude Code CLI 这是最关键的一步。 claude-mcp-switch 的所有功能都建立在 claude 命令可用且已登录的基础上。

  • 安装 :请务必遵循 Claude 官方的安装指南。通常,你需要从 Claude 官网下载 Claude Code 应用,安装后,其 CLI 工具应该会自动添加到你的系统 PATH 中。在某些系统上,可能需要手动在应用设置中启用“安装命令行工具”选项。
  • 验证 :打开终端,输入 claude --version 。如果看到版本号输出,说明 CLI 安装成功。如果提示“command not found”,你需要检查:
    • macOS/Linux: echo $PATH 查看路径是否包含 Claude CLI 的安装目录(如 /usr/local/bin )。
    • Windows: 检查系统环境变量 PATH ,确认 Claude 的安装目录(如 C:\Users\<YourName>\AppData\Local\Programs\Claude )是否在其中。
  • 登录与配置 :首次运行 claude 命令可能会引导你进行登录或授权。请确保你已登录正确的 Anthropic 账户,并且已经在 Claude Code 应用中配置了至少一个 MCP 服务器。你可以通过 claude mcp list 命令来验证是否有已配置的服务器。

3. 基础 MCP 服务器配置示例 为了测试 claude-mcp-switch ,你需要一个可操作的 MCP 服务器。这里以配置一个简单的“文件系统”MCP 服务器为例(假设 Claude Code 支持此配置方式):

# 这是一个示例命令,实际参数请参考具体 MCP 服务器的文档
claude mcp add filesystem --transport stdio --command node --args /path/to/mcp-server-filesystem/index.js

配置成功后, claude mcp list 应该会显示一个名为 filesystem 的活跃服务器。

3.2 多种安装与使用方式详解

claude-mcp-switch 提供了极大的灵活性,你可以根据使用频率和场景选择最适合的方式。

方式一:临时使用(推荐初次体验)—— npx 这是最快捷、无侵入的方式。npx 会自动从 npm 仓库下载最新版本的包并执行。

# 列出所有服务器(包括活跃和禁用的)
npx claude-mcp-switch list

# 禁用名为 'playwright' 的服务器
npx claude-mcp-switch disable playwright

# 启用之前禁用的 'playwright' 服务器
npx claude-mcp-switch enable playwright

# 使用 --dry-run 预览禁用操作,而不实际执行
npx claude-mcp-switch disable playwright --dry-run

注意 :每次使用 npx 都会触发一次网络下载(除非有本地缓存)。对于频繁使用的命令,这可能会稍有延迟。但对于偶尔使用或脚本中调用,这非常完美。

方式二:全局安装(适合高频用户)—— npm install -g 如果你打算经常使用这个工具,全局安装是更好的选择,它会提供一个简短的命令别名 ccmcp

# 全局安装
npm install -g claude-mcp-switch

# 安装后,你可以使用更短的 `ccmcp` 命令
ccmcp list
ccmcp enable github
ccmcp disable github --dry-run

安装后, ccmcp 命令在任何终端会话中都可用。你可以通过 npm update -g claude-mcp-switch 来更新到最新版本。

方式三:从源码运行(适合开发者或贡献者) 如果你想研究其实现、修改代码或参与贡献,可以从 GitHub 克隆仓库。

# 克隆仓库
git clone https://github.com/jandroav/claude-mcp-switch.git
cd claude-mcp-switch

# 安装开发依赖(包括测试框架、代码检查工具等)
npm install

# 将本地项目链接到全局 npm 空间,创建 `ccmcp` 命令的软链接
npm link
# 执行后,你就可以在系统的任何地方使用 `ccmcp` 命令了,它指向你的本地开发目录。

# 运行测试,确保你的修改没有破坏原有功能
npm test

# 当你完成开发并想解除链接时
npm unlink -g ccmcp
# 或者在项目目录内运行
npm unlink

这种方式让你能实时测试代码改动,是参与开源项目的基础。

方式四:直接运行源码(无需 npm link) 如果你不想进行全局链接,也可以直接使用 Node.js 运行源码文件。

# 在项目根目录下
node ./src/ccmcp.js list

# 或者指定一个自定义的 Claude 配置文件路径(在某些高级场景下有用)
node ./src/ccmcp.js enable github --config ~/.claude/custom-settings.json

这对于调试或在不方便全局安装的环境(如某些容器或受限服务器)中运行非常有用。

3.3 核心命令深度解析与使用技巧

掌握了安装方法,我们来深入看看每个命令的细节、参数和实际应用场景。

list 命令:你的 MCP 服务器仪表盘 ccmcp list 不仅仅是 claude mcp list 的简单包装。它提供了增强的视图:

  • 状态融合 :同时展示从 claude CLI 获取的“活跃”服务器和你本地存储的“禁用”服务器,让你对整体情况一目了然。
  • 美化输出 :使用 ASCII 边框和颜色高亮(在支持颜色的终端中)创建清晰的表格,提升可读性。
  • 机器可读格式 :通过 --json 标志,输出纯 JSON 格式,便于与其他脚本或工具(如 jq)集成。
# 基础列表,带颜色高亮
ccmcp list

# 输出纯 JSON,适合管道处理
ccmcp list --json | jq '.[] | select(.status == “disabled”) | .name'

# 强制禁用颜色输出(例如在日志文件中)
ccmcp list --no-color
# 或者通过环境变量
NO_COLOR=1 ccmcp list

实操心得:颜色自动检测 工具会自动检测输出是否为 TTY(交互式终端)。如果是,则启用颜色;如果输出被重定向到文件或管道(如 ccmcp list > servers.txt ),则自动禁用颜色。这是 CLI 工具的良好实践。 --no-color 标志可以覆盖此行为,而 NO_COLOR=1 环境变量是一个业界标准,许多命令行工具都遵循它来全局禁用颜色。

disable 命令:安全地“暂停”服务器 禁用操作是工具的核心价值所在。它不仅仅是移除。

# 基本禁用
ccmcp disable my-database-server

# 预览模式:显示将要执行的操作,但不实际修改任何配置
ccmcp disable my-database-server --dry-run

# 结合 JSON 输出,用于脚本
if ccmcp disable temp-server --dry-run --json | jq -e '.ok == true' > /dev/null; then
  ccmcp disable temp-server
fi

内部执行流程详解

  1. 验证存在性 :首先检查目标服务器是否在当前的活跃列表中。如果不在,会报错“Server not found”,避免无意义的操作。
  2. 备份配置 :调用 claude mcp get <name> ,将返回的完整配置(包括所有参数、环境变量、传输设置)保存到 ~/.claude-mcp-switch/disabled-servers.json 。这个文件是追加或更新的,不会覆盖其他已禁用的服务器配置。
  3. 执行移除 :调用 claude mcp remove <name> ,将其从 Claude Code 的配置中删除。此时,Claude Code 应用如果正在运行,可能需要重启或刷新连接才能使更改生效(取决于 Claude Code 的热重载能力)。
  4. 状态更新 :工具更新内部状态,并在下次 list 命令中将此服务器显示为“disabled”。

enable 命令:从备份中一键恢复 启用操作是禁用的逆过程,但同样重要。

# 基本启用
ccmcp enable my-database-server

# 启用并输出 JSON 结果
ccmcp enable my-database-server --json

内部执行流程详解

  1. 查找备份 :在本地存储的禁用服务器列表中查找对应名称的配置。
  2. 验证唯一性 :检查该服务器名称是否已存在于当前活跃列表中,避免重复添加导致冲突。
  3. 重建命令 :根据备份的配置,重新构造出完整的 claude mcp add 命令。这是最关键的一步,需要正确处理各种传输类型(stdio, SSE, HTTP)和对应的参数。
  4. 执行添加 :调用重构的 claude mcp add 命令。
  5. 清理备份 :从 disabled-servers.json 中移除该服务器的配置。

注意事项:传输类型的处理 不同的 MCP 传输类型,其 claude mcp add 的命令参数差异很大。例如:

  • stdio : 需要 --command --args
  • sse : 需要 --url
  • http : 可能需要 --url 和额外的 headers 配置。 工具的内部逻辑必须能序列化和反序列化这些不同的配置结构,确保 enable 操作能 100% 还原服务器。在早期版本中,如果遇到不支持的传输类型或复杂参数,可能会失败。一个健壮的工具应该能处理已知类型,并对未知类型给出明确的错误提示,或者尝试以最通用的方式传递配置。

4. 高级应用场景与集成实践

4.1 在项目工作流中自动化管理 MCP

claude-mcp-switch 的真正威力在于与你的开发工作流相结合。以下是我在实际项目中使用的几种模式:

场景一:基于项目的 MCP 配置文件 我为每个项目创建一个简单的 Bash 脚本或 Makefile 目标,用于设置该项目专属的 MCP 环境。

# 文件:project-a/setup-mcp.sh
#!/bin/bash
echo “Setting up MCP servers for Project A...”
# 禁用所有当前可能无关的服务器(可选,激进做法)
# ccmcp list --json | jq -r '.[] | select(.status == “active”) | .name' | xargs -I {} ccmcp disable {} --dry-run
# 启用项目需要的服务器
ccmcp enable project-a-db 2>/dev/null || echo “DB server not in disabled list, may already be active or not configured.”
ccmcp enable project-a-cache 2>/dev/null || echo “Cache server not in disabled list...”
echo “Done. Current MCP status:”
ccmcp list

然后,在进入项目目录时,可以自动或手动运行此脚本。

场景二:与 IDE 或编辑器集成 如果你使用 VS Code,可以将其作为任务(Task)或通过终端命令集成。

  1. .vscode/tasks.json 中定义任务:
{
  “version”: “2.0.0”,
  “tasks”: [
    {
      “label”: “Enable Project MCPs”,
      “type”: “shell”,
      “command”: “ccmcp enable my-server && ccmcp enable another-server”,
      “group”: “build”,
      “presentation”: {
        “reveal”: “always”,
        “panel”: “dedicated”
      }
    }
  ]
}
  1. 你可以绑定一个快捷键(如 Cmd+Shift+P 输入 “Run Task”)来快速切换 MCP 环境。

场景三:在 CI/CD 管道中清理环境 在自动化测试或构建环境中,你可能希望从一个干净的、无额外 MCP 服务器的状态开始。

# 例如在 GitHub Actions 的某个步骤中
- name: Clean up MCP servers for test isolation
  run: |
    # 列出所有活跃服务器并逐个禁用(除了必须的基础服务器)
    for server in $(ccmcp list --json | jq -r '.[] | select(.status == “active” and .name != “filesystem”) | .name'); do
      echo “Disabling $server for clean test environment”
      ccmcp disable “$server”
    done

这样可以确保你的测试不依赖于某个特定的、可能只在本地配置的 MCP 服务器。

4.2 故障排除与常见问题实录

即使工具设计得再完善,在实际使用中也可能遇到各种环境或配置问题。下面是我遇到和解决过的一些典型情况。

问题一:执行命令时报错 “claude: command not found” 这是最常见的问题,意味着系统找不到 claude 可执行文件。

  • 排查步骤
    1. 确认安装 :首先确保 Claude Code 桌面应用已安装。有时 CLI 工具是可选安装项,需要你在应用设置中手动勾选“Install Command Line Tools”。
    2. 检查 PATH
      • macOS/Linux : 在终端运行 which claude 。如果没有输出,运行 echo $PATH 查看路径。Claude CLI 通常安装在 /usr/local/bin ~/bin 。你需要确保该目录在 PATH 中。你可以通过修改 ~/.zshrc ~/.bashrc 文件来添加路径,例如 export PATH=“/usr/local/bin:$PATH” ,然后执行 source ~/.zshrc
      • Windows : 在 PowerShell 中运行 Get-Command claude -ErrorAction SilentlyContinue 。如果找不到,你需要将 Claude 的安装目录(如 C:\Users\<You>\AppData\Local\Programs\Claude )添加到系统的“环境变量”-“Path”中。
    3. 重启终端 :修改 PATH 后,务必关闭并重新打开终端窗口,使更改生效。
    4. 验证 CLI :最后运行 claude --version 确认命令可用。

问题二: ccmcp list 显示为空,但我知道配置了服务器 这说明工具无法从 claude mcp list 获取到数据。

  • 排查步骤
    1. 使用原生命令验证 :直接运行 claude mcp list 。如果也返回空,说明 Claude Code 中确实没有配置任何 MCP 服务器,或者配置未保存。你需要先在 Claude Code 应用的设置界面中添加服务器。
    2. 检查配置文件位置 claude CLI 会读取特定的配置文件(如 ~/.claude/settings.json )。确保你当前用户有该文件的读取权限,并且配置是正确的。你可以用 cat ~/.claude/settings.json | jq . (需要安装 jq)来查看内容。
    3. 检查 Claude Code 应用状态 :有时 CLI 和应用之间的通信可能有问题。尝试完全退出 Claude Code 应用并重新启动,然后再运行命令。
    4. 使用 --config 参数(如果工具支持) :有些高级用户可能有多个配置文件。查看 ccmcp --help 是否支持 --config 参数来指定一个非默认的配置文件路径。

问题三: enable disable 操作失败,提示权限错误 这通常发生在工具尝试读写其数据目录( ~/.claude-mcp-switch/ )或 Claude 的配置文件时。

  • 排查步骤
    1. 检查目录权限 :运行 ls -la ~/ | grep .claude ls -la ~/.claude-mcp-switch/ (如果存在)。确保你的用户对这些目录有读写权限。你可以尝试手动创建目录: mkdir -p ~/.claude-mcp-switch
    2. 检查文件所有权 :如果你曾经用 sudo 运行过相关命令,可能导致配置文件的所有者变成 root。使用 sudo chown -R $(whoami) ~/.claude ~/.claude-mcp-switch 来改回你的用户所有权。
    3. 防病毒或安全软件干扰 (特别是 Windows):某些安全软件可能会阻止 CLI 工具创建或修改用户目录下的文件。尝试临时禁用安全软件,或者将相关目录添加到白名单中。

问题四:操作成功后,Claude Code 应用中的 MCP 服务器列表没有立即更新 这是因为 claude mcp 命令修改的是磁盘上的配置文件,而 Claude Code 应用可能缓存了配置或需要触发重新加载。

  • 解决方案
    1. 手动重启 Claude Code 应用 :这是最可靠的方法。完全退出应用并重新打开。
    2. 查找“重载”功能 :有些版本的 Claude Code 可能在设置界面有“重载 MCP 配置”或类似的按钮。
    3. 等待自动刷新 :部分版本的应用会监听配置文件的变化并自动刷新,但这可能不是即时的。

问题五:JSON 输出解析错误或在脚本中使用不顺畅 当你尝试用 --json 输出配合 jq 或其他工具进行自动化时,可能会遇到格式问题。

  • 排查与技巧
    1. 确保是纯 JSON :使用 --no-color 标志,因为颜色控制字符会破坏 JSON 解析。 --json 标志通常会自动隐含 --no-color ,但双重保险更好: ccmcp list --json --no-color
    2. 处理错误流 :在 Shell 脚本中,如果 ccmcp 命令失败(非零退出码),其错误信息可能会输出到 stderr,并与 stdout 的 JSON 混合。好的脚本应该分别处理:
      output=$(ccmcp list --json 2>/dev/null) # 将 stderr 重定向到 /dev/null
      if [ $? -eq 0 ]; then
        echo “$output” | jq ...
      else
        echo “Command failed” >&2
        exit 1
      fi
      
    3. 理解 JSON 结构 :仔细查看 --json 输出的实际结构。 list 命令的输出可能是一个数组,每个元素是一个包含 status , name , transport , commandOrUrl 等字段的对象。 enable/disable 的输出可能是一个包含 ok , action , identifier 的对象。根据这个结构来编写你的 jq 过滤命令。

4.3 安全性与最佳实践建议

虽然 claude-mcp-switch 是一个辅助工具,但因为它操作的是 AI 助手的核心扩展配置,所以也需要遵循一些安全实践。

  1. 审查你启用的 MCP 服务器 :MCP 服务器本质上是一个外部进程,Claude Code 会与之通信。在启用一个来源不明的、禁用的服务器之前,最好先查看其备份的配置。

    # 查看禁用服务器列表中某个服务器的具体配置
    cat ~/.claude-mcp-switch/disabled-servers.json | jq '.“server-name”'
    

    关注 command args 字段,确保它执行的是你信任的可执行文件。

  2. 定期清理禁用列表 disabled-servers.json 文件会随着时间增长。如果你确定某些服务器不再需要,可以手动编辑这个 JSON 文件删除对应的条目,或者直接清空它。你也可以写一个简单的脚本来清理超过一定时间的条目。

  3. 备份你的 Claude 配置 :在进行大批量 MCP 服务器操作之前,备份原始的 ~/.claude/settings.json 文件是一个好习惯。

    cp ~/.claude/settings.json ~/.claude/settings.json.backup.$(date +%Y%m%d)
    

    如果操作出现问题,你可以用备份文件恢复。

  4. 在脚本中使用 --dry-run :在编写自动化脚本时,尤其是执行 disable 这种破坏性操作前,先使用 --dry-run 模式预览将要执行的动作,可以防止意外。

  5. 注意配置文件同步 :如果你在多台机器上使用 Claude Code 并通过云同步(如 iCloud、Dropbox)同步 ~/.claude 目录,请注意 ~/.claude-mcp-switch/ 目录默认不会被同步。这可能导致一台机器上禁用的服务器,在另一台机器上仍然活跃。你需要自行决定是否需要同步这个目录,并了解其可能带来的状态不一致问题。

5. 项目架构浅析与扩展思路

通过阅读 claude-mcp-switch 的源码(如果开源),我们可以学习到如何构建一个高质量、用户友好的 CLI 工具。这里基于其文档描述,推测其内部模块划分:

  1. 入口点 ( src/ccmcp.js ) :使用 shebang ( #!/usr/bin/env node ) 声明 Node.js 脚本,并通过 commander 定义命令、参数和帮助信息。负责解析命令行参数,并将控制权分发给对应的功能模块。

  2. 配置管理器 ( lib/config.js ) :负责所有与配置相关的 IO 操作。

    • 读取/写入 ~/.claude-mcp-switch/disabled-servers.json
    • 提供函数来获取、添加、删除禁用服务器的配置。
    • 处理文件锁或并发安全(如果实现的话)。
  3. Claude CLI 交互层 ( lib/claude-client.js ) :这是与底层 claude 命令交互的核心模块。

    • 封装 child_process.spawn execFile 来执行 claude mcp list/get/add/remove 等命令。
    • 安全地处理命令输出(stdout/stderr)和退出码。
    • 解析 --json 输出或表格输出,将其转化为内部 JavaScript 对象。
  4. 业务逻辑核心 ( lib/switch-core.js ) :实现 list enable disable 的核心逻辑。

    • list : 调用 Claude CLI 获取活跃列表,合并本地存储的禁用列表,组装最终数据。
    • disable : 协调“获取配置 -> 存储备份 -> 执行移除”的流程。
    • enable : 协调“读取备份 -> 验证冲突 -> 执行添加 -> 清理备份”的流程。
    • 处理 --dry-run 标志,模拟执行流程。
  5. 用户界面/输出渲染 ( lib/ui.js ) :负责生成终端中看到的漂亮输出。

    • 检测 TTY 和支持的颜色,决定是否使用颜色。
    • 生成带有边框的 ASCII 表格。
    • 格式化 JSON 输出。
  6. 工具函数与验证 ( lib/utils.js , lib/schema.js ) :包含路径处理、错误格式化、配置数据的 JSON Schema 验证等辅助函数。

扩展思路 : 如果你觉得 claude-mcp-switch 的功能还不够,可以基于它的思路进行扩展:

  • 批量操作 :添加 ccmcp disable-all ccmcp enable-group <group-name> 命令,通过标签或分组来管理服务器集合。
  • 配置文件导入/导出 :将禁用服务器列表导出为一个文件,方便在不同环境间迁移或分享配置。
  • 状态钩子(Hooks) :在 enable disable 操作前后触发自定义脚本,例如在启用数据库 MCP 前自动启动本地数据库服务。
  • 与更多 AI 助手集成 :类似的模式是否可以应用于其他支持 MCP 或类似扩展协议的 AI 助手?虽然代码不能直接复用,但设计思路是相通的。

这个工具的精髓在于它找准了一个非常具体、高频的痛点,并用最小化、最稳健的方式解决了它。它不试图成为庞然大物,而是做好一件事,并确保这件事在用户的各种环境下都能可靠地工作。这种“工具思维”在构建开发者工具时非常值得借鉴。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐