Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/mcp/browser/mcp.contribution.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 { localize } from '../../../../nls.js';
7
import { registerAction2 } from '../../../../platform/actions/common/actions.js';
8
import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js';
9
import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js';
10
import * as jsonContributionRegistry from '../../../../platform/jsonschemas/common/jsonContributionRegistry.js';
11
import { mcpAccessConfig, McpAccessValue } from '../../../../platform/mcp/common/mcpManagement.js';
12
import { IQuickAccessRegistry, Extensions as QuickAccessExtensions } from '../../../../platform/quickinput/common/quickAccess.js';
13
import { Registry } from '../../../../platform/registry/common/platform.js';
14
import { EditorPaneDescriptor, IEditorPaneRegistry } from '../../../browser/editor.js';
15
import { IConfigurationMigrationRegistry, Extensions as ConfigurationMigrationExtensions, ConfigurationKeyValuePairs } from '../../../common/configuration.js';
16
import { registerWorkbenchContribution2, WorkbenchPhase } from '../../../common/contributions.js';
17
import { EditorExtensions } from '../../../common/editor.js';
18
import { mcpSchemaId } from '../../../services/configuration/common/configuration.js';
19
import { ExtensionMcpDiscovery } from '../common/discovery/extensionMcpDiscovery.js';
20
import { InstalledMcpServersDiscovery } from '../common/discovery/installedMcpServersDiscovery.js';
21
import { mcpDiscoveryRegistry } from '../common/discovery/mcpDiscovery.js';
22
import { RemoteNativeMpcDiscovery } from '../common/discovery/nativeMcpRemoteDiscovery.js';
23
import { CursorWorkspaceMcpDiscoveryAdapter } from '../common/discovery/workspaceMcpDiscoveryAdapter.js';
24
import { McpCommandIds } from '../common/mcpCommandIds.js';
25
import { mcpServerSchema } from '../common/mcpConfiguration.js';
26
import { McpContextKeysController } from '../common/mcpContextKeys.js';
27
import { IMcpDevModeDebugging, McpDevModeDebugging } from '../common/mcpDevMode.js';
28
import { McpLanguageModelToolContribution } from '../common/mcpLanguageModelToolContribution.js';
29
import { McpRegistry } from '../common/mcpRegistry.js';
30
import { IMcpRegistry } from '../common/mcpRegistryTypes.js';
31
import { McpResourceFilesystem } from '../common/mcpResourceFilesystem.js';
32
import { McpSamplingService } from '../common/mcpSamplingService.js';
33
import { McpService } from '../common/mcpService.js';
34
import { IMcpElicitationService, IMcpSamplingService, IMcpService, IMcpWorkbenchService } from '../common/mcpTypes.js';
35
import { McpAddContextContribution } from './mcpAddContextContribution.js';
36
import { AddConfigurationAction, BrowseMcpServersPageCommand, EditStoredInput, ListMcpServerCommand, McpBrowseCommand, McpBrowseResourcesCommand, McpConfigureSamplingModels, McpConfirmationServerOptionsCommand, MCPServerActionRendering, McpServerOptionsCommand, McpStartPromptingServerCommand, OpenRemoteUserMcpResourceCommand, OpenUserMcpResourceCommand, OpenWorkspaceFolderMcpResourceCommand, OpenWorkspaceMcpResourceCommand, RemoveStoredInput, ResetMcpCachedTools, ResetMcpTrustCommand, RestartServer, ShowConfiguration, ShowInstalledMcpServersCommand, ShowOutput, StartServer, StopServer } from './mcpCommands.js';
37
import { McpDiscovery } from './mcpDiscovery.js';
38
import { McpElicitationService } from './mcpElicitationService.js';
39
import { McpLanguageFeatures } from './mcpLanguageFeatures.js';
40
import { McpConfigMigrationContribution } from './mcpMigration.js';
41
import { McpResourceQuickAccess } from './mcpResourceQuickAccess.js';
42
import { McpServerEditor } from './mcpServerEditor.js';
43
import { McpServerEditorInput } from './mcpServerEditorInput.js';
44
import { McpServersViewsContribution } from './mcpServersView.js';
45
import { MCPContextsInitialisation, McpWorkbenchService } from './mcpWorkbenchService.js';
46
47
registerSingleton(IMcpRegistry, McpRegistry, InstantiationType.Delayed);
48
registerSingleton(IMcpService, McpService, InstantiationType.Delayed);
49
registerSingleton(IMcpWorkbenchService, McpWorkbenchService, InstantiationType.Eager);
50
registerSingleton(IMcpDevModeDebugging, McpDevModeDebugging, InstantiationType.Delayed);
51
registerSingleton(IMcpSamplingService, McpSamplingService, InstantiationType.Delayed);
52
registerSingleton(IMcpElicitationService, McpElicitationService, InstantiationType.Delayed);
53
54
mcpDiscoveryRegistry.register(new SyncDescriptor(RemoteNativeMpcDiscovery));
55
mcpDiscoveryRegistry.register(new SyncDescriptor(InstalledMcpServersDiscovery));
56
mcpDiscoveryRegistry.register(new SyncDescriptor(ExtensionMcpDiscovery));
57
mcpDiscoveryRegistry.register(new SyncDescriptor(CursorWorkspaceMcpDiscoveryAdapter));
58
59
registerWorkbenchContribution2('mcpDiscovery', McpDiscovery, WorkbenchPhase.AfterRestored);
60
registerWorkbenchContribution2('mcpContextKeys', McpContextKeysController, WorkbenchPhase.BlockRestore);
61
registerWorkbenchContribution2('mcpLanguageFeatures', McpLanguageFeatures, WorkbenchPhase.Eventually);
62
registerWorkbenchContribution2('mcpResourceFilesystem', McpResourceFilesystem, WorkbenchPhase.BlockRestore);
63
registerWorkbenchContribution2(McpLanguageModelToolContribution.ID, McpLanguageModelToolContribution, WorkbenchPhase.AfterRestored);
64
65
registerAction2(ListMcpServerCommand);
66
registerAction2(McpServerOptionsCommand);
67
registerAction2(McpConfirmationServerOptionsCommand);
68
registerAction2(ResetMcpTrustCommand);
69
registerAction2(ResetMcpCachedTools);
70
registerAction2(AddConfigurationAction);
71
registerAction2(RemoveStoredInput);
72
registerAction2(EditStoredInput);
73
registerAction2(StartServer);
74
registerAction2(StopServer);
75
registerAction2(ShowOutput);
76
registerAction2(RestartServer);
77
registerAction2(ShowConfiguration);
78
registerAction2(McpBrowseCommand);
79
registerAction2(BrowseMcpServersPageCommand);
80
registerAction2(OpenUserMcpResourceCommand);
81
registerAction2(OpenRemoteUserMcpResourceCommand);
82
registerAction2(OpenWorkspaceMcpResourceCommand);
83
registerAction2(OpenWorkspaceFolderMcpResourceCommand);
84
registerAction2(ShowInstalledMcpServersCommand);
85
registerAction2(McpBrowseResourcesCommand);
86
registerAction2(McpConfigureSamplingModels);
87
registerAction2(McpStartPromptingServerCommand);
88
89
registerWorkbenchContribution2('mcpActionRendering', MCPServerActionRendering, WorkbenchPhase.BlockRestore);
90
registerWorkbenchContribution2('mcpAddContext', McpAddContextContribution, WorkbenchPhase.Eventually);
91
registerWorkbenchContribution2(MCPContextsInitialisation.ID, MCPContextsInitialisation, WorkbenchPhase.AfterRestored);
92
registerWorkbenchContribution2(McpConfigMigrationContribution.ID, McpConfigMigrationContribution, WorkbenchPhase.Eventually);
93
registerWorkbenchContribution2(McpServersViewsContribution.ID, McpServersViewsContribution, WorkbenchPhase.AfterRestored);
94
95
const jsonRegistry = <jsonContributionRegistry.IJSONContributionRegistry>Registry.as(jsonContributionRegistry.Extensions.JSONContribution);
96
jsonRegistry.registerSchema(mcpSchemaId, mcpServerSchema);
97
98
Registry.as<IEditorPaneRegistry>(EditorExtensions.EditorPane).registerEditorPane(
99
EditorPaneDescriptor.create(
100
McpServerEditor,
101
McpServerEditor.ID,
102
localize('mcpServer', "MCP Server")
103
),
104
[
105
new SyncDescriptor(McpServerEditorInput)
106
]);
107
108
Registry.as<IQuickAccessRegistry>(QuickAccessExtensions.Quickaccess).registerQuickAccessProvider({
109
ctor: McpResourceQuickAccess,
110
prefix: McpResourceQuickAccess.PREFIX,
111
placeholder: localize('mcp.quickaccess.placeholder', "Filter to an MCP resource"),
112
helpEntries: [{
113
description: localize('mcp.quickaccess.add', "MCP Server Resources"),
114
commandId: McpCommandIds.AddConfiguration
115
}]
116
});
117
118
119
Registry.as<IConfigurationMigrationRegistry>(ConfigurationMigrationExtensions.ConfigurationMigration)
120
.registerConfigurationMigrations([{
121
key: 'chat.mcp.enabled',
122
migrateFn: (value, accessor) => {
123
const result: ConfigurationKeyValuePairs = [['chat.mcp.enabled', { value: undefined }]];
124
if (value === true) {
125
result.push([mcpAccessConfig, { value: McpAccessValue.All }]);
126
}
127
if (value === false) {
128
result.push([mcpAccessConfig, { value: McpAccessValue.None }]);
129
}
130
return result;
131
}
132
}]);
133
134