@loop_ouroboros/mcp-hub-lite 1.0.1 → 1.1.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 (374) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/client/assets/{HomeView-Cr1jX73N.js → HomeView-Bu2joUvW.js} +1 -1
  3. package/dist/client/assets/ResourceDetailView-BvrhDCD1.js +1 -0
  4. package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
  5. package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
  6. package/dist/client/assets/ResourcesView-LjqioF_s.js +1 -0
  7. package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
  8. package/dist/client/assets/ServerDashboard-FhHJFvUi.js +1 -0
  9. package/dist/client/assets/ServerDetail-BKV-M4qT.js +2 -0
  10. package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
  11. package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
  12. package/dist/client/assets/ServerListView-BXgtDyt3.js +36 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-D-ooYNdN.js +1 -0
  14. package/dist/client/assets/SettingsView-CMFG91Z4.js +1 -0
  15. package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
  16. package/dist/client/assets/ToolCallDialog-Bf4Xe4gH.js +1 -0
  17. package/dist/client/assets/ToolsView-DFpha1z0.js +1 -0
  18. package/dist/client/assets/_baseClone-Bp9Rjwd7.js +1 -0
  19. package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
  20. package/dist/client/assets/el-form-item-DdSUWYsl.js +12 -0
  21. package/dist/client/assets/el-input-99gMrutP.js +1 -0
  22. package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
  23. package/dist/client/assets/{el-loading-Csv24uBk.js → el-loading-CIQ5pD5u.js} +1 -1
  24. package/dist/client/assets/el-overlay-BVM6msGX.js +1 -0
  25. package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
  26. package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
  27. package/dist/client/assets/el-radio-group-DhXWy7ry.js +1 -0
  28. package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
  29. package/dist/client/assets/el-skeleton-item-DJz-Us12.js +1 -0
  30. package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
  31. package/dist/client/assets/el-switch-Bu8AQ5uM.js +1 -0
  32. package/dist/client/assets/el-tab-pane-BnGMaV56.js +1 -0
  33. package/dist/client/assets/el-table-column-BMWOaLS_.js +1 -0
  34. package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
  35. package/dist/client/assets/index-C2V-ZGji.js +1 -0
  36. package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
  37. package/dist/client/assets/index-vhkqgpmN.js +2 -0
  38. package/dist/client/assets/omit-CqPQN3XP.js +1 -0
  39. package/dist/client/assets/{raf-DDfJOMYh.js → raf-C2wXzaVU.js} +1 -1
  40. package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-BLHLXXJK.js} +1 -1
  41. package/dist/client/index.html +3 -3
  42. package/dist/server/shared/models/resource.model.d.ts +2 -1
  43. package/dist/server/shared/models/resource.model.d.ts.map +1 -1
  44. package/dist/server/shared/models/server.model.d.ts +363 -5
  45. package/dist/server/shared/models/server.model.d.ts.map +1 -1
  46. package/dist/server/shared/models/server.model.js +220 -1
  47. package/dist/server/shared/models/session.model.d.ts +2 -56
  48. package/dist/server/shared/models/session.model.d.ts.map +1 -1
  49. package/dist/server/shared/models/session.model.js +2 -55
  50. package/dist/server/shared/models/tool.model.d.ts +4 -2
  51. package/dist/server/shared/models/tool.model.d.ts.map +1 -1
  52. package/dist/server/shared/types/client.types.d.ts +4 -32
  53. package/dist/server/shared/types/client.types.d.ts.map +1 -1
  54. package/dist/server/shared/types/client.types.js +3 -2
  55. package/dist/server/shared/types/index.d.ts +3 -3
  56. package/dist/server/shared/types/index.d.ts.map +1 -1
  57. package/dist/server/shared/types/index.js +3 -3
  58. package/dist/server/shared/types/session-context.types.d.ts +35 -0
  59. package/dist/server/shared/types/session-context.types.d.ts.map +1 -0
  60. package/dist/server/shared/types/session-context.types.js +5 -0
  61. package/dist/server/shared/types/websocket.types.d.ts +17 -10
  62. package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
  63. package/dist/server/src/api/mcp/debug-response-wrapper.d.ts.map +1 -1
  64. package/dist/server/src/api/mcp/debug-response-wrapper.js +26 -1
  65. package/dist/server/src/api/mcp/gateway.d.ts +1 -3
  66. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
  67. package/dist/server/src/api/mcp/gateway.js +34 -61
  68. package/dist/server/src/api/mcp/session-context-extractor.d.ts +5 -5
  69. package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -1
  70. package/dist/server/src/api/mcp/session-context-extractor.js +15 -39
  71. package/dist/server/src/api/web/clients.js +2 -2
  72. package/dist/server/src/api/web/hub-tools.d.ts +2 -2
  73. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
  74. package/dist/server/src/api/web/hub-tools.js +3 -54
  75. package/dist/server/src/api/web/mcp-status.d.ts +1 -1
  76. package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
  77. package/dist/server/src/api/web/mcp-status.js +71 -30
  78. package/dist/server/src/api/web/resources.d.ts.map +1 -1
  79. package/dist/server/src/api/web/resources.js +28 -22
  80. package/dist/server/src/api/web/search.d.ts +2 -16
  81. package/dist/server/src/api/web/search.d.ts.map +1 -1
  82. package/dist/server/src/api/web/search.js +24 -45
  83. package/dist/server/src/api/web/servers.d.ts +3 -3
  84. package/dist/server/src/api/web/servers.d.ts.map +1 -1
  85. package/dist/server/src/api/web/servers.js +70 -25
  86. package/dist/server/src/api/web/sessions.js +1 -1
  87. package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
  88. package/dist/server/src/api/ws/ws-handler.js +4 -2
  89. package/dist/server/src/app.d.ts.map +1 -1
  90. package/dist/server/src/app.js +0 -4
  91. package/dist/server/src/cli/commands/list.js +2 -2
  92. package/dist/server/src/cli/commands/status.d.ts.map +1 -1
  93. package/dist/server/src/cli/commands/status.js +41 -30
  94. package/dist/server/src/cli/index.d.ts.map +1 -1
  95. package/dist/server/src/cli/index.js +2 -1
  96. package/dist/server/src/cli/server.d.ts +11 -2
  97. package/dist/server/src/cli/server.d.ts.map +1 -1
  98. package/dist/server/src/config/config-change-logger.d.ts +22 -0
  99. package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
  100. package/dist/server/src/config/config-change-logger.js +135 -11
  101. package/dist/server/src/config/config-loader.d.ts +6 -5
  102. package/dist/server/src/config/config-loader.d.ts.map +1 -1
  103. package/dist/server/src/config/config-loader.js +54 -16
  104. package/dist/server/src/config/config-manager.d.ts +51 -43
  105. package/dist/server/src/config/config-manager.d.ts.map +1 -1
  106. package/dist/server/src/config/config-manager.js +84 -66
  107. package/dist/server/src/config/config-migrator.d.ts +82 -0
  108. package/dist/server/src/config/config-migrator.d.ts.map +1 -0
  109. package/dist/server/src/config/config-migrator.js +348 -0
  110. package/dist/server/src/config/config-saver.d.ts +2 -0
  111. package/dist/server/src/config/config-saver.d.ts.map +1 -1
  112. package/dist/server/src/config/config-saver.js +8 -2
  113. package/dist/server/src/config/config.schema.d.ts +10 -102
  114. package/dist/server/src/config/config.schema.d.ts.map +1 -1
  115. package/dist/server/src/config/config.schema.js +15 -98
  116. package/dist/server/src/config/path-validator.d.ts +27 -0
  117. package/dist/server/src/config/path-validator.d.ts.map +1 -0
  118. package/dist/server/src/config/path-validator.js +53 -0
  119. package/dist/server/src/config/server-config-manager.d.ts +37 -31
  120. package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
  121. package/dist/server/src/config/server-config-manager.js +222 -66
  122. package/dist/server/src/config/type-converter.d.ts.map +1 -1
  123. package/dist/server/src/config/type-converter.js +3 -2
  124. package/dist/server/src/index.js +1 -1
  125. package/dist/server/src/models/event.model.d.ts +17 -10
  126. package/dist/server/src/models/event.model.d.ts.map +1 -1
  127. package/dist/server/src/models/server.model.d.ts +17 -3
  128. package/dist/server/src/models/server.model.d.ts.map +1 -1
  129. package/dist/server/src/models/server.model.js +2 -1
  130. package/dist/server/src/models/system-tools.constants.d.ts +10 -27
  131. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  132. package/dist/server/src/models/system-tools.constants.js +4 -8
  133. package/dist/server/src/pid/manager.d.ts.map +1 -1
  134. package/dist/server/src/pid/manager.js +2 -1
  135. package/dist/server/src/server/dev-server.js +34 -20
  136. package/dist/server/src/server/runner.d.ts.map +1 -1
  137. package/dist/server/src/server/runner.js +41 -26
  138. package/dist/server/src/services/client-tracker.service.d.ts +3 -128
  139. package/dist/server/src/services/client-tracker.service.d.ts.map +1 -1
  140. package/dist/server/src/services/client-tracker.service.js +4 -200
  141. package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
  142. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  143. package/dist/server/src/services/connection/connection-manager.js +286 -241
  144. package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
  145. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
  146. package/dist/server/src/services/connection/tool-cache.js +50 -55
  147. package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
  148. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
  149. package/dist/server/src/services/gateway/gateway.service.js +15 -19
  150. package/dist/server/src/services/gateway/global-transport.d.ts +10 -0
  151. package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
  152. package/dist/server/src/services/gateway/global-transport.js +42 -0
  153. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
  154. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
  155. package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
  156. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
  157. package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
  158. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
  159. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
  160. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +16 -55
  161. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
  162. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
  163. package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
  164. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
  165. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
  166. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
  167. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
  168. package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -1
  169. package/dist/server/src/services/gateway/request-handlers/tools-handler.js +4 -3
  170. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
  171. package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
  172. package/dist/server/src/services/gateway/types.d.ts +2 -1
  173. package/dist/server/src/services/gateway/types.d.ts.map +1 -1
  174. package/dist/server/src/services/hub-manager.service.d.ts +32 -238
  175. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
  176. package/dist/server/src/services/hub-manager.service.js +89 -267
  177. package/dist/server/src/services/hub-tools/index.d.ts +1 -3
  178. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
  179. package/dist/server/src/services/hub-tools/index.js +1 -2
  180. package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
  181. package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
  182. package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
  183. package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
  184. package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
  185. package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
  186. package/dist/server/src/services/hub-tools/resource-generator.d.ts +25 -5
  187. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
  188. package/dist/server/src/services/hub-tools/resource-generator.js +259 -64
  189. package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
  190. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
  191. package/dist/server/src/services/hub-tools/server-selector.js +44 -37
  192. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
  193. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
  194. package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
  195. package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
  196. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
  197. package/dist/server/src/services/hub-tools/tool-search.js +10 -4
  198. package/dist/server/src/services/hub-tools/types.d.ts +2 -2
  199. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
  200. package/dist/server/src/services/hub-tools.service.d.ts +43 -72
  201. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  202. package/dist/server/src/services/hub-tools.service.js +185 -110
  203. package/dist/server/src/services/search/search-cache.d.ts +0 -19
  204. package/dist/server/src/services/search/search-cache.d.ts.map +1 -1
  205. package/dist/server/src/services/search/search-cache.js +0 -24
  206. package/dist/server/src/services/search/search-core.service.d.ts +5 -5
  207. package/dist/server/src/services/search/search-core.service.js +11 -11
  208. package/dist/server/src/services/session/session-manager.d.ts +12 -256
  209. package/dist/server/src/services/session/session-manager.d.ts.map +1 -1
  210. package/dist/server/src/services/session/session-manager.js +23 -583
  211. package/dist/server/src/services/session-tracker.service.d.ts +124 -0
  212. package/dist/server/src/services/session-tracker.service.d.ts.map +1 -0
  213. package/dist/server/src/services/session-tracker.service.js +176 -0
  214. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
  215. package/dist/server/src/services/system-tool-handler.js +7 -17
  216. package/dist/server/src/utils/composite-key.d.ts +29 -0
  217. package/dist/server/src/utils/composite-key.d.ts.map +1 -0
  218. package/dist/server/src/utils/composite-key.js +39 -0
  219. package/dist/server/src/utils/error-handler.d.ts.map +1 -1
  220. package/dist/server/src/utils/error-handler.js +3 -2
  221. package/dist/server/src/utils/index.d.ts +2 -0
  222. package/dist/server/src/utils/index.d.ts.map +1 -1
  223. package/dist/server/src/utils/index.js +2 -0
  224. package/dist/server/src/utils/instance-id.d.ts +22 -0
  225. package/dist/server/src/utils/instance-id.d.ts.map +1 -0
  226. package/dist/server/src/utils/instance-id.js +59 -0
  227. package/dist/server/src/utils/json-utils.d.ts +4 -4
  228. package/dist/server/src/utils/json-utils.d.ts.map +1 -1
  229. package/dist/server/src/utils/json-utils.js +10 -4
  230. package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
  231. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
  232. package/dist/server/src/utils/logger/log-colors.d.ts +1 -0
  233. package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -1
  234. package/dist/server/src/utils/logger/log-colors.js +2 -1
  235. package/dist/server/src/utils/logger/log-context.d.ts +1 -0
  236. package/dist/server/src/utils/logger/log-context.d.ts.map +1 -1
  237. package/dist/server/src/utils/logger/log-formatter.d.ts +28 -0
  238. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
  239. package/dist/server/src/utils/logger/log-formatter.js +287 -5
  240. package/dist/server/src/utils/logger/log-modules.d.ts +15 -12
  241. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
  242. package/dist/server/src/utils/logger/log-modules.js +8 -8
  243. package/dist/server/src/utils/logger/log-output.d.ts +2 -2
  244. package/dist/server/src/utils/logger/log-output.d.ts.map +1 -1
  245. package/dist/server/src/utils/logger/log-output.js +27 -6
  246. package/dist/server/src/utils/logger/logger.d.ts +13 -0
  247. package/dist/server/src/utils/logger/logger.d.ts.map +1 -1
  248. package/dist/server/src/utils/logger/logger.js +42 -7
  249. package/dist/server/src/utils/parameter-validator.d.ts +10 -0
  250. package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
  251. package/dist/server/src/utils/parameter-validator.js +53 -0
  252. package/dist/server/src/utils/process-tree.d.ts +49 -0
  253. package/dist/server/src/utils/process-tree.d.ts.map +1 -0
  254. package/dist/server/src/utils/process-tree.js +285 -0
  255. package/dist/server/src/utils/request-context.d.ts +12 -30
  256. package/dist/server/src/utils/request-context.d.ts.map +1 -1
  257. package/dist/server/src/utils/request-context.js +10 -30
  258. package/dist/server/src/utils/sort-utils.d.ts +40 -0
  259. package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
  260. package/dist/server/src/utils/sort-utils.js +131 -0
  261. package/dist/server/src/utils/tool-args-parser.d.ts +0 -4
  262. package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -1
  263. package/dist/server/src/utils/tool-args-parser.js +0 -7
  264. package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
  265. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
  266. package/dist/server/src/utils/transports/sse-transport.js +55 -9
  267. package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
  268. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
  269. package/dist/server/src/utils/transports/stdio-transport.js +66 -247
  270. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
  271. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
  272. package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
  273. package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
  274. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
  275. package/dist/server/src/utils/transports/transport-factory.js +33 -13
  276. package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
  277. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
  278. package/dist/server/src/utils/version.d.ts +11 -0
  279. package/dist/server/src/utils/version.d.ts.map +1 -0
  280. package/dist/server/src/utils/version.js +57 -0
  281. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
  282. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
  283. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
  284. package/dist/server/tests/evaluation/evaluation.test.js +10 -9
  285. package/dist/server/tests/integration/api/gateway.test.js +24 -39
  286. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
  287. package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
  288. package/dist/server/tests/server.test.js +27 -16
  289. package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
  290. package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
  291. package/dist/server/tests/temp/temp-run-docling.js +53 -0
  292. package/dist/server/tests/temp/test-stack.d.ts +6 -0
  293. package/dist/server/tests/temp/test-stack.d.ts.map +1 -0
  294. package/dist/server/tests/temp/test-stack.js +40 -0
  295. package/dist/server/tests/types/test-helpers.d.ts +1 -2
  296. package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
  297. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
  298. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
  299. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
  300. package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
  301. package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
  302. package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
  303. package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
  304. package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
  305. package/dist/server/tests/unit/config/config-saver.test.js +200 -0
  306. package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
  307. package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
  308. package/dist/server/tests/unit/config/config.schema.test.js +347 -0
  309. package/dist/server/tests/unit/server/runner.test.js +86 -62
  310. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
  311. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
  312. package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
  313. package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
  314. package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
  315. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
  316. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
  317. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
  318. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
  319. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
  320. package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
  321. package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -334
  322. package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
  323. package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
  324. package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
  325. package/dist/server/tests/unit/services/session-manager.test.js +26 -436
  326. package/dist/server/tests/unit/utils/config.test.js +88 -186
  327. package/dist/server/tests/unit/utils/json-utils.test.js +107 -13
  328. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
  329. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
  330. package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
  331. package/dist/server/tests/unit/utils/logger.test.js +101 -0
  332. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
  333. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
  334. package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
  335. package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
  336. package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
  337. package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
  338. package/dist/server/tests/unit/utils/request-context.test.js +9 -28
  339. package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
  340. package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
  341. package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
  342. package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
  343. package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
  344. package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
  345. package/package.json +1 -1
  346. package/dist/client/assets/ResourceDetailView-BQ49hk0c.js +0 -1
  347. package/dist/client/assets/ResourcesView-BYZfWtia.js +0 -1
  348. package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
  349. package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +0 -1
  350. package/dist/client/assets/ServerDashboard-DHcxwKeh.js +0 -2
  351. package/dist/client/assets/ServerListView-DralUL71.js +0 -30
  352. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
  353. package/dist/client/assets/SessionsView-BCGRTqem.js +0 -1
  354. package/dist/client/assets/SettingsView-BLfxa6PZ.js +0 -1
  355. package/dist/client/assets/ToolCallDialog-DQ0OQ1mD.js +0 -1
  356. package/dist/client/assets/ToolsView-BLB6x3tC.js +0 -1
  357. package/dist/client/assets/_baseClone-Bo5mBgsT.js +0 -1
  358. package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
  359. package/dist/client/assets/el-form-item-BmeJKVSi.js +0 -12
  360. package/dist/client/assets/el-input-CeZiq23m.js +0 -1
  361. package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
  362. package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
  363. package/dist/client/assets/el-overlay-iw_hrrlC.js +0 -1
  364. package/dist/client/assets/el-select-B73uRP_Y.js +0 -1
  365. package/dist/client/assets/el-tab-pane-BgOTBn4X.js +0 -1
  366. package/dist/client/assets/el-table-column-Ld4GSD3x.js +0 -1
  367. package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
  368. package/dist/client/assets/el-tag-DYmSo8Bx.js +0 -1
  369. package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
  370. package/dist/client/assets/index-COYaYRbH.js +0 -1
  371. package/dist/client/assets/index-Cfcvxyee.js +0 -2
  372. package/dist/client/assets/index-PhuI36Zi.js +0 -1
  373. package/dist/client/assets/omit-7EL6VJO4.js +0 -1
  374. package/dist/client/assets/vnode-upjuIlvm.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"session-context-extractor.d.ts","sourceRoot":"","sources":["../../../../../src/api/mcp/session-context-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAInE,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,UAAU,CAAC,EAAE;YACX,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,CAAC;IAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,GAAG;IAC5F,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;CAC9B,CAoHA"}
1
+ {"version":3,"file":"session-context-extractor.d.ts","sourceRoot":"","sources":["../../../../../src/api/mcp/session-context-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAI7E,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,UAAU,CAAC,EAAE;YACX,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,CAAC;IAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,GAAG;IAC5F,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;CAChC,CAyFA"}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { logger, LOG_MODULES } from '../../utils/logger.js';
6
6
  import { randomUUID } from 'crypto';
7
- import { mcpSessionManager } from '../../services/mcp-session-manager.js';
7
+ import { mcpSessionManager } from '../../services/session/index.js';
8
8
  /**
9
9
  * Extracts session context from incoming MCP requests to establish client identity and session management.
10
10
  *
@@ -19,12 +19,12 @@ import { mcpSessionManager } from '../../services/mcp-session-manager.js';
19
19
  * project information, IP address, and user agent for comprehensive session tracking.
20
20
  *
21
21
  * @param {FastifyRequest<{ Body: RequestBody | null }>} request - Incoming Fastify request object
22
- * @returns {{ sessionId: string; clientContext: ClientContext }} Object containing resolved session ID and enriched client context
22
+ * @returns {{ sessionId: string; sessionContext: SessionContext }} Object containing resolved session ID and enriched session context
23
23
  *
24
24
  * @example
25
25
  * ```typescript
26
- * const { sessionId, clientContext } = extractSessionContext(request);
27
- * console.log(`Session: ${sessionId}, Client: ${clientContext.clientName}`);
26
+ * const { sessionId, sessionContext } = extractSessionContext(request);
27
+ * console.log(`Session: ${sessionId}, Client: ${sessionContext.clientName}`);
28
28
  * ```
29
29
  */
30
30
  export function extractSessionContext(request) {
@@ -49,14 +49,14 @@ export function extractSessionContext(request) {
49
49
  logger.debug(`Extracted sessionId from URL: ${sessionId}`, LOG_MODULES.CONTEXT);
50
50
  }
51
51
  }
52
- // If sessionId was extracted, check if it exists in persisted sessions (for debugging)
52
+ // If sessionId was extracted, check if it exists in memory (for debugging)
53
53
  if (sessionId) {
54
- const persistedSession = mcpSessionManager.getSessionState(sessionId);
55
- if (persistedSession) {
56
- logger.debug(`Session ${sessionId} found in persisted sessions`, LOG_MODULES.CONTEXT);
54
+ const hasSession = mcpSessionManager.hasSession(sessionId);
55
+ if (hasSession) {
56
+ logger.debug(`Session ${sessionId} found in active sessions`, LOG_MODULES.CONTEXT);
57
57
  }
58
58
  else {
59
- logger.debug(`Session ${sessionId} not found in persisted sessions (will create new)`, LOG_MODULES.CONTEXT);
59
+ logger.debug(`Session ${sessionId} not found in active sessions (will create new)`, LOG_MODULES.CONTEXT);
60
60
  }
61
61
  }
62
62
  // Extract client info from headers and request body
@@ -68,25 +68,10 @@ export function extractSessionContext(request) {
68
68
  if (!sessionId && isInitializeRequest && request.body?.params?.clientInfo) {
69
69
  const { name, version } = request.body.params.clientInfo;
70
70
  protocolVersion = request.body.params.protocolVersion;
71
- const cwd = headers['x-mcp-cwd'] || headers['x-cwd'];
72
- // Generate sessionId from client info
73
- let baseId = `${name.replace(/[^a-zA-Z0-9-]/g, '')}-${version.replace(/[^a-zA-Z0-9-]/g, '')}`;
74
- if (cwd) {
75
- const cwdHash = cwd
76
- .split('')
77
- .reduce((acc, char) => {
78
- acc = (acc << 5) - acc + char.charCodeAt(0);
79
- return acc & acc;
80
- }, 0)
81
- .toString(16)
82
- .replace('-', '');
83
- baseId = `${baseId}-${cwdHash}`;
84
- }
85
- else {
86
- const randomHash = randomUUID().substring(0, 8);
87
- baseId = `${baseId}-${randomHash}`;
88
- }
89
- sessionId = baseId;
71
+ // Generate sessionId from client info with random hash (no cwd dependency)
72
+ const baseId = `${name.replace(/[^a-zA-Z0-9-]/g, '')}-${version.replace(/[^a-zA-Z0-9-]/g, '')}`;
73
+ const randomHash = randomUUID().substring(0, 8);
74
+ sessionId = `${baseId}-${randomHash}`;
90
75
  logger.debug(`Generated sessionId from initialize params: ${sessionId}`, LOG_MODULES.CONTEXT);
91
76
  // Save client version and protocol version information
92
77
  clientVersion = version;
@@ -105,23 +90,14 @@ export function extractSessionContext(request) {
105
90
  logger.debug(`Generated new sessionId: ${sessionId}`, LOG_MODULES.CONTEXT);
106
91
  }
107
92
  }
108
- // Add consistency check before returning session information
109
- if (sessionId && mcpSessionManager.getSessionState(sessionId)) {
110
- const hasSessionObject = mcpSessionManager.hasSession(sessionId);
111
- if (!hasSessionObject) {
112
- logger.warn(`Session state exists but session object missing for ${sessionId}`, LOG_MODULES.CONTEXT);
113
- }
114
- }
115
- const clientContext = {
93
+ const sessionContext = {
116
94
  sessionId,
117
95
  clientName,
118
96
  clientVersion,
119
97
  protocolVersion,
120
- cwd: headers['x-mcp-cwd'] || headers['x-cwd'],
121
- project: headers['x-mcp-project'] || headers['x-project'],
122
98
  ip: request.ip,
123
99
  userAgent: headers['user-agent'],
124
100
  timestamp: Date.now()
125
101
  };
126
- return { sessionId, clientContext };
102
+ return { sessionId, sessionContext };
127
103
  }
@@ -1,4 +1,4 @@
1
- import { clientTrackerService } from '../../services/client-tracker.service.js';
1
+ import { sessionTrackerService } from '../../services/session-tracker.service.js';
2
2
  import { logger } from '../../utils/logger.js';
3
3
  /**
4
4
  * Registers web API routes for client management endpoints.
@@ -30,7 +30,7 @@ import { logger } from '../../utils/logger.js';
30
30
  export async function webClientRoutes(fastify) {
31
31
  fastify.get('/api/clients', async (_request, reply) => {
32
32
  try {
33
- const clients = clientTrackerService.getClients();
33
+ const clients = sessionTrackerService.getSessions();
34
34
  return reply.send(clients);
35
35
  }
36
36
  catch (error) {
@@ -7,12 +7,12 @@ import { FastifyInstance } from 'fastify';
7
7
  * tool management and execution within the MCP Hub Lite system.
8
8
  *
9
9
  * The API supports both system-level tools (built into MCP Hub Lite) and server-specific tools
10
- * from connected MCP servers. It enables powerful search capabilities, detailed tool inspection,
10
+ * from connected MCP servers. It enables tool listing, detailed tool inspection,
11
11
  * and secure tool invocation with proper parameter validation.
12
12
  *
13
13
  * Key features include:
14
14
  * - System tool discovery and execution
15
- * - Cross-server tool listing and searching
15
+ * - Cross-server tool listing
16
16
  * - Server-specific tool management
17
17
  * - Tool schema inspection and validation
18
18
  * - Secure tool invocation with session context
@@ -1 +1 @@
1
- {"version":3,"file":"hub-tools.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/hub-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA8B1C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBA6O/D"}
1
+ {"version":3,"file":"hub-tools.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/hub-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAoB1C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBAsJ/D"}
@@ -8,12 +8,12 @@ import { hubToolsService } from '../../services/hub-tools.service.js';
8
8
  * tool management and execution within the MCP Hub Lite system.
9
9
  *
10
10
  * The API supports both system-level tools (built into MCP Hub Lite) and server-specific tools
11
- * from connected MCP servers. It enables powerful search capabilities, detailed tool inspection,
11
+ * from connected MCP servers. It enables tool listing, detailed tool inspection,
12
12
  * and secure tool invocation with proper parameter validation.
13
13
  *
14
14
  * Key features include:
15
15
  * - System tool discovery and execution
16
- * - Cross-server tool listing and searching
16
+ * - Cross-server tool listing
17
17
  * - Server-specific tool management
18
18
  * - Tool schema inspection and validation
19
19
  * - Secure tool invocation with session context
@@ -58,16 +58,6 @@ export async function webHubToolsRoutes(fastify) {
58
58
  const servers = await hubToolsService.listServers();
59
59
  return servers;
60
60
  });
61
- // GET /web/hub-tools/servers/find - Find servers matching a pattern
62
- fastify.get('/web/hub-tools/servers/find', async (request) => {
63
- const { pattern, searchIn = 'both', caseSensitive = 'false' } = request.query;
64
- const servers = await hubToolsService.findServers({
65
- pattern,
66
- searchIn: searchIn,
67
- caseSensitive: caseSensitive === 'true'
68
- });
69
- return servers;
70
- });
71
61
  // GET /web/hub-tools/servers/:serverName/tools - List all tools in a specific server
72
62
  fastify.get('/web/hub-tools/servers/:serverName/tools', async (request, reply) => {
73
63
  try {
@@ -77,7 +67,7 @@ export async function webHubToolsRoutes(fastify) {
77
67
  sessionId,
78
68
  tags: tags ? JSON.parse(tags) : undefined
79
69
  };
80
- const result = await hubToolsService.listAllToolsInServer({ serverName, requestOptions });
70
+ const result = await hubToolsService.listToolsInServer({ serverName, requestOptions });
81
71
  return result;
82
72
  }
83
73
  catch (error) {
@@ -87,37 +77,6 @@ export async function webHubToolsRoutes(fastify) {
87
77
  });
88
78
  }
89
79
  });
90
- // GET /web/hub-tools/servers/:serverName/tools/find - Find tools in a specific server
91
- fastify.get('/web/hub-tools/servers/:serverName/tools/find', async (request, reply) => {
92
- try {
93
- const { serverName } = request.params;
94
- const { pattern, searchIn = 'both', caseSensitive = 'false', sessionId, tags } = request.query;
95
- const requestOptions = {
96
- sessionId,
97
- tags: tags ? JSON.parse(tags) : undefined
98
- };
99
- const result = await hubToolsService.findToolsInServer({
100
- serverName,
101
- pattern,
102
- searchIn: searchIn,
103
- caseSensitive: caseSensitive === 'true',
104
- requestOptions
105
- });
106
- return result;
107
- }
108
- catch (error) {
109
- if (error instanceof Error && error.message.includes('not found')) {
110
- return reply.code(404).send({
111
- error: 'Server not found',
112
- message: error.message
113
- });
114
- }
115
- return reply.code(500).send({
116
- error: 'Internal Server Error',
117
- message: error instanceof Error ? error.message : 'Unknown error'
118
- });
119
- }
120
- });
121
80
  // GET /web/hub-tools/servers/:serverName/tools/:toolName - Get specific tool details
122
81
  fastify.get('/web/hub-tools/servers/:serverName/tools/:toolName', async (request, reply) => {
123
82
  try {
@@ -192,14 +151,4 @@ export async function webHubToolsRoutes(fastify) {
192
151
  const allTools = await hubToolsService.listAllTools();
193
152
  return allTools;
194
153
  });
195
- // GET /web/hub-tools/tools/find - Find tools matching a pattern across all servers
196
- fastify.get('/web/hub-tools/tools/find', async (request) => {
197
- const { pattern, searchIn = 'both', caseSensitive = 'false' } = request.query;
198
- const tools = await hubToolsService.findTools({
199
- pattern,
200
- searchIn: searchIn,
201
- caseSensitive: caseSensitive === 'true'
202
- });
203
- return tools;
204
- });
205
154
  }
@@ -1,6 +1,6 @@
1
1
  import { FastifyInstance } from 'fastify';
2
2
  /**
3
- * MCP Connection Status API Routes
3
+ * MCP Connection Status API Routes (v1.1 format)
4
4
  *
5
5
  * Provides real-time monitoring and management endpoints for MCP (Model Context Protocol) server connections.
6
6
  * This module enables administrators to check the health of connected servers, manage connection states,
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-status.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/mcp-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAO1C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,iBAsHhE"}
1
+ {"version":3,"file":"mcp-status.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/mcp-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAQ1C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,iBAuKhE"}
@@ -2,8 +2,9 @@ import { hubManager } from '../../services/hub-manager.service.js';
2
2
  import { mcpConnectionManager } from '../../services/mcp-connection-manager.js';
3
3
  import { logger } from '../../utils/logger.js';
4
4
  import { LOG_MODULES } from '../../utils/logger/log-modules.js';
5
+ import { resolveInstanceConfig } from '../../config/config-migrator.js';
5
6
  /**
6
- * MCP Connection Status API Routes
7
+ * MCP Connection Status API Routes (v1.1 format)
7
8
  *
8
9
  * Provides real-time monitoring and management endpoints for MCP (Model Context Protocol) server connections.
9
10
  * This module enables administrators to check the health of connected servers, manage connection states,
@@ -33,16 +34,16 @@ export async function webMcpStatusRoutes(fastify) {
33
34
  fastify.get('/web/mcp/status', async (_request, reply) => {
34
35
  try {
35
36
  const servers = hubManager.getAllServers();
36
- const serverInstances = hubManager.getServerInstances();
37
37
  const statusList = [];
38
38
  servers.forEach((server) => {
39
- const instances = serverInstances[server.name] || [];
40
- instances.forEach((instance) => {
39
+ const instances = server.config.instances || [];
40
+ // If no instances, add a default disconnected entry for this server
41
+ if (instances.length === 0) {
41
42
  statusList.push({
42
- id: instance.id || '',
43
+ id: server.name,
43
44
  name: server.name,
44
- type: server.config.type,
45
- status: mcpConnectionManager.getStatus(instance.id || '') || {
45
+ type: server.config.template.type,
46
+ status: {
46
47
  connected: false,
47
48
  lastCheck: Date.now(),
48
49
  toolsCount: 0,
@@ -50,7 +51,25 @@ export async function webMcpStatusRoutes(fastify) {
50
51
  pid: undefined
51
52
  }
52
53
  });
53
- });
54
+ }
55
+ else {
56
+ // Add status for each instance
57
+ instances.forEach((instance) => {
58
+ const resolvedConfig = resolveInstanceConfig(server.config, instance.id);
59
+ statusList.push({
60
+ id: instance.id || '',
61
+ name: server.name,
62
+ type: resolvedConfig?.type || server.config.template.type,
63
+ status: mcpConnectionManager.getStatus(server.name, instance.index ?? 0) || {
64
+ connected: false,
65
+ lastCheck: Date.now(),
66
+ toolsCount: 0,
67
+ resourcesCount: 0,
68
+ pid: undefined
69
+ }
70
+ });
71
+ });
72
+ }
54
73
  });
55
74
  return statusList;
56
75
  }
@@ -62,19 +81,34 @@ export async function webMcpStatusRoutes(fastify) {
62
81
  // POST /web/mcp/servers/:id/connect - Connect to MCP server
63
82
  fastify.post('/web/mcp/servers/:id/connect', async (request, reply) => {
64
83
  try {
65
- const server = hubManager.getServerById(request.params.id);
66
- if (!server) {
84
+ const serverInfo = hubManager.getServerById(request.params.id);
85
+ if (!serverInfo) {
67
86
  return reply.code(404).send({ error: 'Server not found' });
68
87
  }
69
- const success = await mcpConnectionManager.connect({
70
- ...server.config,
71
- ...server.instance
72
- });
88
+ const resolvedConfig = resolveInstanceConfig(serverInfo.config, serverInfo.instance.id);
89
+ if (!resolvedConfig) {
90
+ return reply.code(404).send({ error: 'Server instance configuration not found' });
91
+ }
92
+ // Create a compatible config object with required instance fields
93
+ const connectConfig = {
94
+ ...resolvedConfig,
95
+ id: serverInfo.instance.id,
96
+ timestamp: Date.now(),
97
+ hash: '',
98
+ pid: undefined,
99
+ startTime: undefined,
100
+ index: serverInfo.instance.index,
101
+ displayName: serverInfo.instance.displayName
102
+ };
103
+ const instanceIndex = serverInfo.instance.index ?? 0;
104
+ const success = await mcpConnectionManager.connect(serverInfo.name, instanceIndex, connectConfig);
73
105
  if (!success) {
74
106
  return reply.code(500).send({ error: 'Failed to connect to server' });
75
107
  }
76
- // Update enabled status in config - The enabled field now belongs to server configuration, not instance configuration
77
- await hubManager.updateServer(server.name, { enabled: true });
108
+ // Note: Do NOT update the instance's enabled field here.
109
+ // The enabled field is a configuration parameter that should only be modified
110
+ // by the user explicitly via the configuration panel.
111
+ // Runtime connect/disconnect operations should not affect persistent configuration.
78
112
  return { success: true };
79
113
  }
80
114
  catch (error) {
@@ -85,13 +119,15 @@ export async function webMcpStatusRoutes(fastify) {
85
119
  // POST /web/mcp/servers/:id/disconnect - Disconnect from MCP server
86
120
  fastify.post('/web/mcp/servers/:id/disconnect', async (request, reply) => {
87
121
  try {
88
- await mcpConnectionManager.disconnect(request.params.id);
89
- // Update enabled status in config to ensure it doesn't show as "starting"
90
- // The enabled field now belongs to server configuration, not instance configuration
91
- const server = hubManager.getServerById(request.params.id);
92
- if (server) {
93
- await hubManager.updateServer(server.name, { enabled: false });
122
+ const serverInfo = hubManager.getServerById(request.params.id);
123
+ if (!serverInfo) {
124
+ return reply.code(404).send({ error: 'Server not found' });
94
125
  }
126
+ await mcpConnectionManager.disconnect(serverInfo.name, serverInfo.instance.index ?? 0);
127
+ // Note: Do NOT update the instance's enabled field here.
128
+ // The enabled field is a configuration parameter that should only be modified
129
+ // by the user explicitly via the configuration panel.
130
+ // Runtime connect/disconnect operations should not affect persistent configuration.
95
131
  return { success: true };
96
132
  }
97
133
  catch (error) {
@@ -99,11 +135,14 @@ export async function webMcpStatusRoutes(fastify) {
99
135
  return reply.code(500).send({ error: 'Internal Server Error' });
100
136
  }
101
137
  });
102
- // GET /web/mcp/servers/:id/tools - Get tools for a specific server
103
- fastify.get('/web/mcp/servers/:id/tools', async (request, reply) => {
138
+ // GET /web/mcp/servers/:name/tools - Get tools for a specific server
139
+ fastify.get('/web/mcp/servers/:name/tools', async (request, reply) => {
104
140
  try {
105
- logger.info(`API request tools for server: ${request.params.id}`, LOG_MODULES.MCP_STATUS);
106
- const tools = mcpConnectionManager.getTools(request.params.id);
141
+ const serverName = request.params.name;
142
+ logger.info(`API request tools for server: ${serverName}`, LOG_MODULES.MCP_STATUS);
143
+ // Use getToolsByServerName which queries serverNameToolCache
144
+ // This aggregates tools from all instances of the same server name
145
+ const tools = mcpConnectionManager.getToolsByServerName(serverName);
107
146
  return tools;
108
147
  }
109
148
  catch (error) {
@@ -111,11 +150,13 @@ export async function webMcpStatusRoutes(fastify) {
111
150
  return reply.code(500).send({ error: 'Internal Server Error' });
112
151
  }
113
152
  });
114
- // GET /web/mcp/servers/:id/resources - Get resources for a specific server
115
- fastify.get('/web/mcp/servers/:id/resources', async (request, reply) => {
153
+ // GET /web/mcp/servers/:name/resources - Get resources for a specific server
154
+ fastify.get('/web/mcp/servers/:name/resources', async (request, reply) => {
116
155
  try {
117
- logger.info(`API request resources for server: ${request.params.id}`, LOG_MODULES.MCP_STATUS);
118
- const resources = mcpConnectionManager.getResources(request.params.id);
156
+ const serverName = request.params.name;
157
+ logger.info(`API request resources for server: ${serverName}`, LOG_MODULES.MCP_STATUS);
158
+ // Use getResourcesByName which queries resourceCache by server name
159
+ const resources = mcpConnectionManager.getResourcesByName(serverName);
119
160
  return resources;
120
161
  }
121
162
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAM1C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBA2E/D"}
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAK1C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBAkF/D"}
@@ -1,4 +1,3 @@
1
- import { mcpConnectionManager } from '../../services/mcp-connection-manager.js';
2
1
  import { hubToolsService } from '../../services/hub-tools.service.js';
3
2
  import { MCP_HUB_LITE_SERVER } from '../../models/system-tools.constants.js';
4
3
  /**
@@ -38,29 +37,44 @@ export async function webResourceRoutes(fastify) {
38
37
  // Handle system resources (mcp-hub-lite)
39
38
  if (name === MCP_HUB_LITE_SERVER) {
40
39
  const content = await hubToolsService.readResource(uri);
40
+ // Determine mimeType and format content appropriately
41
+ let mimeType = 'application/json';
42
+ let text;
43
+ // Use-guide is markdown
44
+ if (uri === 'hub://use-guide') {
45
+ mimeType = 'text/markdown';
46
+ text = typeof content === 'string' ? content : JSON.stringify(content, null, 2);
47
+ }
48
+ else {
49
+ // Server metadata is JSON
50
+ mimeType = 'application/json';
51
+ text = typeof content === 'string' ? content : JSON.stringify(content, null, 2);
52
+ }
41
53
  // Wrap content in MCP resource read format
42
54
  return {
43
55
  contents: [
44
56
  {
45
57
  uri,
46
- mimeType: 'application/json',
47
- text: JSON.stringify(content, null, 2)
58
+ mimeType,
59
+ text
48
60
  }
49
61
  ]
50
62
  };
51
63
  }
52
- // Find server ID
53
- const serverId = mcpConnectionManager.getServerIdByName(name);
54
- if (!serverId) {
55
- // Try using name directly as ID (unlikely but for robustness)
56
- if (mcpConnectionManager.getStatus(name)) {
57
- const result = await mcpConnectionManager.readResource(name, uri);
58
- return result;
64
+ // Use hubToolsService.readResource to handle Hub URI -> MCP URI conversion
65
+ // This properly maps hub://servers/{name}/{instanceIndex}/{mcpPath} to MCP native URI
66
+ try {
67
+ // hubToolsService.readResource already returns MCP format for forwarding case
68
+ return await hubToolsService.readResource(uri);
69
+ }
70
+ catch (error) {
71
+ const errorObj = error;
72
+ if (errorObj.message.includes('not found') ||
73
+ errorObj.message.includes('not connected')) {
74
+ return reply.code(404).send({ error: errorObj.message });
59
75
  }
60
- return reply.code(404).send({ error: 'Server not connected or not found' });
76
+ return reply.code(500).send({ error: errorObj.message });
61
77
  }
62
- const result = await mcpConnectionManager.readResource(serverId, uri);
63
- return result;
64
78
  }
65
79
  catch (error) {
66
80
  const errorObj = error;
@@ -69,20 +83,12 @@ export async function webResourceRoutes(fastify) {
69
83
  });
70
84
  fastify.get('/web/resources', async (_request, reply) => {
71
85
  try {
72
- const allResources = mcpConnectionManager.getAllResources();
73
- // Add Hub System resources
86
+ // Return only Hub System resources (dynamically generated hub:// format)
74
87
  const systemResources = await hubToolsService.listResources();
75
88
  const resources = {};
76
- // 1. Add Hub System resources first if they exist
77
89
  if (systemResources && systemResources.length > 0) {
78
90
  resources[MCP_HUB_LITE_SERVER] = systemResources;
79
91
  }
80
- // 2. Add other server resources, filtering out empty ones
81
- for (const [serverName, serverResources] of Object.entries(allResources)) {
82
- if (serverResources && serverResources.length > 0) {
83
- resources[serverName] = serverResources;
84
- }
85
- }
86
92
  return { resources };
87
93
  }
88
94
  catch (error) {
@@ -2,25 +2,11 @@ import { FastifyInstance } from 'fastify';
2
2
  /**
3
3
  * Tool Search API Routes
4
4
  *
5
- * Provides powerful fuzzy search capabilities for discovering tools across all connected MCP (Model Context Protocol) servers.
6
- * This module enables users to quickly find relevant tools based on name, description, or other metadata using
7
- * advanced search algorithms with pagination support.
8
- *
9
- * The search API supports flexible query parameters including result limits, offsets for pagination,
10
- * and various search modes. It integrates with the core search service to provide fast and accurate
11
- * tool discovery across the entire MCP ecosystem.
12
- *
13
- * Additionally includes a dedicated health check endpoint for monitoring the search service availability
14
- * in production environments.
5
+ * Provides simple string-based search for discovering tools across all connected MCP servers.
6
+ * Uses straightforward string matching on tool name and description.
15
7
  *
16
8
  * @param fastify - The Fastify instance to register routes on
17
9
  * @returns Promise that resolves when all routes are registered
18
- *
19
- * @example
20
- * ```typescript
21
- * // Register search routes
22
- * await webSearchRoutes(app);
23
- * ```
24
10
  */
25
11
  export declare function webSearchRoutes(fastify: FastifyInstance): Promise<void>;
26
12
  //# sourceMappingURL=search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI1C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,iBA+C7D"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,iBAsC7D"}
@@ -1,62 +1,41 @@
1
- import { searchCoreService } from '../../services/search/search-core.service.js';
1
+ import { mcpConnectionManager } from '../../services/mcp-connection-manager.js';
2
2
  /**
3
3
  * Tool Search API Routes
4
4
  *
5
- * Provides powerful fuzzy search capabilities for discovering tools across all connected MCP (Model Context Protocol) servers.
6
- * This module enables users to quickly find relevant tools based on name, description, or other metadata using
7
- * advanced search algorithms with pagination support.
8
- *
9
- * The search API supports flexible query parameters including result limits, offsets for pagination,
10
- * and various search modes. It integrates with the core search service to provide fast and accurate
11
- * tool discovery across the entire MCP ecosystem.
12
- *
13
- * Additionally includes a dedicated health check endpoint for monitoring the search service availability
14
- * in production environments.
5
+ * Provides simple string-based search for discovering tools across all connected MCP servers.
6
+ * Uses straightforward string matching on tool name and description.
15
7
  *
16
8
  * @param fastify - The Fastify instance to register routes on
17
9
  * @returns Promise that resolves when all routes are registered
18
- *
19
- * @example
20
- * ```typescript
21
- * // Register search routes
22
- * await webSearchRoutes(app);
23
- * ```
24
10
  */
25
11
  export async function webSearchRoutes(fastify) {
26
- // GET /web/search - Search for tools with query and optional filters
12
+ // GET /web/search - Search for tools with simple string matching
27
13
  fastify.get('/web/search', async (request) => {
28
- const { q, limit, offset } = request.query;
29
- // Parse search options
30
- const options = {
31
- mode: 'fuzzy',
32
- limit: limit ? Number(limit) : 50,
33
- offset: offset ? Number(offset) : 0,
34
- filters: {}
35
- };
36
- // Perform search
37
- const results = await searchCoreService.search(q || '', options);
14
+ const { q, limit = 50 } = request.query;
15
+ const allTools = mcpConnectionManager.getAllTools();
16
+ const query = q?.toLowerCase() || '';
17
+ const filtered = allTools.filter((tool) => {
18
+ if (!query)
19
+ return true;
20
+ const nameMatch = tool.name.toLowerCase().includes(query);
21
+ const descMatch = tool.description?.toLowerCase().includes(query);
22
+ return nameMatch || descMatch;
23
+ });
24
+ const results = filtered.slice(0, limit);
38
25
  return {
39
- results,
26
+ results: results.map((tool) => ({
27
+ name: tool.name,
28
+ description: tool.description,
29
+ serverName: tool.serverName
30
+ })),
40
31
  pagination: {
41
- total: results.length,
42
- limit: options.limit,
43
- offset: options.offset,
44
- hasMore: results.length >= options.limit
32
+ total: filtered.length,
33
+ limit,
34
+ returned: results.length
45
35
  },
46
36
  metadata: {
47
- query: q,
48
- filters: options.filters,
49
- processingTime: 0, // To be implemented: measure processing time
50
- cached: false // To be implemented: check cache status
37
+ query: q
51
38
  }
52
39
  };
53
40
  });
54
- // GET /web/search/health - Search service health check (for monitoring)
55
- fastify.get('/web/search/health', async () => {
56
- return {
57
- status: 'healthy',
58
- timestamp: new Date().toISOString(),
59
- service: 'search-core-service'
60
- };
61
- });
62
41
  }