mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-26 21:14:35 -07:00
fix(core): complete MCP discovery when configured servers are skipped (#18586)
Co-authored-by: christine betts <chrstn@uw.edu> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
This commit is contained in:
@@ -103,6 +103,43 @@ describe('McpClientManager', () => {
|
|||||||
expect(manager.getDiscoveryState()).toBe(MCPDiscoveryState.COMPLETED);
|
expect(manager.getDiscoveryState()).toBe(MCPDiscoveryState.COMPLETED);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should mark discovery completed when all configured servers are user-disabled', async () => {
|
||||||
|
mockConfig.getMcpServers.mockReturnValue({
|
||||||
|
'test-server': {},
|
||||||
|
});
|
||||||
|
mockConfig.getMcpEnablementCallbacks.mockReturnValue({
|
||||||
|
isSessionDisabled: vi.fn().mockReturnValue(false),
|
||||||
|
isFileEnabled: vi.fn().mockResolvedValue(false),
|
||||||
|
});
|
||||||
|
|
||||||
|
const manager = new McpClientManager('0.0.1', toolRegistry, mockConfig);
|
||||||
|
const promise = manager.startConfiguredMcpServers();
|
||||||
|
expect(manager.getDiscoveryState()).toBe(MCPDiscoveryState.IN_PROGRESS);
|
||||||
|
await promise;
|
||||||
|
|
||||||
|
expect(manager.getDiscoveryState()).toBe(MCPDiscoveryState.COMPLETED);
|
||||||
|
expect(manager.getMcpServerCount()).toBe(0);
|
||||||
|
expect(mockedMcpClient.connect).not.toHaveBeenCalled();
|
||||||
|
expect(mockedMcpClient.discover).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should mark discovery completed when all configured servers are blocked', async () => {
|
||||||
|
mockConfig.getMcpServers.mockReturnValue({
|
||||||
|
'test-server': {},
|
||||||
|
});
|
||||||
|
mockConfig.getBlockedMcpServers.mockReturnValue(['test-server']);
|
||||||
|
|
||||||
|
const manager = new McpClientManager('0.0.1', toolRegistry, mockConfig);
|
||||||
|
const promise = manager.startConfiguredMcpServers();
|
||||||
|
expect(manager.getDiscoveryState()).toBe(MCPDiscoveryState.IN_PROGRESS);
|
||||||
|
await promise;
|
||||||
|
|
||||||
|
expect(manager.getDiscoveryState()).toBe(MCPDiscoveryState.COMPLETED);
|
||||||
|
expect(manager.getMcpServerCount()).toBe(0);
|
||||||
|
expect(mockedMcpClient.connect).not.toHaveBeenCalled();
|
||||||
|
expect(mockedMcpClient.discover).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
it('should not discover tools if folder is not trusted', async () => {
|
it('should not discover tools if folder is not trusted', async () => {
|
||||||
mockConfig.getMcpServers.mockReturnValue({
|
mockConfig.getMcpServers.mockReturnValue({
|
||||||
'test-server': {},
|
'test-server': {},
|
||||||
|
|||||||
@@ -337,6 +337,15 @@ export class McpClientManager {
|
|||||||
this.maybeDiscoverMcpServer(name, config),
|
this.maybeDiscoverMcpServer(name, config),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// If every configured server was skipped (for example because all are
|
||||||
|
// disabled by user settings), no discovery promise is created. In that
|
||||||
|
// case we must still mark discovery complete or the UI will wait forever.
|
||||||
|
if (this.discoveryState === MCPDiscoveryState.IN_PROGRESS) {
|
||||||
|
this.discoveryState = MCPDiscoveryState.COMPLETED;
|
||||||
|
this.eventEmitter?.emit('mcp-client-update', this.clients);
|
||||||
|
}
|
||||||
|
|
||||||
await this.cliConfig.refreshMcpContext();
|
await this.cliConfig.refreshMcpContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user