@loop_ouroboros/mcp-hub-lite 1.0.2 → 1.1.1
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 +32 -0
- package/dist/client/assets/{HomeView-7rMg9C6t.js → HomeView-BBwvy1oj.js} +1 -1
- package/dist/client/assets/ResourceDetailView-CZ2aB73w.js +1 -0
- package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
- package/dist/client/assets/ResourcesView-CN1NlhWs.js +1 -0
- package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
- package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
- package/dist/client/assets/ServerDashboard-k652Vw4Z.js +1 -0
- package/dist/client/assets/ServerDetail-BLQ-a4cO.js +2 -0
- package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
- package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
- package/dist/client/assets/ServerListView-BHrsFD5i.js +36 -0
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHhwEuGe.js +1 -0
- package/dist/client/assets/SettingsView-CUOFNXrz.js +1 -0
- package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
- package/dist/client/assets/ToolCallDialog-BfPjLxfV.js +1 -0
- package/dist/client/assets/ToolsView-BxgXvPC3.css +1 -0
- package/dist/client/assets/ToolsView-CyuhYAE2.js +1 -0
- package/dist/client/assets/{_baseClone-5q1b0P3O.js → _baseClone-DO5qfalW.js} +1 -1
- package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
- package/dist/client/assets/el-form-item-CcGsD2K_.js +12 -0
- package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
- package/dist/client/assets/el-input-tYgeiaCT.js +1 -0
- package/dist/client/assets/{el-loading-H85n3BUC.js → el-loading-Dwl9E_Vr.js} +1 -1
- package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
- package/dist/client/assets/el-overlay-kqX_BABo.js +1 -0
- package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
- package/dist/client/assets/el-radio-group-D8aWBVOT.js +1 -0
- package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
- package/dist/client/assets/el-skeleton-item-BRwIFspE.js +1 -0
- package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
- package/dist/client/assets/el-switch-BF8c-xeU.js +1 -0
- package/dist/client/assets/el-tab-pane-C4Ep94cd.js +1 -0
- package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
- package/dist/client/assets/el-table-column-Cog6uCh-.js +1 -0
- package/dist/client/assets/index-ByNBhPAR.js +1 -0
- package/dist/client/assets/index-CTB6oe-9.js +2 -0
- package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
- package/dist/client/assets/omit-CUnDT6sS.js +1 -0
- package/dist/client/assets/{raf-DY5mgbuB.js → raf-CmzeRPMd.js} +1 -1
- package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-CbgVSHIh.js} +3 -3
- package/dist/client/index.html +3 -3
- package/dist/server/shared/models/resource.model.d.ts +2 -1
- package/dist/server/shared/models/resource.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.d.ts +362 -5
- package/dist/server/shared/models/server.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.js +220 -1
- package/dist/server/shared/models/session.model.d.ts +1 -57
- package/dist/server/shared/models/session.model.d.ts.map +1 -1
- package/dist/server/shared/models/session.model.js +1 -55
- package/dist/server/shared/models/tool.model.d.ts +4 -2
- package/dist/server/shared/models/tool.model.d.ts.map +1 -1
- package/dist/server/shared/types/session-context.types.d.ts +0 -2
- package/dist/server/shared/types/session-context.types.d.ts.map +1 -1
- package/dist/server/shared/types/websocket.types.d.ts +17 -10
- package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.js +2 -2
- package/dist/server/src/api/mcp/gateway.d.ts +1 -3
- package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
- package/dist/server/src/api/mcp/gateway.js +32 -49
- package/dist/server/src/api/web/hub-tools.d.ts +2 -2
- package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
- package/dist/server/src/api/web/hub-tools.js +3 -54
- package/dist/server/src/api/web/mcp-status.d.ts +1 -1
- package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
- package/dist/server/src/api/web/mcp-status.js +71 -30
- package/dist/server/src/api/web/resources.d.ts.map +1 -1
- package/dist/server/src/api/web/resources.js +28 -22
- 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 +24 -45
- package/dist/server/src/api/web/servers.d.ts +3 -3
- package/dist/server/src/api/web/servers.d.ts.map +1 -1
- package/dist/server/src/api/web/servers.js +70 -25
- package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
- package/dist/server/src/api/ws/ws-handler.js +4 -2
- package/dist/server/src/app.d.ts.map +1 -1
- package/dist/server/src/app.js +0 -2
- package/dist/server/src/cli/commands/list.js +2 -2
- package/dist/server/src/cli/commands/server.d.ts +57 -0
- package/dist/server/src/cli/commands/server.d.ts.map +1 -0
- package/dist/server/src/cli/commands/server.js +169 -0
- package/dist/server/src/cli/commands/status.d.ts.map +1 -1
- package/dist/server/src/cli/commands/status.js +41 -30
- package/dist/server/src/cli/index.d.ts.map +1 -1
- package/dist/server/src/cli/index.js +2 -1
- package/dist/server/src/cli/server.d.ts +11 -2
- package/dist/server/src/cli/server.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.d.ts +22 -0
- package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.js +135 -11
- package/dist/server/src/config/config-loader.d.ts +6 -5
- package/dist/server/src/config/config-loader.d.ts.map +1 -1
- package/dist/server/src/config/config-loader.js +54 -16
- package/dist/server/src/config/config-manager.d.ts +51 -43
- package/dist/server/src/config/config-manager.d.ts.map +1 -1
- package/dist/server/src/config/config-manager.js +84 -66
- package/dist/server/src/config/config-migrator.d.ts +82 -0
- package/dist/server/src/config/config-migrator.d.ts.map +1 -0
- package/dist/server/src/config/config-migrator.js +348 -0
- package/dist/server/src/config/config-saver.d.ts +2 -0
- package/dist/server/src/config/config-saver.d.ts.map +1 -1
- package/dist/server/src/config/config-saver.js +8 -2
- package/dist/server/src/config/config.schema.d.ts +10 -104
- package/dist/server/src/config/config.schema.d.ts.map +1 -1
- package/dist/server/src/config/config.schema.js +15 -99
- package/dist/server/src/config/path-validator.d.ts +27 -0
- package/dist/server/src/config/path-validator.d.ts.map +1 -0
- package/dist/server/src/config/path-validator.js +53 -0
- package/dist/server/src/config/server-config-manager.d.ts +37 -31
- package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
- package/dist/server/src/config/server-config-manager.js +222 -66
- package/dist/server/src/config/type-converter.d.ts.map +1 -1
- package/dist/server/src/config/type-converter.js +3 -2
- package/dist/server/src/models/event.model.d.ts +17 -10
- package/dist/server/src/models/event.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.d.ts +17 -3
- package/dist/server/src/models/server.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.js +2 -1
- package/dist/server/src/models/system-tools.constants.d.ts +10 -27
- package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
- package/dist/server/src/models/system-tools.constants.js +4 -8
- package/dist/server/src/pid/manager.d.ts.map +1 -1
- package/dist/server/src/pid/manager.js +2 -1
- package/dist/server/src/server/dev-server.js +34 -20
- package/dist/server/src/server/runner.d.ts.map +1 -1
- package/dist/server/src/server/runner.js +41 -26
- package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
- package/dist/server/src/services/connection/connection-manager.js +286 -241
- package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
- package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
- package/dist/server/src/services/connection/tool-cache.js +50 -55
- package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
- package/dist/server/src/services/gateway/gateway.service.js +53 -23
- package/dist/server/src/services/gateway/global-transport.d.ts +19 -0
- package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
- package/dist/server/src/services/gateway/global-transport.js +66 -0
- 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 +67 -65
- package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +20 -80
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
- 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 +5 -4
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
- package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
- package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
- package/dist/server/src/services/gateway/types.d.ts +2 -1
- package/dist/server/src/services/gateway/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.d.ts +32 -238
- package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.js +89 -267
- package/dist/server/src/services/hub-tools/index.d.ts +1 -3
- package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/index.js +1 -2
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
- package/dist/server/src/services/hub-tools/resource-generator.d.ts +24 -1
- package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.js +259 -39
- package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
- package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/server-selector.js +44 -37
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
- package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
- package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/tool-search.js +10 -4
- package/dist/server/src/services/hub-tools/types.d.ts +2 -2
- package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.d.ts +43 -72
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.js +185 -110
- package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/system-tool-handler.js +7 -17
- package/dist/server/src/utils/composite-key.d.ts +29 -0
- package/dist/server/src/utils/composite-key.d.ts.map +1 -0
- package/dist/server/src/utils/composite-key.js +39 -0
- package/dist/server/src/utils/error-handler.d.ts.map +1 -1
- package/dist/server/src/utils/error-handler.js +3 -2
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/utils/index.js +2 -0
- package/dist/server/src/utils/instance-id.d.ts +22 -0
- package/dist/server/src/utils/instance-id.d.ts.map +1 -0
- package/dist/server/src/utils/instance-id.js +59 -0
- package/dist/server/src/utils/json-utils.d.ts +4 -4
- package/dist/server/src/utils/json-utils.d.ts.map +1 -1
- package/dist/server/src/utils/json-utils.js +4 -4
- package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
- package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.js +82 -5
- package/dist/server/src/utils/logger/log-modules.d.ts +15 -9
- package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-modules.js +8 -6
- package/dist/server/src/utils/parameter-validator.d.ts +10 -0
- package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
- package/dist/server/src/utils/parameter-validator.js +53 -0
- package/dist/server/src/utils/process-tree.d.ts +49 -0
- package/dist/server/src/utils/process-tree.d.ts.map +1 -0
- package/dist/server/src/utils/process-tree.js +285 -0
- package/dist/server/src/utils/sort-utils.d.ts +40 -0
- package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
- package/dist/server/src/utils/sort-utils.js +131 -0
- package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
- package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/sse-transport.js +55 -9
- package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
- package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/stdio-transport.js +66 -247
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
- package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
- package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
- package/dist/server/src/utils/transports/transport-factory.js +31 -11
- package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
- package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
- package/dist/server/src/utils/version.d.ts +11 -0
- package/dist/server/src/utils/version.d.ts.map +1 -0
- package/dist/server/src/utils/version.js +57 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
- package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
- package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
- package/dist/server/tests/server.test.js +27 -16
- package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
- package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
- package/dist/server/tests/temp/temp-run-docling.js +53 -0
- package/dist/server/tests/types/test-helpers.d.ts +1 -2
- package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-saver.test.js +200 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config.schema.test.js +347 -0
- package/dist/server/tests/unit/server/runner.test.js +86 -62
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
- package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -320
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
- package/dist/server/tests/unit/services/session-manager.test.js +26 -436
- package/dist/server/tests/unit/utils/config.test.js +88 -186
- package/dist/server/tests/unit/utils/json-utils.test.js +18 -18
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
- package/package.json +3 -1
- package/dist/client/assets/ResourceDetailView-Bf-1ffbk.js +0 -1
- package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
- package/dist/client/assets/ResourcesView-g5x4xCPh.js +0 -1
- package/dist/client/assets/ServerDashboard-Chpne8Q0.css +0 -1
- package/dist/client/assets/ServerDashboard-G8Wmp4hF.js +0 -2
- package/dist/client/assets/ServerListView-dV2XrPjo.js +0 -32
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
- package/dist/client/assets/SessionsView-Ckd38lj1.js +0 -1
- package/dist/client/assets/SettingsView-BJUdepEQ.js +0 -1
- package/dist/client/assets/ToolCallDialog-C_bTCpHC.js +0 -1
- package/dist/client/assets/ToolsView-0c2eputu.js +0 -1
- package/dist/client/assets/ToolsView-E3Ps9c7i.css +0 -1
- package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
- package/dist/client/assets/el-form-item-ClFnj49k.js +0 -12
- package/dist/client/assets/el-input-CDnuSKVZ.js +0 -1
- package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
- package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
- package/dist/client/assets/el-overlay-CzMkXyYy.js +0 -1
- package/dist/client/assets/el-select-DvjGddk_.js +0 -1
- package/dist/client/assets/el-tab-pane-C_DQMcwe.js +0 -1
- package/dist/client/assets/el-table-column-CASRIbZM.js +0 -1
- package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
- package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
- package/dist/client/assets/el-tag-npbwux4f.js +0 -1
- package/dist/client/assets/index-CCnAxNF8.js +0 -2
- package/dist/client/assets/index-d1DZeSfz.js +0 -1
- package/dist/client/assets/omit-DPsOVNIJ.js +0 -1
- package/dist/client/assets/vnode-CHomNjgN.js +0 -1
|
@@ -4,9 +4,10 @@ import { eventBus, EventTypes } from './event-bus.service.js';
|
|
|
4
4
|
import { gateway } from './gateway.service.js';
|
|
5
5
|
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
6
6
|
import { stringifyForLogging } from '../utils/json-utils.js';
|
|
7
|
-
import {
|
|
7
|
+
import { McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
8
|
+
import { MCP_HUB_LITE_SERVER, LIST_SERVERS_TOOL, LIST_TOOLS_IN_SERVER_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, SYSTEM_TOOL_NAMES } from '../models/system-tools.constants.js';
|
|
8
9
|
import { ToolArgsParser } from '../utils/tool-args-parser.js';
|
|
9
|
-
import { hasValidId, selectBestInstance,
|
|
10
|
+
import { hasValidId, selectBestInstance, getServerDescription, getSystemTools, generateDynamicResources, readResource as readResourceUtil } from './hub-tools/index.js';
|
|
10
11
|
/**
|
|
11
12
|
* Central service for managing system tools and MCP server interactions in the MCP Hub Lite gateway.
|
|
12
13
|
*
|
|
@@ -18,7 +19,7 @@ import { hasValidId, selectBestInstance, getSystemTools, findServers as findServ
|
|
|
18
19
|
* ## Core Responsibilities
|
|
19
20
|
*
|
|
20
21
|
* - **System Tool Management**: Exposes a standardized set of system tools for server discovery and management
|
|
21
|
-
* - **Tool Discovery**: Enables
|
|
22
|
+
* - **Tool Discovery**: Enables listing tools across all connected MCP servers
|
|
22
23
|
* - **Tool Execution**: Provides safe, monitored execution of tools with comprehensive event tracking
|
|
23
24
|
* - **Resource Management**: Dynamically generates and serves virtual resources representing server state
|
|
24
25
|
* - **Instance Selection**: Handles intelligent server instance selection for multi-instance scenarios
|
|
@@ -28,12 +29,9 @@ import { hasValidId, selectBestInstance, getSystemTools, findServers as findServ
|
|
|
28
29
|
*
|
|
29
30
|
* The service exposes the following system tools through the `getSystemTools()` method:
|
|
30
31
|
* - `list-servers`: Retrieve all connected server names
|
|
31
|
-
* - `
|
|
32
|
-
* - `list-all-tools-in-server`: List all tools from a specific server
|
|
33
|
-
* - `find-tools-in-server`: Search tools within a specific server
|
|
32
|
+
* - `list-tools-in-server`: List all tools from a specific server
|
|
34
33
|
* - `get-tool`: Retrieve complete schema for a specific tool
|
|
35
34
|
* - `call-tool`: Execute a tool on a specific server
|
|
36
|
-
* - `find-tools`: Search tools across all connected servers
|
|
37
35
|
*
|
|
38
36
|
* ## Architecture Integration
|
|
39
37
|
*
|
|
@@ -55,9 +53,6 @@ import { hasValidId, selectBestInstance, getSystemTools, findServers as findServ
|
|
|
55
53
|
*
|
|
56
54
|
* // Call a tool on a specific server
|
|
57
55
|
* const result = await hubTools.callTool('file-system-server', 'list-files', { directory: '/home' });
|
|
58
|
-
*
|
|
59
|
-
* // Search for tools across all servers
|
|
60
|
-
* const matchingTools = await hubTools.findTools('search');
|
|
61
56
|
* ```
|
|
62
57
|
*/
|
|
63
58
|
export class HubToolsService {
|
|
@@ -97,30 +92,34 @@ export class HubToolsService {
|
|
|
97
92
|
return getSystemTools();
|
|
98
93
|
}
|
|
99
94
|
/**
|
|
100
|
-
* Lists all connected MCP servers
|
|
95
|
+
* Lists all connected MCP servers with their descriptions.
|
|
101
96
|
*
|
|
102
97
|
* This method retrieves all configured servers from the hub manager, filters out
|
|
103
|
-
* invalid entries using the hasValidId type guard, and returns
|
|
104
|
-
*
|
|
98
|
+
* invalid entries using the hasValidId type guard, and returns a Record mapping
|
|
99
|
+
* server names to their descriptions. If a server doesn't have a description,
|
|
100
|
+
* a default description is provided.
|
|
105
101
|
*
|
|
106
|
-
* @returns {Promise<string
|
|
102
|
+
* @returns {Promise<Record<string, string>>} Record mapping server names to descriptions
|
|
107
103
|
*/
|
|
108
104
|
async listServers() {
|
|
109
105
|
const servers = hubManager.getAllServers();
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
106
|
+
const result = {};
|
|
107
|
+
for (const server of servers.filter(hasValidId)) {
|
|
108
|
+
// Check if server is actually connected
|
|
109
|
+
const status = mcpConnectionManager.getStatusByName(server.name);
|
|
110
|
+
if (!status?.connected) {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
// Use non-strict mode for management operations to avoid tag-match-unique errors
|
|
114
|
+
const serverInfo = selectBestInstance(server.name, undefined, false);
|
|
115
|
+
if (!serverInfo) {
|
|
116
|
+
// Skip servers that can't be selected (e.g., tag-match-unique without tags)
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const description = getServerDescription(server.config, server.name);
|
|
120
|
+
result[server.name] = description;
|
|
121
|
+
}
|
|
122
|
+
return result;
|
|
124
123
|
}
|
|
125
124
|
/**
|
|
126
125
|
* Lists all tools available from a specific MCP server.
|
|
@@ -130,57 +129,44 @@ export class HubToolsService {
|
|
|
130
129
|
* It uses the selectBestInstance function to resolve server names to instances
|
|
131
130
|
* and leverages the MCP connection manager for tool retrieval.
|
|
132
131
|
*
|
|
133
|
-
* @param {
|
|
134
|
-
* @returns {Promise<{ serverName: string; tools:
|
|
132
|
+
* @param {ListToolsInServerParams} args - Server name and request options
|
|
133
|
+
* @returns {Promise<{ serverName: string; tools: ToolSummary[] }>} Object containing server name and tools array
|
|
135
134
|
* @throws {Error} If the specified server is not found or not connected
|
|
136
135
|
*/
|
|
137
|
-
async
|
|
136
|
+
async listToolsInServer(args) {
|
|
138
137
|
// Handle MCP Hub Lite server (return system tools list)
|
|
139
138
|
if (typeof args.serverName === 'string' && args.serverName === MCP_HUB_LITE_SERVER) {
|
|
140
139
|
// Generate tool list using the same logic as tools/list
|
|
141
140
|
const toolMap = new Map();
|
|
142
141
|
const gatewayTools = gateway.generateGatewayToolsList(toolMap);
|
|
143
|
-
// Convert to
|
|
144
|
-
const
|
|
142
|
+
// Convert to ToolSummary format (without inputSchema)
|
|
143
|
+
const toolSummaries = gatewayTools.map((tool) => ({
|
|
145
144
|
name: tool.name,
|
|
146
145
|
description: tool.description,
|
|
147
|
-
|
|
148
|
-
serverName: MCP_HUB_LITE_SERVER,
|
|
149
|
-
annotations: tool.annotations
|
|
146
|
+
serverName: MCP_HUB_LITE_SERVER
|
|
150
147
|
}));
|
|
151
148
|
return {
|
|
152
149
|
serverName: args.serverName,
|
|
153
|
-
tools
|
|
150
|
+
tools: toolSummaries
|
|
154
151
|
};
|
|
155
152
|
}
|
|
156
|
-
|
|
157
|
-
|
|
153
|
+
// Use server name level cache to get tools directly without triggering instance selection
|
|
154
|
+
// This avoids tag-match-unique errors for multi-instance servers when listing tools
|
|
155
|
+
const tools = mcpConnectionManager.getToolsByServerName(args.serverName);
|
|
156
|
+
if (tools.length === 0) {
|
|
158
157
|
throw new Error(`Server not found: ${args.serverName}`);
|
|
159
158
|
}
|
|
160
|
-
//
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
|
|
159
|
+
// Convert to ToolSummary format (without inputSchema)
|
|
160
|
+
const toolSummaries = tools.map((tool) => ({
|
|
161
|
+
name: tool.name,
|
|
162
|
+
description: tool.description,
|
|
163
|
+
serverName: args.serverName
|
|
164
|
+
}));
|
|
164
165
|
return {
|
|
165
166
|
serverName: args.serverName,
|
|
166
|
-
tools
|
|
167
|
+
tools: toolSummaries
|
|
167
168
|
};
|
|
168
169
|
}
|
|
169
|
-
/**
|
|
170
|
-
* Finds tools matching a pattern within a specific MCP server.
|
|
171
|
-
*
|
|
172
|
-
* This method searches through all tools available from the specified server using
|
|
173
|
-
* the provided regex pattern, supporting flexible search options including case
|
|
174
|
-
* sensitivity and search scope (name, description, or both). It returns matching
|
|
175
|
-
* tools grouped by server name.
|
|
176
|
-
*
|
|
177
|
-
* @param {FindToolsInServerParams} args - Search parameters
|
|
178
|
-
* @returns {Promise<{ serverName: string; tools: Tool[] }>} Object containing server name and matching tools
|
|
179
|
-
* @throws {Error} If the specified server is not found or not connected
|
|
180
|
-
*/
|
|
181
|
-
async findToolsInServer(args) {
|
|
182
|
-
return findToolsInServerUtil(args.serverName, args.pattern, args.searchIn, args.caseSensitive, args.requestOptions);
|
|
183
|
-
}
|
|
184
170
|
/**
|
|
185
171
|
* Retrieves the complete schema for a specific tool from a specific server.
|
|
186
172
|
*
|
|
@@ -193,12 +179,57 @@ export class HubToolsService {
|
|
|
193
179
|
* @throws {Error} If the specified server is not found or not connected
|
|
194
180
|
*/
|
|
195
181
|
async getTool(args) {
|
|
196
|
-
|
|
197
|
-
if (
|
|
182
|
+
// Handle MCP Hub Lite server (return system tool)
|
|
183
|
+
if (typeof args.serverName === 'string' && args.serverName === MCP_HUB_LITE_SERVER) {
|
|
184
|
+
const systemTools = getSystemTools();
|
|
185
|
+
const found = systemTools.find((tool) => tool.name === args.toolName);
|
|
186
|
+
if (found) {
|
|
187
|
+
return {
|
|
188
|
+
...found,
|
|
189
|
+
serverName: MCP_HUB_LITE_SERVER
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
return undefined;
|
|
193
|
+
}
|
|
194
|
+
// Use server name level cache to get tools directly without triggering instance selection
|
|
195
|
+
// This avoids tag-match-unique errors for multi-instance servers when getting tool details
|
|
196
|
+
const tools = mcpConnectionManager.getToolsByServerName(args.serverName);
|
|
197
|
+
if (tools.length === 0) {
|
|
198
198
|
throw new Error(`Server not found: ${args.serverName}`);
|
|
199
199
|
}
|
|
200
|
-
|
|
201
|
-
|
|
200
|
+
return tools.find((t) => t.name === args.toolName);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Updates the description of a specific MCP server.
|
|
204
|
+
*
|
|
205
|
+
* This method validates the server exists, updates its description in the configuration,
|
|
206
|
+
* and persists the change to disk. It leverages the existing hubManager.updateServer()
|
|
207
|
+
* method which handles configuration persistence and event publishing.
|
|
208
|
+
*
|
|
209
|
+
* @param {UpdateServerDescriptionParams} args - Server name and new description
|
|
210
|
+
* @returns {Promise<{ success: boolean; serverName: string; description: string }>} Confirmation of successful update
|
|
211
|
+
* @throws {Error} If the server is not found or update fails
|
|
212
|
+
*/
|
|
213
|
+
async updateServerDescription(args) {
|
|
214
|
+
// Handle both direct call (UpdateServerDescriptionParams) and call_tool wrapper (CallToolParams with nested toolArgs)
|
|
215
|
+
const { serverName, description } = 'toolArgs' in args && args.toolArgs ? args.toolArgs : args;
|
|
216
|
+
// Validate server exists
|
|
217
|
+
const existing = hubManager.getServerByName(serverName);
|
|
218
|
+
if (!existing) {
|
|
219
|
+
throw new Error(`Server not found: ${serverName}`);
|
|
220
|
+
}
|
|
221
|
+
// Update server description using existing hubManager
|
|
222
|
+
await hubManager.updateServer(serverName, { description });
|
|
223
|
+
// Note: hubManager.updateServer() already:
|
|
224
|
+
// 1. Updates the in-memory configuration
|
|
225
|
+
// 2. Persists to disk via configManager
|
|
226
|
+
// 3. Publishes SERVER_UPDATED event
|
|
227
|
+
// 4. Triggers cache invalidation in HubToolsService
|
|
228
|
+
return {
|
|
229
|
+
success: true,
|
|
230
|
+
serverName,
|
|
231
|
+
description
|
|
232
|
+
};
|
|
202
233
|
}
|
|
203
234
|
/**
|
|
204
235
|
* Calls a specific system tool directly with type-safe conditional return types.
|
|
@@ -220,16 +251,8 @@ export class HubToolsService {
|
|
|
220
251
|
case LIST_SERVERS_TOOL:
|
|
221
252
|
result = await this.listServers();
|
|
222
253
|
break;
|
|
223
|
-
case
|
|
224
|
-
result = await this.
|
|
225
|
-
break;
|
|
226
|
-
}
|
|
227
|
-
case LIST_ALL_TOOLS_IN_SERVER_TOOL: {
|
|
228
|
-
result = await this.listAllToolsInServer(toolArgs);
|
|
229
|
-
break;
|
|
230
|
-
}
|
|
231
|
-
case FIND_TOOLS_IN_SERVER_TOOL: {
|
|
232
|
-
result = await this.findToolsInServer(toolArgs);
|
|
254
|
+
case LIST_TOOLS_IN_SERVER_TOOL: {
|
|
255
|
+
result = await this.listToolsInServer(toolArgs);
|
|
233
256
|
break;
|
|
234
257
|
}
|
|
235
258
|
case GET_TOOL_TOOL: {
|
|
@@ -248,8 +271,8 @@ export class HubToolsService {
|
|
|
248
271
|
});
|
|
249
272
|
break;
|
|
250
273
|
}
|
|
251
|
-
case
|
|
252
|
-
result = await this.
|
|
274
|
+
case UPDATE_SERVER_DESCRIPTION_TOOL: {
|
|
275
|
+
result = await this.updateServerDescription(toolArgs);
|
|
253
276
|
break;
|
|
254
277
|
}
|
|
255
278
|
default:
|
|
@@ -278,7 +301,9 @@ export class HubToolsService {
|
|
|
278
301
|
*/
|
|
279
302
|
async callTool(args) {
|
|
280
303
|
let { serverName, toolName } = args;
|
|
281
|
-
|
|
304
|
+
// Support both toolArgs and arguments for backward compatibility
|
|
305
|
+
const toolArgs = (args.toolArgs || args.arguments || {});
|
|
306
|
+
const { requestOptions } = args;
|
|
282
307
|
// Parse prefixed tool names (like mcp__mcp-hub-lite__xxx) if applicable
|
|
283
308
|
const parsedTool = ToolArgsParser.parsePrefixedToolName(toolName);
|
|
284
309
|
if (parsedTool) {
|
|
@@ -291,9 +316,11 @@ export class HubToolsService {
|
|
|
291
316
|
serverName = MCP_HUB_LITE_SERVER;
|
|
292
317
|
}
|
|
293
318
|
if (typeof serverName === 'string' && serverName === MCP_HUB_LITE_SERVER) {
|
|
294
|
-
//
|
|
295
|
-
if (
|
|
296
|
-
|
|
319
|
+
// System tools cannot be called via call_tool - they must be called directly
|
|
320
|
+
if (Array.isArray(SYSTEM_TOOL_NAMES) &&
|
|
321
|
+
SYSTEM_TOOL_NAMES.includes(toolName)) {
|
|
322
|
+
throw new McpError(-32801, `System tools cannot be called via 'call_tool'. Use 'tools/call' with the system tool name directly. ` +
|
|
323
|
+
`Example: use 'list_servers' directly instead of call_tool(serverName: "mcp-hub-lite", toolName: "list_servers").`);
|
|
297
324
|
}
|
|
298
325
|
// Not a system tool - find it in all connected servers
|
|
299
326
|
logger.info(`Looking for tool '${toolName}' in all connected servers (gateway mode)`, LOG_MODULES.HUB_TOOLS);
|
|
@@ -304,9 +331,10 @@ export class HubToolsService {
|
|
|
304
331
|
if (!hasValidId(server)) {
|
|
305
332
|
continue;
|
|
306
333
|
}
|
|
307
|
-
const serverInfo = selectBestInstance(server.name, requestOptions);
|
|
334
|
+
const serverInfo = selectBestInstance(server.name, requestOptions, true);
|
|
308
335
|
if (serverInfo && serverInfo.instance.id) {
|
|
309
|
-
const
|
|
336
|
+
const instanceIndex = serverInfo.instance.index;
|
|
337
|
+
const tools = mcpConnectionManager.getTools(server.name, instanceIndex);
|
|
310
338
|
if (tools.some((tool) => tool.name === toolName)) {
|
|
311
339
|
matchingServers.push(server.name);
|
|
312
340
|
}
|
|
@@ -323,29 +351,84 @@ export class HubToolsService {
|
|
|
323
351
|
serverName = matchingServers[0];
|
|
324
352
|
}
|
|
325
353
|
logger.debug(`Tool call received: serverName=${serverName}, toolName=${toolName}, args=${stringifyForLogging(toolArgs)}`, LOG_MODULES.HUB_TOOLS);
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
354
|
+
// Validate tool exists before doing strict instance selection
|
|
355
|
+
// Use strictMode=false to get serverInfo without triggering tag-match-unique errors
|
|
356
|
+
const validationServerInfo = selectBestInstance(serverName, requestOptions, false);
|
|
357
|
+
if (validationServerInfo && validationServerInfo.instance.id) {
|
|
358
|
+
const instanceIndex = validationServerInfo.instance.index;
|
|
359
|
+
const tools = mcpConnectionManager.getTools(serverName, instanceIndex);
|
|
360
|
+
if (!tools.some((tool) => tool.name === toolName)) {
|
|
361
|
+
throw new Error(`Tool '${toolName}' not found in server '${serverName}'. ` +
|
|
362
|
+
`Use list_tools_in_server(serverName: "${serverName}") to see available tools.`);
|
|
363
|
+
}
|
|
330
364
|
}
|
|
331
|
-
const
|
|
365
|
+
const serverInfo = selectBestInstance(serverName, requestOptions, true);
|
|
332
366
|
const requestId = `tool-call-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
367
|
+
if (!serverInfo) {
|
|
368
|
+
// Server not found in hubManager, try direct call by name through mcpConnectionManager
|
|
369
|
+
logger.debug(`Server not found in hubManager, trying direct call by name: ${serverName}`, LOG_MODULES.HUB_TOOLS);
|
|
370
|
+
// Use selectBestInstance with non-strict mode to find an available instance
|
|
371
|
+
const fallbackServerInfo = selectBestInstance(serverName, undefined, false);
|
|
372
|
+
if (!fallbackServerInfo) {
|
|
373
|
+
logger.error(`Server not found: ${serverName}`, LOG_MODULES.HUB_TOOLS);
|
|
374
|
+
throw new Error(`Server not found: ${serverName}`);
|
|
375
|
+
}
|
|
376
|
+
const instanceIndex = fallbackServerInfo.instance.index;
|
|
377
|
+
// Publish tool call started event with the resolved serverIndex
|
|
378
|
+
eventBus.publish(EventTypes.TOOL_CALL_STARTED, {
|
|
379
|
+
requestId,
|
|
380
|
+
serverName,
|
|
381
|
+
serverIndex: instanceIndex,
|
|
382
|
+
toolName,
|
|
383
|
+
timestamp: Date.now(),
|
|
384
|
+
args: toolArgs
|
|
385
|
+
});
|
|
386
|
+
try {
|
|
387
|
+
const result = await mcpConnectionManager.callTool(serverName, instanceIndex, toolName, toolArgs);
|
|
388
|
+
// Publish tool call completed event
|
|
389
|
+
eventBus.publish(EventTypes.TOOL_CALL_COMPLETED, {
|
|
390
|
+
requestId,
|
|
391
|
+
serverName,
|
|
392
|
+
serverIndex: instanceIndex,
|
|
393
|
+
toolName,
|
|
394
|
+
timestamp: Date.now(),
|
|
395
|
+
result
|
|
396
|
+
});
|
|
397
|
+
logger.debug(`Tool call SUCCESS: serverName=${serverName}, toolName=${toolName}`, LOG_MODULES.HUB_TOOLS);
|
|
398
|
+
return result;
|
|
399
|
+
}
|
|
400
|
+
catch (error) {
|
|
401
|
+
// Publish tool call error event
|
|
402
|
+
eventBus.publish(EventTypes.TOOL_CALL_ERROR, {
|
|
403
|
+
requestId,
|
|
404
|
+
serverName,
|
|
405
|
+
serverIndex: instanceIndex,
|
|
406
|
+
toolName,
|
|
407
|
+
timestamp: Date.now(),
|
|
408
|
+
error: error instanceof Error ? error.message : String(error),
|
|
409
|
+
stack: error instanceof Error ? error.stack : undefined
|
|
410
|
+
});
|
|
411
|
+
logger.error(`Tool call FAILED: serverName=${serverName}, toolName=${toolName}, error=${error instanceof Error ? error.message : String(error)}`, error, LOG_MODULES.HUB_TOOLS);
|
|
412
|
+
throw error;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
const instanceIndex = serverInfo.instance.index;
|
|
333
416
|
// Publish tool call started event
|
|
334
417
|
eventBus.publish(EventTypes.TOOL_CALL_STARTED, {
|
|
335
418
|
requestId,
|
|
336
|
-
serverId,
|
|
337
419
|
serverName,
|
|
420
|
+
serverIndex: instanceIndex,
|
|
338
421
|
toolName,
|
|
339
422
|
timestamp: Date.now(),
|
|
340
423
|
args: toolArgs
|
|
341
424
|
});
|
|
342
425
|
try {
|
|
343
|
-
const result = await mcpConnectionManager.callTool(
|
|
426
|
+
const result = await mcpConnectionManager.callTool(serverName, instanceIndex, toolName, toolArgs);
|
|
344
427
|
// Publish tool call completed event
|
|
345
428
|
eventBus.publish(EventTypes.TOOL_CALL_COMPLETED, {
|
|
346
429
|
requestId,
|
|
347
|
-
serverId,
|
|
348
430
|
serverName,
|
|
431
|
+
serverIndex: instanceIndex,
|
|
349
432
|
toolName,
|
|
350
433
|
timestamp: Date.now(),
|
|
351
434
|
result
|
|
@@ -357,8 +440,8 @@ export class HubToolsService {
|
|
|
357
440
|
// Publish tool call error event
|
|
358
441
|
eventBus.publish(EventTypes.TOOL_CALL_ERROR, {
|
|
359
442
|
requestId,
|
|
360
|
-
serverId,
|
|
361
443
|
serverName,
|
|
444
|
+
serverIndex: instanceIndex,
|
|
362
445
|
toolName,
|
|
363
446
|
timestamp: Date.now(),
|
|
364
447
|
error: error instanceof Error ? error.message : String(error),
|
|
@@ -375,14 +458,14 @@ export class HubToolsService {
|
|
|
375
458
|
* the system tools provided by the MCP Hub Lite server itself. It returns a structured
|
|
376
459
|
* object mapping server names to their respective tool arrays.
|
|
377
460
|
*
|
|
378
|
-
* @returns {Promise<Record<string, { tools:
|
|
461
|
+
* @returns {Promise<Record<string, { tools: ToolSummary[] }>>} Object mapping server names to tool arrays
|
|
379
462
|
*/
|
|
380
463
|
async listAllTools() {
|
|
381
464
|
const servers = hubManager.getAllServers();
|
|
382
465
|
const allTools = {};
|
|
383
466
|
// Add system tools under mcp-hub-lite server
|
|
384
467
|
const systemTools = this.getSystemTools().map((tool) => ({
|
|
385
|
-
|
|
468
|
+
name: tool.name,
|
|
386
469
|
description: `[System] ${tool.description}`,
|
|
387
470
|
serverName: MCP_HUB_LITE_SERVER
|
|
388
471
|
}));
|
|
@@ -393,32 +476,24 @@ export class HubToolsService {
|
|
|
393
476
|
if (!hasValidId(server)) {
|
|
394
477
|
continue;
|
|
395
478
|
}
|
|
396
|
-
const instances = hubManager.
|
|
479
|
+
const instances = hubManager.getServerInstancesByName(server.name);
|
|
397
480
|
for (const instance of instances) {
|
|
398
481
|
if (instance.id) {
|
|
399
|
-
const
|
|
482
|
+
const instanceIndex = instance.index ?? 0;
|
|
483
|
+
const tools = mcpConnectionManager.getTools(server.name, instanceIndex);
|
|
484
|
+
const toolSummaries = tools.map((tool) => ({
|
|
485
|
+
name: tool.name,
|
|
486
|
+
description: tool.description,
|
|
487
|
+
serverName: server.name
|
|
488
|
+
}));
|
|
400
489
|
allTools[server.name] = {
|
|
401
|
-
tools
|
|
490
|
+
tools: toolSummaries
|
|
402
491
|
};
|
|
403
492
|
}
|
|
404
493
|
}
|
|
405
494
|
}
|
|
406
495
|
return allTools;
|
|
407
496
|
}
|
|
408
|
-
/**
|
|
409
|
-
* Finds tools matching a pattern across all connected MCP servers.
|
|
410
|
-
*
|
|
411
|
-
* This method searches through all available tools from all connected servers using the
|
|
412
|
-
* provided regex pattern, supporting flexible search options including case sensitivity
|
|
413
|
-
* and search scope (name, description, or both). It returns matching tools grouped by
|
|
414
|
-
* their originating server names.
|
|
415
|
-
*
|
|
416
|
-
* @param {FindToolsParams} args - Search parameters
|
|
417
|
-
* @returns {Promise<Record<string, { tools: Tool[] }>>} Object mapping server names to matching tools
|
|
418
|
-
*/
|
|
419
|
-
async findTools(args) {
|
|
420
|
-
return findToolsUtil(args.pattern, args.searchIn, args.caseSensitive, () => this.listAllTools());
|
|
421
|
-
}
|
|
422
497
|
/**
|
|
423
498
|
* Lists all dynamically generated Hub resources based on connected MCP servers.
|
|
424
499
|
*
|
|
@@ -447,7 +522,7 @@ export class HubToolsService {
|
|
|
447
522
|
* - Resources list: hub://servers/{serverName}/resources
|
|
448
523
|
*
|
|
449
524
|
* @param {string} uri - Resource URI to read (e.g., hub://servers/server-name)
|
|
450
|
-
* @returns {Promise<ServerMetadata | Tool[] | Resource[]>} Resource content based on URI type
|
|
525
|
+
* @returns {Promise<ServerMetadata | Tool[] | Resource[] | string>} Resource content based on URI type
|
|
451
526
|
* @throws {Error} If URI format is invalid, server not found, or resource type unknown
|
|
452
527
|
*/
|
|
453
528
|
async readResource(uri) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-tool-handler.d.ts","sourceRoot":"","sources":["../../../../src/services/system-tool-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"system-tool-handler.d.ts","sourceRoot":"","sources":["../../../../src/services/system-tool-handler.ts"],"names":[],"mappings":"AAoBA;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;WACU,oBAAoB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,OAAO,CAAC;CA8DpB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { hubToolsService } from './hub-tools.service.js';
|
|
2
2
|
import { McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
3
3
|
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
4
|
-
import { LIST_SERVERS_TOOL,
|
|
4
|
+
import { LIST_SERVERS_TOOL, LIST_TOOLS_IN_SERVER_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, MCP_HUB_LITE_SERVER } from '../models/system-tools.constants.js';
|
|
5
5
|
import { stringifyForLogging } from '../utils/json-utils.js';
|
|
6
6
|
/**
|
|
7
7
|
* Unified system tool call handler
|
|
@@ -18,19 +18,9 @@ export class SystemToolHandler {
|
|
|
18
18
|
case LIST_SERVERS_TOOL:
|
|
19
19
|
result = await hubToolsService.listServers();
|
|
20
20
|
break;
|
|
21
|
-
case
|
|
22
|
-
const
|
|
23
|
-
result = await hubToolsService.
|
|
24
|
-
break;
|
|
25
|
-
}
|
|
26
|
-
case LIST_ALL_TOOLS_IN_SERVER_TOOL: {
|
|
27
|
-
const listAllToolsArgs = toolArgs;
|
|
28
|
-
result = await hubToolsService.listAllToolsInServer(listAllToolsArgs);
|
|
29
|
-
break;
|
|
30
|
-
}
|
|
31
|
-
case FIND_TOOLS_IN_SERVER_TOOL: {
|
|
32
|
-
const findToolsInServerArgs = toolArgs;
|
|
33
|
-
result = await hubToolsService.findToolsInServer(findToolsInServerArgs);
|
|
21
|
+
case LIST_TOOLS_IN_SERVER_TOOL: {
|
|
22
|
+
const listToolsArgs = toolArgs;
|
|
23
|
+
result = await hubToolsService.listToolsInServer(listToolsArgs);
|
|
34
24
|
break;
|
|
35
25
|
}
|
|
36
26
|
case GET_TOOL_TOOL: {
|
|
@@ -50,9 +40,9 @@ export class SystemToolHandler {
|
|
|
50
40
|
});
|
|
51
41
|
break;
|
|
52
42
|
}
|
|
53
|
-
case
|
|
54
|
-
const
|
|
55
|
-
result = await hubToolsService.
|
|
43
|
+
case UPDATE_SERVER_DESCRIPTION_TOOL: {
|
|
44
|
+
const updateDescArgs = toolArgs;
|
|
45
|
+
result = await hubToolsService.updateServerDescription(updateDescArgs);
|
|
56
46
|
break;
|
|
57
47
|
}
|
|
58
48
|
default:
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composite key utilities for server instance identification
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for generating and parsing composite keys
|
|
5
|
+
* that uniquely identify a server instance across multiple instances
|
|
6
|
+
* of the same server name.
|
|
7
|
+
*
|
|
8
|
+
* Format: `${serverName}-${serverIndex}`
|
|
9
|
+
* Example: 'my-server-0', 'my-server-1', 'test-server-0'
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Generates a composite key from serverName and serverIndex
|
|
13
|
+
* @param serverName - The server name
|
|
14
|
+
* @param serverIndex - The instance index
|
|
15
|
+
* @returns Composite key string
|
|
16
|
+
* @example getCompositeKey('my-server', 0) => 'my-server-0'
|
|
17
|
+
*/
|
|
18
|
+
export declare function getCompositeKey(serverName: string, serverIndex: number): string;
|
|
19
|
+
/**
|
|
20
|
+
* Parses a composite key back into serverName and serverIndex
|
|
21
|
+
* @param key - The composite key to parse
|
|
22
|
+
* @returns Object with serverName and serverIndex, or null if invalid
|
|
23
|
+
* @example parseCompositeKey('my-server-0') => { serverName: 'my-server', serverIndex: 0 }
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseCompositeKey(key: string): {
|
|
26
|
+
serverName: string;
|
|
27
|
+
serverIndex: number;
|
|
28
|
+
} | null;
|
|
29
|
+
//# sourceMappingURL=composite-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composite-key.d.ts","sourceRoot":"","sources":["../../../../src/utils/composite-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYjG"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composite key utilities for server instance identification
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for generating and parsing composite keys
|
|
5
|
+
* that uniquely identify a server instance across multiple instances
|
|
6
|
+
* of the same server name.
|
|
7
|
+
*
|
|
8
|
+
* Format: `${serverName}-${serverIndex}`
|
|
9
|
+
* Example: 'my-server-0', 'my-server-1', 'test-server-0'
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Generates a composite key from serverName and serverIndex
|
|
13
|
+
* @param serverName - The server name
|
|
14
|
+
* @param serverIndex - The instance index
|
|
15
|
+
* @returns Composite key string
|
|
16
|
+
* @example getCompositeKey('my-server', 0) => 'my-server-0'
|
|
17
|
+
*/
|
|
18
|
+
export function getCompositeKey(serverName, serverIndex) {
|
|
19
|
+
return `${serverName}-${serverIndex}`;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parses a composite key back into serverName and serverIndex
|
|
23
|
+
* @param key - The composite key to parse
|
|
24
|
+
* @returns Object with serverName and serverIndex, or null if invalid
|
|
25
|
+
* @example parseCompositeKey('my-server-0') => { serverName: 'my-server', serverIndex: 0 }
|
|
26
|
+
*/
|
|
27
|
+
export function parseCompositeKey(key) {
|
|
28
|
+
const lastDashIndex = key.lastIndexOf('-');
|
|
29
|
+
if (lastDashIndex === -1) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const serverName = key.slice(0, lastDashIndex);
|
|
33
|
+
const serverIndexPart = key.slice(lastDashIndex + 1);
|
|
34
|
+
const serverIndex = parseInt(serverIndexPart, 10);
|
|
35
|
+
if (isNaN(serverIndex)) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
return { serverName, serverIndex };
|
|
39
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../../src/utils/error-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../../src/utils/error-handler.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,qBAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;IAgBrE;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;IA6BzF;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK;CAWlE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import { logger
|
|
2
|
+
import { logger } from './logger.js';
|
|
3
|
+
import { LOG_MODULES } from './logger/log-modules.js';
|
|
3
4
|
/**
|
|
4
5
|
* Unified error handler
|
|
5
6
|
*/
|
|
@@ -45,7 +46,7 @@ export class ErrorHandler {
|
|
|
45
46
|
* Handles general errors
|
|
46
47
|
*/
|
|
47
48
|
static handleGeneralError(error, message) {
|
|
48
|
-
logger.error(message, error);
|
|
49
|
+
logger.error(message, error, LOG_MODULES.ERROR_HANDLER);
|
|
49
50
|
if (error instanceof McpError) {
|
|
50
51
|
throw error;
|
|
51
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClD,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
|