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