Path: blob/main/src/vs/workbench/contrib/mcp/browser/mcpDiscovery.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';6import { autorun } from '../../../../base/common/observable.js';7import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';8import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';9import { mcpAccessConfig, McpAccessValue } from '../../../../platform/mcp/common/mcpManagement.js';10import { observableConfigValue } from '../../../../platform/observable/common/platformObservableUtils.js';11import { IWorkbenchContribution } from '../../../common/contributions.js';12import { mcpDiscoveryRegistry } from '../common/discovery/mcpDiscovery.js';1314export class McpDiscovery extends Disposable implements IWorkbenchContribution {15public static readonly ID = 'workbench.contrib.mcp.discovery';1617constructor(18@IInstantiationService instantiationService: IInstantiationService,19@IConfigurationService configurationService: IConfigurationService,20) {21super();2223const mcpAccessValue = observableConfigValue(mcpAccessConfig, McpAccessValue.All, configurationService);24const store = this._register(new DisposableStore());2526this._register(autorun(reader => {27store.clear();28const value = mcpAccessValue.read(reader);29if (value === McpAccessValue.None) {30return;31}32for (const descriptor of mcpDiscoveryRegistry.getAll()) {33const mcpDiscovery = instantiationService.createInstance(descriptor);34if (value === McpAccessValue.Registry && !mcpDiscovery.fromGallery) {35mcpDiscovery.dispose();36continue;37}38store.add(mcpDiscovery);39mcpDiscovery.start();40}41}));42}43}444546