cc-switch 托管 MCP 与 Skills
结论
cc-switch 可以托管 MCP 和 Skills 的控制面,但不是它们的运行时宿主。
它现在做的是:
- 统一保存配置
- 统一同步到各 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 现在就能做的:
- 在数据库里定义 MCP
- 在
settings.json里选择统一技能根 - 安装或迁移 Skills 到 SSOT
- 同步到各 CLI 的 live 配置
想要“统一运行”
这不是现有功能,必须额外增加 runtime broker:
- MCP server 进程管理
- 本地 broker endpoint
- 生命周期控制
- 统一连接转发
这份文档的定位
这是一份“托管现状说明 + 架构边界图”。
它用来说明:
cc-switch现在已经能托管什么- 它还不能托管什么
- 如果要升级成 runtime host,还缺哪一层