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