From b24c5887c45edde8690b4d73d8961e63eee13a34 Mon Sep 17 00:00:00 2001 From: Ramón Medrano Llamas <45878745+rmedranollamas@users.noreply.github.com> Date: Tue, 19 Aug 2025 21:03:19 +0200 Subject: feat: restart MCP servers on /mcp refresh (#5479) Co-authored-by: Brian Ray <62354532+emeryray2002@users.noreply.github.com> Co-authored-by: N. Taylor Mullen --- packages/cli/src/ui/commands/mcpCommand.test.ts | 5 +++-- packages/cli/src/ui/commands/mcpCommand.ts | 6 +++--- packages/cli/src/ui/hooks/atCommandProcessor.test.ts | 6 ++++++ 3 files changed, 12 insertions(+), 5 deletions(-) (limited to 'packages/cli/src') diff --git a/packages/cli/src/ui/commands/mcpCommand.test.ts b/packages/cli/src/ui/commands/mcpCommand.test.ts index 6e48c2f9..09b97bb0 100644 --- a/packages/cli/src/ui/commands/mcpCommand.test.ts +++ b/packages/cli/src/ui/commands/mcpCommand.test.ts @@ -972,6 +972,7 @@ describe('mcpCommand', () => { it('should refresh the list of tools and display the status', async () => { const mockToolRegistry = { discoverMcpTools: vi.fn(), + restartMcpServers: vi.fn(), getAllTools: vi.fn().mockReturnValue([]), }; const mockGeminiClient = { @@ -1004,11 +1005,11 @@ describe('mcpCommand', () => { expect(context.ui.addItem).toHaveBeenCalledWith( { type: 'info', - text: 'Refreshing MCP servers and tools...', + text: 'Restarting MCP servers...', }, expect.any(Number), ); - expect(mockToolRegistry.discoverMcpTools).toHaveBeenCalled(); + expect(mockToolRegistry.restartMcpServers).toHaveBeenCalled(); expect(mockGeminiClient.setTools).toHaveBeenCalled(); expect(context.ui.reloadCommands).toHaveBeenCalledTimes(1); diff --git a/packages/cli/src/ui/commands/mcpCommand.ts b/packages/cli/src/ui/commands/mcpCommand.ts index 686102be..9e321937 100644 --- a/packages/cli/src/ui/commands/mcpCommand.ts +++ b/packages/cli/src/ui/commands/mcpCommand.ts @@ -471,7 +471,7 @@ const listCommand: SlashCommand = { const refreshCommand: SlashCommand = { name: 'refresh', - description: 'Refresh the list of MCP servers and tools', + description: 'Restarts MCP servers.', kind: CommandKind.BUILT_IN, action: async ( context: CommandContext, @@ -497,12 +497,12 @@ const refreshCommand: SlashCommand = { context.ui.addItem( { type: 'info', - text: 'Refreshing MCP servers and tools...', + text: 'Restarting MCP servers...', }, Date.now(), ); - await toolRegistry.discoverMcpTools(); + await toolRegistry.restartMcpServers(); // Update the client with the new tools const geminiClient = config.getGeminiClient(); diff --git a/packages/cli/src/ui/hooks/atCommandProcessor.test.ts b/packages/cli/src/ui/hooks/atCommandProcessor.test.ts index 5509d9ff..7403f788 100644 --- a/packages/cli/src/ui/hooks/atCommandProcessor.test.ts +++ b/packages/cli/src/ui/hooks/atCommandProcessor.test.ts @@ -63,6 +63,12 @@ describe('handleAtCommand', () => { isPathWithinWorkspace: () => true, getDirectories: () => [testRootDir], }), + getMcpServers: () => ({}), + getMcpServerCommand: () => undefined, + getPromptRegistry: () => ({ + getPromptsByServer: () => [], + }), + getDebugMode: () => false, } as unknown as Config; const registry = new ToolRegistry(mockConfig); -- cgit v1.2.3