diff --git a/src/main/services/MCPService.ts b/src/main/services/MCPService.ts index 22f7006f..1de60bd5 100644 --- a/src/main/services/MCPService.ts +++ b/src/main/services/MCPService.ts @@ -122,6 +122,8 @@ class McpService { await client.close() Logger.info(`[MCP] Closed server: ${serverKey}`) this.clients.delete(serverKey) + CacheService.remove(`mcp:list_tool:${serverKey}`) + Logger.info(`[MCP] Cleared cache for server: ${serverKey}`) } else { Logger.warn(`[MCP] No client found for server: ${serverKey}`) } @@ -150,7 +152,8 @@ class McpService { async listTools(_: Electron.IpcMainInvokeEvent, server: MCPServer) { const client = await this.initClient(server) - const cacheKey = `mcp:list_tool:${server.id}` + const serverKey = this.getServerKey(server) + const cacheKey = `mcp:list_tool:${serverKey}` if (CacheService.has(cacheKey)) { Logger.info(`[MCP] Tools from ${server.name} loaded from cache`) const cachedTools = CacheService.get(cacheKey) diff --git a/src/renderer/src/pages/settings/MCPSettings/McpSettings.tsx b/src/renderer/src/pages/settings/MCPSettings/McpSettings.tsx index f77c3dd4..c4bd2e76 100644 --- a/src/renderer/src/pages/settings/MCPSettings/McpSettings.tsx +++ b/src/renderer/src/pages/settings/MCPSettings/McpSettings.tsx @@ -82,27 +82,28 @@ const McpSettings: React.FC = ({ server }) => { // Load tools on initial mount if server is active useEffect(() => { - const fetchTools = async () => { - if (server.isActive) { - try { - setLoadingServer(server.id) - const localTools = await window.api.mcp.listTools(server) - setTools(localTools) - // window.message.success(t('settings.mcp.toolsLoaded')) - } catch (error) { - window.message.error({ - content: t('settings.mcp.toolsLoadError') + formatError(error), - key: 'mcp-tools-error' - }) - } finally { - setLoadingServer(null) - } - } - } - fetchTools() // eslint-disable-next-line react-hooks/exhaustive-deps }, []) + + const fetchTools = async () => { + if (server.isActive) { + try { + setLoadingServer(server.id) + const localTools = await window.api.mcp.listTools(server) + setTools(localTools) + // window.message.success(t('settings.mcp.toolsLoaded')) + } catch (error) { + window.message.error({ + content: t('settings.mcp.toolsLoadError') + formatError(error), + key: 'mcp-tools-error' + }) + } finally { + setLoadingServer(null) + } + } + } + // Save the form data const onSave = async () => { setLoading(true) @@ -141,6 +142,7 @@ const McpSettings: React.FC = ({ server }) => { await window.api.mcp.restartServer(mcpServer) updateMCPServer({ ...mcpServer, isActive: true }) window.message.success({ content: t('settings.mcp.updateSuccess'), key: 'mcp-update-success' }) + await fetchTools() setLoading(false) setIsFormChanged(false) } catch (error: any) {