@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,457 @@
1
+ import { hubManager } from './hub-manager.service.js';
2
+ import { mcpConnectionManager } from './mcp-connection-manager.js';
3
+ import { eventBus, EventTypes } from './event-bus.service.js';
4
+ import { gateway } from './gateway.service.js';
5
+ import { logger, LOG_MODULES } from '../utils/logger.js';
6
+ import { stringifyForLogging } from '../utils/json-utils.js';
7
+ import { MCP_HUB_LITE_SERVER, LIST_SERVERS_TOOL, FIND_SERVERS_TOOL, LIST_ALL_TOOLS_IN_SERVER_TOOL, FIND_TOOLS_IN_SERVER_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, FIND_TOOLS_TOOL, SYSTEM_TOOL_NAMES } from '../models/system-tools.constants.js';
8
+ import { ToolArgsParser } from '../utils/tool-args-parser.js';
9
+ import { hasValidId, selectBestInstance, getSystemTools, findServers as findServersUtil, findToolsInServer as findToolsInServerUtil, findTools as findToolsUtil, generateDynamicResources, readResource as readResourceUtil } from './hub-tools/index.js';
10
+ /**
11
+ * Central service for managing system tools and MCP server interactions in the MCP Hub Lite gateway.
12
+ *
13
+ * The HubToolsService provides a unified interface for discovering, managing, and interacting with
14
+ * all connected MCP (Model Context Protocol) servers. It serves as the primary orchestration layer
15
+ * between client applications and the underlying MCP infrastructure, offering both system-level
16
+ * management capabilities and direct tool execution functionality.
17
+ *
18
+ * ## Core Responsibilities
19
+ *
20
+ * - **System Tool Management**: Exposes a standardized set of system tools for server discovery and management
21
+ * - **Tool Discovery**: Enables searching and listing tools across all connected MCP servers
22
+ * - **Tool Execution**: Provides safe, monitored execution of tools with comprehensive event tracking
23
+ * - **Resource Management**: Dynamically generates and serves virtual resources representing server state
24
+ * - **Instance Selection**: Handles intelligent server instance selection for multi-instance scenarios
25
+ * - **Error Handling**: Implements consistent error handling and logging across all operations
26
+ *
27
+ * ## System Tools Provided
28
+ *
29
+ * The service exposes the following system tools through the `getSystemTools()` method:
30
+ * - `list-servers`: Retrieve all connected server names
31
+ * - `find-servers`: Search servers by pattern matching
32
+ * - `list-all-tools-in-server`: List all tools from a specific server
33
+ * - `find-tools-in-server`: Search tools within a specific server
34
+ * - `get-tool`: Retrieve complete schema for a specific tool
35
+ * - `call-tool`: Execute a tool on a specific server
36
+ * - `find-tools`: Search tools across all connected servers
37
+ *
38
+ * ## Architecture Integration
39
+ *
40
+ * This service integrates tightly with other core components:
41
+ * - **HubManagerService**: For server configuration and instance management
42
+ * - **McpConnectionManager**: For actual tool execution and connection management
43
+ * - **EventBusService**: For publishing tool call events and system notifications
44
+ * - **GatewayService**: For system tool routing and aggregation
45
+ *
46
+ * All operations include comprehensive logging, error handling, and event publishing
47
+ * to support observability, debugging, and monitoring of the MCP Hub Lite system.
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * const hubTools = new HubToolsService();
52
+ *
53
+ * // List all connected servers
54
+ * const servers = await hubTools.listServers();
55
+ *
56
+ * // Call a tool on a specific server
57
+ * const result = await hubTools.callTool('file-system-server', 'list-files', { directory: '/home' });
58
+ *
59
+ * // Search for tools across all servers
60
+ * const matchingTools = await hubTools.findTools('search');
61
+ * ```
62
+ */
63
+ export class HubToolsService {
64
+ /**
65
+ * Cached dynamic resource list to avoid regenerating on every request
66
+ */
67
+ generatedResourcesCache = null;
68
+ constructor() {
69
+ // Listen for server status change events to invalidate resource cache
70
+ eventBus.subscribe(EventTypes.SERVER_STATUS_CHANGE, () => {
71
+ this.generatedResourcesCache = null;
72
+ });
73
+ eventBus.subscribe(EventTypes.SERVER_CONNECTED, () => {
74
+ this.generatedResourcesCache = null;
75
+ });
76
+ eventBus.subscribe(EventTypes.SERVER_DISCONNECTED, () => {
77
+ this.generatedResourcesCache = null;
78
+ });
79
+ eventBus.subscribe(EventTypes.RESOURCES_UPDATED, () => {
80
+ this.generatedResourcesCache = null;
81
+ });
82
+ eventBus.subscribe(EventTypes.TOOLS_UPDATED, () => {
83
+ this.generatedResourcesCache = null;
84
+ });
85
+ }
86
+ /**
87
+ * Retrieves the complete list of system tools provided by this service.
88
+ *
89
+ * This method generates system tool configurations based on the SYSTEM_TOOL_NAMES constant,
90
+ * ensuring consistency with the defined system tool names. Each tool includes its name,
91
+ * description, input schema, and annotations for proper client-side rendering and behavior.
92
+ *
93
+ * @returns {Array<{ name: string; description: string; inputSchema: JsonSchema; annotations?: ToolAnnotations }>}
94
+ * Array of system tool configurations
95
+ */
96
+ getSystemTools() {
97
+ return getSystemTools();
98
+ }
99
+ /**
100
+ * Lists all connected MCP servers by name.
101
+ *
102
+ * This method retrieves all configured servers from the hub manager, filters out
103
+ * invalid entries using the hasValidId type guard, and returns an array of server names.
104
+ * It provides a simple way to discover available servers in the system.
105
+ *
106
+ * @returns {Promise<string[]>} Array of connected server names
107
+ */
108
+ async listServers() {
109
+ const servers = hubManager.getAllServers();
110
+ return servers.filter(hasValidId).map((server) => server.name);
111
+ }
112
+ /**
113
+ * Finds servers matching a specified regex pattern.
114
+ *
115
+ * This method searches through all configured servers using the provided regex pattern,
116
+ * supporting flexible search options including case sensitivity and search scope
117
+ * (name, description, or both). It returns an array of matching server names.
118
+ *
119
+ * @param {FindServersParams} args - Search parameters
120
+ * @returns {Promise<string[]>} Array of matching server names
121
+ */
122
+ async findServers(args) {
123
+ return findServersUtil(args.pattern, args.searchIn, args.caseSensitive);
124
+ }
125
+ /**
126
+ * Lists all tools available from a specific MCP server.
127
+ *
128
+ * This method retrieves all tools from the specified server, handling both regular
129
+ * MCP servers and the special MCP Hub Lite server (which returns system tools).
130
+ * It uses the selectBestInstance function to resolve server names to instances
131
+ * and leverages the MCP connection manager for tool retrieval.
132
+ *
133
+ * @param {ListAllToolsInServerParams} args - Server name and request options
134
+ * @returns {Promise<{ serverName: string; tools: Tool[] }>} Object containing server name and tools array
135
+ * @throws {Error} If the specified server is not found or not connected
136
+ */
137
+ async listAllToolsInServer(args) {
138
+ // Handle MCP Hub Lite server (return system tools list)
139
+ if (typeof args.serverName === 'string' && args.serverName === MCP_HUB_LITE_SERVER) {
140
+ // Generate tool list using the same logic as tools/list
141
+ const toolMap = new Map();
142
+ const gatewayTools = gateway.generateGatewayToolsList(toolMap);
143
+ // Convert to Tool format
144
+ const tools = gatewayTools.map((tool) => ({
145
+ name: tool.name,
146
+ description: tool.description,
147
+ inputSchema: tool.inputSchema,
148
+ serverName: MCP_HUB_LITE_SERVER,
149
+ annotations: tool.annotations
150
+ }));
151
+ return {
152
+ serverName: args.serverName,
153
+ tools
154
+ };
155
+ }
156
+ const serverInfo = selectBestInstance(args.serverName, args.requestOptions);
157
+ if (!serverInfo) {
158
+ throw new Error(`Server not found: ${args.serverName}`);
159
+ }
160
+ // Get instance ID
161
+ const serverId = serverInfo.instance.id;
162
+ // Get tool list from connection manager
163
+ const tools = mcpConnectionManager.getTools(serverId);
164
+ return {
165
+ serverName: args.serverName,
166
+ tools
167
+ };
168
+ }
169
+ /**
170
+ * Finds tools matching a pattern within a specific MCP server.
171
+ *
172
+ * This method searches through all tools available from the specified server using
173
+ * the provided regex pattern, supporting flexible search options including case
174
+ * sensitivity and search scope (name, description, or both). It returns matching
175
+ * tools grouped by server name.
176
+ *
177
+ * @param {FindToolsInServerParams} args - Search parameters
178
+ * @returns {Promise<{ serverName: string; tools: Tool[] }>} Object containing server name and matching tools
179
+ * @throws {Error} If the specified server is not found or not connected
180
+ */
181
+ async findToolsInServer(args) {
182
+ return findToolsInServerUtil(args.serverName, args.pattern, args.searchIn, args.caseSensitive, args.requestOptions);
183
+ }
184
+ /**
185
+ * Retrieves the complete schema for a specific tool from a specific server.
186
+ *
187
+ * This method returns the full tool definition including name, description, input schema,
188
+ * and any annotations. It's useful for clients that need detailed information about
189
+ * a tool's capabilities and expected parameters before execution.
190
+ *
191
+ * @param {GetToolParams} args - Tool retrieval parameters
192
+ * @returns {Promise<Tool | undefined>} Complete tool schema or undefined if not found
193
+ * @throws {Error} If the specified server is not found or not connected
194
+ */
195
+ async getTool(args) {
196
+ const serverInfo = selectBestInstance(args.serverName, args.requestOptions);
197
+ if (!serverInfo) {
198
+ throw new Error(`Server not found: ${args.serverName}`);
199
+ }
200
+ const tools = mcpConnectionManager.getTools(serverInfo.instance.id);
201
+ return tools.find((tool) => tool.name === args.toolName);
202
+ }
203
+ /**
204
+ * Calls a specific system tool directly with type-safe conditional return types.
205
+ *
206
+ * This method provides a unified entry point for all system tool calls, using TypeScript's
207
+ * conditional types to ensure type safety based on the tool name. It handles logging,
208
+ * error handling, and delegates to the appropriate internal methods based on the tool name.
209
+ *
210
+ * @param {T} toolName - System tool name with generic type constraint
211
+ * @param {SystemToolArgs} toolArgs - Type-safe arguments based on tool name
212
+ * @returns {Promise<ConditionalReturnType>} Tool execution result with accurate type safety matching actual method return types
213
+ * @throws {Error} If the system tool is not found or execution fails
214
+ */
215
+ async callSystemTool(toolName, toolArgs) {
216
+ logger.debug(`System tool called: ${toolName}, args=${stringifyForLogging(toolArgs)}`, LOG_MODULES.HUB_TOOLS);
217
+ try {
218
+ let result;
219
+ switch (toolName) {
220
+ case LIST_SERVERS_TOOL:
221
+ result = await this.listServers();
222
+ break;
223
+ case FIND_SERVERS_TOOL: {
224
+ result = await this.findServers(toolArgs);
225
+ break;
226
+ }
227
+ case LIST_ALL_TOOLS_IN_SERVER_TOOL: {
228
+ result = await this.listAllToolsInServer(toolArgs);
229
+ break;
230
+ }
231
+ case FIND_TOOLS_IN_SERVER_TOOL: {
232
+ result = await this.findToolsInServer(toolArgs);
233
+ break;
234
+ }
235
+ case GET_TOOL_TOOL: {
236
+ result = await this.getTool(toolArgs);
237
+ break;
238
+ }
239
+ case CALL_TOOL_TOOL: {
240
+ const callToolArgs = toolArgs;
241
+ let serverName = callToolArgs.serverName;
242
+ if (!serverName || serverName === 'undefined') {
243
+ serverName = MCP_HUB_LITE_SERVER;
244
+ }
245
+ result = await this.callTool({
246
+ ...callToolArgs,
247
+ serverName
248
+ });
249
+ break;
250
+ }
251
+ case FIND_TOOLS_TOOL: {
252
+ result = await this.findTools(toolArgs);
253
+ break;
254
+ }
255
+ default:
256
+ throw new Error(`System tool "${toolName}" not found`);
257
+ }
258
+ logger.debug(`System tool SUCCESS: ${toolName}`, LOG_MODULES.HUB_TOOLS);
259
+ // Type assertion based on toolName to match the expected return type
260
+ return result;
261
+ }
262
+ catch (error) {
263
+ logger.error(`System tool FAILED: ${toolName}, error=${error instanceof Error ? error.message : String(error)}`, error, LOG_MODULES.HUB_TOOLS);
264
+ throw error;
265
+ }
266
+ }
267
+ /**
268
+ * Calls a specific tool from a specific MCP server with comprehensive event tracking.
269
+ *
270
+ * This method handles both regular MCP server tool calls and system tool calls (when
271
+ * serverName is 'mcp-hub-lite'). It publishes TOOL_CALL_STARTED, TOOL_CALL_COMPLETED,
272
+ * and TOOL_CALL_ERROR events for monitoring and debugging purposes, and includes
273
+ * detailed logging for observability.
274
+ *
275
+ * @param {CallToolParams} args - Tool call parameters
276
+ * @returns {Promise<unknown>} Tool execution result as returned by the server
277
+ * @throws {Error} If the server is not found, not connected, or tool execution fails
278
+ */
279
+ async callTool(args) {
280
+ let { serverName, toolName } = args;
281
+ const { toolArgs, requestOptions } = args;
282
+ // Parse prefixed tool names (like mcp__mcp-hub-lite__xxx) if applicable
283
+ const parsedTool = ToolArgsParser.parsePrefixedToolName(toolName);
284
+ if (parsedTool) {
285
+ logger.debug(`Parsed prefixed tool name: "${toolName}" → server="${parsedTool.serverName}", tool="${parsedTool.toolName}"`, LOG_MODULES.HUB_TOOLS);
286
+ serverName = parsedTool.serverName;
287
+ toolName = parsedTool.toolName;
288
+ }
289
+ // Handle MCP Hub Lite server (system tool call or find tool in all servers)
290
+ if (!serverName || serverName === 'undefined') {
291
+ serverName = MCP_HUB_LITE_SERVER;
292
+ }
293
+ if (typeof serverName === 'string' && serverName === MCP_HUB_LITE_SERVER) {
294
+ // Check if it's a system tool
295
+ if (SYSTEM_TOOL_NAMES.includes(toolName)) {
296
+ return await this.callSystemTool(toolName, toolArgs);
297
+ }
298
+ // Not a system tool - find it in all connected servers
299
+ logger.info(`Looking for tool '${toolName}' in all connected servers (gateway mode)`, LOG_MODULES.HUB_TOOLS);
300
+ // Find all servers that have this tool
301
+ const matchingServers = [];
302
+ const servers = hubManager.getAllServers();
303
+ for (const server of servers) {
304
+ if (!hasValidId(server)) {
305
+ continue;
306
+ }
307
+ const serverInfo = selectBestInstance(server.name, requestOptions);
308
+ if (serverInfo && serverInfo.instance.id) {
309
+ const tools = mcpConnectionManager.getTools(serverInfo.instance.id);
310
+ if (tools.some((tool) => tool.name === toolName)) {
311
+ matchingServers.push(server.name);
312
+ }
313
+ }
314
+ }
315
+ if (matchingServers.length === 0) {
316
+ logger.error(`Tool '${toolName}' not found in any connected server`, LOG_MODULES.HUB_TOOLS);
317
+ throw new Error(`Tool '${toolName}' not found`);
318
+ }
319
+ if (matchingServers.length > 1) {
320
+ logger.warn(`Tool '${toolName}' found in multiple servers: ${matchingServers.join(', ')}. Using first match.`, LOG_MODULES.HUB_TOOLS);
321
+ }
322
+ // Use the first matching server
323
+ serverName = matchingServers[0];
324
+ }
325
+ logger.debug(`Tool call received: serverName=${serverName}, toolName=${toolName}, args=${stringifyForLogging(toolArgs)}`, LOG_MODULES.HUB_TOOLS);
326
+ const serverInfo = selectBestInstance(serverName, requestOptions);
327
+ if (!serverInfo) {
328
+ logger.error(`Server not found: ${serverName}`, LOG_MODULES.HUB_TOOLS);
329
+ throw new Error(`Server not found: ${serverName}`);
330
+ }
331
+ const serverId = serverInfo.instance.id;
332
+ const requestId = `tool-call-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
333
+ // Publish tool call started event
334
+ eventBus.publish(EventTypes.TOOL_CALL_STARTED, {
335
+ requestId,
336
+ serverId,
337
+ serverName,
338
+ toolName,
339
+ timestamp: Date.now(),
340
+ args: toolArgs
341
+ });
342
+ try {
343
+ const result = await mcpConnectionManager.callTool(serverId, toolName, toolArgs);
344
+ // Publish tool call completed event
345
+ eventBus.publish(EventTypes.TOOL_CALL_COMPLETED, {
346
+ requestId,
347
+ serverId,
348
+ serverName,
349
+ toolName,
350
+ timestamp: Date.now(),
351
+ result
352
+ });
353
+ logger.debug(`Tool call SUCCESS: serverName=${serverName}, toolName=${toolName}`, LOG_MODULES.HUB_TOOLS);
354
+ return result;
355
+ }
356
+ catch (error) {
357
+ // Publish tool call error event
358
+ eventBus.publish(EventTypes.TOOL_CALL_ERROR, {
359
+ requestId,
360
+ serverId,
361
+ serverName,
362
+ toolName,
363
+ timestamp: Date.now(),
364
+ error: error instanceof Error ? error.message : String(error),
365
+ stack: error instanceof Error ? error.stack : undefined
366
+ });
367
+ logger.error(`Tool call FAILED: serverName=${serverName}, toolName=${toolName}, error=${error instanceof Error ? error.message : String(error)}`, error, LOG_MODULES.HUB_TOOLS);
368
+ throw error;
369
+ }
370
+ }
371
+ /**
372
+ * Lists all available tools from all connected servers including system tools.
373
+ *
374
+ * This method aggregates tools from all configured and connected MCP servers, including
375
+ * the system tools provided by the MCP Hub Lite server itself. It returns a structured
376
+ * object mapping server names to their respective tool arrays.
377
+ *
378
+ * @returns {Promise<Record<string, { tools: Tool[] }>>} Object mapping server names to tool arrays
379
+ */
380
+ async listAllTools() {
381
+ const servers = hubManager.getAllServers();
382
+ const allTools = {};
383
+ // Add system tools under mcp-hub-lite server
384
+ const systemTools = this.getSystemTools().map((tool) => ({
385
+ ...tool,
386
+ description: `[System] ${tool.description}`,
387
+ serverName: MCP_HUB_LITE_SERVER
388
+ }));
389
+ allTools[MCP_HUB_LITE_SERVER] = {
390
+ tools: systemTools
391
+ };
392
+ for (const server of servers) {
393
+ if (!hasValidId(server)) {
394
+ continue;
395
+ }
396
+ const instances = hubManager.getServerInstanceByName(server.name);
397
+ for (const instance of instances) {
398
+ if (instance.id) {
399
+ const tools = mcpConnectionManager.getTools(instance.id);
400
+ allTools[server.name] = {
401
+ tools
402
+ };
403
+ }
404
+ }
405
+ }
406
+ return allTools;
407
+ }
408
+ /**
409
+ * Finds tools matching a pattern across all connected MCP servers.
410
+ *
411
+ * This method searches through all available tools from all connected servers using the
412
+ * provided regex pattern, supporting flexible search options including case sensitivity
413
+ * and search scope (name, description, or both). It returns matching tools grouped by
414
+ * their originating server names.
415
+ *
416
+ * @param {FindToolsParams} args - Search parameters
417
+ * @returns {Promise<Record<string, { tools: Tool[] }>>} Object mapping server names to matching tools
418
+ */
419
+ async findTools(args) {
420
+ return findToolsUtil(args.pattern, args.searchIn, args.caseSensitive, () => this.listAllTools());
421
+ }
422
+ /**
423
+ * Lists all dynamically generated Hub resources based on connected MCP servers.
424
+ *
425
+ * This method returns an array of virtual resources that represent the current state
426
+ * of connected servers, providing a unified interface for resource discovery and access.
427
+ * The resources are generated on-demand based on the current server configuration.
428
+ *
429
+ * @returns {Promise<Resource[]>} Array of MCP resource objects representing Hub resources
430
+ */
431
+ async listResources() {
432
+ if (this.generatedResourcesCache) {
433
+ return this.generatedResourcesCache;
434
+ }
435
+ const resources = generateDynamicResources();
436
+ this.generatedResourcesCache = resources;
437
+ return resources;
438
+ }
439
+ /**
440
+ * Reads content from a specific Hub resource URI.
441
+ *
442
+ * This method provides access to dynamically generated Hub resources by parsing the URI
443
+ * and returning the appropriate content based on the resource type. It supports three
444
+ * types of resources:
445
+ * - Server metadata: hub://servers/{serverName}
446
+ * - Tools list: hub://servers/{serverName}/tools
447
+ * - Resources list: hub://servers/{serverName}/resources
448
+ *
449
+ * @param {string} uri - Resource URI to read (e.g., hub://servers/server-name)
450
+ * @returns {Promise<ServerMetadata | Tool[] | Resource[]>} Resource content based on URI type
451
+ * @throws {Error} If URI format is invalid, server not found, or resource type unknown
452
+ */
453
+ async readResource(uri) {
454
+ return readResourceUtil(uri);
455
+ }
456
+ }
457
+ export const hubToolsService = new HubToolsService();
@@ -0,0 +1,177 @@
1
+ import type { LogLevel } from '../../shared/types/common.types.js';
2
+ export interface LogEntry {
3
+ timestamp: number;
4
+ level: LogLevel;
5
+ message: string;
6
+ }
7
+ export interface LogQueryOptions {
8
+ level?: LogLevel;
9
+ limit?: number;
10
+ offset?: number;
11
+ since?: number;
12
+ }
13
+ /**
14
+ * Service for managing and storing log entries for MCP servers.
15
+ *
16
+ * This service provides centralized log storage with memory-efficient management,
17
+ * real-time event notifications, and query capabilities for debugging and monitoring
18
+ * MCP server activities. It maintains separate log streams for each server identified
19
+ * by their unique server ID and supports configurable log retention limits.
20
+ *
21
+ * Key features:
22
+ * - Memory-efficient log storage with automatic cleanup
23
+ * - Real-time log event publishing via EventBus
24
+ * - Listener registration for immediate log notifications
25
+ * - Queryable log retrieval with filtering and pagination
26
+ * - Configurable maximum log entries per server to prevent memory leaks
27
+ *
28
+ * Usage scenarios:
29
+ * - Debugging MCP server communication issues
30
+ * - Monitoring server activity and status changes
31
+ * - Providing log data for UI log viewers
32
+ * - Supporting audit trails for server operations
33
+ */
34
+ export declare class LogStorageService {
35
+ private serverLogs;
36
+ private maxLogsPerServer;
37
+ private logListeners;
38
+ /**
39
+ * Appends a new log entry for the specified server.
40
+ *
41
+ * Creates a timestamped log entry with the provided level and message,
42
+ * stores it in memory, and notifies all registered listeners and the
43
+ * global event bus about the new log entry.
44
+ *
45
+ * @param serverId - The unique identifier of the MCP server to log for
46
+ * @param level - The log level (e.g., 'debug', 'info', 'warn', 'error')
47
+ * @param message - The log message content (will be trimmed of whitespace)
48
+ * @returns The created LogEntry object containing timestamp, level, and message
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * const logEntry = logStorage.append('server-123', 'info', 'Server connected successfully');
53
+ * console.log(logEntry.timestamp); // Current timestamp in milliseconds
54
+ * ```
55
+ */
56
+ append(serverId: string, level: LogLevel, message: string): LogEntry;
57
+ /**
58
+ * Retrieves log entries for the specified server with optional filtering and pagination.
59
+ *
60
+ * Returns a filtered and paginated subset of log entries based on the provided query options.
61
+ * The method supports filtering by log level, timestamp range, and pagination parameters.
62
+ *
63
+ * @param serverId - The unique identifier of the MCP server to retrieve logs for
64
+ * @param options - Optional query parameters for filtering and pagination
65
+ * @param options.level - Filter logs by specific log level (e.g., 'error', 'warn')
66
+ * @param options.since - Filter logs with timestamps greater than or equal to this value (milliseconds since epoch)
67
+ * @param options.offset - Number of log entries to skip (for pagination, default: 0)
68
+ * @param options.limit - Maximum number of log entries to return (default: all matching entries)
69
+ * @returns Array of LogEntry objects matching the query criteria, empty array if no logs exist
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * // Get last 10 error logs
74
+ * const errorLogs = logStorage.getLogs('server-123', { level: 'error', limit: 10 });
75
+ *
76
+ * // Get logs from the last hour
77
+ * const recentLogs = logStorage.getLogs('server-123', { since: Date.now() - 3600000 });
78
+ *
79
+ * // Get logs with pagination
80
+ * const paginatedLogs = logStorage.getLogs('server-123', { offset: 20, limit: 10 });
81
+ * ```
82
+ */
83
+ getLogs(serverId: string, options?: LogQueryOptions): LogEntry[];
84
+ /**
85
+ * Clears all log entries for the specified server.
86
+ *
87
+ * Removes all stored log entries for the given server ID, effectively resetting
88
+ * the log history for that server. This operation is immediate and cannot be undone.
89
+ *
90
+ * @param serverId - The unique identifier of the MCP server to clear logs for
91
+ *
92
+ * @example
93
+ * ```typescript
94
+ * // Clear all logs for a specific server
95
+ * logStorage.clearLogs('server-123');
96
+ * ```
97
+ */
98
+ clearLogs(serverId: string): void;
99
+ /**
100
+ * Gets the total number of log entries stored for the specified server.
101
+ *
102
+ * @param serverId - The unique identifier of the MCP server to get log count for
103
+ * @returns The number of log entries stored for the server, or 0 if no logs exist
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * const logCount = logStorage.getLogCount('server-123');
108
+ * console.log(`Server has ${logCount} log entries`);
109
+ * ```
110
+ */
111
+ getLogCount(serverId: string): number;
112
+ /**
113
+ * Sets the maximum number of log entries to store per server.
114
+ *
115
+ * Configures the memory limit for log storage and immediately trims existing logs
116
+ * for all servers that exceed the new limit. This helps prevent memory leaks in
117
+ * long-running applications with high log volume.
118
+ *
119
+ * @param max - The maximum number of log entries to store per server (must be positive)
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * // Limit logs to 500 entries per server
124
+ * logStorage.setMaxLogsPerServer(500);
125
+ * ```
126
+ */
127
+ setMaxLogsPerServer(max: number): void;
128
+ /**
129
+ * Adds a listener function that will be called whenever a new log entry is appended for the specified server.
130
+ *
131
+ * Listeners are called synchronously when new logs are added and should handle errors gracefully
132
+ * as exceptions are caught and logged but will not prevent other listeners from being called.
133
+ *
134
+ * @param serverId - The unique identifier of the MCP server to listen for logs
135
+ * @param listener - Function to be called with each new LogEntry for the server
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * const listener = (log: LogEntry) => {
140
+ * console.log(`New log for server: ${log.message}`);
141
+ * };
142
+ * logStorage.addLogListener('server-123', listener);
143
+ * ```
144
+ */
145
+ addLogListener(serverId: string, listener: (log: LogEntry) => void): void;
146
+ /**
147
+ * Removes a previously registered log listener for the specified server.
148
+ *
149
+ * @param serverId - The unique identifier of the MCP server to remove the listener from
150
+ * @param listener - The listener function to remove (must be the exact same function reference)
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * // Remove the listener
155
+ * logStorage.removeLogListener('server-123', listener);
156
+ * ```
157
+ */
158
+ removeLogListener(serverId: string, listener: (log: LogEntry) => void): void;
159
+ /**
160
+ * Notify listeners
161
+ */
162
+ private notifyListeners;
163
+ /**
164
+ * Gets an array of all server IDs that currently have stored log entries.
165
+ *
166
+ * @returns Array of server ID strings that have logs, empty array if no servers have logs
167
+ *
168
+ * @example
169
+ * ```typescript
170
+ * const serverIds = logStorage.getServersWithLogs();
171
+ * console.log(`Servers with logs: ${serverIds.join(', ')}`);
172
+ * ```
173
+ */
174
+ getServersWithLogs(): string[];
175
+ }
176
+ export declare const logStorage: LogStorageService;
177
+ //# sourceMappingURL=log-storage.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-storage.service.d.ts","sourceRoot":"","sources":["../../../../src/services/log-storage.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,YAAY,CAAqD;IAEzE;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ;IA+BpE;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,QAAQ,EAAE;IAqBhE;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIjC;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIrC;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAUtC;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI;IAOzE;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI;IAU5E;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;;;;;OAUG;IACH,kBAAkB,IAAI,MAAM,EAAE;CAG/B;AAED,eAAO,MAAM,UAAU,mBAA0B,CAAC"}