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