@loop_ouroboros/mcp-hub-lite 1.2.9 → 1.3.0
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.
- package/CHANGELOG.md +33 -0
- package/dist/client/assets/{HomeView-CGezWc0j.js → HomeView-Bi2bkUKf.js} +1 -1
- package/dist/client/assets/{ResourceDetailView-CDmWGdAK.css → ResourceDetailView-BkTSg91z.css} +1 -1
- package/dist/client/assets/ResourceDetailView-DyuSovH9.js +1 -0
- package/dist/client/assets/ResourcesView-CU0VbNy5.js +1 -0
- package/dist/client/assets/ResourcesView-zgV8Nq7w.css +1 -0
- package/dist/client/assets/{ServerDashboard-g5p4VC_-.js → ServerDashboard-BGyyZAti.js} +1 -1
- package/dist/client/assets/{ServerDetail-DCQH8HIb.css → ServerDetail-CPNAFBPM.css} +1 -1
- package/dist/client/assets/ServerDetail-bcQ8BVXR.js +2 -0
- package/dist/client/assets/{ServerListView-DZsy2gaQ.js → ServerListView-yQPVJFHG.js} +1 -1
- package/dist/client/assets/{ServerStatusTags.vue_vue_type_script_setup_true_lang-DmGg4uuV.js → ServerStatusTags.vue_vue_type_script_setup_true_lang-C8gQlxGE.js} +1 -1
- package/dist/client/assets/{SettingsView-DQSWb9xM.js → SettingsView-B1DxbFP3.js} +1 -1
- package/dist/client/assets/ToolCallDialog-BQ9UJZ_-.css +1 -0
- package/dist/client/assets/ToolCallDialog-DEapCO06.js +1 -0
- package/dist/client/assets/ToolsView-DA0u_bCw.js +1 -0
- package/dist/client/assets/ToolsView-cO61nMNr.css +1 -0
- package/dist/client/assets/{_baseClone-DsVtZfPm.js → _baseClone-B991Lvrt.js} +1 -1
- package/dist/client/assets/{el-form-item-CTsVV8sm.js → el-form-item-DfWq_kSy.js} +1 -1
- package/dist/client/assets/{el-input-Bh1VGJTU.js → el-input-5YzZrwir.js} +1 -1
- package/dist/client/assets/{el-loading-huOeK9cW.js → el-loading-DE3FcxNH.js} +1 -1
- package/dist/client/assets/{el-overlay-CR_KVhLU.js → el-overlay-BTeTueuN.js} +1 -1
- package/dist/client/assets/{el-radio-group-BSbtAW4k.js → el-radio-group-Y1E2bxIW.js} +1 -1
- package/dist/client/assets/{el-skeleton-item-BSxOLPFM.js → el-skeleton-item-DhgR50Jx.js} +1 -1
- package/dist/client/assets/{el-switch-BaQUQWTL.js → el-switch-fF--nMSD.js} +1 -1
- package/dist/client/assets/{el-tab-pane-9JxLgdS7.js → el-tab-pane-rvS_KTwP.js} +1 -1
- package/dist/client/assets/{el-table-column-Du1l9Ww3.js → el-table-column-B1O8mY47.js} +1 -1
- package/dist/client/assets/{index-BNmwPGMT.css → index-Bzz3tYbS.css} +1 -1
- package/dist/client/assets/{index-CsZoFRv1.js → index-DkqV9kH4.js} +2 -2
- package/dist/client/assets/{omit-Btci9mp3.js → omit-BIIebEYo.js} +1 -1
- package/dist/client/assets/{raf-tUu4BwZS.js → raf-Cj-gATZv.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/shared/models/constants.d.ts +3 -0
- package/dist/server/shared/models/constants.d.ts.map +1 -0
- package/dist/server/shared/models/constants.js +2 -0
- package/dist/server/shared/models/index.d.ts +1 -0
- package/dist/server/shared/models/index.d.ts.map +1 -1
- package/dist/server/shared/models/index.js +1 -0
- package/dist/server/shared/types/index.d.ts +0 -1
- package/dist/server/shared/types/index.d.ts.map +1 -1
- package/dist/server/shared/types/index.js +0 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.js +1 -1
- package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
- package/dist/server/src/api/mcp/gateway.js +23 -41
- package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
- package/dist/server/src/api/web/hub-tools.js +11 -0
- package/dist/server/src/api/web/mcp-status.js +2 -2
- package/dist/server/src/api/web/search.d.ts +2 -16
- package/dist/server/src/api/web/search.d.ts.map +1 -1
- package/dist/server/src/api/web/search.js +22 -30
- package/dist/server/src/api/web/servers.js +1 -1
- package/dist/server/src/api/ws/events.js +1 -1
- package/dist/server/src/api/ws/ws-handler.js +1 -1
- package/dist/server/src/app.js +1 -1
- package/dist/server/src/cli/commands/tool-use.d.ts +10 -3
- package/dist/server/src/cli/commands/tool-use.d.ts.map +1 -1
- package/dist/server/src/cli/commands/tool-use.js +69 -30
- package/dist/server/src/config/config-change-logger.js +1 -1
- package/dist/server/src/config/config-loader.js +1 -1
- package/dist/server/src/config/config-manager.js +1 -1
- package/dist/server/src/config/config-migrator.d.ts +4 -48
- package/dist/server/src/config/config-migrator.d.ts.map +1 -1
- package/dist/server/src/config/config-migrator.js +2 -103
- package/dist/server/src/config/config-saver.js +1 -1
- package/dist/server/src/config/server-config-manager.js +1 -1
- package/dist/server/src/models/system-tools.constants.d.ts +2 -1
- package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
- package/dist/server/src/models/system-tools.constants.js +2 -1
- package/dist/server/src/pid/manager.js +1 -1
- package/dist/server/src/server/dev-server.js +2 -2
- package/dist/server/src/server/runner.js +2 -2
- package/dist/server/src/server/startup.js +2 -2
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
- package/dist/server/src/services/connection/connection-manager.js +16 -21
- package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
- package/dist/server/src/services/connection/tool-cache.js +10 -8
- package/dist/server/src/services/event-bus.service.d.ts +3 -1
- package/dist/server/src/services/event-bus.service.d.ts.map +1 -1
- package/dist/server/src/services/event-bus.service.js +1 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts +1 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
- package/dist/server/src/services/gateway/gateway.service.js +29 -7
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts +1 -2
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +24 -13
- package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/resources-handler.js +7 -3
- package/dist/server/src/services/gateway/tool-list-generator.d.ts +14 -19
- package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
- package/dist/server/src/services/gateway/tool-list-generator.js +221 -80
- package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.js +15 -2
- package/dist/server/src/services/hub-tools/instance-selector.js +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.d.ts +0 -21
- package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.js +15 -15
- package/dist/server/src/services/hub-tools/server-selector.js +1 -1
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.js +15 -12
- package/dist/server/src/services/log-storage.service.js +1 -1
- package/dist/server/src/services/system-tool-handler.js +1 -1
- package/dist/server/src/utils/error-handler.js +1 -1
- package/dist/server/src/utils/index.d.ts +1 -1
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/utils/index.js +1 -1
- package/dist/server/src/utils/json-utils.js +4 -4
- package/dist/server/src/utils/log-rotator.d.ts +0 -15
- package/dist/server/src/utils/log-rotator.d.ts.map +1 -1
- package/dist/server/src/utils/log-rotator.js +0 -18
- package/dist/server/src/utils/port-checker.js +1 -1
- package/dist/server/src/utils/transports/stdio-transport.js +1 -1
- package/dist/server/src/utils/transports/streamable-http-transport.js +1 -1
- package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
- package/dist/server/src/utils/transports/transport-factory.js +26 -3
- package/dist/server/tests/contract/mcp-protocol/initialize.test.js +1 -1
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +1 -1
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +1 -1
- package/dist/server/tests/integration/gateway/fault-tolerance.test.js +1 -1
- package/dist/server/tests/integration/gateway/mcp-connection.test.js +1 -1
- package/dist/server/tests/types/logger-test-helpers.d.ts +1 -1
- package/dist/server/tests/types/logger-test-helpers.d.ts.map +1 -1
- package/dist/server/tests/unit/config/config-migrator.test.js +45 -105
- package/dist/server/tests/unit/config/config-saver.test.js +1 -1
- package/dist/server/tests/unit/server/runner.test.js +5 -6
- package/dist/server/tests/unit/services/gateway-logging.test.js +1 -1
- package/dist/server/tests/unit/services/hub-manager-service.test.js +4 -5
- package/dist/server/tests/unit/services/hub-tools.service.test.js +78 -2
- package/dist/server/tests/unit/utils/log-rotator.test.js +1 -15
- package/dist/server/tests/unit/utils/logger.test.js +1 -1
- package/package.json +1 -3
- package/dist/client/assets/ResourceDetailView-Bi5UsbFq.js +0 -1
- package/dist/client/assets/ResourcesView-B9anSm85.js +0 -1
- package/dist/client/assets/ResourcesView-Cc8RHtia.css +0 -1
- package/dist/client/assets/ServerDetail-DMoFqWCp.js +0 -2
- package/dist/client/assets/ToolCallDialog-BEyRp_J3.js +0 -1
- package/dist/client/assets/ToolCallDialog-BhdPX-Kf.css +0 -1
- package/dist/client/assets/ToolsView-BU7PKJwt.js +0 -1
- package/dist/client/assets/ToolsView-BkrQLjH9.css +0 -1
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SystemConfig } from './config.schema.js';
|
|
2
2
|
import type { ServerRuntimeConfig } from '../../shared/models/server.model.js';
|
|
3
|
-
/**
|
|
4
|
-
* @deprecated Use ServerRuntimeConfig from @shared-models/server.model instead
|
|
5
|
-
* Resolved server configuration with template + instance merged
|
|
6
|
-
*/
|
|
7
|
-
export type ResolvedServerConfig = ServerRuntimeConfig;
|
|
8
3
|
/**
|
|
9
4
|
* Configuration Migration Result
|
|
10
5
|
*/
|
|
11
|
-
|
|
6
|
+
interface MigrationResult {
|
|
12
7
|
success: boolean;
|
|
13
8
|
backupPath?: string;
|
|
14
9
|
migratedConfig?: SystemConfig;
|
|
@@ -18,7 +13,7 @@ export interface MigrationResult {
|
|
|
18
13
|
/**
|
|
19
14
|
* Configuration Migrator Options
|
|
20
15
|
*/
|
|
21
|
-
|
|
16
|
+
interface MigrationOptions {
|
|
22
17
|
dryRun?: boolean;
|
|
23
18
|
createBackup?: boolean;
|
|
24
19
|
validateAfterMigration?: boolean;
|
|
@@ -31,36 +26,6 @@ export interface MigrationOptions {
|
|
|
31
26
|
* @returns Migration result with backup path and migrated config
|
|
32
27
|
*/
|
|
33
28
|
export declare function migrateConfig(configPath: string, options?: MigrationOptions): MigrationResult;
|
|
34
|
-
/**
|
|
35
|
-
* Performs a dry run of the migration without modifying files
|
|
36
|
-
*
|
|
37
|
-
* @param configPath Path to the configuration file
|
|
38
|
-
* @returns Migration result with what would happen
|
|
39
|
-
*/
|
|
40
|
-
export declare function dryRunMigration(configPath: string): MigrationResult;
|
|
41
|
-
/**
|
|
42
|
-
* Rolls back a migration using a backup file
|
|
43
|
-
*
|
|
44
|
-
* @param configPath Path to the current configuration file
|
|
45
|
-
* @param backupPath Path to the backup file
|
|
46
|
-
* @returns Success status and any error message
|
|
47
|
-
*/
|
|
48
|
-
export declare function rollbackMigration(configPath: string, backupPath: string): {
|
|
49
|
-
success: boolean;
|
|
50
|
-
error?: string;
|
|
51
|
-
};
|
|
52
|
-
/**
|
|
53
|
-
* Checks the migration status of a configuration file
|
|
54
|
-
*
|
|
55
|
-
* @param configPath Path to the configuration file
|
|
56
|
-
* @returns Status information
|
|
57
|
-
*/
|
|
58
|
-
export declare function checkMigrationStatus(configPath: string): {
|
|
59
|
-
exists: boolean;
|
|
60
|
-
version: 'v1' | 'v1.1' | 'unknown';
|
|
61
|
-
canMigrate: boolean;
|
|
62
|
-
message: string;
|
|
63
|
-
};
|
|
64
29
|
/**
|
|
65
30
|
* Resolves a server instance configuration by merging template and instance overrides
|
|
66
31
|
*
|
|
@@ -69,14 +34,5 @@ export declare function checkMigrationStatus(configPath: string): {
|
|
|
69
34
|
* @returns The resolved server configuration
|
|
70
35
|
*/
|
|
71
36
|
export declare function resolveInstanceConfig(serverConfig: SystemConfig['servers'][string], instanceId?: string): ServerRuntimeConfig | null;
|
|
72
|
-
|
|
73
|
-
* Gets all enabled instances for a server
|
|
74
|
-
*
|
|
75
|
-
* @param serverConfig The server configuration
|
|
76
|
-
* @returns Array of enabled instances with resolved configs
|
|
77
|
-
*/
|
|
78
|
-
export declare function getEnabledInstances(serverConfig: SystemConfig['servers'][string]): Array<{
|
|
79
|
-
instance: ServerInstance;
|
|
80
|
-
resolved: ServerRuntimeConfig;
|
|
81
|
-
}>;
|
|
37
|
+
export {};
|
|
82
38
|
//# sourceMappingURL=config-migrator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-migrator.d.ts","sourceRoot":"","sources":["../../../../src/config/config-migrator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"config-migrator.d.ts","sourceRoot":"","sources":["../../../../src/config/config-migrator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkC,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAG1E;;GAEG;AACH,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,UAAU,gBAAgB;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AA0MD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,eAAe,CAwDjG;AAID;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAC7C,UAAU,CAAC,EAAE,MAAM,GAClB,mBAAmB,GAAG,IAAI,CA+B5B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { dirname, join } from 'node:path';
|
|
3
|
-
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
3
|
+
import { logger, LOG_MODULES } from '../utils/logger/index.js';
|
|
4
4
|
import { generateInstanceId } from '../utils/instance-id.js';
|
|
5
5
|
import { isLegacyV1Config, SystemConfigSchema } from './config.schema.js';
|
|
6
6
|
import { reassignServerInstanceIndexes } from './server-config-manager.js';
|
|
@@ -207,90 +207,6 @@ export function migrateConfig(configPath, options = {}) {
|
|
|
207
207
|
return result;
|
|
208
208
|
}
|
|
209
209
|
}
|
|
210
|
-
/**
|
|
211
|
-
* Performs a dry run of the migration without modifying files
|
|
212
|
-
*
|
|
213
|
-
* @param configPath Path to the configuration file
|
|
214
|
-
* @returns Migration result with what would happen
|
|
215
|
-
*/
|
|
216
|
-
export function dryRunMigration(configPath) {
|
|
217
|
-
return migrateConfig(configPath, {
|
|
218
|
-
dryRun: true,
|
|
219
|
-
createBackup: false,
|
|
220
|
-
validateAfterMigration: true
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Rolls back a migration using a backup file
|
|
225
|
-
*
|
|
226
|
-
* @param configPath Path to the current configuration file
|
|
227
|
-
* @param backupPath Path to the backup file
|
|
228
|
-
* @returns Success status and any error message
|
|
229
|
-
*/
|
|
230
|
-
export function rollbackMigration(configPath, backupPath) {
|
|
231
|
-
try {
|
|
232
|
-
if (!existsSync(backupPath)) {
|
|
233
|
-
return {
|
|
234
|
-
success: false,
|
|
235
|
-
error: `Backup file not found: ${backupPath}`
|
|
236
|
-
};
|
|
237
|
-
}
|
|
238
|
-
const backupContent = readFileSync(backupPath, 'utf8');
|
|
239
|
-
const dir = dirname(configPath);
|
|
240
|
-
if (!existsSync(dir)) {
|
|
241
|
-
mkdirSync(dir, { recursive: true });
|
|
242
|
-
}
|
|
243
|
-
writeFileSync(configPath, backupContent, 'utf8');
|
|
244
|
-
return { success: true };
|
|
245
|
-
}
|
|
246
|
-
catch (error) {
|
|
247
|
-
return {
|
|
248
|
-
success: false,
|
|
249
|
-
error: error instanceof Error ? error.message : String(error)
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Checks the migration status of a configuration file
|
|
255
|
-
*
|
|
256
|
-
* @param configPath Path to the configuration file
|
|
257
|
-
* @returns Status information
|
|
258
|
-
*/
|
|
259
|
-
export function checkMigrationStatus(configPath) {
|
|
260
|
-
if (!existsSync(configPath)) {
|
|
261
|
-
return {
|
|
262
|
-
exists: false,
|
|
263
|
-
version: 'unknown',
|
|
264
|
-
canMigrate: false,
|
|
265
|
-
message: 'Configuration file does not exist'
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
try {
|
|
269
|
-
const config = loadConfigFile(configPath);
|
|
270
|
-
if (!isLegacyV1Config(config)) {
|
|
271
|
-
return {
|
|
272
|
-
exists: true,
|
|
273
|
-
version: 'v1.1',
|
|
274
|
-
canMigrate: false,
|
|
275
|
-
message: 'Configuration is already in v1.1 format'
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
return {
|
|
279
|
-
exists: true,
|
|
280
|
-
version: 'v1',
|
|
281
|
-
canMigrate: true,
|
|
282
|
-
message: 'Configuration is in v1.0 format and can be migrated'
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
catch (error) {
|
|
286
|
-
return {
|
|
287
|
-
exists: true,
|
|
288
|
-
version: 'unknown',
|
|
289
|
-
canMigrate: false,
|
|
290
|
-
message: `Error reading configuration: ${error instanceof Error ? error.message : String(error)}`
|
|
291
|
-
};
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
210
|
// ====== v1.1 Configuration Helpers ======
|
|
295
211
|
/**
|
|
296
212
|
* Resolves a server instance configuration by merging template and instance overrides
|
|
@@ -329,21 +245,4 @@ export function resolveInstanceConfig(serverConfig, instanceId) {
|
|
|
329
245
|
description: template.description
|
|
330
246
|
};
|
|
331
247
|
}
|
|
332
|
-
|
|
333
|
-
* Gets all enabled instances for a server
|
|
334
|
-
*
|
|
335
|
-
* @param serverConfig The server configuration
|
|
336
|
-
* @returns Array of enabled instances with resolved configs
|
|
337
|
-
*/
|
|
338
|
-
export function getEnabledInstances(serverConfig) {
|
|
339
|
-
const result = [];
|
|
340
|
-
for (const instance of serverConfig.instances) {
|
|
341
|
-
if (instance.enabled !== false) {
|
|
342
|
-
const resolved = resolveInstanceConfig(serverConfig, instance.id);
|
|
343
|
-
if (resolved) {
|
|
344
|
-
result.push({ instance, resolved });
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
return result;
|
|
349
|
-
}
|
|
248
|
+
// ====== Config Conversion Helpers ======
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import * as fs from 'fs';
|
|
6
6
|
import path from 'path';
|
|
7
|
-
import { logger } from '../utils/logger.js';
|
|
7
|
+
import { logger } from '../utils/logger/index.js';
|
|
8
8
|
import { LOG_MODULES } from '../utils/logger/log-modules.js';
|
|
9
9
|
/**
|
|
10
10
|
* Saves the configuration to disk at the specified path.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { ServerTemplateSchema, ServerInstanceSchema, ServerConfigSchema } from './config.schema.js';
|
|
6
6
|
import { convertHttpToStreamableHttp } from './type-converter.js';
|
|
7
|
-
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
7
|
+
import { logger, LOG_MODULES } from '../utils/logger/index.js';
|
|
8
8
|
import { getObjectChanges, logObjectChangesWithTitle } from './config-change-logger.js';
|
|
9
9
|
import { sortServerConfigEnvHeaders } from '../utils/sort-utils.js';
|
|
10
10
|
import { generateInstanceId } from '../utils/instance-id.js';
|
|
@@ -59,6 +59,7 @@ export type SystemToolName = (typeof SYSTEM_TOOL_NAMES)[number];
|
|
|
59
59
|
/**
|
|
60
60
|
* MCP Hub Lite server name - represents both the system tools server and the gateway server
|
|
61
61
|
* This single name is used for both system tool identification and gateway server naming
|
|
62
|
+
* Re-exported from shared for consistent usage across backend and frontend
|
|
62
63
|
*/
|
|
63
|
-
export
|
|
64
|
+
export { MCP_HUB_LITE_SERVER } from '../../shared/models/constants.js';
|
|
64
65
|
//# sourceMappingURL=system-tools.constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-tools.constants.d.ts","sourceRoot":"","sources":["../../../../src/models/system-tools.constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,aAAa,GACb,cAAc,GACd,6BAA6B,GAC7B,cAAc,GACd,iBAAiB,CAAC;AAGtB,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAChD,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,eAAO,MAAM,cAAc,cAAc,CAAC;AAC1C,eAAO,MAAM,8BAA8B,8BAA8B,CAAC;AAC1E,eAAO,MAAM,cAAc,cAAc,CAAC;AAC1C,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,4HAQpB,CAAC;AAEX;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAGhE
|
|
1
|
+
{"version":3,"file":"system-tools.constants.d.ts","sourceRoot":"","sources":["../../../../src/models/system-tools.constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,aAAa,GACb,cAAc,GACd,6BAA6B,GAC7B,cAAc,GACd,iBAAiB,CAAC;AAGtB,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAChD,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,eAAO,MAAM,cAAc,cAAc,CAAC;AAC1C,eAAO,MAAM,8BAA8B,8BAA8B,CAAC;AAC1E,eAAO,MAAM,cAAc,cAAc,CAAC;AAC1C,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,4HAQpB,CAAC;AAEX;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAGhE;;;;GAIG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -27,5 +27,6 @@ export const SYSTEM_TOOL_NAMES = [
|
|
|
27
27
|
/**
|
|
28
28
|
* MCP Hub Lite server name - represents both the system tools server and the gateway server
|
|
29
29
|
* This single name is used for both system tool identification and gateway server naming
|
|
30
|
+
* Re-exported from shared for consistent usage across backend and frontend
|
|
30
31
|
*/
|
|
31
|
-
export
|
|
32
|
+
export { MCP_HUB_LITE_SERVER } from '../../shared/models/constants.js';
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* // Clean up PID file on shutdown
|
|
24
24
|
* PidManager.removePid();
|
|
25
25
|
*/
|
|
26
|
-
import { logger } from '../utils/logger.js';
|
|
26
|
+
import { logger } from '../utils/logger/index.js';
|
|
27
27
|
import { LOG_MODULES } from '../utils/logger/log-modules.js';
|
|
28
28
|
import { writePidFile, readPidFile, removePidFile, pidFileExists } from './file.js';
|
|
29
29
|
export class PidManager {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { buildApp } from '../app.js';
|
|
2
2
|
import { configManager } from '../config/config-manager.js';
|
|
3
|
-
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
4
|
-
import { mcpConnectionManager } from '../services/
|
|
3
|
+
import { logger, LOG_MODULES } from '../utils/logger/index.js';
|
|
4
|
+
import { mcpConnectionManager } from '../services/connection/index.js';
|
|
5
5
|
import { PidManager } from '../pid/manager.js';
|
|
6
6
|
import { collectConnectTasks, executeConnectTasks, ensureServerInstances } from './startup.js';
|
|
7
7
|
// Set log level to debug for development server
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { buildApp } from '../app.js';
|
|
2
2
|
import { configManager } from '../config/config-manager.js';
|
|
3
|
-
import { logger } from '../utils/logger.js';
|
|
3
|
+
import { logger } from '../utils/logger/index.js';
|
|
4
4
|
import { LOG_MODULES } from '../utils/logger/log-modules.js';
|
|
5
5
|
import { setJsonPrettyConfigGetter } from '../utils/json-utils.js';
|
|
6
|
-
import { mcpConnectionManager } from '../services/
|
|
6
|
+
import { mcpConnectionManager } from '../services/connection/index.js';
|
|
7
7
|
import { PidManager } from '../pid/manager.js';
|
|
8
8
|
import { checkPortWithExit } from '../utils/port-checker.js';
|
|
9
9
|
import { collectConnectTasks, executeConnectTasks, ensureServerInstances } from './startup.js';
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { configManager } from '../config/config-manager.js';
|
|
8
8
|
import { resolveInstanceConfig } from '../config/config-migrator.js';
|
|
9
|
-
import { mcpConnectionManager } from '../services/
|
|
10
|
-
import { logger } from '../utils/logger.js';
|
|
9
|
+
import { mcpConnectionManager } from '../services/connection/index.js';
|
|
10
|
+
import { logger } from '../utils/logger/index.js';
|
|
11
11
|
/**
|
|
12
12
|
* Ensures all configured servers have at least one instance.
|
|
13
13
|
* Creates a default instance for any server that doesn't have one yet.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../../../../src/services/connection/connection-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAanE,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAKjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAG1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,aAAa,CAAsC;IAE3D,OAAO,CAAC,yBAAyB,CAAuC;;IAuBxE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACU,OAAO,CAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,GAC1D,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../../../../src/services/connection/connection-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
|
2
2
|
import { TransportFactory } from '../../utils/transports/transport-factory.js';
|
|
3
3
|
import { UnauthorizedError, auth } from '@modelcontextprotocol/sdk/client/auth.js';
|
|
4
4
|
import { StreamableHttpTransport } from '../../utils/transports/streamable-http-transport.js';
|
|
5
|
-
import { logger, LOG_MODULES, formatMcpMessageForLogging, logNotificationMessage } from '../../utils/logger.js';
|
|
5
|
+
import { logger, LOG_MODULES, formatMcpMessageForLogging, logNotificationMessage } from '../../utils/logger/index.js';
|
|
6
6
|
import { getAppVersion } from '../../utils/version.js';
|
|
7
7
|
import { getMcpCommDebugSetting } from '../../utils/json-utils.js';
|
|
8
8
|
import { logStorage } from '../log-storage.service.js';
|
|
@@ -117,7 +117,7 @@ export class McpConnectionManager {
|
|
|
117
117
|
// 4. Get server info
|
|
118
118
|
const serverInfo = this.getServerInfo(serverId);
|
|
119
119
|
// 5. Create transport and set up callbacks
|
|
120
|
-
const { transport
|
|
120
|
+
const { transport } = this.initializeTransport(server, serverInfo, compositeKey, serverName, serverIndex, oauthProvider ?? undefined);
|
|
121
121
|
// Capture OAuth provider from the transport (reuse across retries)
|
|
122
122
|
if (!oauthProvider && transport instanceof StreamableHttpTransport) {
|
|
123
123
|
const provider = transport.getOAuthProvider();
|
|
@@ -134,16 +134,23 @@ export class McpConnectionManager {
|
|
|
134
134
|
}
|
|
135
135
|
// 6. Establish client connection
|
|
136
136
|
const client = await this.establishClientConnection(transport);
|
|
137
|
-
// 7.
|
|
137
|
+
// 7. Extract PID after transport is started
|
|
138
|
+
const pid = (() => {
|
|
139
|
+
if ('pid' in transport && typeof transport.pid === 'number') {
|
|
140
|
+
return transport.pid;
|
|
141
|
+
}
|
|
142
|
+
return undefined;
|
|
143
|
+
})();
|
|
144
|
+
// 8. Register connection
|
|
138
145
|
this.registerConnection(compositeKey, serverName, client, transport);
|
|
139
|
-
//
|
|
146
|
+
// 9. Update connected status
|
|
140
147
|
this.updateConnectedStatus(compositeKey, client, pid);
|
|
141
148
|
// 9. Publish connection events
|
|
142
149
|
this.publishConnectionEvents(serverName, serverIndex);
|
|
143
150
|
// 10. Refresh resources
|
|
144
|
-
await this.refreshServerResources(serverName, serverIndex
|
|
151
|
+
await this.refreshServerResources(serverName, serverIndex);
|
|
145
152
|
// 11. Request log notifications from downstream server
|
|
146
|
-
await this.requestLoggingFromServer(compositeKey, client
|
|
153
|
+
await this.requestLoggingFromServer(compositeKey, client);
|
|
147
154
|
return true;
|
|
148
155
|
}
|
|
149
156
|
catch (error) {
|
|
@@ -308,12 +315,7 @@ export class McpConnectionManager {
|
|
|
308
315
|
logStorage.append(compositeKey, 'error', `[${serverName}] [STDERR] ${data}`);
|
|
309
316
|
};
|
|
310
317
|
}
|
|
311
|
-
|
|
312
|
-
let pid;
|
|
313
|
-
if ('pid' in transport && typeof transport.pid === 'number') {
|
|
314
|
-
pid = transport.pid;
|
|
315
|
-
}
|
|
316
|
-
return { transport, pid };
|
|
318
|
+
return { transport };
|
|
317
319
|
}
|
|
318
320
|
/**
|
|
319
321
|
* Creates Client and connects to transport.
|
|
@@ -378,11 +380,7 @@ export class McpConnectionManager {
|
|
|
378
380
|
/**
|
|
379
381
|
* Refreshes server tools and resources (only for bidirectional transports).
|
|
380
382
|
*/
|
|
381
|
-
async refreshServerResources(serverName, serverIndex
|
|
382
|
-
if (serverType === 'sse') {
|
|
383
|
-
logger.info('SSE transport is unidirectional, skipping tool/resource refresh', LOG_MODULES.CONNECTION_MANAGER);
|
|
384
|
-
return;
|
|
385
|
-
}
|
|
383
|
+
async refreshServerResources(serverName, serverIndex) {
|
|
386
384
|
const tools = await this.refreshTools(serverName, serverIndex);
|
|
387
385
|
const resources = await this.refreshResources(serverName, serverIndex);
|
|
388
386
|
eventBus.publish(EventTypes.TOOLS_UPDATED, {
|
|
@@ -400,10 +398,7 @@ export class McpConnectionManager {
|
|
|
400
398
|
* Sends logging/setLevel request to downstream server to start receiving log notifications.
|
|
401
399
|
* This is a best-effort request — servers that don't support logging will silently ignore it.
|
|
402
400
|
*/
|
|
403
|
-
async requestLoggingFromServer(compositeKey, client
|
|
404
|
-
// SSE is unidirectional — cannot send requests to the server
|
|
405
|
-
if (serverType === 'sse')
|
|
406
|
-
return;
|
|
401
|
+
async requestLoggingFromServer(compositeKey, client) {
|
|
407
402
|
try {
|
|
408
403
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
409
404
|
await client.request({ method: 'logging/setLevel', params: { level: 'info' } }, { timeout: 5000 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../../../../src/services/connection/tool-cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAIzD;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,qBAAqB,CAAkC;IAE/D;;;;;OAKG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAI9D;;;;OAIG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI3C;;;;OAIG;IACH,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IASjD;;;;;OAKG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvD;;;;;OAKG;IACH,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAS/C;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAWtE;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE;IAWzD;;;;;OAKG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE;IAIhD;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAM/D;;;;OAIG;IACH,WAAW,IAAI,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../../../../src/services/connection/tool-cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAIzD;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,qBAAqB,CAAkC;IAE/D;;;;;OAKG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAI9D;;;;OAIG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI3C;;;;OAIG;IACH,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IASjD;;;;;OAKG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvD;;;;;OAKG;IACH,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAS/C;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAWtE;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE;IAWzD;;;;;OAKG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE;IAIhD;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAM/D;;;;OAIG;IACH,WAAW,IAAI,IAAI,EAAE;IAIrB;;;;OAIG;IACH,uBAAuB,IAAI,IAAI,EAAE;IAQjC;;;;OAIG;IACH,mBAAmB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE;IAIzC;;;;;;OAMG;IACH,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAI7C;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAWzD;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;;;OAIG;IACH,IAAI,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAE3C;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { logger, LOG_MODULES } from '../../utils/logger.js';
|
|
1
|
+
import { logger, LOG_MODULES } from '../../utils/logger/index.js';
|
|
2
2
|
import { getCompositeKey } from '../../utils/composite-key.js';
|
|
3
3
|
import { normalizeToolName } from '../../utils/name-converter.js';
|
|
4
4
|
/**
|
|
@@ -119,11 +119,7 @@ export class ToolCache {
|
|
|
119
119
|
* @returns Array of all tools from all servers
|
|
120
120
|
*/
|
|
121
121
|
getAllTools() {
|
|
122
|
-
|
|
123
|
-
for (const tools of this.toolCache.values()) {
|
|
124
|
-
allTools.push(...tools);
|
|
125
|
-
}
|
|
126
|
-
return allTools;
|
|
122
|
+
return this.getAllToolsByServerName();
|
|
127
123
|
}
|
|
128
124
|
/**
|
|
129
125
|
* Gets all tools from the server name-level cache.
|
|
@@ -174,13 +170,19 @@ export class ToolCache {
|
|
|
174
170
|
* @param serverName - The server name to update
|
|
175
171
|
*/
|
|
176
172
|
updateServerNameCache(serverName) {
|
|
177
|
-
const
|
|
173
|
+
const toolMap = new Map();
|
|
178
174
|
for (const [compositeKey, cachedTools] of this.toolCache.entries()) {
|
|
179
175
|
const instanceServerName = this.getServerNameById(compositeKey);
|
|
180
176
|
if (instanceServerName === serverName) {
|
|
181
|
-
|
|
177
|
+
for (const tool of cachedTools) {
|
|
178
|
+
const key = normalizeToolName(tool.name);
|
|
179
|
+
if (!toolMap.has(key)) {
|
|
180
|
+
toolMap.set(key, tool);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
182
183
|
}
|
|
183
184
|
}
|
|
185
|
+
const allToolsForServer = Array.from(toolMap.values());
|
|
184
186
|
if (allToolsForServer.length > 0) {
|
|
185
187
|
this.serverNameToolCache.set(serverName, allToolsForServer);
|
|
186
188
|
}
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* automatically manages memory by cleaning up empty event type entries when all listeners
|
|
23
23
|
* are unsubscribed.
|
|
24
24
|
*/
|
|
25
|
-
|
|
25
|
+
type EventData = unknown;
|
|
26
26
|
/**
|
|
27
27
|
* Interface representing a published event with its type and associated data.
|
|
28
28
|
*
|
|
@@ -154,6 +154,7 @@ export declare const EventTypes: {
|
|
|
154
154
|
readonly SERVER_INSTANCE_UPDATED: "server-instance-updated";
|
|
155
155
|
readonly SERVER_INSTANCE_DELETED: "server-instance-deleted";
|
|
156
156
|
readonly TOOLS_UPDATED: "tools";
|
|
157
|
+
readonly AGGREGATED_TOOLS_CHANGED: "aggregated-tools-changed";
|
|
157
158
|
readonly TOOL_CALL_STARTED: "tool-call-started";
|
|
158
159
|
readonly TOOL_CALL_COMPLETED: "tool-call-completed";
|
|
159
160
|
readonly TOOL_CALL_ERROR: "tool-call-error";
|
|
@@ -162,4 +163,5 @@ export declare const EventTypes: {
|
|
|
162
163
|
readonly CONFIGURATION_UPDATED: "configuration-updated";
|
|
163
164
|
};
|
|
164
165
|
export declare const eventBus: EventBusService;
|
|
166
|
+
export {};
|
|
165
167
|
//# sourceMappingURL=event-bus.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.service.d.ts","sourceRoot":"","sources":["../../../../src/services/event-bus.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,
|
|
1
|
+
{"version":3,"file":"event-bus.service.d.ts","sourceRoot":"","sources":["../../../../src/services/event-bus.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,KAAK,SAAS,GAAG,OAAO,CAAC;AAEzB;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAqD;IAEtE;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAajD;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI;IAU7E;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,WAAW;IAWnB;;;;;;;;;;;;;;OAcG;IACH,cAAc,IAAI,IAAI;IAItB;;;;;;;;;;;;;;OAcG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB;;;;;;;;;;;;;;;OAeG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAI5C;AAGD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;CA6Bb,CAAC;AAGX,eAAO,MAAM,QAAQ,iBAAwB,CAAC"}
|
|
@@ -181,6 +181,7 @@ export const EventTypes = {
|
|
|
181
181
|
SERVER_INSTANCE_DELETED: 'server-instance-deleted',
|
|
182
182
|
// Tool related events
|
|
183
183
|
TOOLS_UPDATED: 'tools',
|
|
184
|
+
AGGREGATED_TOOLS_CHANGED: 'aggregated-tools-changed',
|
|
184
185
|
TOOL_CALL_STARTED: 'tool-call-started',
|
|
185
186
|
TOOL_CALL_COMPLETED: 'tool-call-completed',
|
|
186
187
|
TOOL_CALL_ERROR: 'tool-call-error',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/gateway/gateway.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/gateway/gateway.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsBpE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE5D,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;;IAQpC,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,wBAAwB;IA2BhC,OAAO,CAAC,gBAAgB;IAkDxB;;;;;OAKG;IACI,wBAAwB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;IAIvF;;;;;OAKG;IACI,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAI5C;;;;;OAKG;IACI,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM;IAIpD;;;;OAIG;IACI,sBAAsB,IAAI,SAAS;IAI1C;;;;OAIG;IACU,KAAK;CAKnB;AAED,eAAO,MAAM,OAAO,gBAAuB,CAAC"}
|
|
@@ -24,7 +24,9 @@ import { getGatewayDebugSetting } from '../../utils/json-utils.js';
|
|
|
24
24
|
import { MCP_HUB_LITE_SERVER } from '../../models/system-tools.constants.js';
|
|
25
25
|
import { registerInitializeHandlers, registerResourcesHandlers, registerSystemToolsHandlers, registerCallToolHandler } from './request-handlers/index.js';
|
|
26
26
|
import { getAppVersion } from '../../utils/version.js';
|
|
27
|
-
import {
|
|
27
|
+
import { eventBus, EventTypes } from '../event-bus.service.js';
|
|
28
|
+
import { hubManager } from '../hub-manager.service.js';
|
|
29
|
+
import { generateGatewayToolsList, rebuildFromScratch, addToCache, removeFromCache } from './tool-list-generator.js';
|
|
28
30
|
import { formatToolArgs, formatToolResponse } from './log-formatter.js';
|
|
29
31
|
export class GatewayService {
|
|
30
32
|
server;
|
|
@@ -33,6 +35,31 @@ export class GatewayService {
|
|
|
33
35
|
constructor() {
|
|
34
36
|
this.appVersion = getAppVersion();
|
|
35
37
|
this.server = this.createServerWithHandlers();
|
|
38
|
+
this.initToolCache();
|
|
39
|
+
}
|
|
40
|
+
initToolCache() {
|
|
41
|
+
rebuildFromScratch();
|
|
42
|
+
eventBus.subscribe(EventTypes.TOOLS_UPDATED, (rawData) => {
|
|
43
|
+
const data = rawData;
|
|
44
|
+
const serverConfig = hubManager.getServerByName(data.serverName);
|
|
45
|
+
if (serverConfig?.template?.aggregatedTools?.length) {
|
|
46
|
+
rebuildFromScratch();
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
eventBus.subscribe(EventTypes.SERVER_DISCONNECTED, (rawData) => {
|
|
50
|
+
const data = rawData;
|
|
51
|
+
const serverConfig = hubManager.getServerByName(data.serverName);
|
|
52
|
+
if (!serverConfig || serverConfig.template?.aggregatedTools?.length) {
|
|
53
|
+
rebuildFromScratch();
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
eventBus.subscribe(EventTypes.AGGREGATED_TOOLS_CHANGED, (rawData) => {
|
|
57
|
+
const data = rawData;
|
|
58
|
+
if (data.added.length > 0)
|
|
59
|
+
addToCache(data.name, data.added);
|
|
60
|
+
if (data.removed.length > 0)
|
|
61
|
+
removeFromCache(data.name, data.removed);
|
|
62
|
+
});
|
|
36
63
|
}
|
|
37
64
|
createServerWithHandlers() {
|
|
38
65
|
if (getGatewayDebugSetting()) {
|
|
@@ -60,11 +87,6 @@ export class GatewayService {
|
|
|
60
87
|
if (getGatewayDebugSetting()) {
|
|
61
88
|
logger.debug('Registering handlers on MCP server', LOG_MODULES.GATEWAY_SERVICE);
|
|
62
89
|
}
|
|
63
|
-
// Local toolMap for this connection
|
|
64
|
-
const toolMap = new Map();
|
|
65
|
-
if (getGatewayDebugSetting()) {
|
|
66
|
-
logger.debug('Created local toolMap for connection', LOG_MODULES.GATEWAY_SERVICE);
|
|
67
|
-
}
|
|
68
90
|
try {
|
|
69
91
|
registerInitializeHandlers(server);
|
|
70
92
|
if (getGatewayDebugSetting()) {
|
|
@@ -96,7 +118,7 @@ export class GatewayService {
|
|
|
96
118
|
throw error;
|
|
97
119
|
}
|
|
98
120
|
try {
|
|
99
|
-
registerCallToolHandler(server
|
|
121
|
+
registerCallToolHandler(server);
|
|
100
122
|
if (getGatewayDebugSetting()) {
|
|
101
123
|
logger.debug('Call tool handler registered successfully', LOG_MODULES.GATEWAY_SERVICE);
|
|
102
124
|
}
|
|
@@ -2,12 +2,11 @@
|
|
|
2
2
|
* Call tool request handler for Gateway service.
|
|
3
3
|
*/
|
|
4
4
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
5
|
-
import type { ToolMapEntry } from '../types.js';
|
|
6
5
|
/**
|
|
7
6
|
* Register call tool handler on the MCP server.
|
|
8
7
|
*
|
|
9
8
|
* @param server - MCP server instance to register handlers on
|
|
10
9
|
* @param toolMap - Tool map for routing tool calls
|
|
11
10
|
*/
|
|
12
|
-
export declare function registerCallToolHandler(server: McpServer
|
|
11
|
+
export declare function registerCallToolHandler(server: McpServer): void;
|
|
13
12
|
//# sourceMappingURL=call-tool-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-tool-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/services/gateway/request-handlers/call-tool-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"call-tool-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/services/gateway/request-handlers/call-tool-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4FzE;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwG/D"}
|