fix: avoid spamming server restarts (#5212)

This commit is contained in:
Louis 2025-06-07 11:54:35 +07:00 committed by GitHub
parent b72259d78f
commit 46c7f02827
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 11 deletions

View File

@ -24,9 +24,10 @@ type MCPServerStoreState = {
editServer: (key: string, config: MCPServerConfig) => void editServer: (key: string, config: MCPServerConfig) => void
deleteServer: (key: string) => void deleteServer: (key: string) => void
setServers: (servers: MCPServers) => void setServers: (servers: MCPServers) => void
syncServers: () => void
} }
export const useMCPServers = create<MCPServerStoreState>()((set) => ({ export const useMCPServers = create<MCPServerStoreState>()((set, get) => ({
open: true, open: true,
mcpServers: {}, // Start with empty object mcpServers: {}, // Start with empty object
loading: false, loading: false,
@ -37,7 +38,6 @@ export const useMCPServers = create<MCPServerStoreState>()((set) => ({
addServer: (key, config) => addServer: (key, config) =>
set((state) => { set((state) => {
const mcpServers = { ...state.mcpServers, [key]: config } const mcpServers = { ...state.mcpServers, [key]: config }
updateMCPConfig(JSON.stringify({ mcpServers }))
return { mcpServers } return { mcpServers }
}), }),
@ -48,13 +48,11 @@ export const useMCPServers = create<MCPServerStoreState>()((set) => ({
if (!state.mcpServers[key]) return state if (!state.mcpServers[key]) return state
const mcpServers = { ...state.mcpServers, [key]: config } const mcpServers = { ...state.mcpServers, [key]: config }
updateMCPConfig(JSON.stringify({ mcpServers }))
return { mcpServers } return { mcpServers }
}), }),
setServers: (servers) => setServers: (servers) =>
set((state) => { set((state) => {
const mcpServers = { ...state.mcpServers, ...servers } const mcpServers = { ...state.mcpServers, ...servers }
updateMCPConfig(JSON.stringify({ mcpServers }))
return { mcpServers } return { mcpServers }
}), }),
// Delete an MCP server by key // Delete an MCP server by key
@ -67,14 +65,17 @@ export const useMCPServers = create<MCPServerStoreState>()((set) => ({
if (updatedServers[key]) { if (updatedServers[key]) {
delete updatedServers[key] delete updatedServers[key]
} }
updateMCPConfig(
JSON.stringify({
mcpServers: updatedServers,
})
)
return { return {
mcpServers: updatedServers, mcpServers: updatedServers,
deletedServerKeys: [...state.deletedServerKeys, key], deletedServerKeys: [...state.deletedServerKeys, key],
} }
}), }),
syncServers: async () => {
const mcpServers = get().mcpServers
await updateMCPConfig(
JSON.stringify({
mcpServers,
})
)
},
})) }))

View File

@ -26,7 +26,8 @@ export const Route = createFileRoute(route.settings.mcp_servers as any)({
}) })
function MCPServers() { function MCPServers() {
const { mcpServers, addServer, editServer, deleteServer } = useMCPServers() const { mcpServers, addServer, editServer, deleteServer, syncServers } =
useMCPServers()
const { allowAllMCPPermissions, setAllowAllMCPPermissions } = const { allowAllMCPPermissions, setAllowAllMCPPermissions } =
useToolApproval() useToolApproval()
@ -64,17 +65,19 @@ function MCPServers() {
const handleSaveServer = (name: string, config: MCPServerConfig) => { const handleSaveServer = (name: string, config: MCPServerConfig) => {
if (editingKey) { if (editingKey) {
// Edit existing server // Edit existing server
editServer(editingKey, config)
// If server name changed, delete old one and add new one // If server name changed, delete old one and add new one
if (editingKey !== name) { if (editingKey !== name) {
deleteServer(editingKey) deleteServer(editingKey)
addServer(name, config) addServer(name, config)
} else {
editServer(editingKey, config)
} }
} else { } else {
// Add new server // Add new server
addServer(name, config) addServer(name, config)
} }
syncServers()
} }
const handleEdit = (serverKey: string) => { const handleEdit = (serverKey: string) => {
@ -90,6 +93,7 @@ function MCPServers() {
if (serverToDelete) { if (serverToDelete) {
deleteServer(serverToDelete) deleteServer(serverToDelete)
setServerToDelete(null) setServerToDelete(null)
syncServers()
} }
} }
@ -126,6 +130,7 @@ function MCPServers() {
} }
) )
} }
syncServers()
} }
const toggleServer = (serverKey: string, active: boolean) => { const toggleServer = (serverKey: string, active: boolean) => {
@ -135,6 +140,7 @@ function MCPServers() {
...(mcpServers[serverKey] as MCPServerConfig), ...(mcpServers[serverKey] as MCPServerConfig),
active, active,
}) })
syncServers()
} }
} }