From a9083b9d48c5a02b0ed26a553602949df2a4348d Mon Sep 17 00:00:00 2001 From: Jacob MacDonald Date: Thu, 16 Oct 2025 07:21:09 -0700 Subject: [PATCH] include extension name in `gemini mcp list` command (#11263) --- packages/cli/src/commands/mcp/list.test.ts | 38 +++++++++++++--------- packages/cli/src/commands/mcp/list.ts | 5 ++- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/packages/cli/src/commands/mcp/list.test.ts b/packages/cli/src/commands/mcp/list.test.ts index d2fe3afbe3..6bb6f2eacd 100644 --- a/packages/cli/src/commands/mcp/list.test.ts +++ b/packages/cli/src/commands/mcp/list.test.ts @@ -4,7 +4,16 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest'; +import { + vi, + describe, + it, + expect, + beforeEach, + afterEach, + type Mock, + type MockInstance, +} from 'vitest'; import { listMcpServers } from './list.js'; import { loadSettings } from '../../config/settings.js'; import { ExtensionStorage, loadExtensions } from '../../config/extension.js'; @@ -37,24 +46,25 @@ vi.mock('@google/gemini-cli-core', () => ({ })); vi.mock('@modelcontextprotocol/sdk/client/index.js'); -const mockedExtensionStorage = ExtensionStorage as vi.Mock; -const mockedLoadSettings = loadSettings as vi.Mock; -const mockedLoadExtensions = loadExtensions as vi.Mock; -const mockedCreateTransport = createTransport as vi.Mock; -const MockedClient = Client as vi.Mock; +const mockedGetUserExtensionsDir = + ExtensionStorage.getUserExtensionsDir as Mock; +const mockedLoadSettings = loadSettings as Mock; +const mockedLoadExtensions = loadExtensions as Mock; +const mockedCreateTransport = createTransport as Mock; +const MockedClient = Client as Mock; interface MockClient { - connect: vi.Mock; - ping: vi.Mock; - close: vi.Mock; + connect: Mock; + ping: Mock; + close: Mock; } interface MockTransport { - close: vi.Mock; + close: Mock; } describe('mcp list command', () => { - let consoleSpy: vi.SpyInstance; + let consoleSpy: MockInstance; let mockClient: MockClient; let mockTransport: MockTransport; @@ -73,9 +83,7 @@ describe('mcp list command', () => { MockedClient.mockImplementation(() => mockClient); mockedCreateTransport.mockResolvedValue(mockTransport); mockedLoadExtensions.mockReturnValue([]); - mockedExtensionStorage.getUserExtensionsDir.mockReturnValue( - '/mocked/extensions/dir', - ); + mockedGetUserExtensionsDir.mockReturnValue('/mocked/extensions/dir'); }); afterEach(() => { @@ -170,7 +178,7 @@ describe('mcp list command', () => { ); expect(consoleSpy).toHaveBeenCalledWith( expect.stringContaining( - 'extension-server: /ext/server (stdio) - Connected', + 'extension-server (from test-extension): /ext/server (stdio) - Connected', ), ); }); diff --git a/packages/cli/src/commands/mcp/list.ts b/packages/cli/src/commands/mcp/list.ts index 173630364c..252dcfd52b 100644 --- a/packages/cli/src/commands/mcp/list.ts +++ b/packages/cli/src/commands/mcp/list.ts @@ -115,7 +115,10 @@ export async function listMcpServers(): Promise { break; } - let serverInfo = `${serverName}: `; + let serverInfo = + serverName + + (server.extensionName ? ` (from ${server.extensionName})` : '') + + ': '; if (server.httpUrl) { serverInfo += `${server.httpUrl} (http)`; } else if (server.url) {