diff --git a/packages/core/src/tools/mcp-client-manager.test.ts b/packages/core/src/tools/mcp-client-manager.test.ts index 4d91898077..dce8708628 100644 --- a/packages/core/src/tools/mcp-client-manager.test.ts +++ b/packages/core/src/tools/mcp-client-manager.test.ts @@ -14,7 +14,7 @@ import { type MockedObject, } from 'vitest'; import { McpClientManager } from './mcp-client-manager.js'; -import { McpClient, MCPDiscoveryState } from './mcp-client.js'; +import { McpClient, MCPDiscoveryState, MCPServerStatus } from './mcp-client.js'; import type { ToolRegistry } from './tool-registry.js'; import type { Config, GeminiCLIExtension } from '../config/config.js'; import type { PromptRegistry } from '../prompts/prompt-registry.js'; @@ -38,7 +38,7 @@ describe('McpClientManager', () => { connect: vi.fn(), discoverInto: vi.fn(), disconnect: vi.fn(), - getStatus: vi.fn(), + getStatus: vi.fn().mockReturnValue(MCPServerStatus.DISCONNECTED), getServerConfig: vi.fn(), getServerName: vi.fn().mockReturnValue('test-server'), } as unknown as McpClient); diff --git a/packages/core/src/tools/mcp-client-manager.ts b/packages/core/src/tools/mcp-client-manager.ts index c20dc9b408..2f208c70d7 100644 --- a/packages/core/src/tools/mcp-client-manager.ts +++ b/packages/core/src/tools/mcp-client-manager.ts @@ -13,6 +13,7 @@ import type { ToolRegistry } from './tool-registry.js'; import { McpClient, MCPDiscoveryState, + MCPServerStatus, populateMcpServerCommand, } from './mcp-client.js'; import { getErrorMessage, isAuthenticationError } from '../utils/errors.js'; @@ -458,7 +459,9 @@ export class McpClientManager { : undefined); try { - await client.connect(); + if (client.getStatus() === MCPServerStatus.DISCONNECTED) { + await client.connect(); + } if (targetRegistries) { await client.discoverInto(this.cliConfig, targetRegistries); }