@loop_ouroboros/mcp-hub-lite 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/dist/client/assets/{HomeView-7rMg9C6t.js → HomeView-BBwvy1oj.js} +1 -1
- package/dist/client/assets/ResourceDetailView-CZ2aB73w.js +1 -0
- package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
- package/dist/client/assets/ResourcesView-CN1NlhWs.js +1 -0
- package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
- package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
- package/dist/client/assets/ServerDashboard-k652Vw4Z.js +1 -0
- package/dist/client/assets/ServerDetail-BLQ-a4cO.js +2 -0
- package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
- package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
- package/dist/client/assets/ServerListView-BHrsFD5i.js +36 -0
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHhwEuGe.js +1 -0
- package/dist/client/assets/SettingsView-CUOFNXrz.js +1 -0
- package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
- package/dist/client/assets/ToolCallDialog-BfPjLxfV.js +1 -0
- package/dist/client/assets/ToolsView-BxgXvPC3.css +1 -0
- package/dist/client/assets/ToolsView-CyuhYAE2.js +1 -0
- package/dist/client/assets/{_baseClone-5q1b0P3O.js → _baseClone-DO5qfalW.js} +1 -1
- package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
- package/dist/client/assets/el-form-item-CcGsD2K_.js +12 -0
- package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
- package/dist/client/assets/el-input-tYgeiaCT.js +1 -0
- package/dist/client/assets/{el-loading-H85n3BUC.js → el-loading-Dwl9E_Vr.js} +1 -1
- package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
- package/dist/client/assets/el-overlay-kqX_BABo.js +1 -0
- package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
- package/dist/client/assets/el-radio-group-D8aWBVOT.js +1 -0
- package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
- package/dist/client/assets/el-skeleton-item-BRwIFspE.js +1 -0
- package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
- package/dist/client/assets/el-switch-BF8c-xeU.js +1 -0
- package/dist/client/assets/el-tab-pane-C4Ep94cd.js +1 -0
- package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
- package/dist/client/assets/el-table-column-Cog6uCh-.js +1 -0
- package/dist/client/assets/index-ByNBhPAR.js +1 -0
- package/dist/client/assets/index-CTB6oe-9.js +2 -0
- package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
- package/dist/client/assets/omit-CUnDT6sS.js +1 -0
- package/dist/client/assets/{raf-DY5mgbuB.js → raf-CmzeRPMd.js} +1 -1
- package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-CbgVSHIh.js} +3 -3
- package/dist/client/index.html +3 -3
- package/dist/server/shared/models/resource.model.d.ts +2 -1
- package/dist/server/shared/models/resource.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.d.ts +362 -5
- package/dist/server/shared/models/server.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.js +220 -1
- package/dist/server/shared/models/session.model.d.ts +1 -57
- package/dist/server/shared/models/session.model.d.ts.map +1 -1
- package/dist/server/shared/models/session.model.js +1 -55
- package/dist/server/shared/models/tool.model.d.ts +4 -2
- package/dist/server/shared/models/tool.model.d.ts.map +1 -1
- package/dist/server/shared/types/session-context.types.d.ts +0 -2
- package/dist/server/shared/types/session-context.types.d.ts.map +1 -1
- package/dist/server/shared/types/websocket.types.d.ts +17 -10
- package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.js +2 -2
- package/dist/server/src/api/mcp/gateway.d.ts +1 -3
- package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
- package/dist/server/src/api/mcp/gateway.js +32 -49
- package/dist/server/src/api/web/hub-tools.d.ts +2 -2
- package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
- package/dist/server/src/api/web/hub-tools.js +3 -54
- package/dist/server/src/api/web/mcp-status.d.ts +1 -1
- package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
- package/dist/server/src/api/web/mcp-status.js +71 -30
- package/dist/server/src/api/web/resources.d.ts.map +1 -1
- package/dist/server/src/api/web/resources.js +28 -22
- package/dist/server/src/api/web/search.d.ts +2 -16
- package/dist/server/src/api/web/search.d.ts.map +1 -1
- package/dist/server/src/api/web/search.js +24 -45
- package/dist/server/src/api/web/servers.d.ts +3 -3
- package/dist/server/src/api/web/servers.d.ts.map +1 -1
- package/dist/server/src/api/web/servers.js +70 -25
- package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
- package/dist/server/src/api/ws/ws-handler.js +4 -2
- package/dist/server/src/app.d.ts.map +1 -1
- package/dist/server/src/app.js +0 -2
- package/dist/server/src/cli/commands/list.js +2 -2
- package/dist/server/src/cli/commands/server.d.ts +57 -0
- package/dist/server/src/cli/commands/server.d.ts.map +1 -0
- package/dist/server/src/cli/commands/server.js +169 -0
- package/dist/server/src/cli/commands/status.d.ts.map +1 -1
- package/dist/server/src/cli/commands/status.js +41 -30
- package/dist/server/src/cli/index.d.ts.map +1 -1
- package/dist/server/src/cli/index.js +2 -1
- package/dist/server/src/cli/server.d.ts +11 -2
- package/dist/server/src/cli/server.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.d.ts +22 -0
- package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.js +135 -11
- package/dist/server/src/config/config-loader.d.ts +6 -5
- package/dist/server/src/config/config-loader.d.ts.map +1 -1
- package/dist/server/src/config/config-loader.js +54 -16
- package/dist/server/src/config/config-manager.d.ts +51 -43
- package/dist/server/src/config/config-manager.d.ts.map +1 -1
- package/dist/server/src/config/config-manager.js +84 -66
- package/dist/server/src/config/config-migrator.d.ts +82 -0
- package/dist/server/src/config/config-migrator.d.ts.map +1 -0
- package/dist/server/src/config/config-migrator.js +348 -0
- package/dist/server/src/config/config-saver.d.ts +2 -0
- package/dist/server/src/config/config-saver.d.ts.map +1 -1
- package/dist/server/src/config/config-saver.js +8 -2
- package/dist/server/src/config/config.schema.d.ts +10 -104
- package/dist/server/src/config/config.schema.d.ts.map +1 -1
- package/dist/server/src/config/config.schema.js +15 -99
- package/dist/server/src/config/path-validator.d.ts +27 -0
- package/dist/server/src/config/path-validator.d.ts.map +1 -0
- package/dist/server/src/config/path-validator.js +53 -0
- package/dist/server/src/config/server-config-manager.d.ts +37 -31
- package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
- package/dist/server/src/config/server-config-manager.js +222 -66
- package/dist/server/src/config/type-converter.d.ts.map +1 -1
- package/dist/server/src/config/type-converter.js +3 -2
- package/dist/server/src/models/event.model.d.ts +17 -10
- package/dist/server/src/models/event.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.d.ts +17 -3
- package/dist/server/src/models/server.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.js +2 -1
- package/dist/server/src/models/system-tools.constants.d.ts +10 -27
- package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
- package/dist/server/src/models/system-tools.constants.js +4 -8
- package/dist/server/src/pid/manager.d.ts.map +1 -1
- package/dist/server/src/pid/manager.js +2 -1
- package/dist/server/src/server/dev-server.js +34 -20
- package/dist/server/src/server/runner.d.ts.map +1 -1
- package/dist/server/src/server/runner.js +41 -26
- package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
- package/dist/server/src/services/connection/connection-manager.js +286 -241
- package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
- package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
- package/dist/server/src/services/connection/tool-cache.js +50 -55
- package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
- package/dist/server/src/services/gateway/gateway.service.js +53 -23
- package/dist/server/src/services/gateway/global-transport.d.ts +19 -0
- package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
- package/dist/server/src/services/gateway/global-transport.js +66 -0
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
- package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +20 -80
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
- package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
- package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
- package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
- package/dist/server/src/services/gateway/types.d.ts +2 -1
- package/dist/server/src/services/gateway/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.d.ts +32 -238
- package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.js +89 -267
- package/dist/server/src/services/hub-tools/index.d.ts +1 -3
- package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/index.js +1 -2
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
- package/dist/server/src/services/hub-tools/resource-generator.d.ts +24 -1
- package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.js +259 -39
- package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
- package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/server-selector.js +44 -37
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
- package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
- package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/tool-search.js +10 -4
- package/dist/server/src/services/hub-tools/types.d.ts +2 -2
- package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.d.ts +43 -72
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.js +185 -110
- package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/system-tool-handler.js +7 -17
- package/dist/server/src/utils/composite-key.d.ts +29 -0
- package/dist/server/src/utils/composite-key.d.ts.map +1 -0
- package/dist/server/src/utils/composite-key.js +39 -0
- package/dist/server/src/utils/error-handler.d.ts.map +1 -1
- package/dist/server/src/utils/error-handler.js +3 -2
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/utils/index.js +2 -0
- package/dist/server/src/utils/instance-id.d.ts +22 -0
- package/dist/server/src/utils/instance-id.d.ts.map +1 -0
- package/dist/server/src/utils/instance-id.js +59 -0
- package/dist/server/src/utils/json-utils.d.ts +4 -4
- package/dist/server/src/utils/json-utils.d.ts.map +1 -1
- package/dist/server/src/utils/json-utils.js +4 -4
- package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
- package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.js +82 -5
- package/dist/server/src/utils/logger/log-modules.d.ts +15 -9
- package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-modules.js +8 -6
- package/dist/server/src/utils/parameter-validator.d.ts +10 -0
- package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
- package/dist/server/src/utils/parameter-validator.js +53 -0
- package/dist/server/src/utils/process-tree.d.ts +49 -0
- package/dist/server/src/utils/process-tree.d.ts.map +1 -0
- package/dist/server/src/utils/process-tree.js +285 -0
- package/dist/server/src/utils/sort-utils.d.ts +40 -0
- package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
- package/dist/server/src/utils/sort-utils.js +131 -0
- package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
- package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/sse-transport.js +55 -9
- package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
- package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/stdio-transport.js +66 -247
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
- package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
- package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
- package/dist/server/src/utils/transports/transport-factory.js +31 -11
- package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
- package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
- package/dist/server/src/utils/version.d.ts +11 -0
- package/dist/server/src/utils/version.d.ts.map +1 -0
- package/dist/server/src/utils/version.js +57 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
- package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
- package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
- package/dist/server/tests/server.test.js +27 -16
- package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
- package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
- package/dist/server/tests/temp/temp-run-docling.js +53 -0
- package/dist/server/tests/types/test-helpers.d.ts +1 -2
- package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-saver.test.js +200 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config.schema.test.js +347 -0
- package/dist/server/tests/unit/server/runner.test.js +86 -62
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
- package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -320
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
- package/dist/server/tests/unit/services/session-manager.test.js +26 -436
- package/dist/server/tests/unit/utils/config.test.js +88 -186
- package/dist/server/tests/unit/utils/json-utils.test.js +18 -18
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
- package/package.json +3 -1
- package/dist/client/assets/ResourceDetailView-Bf-1ffbk.js +0 -1
- package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
- package/dist/client/assets/ResourcesView-g5x4xCPh.js +0 -1
- package/dist/client/assets/ServerDashboard-Chpne8Q0.css +0 -1
- package/dist/client/assets/ServerDashboard-G8Wmp4hF.js +0 -2
- package/dist/client/assets/ServerListView-dV2XrPjo.js +0 -32
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
- package/dist/client/assets/SessionsView-Ckd38lj1.js +0 -1
- package/dist/client/assets/SettingsView-BJUdepEQ.js +0 -1
- package/dist/client/assets/ToolCallDialog-C_bTCpHC.js +0 -1
- package/dist/client/assets/ToolsView-0c2eputu.js +0 -1
- package/dist/client/assets/ToolsView-E3Ps9c7i.css +0 -1
- package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
- package/dist/client/assets/el-form-item-ClFnj49k.js +0 -12
- package/dist/client/assets/el-input-CDnuSKVZ.js +0 -1
- package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
- package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
- package/dist/client/assets/el-overlay-CzMkXyYy.js +0 -1
- package/dist/client/assets/el-select-DvjGddk_.js +0 -1
- package/dist/client/assets/el-tab-pane-C_DQMcwe.js +0 -1
- package/dist/client/assets/el-table-column-CASRIbZM.js +0 -1
- package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
- package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
- package/dist/client/assets/el-tag-npbwux4f.js +0 -1
- package/dist/client/assets/index-CCnAxNF8.js +0 -2
- package/dist/client/assets/index-d1DZeSfz.js +0 -1
- package/dist/client/assets/omit-DPsOVNIJ.js +0 -1
- package/dist/client/assets/vnode-CHomNjgN.js +0 -1
|
@@ -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
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { FastifyInstance } from 'fastify';
|
|
2
2
|
/**
|
|
3
|
-
* MCP Server Management API Routes
|
|
3
|
+
* MCP Server Management API Routes (v1.1 format)
|
|
4
4
|
*
|
|
5
5
|
* Provides comprehensive CRUD (Create, Read, Update, Delete) operations for managing MCP (Model Context Protocol) servers
|
|
6
6
|
* and their runtime instances within the MCP Hub Lite system. This module serves as the primary interface for
|
|
7
7
|
* server configuration management, process control, and bulk operations.
|
|
8
8
|
*
|
|
9
|
-
* The API supports both static server configuration
|
|
9
|
+
* The API supports both static server template configuration and dynamic
|
|
10
10
|
* instance management (controlling actual running server processes). It includes sophisticated validation
|
|
11
11
|
* using Zod schemas to ensure configuration integrity and provides detailed error handling with appropriate
|
|
12
12
|
* HTTP status codes.
|
|
13
13
|
*
|
|
14
14
|
* Key features include:
|
|
15
|
-
* - Full CRUD operations for server
|
|
15
|
+
* - Full CRUD operations for server templates
|
|
16
16
|
* - Instance-level management for running server processes
|
|
17
17
|
* - Batch import/export capabilities for server configurations
|
|
18
18
|
* - Automatic server startup based on enabled status
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/servers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/servers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAmB1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,iBAwS7D"}
|
|
@@ -1,21 +1,27 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { hubManager } from '../../services/hub-manager.service.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ServerTemplateSchema, ServerInstanceUpdateSchema } from '../../config/config.schema.js';
|
|
4
4
|
import { logger } from '../../utils/logger.js';
|
|
5
|
+
import { LOG_MODULES } from '../../utils/logger/log-modules.js';
|
|
6
|
+
import { stringifyForLogging, getApiDebugSetting } from '../../utils/json-utils.js';
|
|
5
7
|
/**
|
|
6
|
-
*
|
|
8
|
+
* Server update schema that supports template fields
|
|
9
|
+
*/
|
|
10
|
+
const ServerUpdateSchema = ServerTemplateSchema.partial();
|
|
11
|
+
/**
|
|
12
|
+
* MCP Server Management API Routes (v1.1 format)
|
|
7
13
|
*
|
|
8
14
|
* Provides comprehensive CRUD (Create, Read, Update, Delete) operations for managing MCP (Model Context Protocol) servers
|
|
9
15
|
* and their runtime instances within the MCP Hub Lite system. This module serves as the primary interface for
|
|
10
16
|
* server configuration management, process control, and bulk operations.
|
|
11
17
|
*
|
|
12
|
-
* The API supports both static server configuration
|
|
18
|
+
* The API supports both static server template configuration and dynamic
|
|
13
19
|
* instance management (controlling actual running server processes). It includes sophisticated validation
|
|
14
20
|
* using Zod schemas to ensure configuration integrity and provides detailed error handling with appropriate
|
|
15
21
|
* HTTP status codes.
|
|
16
22
|
*
|
|
17
23
|
* Key features include:
|
|
18
|
-
* - Full CRUD operations for server
|
|
24
|
+
* - Full CRUD operations for server templates
|
|
19
25
|
* - Instance-level management for running server processes
|
|
20
26
|
* - Batch import/export capabilities for server configurations
|
|
21
27
|
* - Automatic server startup based on enabled status
|
|
@@ -47,34 +53,44 @@ export async function webServerRoutes(fastify) {
|
|
|
47
53
|
});
|
|
48
54
|
// GET /web/server-instances
|
|
49
55
|
fastify.get('/web/server-instances', async () => {
|
|
50
|
-
|
|
56
|
+
const allServers = hubManager.getAllServers();
|
|
57
|
+
const instances = {};
|
|
58
|
+
for (const { name, config } of allServers) {
|
|
59
|
+
instances[name] = config.instances;
|
|
60
|
+
}
|
|
61
|
+
return instances;
|
|
51
62
|
});
|
|
52
63
|
// GET /web/server-instances/:name
|
|
53
64
|
fastify.get('/web/server-instances/:name', async (request, reply) => {
|
|
54
|
-
const instances = hubManager.
|
|
65
|
+
const instances = hubManager.getServerInstancesByName(request.params.name);
|
|
55
66
|
if (instances.length === 0) {
|
|
56
|
-
|
|
67
|
+
// Check if server exists but has no instances
|
|
68
|
+
const server = hubManager.getServerByName(request.params.name);
|
|
69
|
+
if (!server) {
|
|
70
|
+
return reply.code(404).send({ error: 'Server not found' });
|
|
71
|
+
}
|
|
57
72
|
}
|
|
58
73
|
return instances;
|
|
59
74
|
});
|
|
60
75
|
// POST /web/servers
|
|
61
76
|
fastify.post('/web/servers', async (request, reply) => {
|
|
62
77
|
try {
|
|
63
|
-
// Accept server name and configuration as request body
|
|
78
|
+
// Accept server name and template configuration as request body
|
|
64
79
|
const postSchema = z.object({
|
|
65
80
|
name: z.string().min(1).max(100),
|
|
66
|
-
config:
|
|
81
|
+
config: ServerTemplateSchema.partial()
|
|
67
82
|
});
|
|
68
83
|
const body = postSchema.parse(request.body);
|
|
69
84
|
const newServer = await hubManager.addServer(body.name, body.config);
|
|
70
|
-
// If auto-start is enabled,
|
|
71
|
-
|
|
85
|
+
// If auto-start is enabled, check if we need to start the instance
|
|
86
|
+
const firstInstance = newServer.instances[0];
|
|
87
|
+
if (firstInstance && firstInstance.enabled !== false) {
|
|
72
88
|
try {
|
|
73
|
-
|
|
89
|
+
// Instance is already created by addServer, no need to create again
|
|
74
90
|
}
|
|
75
91
|
catch (error) {
|
|
76
92
|
// Auto-start failure does not affect server addition operation
|
|
77
|
-
logger.warn(`Failed to auto-start server instance for ${body.name}:`, error);
|
|
93
|
+
logger.warn(`Failed to auto-start server instance for ${body.name}:`, error, LOG_MODULES.SERVER_API);
|
|
78
94
|
}
|
|
79
95
|
}
|
|
80
96
|
return reply.code(201).send({ name: body.name, config: newServer });
|
|
@@ -89,8 +105,13 @@ export async function webServerRoutes(fastify) {
|
|
|
89
105
|
// POST /web/server-instances/:name
|
|
90
106
|
fastify.post('/web/server-instances/:name', async (request, reply) => {
|
|
91
107
|
try {
|
|
92
|
-
|
|
93
|
-
|
|
108
|
+
if (getApiDebugSetting()) {
|
|
109
|
+
logger.debug(`[API] POST /web/server-instances/${request.params.name} - raw body: ${stringifyForLogging(request.body)}`, LOG_MODULES.SERVER_API);
|
|
110
|
+
}
|
|
111
|
+
const body = ServerInstanceUpdateSchema.parse(request.body);
|
|
112
|
+
if (getApiDebugSetting()) {
|
|
113
|
+
logger.debug(`[API] POST /web/server-instances/${request.params.name} - parsed body: ${stringifyForLogging(body)}`, LOG_MODULES.SERVER_API);
|
|
114
|
+
}
|
|
94
115
|
// Check if server exists
|
|
95
116
|
const server = hubManager.getServerByName(request.params.name);
|
|
96
117
|
if (!server) {
|
|
@@ -109,9 +130,10 @@ export async function webServerRoutes(fastify) {
|
|
|
109
130
|
// PUT /web/servers/:name
|
|
110
131
|
fastify.put('/web/servers/:name', async (request, reply) => {
|
|
111
132
|
try {
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
133
|
+
const body = ServerUpdateSchema.parse(request.body);
|
|
134
|
+
// Update server template (includes instanceSelectionStrategy in template)
|
|
135
|
+
await hubManager.updateServer(request.params.name, body);
|
|
136
|
+
const updatedServer = hubManager.getServerByName(request.params.name);
|
|
115
137
|
if (!updatedServer) {
|
|
116
138
|
return reply.code(404).send({ error: 'Server not found' });
|
|
117
139
|
}
|
|
@@ -127,8 +149,13 @@ export async function webServerRoutes(fastify) {
|
|
|
127
149
|
// PUT /web/server-instances/:name/:index
|
|
128
150
|
fastify.put('/web/server-instances/:name/:index', async (request, reply) => {
|
|
129
151
|
try {
|
|
130
|
-
|
|
131
|
-
|
|
152
|
+
if (getApiDebugSetting()) {
|
|
153
|
+
logger.debug(`[API] PUT /web/server-instances/${request.params.name}/${request.params.index} - raw body: ${stringifyForLogging(request.body)}`, LOG_MODULES.SERVER_API);
|
|
154
|
+
}
|
|
155
|
+
const body = ServerInstanceUpdateSchema.parse(request.body);
|
|
156
|
+
if (getApiDebugSetting()) {
|
|
157
|
+
logger.debug(`[API] PUT /web/server-instances/${request.params.name}/${request.params.index} - parsed body: ${stringifyForLogging(body)}`, LOG_MODULES.SERVER_API);
|
|
158
|
+
}
|
|
132
159
|
await hubManager.updateServerInstance(request.params.name, request.params.index, body);
|
|
133
160
|
return reply.code(200).send({ message: 'Server instance updated' });
|
|
134
161
|
}
|
|
@@ -160,6 +187,24 @@ export async function webServerRoutes(fastify) {
|
|
|
160
187
|
return reply.code(500).send({ error: 'Internal Server Error' });
|
|
161
188
|
}
|
|
162
189
|
});
|
|
190
|
+
// POST /web/server-instances/:name/reassign-indexes
|
|
191
|
+
fastify.post('/web/server-instances/:name/reassign-indexes', async (request, reply) => {
|
|
192
|
+
try {
|
|
193
|
+
// Check if server exists
|
|
194
|
+
const server = hubManager.getServerByName(request.params.name);
|
|
195
|
+
if (!server) {
|
|
196
|
+
return reply.code(404).send({ error: 'Server not found' });
|
|
197
|
+
}
|
|
198
|
+
const success = await hubManager.reassignInstanceIndexes(request.params.name);
|
|
199
|
+
if (!success) {
|
|
200
|
+
return reply.code(404).send({ error: 'No server instances found' });
|
|
201
|
+
}
|
|
202
|
+
return reply.code(200).send({ message: 'Server instance indexes reassigned successfully' });
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return reply.code(500).send({ error: 'Internal Server Error' });
|
|
206
|
+
}
|
|
207
|
+
});
|
|
163
208
|
// POST /web/servers/batch
|
|
164
209
|
fastify.post('/web/servers/batch', async (request, reply) => {
|
|
165
210
|
try {
|
|
@@ -167,7 +212,7 @@ export async function webServerRoutes(fastify) {
|
|
|
167
212
|
const batchSchema = z.object({
|
|
168
213
|
mcpServers: z.array(z.object({
|
|
169
214
|
name: z.string().min(1).max(100),
|
|
170
|
-
config:
|
|
215
|
+
config: ServerTemplateSchema.partial()
|
|
171
216
|
}))
|
|
172
217
|
});
|
|
173
218
|
const body = batchSchema.parse(request.body);
|
|
@@ -192,11 +237,11 @@ export async function webServerRoutes(fastify) {
|
|
|
192
237
|
continue;
|
|
193
238
|
}
|
|
194
239
|
// Validate server configuration using Zod (now supports "http" type)
|
|
195
|
-
const validatedConfig =
|
|
240
|
+
const validatedConfig = ServerTemplateSchema.partial().parse(serverConfig);
|
|
196
241
|
serversToAdd.push({ name: processedName, config: validatedConfig });
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
242
|
+
// In v1.1, enabled is at instance level, not template level
|
|
243
|
+
// We'll connect all instances by default
|
|
244
|
+
serversToConnect.push(processedName);
|
|
200
245
|
results.success.push({ name: processedName, config: validatedConfig });
|
|
201
246
|
existingNames.add(processedName); // Prevent duplicates within the same batch
|
|
202
247
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-handler.d.ts","sourceRoot":"","sources":["../../../../../src/api/ws/ws-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAc,MAAM,gCAAgC,CAAC;AAgC7E,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IALlB,OAAO,CAAC,aAAa,CAAkD;IACvE,OAAO,CAAC,iBAAiB,CAAC,CAAiB;gBAGjC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,eAAe;IAGnC;;OAEG;IACH,UAAU,IAAI,IAAI;IAWlB;;OAEG;IACH,OAAO,CAAC,aAAa;IA6BrB;;OAEG;IACH,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"ws-handler.d.ts","sourceRoot":"","sources":["../../../../../src/api/ws/ws-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAc,MAAM,gCAAgC,CAAC;AAgC7E,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IALlB,OAAO,CAAC,aAAa,CAAkD;IACvE,OAAO,CAAC,iBAAiB,CAAC,CAAiB;gBAGjC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,eAAe;IAGnC;;OAEG;IACH,UAAU,IAAI,IAAI;IAWlB;;OAEG;IACH,OAAO,CAAC,aAAa;IA6BrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,eAAe;IA6BvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,IAAI;IAMZ;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,aAAa;CAKtB"}
|
|
@@ -99,14 +99,16 @@ export class WebSocketHandler {
|
|
|
99
99
|
* Handle fetch historical logs request
|
|
100
100
|
*/
|
|
101
101
|
handleFetchLogs(message) {
|
|
102
|
-
const
|
|
102
|
+
const compositeKey = `${message.serverName}-${message.serverIndex}`;
|
|
103
|
+
const logs = logStorage.getLogs(compositeKey, {
|
|
103
104
|
limit: message.limit || 100,
|
|
104
105
|
since: message.since
|
|
105
106
|
});
|
|
106
107
|
this.send({
|
|
107
108
|
type: 'log',
|
|
108
109
|
data: {
|
|
109
|
-
|
|
110
|
+
serverName: message.serverName,
|
|
111
|
+
serverIndex: message.serverIndex,
|
|
110
112
|
logs: logs
|
|
111
113
|
}
|
|
112
114
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/app.ts"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,QAAQ,mWAmE7B"}
|
package/dist/server/src/app.js
CHANGED
|
@@ -15,7 +15,6 @@ import { configRoutes } from './api/web/config.js';
|
|
|
15
15
|
import { webLogRoutes } from './api/web/logs.js';
|
|
16
16
|
import { webHubToolsRoutes } from './api/web/hub-tools.js';
|
|
17
17
|
import { webResourceRoutes } from './api/web/resources.js';
|
|
18
|
-
import { webSessionRoutes } from './api/web/sessions.js';
|
|
19
18
|
// WebSocket Routes
|
|
20
19
|
import { webSocketRoutes } from './api/ws/events.js';
|
|
21
20
|
// Get __dirname equivalent in ESM
|
|
@@ -77,7 +76,6 @@ export async function buildApp() {
|
|
|
77
76
|
fastify.register(webLogRoutes);
|
|
78
77
|
fastify.register(webHubToolsRoutes);
|
|
79
78
|
fastify.register(webResourceRoutes);
|
|
80
|
-
fastify.register(webSessionRoutes);
|
|
81
79
|
fastify.register(webSocketRoutes);
|
|
82
80
|
// Serve static files from dist/client (frontend build output)
|
|
83
81
|
const clientPath = path.join(__dirname, '../../client');
|