refactor(MCP): Simplify IPC handlers and improve server management

This commit is contained in:
kangfenmao 2025-03-11 13:52:36 +08:00
parent 632b0c17aa
commit db2b92421a
3 changed files with 16 additions and 38 deletions

View File

@ -214,43 +214,23 @@ export function registerIpc(mainWindow: BrowserWindow, app: Electron.App) {
)
// Register MCP handlers
ipcMain.on('mcp:servers-from-renderer', (_event, servers) => {
mcpService.setServers(servers)
})
ipcMain.handle('mcp:list-servers', async () => {
return mcpService.listAvailableServices()
})
ipcMain.handle('mcp:add-server', async (_, server: MCPServer) => {
return mcpService.addServer(server)
})
ipcMain.handle('mcp:update-server', async (_, server: MCPServer) => {
return mcpService.updateServer(server)
})
ipcMain.handle('mcp:delete-server', async (_, serverName: string) => {
return mcpService.deleteServer(serverName)
})
ipcMain.handle('mcp:set-server-active', async (_, { name, isActive }) => {
return mcpService.setServerActive({ name, isActive })
})
ipcMain.on('mcp:servers-from-renderer', (_, servers) => mcpService.setServers(servers))
ipcMain.handle('mcp:list-servers', async () => mcpService.listAvailableServices())
ipcMain.handle('mcp:add-server', async (_, server: MCPServer) => mcpService.addServer(server))
ipcMain.handle('mcp:update-server', async (_, server: MCPServer) => mcpService.updateServer(server))
ipcMain.handle('mcp:delete-server', async (_, serverName: string) => mcpService.deleteServer(serverName))
ipcMain.handle('mcp:set-server-active', async (_, { name, isActive }) =>
mcpService.setServerActive({ name, isActive })
)
// According to preload, this should take no parameters, but our implementation accepts
// an optional serverName for better flexibility
ipcMain.handle('mcp:list-tools', async (_, serverName?: string) => {
return mcpService.listTools(serverName)
})
ipcMain.handle('mcp:list-tools', async (_, serverName?: string) => mcpService.listTools(serverName))
ipcMain.handle('mcp:call-tool', async (_, params: { client: string; name: string; args: any }) =>
mcpService.callTool(params)
)
ipcMain.handle('mcp:call-tool', async (_, params: { client: string; name: string; args: any }) => {
return mcpService.callTool(params)
})
ipcMain.handle('mcp:cleanup', async () => {
return mcpService.cleanup()
})
ipcMain.handle('mcp:cleanup', async () => mcpService.cleanup())
// Listen for changes in MCP servers and notify renderer
mcpService.on('servers-updated', (servers) => {
@ -258,7 +238,5 @@ export function registerIpc(mainWindow: BrowserWindow, app: Electron.App) {
})
// Clean up MCP services when app quits
app.on('before-quit', async () => {
await mcpService.cleanup()
})
app.on('before-quit', () => mcpService.cleanup())
}

View File

@ -134,6 +134,7 @@ const MCPSettings: FC = () => {
window.api.mcp
.addServer(mcpServer)
.then(() => {
dispatch(addMCPServer(mcpServer))
window.message.success(t('settings.mcp.addSuccess'))
setLoading(false)
setIsModalVisible(false)
@ -143,7 +144,6 @@ const MCPSettings: FC = () => {
window.message.error(`${t('settings.mcp.addError')}: ${error.message}`)
setLoading(false)
})
dispatch(addMCPServer(mcpServer))
}
})
.catch(() => {

View File

@ -3,7 +3,7 @@ import { FunctionCall, FunctionDeclaration, SchemaType, Tool as geminiToool } fr
import { MCPServer, MCPTool, MCPToolResponse } from '@renderer/types'
import { ChatCompletionMessageToolCall, ChatCompletionTool } from 'openai/resources'
import { ChunkCallbackData } from '.'
import { ChunkCallbackData } from '../providers'
const supportedAttributes = [
'type',