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

@@ -339,10 +339,10 @@ export const tauriAPI = {
}
},
// 新config.json 为 SSOT 的 MCP API
getMcpConfig: async (): Promise<McpConfigResponse> => {
// 新config.json 为 SSOT 的 MCP API(按客户端)
getMcpConfig: async (app: AppType = "claude"): Promise<McpConfigResponse> => {
try {
return await invoke<McpConfigResponse>("get_mcp_config");
return await invoke<McpConfigResponse>("get_mcp_config", { app });
} catch (error) {
console.error("获取 MCP 配置失败:", error);
throw error;
@@ -350,29 +350,37 @@ export const tauriAPI = {
},
upsertMcpServerInConfig: async (
app: AppType = "claude",
id: string,
spec: McpServer | Record<string, any>,
): Promise<boolean> => {
try {
return await invoke<boolean>("upsert_mcp_server_in_config", { id, spec });
return await invoke<boolean>("upsert_mcp_server_in_config", { app, id, spec });
} catch (error) {
console.error("写入 MCPconfig.json失败:", error);
throw error;
}
},
deleteMcpServerInConfig: async (id: string): Promise<boolean> => {
deleteMcpServerInConfig: async (
app: AppType = "claude",
id: string,
): Promise<boolean> => {
try {
return await invoke<boolean>("delete_mcp_server_in_config", { id });
return await invoke<boolean>("delete_mcp_server_in_config", { app, id });
} catch (error) {
console.error("删除 MCPconfig.json失败:", error);
throw error;
}
},
setMcpEnabled: async (id: string, enabled: boolean): Promise<boolean> => {
setMcpEnabled: async (
app: AppType = "claude",
id: string,
enabled: boolean,
): Promise<boolean> => {
try {
return await invoke<boolean>("set_mcp_enabled", { id, enabled });
return await invoke<boolean>("set_mcp_enabled", { app, id, enabled });
} catch (error) {
console.error("设置 MCP 启用状态失败:", error);
throw error;