diff --git a/packages/core/src/agents/local-executor.ts b/packages/core/src/agents/local-executor.ts index 2302e117f8..0c8e55ad65 100644 --- a/packages/core/src/agents/local-executor.ts +++ b/packages/core/src/agents/local-executor.ts @@ -625,6 +625,15 @@ export class LocalAgentExecutor { } } finally { this.config.userHintService.offUserHint(hintListener); + + const globalMcpManager = this.context.config.getMcpClientManager(); + if (globalMcpManager) { + globalMcpManager.removeRegistries({ + toolRegistry: this.toolRegistry, + promptRegistry: this.promptRegistry, + resourceRegistry: this.resourceRegistry, + }); + } } // === UNIFIED RECOVERY BLOCK === diff --git a/packages/core/src/tools/mcp-client-manager.ts b/packages/core/src/tools/mcp-client-manager.ts index 2f208c70d7..a607b19508 100644 --- a/packages/core/src/tools/mcp-client-manager.ts +++ b/packages/core/src/tools/mcp-client-manager.ts @@ -164,6 +164,16 @@ export class McpClientManager { return this.clients.get(serverName); } + removeRegistries(registries: { + toolRegistry: ToolRegistry; + promptRegistry: PromptRegistry; + resourceRegistry: ResourceRegistry; + }): void { + for (const client of this.clients.values()) { + client.removeRegistries(registries); + } + } + /** * For all the MCP servers associated with this extension: * diff --git a/packages/core/src/tools/mcp-client.ts b/packages/core/src/tools/mcp-client.ts index 23d83f494a..58b7b6c8e2 100644 --- a/packages/core/src/tools/mcp-client.ts +++ b/packages/core/src/tools/mcp-client.ts @@ -266,6 +266,14 @@ export class McpClient implements McpProgressReporter { } } + /** + * Unregisters registries so this client will no longer update them when it receives + * list_changed notifications from the server. + */ + removeRegistries(registries: RegistrySet): void { + this.registeredRegistries.delete(registries); + } + /** * Disconnects from the MCP server. */