@theia/ai-mcp 1.66.0-next.41 → 1.66.0-next.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/lib/browser/mcp-frontend-module.d.ts.map +1 -1
  2. package/lib/browser/mcp-frontend-module.js +48 -1
  3. package/lib/browser/mcp-frontend-module.js.map +1 -1
  4. package/lib/browser/mcp-server-manager-server-client.d.ts +12 -0
  5. package/lib/browser/mcp-server-manager-server-client.d.ts.map +1 -0
  6. package/lib/browser/mcp-server-manager-server-client.js +80 -0
  7. package/lib/browser/mcp-server-manager-server-client.js.map +1 -0
  8. package/lib/common/mcp-protocol.d.ts +52 -0
  9. package/lib/common/mcp-protocol.d.ts.map +1 -0
  10. package/lib/common/mcp-protocol.js +30 -0
  11. package/lib/common/mcp-protocol.js.map +1 -0
  12. package/lib/common/mcp-server-manager.d.ts +10 -0
  13. package/lib/common/mcp-server-manager.d.ts.map +1 -1
  14. package/lib/common/mcp-server-manager.js.map +1 -1
  15. package/lib/node/mcp-backend-module.d.ts.map +1 -1
  16. package/lib/node/mcp-backend-module.js +8 -0
  17. package/lib/node/mcp-backend-module.js.map +1 -1
  18. package/lib/node/mcp-server-manager-impl.d.ts.map +1 -1
  19. package/lib/node/mcp-server-manager-impl.js +8 -0
  20. package/lib/node/mcp-server-manager-impl.js.map +1 -1
  21. package/lib/node/mcp-server-manager-server.d.ts +9 -0
  22. package/lib/node/mcp-server-manager-server.d.ts.map +1 -0
  23. package/lib/node/mcp-server-manager-server.js +53 -0
  24. package/lib/node/mcp-server-manager-server.js.map +1 -0
  25. package/package.json +4 -4
  26. package/src/browser/mcp-frontend-module.ts +59 -2
  27. package/src/browser/mcp-server-manager-server-client.ts +82 -0
  28. package/src/common/mcp-protocol.ts +75 -0
  29. package/src/common/mcp-server-manager.ts +11 -0
  30. package/src/node/mcp-backend-module.ts +15 -1
  31. package/src/node/mcp-server-manager-impl.ts +8 -0
  32. package/src/node/mcp-server-manager-server.ts +49 -0
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/mcp-frontend-module.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;AAO/D,wBASG"}
1
+ {"version":3,"file":"mcp-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/mcp-frontend-module.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;AAc/D,wBA2DG"}
@@ -21,14 +21,61 @@ const mcp_server_manager_1 = require("../common/mcp-server-manager");
21
21
  const mcp_frontend_application_contribution_1 = require("./mcp-frontend-application-contribution");
22
22
  const mcp_frontend_service_1 = require("./mcp-frontend-service");
23
23
  const mcp_frontend_notification_service_1 = require("./mcp-frontend-notification-service");
24
+ const mcp_server_manager_server_client_1 = require("./mcp-server-manager-server-client");
25
+ const mcp_protocol_1 = require("../common/mcp-protocol");
24
26
  exports.default = new inversify_1.ContainerModule(bind => {
25
27
  bind(browser_1.FrontendApplicationContribution).to(mcp_frontend_application_contribution_1.McpFrontendApplicationContribution).inSingletonScope();
26
28
  bind(mcp_server_manager_1.MCPFrontendService).to(mcp_frontend_service_1.MCPFrontendServiceImpl).inSingletonScope();
27
29
  bind(mcp_server_manager_1.MCPFrontendNotificationService).to(mcp_frontend_notification_service_1.MCPFrontendNotificationServiceImpl).inSingletonScope();
30
+ bind(mcp_protocol_1.MCPServerManagerServerClient).to(mcp_server_manager_server_client_1.MCPServerManagerServerClientImpl).inSingletonScope();
31
+ bind(mcp_protocol_1.MCPServerManagerServer).toDynamicValue(ctx => {
32
+ const connection = ctx.container.get(browser_1.RemoteConnectionProvider);
33
+ const client = ctx.container.get(mcp_protocol_1.MCPServerManagerServerClient);
34
+ return connection.createProxy(mcp_protocol_1.MCPServerManagerServerPath, client);
35
+ }).inSingletonScope();
28
36
  bind(mcp_server_manager_1.MCPServerManager).toDynamicValue(ctx => {
37
+ const mgrServer = ctx.container.get(mcp_protocol_1.MCPServerManagerServer);
29
38
  const connection = ctx.container.get(browser_1.RemoteConnectionProvider);
30
39
  const client = ctx.container.get(mcp_server_manager_1.MCPFrontendNotificationService);
31
- return connection.createProxy(mcp_server_manager_1.MCPServerManagerPath, client);
40
+ const serverClient = ctx.container.get(mcp_protocol_1.MCPServerManagerServerClient);
41
+ const backendServerManager = connection.createProxy(mcp_server_manager_1.MCPServerManagerPath, client);
42
+ // Listen to server updates to clean up removed servers
43
+ client.onDidUpdateMCPServers(() => backendServerManager.getServerNames()
44
+ .then(names => serverClient.cleanServers(names))
45
+ .catch((error) => {
46
+ console.error('Error cleaning server descriptions:', error);
47
+ }));
48
+ // We proxy the MCPServerManager to override addOrUpdateServer and getServerDescription
49
+ // to handle the resolve functions via the MCPServerManagerServerClient.
50
+ return new Proxy(backendServerManager, {
51
+ get(target, prop, receiver) {
52
+ // override addOrUpdateServer to store the original description in the MCPServerManagerServerClient
53
+ // to be used in resolveServerDescription if a resolve function is provided
54
+ if (prop === 'addOrUpdateServer') {
55
+ return async function (...args) {
56
+ const updated = serverClient.addServerDescription(args[0]);
57
+ await mgrServer.addOrUpdateServer(updated);
58
+ };
59
+ }
60
+ // override getServerDescription to mix in the resolve function from the client
61
+ if (prop === 'getServerDescription') {
62
+ return async function (name) {
63
+ const description = await Reflect.apply(target.getServerDescription, target, [name]);
64
+ if (description) {
65
+ const resolveFunction = serverClient.getResolveFunction(name);
66
+ if (resolveFunction) {
67
+ return {
68
+ ...description,
69
+ resolve: resolveFunction
70
+ };
71
+ }
72
+ }
73
+ return description;
74
+ };
75
+ }
76
+ return Reflect.get(target, prop, receiver);
77
+ }
78
+ });
32
79
  }).inSingletonScope();
33
80
  });
34
81
  //# sourceMappingURL=mcp-frontend-module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-frontend-module.js","sourceRoot":"","sources":["../../src/browser/mcp-frontend-module.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,4DAA+D;AAC/D,qDAA+H;AAC/H,qEAA0I;AAC1I,mGAA6F;AAC7F,iEAAgE;AAChE,2FAAyF;AAEzF,kBAAe,IAAI,2BAAe,CAAC,IAAI,CAAC,EAAE;IACtC,IAAI,CAAC,yCAA+B,CAAC,CAAC,EAAE,CAAC,0EAAkC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAChG,IAAI,CAAC,uCAAkB,CAAC,CAAC,EAAE,CAAC,6CAAsB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACvE,IAAI,CAAC,mDAA8B,CAAC,CAAC,EAAE,CAAC,sEAAkC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC/F,IAAI,CAAC,qCAAgB,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;QACxC,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAA4B,kCAAwB,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAiC,mDAA8B,CAAC,CAAC;QACjG,OAAO,UAAU,CAAC,WAAW,CAAmB,yCAAoB,EAAE,MAAM,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"mcp-frontend-module.js","sourceRoot":"","sources":["../../src/browser/mcp-frontend-module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { MCPServerDescription } from '../common';
2
+ import { MCPServerDescriptionRCP, MCPServerManagerServerClient } from '../common/mcp-protocol';
3
+ type StoredServerInfo = Pick<MCPServerDescription, 'name' | 'resolve'>;
4
+ export declare class MCPServerManagerServerClientImpl implements MCPServerManagerServerClient {
5
+ protected serverDescriptions: Map<string, StoredServerInfo>;
6
+ addServerDescription(description: MCPServerDescription): MCPServerDescriptionRCP;
7
+ getResolveFunction(name: string): MCPServerDescription['resolve'];
8
+ resolveServerDescription(description: MCPServerDescriptionRCP): Promise<MCPServerDescription>;
9
+ cleanServers(serverNames: string[]): void;
10
+ }
11
+ export {};
12
+ //# sourceMappingURL=mcp-server-manager-server-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server-manager-server-client.d.ts","sourceRoot":"","sources":["../../src/browser/mcp-server-manager-server-client.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,EAA0B,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAEvH,KAAK,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAEvE,qBACa,gCAAiC,YAAW,4BAA4B;IAEjF,SAAS,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAa;IAExE,oBAAoB,CAAC,WAAW,EAAE,oBAAoB,GAAG,uBAAuB;IAoBhF,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC;IAS3D,wBAAwB,CAAC,WAAW,EAAE,uBAAuB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAcnG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI;CAU5C"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2025 Dirk Fauth and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.MCPServerManagerServerClientImpl = void 0;
19
+ const tslib_1 = require("tslib");
20
+ const inversify_1 = require("@theia/core/shared/inversify");
21
+ const uuid_1 = require("@theia/core/lib/common/uuid");
22
+ const mcp_protocol_1 = require("../common/mcp-protocol");
23
+ let MCPServerManagerServerClientImpl = class MCPServerManagerServerClientImpl {
24
+ constructor() {
25
+ this.serverDescriptions = new Map();
26
+ }
27
+ addServerDescription(description) {
28
+ if (description.resolve) {
29
+ const serverDescription = {
30
+ ...description,
31
+ resolveId: (0, uuid_1.generateUuid)(),
32
+ };
33
+ // store only the name and resolve function
34
+ if (serverDescription.resolveId) {
35
+ this.serverDescriptions.set(serverDescription.resolveId, {
36
+ name: description.name,
37
+ resolve: description.resolve
38
+ });
39
+ }
40
+ return serverDescription;
41
+ }
42
+ return description;
43
+ }
44
+ getResolveFunction(name) {
45
+ for (const storedInfo of this.serverDescriptions.values()) {
46
+ if (storedInfo.name === name) {
47
+ return storedInfo.resolve;
48
+ }
49
+ }
50
+ return undefined;
51
+ }
52
+ async resolveServerDescription(description) {
53
+ const cleanDescription = (0, mcp_protocol_1.cleanServerDescription)(description);
54
+ if (description.resolveId) {
55
+ const storedInfo = this.serverDescriptions.get(description.resolveId);
56
+ if (storedInfo === null || storedInfo === void 0 ? void 0 : storedInfo.resolve) {
57
+ const updated = await storedInfo.resolve(cleanDescription);
58
+ if (updated) {
59
+ return updated;
60
+ }
61
+ }
62
+ }
63
+ return cleanDescription;
64
+ }
65
+ cleanServers(serverNames) {
66
+ const currentNamesSet = new Set(serverNames);
67
+ // Remove descriptions for servers that no longer exist
68
+ for (const [resolveId, storedInfo] of this.serverDescriptions.entries()) {
69
+ if (storedInfo.name && !currentNamesSet.has(storedInfo.name)) {
70
+ console.debug('Removing a frontend stored resolve function because the corresponding MCP server was removed', storedInfo);
71
+ this.serverDescriptions.delete(resolveId);
72
+ }
73
+ }
74
+ }
75
+ };
76
+ exports.MCPServerManagerServerClientImpl = MCPServerManagerServerClientImpl;
77
+ exports.MCPServerManagerServerClientImpl = MCPServerManagerServerClientImpl = tslib_1.__decorate([
78
+ (0, inversify_1.injectable)()
79
+ ], MCPServerManagerServerClientImpl);
80
+ //# sourceMappingURL=mcp-server-manager-server-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server-manager-server-client.js","sourceRoot":"","sources":["../../src/browser/mcp-server-manager-server-client.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,4CAA4C;AAC5C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,4DAA0D;AAE1D,sDAA2D;AAC3D,yDAAuH;AAKhH,IAAM,gCAAgC,GAAtC,MAAM,gCAAgC;IAAtC;QAEO,uBAAkB,GAAkC,IAAI,GAAG,EAAE,CAAC;IAuD5E,CAAC;IArDG,oBAAoB,CAAC,WAAiC;QAClD,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,iBAAiB,GAA4B;gBAC/C,GAAG,WAAW;gBACd,SAAS,EAAE,IAAA,mBAAY,GAAE;aAC5B,CAAC;YAEF,2CAA2C;YAC3C,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC;gBAC9B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,SAAS,EAAE;oBACrD,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,OAAO,EAAE,WAAW,CAAC,OAAO;iBAC/B,CAAC,CAAC;YACP,CAAC;YAED,OAAO,iBAAiB,CAAC;QAC7B,CAAC;QACD,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,kBAAkB,CAAC,IAAY;QAC3B,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC;YACxD,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC3B,OAAO,UAAU,CAAC,OAAO,CAAC;YAC9B,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,WAAoC;QAC/D,MAAM,gBAAgB,GAAG,IAAA,qCAAsB,EAAC,WAAW,CAAC,CAAC;QAC7D,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YACxB,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACtE,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,EAAE,CAAC;gBACtB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;gBAC3D,IAAI,OAAO,EAAE,CAAC;oBACV,OAAO,OAAO,CAAC;gBACnB,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED,YAAY,CAAC,WAAqB;QAC9B,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7C,uDAAuD;QACvD,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;YACtE,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3D,OAAO,CAAC,KAAK,CAAC,8FAA8F,EAAE,UAAU,CAAC,CAAC;gBAC1H,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9C,CAAC;QACL,CAAC;IACL,CAAC;CACJ,CAAA;AAzDY,4EAAgC;2CAAhC,gCAAgC;IAD5C,IAAA,sBAAU,GAAE;GACA,gCAAgC,CAyD5C"}
@@ -0,0 +1,52 @@
1
+ import { MCPServerDescription } from './mcp-server-manager';
2
+ /**
3
+ * MCPServerDescriptionRCP is a version of MCPServerDescription that can be sent over RCP.
4
+ * It omits the 'resolve' function and instead includes an optional 'resolveId' to identify
5
+ * the resolve function on the client side.
6
+ */
7
+ export type MCPServerDescriptionRCP = Omit<MCPServerDescription, 'resolve'> & {
8
+ resolveId?: string;
9
+ };
10
+ export declare const MCPServerManagerServer: unique symbol;
11
+ export declare const MCPServerManagerServerPath = "/services/mcpservermanagerserver";
12
+ /**
13
+ * The MCPServerManagerServer handles the RCP specialties of adding server descriptions from the frontend
14
+ */
15
+ export interface MCPServerManagerServer {
16
+ addOrUpdateServer(description: MCPServerDescriptionRCP): Promise<void>;
17
+ setClient(client: MCPServerManagerServerClient): void;
18
+ }
19
+ export declare const MCPServerManagerServerClient: unique symbol;
20
+ export interface MCPServerManagerServerClient {
21
+ /**
22
+ * Adds a server description to the client. If the description contains a resolve function,
23
+ * a unique resolveId is generated and only the name and resolve function are stored.
24
+ * @param description The server description to add.
25
+ * @returns The server description with a unique resolveId if a resolve function is provided
26
+ * or the given description if no resolve function is provided.
27
+ */
28
+ addServerDescription(description: MCPServerDescription): MCPServerDescriptionRCP;
29
+ /**
30
+ * Retrieves the resolve function for a given server name.
31
+ * @param name The name of the server to retrieve the resolve function for.
32
+ * @returns The resolve function if found, or undefined if not found.
33
+ */
34
+ getResolveFunction(name: string): MCPServerDescription['resolve'];
35
+ /**
36
+ * Resolves the server description by calling the resolve function if it exists.
37
+ * @param description The server description to resolve.
38
+ * @returns The resolved server description.
39
+ */
40
+ resolveServerDescription(description: MCPServerDescriptionRCP): Promise<MCPServerDescription>;
41
+ /**
42
+ * Removes server descriptions that are no longer present in the MCPServerManager.
43
+ *
44
+ * @param serverNames The current list of server names from the MCPServerManager.
45
+ */
46
+ cleanServers(serverNames: string[]): void;
47
+ }
48
+ /**
49
+ * Util function to convert a MCPServerDescriptionRCP to a MCPServerDescription by removing the resolveId.
50
+ */
51
+ export declare const cleanServerDescription: (description: MCPServerDescriptionRCP) => MCPServerDescription;
52
+ //# sourceMappingURL=mcp-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-protocol.d.ts","sourceRoot":"","sources":["../../src/common/mcp-protocol.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,GAAG;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,sBAAsB,eAAmC,CAAC;AACvE,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,iBAAiB,CAAC,WAAW,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,SAAS,CAAC,MAAM,EAAE,4BAA4B,GAAG,IAAI,CAAA;CACxD;AAED,eAAO,MAAM,4BAA4B,eAAyC,CAAC;AACnF,MAAM,WAAW,4BAA4B;IACzC;;;;;;OAMG;IACH,oBAAoB,CAAC,WAAW,EAAE,oBAAoB,GAAG,uBAAuB,CAAC;IACjF;;;;OAIG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAClE;;;;OAIG;IACH,wBAAwB,CAAC,WAAW,EAAE,uBAAuB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC9F;;;;OAIG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAC7C;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,gBAAiB,uBAAuB,KAAG,oBAG7E,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2025 EclipseSource GmbH.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.cleanServerDescription = exports.MCPServerManagerServerClient = exports.MCPServerManagerServerPath = exports.MCPServerManagerServer = void 0;
19
+ exports.MCPServerManagerServer = Symbol('MCPServerManagerServer');
20
+ exports.MCPServerManagerServerPath = '/services/mcpservermanagerserver';
21
+ exports.MCPServerManagerServerClient = Symbol('MCPServerManagerServerClient');
22
+ /**
23
+ * Util function to convert a MCPServerDescriptionRCP to a MCPServerDescription by removing the resolveId.
24
+ */
25
+ const cleanServerDescription = (description) => {
26
+ const { resolveId, ...descriptionProperties } = description;
27
+ return { ...descriptionProperties };
28
+ };
29
+ exports.cleanServerDescription = cleanServerDescription;
30
+ //# sourceMappingURL=mcp-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-protocol.js","sourceRoot":"","sources":["../../src/common/mcp-protocol.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAanE,QAAA,sBAAsB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAC1D,QAAA,0BAA0B,GAAG,kCAAkC,CAAC;AAUhE,QAAA,4BAA4B,GAAG,MAAM,CAAC,8BAA8B,CAAC,CAAC;AA8BnF;;GAEG;AACI,MAAM,sBAAsB,GAAG,CAAC,WAAoC,EAAwB,EAAE;IACjG,MAAM,EAAE,SAAS,EAAE,GAAG,qBAAqB,EAAE,GAAG,WAAW,CAAC;IAC5D,OAAO,EAAE,GAAG,qBAAqB,EAA0B,CAAC;AAChE,CAAC,CAAC;AAHW,QAAA,sBAAsB,0BAGjC"}
@@ -75,6 +75,16 @@ export interface BaseMCPServerDescription {
75
75
  * List of available tools for the server. Returns the name and description if available.
76
76
  */
77
77
  tools?: ToolInformation[];
78
+ /**
79
+ * Optional resolve function that gets called during server definition resolution.
80
+ * This function can be used to dynamically modify server configurations,
81
+ * resolve environment variables, validate configurations, or perform any
82
+ * necessary preprocessing before the server starts.
83
+ *
84
+ * @param description The current server description
85
+ * @returns A promise that resolves to the processed server description
86
+ */
87
+ resolve?: (description: MCPServerDescription) => Promise<MCPServerDescription>;
78
88
  }
79
89
  export interface LocalMCPServerDescription extends BaseMCPServerDescription {
80
90
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server-manager.d.ts","sourceRoot":"","sources":["../../src/common/mcp-server-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server-manager.d.ts","sourceRoot":"","sources":["../../src/common/mcp-server-manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server-manager.js","sourceRoot":"","sources":["../../src/common/mcp-server-manager.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAKnE,QAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAelD,QAAA,8BAA8B,GAAG,MAAM,CAAC,gCAAgC,CAAC,CAAC;AAmCvF,IAAY,eAQX;AARD,WAAY,eAAe;IACvB,6CAA0B,CAAA;IAC1B,iDAA8B,CAAA;IAC9B,wCAAqB,CAAA;IACrB,4CAAyB,CAAA;IACzB,sCAAmB,CAAA;IACnB,0CAAuB,CAAA;IACvB,sCAAmB,CAAA;AACvB,CAAC,EARW,eAAe,+BAAf,eAAe,QAQ1B;AAsED,SAAgB,2BAA2B,CAAC,WAAiC;IACzE,OAAQ,WAAyC,CAAC,OAAO,KAAK,SAAS,CAAC;AAC5E,CAAC;AAFD,kEAEC;AACD,SAAgB,4BAA4B,CAAC,WAAiC;IAC1E,OAAQ,WAA0C,CAAC,SAAS,KAAK,SAAS,CAAC;AAC/E,CAAC;AAFD,oEAEC;AAEY,QAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAC9C,QAAA,oBAAoB,GAAG,4BAA4B,CAAC"}
1
+ {"version":3,"file":"mcp-server-manager.js","sourceRoot":"","sources":["../../src/common/mcp-server-manager.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAKnE,QAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAelD,QAAA,8BAA8B,GAAG,MAAM,CAAC,gCAAgC,CAAC,CAAC;AAmCvF,IAAY,eAQX;AARD,WAAY,eAAe;IACvB,6CAA0B,CAAA;IAC1B,iDAA8B,CAAA;IAC9B,wCAAqB,CAAA;IACrB,4CAAyB,CAAA;IACzB,sCAAmB,CAAA;IACnB,0CAAuB,CAAA;IACvB,sCAAmB,CAAA;AACvB,CAAC,EARW,eAAe,+BAAf,eAAe,QAQ1B;AAiFD,SAAgB,2BAA2B,CAAC,WAAiC;IACzE,OAAQ,WAAyC,CAAC,OAAO,KAAK,SAAS,CAAC;AAC5E,CAAC;AAFD,kEAEC;AACD,SAAgB,4BAA4B,CAAC,WAAiC;IAC1E,OAAQ,WAA0C,CAAC,SAAS,KAAK,SAAS,CAAC;AAC/E,CAAC;AAFD,oEAEC;AAEY,QAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAC9C,QAAA,oBAAoB,GAAG,4BAA4B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-backend-module.d.ts","sourceRoot":"","sources":["../../src/node/mcp-backend-module.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;AAoB/D,wBAGG"}
1
+ {"version":3,"file":"mcp-backend-module.d.ts","sourceRoot":"","sources":["../../src/node/mcp-backend-module.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;AAkC/D,wBAGG"}
@@ -21,6 +21,8 @@ const mcp_server_manager_impl_1 = require("./mcp-server-manager-impl");
21
21
  const mcp_server_manager_1 = require("../common/mcp-server-manager");
22
22
  const connection_container_module_1 = require("@theia/core/lib/node/messaging/connection-container-module");
23
23
  const mcp_preferences_1 = require("../common/mcp-preferences");
24
+ const mcp_server_manager_server_1 = require("./mcp-server-manager-server");
25
+ const mcp_protocol_1 = require("../common/mcp-protocol");
24
26
  // We use a connection module to handle AI services separately for each frontend.
25
27
  const mcpConnectionModule = connection_container_module_1.ConnectionContainerModule.create(({ bind, bindBackendService, bindFrontendService }) => {
26
28
  bind(mcp_server_manager_1.MCPServerManager).to(mcp_server_manager_impl_1.MCPServerManagerImpl).inSingletonScope();
@@ -30,6 +32,12 @@ const mcpConnectionModule = connection_container_module_1.ConnectionContainerMod
30
32
  client.onDidCloseConnection(() => server.disconnectClient(client));
31
33
  return server;
32
34
  })).inSingletonScope();
35
+ bind(mcp_protocol_1.MCPServerManagerServer).to(mcp_server_manager_server_1.MCPServerManagerServerImpl).inSingletonScope();
36
+ bind(core_1.ConnectionHandler).toDynamicValue(ctx => new core_1.RpcConnectionHandler(mcp_protocol_1.MCPServerManagerServerPath, client => {
37
+ const server = ctx.container.get(mcp_protocol_1.MCPServerManagerServer);
38
+ server.setClient(client);
39
+ return server;
40
+ })).inSingletonScope();
33
41
  });
34
42
  exports.default = new inversify_1.ContainerModule(bind => {
35
43
  bind(core_1.PreferenceContribution).toConstantValue({ schema: mcp_preferences_1.McpServersPreferenceSchema });
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-backend-module.js","sourceRoot":"","sources":["../../src/node/mcp-backend-module.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,4DAA+D;AAC/D,sCAA8F;AAC9F,uEAAiE;AACjE,qEAAsH;AACtH,4GAAuG;AACvG,+DAAuE;AAEvE,iFAAiF;AACjF,MAAM,mBAAmB,GAAG,uDAAyB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,EAAE,EAAE;IAC/G,IAAI,CAAC,qCAAgB,CAAC,CAAC,EAAE,CAAC,8CAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACnE,IAAI,CAAC,wBAAiB,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,2BAAoB,CAClE,yCAAoB,EAAE,MAAM,CAAC,EAAE;QAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAmB,qCAAgB,CAAC,CAAC;QACrE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,MAAM,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,OAAO,MAAM,CAAC;IAClB,CAAC,CACJ,CAAC,CAAC,gBAAgB,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,kBAAe,IAAI,2BAAe,CAAC,IAAI,CAAC,EAAE;IACtC,IAAI,CAAC,6BAAsB,CAAC,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,4CAA0B,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,uDAAyB,CAAC,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"mcp-backend-module.js","sourceRoot":"","sources":["../../src/node/mcp-backend-module.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,4DAA+D;AAC/D,sCAA8F;AAC9F,uEAAiE;AACjE,qEAIsC;AACtC,4GAAuG;AACvG,+DAAuE;AACvE,2EAAyE;AACzE,yDAA0H;AAE1H,iFAAiF;AACjF,MAAM,mBAAmB,GAAG,uDAAyB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,EAAE,EAAE;IAC/G,IAAI,CAAC,qCAAgB,CAAC,CAAC,EAAE,CAAC,8CAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACnE,IAAI,CAAC,wBAAiB,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,2BAAoB,CAClE,yCAAoB,EAAE,MAAM,CAAC,EAAE;QAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAmB,qCAAgB,CAAC,CAAC;QACrE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,MAAM,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,OAAO,MAAM,CAAC;IAClB,CAAC,CACJ,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACtB,IAAI,CAAC,qCAAsB,CAAC,CAAC,EAAE,CAAC,sDAA0B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC/E,IAAI,CAAC,wBAAiB,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,2BAAoB,CAClE,yCAA0B,EAAE,MAAM,CAAC,EAAE;QACjC,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAyB,qCAAsB,CAAC,CAAC;QACjF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,MAAM,CAAC;IAClB,CAAC,CACJ,CAAC,CAAC,gBAAgB,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,kBAAe,IAAI,2BAAe,CAAC,IAAI,CAAC,EAAE;IACtC,IAAI,CAAC,6BAAsB,CAAC,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,4CAA0B,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,uDAAyB,CAAC,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server-manager-impl.d.ts","sourceRoot":"","sources":["../../src/node/mcp-server-manager-impl.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AACtH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7G,qBACa,oBAAqB,YAAW,gBAAgB;IAEzD,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAa;IACtD,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,8BAA8B,CAAC,CAAM;IAC9D,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAa;IAEzD,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAU5C,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQrF,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9C,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAInC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAKtE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAQ5E,iBAAiB,CAAC,WAAW,EAAE,oBAAoB,GAAG,IAAI;IAoB1D,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAkBhC,SAAS,CAAC,MAAM,EAAE,8BAA8B,GAAG,IAAI;IAIvD,gBAAgB,CAAC,MAAM,EAAE,8BAA8B,GAAG,IAAI;IAU9D,OAAO,CAAC,aAAa;IAIrB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQjF,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAOjE"}
1
+ {"version":3,"file":"mcp-server-manager-impl.d.ts","sourceRoot":"","sources":["../../src/node/mcp-server-manager-impl.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AACtH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7G,qBACa,oBAAqB,YAAW,gBAAgB;IAEzD,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAa;IACtD,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,8BAA8B,CAAC,CAAM;IAC9D,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAa;IAEzD,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAU5C,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQrF,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9C,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAInC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAKtE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAQ5E,iBAAiB,CAAC,WAAW,EAAE,oBAAoB,GAAG,IAAI;IAoB1D,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAkBhC,SAAS,CAAC,MAAM,EAAE,8BAA8B,GAAG,IAAI;IAIvD,gBAAgB,CAAC,MAAM,EAAE,8BAA8B,GAAG,IAAI;IAU9D,OAAO,CAAC,aAAa;IAIrB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQjF,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAOjE"}
@@ -55,6 +55,14 @@ let MCPServerManagerImpl = class MCPServerManagerImpl {
55
55
  if (!server) {
56
56
  throw new Error(`MCP server "${serverName}" not found.`);
57
57
  }
58
+ const description = await server.getDescription();
59
+ if (description.resolve) {
60
+ const resolved = await description.resolve(description);
61
+ const isEqual = JSON.stringify(description) === JSON.stringify(resolved);
62
+ if (!isEqual) {
63
+ server.update(resolved);
64
+ }
65
+ }
58
66
  await server.start();
59
67
  this.notifyClients();
60
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server-manager-impl.js","sourceRoot":"","sources":["../../src/node/mcp-server-manager-impl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server-manager-impl.js","sourceRoot":"","sources":["../../src/node/mcp-server-manager-impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { MCPServerManager } from '../common';
2
+ import { MCPServerDescriptionRCP, MCPServerManagerServer, MCPServerManagerServerClient } from '../common/mcp-protocol';
3
+ export declare class MCPServerManagerServerImpl implements MCPServerManagerServer {
4
+ protected readonly mcpServerManager: MCPServerManager;
5
+ protected client: MCPServerManagerServerClient;
6
+ setClient(client: MCPServerManagerServerClient): void;
7
+ addOrUpdateServer(descriptionRCP: MCPServerDescriptionRCP): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=mcp-server-manager-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server-manager-server.d.ts","sourceRoot":"","sources":["../../src/node/mcp-server-manager-server.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAwB,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAA0B,uBAAuB,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAE/I,qBACa,0BAA2B,YAAW,sBAAsB;IAGrE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAEtD,SAAS,CAAC,MAAM,EAAE,4BAA4B,CAAC;IAE/C,SAAS,CAAC,MAAM,EAAE,4BAA4B,GAAG,IAAI;IAI/C,iBAAiB,CAAC,cAAc,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBlF"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2025 Dirk Fauth and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.MCPServerManagerServerImpl = void 0;
19
+ const tslib_1 = require("tslib");
20
+ const inversify_1 = require("@theia/core/shared/inversify");
21
+ const common_1 = require("../common");
22
+ const mcp_protocol_1 = require("../common/mcp-protocol");
23
+ let MCPServerManagerServerImpl = class MCPServerManagerServerImpl {
24
+ setClient(client) {
25
+ this.client = client;
26
+ }
27
+ async addOrUpdateServer(descriptionRCP) {
28
+ const description = (0, mcp_protocol_1.cleanServerDescription)(descriptionRCP);
29
+ if (descriptionRCP.resolveId) {
30
+ description.resolve = async (desc) => {
31
+ if (this.client) {
32
+ const descRCP = {
33
+ ...desc,
34
+ resolveId: descriptionRCP.resolveId
35
+ };
36
+ return this.client.resolveServerDescription(descRCP);
37
+ }
38
+ return desc; // Fallback if no client is set
39
+ };
40
+ }
41
+ ;
42
+ this.mcpServerManager.addOrUpdateServer(description);
43
+ }
44
+ };
45
+ exports.MCPServerManagerServerImpl = MCPServerManagerServerImpl;
46
+ tslib_1.__decorate([
47
+ (0, inversify_1.inject)(common_1.MCPServerManager),
48
+ tslib_1.__metadata("design:type", Object)
49
+ ], MCPServerManagerServerImpl.prototype, "mcpServerManager", void 0);
50
+ exports.MCPServerManagerServerImpl = MCPServerManagerServerImpl = tslib_1.__decorate([
51
+ (0, inversify_1.injectable)()
52
+ ], MCPServerManagerServerImpl);
53
+ //# sourceMappingURL=mcp-server-manager-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server-manager-server.js","sourceRoot":"","sources":["../../src/node/mcp-server-manager-server.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,4CAA4C;AAC5C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,4DAAkE;AAClE,sCAAmE;AACnE,yDAA+I;AAGxI,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAOnC,SAAS,CAAC,MAAoC;QAC1C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,cAAuC;QAC3D,MAAM,WAAW,GAAG,IAAA,qCAAsB,EAAC,cAAc,CAAC,CAAC;QAC3D,IAAI,cAAc,CAAC,SAAS,EAAE,CAAC;YAC3B,WAAW,CAAC,OAAO,GAAG,KAAK,EAAE,IAA0B,EAAE,EAAE;gBACvD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBACd,MAAM,OAAO,GAA4B;wBACrC,GAAG,IAAI;wBACP,SAAS,EAAE,cAAc,CAAC,SAAS;qBACtC,CAAC;oBACF,OAAO,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;gBACzD,CAAC;gBACD,OAAO,IAAI,CAAC,CAAC,+BAA+B;YAChD,CAAC,CAAC;QACN,CAAC;QAAA,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACzD,CAAC;CACJ,CAAA;AA3BY,gEAA0B;AAGhB;IADlB,IAAA,kBAAM,EAAC,yBAAgB,CAAC;;oEAC6B;qCAH7C,0BAA0B;IADtC,IAAA,sBAAU,GAAE;GACA,0BAA0B,CA2BtC"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@theia/ai-mcp",
3
- "version": "1.66.0-next.41+d4393e3c9",
3
+ "version": "1.66.0-next.67+6fae23c43",
4
4
  "description": "Theia - MCP Integration",
5
5
  "dependencies": {
6
6
  "@modelcontextprotocol/sdk": "^1.15.1",
7
- "@theia/ai-core": "1.66.0-next.41+d4393e3c9",
8
- "@theia/core": "1.66.0-next.41+d4393e3c9"
7
+ "@theia/ai-core": "1.66.0-next.67+6fae23c43",
8
+ "@theia/core": "1.66.0-next.67+6fae23c43"
9
9
  },
10
10
  "publishConfig": {
11
11
  "access": "public"
@@ -47,5 +47,5 @@
47
47
  "nyc": {
48
48
  "extends": "../../configs/nyc.json"
49
49
  },
50
- "gitHead": "d4393e3c90401f6c5929236afb26991cddfeb24b"
50
+ "gitHead": "6fae23c43f4e850ef4dd6f7c85aa0422077f70e2"
51
51
  }
@@ -16,18 +16,75 @@
16
16
 
17
17
  import { ContainerModule } from '@theia/core/shared/inversify';
18
18
  import { FrontendApplicationContribution, RemoteConnectionProvider, ServiceConnectionProvider } from '@theia/core/lib/browser';
19
- import { MCPFrontendService, MCPServerManager, MCPServerManagerPath, MCPFrontendNotificationService } from '../common/mcp-server-manager';
19
+ import {
20
+ MCPFrontendService,
21
+ MCPServerManager,
22
+ MCPServerManagerPath,
23
+ MCPFrontendNotificationService
24
+ } from '../common/mcp-server-manager';
20
25
  import { McpFrontendApplicationContribution } from './mcp-frontend-application-contribution';
21
26
  import { MCPFrontendServiceImpl } from './mcp-frontend-service';
22
27
  import { MCPFrontendNotificationServiceImpl } from './mcp-frontend-notification-service';
28
+ import { MCPServerManagerServerClientImpl } from './mcp-server-manager-server-client';
29
+ import { MCPServerManagerServer, MCPServerManagerServerClient, MCPServerManagerServerPath } from '../common/mcp-protocol';
23
30
 
24
31
  export default new ContainerModule(bind => {
25
32
  bind(FrontendApplicationContribution).to(McpFrontendApplicationContribution).inSingletonScope();
26
33
  bind(MCPFrontendService).to(MCPFrontendServiceImpl).inSingletonScope();
27
34
  bind(MCPFrontendNotificationService).to(MCPFrontendNotificationServiceImpl).inSingletonScope();
35
+ bind(MCPServerManagerServerClient).to(MCPServerManagerServerClientImpl).inSingletonScope();
36
+
37
+ bind(MCPServerManagerServer).toDynamicValue(ctx => {
38
+ const connection = ctx.container.get<ServiceConnectionProvider>(RemoteConnectionProvider);
39
+ const client = ctx.container.get<MCPServerManagerServerClient>(MCPServerManagerServerClient);
40
+ return connection.createProxy<MCPServerManagerServer>(MCPServerManagerServerPath, client);
41
+ }).inSingletonScope();
42
+
28
43
  bind(MCPServerManager).toDynamicValue(ctx => {
44
+ const mgrServer = ctx.container.get<MCPServerManagerServer>(MCPServerManagerServer);
29
45
  const connection = ctx.container.get<ServiceConnectionProvider>(RemoteConnectionProvider);
30
46
  const client = ctx.container.get<MCPFrontendNotificationService>(MCPFrontendNotificationService);
31
- return connection.createProxy<MCPServerManager>(MCPServerManagerPath, client);
47
+ const serverClient = ctx.container.get<MCPServerManagerServerClient>(MCPServerManagerServerClient);
48
+ const backendServerManager = connection.createProxy<MCPServerManager>(MCPServerManagerPath, client);
49
+
50
+ // Listen to server updates to clean up removed servers
51
+ client.onDidUpdateMCPServers(() =>
52
+ backendServerManager.getServerNames()
53
+ .then(names => serverClient.cleanServers(names))
54
+ .catch((error: unknown) => {
55
+ console.error('Error cleaning server descriptions:', error);
56
+ }));
57
+
58
+ // We proxy the MCPServerManager to override addOrUpdateServer and getServerDescription
59
+ // to handle the resolve functions via the MCPServerManagerServerClient.
60
+ return new Proxy(backendServerManager, {
61
+ get(target: MCPServerManager, prop: PropertyKey, receiver: unknown): unknown {
62
+ // override addOrUpdateServer to store the original description in the MCPServerManagerServerClient
63
+ // to be used in resolveServerDescription if a resolve function is provided
64
+ if (prop === 'addOrUpdateServer') {
65
+ return async function (this: MCPServerManager, ...args: [serverDescription: Parameters<MCPServerManager['addOrUpdateServer']>[0]]): Promise<void> {
66
+ const updated = serverClient.addServerDescription(args[0]);
67
+ await mgrServer.addOrUpdateServer(updated);
68
+ };
69
+ }
70
+ // override getServerDescription to mix in the resolve function from the client
71
+ if (prop === 'getServerDescription') {
72
+ return async function (this: MCPServerManager, name: string): ReturnType<MCPServerManager['getServerDescription']> {
73
+ const description = await Reflect.apply(target.getServerDescription, target, [name]);
74
+ if (description) {
75
+ const resolveFunction = serverClient.getResolveFunction(name);
76
+ if (resolveFunction) {
77
+ return {
78
+ ...description,
79
+ resolve: resolveFunction
80
+ };
81
+ }
82
+ }
83
+ return description;
84
+ };
85
+ }
86
+ return Reflect.get(target, prop, receiver);
87
+ }
88
+ });
32
89
  }).inSingletonScope();
33
90
  });
@@ -0,0 +1,82 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2025 Dirk Fauth and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { injectable } from '@theia/core/shared/inversify';
18
+ import { MCPServerDescription } from '../common';
19
+ import { generateUuid } from '@theia/core/lib/common/uuid';
20
+ import { cleanServerDescription, MCPServerDescriptionRCP, MCPServerManagerServerClient } from '../common/mcp-protocol';
21
+
22
+ type StoredServerInfo = Pick<MCPServerDescription, 'name' | 'resolve'>;
23
+
24
+ @injectable()
25
+ export class MCPServerManagerServerClientImpl implements MCPServerManagerServerClient {
26
+
27
+ protected serverDescriptions: Map<string, StoredServerInfo> = new Map();
28
+
29
+ addServerDescription(description: MCPServerDescription): MCPServerDescriptionRCP {
30
+ if (description.resolve) {
31
+ const serverDescription: MCPServerDescriptionRCP = {
32
+ ...description,
33
+ resolveId: generateUuid(),
34
+ };
35
+
36
+ // store only the name and resolve function
37
+ if (serverDescription.resolveId) {
38
+ this.serverDescriptions.set(serverDescription.resolveId, {
39
+ name: description.name,
40
+ resolve: description.resolve
41
+ });
42
+ }
43
+
44
+ return serverDescription;
45
+ }
46
+ return description;
47
+ }
48
+
49
+ getResolveFunction(name: string): MCPServerDescription['resolve'] {
50
+ for (const storedInfo of this.serverDescriptions.values()) {
51
+ if (storedInfo.name === name) {
52
+ return storedInfo.resolve;
53
+ }
54
+ }
55
+ return undefined;
56
+ }
57
+
58
+ async resolveServerDescription(description: MCPServerDescriptionRCP): Promise<MCPServerDescription> {
59
+ const cleanDescription = cleanServerDescription(description);
60
+ if (description.resolveId) {
61
+ const storedInfo = this.serverDescriptions.get(description.resolveId);
62
+ if (storedInfo?.resolve) {
63
+ const updated = await storedInfo.resolve(cleanDescription);
64
+ if (updated) {
65
+ return updated;
66
+ }
67
+ }
68
+ }
69
+ return cleanDescription;
70
+ }
71
+
72
+ cleanServers(serverNames: string[]): void {
73
+ const currentNamesSet = new Set(serverNames);
74
+ // Remove descriptions for servers that no longer exist
75
+ for (const [resolveId, storedInfo] of this.serverDescriptions.entries()) {
76
+ if (storedInfo.name && !currentNamesSet.has(storedInfo.name)) {
77
+ console.debug('Removing a frontend stored resolve function because the corresponding MCP server was removed', storedInfo);
78
+ this.serverDescriptions.delete(resolveId);
79
+ }
80
+ }
81
+ }
82
+ }
@@ -0,0 +1,75 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2025 EclipseSource GmbH.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { MCPServerDescription } from './mcp-server-manager';
18
+
19
+ /**
20
+ * MCPServerDescriptionRCP is a version of MCPServerDescription that can be sent over RCP.
21
+ * It omits the 'resolve' function and instead includes an optional 'resolveId' to identify
22
+ * the resolve function on the client side.
23
+ */
24
+ export type MCPServerDescriptionRCP = Omit<MCPServerDescription, 'resolve'> & {
25
+ resolveId?: string;
26
+ };
27
+
28
+ export const MCPServerManagerServer = Symbol('MCPServerManagerServer');
29
+ export const MCPServerManagerServerPath = '/services/mcpservermanagerserver';
30
+
31
+ /**
32
+ * The MCPServerManagerServer handles the RCP specialties of adding server descriptions from the frontend
33
+ */
34
+ export interface MCPServerManagerServer {
35
+ addOrUpdateServer(description: MCPServerDescriptionRCP): Promise<void>;
36
+ setClient(client: MCPServerManagerServerClient): void
37
+ }
38
+
39
+ export const MCPServerManagerServerClient = Symbol('MCPServerManagerServerClient');
40
+ export interface MCPServerManagerServerClient {
41
+ /**
42
+ * Adds a server description to the client. If the description contains a resolve function,
43
+ * a unique resolveId is generated and only the name and resolve function are stored.
44
+ * @param description The server description to add.
45
+ * @returns The server description with a unique resolveId if a resolve function is provided
46
+ * or the given description if no resolve function is provided.
47
+ */
48
+ addServerDescription(description: MCPServerDescription): MCPServerDescriptionRCP;
49
+ /**
50
+ * Retrieves the resolve function for a given server name.
51
+ * @param name The name of the server to retrieve the resolve function for.
52
+ * @returns The resolve function if found, or undefined if not found.
53
+ */
54
+ getResolveFunction(name: string): MCPServerDescription['resolve'];
55
+ /**
56
+ * Resolves the server description by calling the resolve function if it exists.
57
+ * @param description The server description to resolve.
58
+ * @returns The resolved server description.
59
+ */
60
+ resolveServerDescription(description: MCPServerDescriptionRCP): Promise<MCPServerDescription>;
61
+ /**
62
+ * Removes server descriptions that are no longer present in the MCPServerManager.
63
+ *
64
+ * @param serverNames The current list of server names from the MCPServerManager.
65
+ */
66
+ cleanServers(serverNames: string[]): void;
67
+ }
68
+
69
+ /**
70
+ * Util function to convert a MCPServerDescriptionRCP to a MCPServerDescription by removing the resolveId.
71
+ */
72
+ export const cleanServerDescription = (description: MCPServerDescriptionRCP): MCPServerDescription => {
73
+ const { resolveId, ...descriptionProperties } = description;
74
+ return { ...descriptionProperties } as MCPServerDescription;
75
+ };
@@ -102,6 +102,17 @@ export interface BaseMCPServerDescription {
102
102
  * List of available tools for the server. Returns the name and description if available.
103
103
  */
104
104
  tools?: ToolInformation[];
105
+
106
+ /**
107
+ * Optional resolve function that gets called during server definition resolution.
108
+ * This function can be used to dynamically modify server configurations,
109
+ * resolve environment variables, validate configurations, or perform any
110
+ * necessary preprocessing before the server starts.
111
+ *
112
+ * @param description The current server description
113
+ * @returns A promise that resolves to the processed server description
114
+ */
115
+ resolve?: (description: MCPServerDescription) => Promise<MCPServerDescription>;
105
116
  }
106
117
 
107
118
  export interface LocalMCPServerDescription extends BaseMCPServerDescription {
@@ -17,9 +17,15 @@
17
17
  import { ContainerModule } from '@theia/core/shared/inversify';
18
18
  import { ConnectionHandler, PreferenceContribution, RpcConnectionHandler } from '@theia/core';
19
19
  import { MCPServerManagerImpl } from './mcp-server-manager-impl';
20
- import { MCPFrontendNotificationService, MCPServerManager, MCPServerManagerPath } from '../common/mcp-server-manager';
20
+ import {
21
+ MCPFrontendNotificationService,
22
+ MCPServerManager,
23
+ MCPServerManagerPath
24
+ } from '../common/mcp-server-manager';
21
25
  import { ConnectionContainerModule } from '@theia/core/lib/node/messaging/connection-container-module';
22
26
  import { McpServersPreferenceSchema } from '../common/mcp-preferences';
27
+ import { MCPServerManagerServerImpl } from './mcp-server-manager-server';
28
+ import { MCPServerManagerServer, MCPServerManagerServerClient, MCPServerManagerServerPath } from '../common/mcp-protocol';
23
29
 
24
30
  // We use a connection module to handle AI services separately for each frontend.
25
31
  const mcpConnectionModule = ConnectionContainerModule.create(({ bind, bindBackendService, bindFrontendService }) => {
@@ -32,6 +38,14 @@ const mcpConnectionModule = ConnectionContainerModule.create(({ bind, bindBacken
32
38
  return server;
33
39
  }
34
40
  )).inSingletonScope();
41
+ bind(MCPServerManagerServer).to(MCPServerManagerServerImpl).inSingletonScope();
42
+ bind(ConnectionHandler).toDynamicValue(ctx => new RpcConnectionHandler<MCPServerManagerServerClient>(
43
+ MCPServerManagerServerPath, client => {
44
+ const server = ctx.container.get<MCPServerManagerServer>(MCPServerManagerServer);
45
+ server.setClient(client);
46
+ return server;
47
+ }
48
+ )).inSingletonScope();
35
49
  });
36
50
 
37
51
  export default new ContainerModule(bind => {
@@ -59,6 +59,14 @@ export class MCPServerManagerImpl implements MCPServerManager {
59
59
  if (!server) {
60
60
  throw new Error(`MCP server "${serverName}" not found.`);
61
61
  }
62
+ const description = await server.getDescription();
63
+ if (description.resolve) {
64
+ const resolved = await description.resolve(description);
65
+ const isEqual = JSON.stringify(description) === JSON.stringify(resolved);
66
+ if (!isEqual) {
67
+ server.update(resolved);
68
+ }
69
+ }
62
70
  await server.start();
63
71
  this.notifyClients();
64
72
  }
@@ -0,0 +1,49 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2025 Dirk Fauth and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { inject, injectable } from '@theia/core/shared/inversify';
18
+ import { MCPServerDescription, MCPServerManager } from '../common';
19
+ import { cleanServerDescription, MCPServerDescriptionRCP, MCPServerManagerServer, MCPServerManagerServerClient } from '../common/mcp-protocol';
20
+
21
+ @injectable()
22
+ export class MCPServerManagerServerImpl implements MCPServerManagerServer {
23
+
24
+ @inject(MCPServerManager)
25
+ protected readonly mcpServerManager: MCPServerManager;
26
+
27
+ protected client: MCPServerManagerServerClient;
28
+
29
+ setClient(client: MCPServerManagerServerClient): void {
30
+ this.client = client;
31
+ }
32
+
33
+ async addOrUpdateServer(descriptionRCP: MCPServerDescriptionRCP): Promise<void> {
34
+ const description = cleanServerDescription(descriptionRCP);
35
+ if (descriptionRCP.resolveId) {
36
+ description.resolve = async (desc: MCPServerDescription) => {
37
+ if (this.client) {
38
+ const descRCP: MCPServerDescriptionRCP = {
39
+ ...desc,
40
+ resolveId: descriptionRCP.resolveId
41
+ };
42
+ return this.client.resolveServerDescription(descRCP);
43
+ }
44
+ return desc; // Fallback if no client is set
45
+ };
46
+ };
47
+ this.mcpServerManager.addOrUpdateServer(description);
48
+ }
49
+ }