diff --git a/src/vs/workbench/api/browser/mainThreadMcp.ts b/src/vs/workbench/api/browser/mainThreadMcp.ts index 8e87a91b1e0..0743d780c42 100644 --- a/src/vs/workbench/api/browser/mainThreadMcp.ts +++ b/src/vs/workbench/api/browser/mainThreadMcp.ts @@ -40,6 +40,8 @@ export class MainThreadMcp extends Disposable implements MainThreadMcpShape { const proxy = _extHostContext.getProxy(ExtHostContext.ExtHostMcp); this._mcpEnabled = observableConfigValue(mcpEnabledSection, true, configurationService); this._register(this._mcpRegistry.registerDelegate({ + // Prefer Node.js extension hosts when they're available. No CORS issues etc. + priority: _extHostContext.extensionHostKind === ExtensionHostKind.LocalWebWorker ? 0 : 1, waitForInitialProviderPromises() { return proxy.$waitForInitialCollectionProviders(); }, diff --git a/src/vs/workbench/contrib/mcp/common/mcpRegistry.ts b/src/vs/workbench/contrib/mcp/common/mcpRegistry.ts index 3a04966d2e7..f7577bcc20c 100644 --- a/src/vs/workbench/contrib/mcp/common/mcpRegistry.ts +++ b/src/vs/workbench/contrib/mcp/common/mcpRegistry.ts @@ -112,6 +112,8 @@ export class McpRegistry extends Disposable implements IMcpRegistry { public registerDelegate(delegate: IMcpHostDelegate): IDisposable { this._delegates.push(delegate); + this._delegates.sort((a, b) => b.priority - a.priority); + return { dispose: () => { const index = this._delegates.indexOf(delegate); diff --git a/src/vs/workbench/contrib/mcp/common/mcpRegistryTypes.ts b/src/vs/workbench/contrib/mcp/common/mcpRegistryTypes.ts index e331129d682..07de8bc1a5b 100644 --- a/src/vs/workbench/contrib/mcp/common/mcpRegistryTypes.ts +++ b/src/vs/workbench/contrib/mcp/common/mcpRegistryTypes.ts @@ -27,6 +27,8 @@ export interface IMcpMessageTransport extends IDisposable { } export interface IMcpHostDelegate { + /** Priority for this delegate, delegates are tested in descending priority order */ + readonly priority: number; waitForInitialProviderPromises(): Promise; canStart(collectionDefinition: McpCollectionDefinition, serverDefinition: McpServerDefinition): boolean; start(collectionDefinition: McpCollectionDefinition, serverDefinition: McpServerDefinition, resolvedLaunch: McpServerLaunch): IMcpMessageTransport; diff --git a/src/vs/workbench/contrib/mcp/test/common/mcpRegistry.test.ts b/src/vs/workbench/contrib/mcp/test/common/mcpRegistry.test.ts index bcbbc95a074..8f4cbb70535 100644 --- a/src/vs/workbench/contrib/mcp/test/common/mcpRegistry.test.ts +++ b/src/vs/workbench/contrib/mcp/test/common/mcpRegistry.test.ts @@ -72,6 +72,8 @@ class TestConfigurationResolverService implements Partial