@@ -16,7 +16,7 @@ import {
1616import { McpClientManager } from './mcp-client-manager.js' ;
1717import { McpClient , MCPDiscoveryState } from './mcp-client.js' ;
1818import type { ToolRegistry } from './tool-registry.js' ;
19- import type { Config } from '../config/config.js' ;
19+ import type { Config , GeminiCLIExtension } from '../config/config.js' ;
2020
2121vi . mock ( './mcp-client.js' , async ( ) => {
2222 const originalModule = await vi . importActual ( './mcp-client.js' ) ;
@@ -320,4 +320,57 @@ describe('McpClientManager', () => {
320320 await expect ( manager . restartServer ( 'test-server' ) ) . resolves . not . toThrow ( ) ;
321321 } ) ;
322322 } ) ;
323+
324+ describe ( 'Extension handling' , ( ) => {
325+ it ( 'should remove mcp servers from allServerConfigs when stopExtension is called' , async ( ) => {
326+ const manager = new McpClientManager ( '0.0.1' , toolRegistry , mockConfig ) ;
327+ const mcpServers = {
328+ 'test-server' : { command : 'node' , args : [ 'server.js' ] } ,
329+ } ;
330+ const extension : GeminiCLIExtension = {
331+ name : 'test-extension' ,
332+ mcpServers,
333+ isActive : true ,
334+ version : '1.0.0' ,
335+ path : '/some-path' ,
336+ contextFiles : [ ] ,
337+ id : '123' ,
338+ } ;
339+
340+ await manager . startExtension ( extension ) ;
341+ expect ( manager . getMcpServers ( ) ) . toHaveProperty ( 'test-server' ) ;
342+
343+ await manager . stopExtension ( extension ) ;
344+ expect ( manager . getMcpServers ( ) ) . not . toHaveProperty ( 'test-server' ) ;
345+ } ) ;
346+
347+ it ( 'should remove servers from blockedMcpServers when stopExtension is called' , async ( ) => {
348+ mockConfig . getBlockedMcpServers . mockReturnValue ( [ 'blocked-server' ] ) ;
349+ const manager = new McpClientManager ( '0.0.1' , toolRegistry , mockConfig ) ;
350+ const mcpServers = {
351+ 'blocked-server' : { command : 'node' , args : [ 'server.js' ] } ,
352+ } ;
353+ const extension : GeminiCLIExtension = {
354+ name : 'test-extension' ,
355+ mcpServers,
356+ isActive : true ,
357+ version : '1.0.0' ,
358+ path : '/some-path' ,
359+ contextFiles : [ ] ,
360+ id : '123' ,
361+ } ;
362+
363+ await manager . startExtension ( extension ) ;
364+ expect ( manager . getBlockedMcpServers ( ) ) . toContainEqual ( {
365+ name : 'blocked-server' ,
366+ extensionName : 'test-extension' ,
367+ } ) ;
368+
369+ await manager . stopExtension ( extension ) ;
370+ expect ( manager . getBlockedMcpServers ( ) ) . not . toContainEqual ( {
371+ name : 'blocked-server' ,
372+ extensionName : 'test-extension' ,
373+ } ) ;
374+ } ) ;
375+ } ) ;
323376} ) ;
0 commit comments