@loop_ouroboros/mcp-hub-lite 1.0.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 +228 -0
- package/LICENSE +21 -0
- package/README.md +354 -0
- package/dist/client/assets/HomeView-f901HeKw.js +1 -0
- package/dist/client/assets/ResourceDetailView-BdOaL_-o.css +1 -0
- package/dist/client/assets/ResourceDetailView-Bz66ZjfY.js +1 -0
- package/dist/client/assets/ResourcesView-CjMklkyv.css +1 -0
- package/dist/client/assets/ResourcesView-lI_fItfA.js +1 -0
- package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +1 -0
- package/dist/client/assets/ServerDashboard-Bgx8WVkx.js +2 -0
- package/dist/client/assets/ServerListView-Bws09jNR.css +1 -0
- package/dist/client/assets/ServerListView-CP6Ffkfx.js +30 -0
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +1 -0
- package/dist/client/assets/SessionsView-D68qKR4D.js +1 -0
- package/dist/client/assets/SettingsView-BPYfO9BE.js +1 -0
- package/dist/client/assets/ToolCallDialog-Br8FNebN.js +1 -0
- package/dist/client/assets/ToolCallDialog-C7eh7jHE.css +1 -0
- package/dist/client/assets/ToolsView-B6hUiR43.js +1 -0
- package/dist/client/assets/ToolsView-BLnU8cV6.css +1 -0
- package/dist/client/assets/_baseClone-DCmK847M.js +1 -0
- package/dist/client/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
- package/dist/client/assets/el-form-item-BVMLpmVC.css +1 -0
- package/dist/client/assets/el-form-item-DM0q2hmO.js +12 -0
- package/dist/client/assets/el-input-BtI9NECe.js +1 -0
- package/dist/client/assets/el-input-CmuHb8HS.css +1 -0
- package/dist/client/assets/el-loading-CChNmKeI.js +1 -0
- package/dist/client/assets/el-loading-bpKhqqQq.css +1 -0
- package/dist/client/assets/el-overlay-B2ZKM6Up.css +1 -0
- package/dist/client/assets/el-overlay-lZZbPmsX.js +1 -0
- package/dist/client/assets/el-select-BXztu2b5.js +1 -0
- package/dist/client/assets/el-select-C0U_l4IZ.css +1 -0
- package/dist/client/assets/el-tab-pane-CnNoQHsR.css +1 -0
- package/dist/client/assets/el-tab-pane-Dy9ruaEX.js +1 -0
- package/dist/client/assets/el-table-column-98UyVgBH.js +1 -0
- package/dist/client/assets/el-table-column-T_mV9jNw.css +1 -0
- package/dist/client/assets/el-tag-B5lLT51E.js +1 -0
- package/dist/client/assets/el-tag-DjxZVOpb.css +1 -0
- package/dist/client/assets/event-BB_Ol6Sd.js +1 -0
- package/dist/client/assets/index-BgKcmWJr.js +1 -0
- package/dist/client/assets/index-BsDWtoIl.css +1 -0
- package/dist/client/assets/index-BzQXG7no.js +1 -0
- package/dist/client/assets/index-CSTs2jYk.js +2 -0
- package/dist/client/assets/omit-Bx5HJNV_.js +1 -0
- package/dist/client/assets/raf-B9VDMtMF.js +1 -0
- package/dist/client/assets/typescript-Bp3YSIOJ.js +1 -0
- package/dist/client/assets/vnode-B8aJx8u4.js +1 -0
- package/dist/client/assets/vue-vendor-6ny5zj9i.js +3 -0
- package/dist/client/index.html +15 -0
- package/dist/server/shared/index.d.ts +3 -0
- package/dist/server/shared/index.d.ts.map +1 -0
- package/dist/server/shared/index.js +2 -0
- package/dist/server/shared/models/index.d.ts +4 -0
- package/dist/server/shared/models/index.d.ts.map +1 -0
- package/dist/server/shared/models/index.js +3 -0
- package/dist/server/shared/models/resource.model.d.ts +8 -0
- package/dist/server/shared/models/resource.model.d.ts.map +1 -0
- package/dist/server/shared/models/resource.model.js +1 -0
- package/dist/server/shared/models/server.model.d.ts +57 -0
- package/dist/server/shared/models/server.model.d.ts.map +1 -0
- package/dist/server/shared/models/server.model.js +1 -0
- package/dist/server/shared/models/session.model.d.ts +73 -0
- package/dist/server/shared/models/session.model.d.ts.map +1 -0
- package/dist/server/shared/models/session.model.js +70 -0
- package/dist/server/shared/models/tool.model.d.ts +22 -0
- package/dist/server/shared/models/tool.model.d.ts.map +1 -0
- package/dist/server/shared/models/tool.model.js +1 -0
- package/dist/server/shared/types/client.types.d.ts +35 -0
- package/dist/server/shared/types/client.types.d.ts.map +1 -0
- package/dist/server/shared/types/client.types.js +5 -0
- package/dist/server/shared/types/common.types.d.ts +5 -0
- package/dist/server/shared/types/common.types.d.ts.map +1 -0
- package/dist/server/shared/types/common.types.js +2 -0
- package/dist/server/shared/types/index.d.ts +4 -0
- package/dist/server/shared/types/index.d.ts.map +1 -0
- package/dist/server/shared/types/index.js +3 -0
- package/dist/server/shared/types/session.types.d.ts +15 -0
- package/dist/server/shared/types/session.types.d.ts.map +1 -0
- package/dist/server/shared/types/session.types.js +5 -0
- package/dist/server/shared/types/websocket.types.d.ts +177 -0
- package/dist/server/shared/types/websocket.types.d.ts.map +1 -0
- package/dist/server/shared/types/websocket.types.js +25 -0
- package/dist/server/src/api/mcp/debug-response-wrapper.d.ts +13 -0
- package/dist/server/src/api/mcp/debug-response-wrapper.d.ts.map +1 -0
- package/dist/server/src/api/mcp/debug-response-wrapper.js +271 -0
- package/dist/server/src/api/mcp/gateway.d.ts +14 -0
- package/dist/server/src/api/mcp/gateway.d.ts.map +1 -0
- package/dist/server/src/api/mcp/gateway.js +116 -0
- package/dist/server/src/api/mcp/session-context-extractor.d.ts +47 -0
- package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -0
- package/dist/server/src/api/mcp/session-context-extractor.js +127 -0
- package/dist/server/src/api/mcp/sse-stream-manager.d.ts +13 -0
- package/dist/server/src/api/mcp/sse-stream-manager.d.ts.map +1 -0
- package/dist/server/src/api/mcp/sse-stream-manager.js +40 -0
- package/dist/server/src/api/web/clients.d.ts +30 -0
- package/dist/server/src/api/web/clients.d.ts.map +1 -0
- package/dist/server/src/api/web/clients.js +41 -0
- package/dist/server/src/api/web/config.d.ts +21 -0
- package/dist/server/src/api/web/config.d.ts.map +1 -0
- package/dist/server/src/api/web/config.js +119 -0
- package/dist/server/src/api/web/health.d.ts +21 -0
- package/dist/server/src/api/web/health.d.ts.map +1 -0
- package/dist/server/src/api/web/health.js +24 -0
- package/dist/server/src/api/web/hub-tools.d.ts +30 -0
- package/dist/server/src/api/web/hub-tools.d.ts.map +1 -0
- package/dist/server/src/api/web/hub-tools.js +202 -0
- package/dist/server/src/api/web/logs.d.ts +30 -0
- package/dist/server/src/api/web/logs.d.ts.map +1 -0
- package/dist/server/src/api/web/logs.js +141 -0
- package/dist/server/src/api/web/mcp-status.d.ts +29 -0
- package/dist/server/src/api/web/mcp-status.d.ts.map +1 -0
- package/dist/server/src/api/web/mcp-status.js +126 -0
- package/dist/server/src/api/web/resources.d.ts +28 -0
- package/dist/server/src/api/web/resources.d.ts.map +1 -0
- package/dist/server/src/api/web/resources.js +93 -0
- package/dist/server/src/api/web/search.d.ts +26 -0
- package/dist/server/src/api/web/search.d.ts.map +1 -0
- package/dist/server/src/api/web/search.js +62 -0
- package/dist/server/src/api/web/servers.d.ts +33 -0
- package/dist/server/src/api/web/servers.d.ts.map +1 -0
- package/dist/server/src/api/web/servers.js +235 -0
- package/dist/server/src/api/web/sessions.d.ts +29 -0
- package/dist/server/src/api/web/sessions.d.ts.map +1 -0
- package/dist/server/src/api/web/sessions.js +104 -0
- package/dist/server/src/api/ws/events.d.ts +29 -0
- package/dist/server/src/api/ws/events.d.ts.map +1 -0
- package/dist/server/src/api/ws/events.js +44 -0
- package/dist/server/src/api/ws/ws-handler.d.ts +83 -0
- package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -0
- package/dist/server/src/api/ws/ws-handler.js +217 -0
- package/dist/server/src/app.d.ts +24 -0
- package/dist/server/src/app.d.ts.map +1 -0
- package/dist/server/src/app.js +108 -0
- package/dist/server/src/cli/commands/list.d.ts +71 -0
- package/dist/server/src/cli/commands/list.d.ts.map +1 -0
- package/dist/server/src/cli/commands/list.js +97 -0
- package/dist/server/src/cli/commands/restart.d.ts +42 -0
- package/dist/server/src/cli/commands/restart.d.ts.map +1 -0
- package/dist/server/src/cli/commands/restart.js +61 -0
- package/dist/server/src/cli/commands/start.d.ts +43 -0
- package/dist/server/src/cli/commands/start.d.ts.map +1 -0
- package/dist/server/src/cli/commands/start.js +160 -0
- package/dist/server/src/cli/commands/status.d.ts +39 -0
- package/dist/server/src/cli/commands/status.d.ts.map +1 -0
- package/dist/server/src/cli/commands/status.js +164 -0
- package/dist/server/src/cli/commands/stop.d.ts +34 -0
- package/dist/server/src/cli/commands/stop.d.ts.map +1 -0
- package/dist/server/src/cli/commands/stop.js +47 -0
- package/dist/server/src/cli/commands/ui.d.ts +44 -0
- package/dist/server/src/cli/commands/ui.d.ts.map +1 -0
- package/dist/server/src/cli/commands/ui.js +95 -0
- package/dist/server/src/cli/index.d.ts +62 -0
- package/dist/server/src/cli/index.d.ts.map +1 -0
- package/dist/server/src/cli/index.js +88 -0
- package/dist/server/src/cli/parse-args.d.ts +108 -0
- package/dist/server/src/cli/parse-args.d.ts.map +1 -0
- package/dist/server/src/cli/parse-args.js +131 -0
- package/dist/server/src/cli/server.d.ts +171 -0
- package/dist/server/src/cli/server.d.ts.map +1 -0
- package/dist/server/src/cli/server.js +246 -0
- package/dist/server/src/config/config-change-logger.d.ts +16 -0
- package/dist/server/src/config/config-change-logger.d.ts.map +1 -0
- package/dist/server/src/config/config-change-logger.js +43 -0
- package/dist/server/src/config/config-loader.d.ts +22 -0
- package/dist/server/src/config/config-loader.d.ts.map +1 -0
- package/dist/server/src/config/config-loader.js +66 -0
- package/dist/server/src/config/config-manager.d.ts +158 -0
- package/dist/server/src/config/config-manager.d.ts.map +1 -0
- package/dist/server/src/config/config-manager.js +246 -0
- package/dist/server/src/config/config-saver.d.ts +16 -0
- package/dist/server/src/config/config-saver.d.ts.map +1 -0
- package/dist/server/src/config/config-saver.js +28 -0
- package/dist/server/src/config/config.schema.d.ts +108 -0
- package/dist/server/src/config/config.schema.d.ts.map +1 -0
- package/dist/server/src/config/config.schema.js +103 -0
- package/dist/server/src/config/server-config-manager.d.ts +74 -0
- package/dist/server/src/config/server-config-manager.d.ts.map +1 -0
- package/dist/server/src/config/server-config-manager.js +157 -0
- package/dist/server/src/config/type-converter.d.ts +13 -0
- package/dist/server/src/config/type-converter.d.ts.map +1 -0
- package/dist/server/src/config/type-converter.js +37 -0
- package/dist/server/src/index.d.ts +3 -0
- package/dist/server/src/index.d.ts.map +1 -0
- package/dist/server/src/index.js +352 -0
- package/dist/server/src/models/event.model.d.ts +106 -0
- package/dist/server/src/models/event.model.d.ts.map +1 -0
- package/dist/server/src/models/event.model.js +5 -0
- package/dist/server/src/models/server.model.d.ts +19 -0
- package/dist/server/src/models/server.model.d.ts.map +1 -0
- package/dist/server/src/models/server.model.js +1 -0
- package/dist/server/src/models/system-tools.constants.d.ts +73 -0
- package/dist/server/src/models/system-tools.constants.d.ts.map +1 -0
- package/dist/server/src/models/system-tools.constants.js +31 -0
- package/dist/server/src/models/types.d.ts +84 -0
- package/dist/server/src/models/types.d.ts.map +1 -0
- package/dist/server/src/models/types.js +67 -0
- package/dist/server/src/pid/file.d.ts +26 -0
- package/dist/server/src/pid/file.d.ts.map +1 -0
- package/dist/server/src/pid/file.js +68 -0
- package/dist/server/src/pid/manager.d.ts +98 -0
- package/dist/server/src/pid/manager.d.ts.map +1 -0
- package/dist/server/src/pid/manager.js +158 -0
- package/dist/server/src/pid/types.d.ts +13 -0
- package/dist/server/src/pid/types.d.ts.map +1 -0
- package/dist/server/src/pid/types.js +4 -0
- package/dist/server/src/server/dev-server.d.ts +2 -0
- package/dist/server/src/server/dev-server.d.ts.map +1 -0
- package/dist/server/src/server/dev-server.js +171 -0
- package/dist/server/src/server/runner.d.ts +57 -0
- package/dist/server/src/server/runner.d.ts.map +1 -0
- package/dist/server/src/server/runner.js +163 -0
- package/dist/server/src/services/client-tracker.service.d.ts +132 -0
- package/dist/server/src/services/client-tracker.service.d.ts.map +1 -0
- package/dist/server/src/services/client-tracker.service.js +203 -0
- package/dist/server/src/services/connection/connection-manager.d.ts +478 -0
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -0
- package/dist/server/src/services/connection/connection-manager.js +929 -0
- package/dist/server/src/services/connection/index.d.ts +6 -0
- package/dist/server/src/services/connection/index.d.ts.map +1 -0
- package/dist/server/src/services/connection/index.js +4 -0
- package/dist/server/src/services/connection/tool-cache.d.ts +122 -0
- package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -0
- package/dist/server/src/services/connection/tool-cache.js +202 -0
- package/dist/server/src/services/connection/types.d.ts +30 -0
- package/dist/server/src/services/connection/types.d.ts.map +1 -0
- package/dist/server/src/services/connection/types.js +1 -0
- package/dist/server/src/services/event-bus.service.d.ts +169 -0
- package/dist/server/src/services/event-bus.service.d.ts.map +1 -0
- package/dist/server/src/services/event-bus.service.js +200 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts +61 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -0
- package/dist/server/src/services/gateway/gateway.service.js +107 -0
- package/dist/server/src/services/gateway/index.d.ts +8 -0
- package/dist/server/src/services/gateway/index.d.ts.map +1 -0
- package/dist/server/src/services/gateway/index.js +6 -0
- package/dist/server/src/services/gateway/log-formatter.d.ts +26 -0
- package/dist/server/src/services/gateway/log-formatter.d.ts.map +1 -0
- package/dist/server/src/services/gateway/log-formatter.js +66 -0
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts +13 -0
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +131 -0
- package/dist/server/src/services/gateway/request-handlers/index.d.ts +9 -0
- package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/index.js +8 -0
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +11 -0
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +85 -0
- package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts +11 -0
- package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/resources-handler.js +56 -0
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts +11 -0
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +228 -0
- package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts +11 -0
- package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/tools-handler.js +79 -0
- package/dist/server/src/services/gateway/tool-list-generator.d.ts +23 -0
- package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -0
- package/dist/server/src/services/gateway/tool-list-generator.js +115 -0
- package/dist/server/src/services/gateway/types.d.ts +27 -0
- package/dist/server/src/services/gateway/types.d.ts.map +1 -0
- package/dist/server/src/services/gateway/types.js +4 -0
- package/dist/server/src/services/gateway.service.d.ts +7 -0
- package/dist/server/src/services/gateway.service.d.ts.map +1 -0
- package/dist/server/src/services/gateway.service.js +6 -0
- package/dist/server/src/services/hub-manager.service.d.ts +299 -0
- package/dist/server/src/services/hub-manager.service.d.ts.map +1 -0
- package/dist/server/src/services/hub-manager.service.js +413 -0
- package/dist/server/src/services/hub-tools/index.d.ts +10 -0
- package/dist/server/src/services/hub-tools/index.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/index.js +6 -0
- package/dist/server/src/services/hub-tools/resource-generator.d.ts +63 -0
- package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/resource-generator.js +141 -0
- package/dist/server/src/services/hub-tools/server-selector.d.ts +63 -0
- package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/server-selector.js +108 -0
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +47 -0
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/system-tool-definitions.js +225 -0
- package/dist/server/src/services/hub-tools/tool-search.d.ts +85 -0
- package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/tool-search.js +115 -0
- package/dist/server/src/services/hub-tools/types.d.ts +42 -0
- package/dist/server/src/services/hub-tools/types.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/types.js +1 -0
- package/dist/server/src/services/hub-tools.service.d.ts +235 -0
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools.service.js +457 -0
- package/dist/server/src/services/log-storage.service.d.ts +177 -0
- package/dist/server/src/services/log-storage.service.d.ts.map +1 -0
- package/dist/server/src/services/log-storage.service.js +243 -0
- package/dist/server/src/services/mcp-connection-manager.d.ts +7 -0
- package/dist/server/src/services/mcp-connection-manager.d.ts.map +1 -0
- package/dist/server/src/services/mcp-connection-manager.js +6 -0
- package/dist/server/src/services/mcp-session-manager.d.ts +6 -0
- package/dist/server/src/services/mcp-session-manager.d.ts.map +1 -0
- package/dist/server/src/services/mcp-session-manager.js +4 -0
- package/dist/server/src/services/search/index.d.ts +5 -0
- package/dist/server/src/services/search/index.d.ts.map +1 -0
- package/dist/server/src/services/search/index.js +5 -0
- package/dist/server/src/services/search/search-cache.d.ts +132 -0
- package/dist/server/src/services/search/search-cache.d.ts.map +1 -0
- package/dist/server/src/services/search/search-cache.js +151 -0
- package/dist/server/src/services/search/search-core.service.d.ts +108 -0
- package/dist/server/src/services/search/search-core.service.d.ts.map +1 -0
- package/dist/server/src/services/search/search-core.service.js +187 -0
- package/dist/server/src/services/search/search-scorer.d.ts +54 -0
- package/dist/server/src/services/search/search-scorer.d.ts.map +1 -0
- package/dist/server/src/services/search/search-scorer.js +83 -0
- package/dist/server/src/services/search/types.d.ts +20 -0
- package/dist/server/src/services/search/types.d.ts.map +1 -0
- package/dist/server/src/services/search/types.js +1 -0
- package/dist/server/src/services/session/index.d.ts +6 -0
- package/dist/server/src/services/session/index.d.ts.map +1 -0
- package/dist/server/src/services/session/index.js +4 -0
- package/dist/server/src/services/session/session-manager.d.ts +352 -0
- package/dist/server/src/services/session/session-manager.d.ts.map +1 -0
- package/dist/server/src/services/session/session-manager.js +835 -0
- package/dist/server/src/services/session/types.d.ts +32 -0
- package/dist/server/src/services/session/types.d.ts.map +1 -0
- package/dist/server/src/services/session/types.js +1 -0
- package/dist/server/src/services/simple-search.service.d.ts +67 -0
- package/dist/server/src/services/simple-search.service.d.ts.map +1 -0
- package/dist/server/src/services/simple-search.service.js +82 -0
- package/dist/server/src/services/system-tool-handler.d.ts +10 -0
- package/dist/server/src/services/system-tool-handler.d.ts.map +1 -0
- package/dist/server/src/services/system-tool-handler.js +77 -0
- package/dist/server/src/utils/error-handler.d.ts +18 -0
- package/dist/server/src/utils/error-handler.d.ts.map +1 -0
- package/dist/server/src/utils/error-handler.js +59 -0
- package/dist/server/src/utils/format-utils.d.ts +23 -0
- package/dist/server/src/utils/format-utils.d.ts.map +1 -0
- package/dist/server/src/utils/format-utils.js +58 -0
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -0
- package/dist/server/src/utils/index.js +1 -0
- package/dist/server/src/utils/json-utils.d.ts +82 -0
- package/dist/server/src/utils/json-utils.d.ts.map +1 -0
- package/dist/server/src/utils/json-utils.js +204 -0
- package/dist/server/src/utils/log-rotator.d.ts +223 -0
- package/dist/server/src/utils/log-rotator.d.ts.map +1 -0
- package/dist/server/src/utils/log-rotator.js +306 -0
- package/dist/server/src/utils/logger/dev-logger.d.ts +39 -0
- package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -0
- package/dist/server/src/utils/logger/dev-logger.js +63 -0
- package/dist/server/src/utils/logger/index.d.ts +36 -0
- package/dist/server/src/utils/logger/index.d.ts.map +1 -0
- package/dist/server/src/utils/logger/index.js +46 -0
- package/dist/server/src/utils/logger/log-colors.d.ts +27 -0
- package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -0
- package/dist/server/src/utils/logger/log-colors.js +41 -0
- package/dist/server/src/utils/logger/log-context.d.ts +13 -0
- package/dist/server/src/utils/logger/log-context.d.ts.map +1 -0
- package/dist/server/src/utils/logger/log-context.js +5 -0
- package/dist/server/src/utils/logger/log-formatter.d.ts +47 -0
- package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -0
- package/dist/server/src/utils/logger/log-formatter.js +150 -0
- package/dist/server/src/utils/logger/log-modules.d.ts +141 -0
- package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -0
- package/dist/server/src/utils/logger/log-modules.js +81 -0
- package/dist/server/src/utils/logger/log-output.d.ts +68 -0
- package/dist/server/src/utils/logger/log-output.d.ts.map +1 -0
- package/dist/server/src/utils/logger/log-output.js +320 -0
- package/dist/server/src/utils/logger/logger.d.ts +190 -0
- package/dist/server/src/utils/logger/logger.d.ts.map +1 -0
- package/dist/server/src/utils/logger/logger.js +350 -0
- package/dist/server/src/utils/logger.d.ts +12 -0
- package/dist/server/src/utils/logger.d.ts.map +1 -0
- package/dist/server/src/utils/logger.js +12 -0
- package/dist/server/src/utils/mcp-error-handler.d.ts +162 -0
- package/dist/server/src/utils/mcp-error-handler.d.ts.map +1 -0
- package/dist/server/src/utils/mcp-error-handler.js +270 -0
- package/dist/server/src/utils/port-checker.d.ts +16 -0
- package/dist/server/src/utils/port-checker.d.ts.map +1 -0
- package/dist/server/src/utils/port-checker.js +242 -0
- package/dist/server/src/utils/request-context.d.ts +71 -0
- package/dist/server/src/utils/request-context.d.ts.map +1 -0
- package/dist/server/src/utils/request-context.js +73 -0
- package/dist/server/src/utils/tool-args-parser.d.ts +17 -0
- package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -0
- package/dist/server/src/utils/tool-args-parser.js +34 -0
- package/dist/server/src/utils/transports/sse-transport.d.ts +104 -0
- package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -0
- package/dist/server/src/utils/transports/sse-transport.js +189 -0
- package/dist/server/src/utils/transports/stdio-transport.d.ts +122 -0
- package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -0
- package/dist/server/src/utils/transports/stdio-transport.js +324 -0
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts +146 -0
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -0
- package/dist/server/src/utils/transports/streamable-http-transport.js +212 -0
- package/dist/server/src/utils/transports/transport-factory.d.ts +26 -0
- package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -0
- package/dist/server/src/utils/transports/transport-factory.js +104 -0
- package/dist/server/src/utils/transports/transport.interface.d.ts +35 -0
- package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -0
- package/dist/server/src/utils/transports/transport.interface.js +1 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.d.ts +2 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.d.ts.map +1 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.js +103 -0
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.d.ts +2 -0
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.d.ts.map +1 -0
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +181 -0
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.d.ts +2 -0
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.d.ts.map +1 -0
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +155 -0
- package/dist/server/tests/evaluation/evaluation.test.d.ts +2 -0
- package/dist/server/tests/evaluation/evaluation.test.d.ts.map +1 -0
- package/dist/server/tests/evaluation/evaluation.test.js +102 -0
- package/dist/server/tests/helpers/sdk-test-helpers.d.ts +32 -0
- package/dist/server/tests/helpers/sdk-test-helpers.d.ts.map +1 -0
- package/dist/server/tests/helpers/sdk-test-helpers.js +82 -0
- package/dist/server/tests/integration/api/gateway.test.d.ts +2 -0
- package/dist/server/tests/integration/api/gateway.test.d.ts.map +1 -0
- package/dist/server/tests/integration/api/gateway.test.js +366 -0
- package/dist/server/tests/integration/gateway/fault-tolerance.test.d.ts +2 -0
- package/dist/server/tests/integration/gateway/fault-tolerance.test.d.ts.map +1 -0
- package/dist/server/tests/integration/gateway/fault-tolerance.test.js +109 -0
- package/dist/server/tests/integration/gateway/mcp-connection.test.d.ts +2 -0
- package/dist/server/tests/integration/gateway/mcp-connection.test.d.ts.map +1 -0
- package/dist/server/tests/integration/gateway/mcp-connection.test.js +149 -0
- package/dist/server/tests/server.test.d.ts +2 -0
- package/dist/server/tests/server.test.d.ts.map +1 -0
- package/dist/server/tests/server.test.js +95 -0
- package/dist/server/tests/setup.d.ts +7 -0
- package/dist/server/tests/setup.d.ts.map +1 -0
- package/dist/server/tests/setup.js +53 -0
- package/dist/server/tests/types/logger-test-helpers.d.ts +17 -0
- package/dist/server/tests/types/logger-test-helpers.d.ts.map +1 -0
- package/dist/server/tests/types/logger-test-helpers.js +4 -0
- package/dist/server/tests/types/test-helpers.d.ts +27 -0
- package/dist/server/tests/types/test-helpers.d.ts.map +1 -0
- package/dist/server/tests/types/test-helpers.js +4 -0
- package/dist/server/tests/unit/cli/basic-cli.test.d.ts +2 -0
- package/dist/server/tests/unit/cli/basic-cli.test.d.ts.map +1 -0
- package/dist/server/tests/unit/cli/basic-cli.test.js +33 -0
- package/dist/server/tests/unit/cli/cli.test.d.ts +2 -0
- package/dist/server/tests/unit/cli/cli.test.d.ts.map +1 -0
- package/dist/server/tests/unit/cli/cli.test.js +17 -0
- package/dist/server/tests/unit/cli/commands.test.d.ts +2 -0
- package/dist/server/tests/unit/cli/commands.test.d.ts.map +1 -0
- package/dist/server/tests/unit/cli/commands.test.js +75 -0
- package/dist/server/tests/unit/cli/server.test.d.ts +2 -0
- package/dist/server/tests/unit/cli/server.test.d.ts.map +1 -0
- package/dist/server/tests/unit/cli/server.test.js +68 -0
- package/dist/server/tests/unit/server/runner.test.d.ts +2 -0
- package/dist/server/tests/unit/server/runner.test.d.ts.map +1 -0
- package/dist/server/tests/unit/server/runner.test.js +488 -0
- package/dist/server/tests/unit/server/setup.d.ts +2 -0
- package/dist/server/tests/unit/server/setup.d.ts.map +1 -0
- package/dist/server/tests/unit/server/setup.js +21 -0
- package/dist/server/tests/unit/services/gateway-logging.test.d.ts +2 -0
- package/dist/server/tests/unit/services/gateway-logging.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/gateway-logging.test.js +47 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.js +140 -0
- package/dist/server/tests/unit/services/hub-manager.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-manager.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-manager.test.js +98 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.js +674 -0
- package/dist/server/tests/unit/services/search/search-cache.test.d.ts +2 -0
- package/dist/server/tests/unit/services/search/search-cache.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/search/search-cache.test.js +58 -0
- package/dist/server/tests/unit/services/search/search-core.service.test.d.ts +2 -0
- package/dist/server/tests/unit/services/search/search-core.service.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/search/search-core.service.test.js +84 -0
- package/dist/server/tests/unit/services/search/search-scorer.test.d.ts +2 -0
- package/dist/server/tests/unit/services/search/search-scorer.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/search/search-scorer.test.js +97 -0
- package/dist/server/tests/unit/services/session-manager.test.d.ts +2 -0
- package/dist/server/tests/unit/services/session-manager.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/session-manager.test.js +481 -0
- package/dist/server/tests/unit/utils/config.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/config.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/config.test.js +634 -0
- package/dist/server/tests/unit/utils/json-utils.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/json-utils.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/json-utils.test.js +296 -0
- package/dist/server/tests/unit/utils/log-rotator.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/log-rotator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/log-rotator.test.js +296 -0
- package/dist/server/tests/unit/utils/logger.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/logger.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/logger.test.js +462 -0
- package/dist/server/tests/unit/utils/mcp-error-handler.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/mcp-error-handler.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/mcp-error-handler.test.js +163 -0
- package/dist/server/tests/unit/utils/request-context.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/request-context.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/request-context.test.js +82 -0
- package/dist/server/vite.config.d.ts +3 -0
- package/dist/server/vite.config.d.ts.map +1 -0
- package/dist/server/vite.config.js +160 -0
- package/dist/server/vitest.config.d.ts +3 -0
- package/dist/server/vitest.config.d.ts.map +1 -0
- package/dist/server/vitest.config.js +53 -0
- package/package.json +113 -0
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import { configManager } from '../config/config-manager.js';
|
|
2
|
+
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
3
|
+
import { mcpConnectionManager } from './mcp-connection-manager.js';
|
|
4
|
+
import { eventBus, EventTypes } from './event-bus.service.js';
|
|
5
|
+
/**
|
|
6
|
+
* Manages MCP server configurations and lifecycle operations through the configuration manager.
|
|
7
|
+
*
|
|
8
|
+
* This service provides a comprehensive interface for CRUD operations on MCP servers,
|
|
9
|
+
* including batch operations for performance optimization, instance management, and
|
|
10
|
+
* event-driven communication with other system components. It serves as the primary
|
|
11
|
+
* entry point for server management operations in the MCP Hub Lite system.
|
|
12
|
+
*
|
|
13
|
+
* The service integrates with the configuration manager for persistence and the
|
|
14
|
+
* MCP connection manager for automatic connection handling, while publishing
|
|
15
|
+
* events to notify other components of state changes.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const hubManager = new HubManagerService();
|
|
20
|
+
* await hubManager.addServer('my-server', { type: 'stdio', command: 'npx my-mcp' });
|
|
21
|
+
* await hubManager.removeServer('my-server');
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export class HubManagerService {
|
|
25
|
+
configManager;
|
|
26
|
+
constructor(manager = configManager) {
|
|
27
|
+
this.configManager = manager;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Adds multiple server configurations in a single batch operation without auto-starting.
|
|
31
|
+
*
|
|
32
|
+
* This method optimizes performance for bulk server addition by batching configuration
|
|
33
|
+
* updates and saving the configuration only once at the end. It publishes SERVER_ADDED
|
|
34
|
+
* events for each newly added server to notify other system components.
|
|
35
|
+
*
|
|
36
|
+
* @param {Array<{ name: string; config: Partial<ServerConfig> }>} servers - Array of server configurations to add
|
|
37
|
+
* @returns {Promise<void>} Resolves when all servers are added and configuration is saved
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* await hubManager.addServersWithoutAutoStart([
|
|
42
|
+
* { name: 'server1', config: { type: 'stdio', command: 'npx server1' } },
|
|
43
|
+
* { name: 'server2', config: { type: 'http', url: 'http://localhost:8080' } }
|
|
44
|
+
* ]);
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
async addServersWithoutAutoStart(servers) {
|
|
48
|
+
await this.configManager.addServers(servers);
|
|
49
|
+
// Publish SERVER_ADDED event for all newly added servers
|
|
50
|
+
for (const { name } of servers) {
|
|
51
|
+
const serverConfig = this.getServerByName(name);
|
|
52
|
+
if (serverConfig) {
|
|
53
|
+
eventBus.publish(EventTypes.SERVER_ADDED, { name, config: serverConfig });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Creates server instances for multiple servers without automatically connecting them.
|
|
59
|
+
*
|
|
60
|
+
* This method iterates through the provided server names and creates a new instance
|
|
61
|
+
* for each server using the configuration manager. It publishes SERVER_INSTANCE_ADDED
|
|
62
|
+
* events for each created instance to notify other system components.
|
|
63
|
+
*
|
|
64
|
+
* @param {string[]} serverNames - Array of server names to create instances for
|
|
65
|
+
* @returns {Promise<void>} Resolves when all instances are created
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* await hubManager.addServerInstancesWithoutConnect(['server1', 'server2']);
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
async addServerInstancesWithoutConnect(serverNames) {
|
|
73
|
+
for (const name of serverNames) {
|
|
74
|
+
await this.configManager.addServerInstance(name, {});
|
|
75
|
+
const instances = this.getServerInstanceByName(name);
|
|
76
|
+
const lastInstance = instances[instances.length - 1];
|
|
77
|
+
eventBus.publish(EventTypes.SERVER_INSTANCE_ADDED, { name, instance: lastInstance });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Concurrently connects to multiple server instances using Promise.all for efficiency.
|
|
82
|
+
*
|
|
83
|
+
* This method iterates through the provided server names, retrieves their configurations
|
|
84
|
+
* and instances, and attempts to connect to each instance concurrently. It only attempts
|
|
85
|
+
* to connect to servers that are enabled in their configuration. Errors during connection
|
|
86
|
+
* are logged but don't prevent other connections from proceeding.
|
|
87
|
+
*
|
|
88
|
+
* @param {string[]} serverNames - Array of server names to connect instances for
|
|
89
|
+
* @returns {Promise<void>} Resolves when all connection attempts complete
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* await hubManager.connectServerInstances(['server1', 'server2']);
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
async connectServerInstances(serverNames) {
|
|
97
|
+
const connectPromises = serverNames.map(async (name) => {
|
|
98
|
+
const server = this.getServerByName(name);
|
|
99
|
+
if (server && server.enabled !== false) {
|
|
100
|
+
const instances = this.getServerInstanceByName(name);
|
|
101
|
+
for (const instance of instances) {
|
|
102
|
+
try {
|
|
103
|
+
await mcpConnectionManager.connect({ ...server, ...instance });
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
logger.error(`Failed to connect server instance for ${name}:`, error, LOG_MODULES.HUB_MANAGER);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
// Execute concurrently using Promise.all
|
|
112
|
+
await Promise.all(connectPromises);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Retrieves all configured servers with their names and configurations.
|
|
116
|
+
*
|
|
117
|
+
* This method delegates to the configuration manager to return a complete list of
|
|
118
|
+
* all servers that have been configured in the system, including their full
|
|
119
|
+
* configuration objects.
|
|
120
|
+
*
|
|
121
|
+
* @returns {Array<{ name: string; config: ServerConfig }>} Array of all configured servers
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* ```typescript
|
|
125
|
+
* const servers = hubManager.getAllServers();
|
|
126
|
+
* console.log(`Total servers: ${servers.length}`);
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
getAllServers() {
|
|
130
|
+
return this.configManager.getServers();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Retrieves a server configuration and instance by its unique instance ID.
|
|
134
|
+
*
|
|
135
|
+
* This method performs an O(n) search across all servers and their instances to find
|
|
136
|
+
* the matching instance ID. It returns a composite object containing the server name,
|
|
137
|
+
* full configuration, and specific instance configuration.
|
|
138
|
+
*
|
|
139
|
+
* @param {string} id - Unique instance ID to search for
|
|
140
|
+
* @returns {{ name: string; config: ServerConfig; instance: ServerInstanceConfig } | undefined}
|
|
141
|
+
* Composite server/instance object or undefined if not found
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```typescript
|
|
145
|
+
* const serverInfo = hubManager.getServerById('instance-123');
|
|
146
|
+
* if (serverInfo) {
|
|
147
|
+
* console.log(`Found server: ${serverInfo.name}`);
|
|
148
|
+
* }
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
getServerById(id) {
|
|
152
|
+
// Iterate through all servers and instances to find matching id
|
|
153
|
+
const serverInstances = this.configManager.getServerInstances();
|
|
154
|
+
for (const [serverName, instances] of Object.entries(serverInstances)) {
|
|
155
|
+
const instance = instances.find((inst) => inst.id === id);
|
|
156
|
+
if (instance) {
|
|
157
|
+
const serverConfig = this.configManager.getServerByName(serverName);
|
|
158
|
+
if (serverConfig) {
|
|
159
|
+
return {
|
|
160
|
+
name: serverName,
|
|
161
|
+
config: serverConfig,
|
|
162
|
+
instance
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Retrieves a server configuration by its name.
|
|
171
|
+
*
|
|
172
|
+
* This method delegates to the configuration manager to return the full configuration
|
|
173
|
+
* for a server with the specified name, or undefined if no such server exists.
|
|
174
|
+
*
|
|
175
|
+
* @param {string} name - Server name to look up
|
|
176
|
+
* @returns {ServerConfig | undefined} Full server configuration or undefined if not found
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* ```typescript
|
|
180
|
+
* const config = hubManager.getServerByName('my-server');
|
|
181
|
+
* if (config) {
|
|
182
|
+
* console.log(`Server type: ${config.type}`);
|
|
183
|
+
* }
|
|
184
|
+
* ```
|
|
185
|
+
*/
|
|
186
|
+
getServerByName(name) {
|
|
187
|
+
return this.configManager.getServerByName(name);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Retrieves all server instances grouped by server name.
|
|
191
|
+
*
|
|
192
|
+
* This method returns a record mapping server names to arrays of their instance configurations,
|
|
193
|
+
* providing a complete view of all server instances in the system.
|
|
194
|
+
*
|
|
195
|
+
* @returns {Record<string, ServerInstanceConfig[]>} Object mapping server names to instance arrays
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```typescript
|
|
199
|
+
* const instances = hubManager.getServerInstances();
|
|
200
|
+
* Object.entries(instances).forEach(([name, instances]) => {
|
|
201
|
+
* console.log(`${name} has ${instances.length} instances`);
|
|
202
|
+
* });
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
getServerInstances() {
|
|
206
|
+
return this.configManager.getServerInstances();
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Retrieves all instances for a specific server by name.
|
|
210
|
+
*
|
|
211
|
+
* This method returns an array of all instance configurations for the specified server,
|
|
212
|
+
* or an empty array if the server doesn't exist or has no instances.
|
|
213
|
+
*
|
|
214
|
+
* @param {string} name - Server name to get instances for
|
|
215
|
+
* @returns {ServerInstanceConfig[]} Array of instance configurations for the server
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* ```typescript
|
|
219
|
+
* const instances = hubManager.getServerInstanceByName('my-server');
|
|
220
|
+
* console.log(`Server has ${instances.length} instances`);
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
getServerInstanceByName(name) {
|
|
224
|
+
return this.configManager.getServerInstanceByName(name);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Adds a new server configuration to the system.
|
|
228
|
+
*
|
|
229
|
+
* This method creates a new server with the specified name and configuration,
|
|
230
|
+
* logs the addition, and publishes a SERVER_ADDED event to notify other system components.
|
|
231
|
+
* The method returns the complete server configuration after validation and normalization.
|
|
232
|
+
*
|
|
233
|
+
* @param {string} name - Unique name for the new server
|
|
234
|
+
* @param {Partial<ServerConfig>} config - Partial server configuration to merge with defaults
|
|
235
|
+
* @returns {Promise<ServerConfig>} Complete server configuration after creation
|
|
236
|
+
*
|
|
237
|
+
* @example
|
|
238
|
+
* ```typescript
|
|
239
|
+
* const config = await hubManager.addServer('my-server', {
|
|
240
|
+
* type: 'stdio',
|
|
241
|
+
* command: 'npx my-mcp-server'
|
|
242
|
+
* });
|
|
243
|
+
* console.log('Server added successfully');
|
|
244
|
+
* ```
|
|
245
|
+
*/
|
|
246
|
+
async addServer(name, config) {
|
|
247
|
+
const newServer = await this.configManager.addServer(name, config);
|
|
248
|
+
logger.info(`Server added: [${name}]`, LOG_MODULES.HUB_MANAGER);
|
|
249
|
+
// Publish server added event
|
|
250
|
+
eventBus.publish(EventTypes.SERVER_ADDED, { name, config: newServer });
|
|
251
|
+
return newServer;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Adds a new instance to an existing server and optionally connects to it.
|
|
255
|
+
*
|
|
256
|
+
* This method creates a new instance for the specified server, and if the server is enabled,
|
|
257
|
+
* automatically attempts to connect to the new instance. It publishes a SERVER_INSTANCE_ADDED
|
|
258
|
+
* event to notify other system components and returns the complete instance configuration.
|
|
259
|
+
*
|
|
260
|
+
* @param {string} name - Name of the existing server to add an instance to
|
|
261
|
+
* @param {Partial<ServerInstanceConfig>} instance - Partial instance configuration to merge with defaults
|
|
262
|
+
* @returns {Promise<ServerInstanceConfig>} Complete instance configuration after creation
|
|
263
|
+
* @throws {Error} If the server doesn't exist or connection fails (logged but not thrown)
|
|
264
|
+
*
|
|
265
|
+
* @example
|
|
266
|
+
* ```typescript
|
|
267
|
+
* const instance = await hubManager.addServerInstance('my-server', {
|
|
268
|
+
* cwd: '/path/to/working/directory'
|
|
269
|
+
* });
|
|
270
|
+
* console.log('Server instance added successfully');
|
|
271
|
+
* ```
|
|
272
|
+
*/
|
|
273
|
+
async addServerInstance(name, instance) {
|
|
274
|
+
const newInstance = await this.configManager.addServerInstance(name, instance);
|
|
275
|
+
logger.info(`Server instance added for server: [${name}]`, LOG_MODULES.HUB_MANAGER);
|
|
276
|
+
// If server config is enabled, attempt to connect
|
|
277
|
+
const server = this.getServerByName(name);
|
|
278
|
+
if (server && server.enabled !== false) {
|
|
279
|
+
try {
|
|
280
|
+
await mcpConnectionManager.connect({ ...server, ...newInstance });
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
logger.error(`Failed to auto-connect server instance for ${name}:`, error, LOG_MODULES.HUB_MANAGER);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
eventBus.publish(EventTypes.SERVER_INSTANCE_ADDED, { name, instance: newInstance });
|
|
287
|
+
return newInstance;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Updates an existing server configuration with new values.
|
|
291
|
+
*
|
|
292
|
+
* This method validates that the server exists before applying updates, logs the operation,
|
|
293
|
+
* and publishes a SERVER_UPDATED event to notify other system components. It returns the
|
|
294
|
+
* updated server configuration or null if the server doesn't exist.
|
|
295
|
+
*
|
|
296
|
+
* @param {string} name - Name of the server to update
|
|
297
|
+
* @param {Partial<ServerConfig>} updates - Partial configuration updates to apply
|
|
298
|
+
* @returns {Promise<ServerConfig | null>} Updated server configuration or null if not found
|
|
299
|
+
*
|
|
300
|
+
* @example
|
|
301
|
+
* ```typescript
|
|
302
|
+
* const updated = await hubManager.updateServer('my-server', {
|
|
303
|
+
* enabled: false
|
|
304
|
+
* });
|
|
305
|
+
* if (updated) {
|
|
306
|
+
* console.log('Server updated successfully');
|
|
307
|
+
* }
|
|
308
|
+
* ```
|
|
309
|
+
*/
|
|
310
|
+
async updateServer(name, updates) {
|
|
311
|
+
const existing = this.getServerByName(name);
|
|
312
|
+
if (!existing) {
|
|
313
|
+
logger.warn(`Attempted to update non-existent server: ${name}`, LOG_MODULES.HUB_MANAGER);
|
|
314
|
+
return null;
|
|
315
|
+
}
|
|
316
|
+
await this.configManager.updateServer(name, updates);
|
|
317
|
+
logger.info(`Server updated: ${name}`, LOG_MODULES.HUB_MANAGER);
|
|
318
|
+
const updatedServer = this.getServerByName(name) || null;
|
|
319
|
+
if (updatedServer) {
|
|
320
|
+
eventBus.publish(EventTypes.SERVER_UPDATED, { name, config: updatedServer });
|
|
321
|
+
}
|
|
322
|
+
return updatedServer;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Updates a specific server instance at the given index.
|
|
326
|
+
*
|
|
327
|
+
* This method applies updates to the server instance at the specified index within the
|
|
328
|
+
* server's instance array, logs the operation, and publishes a SERVER_INSTANCE_UPDATED
|
|
329
|
+
* event to notify other system components.
|
|
330
|
+
*
|
|
331
|
+
* @param {string} name - Name of the server containing the instance to update
|
|
332
|
+
* @param {number} index - Index of the instance within the server's instance array
|
|
333
|
+
* @param {Partial<ServerInstanceConfig>} updates - Partial instance configuration updates to apply
|
|
334
|
+
* @returns {Promise<void>} Resolves when the update is complete
|
|
335
|
+
* @throws {Error} If the server or instance index doesn't exist
|
|
336
|
+
*
|
|
337
|
+
* @example
|
|
338
|
+
* ```typescript
|
|
339
|
+
* await hubManager.updateServerInstance('my-server', 0, {
|
|
340
|
+
* cwd: '/new/working/directory'
|
|
341
|
+
* });
|
|
342
|
+
* console.log('Server instance updated successfully');
|
|
343
|
+
* ```
|
|
344
|
+
*/
|
|
345
|
+
async updateServerInstance(name, index, updates) {
|
|
346
|
+
await this.configManager.updateServerInstance(name, index, updates);
|
|
347
|
+
logger.info(`Server instance updated for server: [${name}] at index: ${index}`, LOG_MODULES.HUB_MANAGER);
|
|
348
|
+
eventBus.publish(EventTypes.SERVER_INSTANCE_UPDATED, { name, index, updates });
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Removes a server and all its instances from the system.
|
|
352
|
+
*
|
|
353
|
+
* This method performs a graceful shutdown by first disconnecting all instances of the server,
|
|
354
|
+
* then removing the server configuration from the system. It publishes a SERVER_DELETED event
|
|
355
|
+
* to notify other system components and returns true if the server existed and was removed.
|
|
356
|
+
*
|
|
357
|
+
* @param {string} name - Name of the server to remove
|
|
358
|
+
* @returns {Promise<boolean>} True if server existed and was removed, false if not found
|
|
359
|
+
*
|
|
360
|
+
* @example
|
|
361
|
+
* ```typescript
|
|
362
|
+
* const removed = await hubManager.removeServer('my-server');
|
|
363
|
+
* if (removed) {
|
|
364
|
+
* console.log('Server removed successfully');
|
|
365
|
+
* }
|
|
366
|
+
* ```
|
|
367
|
+
*/
|
|
368
|
+
async removeServer(name) {
|
|
369
|
+
const existing = this.getServerByName(name);
|
|
370
|
+
if (!existing) {
|
|
371
|
+
return false;
|
|
372
|
+
}
|
|
373
|
+
// Disconnect all instances of this server
|
|
374
|
+
const instances = this.getServerInstanceByName(name);
|
|
375
|
+
for (const instance of instances) {
|
|
376
|
+
await mcpConnectionManager.disconnect(instance.id).catch(() => { });
|
|
377
|
+
}
|
|
378
|
+
await this.configManager.removeServer(name);
|
|
379
|
+
logger.info(`Server removed: ${name}`, LOG_MODULES.HUB_MANAGER);
|
|
380
|
+
eventBus.publish(EventTypes.SERVER_DELETED, name);
|
|
381
|
+
return true;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Removes a specific server instance at the given index.
|
|
385
|
+
*
|
|
386
|
+
* This method performs a graceful shutdown by first disconnecting the specified instance,
|
|
387
|
+
* then removing it from the server's instance array. It publishes a SERVER_INSTANCE_DELETED
|
|
388
|
+
* event to notify other system components and logs the operation.
|
|
389
|
+
*
|
|
390
|
+
* @param {string} name - Name of the server containing the instance to remove
|
|
391
|
+
* @param {number} index - Index of the instance within the server's instance array
|
|
392
|
+
* @returns {Promise<void>} Resolves when the instance is removed
|
|
393
|
+
* @throws {Error} If the server doesn't exist or the index is out of bounds
|
|
394
|
+
*
|
|
395
|
+
* @example
|
|
396
|
+
* ```typescript
|
|
397
|
+
* await hubManager.removeServerInstance('my-server', 0);
|
|
398
|
+
* console.log('Server instance removed successfully');
|
|
399
|
+
* ```
|
|
400
|
+
*/
|
|
401
|
+
async removeServerInstance(name, index) {
|
|
402
|
+
const instances = this.getServerInstanceByName(name);
|
|
403
|
+
if (index >= 0 && index < instances.length) {
|
|
404
|
+
const instance = instances[index];
|
|
405
|
+
// Disconnect this instance
|
|
406
|
+
await mcpConnectionManager.disconnect(instance.id).catch(() => { });
|
|
407
|
+
}
|
|
408
|
+
await this.configManager.removeServerInstance(name, index);
|
|
409
|
+
logger.info(`Server instance removed for server: [${name}] at index: ${index}`, LOG_MODULES.HUB_MANAGER);
|
|
410
|
+
eventBus.publish(EventTypes.SERVER_INSTANCE_DELETED, { name, index });
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
export const hubManager = new HubManagerService();
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { HubToolsService, hubToolsService } from '../hub-tools.service.js';
|
|
2
|
+
export type { RequestOptions, ServerInstanceInfo, ValidServer } from './types.js';
|
|
3
|
+
export { hasValidId, selectBestInstance } from './server-selector.js';
|
|
4
|
+
export { getSystemTools } from './system-tool-definitions.js';
|
|
5
|
+
export type { ToolAnnotations, SystemToolDefinition } from './system-tool-definitions.js';
|
|
6
|
+
export { findServers, findToolsInServer, findTools } from './tool-search.js';
|
|
7
|
+
export type { SearchOptions } from './tool-search.js';
|
|
8
|
+
export { generateDynamicResources, readResource } from './resource-generator.js';
|
|
9
|
+
export type { ServerMetadata } from './resource-generator.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/hub-tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG3E,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7E,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACjF,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Re-export the original service for backward compatibility
|
|
2
|
+
export { HubToolsService, hubToolsService } from '../hub-tools.service.js';
|
|
3
|
+
export { hasValidId, selectBestInstance } from './server-selector.js';
|
|
4
|
+
export { getSystemTools } from './system-tool-definitions.js';
|
|
5
|
+
export { findServers, findToolsInServer, findTools } from './tool-search.js';
|
|
6
|
+
export { generateDynamicResources, readResource } from './resource-generator.js';
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { Resource } from '../../../shared/models/resource.model.js';
|
|
2
|
+
import type { ServerStatus } from '../../../shared/types/common.types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Server metadata resource content.
|
|
5
|
+
*/
|
|
6
|
+
export interface ServerMetadata {
|
|
7
|
+
name: string;
|
|
8
|
+
status: ServerStatus;
|
|
9
|
+
toolsCount: number;
|
|
10
|
+
resourcesCount: number;
|
|
11
|
+
tags: Record<string, string>;
|
|
12
|
+
lastHeartbeat: number;
|
|
13
|
+
uptime: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Generates dynamic Hub resources based on currently connected MCP servers.
|
|
17
|
+
*
|
|
18
|
+
* This method creates virtual resources that represent the current state of connected
|
|
19
|
+
* servers, including server metadata, available tools, and server resources. Each
|
|
20
|
+
* resource has a unique URI following the hub://servers/{serverName}[/type] pattern.
|
|
21
|
+
*
|
|
22
|
+
* The generated resources include:
|
|
23
|
+
* - Server metadata: hub://servers/{serverName}
|
|
24
|
+
* - Tools list: hub://servers/{serverName}/tools
|
|
25
|
+
* - Resources list: hub://servers/{serverName}/resources (only if server has resources)
|
|
26
|
+
*
|
|
27
|
+
* @returns {Resource[]} Array of dynamically generated MCP resource objects
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const resources = generateDynamicResources();
|
|
32
|
+
* console.log(`Generated ${resources.length} dynamic resources`);
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function generateDynamicResources(): Resource[];
|
|
36
|
+
/**
|
|
37
|
+
* Reads content from a specific Hub resource URI.
|
|
38
|
+
*
|
|
39
|
+
* This method provides access to dynamically generated Hub resources by parsing the URI
|
|
40
|
+
* and returning the appropriate content based on the resource type. It supports three
|
|
41
|
+
* types of resources:
|
|
42
|
+
* - Server metadata: hub://servers/{serverName}
|
|
43
|
+
* - Tools list: hub://servers/{serverName}/tools
|
|
44
|
+
* - Resources list: hub://servers/{serverName}/resources
|
|
45
|
+
*
|
|
46
|
+
* The method includes comprehensive validation of URI format and server existence,
|
|
47
|
+
* throwing descriptive errors for invalid requests.
|
|
48
|
+
*
|
|
49
|
+
* @param {string} uri - Resource URI to read (e.g., hub://servers/server-name)
|
|
50
|
+
* @returns {Promise<ServerMetadata | Tool[] | Resource[]>} Resource content based on URI type
|
|
51
|
+
* @throws {Error} If URI format is invalid, server not found, or resource type unknown
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* // Read server metadata
|
|
56
|
+
* const serverInfo = await readResource('hub://servers/my-mcp-server');
|
|
57
|
+
*
|
|
58
|
+
* // Read tools list
|
|
59
|
+
* const tools = await readResource('hub://servers/my-mcp-server/tools');
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function readResource(uri: string): Promise<ServerMetadata | Resource[]>;
|
|
63
|
+
//# sourceMappingURL=resource-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-generator.d.ts","sourceRoot":"","sources":["../../../../../src/services/hub-tools/resource-generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGlE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,IAAI,QAAQ,EAAE,CAqDrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,QAAQ,EAAE,CAAC,CAgDpF"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { hubManager } from '../hub-manager.service.js';
|
|
2
|
+
import { mcpConnectionManager } from '../mcp-connection-manager.js';
|
|
3
|
+
import { hasValidId, selectBestInstance } from './server-selector.js';
|
|
4
|
+
/**
|
|
5
|
+
* Generates dynamic Hub resources based on currently connected MCP servers.
|
|
6
|
+
*
|
|
7
|
+
* This method creates virtual resources that represent the current state of connected
|
|
8
|
+
* servers, including server metadata, available tools, and server resources. Each
|
|
9
|
+
* resource has a unique URI following the hub://servers/{serverName}[/type] pattern.
|
|
10
|
+
*
|
|
11
|
+
* The generated resources include:
|
|
12
|
+
* - Server metadata: hub://servers/{serverName}
|
|
13
|
+
* - Tools list: hub://servers/{serverName}/tools
|
|
14
|
+
* - Resources list: hub://servers/{serverName}/resources (only if server has resources)
|
|
15
|
+
*
|
|
16
|
+
* @returns {Resource[]} Array of dynamically generated MCP resource objects
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const resources = generateDynamicResources();
|
|
21
|
+
* console.log(`Generated ${resources.length} dynamic resources`);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function generateDynamicResources() {
|
|
25
|
+
const resources = [];
|
|
26
|
+
// Use the same access pattern as tools - directly access manager cache
|
|
27
|
+
const servers = hubManager.getAllServers();
|
|
28
|
+
for (const server of servers) {
|
|
29
|
+
if (!hasValidId(server) || !server.config.enabled) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const bestInstance = selectBestInstance(server.name);
|
|
33
|
+
if (!bestInstance || !bestInstance.instance.id) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const instanceId = bestInstance.instance.id;
|
|
37
|
+
// Server metadata resource
|
|
38
|
+
resources.push({
|
|
39
|
+
uri: `hub://servers/${server.name}`,
|
|
40
|
+
name: `Server: ${server.name}`,
|
|
41
|
+
description: server.config.description || `Connected MCP server: ${server.name}`,
|
|
42
|
+
mimeType: 'application/json',
|
|
43
|
+
serverId: instanceId
|
|
44
|
+
});
|
|
45
|
+
// Tools resource - only add if server has tools
|
|
46
|
+
const tools = mcpConnectionManager.getTools(instanceId);
|
|
47
|
+
if (tools.length > 0) {
|
|
48
|
+
resources.push({
|
|
49
|
+
uri: `hub://servers/${server.name}/tools`,
|
|
50
|
+
name: `Tools: ${server.name}`,
|
|
51
|
+
description: `${tools.length} tools available from ${server.name}`,
|
|
52
|
+
mimeType: 'application/json',
|
|
53
|
+
serverId: instanceId
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
// Resources resource - only add if server has resources
|
|
57
|
+
const serverResources = mcpConnectionManager.getResources(instanceId);
|
|
58
|
+
if (serverResources.length > 0) {
|
|
59
|
+
resources.push({
|
|
60
|
+
uri: `hub://servers/${server.name}/resources`,
|
|
61
|
+
name: `Resources: ${server.name}`,
|
|
62
|
+
description: `${serverResources.length} resources available from ${server.name}`,
|
|
63
|
+
mimeType: 'application/json',
|
|
64
|
+
serverId: instanceId
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return resources;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Reads content from a specific Hub resource URI.
|
|
72
|
+
*
|
|
73
|
+
* This method provides access to dynamically generated Hub resources by parsing the URI
|
|
74
|
+
* and returning the appropriate content based on the resource type. It supports three
|
|
75
|
+
* types of resources:
|
|
76
|
+
* - Server metadata: hub://servers/{serverName}
|
|
77
|
+
* - Tools list: hub://servers/{serverName}/tools
|
|
78
|
+
* - Resources list: hub://servers/{serverName}/resources
|
|
79
|
+
*
|
|
80
|
+
* The method includes comprehensive validation of URI format and server existence,
|
|
81
|
+
* throwing descriptive errors for invalid requests.
|
|
82
|
+
*
|
|
83
|
+
* @param {string} uri - Resource URI to read (e.g., hub://servers/server-name)
|
|
84
|
+
* @returns {Promise<ServerMetadata | Tool[] | Resource[]>} Resource content based on URI type
|
|
85
|
+
* @throws {Error} If URI format is invalid, server not found, or resource type unknown
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* // Read server metadata
|
|
90
|
+
* const serverInfo = await readResource('hub://servers/my-mcp-server');
|
|
91
|
+
*
|
|
92
|
+
* // Read tools list
|
|
93
|
+
* const tools = await readResource('hub://servers/my-mcp-server/tools');
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export async function readResource(uri) {
|
|
97
|
+
// Validate URI format
|
|
98
|
+
if (!uri.startsWith('hub://')) {
|
|
99
|
+
throw new Error(`Invalid Hub resource URI: ${uri}. Must start with 'hub://'`);
|
|
100
|
+
}
|
|
101
|
+
// Parse URI
|
|
102
|
+
const uriParts = uri.replace('hub://', '').split('/');
|
|
103
|
+
if (uriParts.length < 2 || uriParts[0] !== 'servers') {
|
|
104
|
+
throw new Error(`Invalid Hub resource URI format: ${uri}`);
|
|
105
|
+
}
|
|
106
|
+
const serverName = uriParts[1];
|
|
107
|
+
const resourceType = uriParts[2]; // 'tools', 'resources', or undefined for server metadata
|
|
108
|
+
// Check if server exists and is connected
|
|
109
|
+
const serverInfo = selectBestInstance(serverName);
|
|
110
|
+
if (!serverInfo) {
|
|
111
|
+
throw new Error(`Server not found or not connected: ${serverName}`);
|
|
112
|
+
}
|
|
113
|
+
const instanceId = serverInfo.instance.id;
|
|
114
|
+
// Return appropriate content based on resource type
|
|
115
|
+
if (!resourceType) {
|
|
116
|
+
// Server metadata
|
|
117
|
+
const serverConfig = hubManager.getServerByName(serverName);
|
|
118
|
+
const tools = mcpConnectionManager.getTools(instanceId);
|
|
119
|
+
const resources = mcpConnectionManager.getResources(instanceId);
|
|
120
|
+
return {
|
|
121
|
+
name: serverName,
|
|
122
|
+
status: serverInfo.instance.status,
|
|
123
|
+
toolsCount: tools.length,
|
|
124
|
+
resourcesCount: resources.length,
|
|
125
|
+
tags: serverConfig?.tags || {},
|
|
126
|
+
lastHeartbeat: serverInfo.instance.lastHeartbeat,
|
|
127
|
+
uptime: serverInfo.instance.uptime
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
else if (resourceType === 'tools') {
|
|
131
|
+
// Tools list
|
|
132
|
+
return mcpConnectionManager.getTools(instanceId);
|
|
133
|
+
}
|
|
134
|
+
else if (resourceType === 'resources') {
|
|
135
|
+
// Resources list
|
|
136
|
+
return mcpConnectionManager.getResources(instanceId);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
throw new Error(`Unknown resource type: ${resourceType}`);
|
|
140
|
+
}
|
|
141
|
+
}
|