UNPKG

@eclipse-glsp/vscode-integration

Version:

Glue code to integrate GLSP diagrams in VSCode extensions (extension part)

81 lines 3.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GlspMcpServerProvider = void 0; /******************************************************************************** * Copyright (c) 2026 EclipseSource and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. * * This Source Code may also be made available under the following Secondary * Licenses when the conditions for such availability set forth in the Eclipse * Public License v. 2.0 are satisfied: GNU General Public License, version 2 * with the GNU Classpath Exception which is available at * https://www.gnu.org/software/classpath/license.html. * * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ const protocol_1 = require("@eclipse-glsp/protocol"); const vscode = require("vscode"); /** * Bridges the embedded GLSP MCP server's announced URL into VS Code's built-in MCP host * via {@link vscode.lm.registerMcpServerDefinitionProvider}. Adopters create one provider * per extension and feed it the {@link InitializeResult} they get back from the GLSP server's * `initialize` call (or an explicit {@link McpServerResult}); each entry then surfaces as a * dynamic MCP server definition in VS Code. * * Companion contribution point in the consuming extension's `package.json`: * ```json * "contributes": { * "mcpServerDefinitionProviders": [ * { "id": "glsp", "label": "GLSP" } * ] * } * ``` * * @example * ```ts * const provider = new GlspMcpServerProvider(); * context.subscriptions.push(vscode.lm.registerMcpServerDefinitionProvider('glsp', provider)); * const initializeResult = await glspVscodeServer.initializeResult; * provider.addServer(initializeResult); * ``` */ class GlspMcpServerProvider { constructor() { this.servers = new Map(); this.didChangeEmitter = new vscode.EventEmitter(); this.onDidChangeMcpServerDefinitions = this.didChangeEmitter.event; } /** * Adds (or replaces by `name`) an MCP server entry. Accepts either the raw * {@link InitializeResult} from a GLSP `initialize` call (a no-op if the response carries no * `mcpServer` field) or an explicit {@link McpServerResult}. Returns the entry that was * registered, or `undefined` if nothing was added. */ addServer(serverOrResult) { const server = protocol_1.McpServerResult.is(serverOrResult) ? serverOrResult : protocol_1.McpInitializeResult.getServer(serverOrResult); if (!server) { return undefined; } this.servers.set(server.name, server); this.didChangeEmitter.fire(); return server; } /** Removes a previously-added entry by `name`. No-op if the entry is unknown. */ removeServer(name) { if (this.servers.delete(name)) { this.didChangeEmitter.fire(); } } provideMcpServerDefinitions() { return [...this.servers.values()].map(server => new vscode.McpHttpServerDefinition(server.name, vscode.Uri.parse(server.url), server.headers)); } dispose() { this.servers.clear(); this.didChangeEmitter.dispose(); } } exports.GlspMcpServerProvider = GlspMcpServerProvider; //# sourceMappingURL=glsp-mcp-server-provider.js.map