@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,171 @@
1
+ import { buildApp } from '../app.js';
2
+ import { configManager } from '../config/config-manager.js';
3
+ import { logger, LOG_MODULES } from '../utils/logger.js';
4
+ import { mcpConnectionManager } from '../services/mcp-connection-manager.js';
5
+ import { PidManager } from '../pid/manager.js';
6
+ // Set log level to debug for development server
7
+ logger.setLevel('debug');
8
+ // Enable dev logging to file (this also enables communication debug logging)
9
+ logger.enableDevLog();
10
+ let app = null;
11
+ /**
12
+ * Starts the MCP Hub Lite development server with enhanced debugging capabilities.
13
+ *
14
+ * This function initializes and starts a development-focused Fastify server instance
15
+ * with the following features:
16
+ * - Debug-level logging enabled for detailed development insights
17
+ * - Development log file output for persistent debugging information
18
+ * - Automatic connection to all enabled MCP servers configured in the system
19
+ * - OpenTelemetry tracing initialization for observability
20
+ * - PID file management for process tracking
21
+ * - Graceful shutdown handling for SIGTERM and SIGINT signals
22
+ *
23
+ * The development server differs from the production server by:
24
+ * - Using debug log level instead of info/warn
25
+ * - Enabling development-specific logging to file
26
+ * - Automatically connecting to all enabled servers on startup
27
+ * - Providing enhanced error reporting for development debugging
28
+ *
29
+ * Usage:
30
+ * - Called automatically when running `npm run dev` or `npm run dev:server`
31
+ * - Should only be used in development environments, not production
32
+ * - Handles its own process lifecycle including graceful shutdown
33
+ *
34
+ * Error Handling:
35
+ * - Catches and logs any startup errors with full stack traces
36
+ * - Cleans up PID file on startup failure
37
+ * - Exits process with code 1 on fatal errors
38
+ * - Provides graceful shutdown on termination signals
39
+ *
40
+ * @async
41
+ * @returns {Promise<void>} Resolves when server starts successfully and begins listening.
42
+ * Never resolves if server fails to start (process exits with code 1).
43
+ * @throws {Error} If server fails to initialize or start due to configuration errors,
44
+ * port conflicts, invalid server configurations, or other startup issues.
45
+ * Note: Errors are caught internally and cause process.exit(1), so the promise
46
+ * typically does not reject but rather the process terminates.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * // Typically called automatically at module level
51
+ * startDevServer();
52
+ * ```
53
+ *
54
+ * @see {@link buildApp} - Creates the Fastify application instance
55
+ * @see {@link configManager} - Manages server configuration and MCP server instances
56
+ * @see {@link mcpConnectionManager} - Handles MCP server connections and communication
57
+ * @see {@link telemetryManager} - Manages OpenTelemetry tracing and observability
58
+ * @see {@link PidManager} - Handles PID file creation and cleanup
59
+ */
60
+ async function startDevServer() {
61
+ try {
62
+ // Log startup separator
63
+ logger.info('------------------------------------------------', LOG_MODULES.DEV_SERVER);
64
+ logger.info('MCP Hub Lite Dev Server Starting...', LOG_MODULES.DEV_SERVER);
65
+ logger.info(`Start Time: ${new Date().toISOString()}`, LOG_MODULES.DEV_SERVER);
66
+ logger.info('------------------------------------------------', LOG_MODULES.DEV_SERVER);
67
+ app = await buildApp();
68
+ const config = configManager.getConfig();
69
+ // Auto-connect to enabled servers
70
+ logger.info('Initializing server connections...', LOG_MODULES.DEV_SERVER);
71
+ const serverConfigs = configManager.getServers();
72
+ for (const { name: serverName, config: serverConfig } of serverConfigs) {
73
+ if (serverConfig.enabled) {
74
+ // Check if there are existing instances
75
+ const existingInstances = configManager.getServerInstanceByName(serverName);
76
+ if (existingInstances.length === 0) {
77
+ // Auto-create instance for enabled servers
78
+ try {
79
+ const newInstance = await configManager.addServerInstance(serverName, {});
80
+ // Connect the new instance
81
+ mcpConnectionManager.connect({ ...serverConfig, ...newInstance }).catch((err) => {
82
+ logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.DEV_SERVER);
83
+ });
84
+ }
85
+ catch (err) {
86
+ logger.error(`Failed to create instance for ${serverName}:`, err, LOG_MODULES.DEV_SERVER);
87
+ }
88
+ }
89
+ else {
90
+ // Connect existing instances
91
+ existingInstances.forEach((instance) => {
92
+ mcpConnectionManager.connect({ ...serverConfig, ...instance }).catch((err) => {
93
+ logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.DEV_SERVER);
94
+ });
95
+ });
96
+ }
97
+ }
98
+ }
99
+ // Listen on configured port
100
+ await app.listen({
101
+ port: config.system.port,
102
+ host: config.system.host
103
+ });
104
+ logger.info(`MCP Hub Lite Dev Server running at http://${config.system.host}:${config.system.port}`, LOG_MODULES.DEV_SERVER);
105
+ // Write PID file after server starts successfully
106
+ PidManager.writePid();
107
+ }
108
+ catch (err) {
109
+ logger.error('Failed to start dev server:', err, LOG_MODULES.DEV_SERVER);
110
+ // Clean up PID file if it exists
111
+ PidManager.removePid();
112
+ process.exit(1);
113
+ }
114
+ }
115
+ /**
116
+ * Handles graceful shutdown of the development server when receiving termination signals.
117
+ *
118
+ * This function performs a clean shutdown sequence to ensure:
119
+ * - All MCP server connections are properly disconnected
120
+ * - The Fastify HTTP server is closed gracefully
121
+ * - OpenTelemetry tracing resources are properly shut down
122
+ * - PID file is removed to prevent stale process detection
123
+ * - All resources are cleaned up before process exit
124
+ *
125
+ * It handles both SIGTERM (termination request) and SIGINT (interrupt/CTRL+C) signals,
126
+ * providing consistent shutdown behavior regardless of how the process is terminated.
127
+ *
128
+ * Error Handling:
129
+ * - Catches and logs any errors during shutdown process
130
+ * - Ensures PID file is always removed even if shutdown fails
131
+ * - Exits with code 0 on successful shutdown, or after logging errors
132
+ *
133
+ * @param signal - The termination signal that triggered shutdown ('SIGTERM' or 'SIGINT')
134
+ * @returns {Promise<void>} Resolves when shutdown sequence completes successfully
135
+ */
136
+ // Handle graceful shutdown for better restart experience
137
+ const shutdown = async (signal) => {
138
+ logger.info(`Received ${signal}, shutting down gracefully...`, LOG_MODULES.DEV_SERVER);
139
+ try {
140
+ await mcpConnectionManager.disconnectAll();
141
+ if (app) {
142
+ await app.close();
143
+ }
144
+ PidManager.removePid();
145
+ logger.info('Dev server stopped gracefully', LOG_MODULES.DEV_SERVER);
146
+ }
147
+ catch (error) {
148
+ logger.error('Error during shutdown:', error, LOG_MODULES.DEV_SERVER);
149
+ PidManager.removePid();
150
+ }
151
+ process.exit(0);
152
+ };
153
+ process.on('SIGTERM', () => shutdown('SIGTERM').catch((err) => {
154
+ logger.error('Shutdown failed:', err, LOG_MODULES.DEV_SERVER);
155
+ process.exit(1);
156
+ }));
157
+ process.on('SIGINT', () => shutdown('SIGINT').catch((err) => {
158
+ logger.error('Shutdown failed:', err, LOG_MODULES.DEV_SERVER);
159
+ process.exit(1);
160
+ }));
161
+ // Handle uncaught exceptions
162
+ process.on('uncaughtException', (err) => {
163
+ logger.error('Uncaught Exception:', err, LOG_MODULES.DEV_SERVER);
164
+ process.exit(1);
165
+ });
166
+ // Handle unhandled promise rejections
167
+ process.on('unhandledRejection', (reason, promise) => {
168
+ logger.error('Unhandled Rejection at:', promise, 'reason:', reason, LOG_MODULES.DEV_SERVER);
169
+ process.exit(1);
170
+ });
171
+ startDevServer();
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Starts the MCP Hub Lite server in either HTTP mode or stdio MCP gateway mode.
3
+ *
4
+ * This function is the main entry point for running the MCP Hub Lite server in production.
5
+ * It handles two distinct operational modes:
6
+ *
7
+ * 1. **HTTP Server Mode** (default): Runs a full Fastify HTTP server with REST API,
8
+ * WebSocket support, and web interface on the specified host and port.
9
+ *
10
+ * 2. **Stdio MCP Gateway Mode**: Runs as an MCP (Model Context Protocol) gateway
11
+ * that communicates via stdin/stdout streams, suitable for integration with
12
+ * MCP-compatible clients like IDEs or AI assistants.
13
+ *
14
+ * The function performs the following key operations:
15
+ * - Validates and checks port availability (HTTP mode only)
16
+ * - Automatically connects to all enabled MCP servers from configuration
17
+ * - Sets up graceful shutdown handlers for SIGTERM and SIGINT signals
18
+ * - Manages PID file creation and cleanup for process tracking
19
+ * - Handles both successful startup and error scenarios with appropriate logging
20
+ *
21
+ * @param options - Configuration options for server startup
22
+ * @param options.stdio - When true, runs in stdio MCP gateway mode instead of HTTP server mode
23
+ * @param options.port - Override the configured port number (HTTP mode only)
24
+ * @param options.host - Override the configured host address (HTTP mode only)
25
+ *
26
+ * @returns Promise that resolves when the server is successfully started,
27
+ * or rejects with an error if startup fails
28
+ *
29
+ * @throws {Error} If server startup fails due to port conflicts, configuration errors,
30
+ * or other critical issues. The process will exit with code 1 in such cases.
31
+ *
32
+ * @example
33
+ * // Start in default HTTP mode
34
+ * await runServer();
35
+ *
36
+ * @example
37
+ * // Start in stdio MCP gateway mode
38
+ * await runServer({ stdio: true });
39
+ *
40
+ * @example
41
+ * // Start HTTP server on custom port and host
42
+ * await runServer({ port: 8080, host: '0.0.0.0' });
43
+ *
44
+ * @remarks
45
+ * - In HTTP mode, the function will check if the specified port is already in use
46
+ * and provide detailed error messages for port conflicts
47
+ * - In stdio mode, port checking is skipped as no network ports are used
48
+ * - The function automatically connects to all enabled servers configured in .mcp-hub.json
49
+ * - Graceful shutdown ensures proper cleanup of connections and PID files when receiving termination signals
50
+ * - This function is typically called from the CLI entry point (`src/index.ts`)
51
+ */
52
+ export declare function runServer(options?: {
53
+ stdio?: boolean;
54
+ port?: number;
55
+ host?: string;
56
+ }): Promise<void>;
57
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../src/server/runner.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,iBA2G9F"}
@@ -0,0 +1,163 @@
1
+ import { buildApp } from '../app.js';
2
+ import { configManager } from '../config/config-manager.js';
3
+ import { logger, LOG_MODULES } from '../utils/logger.js';
4
+ import { setJsonPrettyConfigGetter } from '../utils/json-utils.js';
5
+ import { mcpConnectionManager } from '../services/mcp-connection-manager.js';
6
+ import { gateway } from '../services/gateway.service.js';
7
+ import { PidManager } from '../pid/manager.js';
8
+ import { checkPort } from '../utils/port-checker.js';
9
+ /**
10
+ * Starts the MCP Hub Lite server in either HTTP mode or stdio MCP gateway mode.
11
+ *
12
+ * This function is the main entry point for running the MCP Hub Lite server in production.
13
+ * It handles two distinct operational modes:
14
+ *
15
+ * 1. **HTTP Server Mode** (default): Runs a full Fastify HTTP server with REST API,
16
+ * WebSocket support, and web interface on the specified host and port.
17
+ *
18
+ * 2. **Stdio MCP Gateway Mode**: Runs as an MCP (Model Context Protocol) gateway
19
+ * that communicates via stdin/stdout streams, suitable for integration with
20
+ * MCP-compatible clients like IDEs or AI assistants.
21
+ *
22
+ * The function performs the following key operations:
23
+ * - Validates and checks port availability (HTTP mode only)
24
+ * - Automatically connects to all enabled MCP servers from configuration
25
+ * - Sets up graceful shutdown handlers for SIGTERM and SIGINT signals
26
+ * - Manages PID file creation and cleanup for process tracking
27
+ * - Handles both successful startup and error scenarios with appropriate logging
28
+ *
29
+ * @param options - Configuration options for server startup
30
+ * @param options.stdio - When true, runs in stdio MCP gateway mode instead of HTTP server mode
31
+ * @param options.port - Override the configured port number (HTTP mode only)
32
+ * @param options.host - Override the configured host address (HTTP mode only)
33
+ *
34
+ * @returns Promise that resolves when the server is successfully started,
35
+ * or rejects with an error if startup fails
36
+ *
37
+ * @throws {Error} If server startup fails due to port conflicts, configuration errors,
38
+ * or other critical issues. The process will exit with code 1 in such cases.
39
+ *
40
+ * @example
41
+ * // Start in default HTTP mode
42
+ * await runServer();
43
+ *
44
+ * @example
45
+ * // Start in stdio MCP gateway mode
46
+ * await runServer({ stdio: true });
47
+ *
48
+ * @example
49
+ * // Start HTTP server on custom port and host
50
+ * await runServer({ port: 8080, host: '0.0.0.0' });
51
+ *
52
+ * @remarks
53
+ * - In HTTP mode, the function will check if the specified port is already in use
54
+ * and provide detailed error messages for port conflicts
55
+ * - In stdio mode, port checking is skipped as no network ports are used
56
+ * - The function automatically connects to all enabled servers configured in .mcp-hub.json
57
+ * - Graceful shutdown ensures proper cleanup of connections and PID files when receiving termination signals
58
+ * - This function is typically called from the CLI entry point (`src/index.ts`)
59
+ */
60
+ export async function runServer(options = {}) {
61
+ try {
62
+ const isStdio = options.stdio || false;
63
+ if (isStdio) {
64
+ logger.setUseStderr(true);
65
+ logger.info('Starting in MCP Gateway mode (stdio)...', LOG_MODULES.SERVER);
66
+ }
67
+ const config = configManager.getConfig();
68
+ // Set config getter for json-utils to use config from configManager
69
+ setJsonPrettyConfigGetter(() => configManager.getConfig());
70
+ const app = isStdio ? null : await buildApp();
71
+ // Override config with options if provided
72
+ const host = options.host || config.system.host;
73
+ const port = options.port || config.system.port;
74
+ // Check if port is already in use (only for HTTP mode)
75
+ if (!isStdio) {
76
+ const portCheck = await checkPort(port);
77
+ if (portCheck.inUse) {
78
+ if (portCheck.isSelfProject) {
79
+ // This project is already running
80
+ logger.error(`MCP Hub Lite is already running on port ${port} (PID: ${portCheck.pid})`);
81
+ logger.error(`Use 'npm run stop' or 'mcp-hub-lite stop' to stop the running instance.`);
82
+ process.exit(1);
83
+ }
84
+ else {
85
+ // Port is occupied by another application
86
+ logger.error(`Port ${port} is already in use by another application:`);
87
+ logger.error(` Process: ${portCheck.processName} (PID: ${portCheck.pid})`);
88
+ if (portCheck.commandLine) {
89
+ logger.error(` Command: ${portCheck.commandLine}`);
90
+ }
91
+ logger.error(`Please stop the conflicting application or use a different port.`);
92
+ process.exit(1);
93
+ }
94
+ }
95
+ }
96
+ // Auto-connect to enabled servers
97
+ logger.info('Initializing server connections...', LOG_MODULES.SERVER);
98
+ const serverConfigs = configManager.getServers();
99
+ for (const { name: serverName, config: serverConfig } of serverConfigs) {
100
+ if (serverConfig.enabled) {
101
+ // Check if there are existing instances
102
+ const existingInstances = configManager.getServerInstanceByName(serverName);
103
+ if (existingInstances.length === 0) {
104
+ // Auto-create instance for enabled servers
105
+ try {
106
+ const newInstance = await configManager.addServerInstance(serverName, {});
107
+ // Connect the new instance
108
+ mcpConnectionManager.connect({ ...serverConfig, ...newInstance }).catch((err) => {
109
+ logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.SERVER);
110
+ });
111
+ }
112
+ catch (err) {
113
+ logger.error(`Failed to create instance for ${serverName}:`, err, LOG_MODULES.SERVER);
114
+ }
115
+ }
116
+ else {
117
+ // Connect existing instances
118
+ existingInstances.forEach((instance) => {
119
+ mcpConnectionManager.connect({ ...serverConfig, ...instance }).catch((err) => {
120
+ logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.SERVER);
121
+ });
122
+ });
123
+ }
124
+ }
125
+ }
126
+ // Setup signal handlers for graceful shutdown
127
+ const shutdown = async (signal) => {
128
+ logger.info(`Received ${signal}, shutting down...`, LOG_MODULES.SERVER);
129
+ try {
130
+ await mcpConnectionManager.disconnectAll();
131
+ if (!isStdio && app) {
132
+ await app.close();
133
+ }
134
+ PidManager.removePid();
135
+ logger.info('Server stopped gracefully', LOG_MODULES.SERVER);
136
+ process.exit(0);
137
+ }
138
+ catch (error) {
139
+ logger.error('Error during shutdown:', error, LOG_MODULES.SERVER);
140
+ process.exit(1);
141
+ }
142
+ };
143
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
144
+ process.on('SIGINT', () => shutdown('SIGINT'));
145
+ if (isStdio) {
146
+ await gateway.start();
147
+ // Write PID after gateway starts successfully
148
+ PidManager.writePid();
149
+ }
150
+ else {
151
+ await app.listen({ port, host });
152
+ logger.info(`MCP Hub Lite Server running at http://${host}:${port}`, LOG_MODULES.SERVER);
153
+ // Write PID after server starts successfully
154
+ PidManager.writePid();
155
+ }
156
+ }
157
+ catch (err) {
158
+ logger.error('Failed to start server:', err, LOG_MODULES.SERVER);
159
+ // Clean up PID file if it exists
160
+ PidManager.removePid();
161
+ process.exit(1);
162
+ }
163
+ }
@@ -0,0 +1,132 @@
1
+ import type { ClientContext, ClientInfo, ClientRoot } from '../../shared/types/client.types.js';
2
+ /**
3
+ * Client tracking service that manages client connections and their metadata.
4
+ *
5
+ * This service maintains a registry of connected clients (typically IDEs or other
6
+ * MCP clients) and tracks their connection state, metadata, and workspace roots.
7
+ * It provides automatic cleanup of stale clients after a timeout period and
8
+ * publishes connection/disconnection events via the event bus.
9
+ *
10
+ * The service is primarily used by the MCP session manager to track which clients
11
+ * are connected and maintain their context information for proper session management.
12
+ *
13
+ * @example
14
+ * // Update client information when a new connection is established
15
+ * clientTrackerService.updateClient({
16
+ * sessionId: 'session-123',
17
+ * clientName: 'VS Code',
18
+ * clientVersion: '1.85.0',
19
+ * cwd: '/home/user/project'
20
+ * });
21
+ *
22
+ * // Get all currently connected clients
23
+ * const clients = clientTrackerService.getClients();
24
+ */
25
+ declare class ClientTrackerService {
26
+ private clients;
27
+ private get TIMEOUT_MS();
28
+ /**
29
+ * Creates a new client tracker service instance.
30
+ *
31
+ * Initializes the service with automatic periodic cleanup of stale clients
32
+ * every 60 seconds to prevent memory leaks from disconnected clients.
33
+ */
34
+ constructor();
35
+ /**
36
+ * Updates or creates a client entry with the provided context information.
37
+ *
38
+ * This method is called whenever a client sends a request with context information.
39
+ * It preserves existing client metadata that isn't provided in the new context,
40
+ * ensuring that clients don't lose their previously established information.
41
+ *
42
+ * If this is a new client (not previously tracked), it publishes a 'client-connected'
43
+ * event to notify other services about the new connection.
44
+ *
45
+ * @param context - The client context containing session ID and optional metadata
46
+ * @param context.sessionId - Unique identifier for the client session
47
+ * @param context.clientName - Optional name of the client application
48
+ * @param context.clientVersion - Optional version of the client application
49
+ * @param context.protocolVersion - Optional MCP protocol version
50
+ * @param context.project - Optional project identifier
51
+ * @param context.cwd - Optional current working directory
52
+ * @param context.userAgent - Optional user agent string
53
+ * @param context.ip - Optional client IP address
54
+ *
55
+ * @example
56
+ * clientTrackerService.updateClient({
57
+ * sessionId: 'session-123',
58
+ * clientName: 'VS Code',
59
+ * clientVersion: '1.85.0',
60
+ * cwd: '/home/user/project'
61
+ * });
62
+ */
63
+ updateClient(context: ClientContext): void;
64
+ /**
65
+ * Updates the workspace roots for a specific client session.
66
+ *
67
+ * This method is typically called when a client provides its workspace root
68
+ * directories, which helps determine the client's working directory context.
69
+ * If the client doesn't have a current working directory (cwd) set, it will
70
+ * attempt to infer one from the first root URI in the list.
71
+ *
72
+ * For file:// URIs, it converts them to local file paths using Node.js's
73
+ * fileURLToPath utility. For other URI schemes, it uses the URI directly.
74
+ *
75
+ * @param sessionId - The unique session identifier for the client
76
+ * @param roots - Array of client root objects containing URI information
77
+ *
78
+ * @example
79
+ * clientTrackerService.updateClientRoots('session-123', [
80
+ * { uri: 'file:///home/user/project' },
81
+ * { uri: 'file:///home/user/other-project' }
82
+ * ]);
83
+ */
84
+ updateClientRoots(sessionId: string, roots: ClientRoot[]): void;
85
+ /**
86
+ * Retrieves all currently tracked client information.
87
+ *
88
+ * Returns an array of all active client info objects, including their metadata
89
+ * and connection state. This is useful for monitoring all connected clients
90
+ * or displaying client information in administrative interfaces.
91
+ *
92
+ * @returns Array of ClientInfo objects representing all tracked clients
93
+ *
94
+ * @example
95
+ * const allClients = clientTrackerService.getClients();
96
+ * console.log(`Currently tracking ${allClients.length} clients`);
97
+ */
98
+ getClients(): ClientInfo[];
99
+ /**
100
+ * Retrieves client information for a specific session ID.
101
+ *
102
+ * Returns the complete client info object for the given session ID, or undefined
103
+ * if no client with that session ID is currently being tracked.
104
+ *
105
+ * @param sessionId - The unique session identifier to look up
106
+ * @returns ClientInfo object if found, undefined otherwise
107
+ *
108
+ * @example
109
+ * const client = clientTrackerService.getClient('session-123');
110
+ * if (client) {
111
+ * console.log(`Client ${client.clientName} is connected`);
112
+ * }
113
+ */
114
+ getClient(sessionId: string): ClientInfo | undefined;
115
+ /**
116
+ * Cleans up stale client entries that haven't been seen recently.
117
+ *
118
+ * This private method is called periodically to remove clients that haven't
119
+ * sent any requests within the timeout period (5 minutes by default). When
120
+ * a client is removed, it publishes a 'client-disconnected' event to notify
121
+ * other services about the disconnection.
122
+ *
123
+ * This prevents memory leaks from accumulating disconnected clients and ensures
124
+ * that the client registry only contains active connections.
125
+ *
126
+ * @private
127
+ */
128
+ private cleanup;
129
+ }
130
+ export declare const clientTrackerService: ClientTrackerService;
131
+ export {};
132
+ //# sourceMappingURL=client-tracker.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-tracker.service.d.ts","sourceRoot":"","sources":["../../../../src/services/client-tracker.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAO3F;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,cAAM,oBAAoB;IACxB,OAAO,CAAC,OAAO,CAAsC;IAErD,OAAO,KAAK,UAAU,GAErB;IAED;;;;;OAKG;;IAMH;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,YAAY,CAAC,OAAO,EAAE,aAAa;IA2B1C;;;;;;;;;;;;;;;;;;;OAmBG;IACI,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;IAwB/D;;;;;;;;;;;;OAYG;IACI,UAAU,IAAI,UAAU,EAAE;IAIjC;;;;;;;;;;;;;;OAcG;IACI,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI3D;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,OAAO;CAiBhB;AAED,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}