From 46c7f02827537d970c0a91a7e6ed8e7807db116b Mon Sep 17 00:00:00 2001 From: Louis Date: Sat, 7 Jun 2025 11:54:35 +0700 Subject: [PATCH] fix: avoid spamming server restarts (#5212) --- web-app/src/hooks/useMCPServers.ts | 19 ++++++++++--------- web-app/src/routes/settings/mcp-servers.tsx | 10 ++++++++-- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/web-app/src/hooks/useMCPServers.ts b/web-app/src/hooks/useMCPServers.ts index d225ab755..df1e03807 100644 --- a/web-app/src/hooks/useMCPServers.ts +++ b/web-app/src/hooks/useMCPServers.ts @@ -24,9 +24,10 @@ type MCPServerStoreState = { editServer: (key: string, config: MCPServerConfig) => void deleteServer: (key: string) => void setServers: (servers: MCPServers) => void + syncServers: () => void } -export const useMCPServers = create()((set) => ({ +export const useMCPServers = create()((set, get) => ({ open: true, mcpServers: {}, // Start with empty object loading: false, @@ -37,7 +38,6 @@ export const useMCPServers = create()((set) => ({ addServer: (key, config) => set((state) => { const mcpServers = { ...state.mcpServers, [key]: config } - updateMCPConfig(JSON.stringify({ mcpServers })) return { mcpServers } }), @@ -48,13 +48,11 @@ export const useMCPServers = create()((set) => ({ if (!state.mcpServers[key]) return state const mcpServers = { ...state.mcpServers, [key]: config } - updateMCPConfig(JSON.stringify({ mcpServers })) return { mcpServers } }), setServers: (servers) => set((state) => { const mcpServers = { ...state.mcpServers, ...servers } - updateMCPConfig(JSON.stringify({ mcpServers })) return { mcpServers } }), // Delete an MCP server by key @@ -67,14 +65,17 @@ export const useMCPServers = create()((set) => ({ if (updatedServers[key]) { delete updatedServers[key] } - updateMCPConfig( - JSON.stringify({ - mcpServers: updatedServers, - }) - ) return { mcpServers: updatedServers, deletedServerKeys: [...state.deletedServerKeys, key], } }), + syncServers: async () => { + const mcpServers = get().mcpServers + await updateMCPConfig( + JSON.stringify({ + mcpServers, + }) + ) + }, })) diff --git a/web-app/src/routes/settings/mcp-servers.tsx b/web-app/src/routes/settings/mcp-servers.tsx index 3c875ad01..b71a60d22 100644 --- a/web-app/src/routes/settings/mcp-servers.tsx +++ b/web-app/src/routes/settings/mcp-servers.tsx @@ -26,7 +26,8 @@ export const Route = createFileRoute(route.settings.mcp_servers as any)({ }) function MCPServers() { - const { mcpServers, addServer, editServer, deleteServer } = useMCPServers() + const { mcpServers, addServer, editServer, deleteServer, syncServers } = + useMCPServers() const { allowAllMCPPermissions, setAllowAllMCPPermissions } = useToolApproval() @@ -64,17 +65,19 @@ function MCPServers() { const handleSaveServer = (name: string, config: MCPServerConfig) => { if (editingKey) { // Edit existing server - editServer(editingKey, config) // If server name changed, delete old one and add new one if (editingKey !== name) { deleteServer(editingKey) addServer(name, config) + } else { + editServer(editingKey, config) } } else { // Add new server addServer(name, config) } + syncServers() } const handleEdit = (serverKey: string) => { @@ -90,6 +93,7 @@ function MCPServers() { if (serverToDelete) { deleteServer(serverToDelete) setServerToDelete(null) + syncServers() } } @@ -126,6 +130,7 @@ function MCPServers() { } ) } + syncServers() } const toggleServer = (serverKey: string, active: boolean) => { @@ -135,6 +140,7 @@ function MCPServers() { ...(mcpServers[serverKey] as MCPServerConfig), active, }) + syncServers() } }