@loop_ouroboros/mcp-hub-lite 1.0.1 → 1.1.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 +47 -0
- package/dist/client/assets/{HomeView-Cr1jX73N.js → HomeView-Bu2joUvW.js} +1 -1
- package/dist/client/assets/ResourceDetailView-BvrhDCD1.js +1 -0
- package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
- package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
- package/dist/client/assets/ResourcesView-LjqioF_s.js +1 -0
- package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
- package/dist/client/assets/ServerDashboard-FhHJFvUi.js +1 -0
- package/dist/client/assets/ServerDetail-BKV-M4qT.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-BXgtDyt3.js +36 -0
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-D-ooYNdN.js +1 -0
- package/dist/client/assets/SettingsView-CMFG91Z4.js +1 -0
- package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
- package/dist/client/assets/ToolCallDialog-Bf4Xe4gH.js +1 -0
- package/dist/client/assets/ToolsView-DFpha1z0.js +1 -0
- package/dist/client/assets/_baseClone-Bp9Rjwd7.js +1 -0
- package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
- package/dist/client/assets/el-form-item-DdSUWYsl.js +12 -0
- package/dist/client/assets/el-input-99gMrutP.js +1 -0
- package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
- package/dist/client/assets/{el-loading-Csv24uBk.js → el-loading-CIQ5pD5u.js} +1 -1
- package/dist/client/assets/el-overlay-BVM6msGX.js +1 -0
- package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
- package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
- package/dist/client/assets/el-radio-group-DhXWy7ry.js +1 -0
- package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
- package/dist/client/assets/el-skeleton-item-DJz-Us12.js +1 -0
- package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
- package/dist/client/assets/el-switch-Bu8AQ5uM.js +1 -0
- package/dist/client/assets/el-tab-pane-BnGMaV56.js +1 -0
- package/dist/client/assets/el-table-column-BMWOaLS_.js +1 -0
- package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
- package/dist/client/assets/index-C2V-ZGji.js +1 -0
- package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
- package/dist/client/assets/index-vhkqgpmN.js +2 -0
- package/dist/client/assets/omit-CqPQN3XP.js +1 -0
- package/dist/client/assets/{raf-DDfJOMYh.js → raf-C2wXzaVU.js} +1 -1
- package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-BLHLXXJK.js} +1 -1
- 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 +363 -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 +2 -56
- package/dist/server/shared/models/session.model.d.ts.map +1 -1
- package/dist/server/shared/models/session.model.js +2 -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/client.types.d.ts +4 -32
- package/dist/server/shared/types/client.types.d.ts.map +1 -1
- package/dist/server/shared/types/client.types.js +3 -2
- package/dist/server/shared/types/index.d.ts +3 -3
- package/dist/server/shared/types/index.d.ts.map +1 -1
- package/dist/server/shared/types/index.js +3 -3
- package/dist/server/shared/types/session-context.types.d.ts +35 -0
- package/dist/server/shared/types/session-context.types.d.ts.map +1 -0
- package/dist/server/shared/types/session-context.types.js +5 -0
- 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.d.ts.map +1 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.js +26 -1
- 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 +34 -61
- package/dist/server/src/api/mcp/session-context-extractor.d.ts +5 -5
- package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -1
- package/dist/server/src/api/mcp/session-context-extractor.js +15 -39
- package/dist/server/src/api/web/clients.js +2 -2
- 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/web/sessions.js +1 -1
- 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 -4
- package/dist/server/src/cli/commands/list.js +2 -2
- 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 -102
- package/dist/server/src/config/config.schema.d.ts.map +1 -1
- package/dist/server/src/config/config.schema.js +15 -98
- 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/index.js +1 -1
- 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/client-tracker.service.d.ts +3 -128
- package/dist/server/src/services/client-tracker.service.d.ts.map +1 -1
- package/dist/server/src/services/client-tracker.service.js +4 -200
- 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 +15 -19
- package/dist/server/src/services/gateway/global-transport.d.ts +10 -0
- package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
- package/dist/server/src/services/gateway/global-transport.js +42 -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 +16 -55
- 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/request-handlers/tools-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/tools-handler.js +4 -3
- 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 +25 -5
- 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 -64
- 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/search/search-cache.d.ts +0 -19
- package/dist/server/src/services/search/search-cache.d.ts.map +1 -1
- package/dist/server/src/services/search/search-cache.js +0 -24
- package/dist/server/src/services/search/search-core.service.d.ts +5 -5
- package/dist/server/src/services/search/search-core.service.js +11 -11
- package/dist/server/src/services/session/session-manager.d.ts +12 -256
- package/dist/server/src/services/session/session-manager.d.ts.map +1 -1
- package/dist/server/src/services/session/session-manager.js +23 -583
- package/dist/server/src/services/session-tracker.service.d.ts +124 -0
- package/dist/server/src/services/session-tracker.service.d.ts.map +1 -0
- package/dist/server/src/services/session-tracker.service.js +176 -0
- 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 +10 -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-colors.d.ts +1 -0
- package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-colors.js +2 -1
- package/dist/server/src/utils/logger/log-context.d.ts +1 -0
- package/dist/server/src/utils/logger/log-context.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.d.ts +28 -0
- package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.js +287 -5
- package/dist/server/src/utils/logger/log-modules.d.ts +15 -12
- package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-modules.js +8 -8
- package/dist/server/src/utils/logger/log-output.d.ts +2 -2
- package/dist/server/src/utils/logger/log-output.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-output.js +27 -6
- package/dist/server/src/utils/logger/logger.d.ts +13 -0
- package/dist/server/src/utils/logger/logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/logger.js +42 -7
- 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/request-context.d.ts +12 -30
- package/dist/server/src/utils/request-context.d.ts.map +1 -1
- package/dist/server/src/utils/request-context.js +10 -30
- 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/tool-args-parser.d.ts +0 -4
- package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -1
- package/dist/server/src/utils/tool-args-parser.js +0 -7
- 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 +33 -13
- 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/evaluation/evaluation.test.js +10 -9
- package/dist/server/tests/integration/api/gateway.test.js +24 -39
- 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/temp/test-stack.d.ts +6 -0
- package/dist/server/tests/temp/test-stack.d.ts.map +1 -0
- package/dist/server/tests/temp/test-stack.js +40 -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 -334
- 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 +107 -13
- 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/logger.test.js +101 -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/request-context.test.js +9 -28
- 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 +1 -1
- package/dist/client/assets/ResourceDetailView-BQ49hk0c.js +0 -1
- package/dist/client/assets/ResourcesView-BYZfWtia.js +0 -1
- package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
- package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +0 -1
- package/dist/client/assets/ServerDashboard-DHcxwKeh.js +0 -2
- package/dist/client/assets/ServerListView-DralUL71.js +0 -30
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
- package/dist/client/assets/SessionsView-BCGRTqem.js +0 -1
- package/dist/client/assets/SettingsView-BLfxa6PZ.js +0 -1
- package/dist/client/assets/ToolCallDialog-DQ0OQ1mD.js +0 -1
- package/dist/client/assets/ToolsView-BLB6x3tC.js +0 -1
- package/dist/client/assets/_baseClone-Bo5mBgsT.js +0 -1
- package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
- package/dist/client/assets/el-form-item-BmeJKVSi.js +0 -12
- package/dist/client/assets/el-input-CeZiq23m.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-iw_hrrlC.js +0 -1
- package/dist/client/assets/el-select-B73uRP_Y.js +0 -1
- package/dist/client/assets/el-tab-pane-BgOTBn4X.js +0 -1
- package/dist/client/assets/el-table-column-Ld4GSD3x.js +0 -1
- package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
- package/dist/client/assets/el-tag-DYmSo8Bx.js +0 -1
- package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
- package/dist/client/assets/index-COYaYRbH.js +0 -1
- package/dist/client/assets/index-Cfcvxyee.js +0 -2
- package/dist/client/assets/index-PhuI36Zi.js +0 -1
- package/dist/client/assets/omit-7EL6VJO4.js +0 -1
- package/dist/client/assets/vnode-upjuIlvm.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) {
|
|
@@ -109,24 +109,5 @@ export declare class SearchCacheService {
|
|
|
109
109
|
* ```
|
|
110
110
|
*/
|
|
111
111
|
invalidate(): void;
|
|
112
|
-
/**
|
|
113
|
-
* Updates a specific tool in the cache (deprecated method).
|
|
114
|
-
*
|
|
115
|
-
* This method is currently deprecated because the serverId field has been
|
|
116
|
-
* removed from the Tool interface. It logs a warning message and performs
|
|
117
|
-
* no actual operations. The method is kept for backward compatibility but
|
|
118
|
-
* should not be used in new code.
|
|
119
|
-
*
|
|
120
|
-
* @deprecated This method is deprecated and does nothing. ServerId field
|
|
121
|
-
* has been removed from the Tool interface, making this method
|
|
122
|
-
* obsolete.
|
|
123
|
-
*
|
|
124
|
-
* @example
|
|
125
|
-
* ```typescript
|
|
126
|
-
* // This will log a warning but do nothing
|
|
127
|
-
* cache.updateTool();
|
|
128
|
-
* ```
|
|
129
|
-
*/
|
|
130
|
-
updateTool(): void;
|
|
131
112
|
}
|
|
132
113
|
//# sourceMappingURL=search-cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-cache.d.ts","sourceRoot":"","sources":["../../../../../src/services/search/search-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"search-cache.d.ts","sourceRoot":"","sources":["../../../../../src/services/search/search-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAa;IAEvC;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,IAAI,OAAO;IAMlB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI;IASpB;;;;;;;;;;;;;;;OAeG;IACH,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAKxB;;;;;;;;;;;;;;;;;OAiBG;IACH,UAAU,IAAI,IAAI;CAInB"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { logger, LOG_MODULES } from '../../utils/logger.js';
|
|
2
1
|
/**
|
|
3
2
|
* Search cache service that provides time-based caching for search results.
|
|
4
3
|
*
|
|
@@ -125,27 +124,4 @@ export class SearchCacheService {
|
|
|
125
124
|
this.cache = null;
|
|
126
125
|
this.lastUpdate = 0;
|
|
127
126
|
}
|
|
128
|
-
/**
|
|
129
|
-
* Updates a specific tool in the cache (deprecated method).
|
|
130
|
-
*
|
|
131
|
-
* This method is currently deprecated because the serverId field has been
|
|
132
|
-
* removed from the Tool interface. It logs a warning message and performs
|
|
133
|
-
* no actual operations. The method is kept for backward compatibility but
|
|
134
|
-
* should not be used in new code.
|
|
135
|
-
*
|
|
136
|
-
* @deprecated This method is deprecated and does nothing. ServerId field
|
|
137
|
-
* has been removed from the Tool interface, making this method
|
|
138
|
-
* obsolete.
|
|
139
|
-
*
|
|
140
|
-
* @example
|
|
141
|
-
* ```typescript
|
|
142
|
-
* // This will log a warning but do nothing
|
|
143
|
-
* cache.updateTool();
|
|
144
|
-
* ```
|
|
145
|
-
*/
|
|
146
|
-
updateTool() {
|
|
147
|
-
// Since serverId field has been removed from Tool interface, this method needs refactoring
|
|
148
|
-
// Currently kept but not performing any operations, or modify according to actual requirements
|
|
149
|
-
logger.warn('updateTool method is deprecated because serverId field is removed from Tool', LOG_MODULES.SEARCH);
|
|
150
|
-
}
|
|
151
127
|
}
|
|
@@ -60,16 +60,16 @@ export declare class SearchCoreService {
|
|
|
60
60
|
*
|
|
61
61
|
* This method first checks if tools are available in the cache. If cached data exists,
|
|
62
62
|
* it returns the cached tools immediately. Otherwise, it fetches tools from all connected
|
|
63
|
-
* MCP servers, applies server-level filtering based on
|
|
63
|
+
* MCP servers, applies server-level filtering based on aggregatedTools configuration,
|
|
64
64
|
* caches the result, and returns the filtered tools.
|
|
65
65
|
*
|
|
66
66
|
* @returns A promise that resolves to an array of Tool objects from all connected servers.
|
|
67
67
|
*
|
|
68
68
|
* @remarks
|
|
69
|
-
* - Tools are filtered based on each server's
|
|
70
|
-
* - If
|
|
71
|
-
* - If
|
|
72
|
-
* - Tools are filtered using strict name matching against the
|
|
69
|
+
* - Tools are filtered based on each server's aggregatedTools configuration
|
|
70
|
+
* - If aggregatedTools is null or undefined, all tools from that server are included
|
|
71
|
+
* - If aggregatedTools is an empty array, no tools from that server are included
|
|
72
|
+
* - Tools are filtered using strict name matching against the aggregatedTools list
|
|
73
73
|
*/
|
|
74
74
|
private getToolsWithCache;
|
|
75
75
|
/**
|
|
@@ -101,16 +101,16 @@ export class SearchCoreService {
|
|
|
101
101
|
*
|
|
102
102
|
* This method first checks if tools are available in the cache. If cached data exists,
|
|
103
103
|
* it returns the cached tools immediately. Otherwise, it fetches tools from all connected
|
|
104
|
-
* MCP servers, applies server-level filtering based on
|
|
104
|
+
* MCP servers, applies server-level filtering based on aggregatedTools configuration,
|
|
105
105
|
* caches the result, and returns the filtered tools.
|
|
106
106
|
*
|
|
107
107
|
* @returns A promise that resolves to an array of Tool objects from all connected servers.
|
|
108
108
|
*
|
|
109
109
|
* @remarks
|
|
110
|
-
* - Tools are filtered based on each server's
|
|
111
|
-
* - If
|
|
112
|
-
* - If
|
|
113
|
-
* - Tools are filtered using strict name matching against the
|
|
110
|
+
* - Tools are filtered based on each server's aggregatedTools configuration
|
|
111
|
+
* - If aggregatedTools is null or undefined, all tools from that server are included
|
|
112
|
+
* - If aggregatedTools is an empty array, no tools from that server are included
|
|
113
|
+
* - Tools are filtered using strict name matching against the aggregatedTools list
|
|
114
114
|
*/
|
|
115
115
|
async getToolsWithCache() {
|
|
116
116
|
const cached = this.cacheService.get();
|
|
@@ -119,17 +119,17 @@ export class SearchCoreService {
|
|
|
119
119
|
}
|
|
120
120
|
// Use new server name-level cache to get all tools
|
|
121
121
|
const tools = mcpConnectionManager.getAllToolsByServerName();
|
|
122
|
-
// Get configuration based on server name and apply
|
|
122
|
+
// Get configuration based on server name and apply aggregatedTools filtering
|
|
123
123
|
const filteredTools = tools.filter((tool) => {
|
|
124
124
|
const serverConfig = hubManager.getServerByName(tool.serverName);
|
|
125
125
|
if (!serverConfig)
|
|
126
126
|
return true;
|
|
127
|
-
const
|
|
128
|
-
if (
|
|
129
|
-
return
|
|
130
|
-
if (
|
|
127
|
+
const aggregated = serverConfig.template.aggregatedTools;
|
|
128
|
+
if (aggregated == null)
|
|
129
|
+
return false; // No aggregatedTools configured, don't show any tools
|
|
130
|
+
if (aggregated.length === 0)
|
|
131
131
|
return false; // Empty array, don't show any tools
|
|
132
|
-
return
|
|
132
|
+
return aggregated.includes(tool.name); // Strict filtering
|
|
133
133
|
});
|
|
134
134
|
this.cacheService.set(filteredTools);
|
|
135
135
|
return filteredTools;
|