diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts index 522a47cfc8f..4376ba3408b 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts @@ -1447,7 +1447,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I } }; - // namespace: chat + // namespace: chatregisterMcpServerDefinitionProvider const chat: typeof vscode.chat = { registerMappedEditsProvider(_selector: vscode.DocumentSelector, _provider: vscode.MappedEditsProvider) { checkProposedApiEnabled(extension, 'mappedEditsProvider'); @@ -1527,12 +1527,15 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I registerIgnoredFileProvider(provider: vscode.LanguageModelIgnoredFileProvider) { return extHostLanguageModels.registerIgnoredFileProvider(extension, provider); }, - registerMcpConfigurationProvider(id, provider) { + registerMcpServerDefinitionProvider(id, provider) { checkProposedApiEnabled(extension, 'mcpConfigurationProvider'); return extHostMcp.registerMcpConfigurationProvider(extension, id, provider); } }; + // todo@connor4312: proposed API back-compat + (lm as any).registerMcpConfigurationProvider = lm.registerMcpServerDefinitionProvider; + // namespace: speech const speech: typeof vscode.speech = { registerSpeechProvider(id: string, provider: vscode.SpeechProvider) { diff --git a/src/vs/workbench/api/common/extHostMcp.ts b/src/vs/workbench/api/common/extHostMcp.ts index 39683cb2034..0a4c7429972 100644 --- a/src/vs/workbench/api/common/extHostMcp.ts +++ b/src/vs/workbench/api/common/extHostMcp.ts @@ -20,7 +20,7 @@ import * as Convert from './extHostTypeConverters.js'; export const IExtHostMpcService = createDecorator('IExtHostMpcService'); export interface IExtHostMpcService extends ExtHostMcpShape { - registerMcpConfigurationProvider(extension: IExtensionDescription, id: string, provider: vscode.McpConfigurationProvider): IDisposable; + registerMcpConfigurationProvider(extension: IExtensionDescription, id: string, provider: vscode.McpServerDefinitionProvider): IDisposable; } export class ExtHostMcpService extends Disposable implements IExtHostMpcService { @@ -28,7 +28,7 @@ export class ExtHostMcpService extends Disposable implements IExtHostMpcService private readonly _initialProviderPromises = new Set>(); private readonly _sseEventSources = this._register(new DisposableMap()); private readonly _unresolvedMcpServers = new Map(); @@ -85,8 +85,8 @@ export class ExtHostMcpService extends Disposable implements IExtHostMpcService return resolved ? Convert.McpServerDefinition.from(resolved) : undefined; } - /** {@link vscode.lm.registerMcpConfigurationProvider} */ - public registerMcpConfigurationProvider(extension: IExtensionDescription, id: string, provider: vscode.McpConfigurationProvider): IDisposable { + /** {@link vscode.lm.registerMcpServerDefinitionProvider} */ + public registerMcpConfigurationProvider(extension: IExtensionDescription, id: string, provider: vscode.McpServerDefinitionProvider): IDisposable { const store = new DisposableStore(); const metadata = extension.contributes?.modelContextServerCollections?.find(m => m.id === id); @@ -125,8 +125,12 @@ export class ExtHostMcpService extends Disposable implements IExtHostMpcService this._proxy.$deleteMcpCollection(mcp.id); })); - if (provider.onDidChange) { - store.add(provider.onDidChange(update)); + if (provider.onDidChangeServerDefinitions) { + store.add(provider.onDidChangeServerDefinitions(update)); + } + // todo@connor4312: proposed API back-compat + if ((provider as any).onDidChange) { + store.add((provider as any).onDidChange(update)); } const promise = new Promise(resolve => { diff --git a/src/vscode-dts/vscode.proposed.mcpConfigurationProvider.d.ts b/src/vscode-dts/vscode.proposed.mcpConfigurationProvider.d.ts index 7e7e50e4d25..9f36dd5aca1 100644 --- a/src/vscode-dts/vscode.proposed.mcpConfigurationProvider.d.ts +++ b/src/vscode-dts/vscode.proposed.mcpConfigurationProvider.d.ts @@ -8,13 +8,15 @@ declare module 'vscode' { /** * McpStdioServerDefinition represents an MCP server available by running - * a local process and listening to its stdin and stdout streams. + * a local process and listening to its stdin and stdout streams. The process + * will be spawned as a child process of the extension host and by default + * will not run in a shell environment. */ export class McpStdioServerDefinition { /** * The human-readable name of the server. */ - label: string; + readonly label: string; /** * The working directory used to start the server. @@ -62,7 +64,7 @@ declare module 'vscode' { /** * The human-readable name of the server. */ - label: string; + readonly label: string; /** * The URI of the server. The editor will make a POST request to this URI @@ -99,11 +101,11 @@ declare module 'vscode' { * To allow the editor to cache available servers, extensions should register * this before `activate()` resolves. */ - export interface McpConfigurationProvider { + export interface McpServerDefinitionProvider { /** * Optional event fired to signal that the set of available servers has changed. */ - onDidChange?: Event; + onDidChangeServerDefinitions?: Event; /** * Provides available MCP servers. The editor will call this method eagerly @@ -132,6 +134,6 @@ declare module 'vscode' { } namespace lm { - export function registerMcpConfigurationProvider(id: string, provider: McpConfigurationProvider): Disposable; + export function registerMcpServerDefinitionProvider(id: string, provider: McpServerDefinitionProvider): Disposable; } }