@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-context-extractor.d.ts","sourceRoot":"","sources":["../../../../../src/api/mcp/session-context-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"session-context-extractor.d.ts","sourceRoot":"","sources":["../../../../../src/api/mcp/session-context-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAI7E,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,UAAU,CAAC,EAAE;YACX,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,CAAC;IAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,GAAG;IAC5F,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;CAChC,CAyFA"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { logger, LOG_MODULES } from '../../utils/logger.js';
|
|
6
6
|
import { randomUUID } from 'crypto';
|
|
7
|
-
import { mcpSessionManager } from '../../services/
|
|
7
|
+
import { mcpSessionManager } from '../../services/session/index.js';
|
|
8
8
|
/**
|
|
9
9
|
* Extracts session context from incoming MCP requests to establish client identity and session management.
|
|
10
10
|
*
|
|
@@ -19,12 +19,12 @@ import { mcpSessionManager } from '../../services/mcp-session-manager.js';
|
|
|
19
19
|
* project information, IP address, and user agent for comprehensive session tracking.
|
|
20
20
|
*
|
|
21
21
|
* @param {FastifyRequest<{ Body: RequestBody | null }>} request - Incoming Fastify request object
|
|
22
|
-
* @returns {{ sessionId: string;
|
|
22
|
+
* @returns {{ sessionId: string; sessionContext: SessionContext }} Object containing resolved session ID and enriched session context
|
|
23
23
|
*
|
|
24
24
|
* @example
|
|
25
25
|
* ```typescript
|
|
26
|
-
* const { sessionId,
|
|
27
|
-
* console.log(`Session: ${sessionId}, Client: ${
|
|
26
|
+
* const { sessionId, sessionContext } = extractSessionContext(request);
|
|
27
|
+
* console.log(`Session: ${sessionId}, Client: ${sessionContext.clientName}`);
|
|
28
28
|
* ```
|
|
29
29
|
*/
|
|
30
30
|
export function extractSessionContext(request) {
|
|
@@ -49,14 +49,14 @@ export function extractSessionContext(request) {
|
|
|
49
49
|
logger.debug(`Extracted sessionId from URL: ${sessionId}`, LOG_MODULES.CONTEXT);
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
// If sessionId was extracted, check if it exists in
|
|
52
|
+
// If sessionId was extracted, check if it exists in memory (for debugging)
|
|
53
53
|
if (sessionId) {
|
|
54
|
-
const
|
|
55
|
-
if (
|
|
56
|
-
logger.debug(`Session ${sessionId} found in
|
|
54
|
+
const hasSession = mcpSessionManager.hasSession(sessionId);
|
|
55
|
+
if (hasSession) {
|
|
56
|
+
logger.debug(`Session ${sessionId} found in active sessions`, LOG_MODULES.CONTEXT);
|
|
57
57
|
}
|
|
58
58
|
else {
|
|
59
|
-
logger.debug(`Session ${sessionId} not found in
|
|
59
|
+
logger.debug(`Session ${sessionId} not found in active sessions (will create new)`, LOG_MODULES.CONTEXT);
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
// Extract client info from headers and request body
|
|
@@ -68,25 +68,10 @@ export function extractSessionContext(request) {
|
|
|
68
68
|
if (!sessionId && isInitializeRequest && request.body?.params?.clientInfo) {
|
|
69
69
|
const { name, version } = request.body.params.clientInfo;
|
|
70
70
|
protocolVersion = request.body.params.protocolVersion;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const cwdHash = cwd
|
|
76
|
-
.split('')
|
|
77
|
-
.reduce((acc, char) => {
|
|
78
|
-
acc = (acc << 5) - acc + char.charCodeAt(0);
|
|
79
|
-
return acc & acc;
|
|
80
|
-
}, 0)
|
|
81
|
-
.toString(16)
|
|
82
|
-
.replace('-', '');
|
|
83
|
-
baseId = `${baseId}-${cwdHash}`;
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
const randomHash = randomUUID().substring(0, 8);
|
|
87
|
-
baseId = `${baseId}-${randomHash}`;
|
|
88
|
-
}
|
|
89
|
-
sessionId = baseId;
|
|
71
|
+
// Generate sessionId from client info with random hash (no cwd dependency)
|
|
72
|
+
const baseId = `${name.replace(/[^a-zA-Z0-9-]/g, '')}-${version.replace(/[^a-zA-Z0-9-]/g, '')}`;
|
|
73
|
+
const randomHash = randomUUID().substring(0, 8);
|
|
74
|
+
sessionId = `${baseId}-${randomHash}`;
|
|
90
75
|
logger.debug(`Generated sessionId from initialize params: ${sessionId}`, LOG_MODULES.CONTEXT);
|
|
91
76
|
// Save client version and protocol version information
|
|
92
77
|
clientVersion = version;
|
|
@@ -105,23 +90,14 @@ export function extractSessionContext(request) {
|
|
|
105
90
|
logger.debug(`Generated new sessionId: ${sessionId}`, LOG_MODULES.CONTEXT);
|
|
106
91
|
}
|
|
107
92
|
}
|
|
108
|
-
|
|
109
|
-
if (sessionId && mcpSessionManager.getSessionState(sessionId)) {
|
|
110
|
-
const hasSessionObject = mcpSessionManager.hasSession(sessionId);
|
|
111
|
-
if (!hasSessionObject) {
|
|
112
|
-
logger.warn(`Session state exists but session object missing for ${sessionId}`, LOG_MODULES.CONTEXT);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
const clientContext = {
|
|
93
|
+
const sessionContext = {
|
|
116
94
|
sessionId,
|
|
117
95
|
clientName,
|
|
118
96
|
clientVersion,
|
|
119
97
|
protocolVersion,
|
|
120
|
-
cwd: headers['x-mcp-cwd'] || headers['x-cwd'],
|
|
121
|
-
project: headers['x-mcp-project'] || headers['x-project'],
|
|
122
98
|
ip: request.ip,
|
|
123
99
|
userAgent: headers['user-agent'],
|
|
124
100
|
timestamp: Date.now()
|
|
125
101
|
};
|
|
126
|
-
return { sessionId,
|
|
102
|
+
return { sessionId, sessionContext };
|
|
127
103
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { sessionTrackerService } from '../../services/session-tracker.service.js';
|
|
2
2
|
import { logger } from '../../utils/logger.js';
|
|
3
3
|
/**
|
|
4
4
|
* Registers web API routes for client management endpoints.
|
|
@@ -30,7 +30,7 @@ import { logger } from '../../utils/logger.js';
|
|
|
30
30
|
export async function webClientRoutes(fastify) {
|
|
31
31
|
fastify.get('/api/clients', async (_request, reply) => {
|
|
32
32
|
try {
|
|
33
|
-
const clients =
|
|
33
|
+
const clients = sessionTrackerService.getSessions();
|
|
34
34
|
return reply.send(clients);
|
|
35
35
|
}
|
|
36
36
|
catch (error) {
|
|
@@ -7,12 +7,12 @@ import { FastifyInstance } from 'fastify';
|
|
|
7
7
|
* tool management and execution within the MCP Hub Lite system.
|
|
8
8
|
*
|
|
9
9
|
* The API supports both system-level tools (built into MCP Hub Lite) and server-specific tools
|
|
10
|
-
* from connected MCP servers. It enables
|
|
10
|
+
* from connected MCP servers. It enables tool listing, detailed tool inspection,
|
|
11
11
|
* and secure tool invocation with proper parameter validation.
|
|
12
12
|
*
|
|
13
13
|
* Key features include:
|
|
14
14
|
* - System tool discovery and execution
|
|
15
|
-
* - Cross-server tool listing
|
|
15
|
+
* - Cross-server tool listing
|
|
16
16
|
* - Server-specific tool management
|
|
17
17
|
* - Tool schema inspection and validation
|
|
18
18
|
* - Secure tool invocation with session context
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hub-tools.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/hub-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"hub-tools.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/hub-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAoB1C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBAsJ/D"}
|
|
@@ -8,12 +8,12 @@ import { hubToolsService } from '../../services/hub-tools.service.js';
|
|
|
8
8
|
* tool management and execution within the MCP Hub Lite system.
|
|
9
9
|
*
|
|
10
10
|
* The API supports both system-level tools (built into MCP Hub Lite) and server-specific tools
|
|
11
|
-
* from connected MCP servers. It enables
|
|
11
|
+
* from connected MCP servers. It enables tool listing, detailed tool inspection,
|
|
12
12
|
* and secure tool invocation with proper parameter validation.
|
|
13
13
|
*
|
|
14
14
|
* Key features include:
|
|
15
15
|
* - System tool discovery and execution
|
|
16
|
-
* - Cross-server tool listing
|
|
16
|
+
* - Cross-server tool listing
|
|
17
17
|
* - Server-specific tool management
|
|
18
18
|
* - Tool schema inspection and validation
|
|
19
19
|
* - Secure tool invocation with session context
|
|
@@ -58,16 +58,6 @@ export async function webHubToolsRoutes(fastify) {
|
|
|
58
58
|
const servers = await hubToolsService.listServers();
|
|
59
59
|
return servers;
|
|
60
60
|
});
|
|
61
|
-
// GET /web/hub-tools/servers/find - Find servers matching a pattern
|
|
62
|
-
fastify.get('/web/hub-tools/servers/find', async (request) => {
|
|
63
|
-
const { pattern, searchIn = 'both', caseSensitive = 'false' } = request.query;
|
|
64
|
-
const servers = await hubToolsService.findServers({
|
|
65
|
-
pattern,
|
|
66
|
-
searchIn: searchIn,
|
|
67
|
-
caseSensitive: caseSensitive === 'true'
|
|
68
|
-
});
|
|
69
|
-
return servers;
|
|
70
|
-
});
|
|
71
61
|
// GET /web/hub-tools/servers/:serverName/tools - List all tools in a specific server
|
|
72
62
|
fastify.get('/web/hub-tools/servers/:serverName/tools', async (request, reply) => {
|
|
73
63
|
try {
|
|
@@ -77,7 +67,7 @@ export async function webHubToolsRoutes(fastify) {
|
|
|
77
67
|
sessionId,
|
|
78
68
|
tags: tags ? JSON.parse(tags) : undefined
|
|
79
69
|
};
|
|
80
|
-
const result = await hubToolsService.
|
|
70
|
+
const result = await hubToolsService.listToolsInServer({ serverName, requestOptions });
|
|
81
71
|
return result;
|
|
82
72
|
}
|
|
83
73
|
catch (error) {
|
|
@@ -87,37 +77,6 @@ export async function webHubToolsRoutes(fastify) {
|
|
|
87
77
|
});
|
|
88
78
|
}
|
|
89
79
|
});
|
|
90
|
-
// GET /web/hub-tools/servers/:serverName/tools/find - Find tools in a specific server
|
|
91
|
-
fastify.get('/web/hub-tools/servers/:serverName/tools/find', async (request, reply) => {
|
|
92
|
-
try {
|
|
93
|
-
const { serverName } = request.params;
|
|
94
|
-
const { pattern, searchIn = 'both', caseSensitive = 'false', sessionId, tags } = request.query;
|
|
95
|
-
const requestOptions = {
|
|
96
|
-
sessionId,
|
|
97
|
-
tags: tags ? JSON.parse(tags) : undefined
|
|
98
|
-
};
|
|
99
|
-
const result = await hubToolsService.findToolsInServer({
|
|
100
|
-
serverName,
|
|
101
|
-
pattern,
|
|
102
|
-
searchIn: searchIn,
|
|
103
|
-
caseSensitive: caseSensitive === 'true',
|
|
104
|
-
requestOptions
|
|
105
|
-
});
|
|
106
|
-
return result;
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
if (error instanceof Error && error.message.includes('not found')) {
|
|
110
|
-
return reply.code(404).send({
|
|
111
|
-
error: 'Server not found',
|
|
112
|
-
message: error.message
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
return reply.code(500).send({
|
|
116
|
-
error: 'Internal Server Error',
|
|
117
|
-
message: error instanceof Error ? error.message : 'Unknown error'
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
80
|
// GET /web/hub-tools/servers/:serverName/tools/:toolName - Get specific tool details
|
|
122
81
|
fastify.get('/web/hub-tools/servers/:serverName/tools/:toolName', async (request, reply) => {
|
|
123
82
|
try {
|
|
@@ -192,14 +151,4 @@ export async function webHubToolsRoutes(fastify) {
|
|
|
192
151
|
const allTools = await hubToolsService.listAllTools();
|
|
193
152
|
return allTools;
|
|
194
153
|
});
|
|
195
|
-
// GET /web/hub-tools/tools/find - Find tools matching a pattern across all servers
|
|
196
|
-
fastify.get('/web/hub-tools/tools/find', async (request) => {
|
|
197
|
-
const { pattern, searchIn = 'both', caseSensitive = 'false' } = request.query;
|
|
198
|
-
const tools = await hubToolsService.findTools({
|
|
199
|
-
pattern,
|
|
200
|
-
searchIn: searchIn,
|
|
201
|
-
caseSensitive: caseSensitive === 'true'
|
|
202
|
-
});
|
|
203
|
-
return tools;
|
|
204
|
-
});
|
|
205
154
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FastifyInstance } from 'fastify';
|
|
2
2
|
/**
|
|
3
|
-
* MCP Connection Status API Routes
|
|
3
|
+
* MCP Connection Status API Routes (v1.1 format)
|
|
4
4
|
*
|
|
5
5
|
* Provides real-time monitoring and management endpoints for MCP (Model Context Protocol) server connections.
|
|
6
6
|
* This module enables administrators to check the health of connected servers, manage connection states,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-status.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/mcp-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-status.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/mcp-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAQ1C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,iBAuKhE"}
|
|
@@ -2,8 +2,9 @@ import { hubManager } from '../../services/hub-manager.service.js';
|
|
|
2
2
|
import { mcpConnectionManager } from '../../services/mcp-connection-manager.js';
|
|
3
3
|
import { logger } from '../../utils/logger.js';
|
|
4
4
|
import { LOG_MODULES } from '../../utils/logger/log-modules.js';
|
|
5
|
+
import { resolveInstanceConfig } from '../../config/config-migrator.js';
|
|
5
6
|
/**
|
|
6
|
-
* MCP Connection Status API Routes
|
|
7
|
+
* MCP Connection Status API Routes (v1.1 format)
|
|
7
8
|
*
|
|
8
9
|
* Provides real-time monitoring and management endpoints for MCP (Model Context Protocol) server connections.
|
|
9
10
|
* This module enables administrators to check the health of connected servers, manage connection states,
|
|
@@ -33,16 +34,16 @@ export async function webMcpStatusRoutes(fastify) {
|
|
|
33
34
|
fastify.get('/web/mcp/status', async (_request, reply) => {
|
|
34
35
|
try {
|
|
35
36
|
const servers = hubManager.getAllServers();
|
|
36
|
-
const serverInstances = hubManager.getServerInstances();
|
|
37
37
|
const statusList = [];
|
|
38
38
|
servers.forEach((server) => {
|
|
39
|
-
const instances =
|
|
40
|
-
instances
|
|
39
|
+
const instances = server.config.instances || [];
|
|
40
|
+
// If no instances, add a default disconnected entry for this server
|
|
41
|
+
if (instances.length === 0) {
|
|
41
42
|
statusList.push({
|
|
42
|
-
id:
|
|
43
|
+
id: server.name,
|
|
43
44
|
name: server.name,
|
|
44
|
-
type: server.config.type,
|
|
45
|
-
status:
|
|
45
|
+
type: server.config.template.type,
|
|
46
|
+
status: {
|
|
46
47
|
connected: false,
|
|
47
48
|
lastCheck: Date.now(),
|
|
48
49
|
toolsCount: 0,
|
|
@@ -50,7 +51,25 @@ export async function webMcpStatusRoutes(fastify) {
|
|
|
50
51
|
pid: undefined
|
|
51
52
|
}
|
|
52
53
|
});
|
|
53
|
-
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Add status for each instance
|
|
57
|
+
instances.forEach((instance) => {
|
|
58
|
+
const resolvedConfig = resolveInstanceConfig(server.config, instance.id);
|
|
59
|
+
statusList.push({
|
|
60
|
+
id: instance.id || '',
|
|
61
|
+
name: server.name,
|
|
62
|
+
type: resolvedConfig?.type || server.config.template.type,
|
|
63
|
+
status: mcpConnectionManager.getStatus(server.name, instance.index ?? 0) || {
|
|
64
|
+
connected: false,
|
|
65
|
+
lastCheck: Date.now(),
|
|
66
|
+
toolsCount: 0,
|
|
67
|
+
resourcesCount: 0,
|
|
68
|
+
pid: undefined
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
54
73
|
});
|
|
55
74
|
return statusList;
|
|
56
75
|
}
|
|
@@ -62,19 +81,34 @@ export async function webMcpStatusRoutes(fastify) {
|
|
|
62
81
|
// POST /web/mcp/servers/:id/connect - Connect to MCP server
|
|
63
82
|
fastify.post('/web/mcp/servers/:id/connect', async (request, reply) => {
|
|
64
83
|
try {
|
|
65
|
-
const
|
|
66
|
-
if (!
|
|
84
|
+
const serverInfo = hubManager.getServerById(request.params.id);
|
|
85
|
+
if (!serverInfo) {
|
|
67
86
|
return reply.code(404).send({ error: 'Server not found' });
|
|
68
87
|
}
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
88
|
+
const resolvedConfig = resolveInstanceConfig(serverInfo.config, serverInfo.instance.id);
|
|
89
|
+
if (!resolvedConfig) {
|
|
90
|
+
return reply.code(404).send({ error: 'Server instance configuration not found' });
|
|
91
|
+
}
|
|
92
|
+
// Create a compatible config object with required instance fields
|
|
93
|
+
const connectConfig = {
|
|
94
|
+
...resolvedConfig,
|
|
95
|
+
id: serverInfo.instance.id,
|
|
96
|
+
timestamp: Date.now(),
|
|
97
|
+
hash: '',
|
|
98
|
+
pid: undefined,
|
|
99
|
+
startTime: undefined,
|
|
100
|
+
index: serverInfo.instance.index,
|
|
101
|
+
displayName: serverInfo.instance.displayName
|
|
102
|
+
};
|
|
103
|
+
const instanceIndex = serverInfo.instance.index ?? 0;
|
|
104
|
+
const success = await mcpConnectionManager.connect(serverInfo.name, instanceIndex, connectConfig);
|
|
73
105
|
if (!success) {
|
|
74
106
|
return reply.code(500).send({ error: 'Failed to connect to server' });
|
|
75
107
|
}
|
|
76
|
-
//
|
|
77
|
-
|
|
108
|
+
// Note: Do NOT update the instance's enabled field here.
|
|
109
|
+
// The enabled field is a configuration parameter that should only be modified
|
|
110
|
+
// by the user explicitly via the configuration panel.
|
|
111
|
+
// Runtime connect/disconnect operations should not affect persistent configuration.
|
|
78
112
|
return { success: true };
|
|
79
113
|
}
|
|
80
114
|
catch (error) {
|
|
@@ -85,13 +119,15 @@ export async function webMcpStatusRoutes(fastify) {
|
|
|
85
119
|
// POST /web/mcp/servers/:id/disconnect - Disconnect from MCP server
|
|
86
120
|
fastify.post('/web/mcp/servers/:id/disconnect', async (request, reply) => {
|
|
87
121
|
try {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const server = hubManager.getServerById(request.params.id);
|
|
92
|
-
if (server) {
|
|
93
|
-
await hubManager.updateServer(server.name, { enabled: false });
|
|
122
|
+
const serverInfo = hubManager.getServerById(request.params.id);
|
|
123
|
+
if (!serverInfo) {
|
|
124
|
+
return reply.code(404).send({ error: 'Server not found' });
|
|
94
125
|
}
|
|
126
|
+
await mcpConnectionManager.disconnect(serverInfo.name, serverInfo.instance.index ?? 0);
|
|
127
|
+
// Note: Do NOT update the instance's enabled field here.
|
|
128
|
+
// The enabled field is a configuration parameter that should only be modified
|
|
129
|
+
// by the user explicitly via the configuration panel.
|
|
130
|
+
// Runtime connect/disconnect operations should not affect persistent configuration.
|
|
95
131
|
return { success: true };
|
|
96
132
|
}
|
|
97
133
|
catch (error) {
|
|
@@ -99,11 +135,14 @@ export async function webMcpStatusRoutes(fastify) {
|
|
|
99
135
|
return reply.code(500).send({ error: 'Internal Server Error' });
|
|
100
136
|
}
|
|
101
137
|
});
|
|
102
|
-
// GET /web/mcp/servers/:
|
|
103
|
-
fastify.get('/web/mcp/servers/:
|
|
138
|
+
// GET /web/mcp/servers/:name/tools - Get tools for a specific server
|
|
139
|
+
fastify.get('/web/mcp/servers/:name/tools', async (request, reply) => {
|
|
104
140
|
try {
|
|
105
|
-
|
|
106
|
-
|
|
141
|
+
const serverName = request.params.name;
|
|
142
|
+
logger.info(`API request tools for server: ${serverName}`, LOG_MODULES.MCP_STATUS);
|
|
143
|
+
// Use getToolsByServerName which queries serverNameToolCache
|
|
144
|
+
// This aggregates tools from all instances of the same server name
|
|
145
|
+
const tools = mcpConnectionManager.getToolsByServerName(serverName);
|
|
107
146
|
return tools;
|
|
108
147
|
}
|
|
109
148
|
catch (error) {
|
|
@@ -111,11 +150,13 @@ export async function webMcpStatusRoutes(fastify) {
|
|
|
111
150
|
return reply.code(500).send({ error: 'Internal Server Error' });
|
|
112
151
|
}
|
|
113
152
|
});
|
|
114
|
-
// GET /web/mcp/servers/:
|
|
115
|
-
fastify.get('/web/mcp/servers/:
|
|
153
|
+
// GET /web/mcp/servers/:name/resources - Get resources for a specific server
|
|
154
|
+
fastify.get('/web/mcp/servers/:name/resources', async (request, reply) => {
|
|
116
155
|
try {
|
|
117
|
-
|
|
118
|
-
|
|
156
|
+
const serverName = request.params.name;
|
|
157
|
+
logger.info(`API request resources for server: ${serverName}`, LOG_MODULES.MCP_STATUS);
|
|
158
|
+
// Use getResourcesByName which queries resourceCache by server name
|
|
159
|
+
const resources = mcpConnectionManager.getResourcesByName(serverName);
|
|
119
160
|
return resources;
|
|
120
161
|
}
|
|
121
162
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAK1C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBAkF/D"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { mcpConnectionManager } from '../../services/mcp-connection-manager.js';
|
|
2
1
|
import { hubToolsService } from '../../services/hub-tools.service.js';
|
|
3
2
|
import { MCP_HUB_LITE_SERVER } from '../../models/system-tools.constants.js';
|
|
4
3
|
/**
|
|
@@ -38,29 +37,44 @@ export async function webResourceRoutes(fastify) {
|
|
|
38
37
|
// Handle system resources (mcp-hub-lite)
|
|
39
38
|
if (name === MCP_HUB_LITE_SERVER) {
|
|
40
39
|
const content = await hubToolsService.readResource(uri);
|
|
40
|
+
// Determine mimeType and format content appropriately
|
|
41
|
+
let mimeType = 'application/json';
|
|
42
|
+
let text;
|
|
43
|
+
// Use-guide is markdown
|
|
44
|
+
if (uri === 'hub://use-guide') {
|
|
45
|
+
mimeType = 'text/markdown';
|
|
46
|
+
text = typeof content === 'string' ? content : JSON.stringify(content, null, 2);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// Server metadata is JSON
|
|
50
|
+
mimeType = 'application/json';
|
|
51
|
+
text = typeof content === 'string' ? content : JSON.stringify(content, null, 2);
|
|
52
|
+
}
|
|
41
53
|
// Wrap content in MCP resource read format
|
|
42
54
|
return {
|
|
43
55
|
contents: [
|
|
44
56
|
{
|
|
45
57
|
uri,
|
|
46
|
-
mimeType
|
|
47
|
-
text
|
|
58
|
+
mimeType,
|
|
59
|
+
text
|
|
48
60
|
}
|
|
49
61
|
]
|
|
50
62
|
};
|
|
51
63
|
}
|
|
52
|
-
//
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
64
|
+
// Use hubToolsService.readResource to handle Hub URI -> MCP URI conversion
|
|
65
|
+
// This properly maps hub://servers/{name}/{instanceIndex}/{mcpPath} to MCP native URI
|
|
66
|
+
try {
|
|
67
|
+
// hubToolsService.readResource already returns MCP format for forwarding case
|
|
68
|
+
return await hubToolsService.readResource(uri);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
const errorObj = error;
|
|
72
|
+
if (errorObj.message.includes('not found') ||
|
|
73
|
+
errorObj.message.includes('not connected')) {
|
|
74
|
+
return reply.code(404).send({ error: errorObj.message });
|
|
59
75
|
}
|
|
60
|
-
return reply.code(
|
|
76
|
+
return reply.code(500).send({ error: errorObj.message });
|
|
61
77
|
}
|
|
62
|
-
const result = await mcpConnectionManager.readResource(serverId, uri);
|
|
63
|
-
return result;
|
|
64
78
|
}
|
|
65
79
|
catch (error) {
|
|
66
80
|
const errorObj = error;
|
|
@@ -69,20 +83,12 @@ export async function webResourceRoutes(fastify) {
|
|
|
69
83
|
});
|
|
70
84
|
fastify.get('/web/resources', async (_request, reply) => {
|
|
71
85
|
try {
|
|
72
|
-
|
|
73
|
-
// Add Hub System resources
|
|
86
|
+
// Return only Hub System resources (dynamically generated hub:// format)
|
|
74
87
|
const systemResources = await hubToolsService.listResources();
|
|
75
88
|
const resources = {};
|
|
76
|
-
// 1. Add Hub System resources first if they exist
|
|
77
89
|
if (systemResources && systemResources.length > 0) {
|
|
78
90
|
resources[MCP_HUB_LITE_SERVER] = systemResources;
|
|
79
91
|
}
|
|
80
|
-
// 2. Add other server resources, filtering out empty ones
|
|
81
|
-
for (const [serverName, serverResources] of Object.entries(allResources)) {
|
|
82
|
-
if (serverResources && serverResources.length > 0) {
|
|
83
|
-
resources[serverName] = serverResources;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
92
|
return { resources };
|
|
87
93
|
}
|
|
88
94
|
catch (error) {
|
|
@@ -2,25 +2,11 @@ import { FastifyInstance } from 'fastify';
|
|
|
2
2
|
/**
|
|
3
3
|
* Tool Search API Routes
|
|
4
4
|
*
|
|
5
|
-
* Provides
|
|
6
|
-
*
|
|
7
|
-
* advanced search algorithms with pagination support.
|
|
8
|
-
*
|
|
9
|
-
* The search API supports flexible query parameters including result limits, offsets for pagination,
|
|
10
|
-
* and various search modes. It integrates with the core search service to provide fast and accurate
|
|
11
|
-
* tool discovery across the entire MCP ecosystem.
|
|
12
|
-
*
|
|
13
|
-
* Additionally includes a dedicated health check endpoint for monitoring the search service availability
|
|
14
|
-
* in production environments.
|
|
5
|
+
* Provides simple string-based search for discovering tools across all connected MCP servers.
|
|
6
|
+
* Uses straightforward string matching on tool name and description.
|
|
15
7
|
*
|
|
16
8
|
* @param fastify - The Fastify instance to register routes on
|
|
17
9
|
* @returns Promise that resolves when all routes are registered
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```typescript
|
|
21
|
-
* // Register search routes
|
|
22
|
-
* await webSearchRoutes(app);
|
|
23
|
-
* ```
|
|
24
10
|
*/
|
|
25
11
|
export declare function webSearchRoutes(fastify: FastifyInstance): Promise<void>;
|
|
26
12
|
//# sourceMappingURL=search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,iBAsC7D"}
|
|
@@ -1,62 +1,41 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { mcpConnectionManager } from '../../services/mcp-connection-manager.js';
|
|
2
2
|
/**
|
|
3
3
|
* Tool Search API Routes
|
|
4
4
|
*
|
|
5
|
-
* Provides
|
|
6
|
-
*
|
|
7
|
-
* advanced search algorithms with pagination support.
|
|
8
|
-
*
|
|
9
|
-
* The search API supports flexible query parameters including result limits, offsets for pagination,
|
|
10
|
-
* and various search modes. It integrates with the core search service to provide fast and accurate
|
|
11
|
-
* tool discovery across the entire MCP ecosystem.
|
|
12
|
-
*
|
|
13
|
-
* Additionally includes a dedicated health check endpoint for monitoring the search service availability
|
|
14
|
-
* in production environments.
|
|
5
|
+
* Provides simple string-based search for discovering tools across all connected MCP servers.
|
|
6
|
+
* Uses straightforward string matching on tool name and description.
|
|
15
7
|
*
|
|
16
8
|
* @param fastify - The Fastify instance to register routes on
|
|
17
9
|
* @returns Promise that resolves when all routes are registered
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```typescript
|
|
21
|
-
* // Register search routes
|
|
22
|
-
* await webSearchRoutes(app);
|
|
23
|
-
* ```
|
|
24
10
|
*/
|
|
25
11
|
export async function webSearchRoutes(fastify) {
|
|
26
|
-
// GET /web/search - Search for tools with
|
|
12
|
+
// GET /web/search - Search for tools with simple string matching
|
|
27
13
|
fastify.get('/web/search', async (request) => {
|
|
28
|
-
const { q, limit
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
14
|
+
const { q, limit = 50 } = request.query;
|
|
15
|
+
const allTools = mcpConnectionManager.getAllTools();
|
|
16
|
+
const query = q?.toLowerCase() || '';
|
|
17
|
+
const filtered = allTools.filter((tool) => {
|
|
18
|
+
if (!query)
|
|
19
|
+
return true;
|
|
20
|
+
const nameMatch = tool.name.toLowerCase().includes(query);
|
|
21
|
+
const descMatch = tool.description?.toLowerCase().includes(query);
|
|
22
|
+
return nameMatch || descMatch;
|
|
23
|
+
});
|
|
24
|
+
const results = filtered.slice(0, limit);
|
|
38
25
|
return {
|
|
39
|
-
results
|
|
26
|
+
results: results.map((tool) => ({
|
|
27
|
+
name: tool.name,
|
|
28
|
+
description: tool.description,
|
|
29
|
+
serverName: tool.serverName
|
|
30
|
+
})),
|
|
40
31
|
pagination: {
|
|
41
|
-
total:
|
|
42
|
-
limit
|
|
43
|
-
|
|
44
|
-
hasMore: results.length >= options.limit
|
|
32
|
+
total: filtered.length,
|
|
33
|
+
limit,
|
|
34
|
+
returned: results.length
|
|
45
35
|
},
|
|
46
36
|
metadata: {
|
|
47
|
-
query: q
|
|
48
|
-
filters: options.filters,
|
|
49
|
-
processingTime: 0, // To be implemented: measure processing time
|
|
50
|
-
cached: false // To be implemented: check cache status
|
|
37
|
+
query: q
|
|
51
38
|
}
|
|
52
39
|
};
|
|
53
40
|
});
|
|
54
|
-
// GET /web/search/health - Search service health check (for monitoring)
|
|
55
|
-
fastify.get('/web/search/health', async () => {
|
|
56
|
-
return {
|
|
57
|
-
status: 'healthy',
|
|
58
|
-
timestamp: new Date().toISOString(),
|
|
59
|
-
service: 'search-core-service'
|
|
60
|
-
};
|
|
61
|
-
});
|
|
62
41
|
}
|