@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.
Files changed (499) hide show
  1. package/CHANGELOG.md +228 -0
  2. package/LICENSE +21 -0
  3. package/README.md +354 -0
  4. package/dist/client/assets/HomeView-f901HeKw.js +1 -0
  5. package/dist/client/assets/ResourceDetailView-BdOaL_-o.css +1 -0
  6. package/dist/client/assets/ResourceDetailView-Bz66ZjfY.js +1 -0
  7. package/dist/client/assets/ResourcesView-CjMklkyv.css +1 -0
  8. package/dist/client/assets/ResourcesView-lI_fItfA.js +1 -0
  9. package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +1 -0
  10. package/dist/client/assets/ServerDashboard-Bgx8WVkx.js +2 -0
  11. package/dist/client/assets/ServerListView-Bws09jNR.css +1 -0
  12. package/dist/client/assets/ServerListView-CP6Ffkfx.js +30 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +1 -0
  14. package/dist/client/assets/SessionsView-D68qKR4D.js +1 -0
  15. package/dist/client/assets/SettingsView-BPYfO9BE.js +1 -0
  16. package/dist/client/assets/ToolCallDialog-Br8FNebN.js +1 -0
  17. package/dist/client/assets/ToolCallDialog-C7eh7jHE.css +1 -0
  18. package/dist/client/assets/ToolsView-B6hUiR43.js +1 -0
  19. package/dist/client/assets/ToolsView-BLnU8cV6.css +1 -0
  20. package/dist/client/assets/_baseClone-DCmK847M.js +1 -0
  21. package/dist/client/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
  22. package/dist/client/assets/el-form-item-BVMLpmVC.css +1 -0
  23. package/dist/client/assets/el-form-item-DM0q2hmO.js +12 -0
  24. package/dist/client/assets/el-input-BtI9NECe.js +1 -0
  25. package/dist/client/assets/el-input-CmuHb8HS.css +1 -0
  26. package/dist/client/assets/el-loading-CChNmKeI.js +1 -0
  27. package/dist/client/assets/el-loading-bpKhqqQq.css +1 -0
  28. package/dist/client/assets/el-overlay-B2ZKM6Up.css +1 -0
  29. package/dist/client/assets/el-overlay-lZZbPmsX.js +1 -0
  30. package/dist/client/assets/el-select-BXztu2b5.js +1 -0
  31. package/dist/client/assets/el-select-C0U_l4IZ.css +1 -0
  32. package/dist/client/assets/el-tab-pane-CnNoQHsR.css +1 -0
  33. package/dist/client/assets/el-tab-pane-Dy9ruaEX.js +1 -0
  34. package/dist/client/assets/el-table-column-98UyVgBH.js +1 -0
  35. package/dist/client/assets/el-table-column-T_mV9jNw.css +1 -0
  36. package/dist/client/assets/el-tag-B5lLT51E.js +1 -0
  37. package/dist/client/assets/el-tag-DjxZVOpb.css +1 -0
  38. package/dist/client/assets/event-BB_Ol6Sd.js +1 -0
  39. package/dist/client/assets/index-BgKcmWJr.js +1 -0
  40. package/dist/client/assets/index-BsDWtoIl.css +1 -0
  41. package/dist/client/assets/index-BzQXG7no.js +1 -0
  42. package/dist/client/assets/index-CSTs2jYk.js +2 -0
  43. package/dist/client/assets/omit-Bx5HJNV_.js +1 -0
  44. package/dist/client/assets/raf-B9VDMtMF.js +1 -0
  45. package/dist/client/assets/typescript-Bp3YSIOJ.js +1 -0
  46. package/dist/client/assets/vnode-B8aJx8u4.js +1 -0
  47. package/dist/client/assets/vue-vendor-6ny5zj9i.js +3 -0
  48. package/dist/client/index.html +15 -0
  49. package/dist/server/shared/index.d.ts +3 -0
  50. package/dist/server/shared/index.d.ts.map +1 -0
  51. package/dist/server/shared/index.js +2 -0
  52. package/dist/server/shared/models/index.d.ts +4 -0
  53. package/dist/server/shared/models/index.d.ts.map +1 -0
  54. package/dist/server/shared/models/index.js +3 -0
  55. package/dist/server/shared/models/resource.model.d.ts +8 -0
  56. package/dist/server/shared/models/resource.model.d.ts.map +1 -0
  57. package/dist/server/shared/models/resource.model.js +1 -0
  58. package/dist/server/shared/models/server.model.d.ts +57 -0
  59. package/dist/server/shared/models/server.model.d.ts.map +1 -0
  60. package/dist/server/shared/models/server.model.js +1 -0
  61. package/dist/server/shared/models/session.model.d.ts +73 -0
  62. package/dist/server/shared/models/session.model.d.ts.map +1 -0
  63. package/dist/server/shared/models/session.model.js +70 -0
  64. package/dist/server/shared/models/tool.model.d.ts +22 -0
  65. package/dist/server/shared/models/tool.model.d.ts.map +1 -0
  66. package/dist/server/shared/models/tool.model.js +1 -0
  67. package/dist/server/shared/types/client.types.d.ts +35 -0
  68. package/dist/server/shared/types/client.types.d.ts.map +1 -0
  69. package/dist/server/shared/types/client.types.js +5 -0
  70. package/dist/server/shared/types/common.types.d.ts +5 -0
  71. package/dist/server/shared/types/common.types.d.ts.map +1 -0
  72. package/dist/server/shared/types/common.types.js +2 -0
  73. package/dist/server/shared/types/index.d.ts +4 -0
  74. package/dist/server/shared/types/index.d.ts.map +1 -0
  75. package/dist/server/shared/types/index.js +3 -0
  76. package/dist/server/shared/types/session.types.d.ts +15 -0
  77. package/dist/server/shared/types/session.types.d.ts.map +1 -0
  78. package/dist/server/shared/types/session.types.js +5 -0
  79. package/dist/server/shared/types/websocket.types.d.ts +177 -0
  80. package/dist/server/shared/types/websocket.types.d.ts.map +1 -0
  81. package/dist/server/shared/types/websocket.types.js +25 -0
  82. package/dist/server/src/api/mcp/debug-response-wrapper.d.ts +13 -0
  83. package/dist/server/src/api/mcp/debug-response-wrapper.d.ts.map +1 -0
  84. package/dist/server/src/api/mcp/debug-response-wrapper.js +271 -0
  85. package/dist/server/src/api/mcp/gateway.d.ts +14 -0
  86. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -0
  87. package/dist/server/src/api/mcp/gateway.js +116 -0
  88. package/dist/server/src/api/mcp/session-context-extractor.d.ts +47 -0
  89. package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -0
  90. package/dist/server/src/api/mcp/session-context-extractor.js +127 -0
  91. package/dist/server/src/api/mcp/sse-stream-manager.d.ts +13 -0
  92. package/dist/server/src/api/mcp/sse-stream-manager.d.ts.map +1 -0
  93. package/dist/server/src/api/mcp/sse-stream-manager.js +40 -0
  94. package/dist/server/src/api/web/clients.d.ts +30 -0
  95. package/dist/server/src/api/web/clients.d.ts.map +1 -0
  96. package/dist/server/src/api/web/clients.js +41 -0
  97. package/dist/server/src/api/web/config.d.ts +21 -0
  98. package/dist/server/src/api/web/config.d.ts.map +1 -0
  99. package/dist/server/src/api/web/config.js +119 -0
  100. package/dist/server/src/api/web/health.d.ts +21 -0
  101. package/dist/server/src/api/web/health.d.ts.map +1 -0
  102. package/dist/server/src/api/web/health.js +24 -0
  103. package/dist/server/src/api/web/hub-tools.d.ts +30 -0
  104. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -0
  105. package/dist/server/src/api/web/hub-tools.js +202 -0
  106. package/dist/server/src/api/web/logs.d.ts +30 -0
  107. package/dist/server/src/api/web/logs.d.ts.map +1 -0
  108. package/dist/server/src/api/web/logs.js +141 -0
  109. package/dist/server/src/api/web/mcp-status.d.ts +29 -0
  110. package/dist/server/src/api/web/mcp-status.d.ts.map +1 -0
  111. package/dist/server/src/api/web/mcp-status.js +126 -0
  112. package/dist/server/src/api/web/resources.d.ts +28 -0
  113. package/dist/server/src/api/web/resources.d.ts.map +1 -0
  114. package/dist/server/src/api/web/resources.js +93 -0
  115. package/dist/server/src/api/web/search.d.ts +26 -0
  116. package/dist/server/src/api/web/search.d.ts.map +1 -0
  117. package/dist/server/src/api/web/search.js +62 -0
  118. package/dist/server/src/api/web/servers.d.ts +33 -0
  119. package/dist/server/src/api/web/servers.d.ts.map +1 -0
  120. package/dist/server/src/api/web/servers.js +235 -0
  121. package/dist/server/src/api/web/sessions.d.ts +29 -0
  122. package/dist/server/src/api/web/sessions.d.ts.map +1 -0
  123. package/dist/server/src/api/web/sessions.js +104 -0
  124. package/dist/server/src/api/ws/events.d.ts +29 -0
  125. package/dist/server/src/api/ws/events.d.ts.map +1 -0
  126. package/dist/server/src/api/ws/events.js +44 -0
  127. package/dist/server/src/api/ws/ws-handler.d.ts +83 -0
  128. package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -0
  129. package/dist/server/src/api/ws/ws-handler.js +217 -0
  130. package/dist/server/src/app.d.ts +24 -0
  131. package/dist/server/src/app.d.ts.map +1 -0
  132. package/dist/server/src/app.js +108 -0
  133. package/dist/server/src/cli/commands/list.d.ts +71 -0
  134. package/dist/server/src/cli/commands/list.d.ts.map +1 -0
  135. package/dist/server/src/cli/commands/list.js +97 -0
  136. package/dist/server/src/cli/commands/restart.d.ts +42 -0
  137. package/dist/server/src/cli/commands/restart.d.ts.map +1 -0
  138. package/dist/server/src/cli/commands/restart.js +61 -0
  139. package/dist/server/src/cli/commands/start.d.ts +43 -0
  140. package/dist/server/src/cli/commands/start.d.ts.map +1 -0
  141. package/dist/server/src/cli/commands/start.js +160 -0
  142. package/dist/server/src/cli/commands/status.d.ts +39 -0
  143. package/dist/server/src/cli/commands/status.d.ts.map +1 -0
  144. package/dist/server/src/cli/commands/status.js +164 -0
  145. package/dist/server/src/cli/commands/stop.d.ts +34 -0
  146. package/dist/server/src/cli/commands/stop.d.ts.map +1 -0
  147. package/dist/server/src/cli/commands/stop.js +47 -0
  148. package/dist/server/src/cli/commands/ui.d.ts +44 -0
  149. package/dist/server/src/cli/commands/ui.d.ts.map +1 -0
  150. package/dist/server/src/cli/commands/ui.js +95 -0
  151. package/dist/server/src/cli/index.d.ts +62 -0
  152. package/dist/server/src/cli/index.d.ts.map +1 -0
  153. package/dist/server/src/cli/index.js +88 -0
  154. package/dist/server/src/cli/parse-args.d.ts +108 -0
  155. package/dist/server/src/cli/parse-args.d.ts.map +1 -0
  156. package/dist/server/src/cli/parse-args.js +131 -0
  157. package/dist/server/src/cli/server.d.ts +171 -0
  158. package/dist/server/src/cli/server.d.ts.map +1 -0
  159. package/dist/server/src/cli/server.js +246 -0
  160. package/dist/server/src/config/config-change-logger.d.ts +16 -0
  161. package/dist/server/src/config/config-change-logger.d.ts.map +1 -0
  162. package/dist/server/src/config/config-change-logger.js +43 -0
  163. package/dist/server/src/config/config-loader.d.ts +22 -0
  164. package/dist/server/src/config/config-loader.d.ts.map +1 -0
  165. package/dist/server/src/config/config-loader.js +66 -0
  166. package/dist/server/src/config/config-manager.d.ts +158 -0
  167. package/dist/server/src/config/config-manager.d.ts.map +1 -0
  168. package/dist/server/src/config/config-manager.js +246 -0
  169. package/dist/server/src/config/config-saver.d.ts +16 -0
  170. package/dist/server/src/config/config-saver.d.ts.map +1 -0
  171. package/dist/server/src/config/config-saver.js +28 -0
  172. package/dist/server/src/config/config.schema.d.ts +108 -0
  173. package/dist/server/src/config/config.schema.d.ts.map +1 -0
  174. package/dist/server/src/config/config.schema.js +103 -0
  175. package/dist/server/src/config/server-config-manager.d.ts +74 -0
  176. package/dist/server/src/config/server-config-manager.d.ts.map +1 -0
  177. package/dist/server/src/config/server-config-manager.js +157 -0
  178. package/dist/server/src/config/type-converter.d.ts +13 -0
  179. package/dist/server/src/config/type-converter.d.ts.map +1 -0
  180. package/dist/server/src/config/type-converter.js +37 -0
  181. package/dist/server/src/index.d.ts +3 -0
  182. package/dist/server/src/index.d.ts.map +1 -0
  183. package/dist/server/src/index.js +352 -0
  184. package/dist/server/src/models/event.model.d.ts +106 -0
  185. package/dist/server/src/models/event.model.d.ts.map +1 -0
  186. package/dist/server/src/models/event.model.js +5 -0
  187. package/dist/server/src/models/server.model.d.ts +19 -0
  188. package/dist/server/src/models/server.model.d.ts.map +1 -0
  189. package/dist/server/src/models/server.model.js +1 -0
  190. package/dist/server/src/models/system-tools.constants.d.ts +73 -0
  191. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -0
  192. package/dist/server/src/models/system-tools.constants.js +31 -0
  193. package/dist/server/src/models/types.d.ts +84 -0
  194. package/dist/server/src/models/types.d.ts.map +1 -0
  195. package/dist/server/src/models/types.js +67 -0
  196. package/dist/server/src/pid/file.d.ts +26 -0
  197. package/dist/server/src/pid/file.d.ts.map +1 -0
  198. package/dist/server/src/pid/file.js +68 -0
  199. package/dist/server/src/pid/manager.d.ts +98 -0
  200. package/dist/server/src/pid/manager.d.ts.map +1 -0
  201. package/dist/server/src/pid/manager.js +158 -0
  202. package/dist/server/src/pid/types.d.ts +13 -0
  203. package/dist/server/src/pid/types.d.ts.map +1 -0
  204. package/dist/server/src/pid/types.js +4 -0
  205. package/dist/server/src/server/dev-server.d.ts +2 -0
  206. package/dist/server/src/server/dev-server.d.ts.map +1 -0
  207. package/dist/server/src/server/dev-server.js +171 -0
  208. package/dist/server/src/server/runner.d.ts +57 -0
  209. package/dist/server/src/server/runner.d.ts.map +1 -0
  210. package/dist/server/src/server/runner.js +163 -0
  211. package/dist/server/src/services/client-tracker.service.d.ts +132 -0
  212. package/dist/server/src/services/client-tracker.service.d.ts.map +1 -0
  213. package/dist/server/src/services/client-tracker.service.js +203 -0
  214. package/dist/server/src/services/connection/connection-manager.d.ts +478 -0
  215. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -0
  216. package/dist/server/src/services/connection/connection-manager.js +929 -0
  217. package/dist/server/src/services/connection/index.d.ts +6 -0
  218. package/dist/server/src/services/connection/index.d.ts.map +1 -0
  219. package/dist/server/src/services/connection/index.js +4 -0
  220. package/dist/server/src/services/connection/tool-cache.d.ts +122 -0
  221. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -0
  222. package/dist/server/src/services/connection/tool-cache.js +202 -0
  223. package/dist/server/src/services/connection/types.d.ts +30 -0
  224. package/dist/server/src/services/connection/types.d.ts.map +1 -0
  225. package/dist/server/src/services/connection/types.js +1 -0
  226. package/dist/server/src/services/event-bus.service.d.ts +169 -0
  227. package/dist/server/src/services/event-bus.service.d.ts.map +1 -0
  228. package/dist/server/src/services/event-bus.service.js +200 -0
  229. package/dist/server/src/services/gateway/gateway.service.d.ts +61 -0
  230. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -0
  231. package/dist/server/src/services/gateway/gateway.service.js +107 -0
  232. package/dist/server/src/services/gateway/index.d.ts +8 -0
  233. package/dist/server/src/services/gateway/index.d.ts.map +1 -0
  234. package/dist/server/src/services/gateway/index.js +6 -0
  235. package/dist/server/src/services/gateway/log-formatter.d.ts +26 -0
  236. package/dist/server/src/services/gateway/log-formatter.d.ts.map +1 -0
  237. package/dist/server/src/services/gateway/log-formatter.js +66 -0
  238. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts +13 -0
  239. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -0
  240. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +131 -0
  241. package/dist/server/src/services/gateway/request-handlers/index.d.ts +9 -0
  242. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -0
  243. package/dist/server/src/services/gateway/request-handlers/index.js +8 -0
  244. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +11 -0
  245. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -0
  246. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +85 -0
  247. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts +11 -0
  248. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -0
  249. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +56 -0
  250. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts +11 -0
  251. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -0
  252. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +228 -0
  253. package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts +11 -0
  254. package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -0
  255. package/dist/server/src/services/gateway/request-handlers/tools-handler.js +79 -0
  256. package/dist/server/src/services/gateway/tool-list-generator.d.ts +23 -0
  257. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -0
  258. package/dist/server/src/services/gateway/tool-list-generator.js +115 -0
  259. package/dist/server/src/services/gateway/types.d.ts +27 -0
  260. package/dist/server/src/services/gateway/types.d.ts.map +1 -0
  261. package/dist/server/src/services/gateway/types.js +4 -0
  262. package/dist/server/src/services/gateway.service.d.ts +7 -0
  263. package/dist/server/src/services/gateway.service.d.ts.map +1 -0
  264. package/dist/server/src/services/gateway.service.js +6 -0
  265. package/dist/server/src/services/hub-manager.service.d.ts +299 -0
  266. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -0
  267. package/dist/server/src/services/hub-manager.service.js +413 -0
  268. package/dist/server/src/services/hub-tools/index.d.ts +10 -0
  269. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -0
  270. package/dist/server/src/services/hub-tools/index.js +6 -0
  271. package/dist/server/src/services/hub-tools/resource-generator.d.ts +63 -0
  272. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -0
  273. package/dist/server/src/services/hub-tools/resource-generator.js +141 -0
  274. package/dist/server/src/services/hub-tools/server-selector.d.ts +63 -0
  275. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -0
  276. package/dist/server/src/services/hub-tools/server-selector.js +108 -0
  277. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +47 -0
  278. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -0
  279. package/dist/server/src/services/hub-tools/system-tool-definitions.js +225 -0
  280. package/dist/server/src/services/hub-tools/tool-search.d.ts +85 -0
  281. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -0
  282. package/dist/server/src/services/hub-tools/tool-search.js +115 -0
  283. package/dist/server/src/services/hub-tools/types.d.ts +42 -0
  284. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -0
  285. package/dist/server/src/services/hub-tools/types.js +1 -0
  286. package/dist/server/src/services/hub-tools.service.d.ts +235 -0
  287. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -0
  288. package/dist/server/src/services/hub-tools.service.js +457 -0
  289. package/dist/server/src/services/log-storage.service.d.ts +177 -0
  290. package/dist/server/src/services/log-storage.service.d.ts.map +1 -0
  291. package/dist/server/src/services/log-storage.service.js +243 -0
  292. package/dist/server/src/services/mcp-connection-manager.d.ts +7 -0
  293. package/dist/server/src/services/mcp-connection-manager.d.ts.map +1 -0
  294. package/dist/server/src/services/mcp-connection-manager.js +6 -0
  295. package/dist/server/src/services/mcp-session-manager.d.ts +6 -0
  296. package/dist/server/src/services/mcp-session-manager.d.ts.map +1 -0
  297. package/dist/server/src/services/mcp-session-manager.js +4 -0
  298. package/dist/server/src/services/search/index.d.ts +5 -0
  299. package/dist/server/src/services/search/index.d.ts.map +1 -0
  300. package/dist/server/src/services/search/index.js +5 -0
  301. package/dist/server/src/services/search/search-cache.d.ts +132 -0
  302. package/dist/server/src/services/search/search-cache.d.ts.map +1 -0
  303. package/dist/server/src/services/search/search-cache.js +151 -0
  304. package/dist/server/src/services/search/search-core.service.d.ts +108 -0
  305. package/dist/server/src/services/search/search-core.service.d.ts.map +1 -0
  306. package/dist/server/src/services/search/search-core.service.js +187 -0
  307. package/dist/server/src/services/search/search-scorer.d.ts +54 -0
  308. package/dist/server/src/services/search/search-scorer.d.ts.map +1 -0
  309. package/dist/server/src/services/search/search-scorer.js +83 -0
  310. package/dist/server/src/services/search/types.d.ts +20 -0
  311. package/dist/server/src/services/search/types.d.ts.map +1 -0
  312. package/dist/server/src/services/search/types.js +1 -0
  313. package/dist/server/src/services/session/index.d.ts +6 -0
  314. package/dist/server/src/services/session/index.d.ts.map +1 -0
  315. package/dist/server/src/services/session/index.js +4 -0
  316. package/dist/server/src/services/session/session-manager.d.ts +352 -0
  317. package/dist/server/src/services/session/session-manager.d.ts.map +1 -0
  318. package/dist/server/src/services/session/session-manager.js +835 -0
  319. package/dist/server/src/services/session/types.d.ts +32 -0
  320. package/dist/server/src/services/session/types.d.ts.map +1 -0
  321. package/dist/server/src/services/session/types.js +1 -0
  322. package/dist/server/src/services/simple-search.service.d.ts +67 -0
  323. package/dist/server/src/services/simple-search.service.d.ts.map +1 -0
  324. package/dist/server/src/services/simple-search.service.js +82 -0
  325. package/dist/server/src/services/system-tool-handler.d.ts +10 -0
  326. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -0
  327. package/dist/server/src/services/system-tool-handler.js +77 -0
  328. package/dist/server/src/utils/error-handler.d.ts +18 -0
  329. package/dist/server/src/utils/error-handler.d.ts.map +1 -0
  330. package/dist/server/src/utils/error-handler.js +59 -0
  331. package/dist/server/src/utils/format-utils.d.ts +23 -0
  332. package/dist/server/src/utils/format-utils.d.ts.map +1 -0
  333. package/dist/server/src/utils/format-utils.js +58 -0
  334. package/dist/server/src/utils/index.d.ts +2 -0
  335. package/dist/server/src/utils/index.d.ts.map +1 -0
  336. package/dist/server/src/utils/index.js +1 -0
  337. package/dist/server/src/utils/json-utils.d.ts +82 -0
  338. package/dist/server/src/utils/json-utils.d.ts.map +1 -0
  339. package/dist/server/src/utils/json-utils.js +204 -0
  340. package/dist/server/src/utils/log-rotator.d.ts +223 -0
  341. package/dist/server/src/utils/log-rotator.d.ts.map +1 -0
  342. package/dist/server/src/utils/log-rotator.js +306 -0
  343. package/dist/server/src/utils/logger/dev-logger.d.ts +39 -0
  344. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -0
  345. package/dist/server/src/utils/logger/dev-logger.js +63 -0
  346. package/dist/server/src/utils/logger/index.d.ts +36 -0
  347. package/dist/server/src/utils/logger/index.d.ts.map +1 -0
  348. package/dist/server/src/utils/logger/index.js +46 -0
  349. package/dist/server/src/utils/logger/log-colors.d.ts +27 -0
  350. package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -0
  351. package/dist/server/src/utils/logger/log-colors.js +41 -0
  352. package/dist/server/src/utils/logger/log-context.d.ts +13 -0
  353. package/dist/server/src/utils/logger/log-context.d.ts.map +1 -0
  354. package/dist/server/src/utils/logger/log-context.js +5 -0
  355. package/dist/server/src/utils/logger/log-formatter.d.ts +47 -0
  356. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -0
  357. package/dist/server/src/utils/logger/log-formatter.js +150 -0
  358. package/dist/server/src/utils/logger/log-modules.d.ts +141 -0
  359. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -0
  360. package/dist/server/src/utils/logger/log-modules.js +81 -0
  361. package/dist/server/src/utils/logger/log-output.d.ts +68 -0
  362. package/dist/server/src/utils/logger/log-output.d.ts.map +1 -0
  363. package/dist/server/src/utils/logger/log-output.js +320 -0
  364. package/dist/server/src/utils/logger/logger.d.ts +190 -0
  365. package/dist/server/src/utils/logger/logger.d.ts.map +1 -0
  366. package/dist/server/src/utils/logger/logger.js +350 -0
  367. package/dist/server/src/utils/logger.d.ts +12 -0
  368. package/dist/server/src/utils/logger.d.ts.map +1 -0
  369. package/dist/server/src/utils/logger.js +12 -0
  370. package/dist/server/src/utils/mcp-error-handler.d.ts +162 -0
  371. package/dist/server/src/utils/mcp-error-handler.d.ts.map +1 -0
  372. package/dist/server/src/utils/mcp-error-handler.js +270 -0
  373. package/dist/server/src/utils/port-checker.d.ts +16 -0
  374. package/dist/server/src/utils/port-checker.d.ts.map +1 -0
  375. package/dist/server/src/utils/port-checker.js +242 -0
  376. package/dist/server/src/utils/request-context.d.ts +71 -0
  377. package/dist/server/src/utils/request-context.d.ts.map +1 -0
  378. package/dist/server/src/utils/request-context.js +73 -0
  379. package/dist/server/src/utils/tool-args-parser.d.ts +17 -0
  380. package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -0
  381. package/dist/server/src/utils/tool-args-parser.js +34 -0
  382. package/dist/server/src/utils/transports/sse-transport.d.ts +104 -0
  383. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -0
  384. package/dist/server/src/utils/transports/sse-transport.js +189 -0
  385. package/dist/server/src/utils/transports/stdio-transport.d.ts +122 -0
  386. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -0
  387. package/dist/server/src/utils/transports/stdio-transport.js +324 -0
  388. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +146 -0
  389. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -0
  390. package/dist/server/src/utils/transports/streamable-http-transport.js +212 -0
  391. package/dist/server/src/utils/transports/transport-factory.d.ts +26 -0
  392. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -0
  393. package/dist/server/src/utils/transports/transport-factory.js +104 -0
  394. package/dist/server/src/utils/transports/transport.interface.d.ts +35 -0
  395. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -0
  396. package/dist/server/src/utils/transports/transport.interface.js +1 -0
  397. package/dist/server/tests/contract/mcp-protocol/initialize.test.d.ts +2 -0
  398. package/dist/server/tests/contract/mcp-protocol/initialize.test.d.ts.map +1 -0
  399. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +103 -0
  400. package/dist/server/tests/contract/mcp-protocol/tools-call.test.d.ts +2 -0
  401. package/dist/server/tests/contract/mcp-protocol/tools-call.test.d.ts.map +1 -0
  402. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +181 -0
  403. package/dist/server/tests/contract/mcp-protocol/tools-list.test.d.ts +2 -0
  404. package/dist/server/tests/contract/mcp-protocol/tools-list.test.d.ts.map +1 -0
  405. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +155 -0
  406. package/dist/server/tests/evaluation/evaluation.test.d.ts +2 -0
  407. package/dist/server/tests/evaluation/evaluation.test.d.ts.map +1 -0
  408. package/dist/server/tests/evaluation/evaluation.test.js +102 -0
  409. package/dist/server/tests/helpers/sdk-test-helpers.d.ts +32 -0
  410. package/dist/server/tests/helpers/sdk-test-helpers.d.ts.map +1 -0
  411. package/dist/server/tests/helpers/sdk-test-helpers.js +82 -0
  412. package/dist/server/tests/integration/api/gateway.test.d.ts +2 -0
  413. package/dist/server/tests/integration/api/gateway.test.d.ts.map +1 -0
  414. package/dist/server/tests/integration/api/gateway.test.js +366 -0
  415. package/dist/server/tests/integration/gateway/fault-tolerance.test.d.ts +2 -0
  416. package/dist/server/tests/integration/gateway/fault-tolerance.test.d.ts.map +1 -0
  417. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +109 -0
  418. package/dist/server/tests/integration/gateway/mcp-connection.test.d.ts +2 -0
  419. package/dist/server/tests/integration/gateway/mcp-connection.test.d.ts.map +1 -0
  420. package/dist/server/tests/integration/gateway/mcp-connection.test.js +149 -0
  421. package/dist/server/tests/server.test.d.ts +2 -0
  422. package/dist/server/tests/server.test.d.ts.map +1 -0
  423. package/dist/server/tests/server.test.js +95 -0
  424. package/dist/server/tests/setup.d.ts +7 -0
  425. package/dist/server/tests/setup.d.ts.map +1 -0
  426. package/dist/server/tests/setup.js +53 -0
  427. package/dist/server/tests/types/logger-test-helpers.d.ts +17 -0
  428. package/dist/server/tests/types/logger-test-helpers.d.ts.map +1 -0
  429. package/dist/server/tests/types/logger-test-helpers.js +4 -0
  430. package/dist/server/tests/types/test-helpers.d.ts +27 -0
  431. package/dist/server/tests/types/test-helpers.d.ts.map +1 -0
  432. package/dist/server/tests/types/test-helpers.js +4 -0
  433. package/dist/server/tests/unit/cli/basic-cli.test.d.ts +2 -0
  434. package/dist/server/tests/unit/cli/basic-cli.test.d.ts.map +1 -0
  435. package/dist/server/tests/unit/cli/basic-cli.test.js +33 -0
  436. package/dist/server/tests/unit/cli/cli.test.d.ts +2 -0
  437. package/dist/server/tests/unit/cli/cli.test.d.ts.map +1 -0
  438. package/dist/server/tests/unit/cli/cli.test.js +17 -0
  439. package/dist/server/tests/unit/cli/commands.test.d.ts +2 -0
  440. package/dist/server/tests/unit/cli/commands.test.d.ts.map +1 -0
  441. package/dist/server/tests/unit/cli/commands.test.js +75 -0
  442. package/dist/server/tests/unit/cli/server.test.d.ts +2 -0
  443. package/dist/server/tests/unit/cli/server.test.d.ts.map +1 -0
  444. package/dist/server/tests/unit/cli/server.test.js +68 -0
  445. package/dist/server/tests/unit/server/runner.test.d.ts +2 -0
  446. package/dist/server/tests/unit/server/runner.test.d.ts.map +1 -0
  447. package/dist/server/tests/unit/server/runner.test.js +488 -0
  448. package/dist/server/tests/unit/server/setup.d.ts +2 -0
  449. package/dist/server/tests/unit/server/setup.d.ts.map +1 -0
  450. package/dist/server/tests/unit/server/setup.js +21 -0
  451. package/dist/server/tests/unit/services/gateway-logging.test.d.ts +2 -0
  452. package/dist/server/tests/unit/services/gateway-logging.test.d.ts.map +1 -0
  453. package/dist/server/tests/unit/services/gateway-logging.test.js +47 -0
  454. package/dist/server/tests/unit/services/hub-manager-service.test.d.ts +2 -0
  455. package/dist/server/tests/unit/services/hub-manager-service.test.d.ts.map +1 -0
  456. package/dist/server/tests/unit/services/hub-manager-service.test.js +140 -0
  457. package/dist/server/tests/unit/services/hub-manager.test.d.ts +2 -0
  458. package/dist/server/tests/unit/services/hub-manager.test.d.ts.map +1 -0
  459. package/dist/server/tests/unit/services/hub-manager.test.js +98 -0
  460. package/dist/server/tests/unit/services/hub-tools.service.test.d.ts +2 -0
  461. package/dist/server/tests/unit/services/hub-tools.service.test.d.ts.map +1 -0
  462. package/dist/server/tests/unit/services/hub-tools.service.test.js +674 -0
  463. package/dist/server/tests/unit/services/search/search-cache.test.d.ts +2 -0
  464. package/dist/server/tests/unit/services/search/search-cache.test.d.ts.map +1 -0
  465. package/dist/server/tests/unit/services/search/search-cache.test.js +58 -0
  466. package/dist/server/tests/unit/services/search/search-core.service.test.d.ts +2 -0
  467. package/dist/server/tests/unit/services/search/search-core.service.test.d.ts.map +1 -0
  468. package/dist/server/tests/unit/services/search/search-core.service.test.js +84 -0
  469. package/dist/server/tests/unit/services/search/search-scorer.test.d.ts +2 -0
  470. package/dist/server/tests/unit/services/search/search-scorer.test.d.ts.map +1 -0
  471. package/dist/server/tests/unit/services/search/search-scorer.test.js +97 -0
  472. package/dist/server/tests/unit/services/session-manager.test.d.ts +2 -0
  473. package/dist/server/tests/unit/services/session-manager.test.d.ts.map +1 -0
  474. package/dist/server/tests/unit/services/session-manager.test.js +481 -0
  475. package/dist/server/tests/unit/utils/config.test.d.ts +2 -0
  476. package/dist/server/tests/unit/utils/config.test.d.ts.map +1 -0
  477. package/dist/server/tests/unit/utils/config.test.js +634 -0
  478. package/dist/server/tests/unit/utils/json-utils.test.d.ts +2 -0
  479. package/dist/server/tests/unit/utils/json-utils.test.d.ts.map +1 -0
  480. package/dist/server/tests/unit/utils/json-utils.test.js +296 -0
  481. package/dist/server/tests/unit/utils/log-rotator.test.d.ts +2 -0
  482. package/dist/server/tests/unit/utils/log-rotator.test.d.ts.map +1 -0
  483. package/dist/server/tests/unit/utils/log-rotator.test.js +296 -0
  484. package/dist/server/tests/unit/utils/logger.test.d.ts +2 -0
  485. package/dist/server/tests/unit/utils/logger.test.d.ts.map +1 -0
  486. package/dist/server/tests/unit/utils/logger.test.js +462 -0
  487. package/dist/server/tests/unit/utils/mcp-error-handler.test.d.ts +2 -0
  488. package/dist/server/tests/unit/utils/mcp-error-handler.test.d.ts.map +1 -0
  489. package/dist/server/tests/unit/utils/mcp-error-handler.test.js +163 -0
  490. package/dist/server/tests/unit/utils/request-context.test.d.ts +2 -0
  491. package/dist/server/tests/unit/utils/request-context.test.d.ts.map +1 -0
  492. package/dist/server/tests/unit/utils/request-context.test.js +82 -0
  493. package/dist/server/vite.config.d.ts +3 -0
  494. package/dist/server/vite.config.d.ts.map +1 -0
  495. package/dist/server/vite.config.js +160 -0
  496. package/dist/server/vitest.config.d.ts +3 -0
  497. package/dist/server/vitest.config.d.ts.map +1 -0
  498. package/dist/server/vitest.config.js +53 -0
  499. 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
+ }