fix(mcp): remove SSE support; keep stdio default when type is omitted

- Backend: reject "sse" in validators; accept missing type as stdio; require url only for http (mcp.rs, claude_mcp.rs)
- Frontend: McpServer.type narrowed to "stdio" | "http" (optional) (src/types.ts)
- UI: avoid undefined in list item details (McpListItem)
- Claude-only sync after delete to update ~/.claude.json (commands.rs)

Notes:
- Ran typecheck and cargo check: both pass
- Clippy shows advisory warnings unrelated to this change
- Prettier check warns on a few files; limited scope changes kept minimal
This commit is contained in:
Jason
2025-10-09 22:02:56 +08:00
parent f6bf8611cd
commit 511980e3ea
9 changed files with 152 additions and 71 deletions

View File

@@ -1,7 +1,7 @@
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
/// MCP 配置:集中存放于 ~/.cc-switch/config.json
/// MCP 配置:单客户端维度claude 或 codex 下的一组服务器)
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct McpConfig {
/// 以 id 为键的服务器定义(宽松 JSON 对象,包含 enabled/source 等 UI 辅助字段)
@@ -9,6 +9,24 @@ pub struct McpConfig {
pub servers: HashMap<String, serde_json::Value>,
}
/// MCP 根:按客户端分开维护(无历史兼容压力,直接以 v2 结构落地)
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct McpRoot {
#[serde(default)]
pub claude: McpConfig,
#[serde(default)]
pub codex: McpConfig,
}
impl Default for McpRoot {
fn default() -> Self {
Self {
claude: McpConfig::default(),
codex: McpConfig::default(),
}
}
}
use crate::config::{copy_file, get_app_config_dir, get_app_config_path, write_json_file};
use crate::provider::ProviderManager;
@@ -46,9 +64,9 @@ pub struct MultiAppConfig {
/// 应用管理器claude/codex
#[serde(flatten)]
pub apps: HashMap<String, ProviderManager>,
/// MCP 配置
/// MCP 配置(按客户端分治)
#[serde(default)]
pub mcp: McpConfig,
pub mcp: McpRoot,
}
fn default_version() -> u32 {
@@ -64,7 +82,7 @@ impl Default for MultiAppConfig {
Self {
version: 2,
apps,
mcp: McpConfig::default(),
mcp: McpRoot::default(),
}
}
}
@@ -95,7 +113,7 @@ impl MultiAppConfig {
let config = Self {
version: 2,
apps,
mcp: McpConfig::default(),
mcp: McpRoot::default(),
};
// 迁移前备份旧版(v1)配置文件
@@ -157,8 +175,19 @@ impl MultiAppConfig {
}
}
/// 获取 MCP 配置(可变引用)
pub fn mcp_mut(&mut self) -> &mut McpConfig {
&mut self.mcp
/// 获取指定客户端的 MCP 配置(可变引用)
pub fn mcp_for(&self, app: &AppType) -> &McpConfig {
match app {
AppType::Claude => &self.mcp.claude,
AppType::Codex => &self.mcp.codex,
}
}
/// 获取指定客户端的 MCP 配置(可变引用)
pub fn mcp_for_mut(&mut self, app: &AppType) -> &mut McpConfig {
match app {
AppType::Claude => &mut self.mcp.claude,
AppType::Codex => &mut self.mcp.codex,
}
}
}