BLOG

cc-switch 托管 MCP 与 Skills

2026/04/30 3 min read BLOG 智能体的设置目录 CC SWITCH 托管 MCP 与 SKILLS

cc-switch 托管 MCP 与 Skills

结论

cc-switch 可以托管 MCPSkills控制面,但不是它们的运行时宿主

它现在做的是:

  • 统一保存配置
  • 统一同步到各 CLI 的 live 配置
  • 统一管理安装、启用、迁移和切换

它现在不做的是:

  • 直接替各个 MCP server 进程运行
  • 直接替各个 Skills 任务执行

当前托管状态

MCP

cc-switch 已经把 MCP 当成统一配置对象来管理:

  • 数据库存储 MCP 定义
  • McpService::sync_all_enabled() 将配置写入各客户端
  • Codex、Claude、Gemini 等客户端读取各自的 live 配置

这意味着:

  • MCP 的“定义”和“启用状态”可以集中管理
  • 但 MCP 的运行仍然由各客户端自己发起

Skills

cc-switch 已经把 Skills 当成统一事实源来管理:

  • 支持 SkillStorageLocation::CcSwitch
  • 支持 SkillStorageLocation::Unified
  • 安装时先进入 SSOT,再同步到各应用目录

当前推荐的统一模式是:

  • SSOT 使用 ~/.agents/skills/
  • 各客户端目录通过 symlink 或 copy 同步

结构树

cc-switch
├─ Control Plane / SSOT
│  ├─ 数据库
│  │  ├─ providers
│  │  ├─ mcp_servers
│  │  └─ skills / install records
│  ├─ settings.json
│  │  ├─ skillStorageLocation = unified
│  │  ├─ skillSyncMethod = auto
│  │  └─ 各 app 的 current provider
│  └─ UI / 面板
│     ├─ MCP 管理页
│     ├─ Skills 管理页
│     └─ Provider 切换页

├─ MCP 托管
│  ├─ 事实源:数据库里的 MCP 定义
│  ├─ 同步层:McpService::sync_all_enabled()
│  ├─ 写入目标
│  │  ├─ ~/.codex/config.toml
│  │  ├─ ~/.claude.json / Claude settings
│  │  ├─ ~/.gemini / 其他客户端配置
│  │  └─ 其他支持的 CLI live config
│  └─ 能力边界
│     ├─ 能统一配置
│     ├─ 能增删改启用状态
│     └─ 不能自己替这些 MCP 进程跑 runtime

├─ Skills 托管
│  ├─ 事实源:SSOT 目录
│  │  └─ ~/.agents/skills/
│  ├─ 安装源
│  │  ├─ GitHub repo
│  │  └─ ZIP
│  ├─ 同步层
│  │  ├─ symlink
│  │  └─ copy
│  ├─ 写入目标
│  │  ├─ ~/.codex/skills
│  │  ├─ ~/.claude/skills
│  │  ├─ ~/.agents/skills
│  │  └─ 其他 app 的 skills 目录
│  └─ 能力边界
│     ├─ 能统一安装/更新/迁移
│     ├─ 能同步到各 CLI
│     └─ 不能替这些 skill 运行时本身执行任务

└─ 运行时层
   ├─ Codex CLI
   ├─ Claude CLI
   ├─ Gemini / 其他客户端
   └─ 这些客户端自己消费 cc-switch 写入的配置

最小操作模型

想要“统一管理”

这是 cc-switch 现在就能做的:

  1. 在数据库里定义 MCP
  2. settings.json 里选择统一技能根
  3. 安装或迁移 Skills 到 SSOT
  4. 同步到各 CLI 的 live 配置

想要“统一运行”

这不是现有功能,必须额外增加 runtime broker:

  • MCP server 进程管理
  • 本地 broker endpoint
  • 生命周期控制
  • 统一连接转发

这份文档的定位

这是一份“托管现状说明 + 架构边界图”。

它用来说明:

  • cc-switch 现在已经能托管什么
  • 它还不能托管什么
  • 如果要升级成 runtime host,还缺哪一层