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