fix: avoid spamming server restarts (#5212)
This commit is contained in:
parent
b72259d78f
commit
46c7f02827
@ -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,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
},
|
||||||
}))
|
}))
|
||||||
|
|||||||
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user