@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,63 +1,64 @@
1
1
  import type { Tool } from '../../../shared/models/tool.model.js';
2
2
  /**
3
- * Manages tool caching for MCP connections at both server ID and server name levels.
3
+ * Manages tool caching for MCP connections at both composite key and server name levels.
4
4
  *
5
- * This class encapsulates all tool cache operations, providing both server ID-level
5
+ * This class encapsulates all tool cache operations, providing both composite key-level
6
6
  * and server name-level caching for efficient tool lookup while maintaining data
7
7
  * consistency across multiple instances of the same server.
8
8
  */
9
9
  export declare class ToolCache {
10
10
  private toolCache;
11
11
  private serverNameToolCache;
12
- private nameToIdMap;
12
+ private nameToCompositeKeyMap;
13
13
  /**
14
- * Sets the name-to-ID mapping for server name resolution.
14
+ * Sets the name-to-composite-key mapping for server name resolution.
15
15
  *
16
16
  * @param serverName - The server name
17
- * @param serverId - The corresponding server instance ID
17
+ * @param compositeKey - The corresponding composite key
18
18
  */
19
- setNameMapping(serverName: string, serverId: string): void;
19
+ setNameMapping(serverName: string, compositeKey: string): void;
20
20
  /**
21
- * Removes the name-to-ID mapping for a server.
21
+ * Removes the name-to-composite-key mapping for a server.
22
22
  *
23
23
  * @param serverName - The server name to remove
24
24
  */
25
25
  removeNameMapping(serverName: string): void;
26
26
  /**
27
- * Removes name mapping by server ID.
27
+ * Removes name mapping by composite key.
28
28
  *
29
- * @param serverId - The server ID to remove
29
+ * @param compositeKey - The composite key to remove
30
30
  */
31
- removeNameMappingById(serverId: string): void;
31
+ removeNameMappingById(compositeKey: string): void;
32
32
  /**
33
- * Gets the server ID for a given server name.
33
+ * Gets the composite key for a given server name.
34
34
  *
35
35
  * @param name - The server name
36
- * @returns The server ID or undefined if not found
36
+ * @returns The composite key or undefined if not found
37
37
  */
38
- getServerIdByName(name: string): string | undefined;
38
+ getCompositeKeyByName(name: string): string | undefined;
39
39
  /**
40
- * Gets the server name for a given server ID.
40
+ * Gets the server name for a given composite key.
41
41
  *
42
- * @param serverId - The server ID
42
+ * @param compositeKey - The composite key
43
43
  * @returns The server name or 'unknown' if not found
44
44
  */
45
- getServerNameById(serverId: string): string;
45
+ getServerNameById(compositeKey: string): string;
46
46
  /**
47
47
  * Sets tools for a specific server instance and updates both caches.
48
48
  *
49
- * @param serverId - The server instance ID
49
+ * @param serverName - The server name
50
+ * @param serverIndex - The instance index
50
51
  * @param tools - The tools to cache
51
- * @param serverName - Optional server name for name-level cache update
52
52
  */
53
- setTools(serverId: string, tools: Tool[], serverName?: string): void;
53
+ setTools(serverName: string, serverIndex: number, tools: Tool[]): void;
54
54
  /**
55
55
  * Gets tools for a specific server instance.
56
56
  *
57
- * @param serverId - The server instance ID
57
+ * @param serverName - The server name
58
+ * @param serverIndex - The instance index
58
59
  * @returns Array of tools, empty if none
59
60
  */
60
- getTools(serverId: string): Tool[];
61
+ getTools(serverName: string, serverIndex: number): Tool[];
61
62
  /**
62
63
  * Gets tools by server name from the server name-level cache.
63
64
  *
@@ -88,23 +89,24 @@ export declare class ToolCache {
88
89
  /**
89
90
  * Gets all tool cache entries.
90
91
  *
91
- * @returns Array of [serverId, tools] tuples
92
+ * @returns Array of [compositeKey, tools] tuples
92
93
  */
93
94
  getToolCacheEntries(): [string, Tool[]][];
94
95
  /**
95
96
  * Returns an iterator over the tool cache entries for backward compatibility.
96
97
  * This mimics the Map.entries() method signature.
97
98
  *
98
- * @returns Iterator of [serverId, tools] tuples
99
+ * @returns Iterator of [compositeKey, tools] tuples
99
100
  * @deprecated Use getToolCacheEntries() instead
100
101
  */
101
102
  entries(): IterableIterator<[string, Tool[]]>;
102
103
  /**
103
104
  * Clears tools for a specific server and updates both caches.
104
105
  *
105
- * @param serverId - The server instance ID
106
+ * @param serverName - The server name
107
+ * @param serverIndex - The instance index
106
108
  */
107
- clearTools(serverId: string): void;
109
+ clearTools(serverName: string, serverIndex: number): void;
108
110
  /**
109
111
  * Updates the server name-level cache for a specific server.
110
112
  * This aggregates tools from all instances of the same server name.
@@ -1 +1 @@
1
- {"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../../../../src/services/connection/tool-cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAEzD;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,WAAW,CAAkC;IAErD;;;;;OAKG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI1D;;;;OAIG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI3C;;;;OAIG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAS7C;;;;;OAKG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAInD;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAS3C;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAkBpE;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE;IAUlC;;;;;OAKG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE;IAIhD;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAK/D;;;;OAIG;IACH,WAAW,IAAI,IAAI,EAAE;IAQrB;;;;OAIG;IACH,uBAAuB,IAAI,IAAI,EAAE;IAQjC;;;;OAIG;IACH,mBAAmB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE;IAIzC;;;;;;OAMG;IACH,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAI7C;;;;OAIG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAclC;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;;;OAIG;IACH,IAAI,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAE3C;CACF"}
1
+ {"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../../../../src/services/connection/tool-cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAGzD;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,qBAAqB,CAAkC;IAE/D;;;;;OAKG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAI9D;;;;OAIG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI3C;;;;OAIG;IACH,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IASjD;;;;;OAKG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvD;;;;;OAKG;IACH,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAS/C;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAWtE;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE;IAWzD;;;;;OAKG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE;IAIhD;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAK/D;;;;OAIG;IACH,WAAW,IAAI,IAAI,EAAE;IAQrB;;;;OAIG;IACH,uBAAuB,IAAI,IAAI,EAAE;IAQjC;;;;OAIG;IACH,mBAAmB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE;IAIzC;;;;;;OAMG;IACH,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAI7C;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAWzD;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;;;OAIG;IACH,IAAI,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAE3C;CACF"}
@@ -1,63 +1,64 @@
1
1
  import { logger, LOG_MODULES } from '../../utils/logger.js';
2
+ import { getCompositeKey } from '../../utils/composite-key.js';
2
3
  /**
3
- * Manages tool caching for MCP connections at both server ID and server name levels.
4
+ * Manages tool caching for MCP connections at both composite key and server name levels.
4
5
  *
5
- * This class encapsulates all tool cache operations, providing both server ID-level
6
+ * This class encapsulates all tool cache operations, providing both composite key-level
6
7
  * and server name-level caching for efficient tool lookup while maintaining data
7
8
  * consistency across multiple instances of the same server.
8
9
  */
9
10
  export class ToolCache {
10
11
  toolCache = new Map();
11
12
  serverNameToolCache = new Map();
12
- nameToIdMap = new Map();
13
+ nameToCompositeKeyMap = new Map();
13
14
  /**
14
- * Sets the name-to-ID mapping for server name resolution.
15
+ * Sets the name-to-composite-key mapping for server name resolution.
15
16
  *
16
17
  * @param serverName - The server name
17
- * @param serverId - The corresponding server instance ID
18
+ * @param compositeKey - The corresponding composite key
18
19
  */
19
- setNameMapping(serverName, serverId) {
20
- this.nameToIdMap.set(serverName, serverId);
20
+ setNameMapping(serverName, compositeKey) {
21
+ this.nameToCompositeKeyMap.set(serverName, compositeKey);
21
22
  }
22
23
  /**
23
- * Removes the name-to-ID mapping for a server.
24
+ * Removes the name-to-composite-key mapping for a server.
24
25
  *
25
26
  * @param serverName - The server name to remove
26
27
  */
27
28
  removeNameMapping(serverName) {
28
- this.nameToIdMap.delete(serverName);
29
+ this.nameToCompositeKeyMap.delete(serverName);
29
30
  }
30
31
  /**
31
- * Removes name mapping by server ID.
32
+ * Removes name mapping by composite key.
32
33
  *
33
- * @param serverId - The server ID to remove
34
+ * @param compositeKey - The composite key to remove
34
35
  */
35
- removeNameMappingById(serverId) {
36
- for (const [name, id] of this.nameToIdMap.entries()) {
37
- if (id === serverId) {
38
- this.nameToIdMap.delete(name);
36
+ removeNameMappingById(compositeKey) {
37
+ for (const [name, key] of this.nameToCompositeKeyMap.entries()) {
38
+ if (key === compositeKey) {
39
+ this.nameToCompositeKeyMap.delete(name);
39
40
  break;
40
41
  }
41
42
  }
42
43
  }
43
44
  /**
44
- * Gets the server ID for a given server name.
45
+ * Gets the composite key for a given server name.
45
46
  *
46
47
  * @param name - The server name
47
- * @returns The server ID or undefined if not found
48
+ * @returns The composite key or undefined if not found
48
49
  */
49
- getServerIdByName(name) {
50
- return this.nameToIdMap.get(name);
50
+ getCompositeKeyByName(name) {
51
+ return this.nameToCompositeKeyMap.get(name);
51
52
  }
52
53
  /**
53
- * Gets the server name for a given server ID.
54
+ * Gets the server name for a given composite key.
54
55
  *
55
- * @param serverId - The server ID
56
+ * @param compositeKey - The composite key
56
57
  * @returns The server name or 'unknown' if not found
57
58
  */
58
- getServerNameById(serverId) {
59
- for (const [name, id] of this.nameToIdMap.entries()) {
60
- if (id === serverId) {
59
+ getServerNameById(compositeKey) {
60
+ for (const [name, key] of this.nameToCompositeKeyMap.entries()) {
61
+ if (key === compositeKey) {
61
62
  return name;
62
63
  }
63
64
  }
@@ -66,33 +67,28 @@ export class ToolCache {
66
67
  /**
67
68
  * Sets tools for a specific server instance and updates both caches.
68
69
  *
69
- * @param serverId - The server instance ID
70
+ * @param serverName - The server name
71
+ * @param serverIndex - The instance index
70
72
  * @param tools - The tools to cache
71
- * @param serverName - Optional server name for name-level cache update
72
73
  */
73
- setTools(serverId, tools, serverName) {
74
- this.toolCache.set(serverId, tools);
75
- if (serverName) {
76
- this.updateServerNameCache(serverName);
77
- }
78
- else {
79
- const resolvedName = this.getServerNameById(serverId);
80
- if (resolvedName !== 'unknown') {
81
- this.updateServerNameCache(resolvedName);
82
- }
83
- }
84
- logger.debug(`ToolCache: Set ${tools.length} tools for server [${serverId}]`, LOG_MODULES.CONNECTION_MANAGER);
74
+ setTools(serverName, serverIndex, tools) {
75
+ const compositeKey = getCompositeKey(serverName, serverIndex);
76
+ this.toolCache.set(compositeKey, tools);
77
+ this.updateServerNameCache(serverName);
78
+ logger.debug(`ToolCache: Set ${tools.length} tools for server [${compositeKey}]`, LOG_MODULES.CONNECTION_MANAGER);
85
79
  }
86
80
  /**
87
81
  * Gets tools for a specific server instance.
88
82
  *
89
- * @param serverId - The server instance ID
83
+ * @param serverName - The server name
84
+ * @param serverIndex - The instance index
90
85
  * @returns Array of tools, empty if none
91
86
  */
92
- getTools(serverId) {
93
- const tools = this.toolCache.get(serverId) || [];
94
- const fromCache = this.toolCache.has(serverId);
95
- logger.debug(`ToolCache: getTools for [${serverId}]: returned ${tools.length} tools (${fromCache ? 'from cache' : 'no cache'})`, LOG_MODULES.CONNECTION_MANAGER);
87
+ getTools(serverName, serverIndex) {
88
+ const compositeKey = getCompositeKey(serverName, serverIndex);
89
+ const tools = this.toolCache.get(compositeKey) || [];
90
+ const fromCache = this.toolCache.has(compositeKey);
91
+ logger.debug(`ToolCache: getTools for [${compositeKey}]: returned ${tools.length} tools (${fromCache ? 'from cache' : 'no cache'})`, LOG_MODULES.CONNECTION_MANAGER);
96
92
  return tools;
97
93
  }
98
94
  /**
@@ -142,7 +138,7 @@ export class ToolCache {
142
138
  /**
143
139
  * Gets all tool cache entries.
144
140
  *
145
- * @returns Array of [serverId, tools] tuples
141
+ * @returns Array of [compositeKey, tools] tuples
146
142
  */
147
143
  getToolCacheEntries() {
148
144
  return Array.from(this.toolCache.entries());
@@ -151,7 +147,7 @@ export class ToolCache {
151
147
  * Returns an iterator over the tool cache entries for backward compatibility.
152
148
  * This mimics the Map.entries() method signature.
153
149
  *
154
- * @returns Iterator of [serverId, tools] tuples
150
+ * @returns Iterator of [compositeKey, tools] tuples
155
151
  * @deprecated Use getToolCacheEntries() instead
156
152
  */
157
153
  entries() {
@@ -160,15 +156,14 @@ export class ToolCache {
160
156
  /**
161
157
  * Clears tools for a specific server and updates both caches.
162
158
  *
163
- * @param serverId - The server instance ID
159
+ * @param serverName - The server name
160
+ * @param serverIndex - The instance index
164
161
  */
165
- clearTools(serverId) {
166
- const serverName = this.getServerNameById(serverId);
167
- this.toolCache.delete(serverId);
168
- if (serverName !== 'unknown') {
169
- this.updateServerNameCache(serverName);
170
- }
171
- logger.debug(`ToolCache: Cleared tools for server [${serverId}]`, LOG_MODULES.CONNECTION_MANAGER);
162
+ clearTools(serverName, serverIndex) {
163
+ const compositeKey = getCompositeKey(serverName, serverIndex);
164
+ this.toolCache.delete(compositeKey);
165
+ this.updateServerNameCache(serverName);
166
+ logger.debug(`ToolCache: Cleared tools for server [${compositeKey}]`, LOG_MODULES.CONNECTION_MANAGER);
172
167
  }
173
168
  /**
174
169
  * Updates the server name-level cache for a specific server.
@@ -178,8 +173,8 @@ export class ToolCache {
178
173
  */
179
174
  updateServerNameCache(serverName) {
180
175
  const allToolsForServer = [];
181
- for (const [id, cachedTools] of this.toolCache.entries()) {
182
- const instanceServerName = this.getServerNameById(id);
176
+ for (const [compositeKey, cachedTools] of this.toolCache.entries()) {
177
+ const instanceServerName = this.getServerNameById(compositeKey);
183
178
  if (instanceServerName === serverName) {
184
179
  allToolsForServer.push(...cachedTools);
185
180
  }
@@ -21,7 +21,9 @@ import type { ToolMapEntry, GatewayTool } from './types.js';
21
21
  export declare class GatewayService {
22
22
  private server;
23
23
  private transport;
24
+ private readonly appVersion;
24
25
  constructor();
26
+ private createServerWithHandlers;
25
27
  private registerHandlers;
26
28
  /**
27
29
  * Generates a unified list of gateway tools with proper naming and collision resolution.
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/gateway/gateway.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAapE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE5D,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,SAAS,CAAqC;;IAoBtD,OAAO,CAAC,gBAAgB;IAWxB;;;;;OAKG;IACI,wBAAwB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;IAIvF;;;;;OAKG;IACI,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAI5C;;;;;OAKG;IACI,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM;IAIpD;;;;OAIG;IACI,sBAAsB,IAAI,SAAS;IAmB1C;;;;OAIG;IACU,KAAK;CAKnB;AAED,eAAO,MAAM,OAAO,gBAAuB,CAAC"}
1
+ {"version":3,"file":"gateway.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/gateway/gateway.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAcpE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE5D,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;;IAOpC,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,gBAAgB;IAUxB;;;;;OAKG;IACI,wBAAwB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;IAIvF;;;;;OAKG;IACI,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAI5C;;;;;OAKG;IACI,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM;IAIpD;;;;OAIG;IACI,sBAAsB,IAAI,SAAS;IAI1C;;;;OAIG;IACU,KAAK;CAKnB;AAED,eAAO,MAAM,OAAO,gBAAuB,CAAC"}
@@ -19,31 +19,37 @@
19
19
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
20
20
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
21
21
  import { logger } from '../../utils/index.js';
22
+ import { LOG_MODULES } from '../../utils/logger/log-modules.js';
22
23
  import { MCP_HUB_LITE_SERVER } from '../../models/system-tools.constants.js';
23
- import { registerInitializeHandlers, registerToolsHandlers, registerResourcesHandlers, registerSystemToolsHandlers, registerCallToolHandler } from './request-handlers/index.js';
24
+ import { registerInitializeHandlers, registerResourcesHandlers, registerSystemToolsHandlers, registerCallToolHandler } from './request-handlers/index.js';
25
+ import { getAppVersion } from '../../utils/version.js';
24
26
  import { generateGatewayToolsList } from './tool-list-generator.js';
25
27
  import { formatToolArgs, formatToolResponse } from './log-formatter.js';
26
28
  export class GatewayService {
27
29
  server;
28
30
  transport = null;
31
+ appVersion;
29
32
  constructor() {
30
- this.server = new McpServer({
33
+ this.appVersion = getAppVersion();
34
+ this.server = this.createServerWithHandlers();
35
+ }
36
+ createServerWithHandlers() {
37
+ const server = new McpServer({
31
38
  name: MCP_HUB_LITE_SERVER,
32
- version: '1.0.0'
39
+ version: this.appVersion
33
40
  }, {
34
41
  capabilities: {
35
42
  tools: {},
36
- resources: {} // Add resource capability support
43
+ resources: {}
37
44
  }
38
45
  });
39
- // Call registerHandlers directly in constructor
40
- this.registerHandlers(this.server);
46
+ this.registerHandlers(server);
47
+ return server;
41
48
  }
42
49
  registerHandlers(server) {
43
50
  // Local toolMap for this connection
44
51
  const toolMap = new Map();
45
52
  registerInitializeHandlers(server);
46
- registerToolsHandlers(server);
47
53
  registerResourcesHandlers(server);
48
54
  registerSystemToolsHandlers(server);
49
55
  registerCallToolHandler(server, toolMap);
@@ -81,17 +87,7 @@ export class GatewayService {
81
87
  * @returns {McpServer} New MCP server instance with all handlers registered
82
88
  */
83
89
  createConnectionServer() {
84
- const server = new McpServer({
85
- name: MCP_HUB_LITE_SERVER,
86
- version: '1.0.0'
87
- }, {
88
- capabilities: {
89
- tools: {},
90
- resources: {} // Add resource capability support
91
- }
92
- });
93
- this.registerHandlers(server);
94
- return server;
90
+ return this.createServerWithHandlers();
95
91
  }
96
92
  /**
97
93
  * Starts the MCP gateway service on stdio transport.
@@ -101,7 +97,7 @@ export class GatewayService {
101
97
  async start() {
102
98
  this.transport = new StdioServerTransport();
103
99
  await this.server.connect(this.transport);
104
- logger.info('MCP Gateway started on stdio');
100
+ logger.info('MCP Gateway started on stdio', LOG_MODULES.GATEWAY_SERVICE);
105
101
  }
106
102
  }
107
103
  export const gateway = new GatewayService();
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Global stateless MCP transport and server.
3
+ *
4
+ * This module provides a shared, stateless MCP transport and server instance
5
+ * that can be used across all requests without session isolation.
6
+ */
7
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
8
+ export declare const globalTransport: StreamableHTTPServerTransport;
9
+ export declare const globalServer: import("@modelcontextprotocol/sdk/server/mcp.js").McpServer;
10
+ //# sourceMappingURL=global-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-transport.d.ts","sourceRoot":"","sources":["../../../../../src/services/gateway/global-transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAwCnG,eAAO,MAAM,eAAe,+BAAY,CAAC;AACzC,eAAO,MAAM,YAAY,6DAAS,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Global stateless MCP transport and server.
3
+ *
4
+ * This module provides a shared, stateless MCP transport and server instance
5
+ * that can be used across all requests without session isolation.
6
+ */
7
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
8
+ import { gateway } from './gateway.service.js';
9
+ import { logger, LOG_MODULES } from '../../utils/logger/index.js';
10
+ import { getMcpCommDebugSetting } from '../../utils/json-utils.js';
11
+ import { formatMcpMessageForLogging, logNotificationMessage } from '../../utils/logger/log-output.js';
12
+ // Create shared transport in STATELESS MODE - NO PARAMETERS NEEDED!
13
+ const transport = new StreamableHTTPServerTransport();
14
+ // Create shared server
15
+ const server = gateway.createConnectionServer();
16
+ // Set up message logging (use empty string for sessionId in stateless mode)
17
+ transport.onmessage = (message) => {
18
+ if (getMcpCommDebugSetting()) {
19
+ const logMessage = formatMcpMessageForLogging(message);
20
+ logger.debug(`MCP message received: ${logMessage}`, LOG_MODULES.COMMUNICATION);
21
+ }
22
+ logNotificationMessage(message, ''); // Empty sessionId for stateless
23
+ };
24
+ // Wrap send method for debug logging
25
+ if (getMcpCommDebugSetting()) {
26
+ const originalSend = transport.send;
27
+ transport.send = async (message, options) => {
28
+ try {
29
+ const logMessage = formatMcpMessageForLogging(message);
30
+ logger.debug(`MCP message sent: ${logMessage}`, LOG_MODULES.COMMUNICATION);
31
+ }
32
+ catch {
33
+ logger.debug(`MCP message sent: [Error formatting response]`, LOG_MODULES.COMMUNICATION);
34
+ }
35
+ return await originalSend.call(transport, message, options);
36
+ };
37
+ }
38
+ // Connect server to transport
39
+ await server.connect(transport);
40
+ logger.info('Global MCP transport initialized (stateless mode)', LOG_MODULES.GATEWAY);
41
+ export const globalTransport = transport;
42
+ export const globalServer = server;
@@ -1 +1 @@
1
- {"version":3,"file":"call-tool-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/services/gateway/request-handlers/call-tool-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACjC,IAAI,CAwKN"}
1
+ {"version":3,"file":"call-tool-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/services/gateway/request-handlers/call-tool-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgFhD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACjC,IAAI,CA8FN"}
@@ -4,7 +4,6 @@
4
4
  import { CallToolRequestSchema, ListToolsRequestSchema, McpError } from '@modelcontextprotocol/sdk/types.js';
5
5
  import { logger, LOG_MODULES } from '../../../utils/index.js';
6
6
  import { stringifyForLogging } from '../../../utils/json-utils.js';
7
- import { getClientCwd } from '../../../utils/request-context.js';
8
7
  import { mcpConnectionManager } from '../../mcp-connection-manager.js';
9
8
  import { SystemToolHandler } from '../../system-tool-handler.js';
10
9
  import { ErrorHandler } from '../../../utils/error-handler.js';
@@ -12,6 +11,64 @@ import { ToolArgsParser } from '../../../utils/tool-args-parser.js';
12
11
  import { SYSTEM_TOOL_NAMES, MCP_HUB_LITE_SERVER } from '../../../models/system-tools.constants.js';
13
12
  import { formatToolArgs, formatToolResponse } from '../log-formatter.js';
14
13
  import { generateGatewayToolsList } from '../tool-list-generator.js';
14
+ /**
15
+ * Type guard to check if a result is a valid CallToolResult.
16
+ *
17
+ * @param result - The result to check
18
+ * @returns True if result has the expected CallToolResult structure
19
+ */
20
+ function isCallToolResult(result) {
21
+ return (!!result && typeof result === 'object' && 'content' in result && Array.isArray(result.content));
22
+ }
23
+ /**
24
+ * Executes a system tool call via the SystemToolHandler.
25
+ *
26
+ * @param toolName - Name of the system tool to call
27
+ * @param toolArgs - Arguments to pass to the tool
28
+ * @returns CallToolResult with the tool execution result
29
+ */
30
+ async function executeSystemToolCall(toolName, toolArgs) {
31
+ try {
32
+ const result = await SystemToolHandler.handleSystemToolCall(toolName, toolArgs);
33
+ if (isCallToolResult(result)) {
34
+ return result;
35
+ }
36
+ return {
37
+ content: [
38
+ {
39
+ type: 'text',
40
+ text: stringifyForLogging(result)
41
+ }
42
+ ]
43
+ };
44
+ }
45
+ catch (error) {
46
+ ErrorHandler.handleSystemToolError(toolName, error);
47
+ }
48
+ }
49
+ /**
50
+ * Parses a tool name to check if it refers to a system tool.
51
+ * Handles both direct system tool names (e.g., "list_servers") and
52
+ * prefixed names (e.g., "mcp__mcp-hub-lite__list_servers").
53
+ *
54
+ * @param toolName - The tool name to parse
55
+ * @returns The system tool name if it's a system tool, null otherwise
56
+ */
57
+ function getSystemToolName(toolName) {
58
+ const parsedTool = ToolArgsParser.parsePrefixedToolName(toolName);
59
+ if (parsedTool) {
60
+ logger.debug(`Parsed prefixed tool name: "${toolName}" → server="${parsedTool.serverName}", tool="${parsedTool.toolName}"`, LOG_MODULES.GATEWAY);
61
+ if (parsedTool.serverName === MCP_HUB_LITE_SERVER &&
62
+ SYSTEM_TOOL_NAMES.includes(parsedTool.toolName)) {
63
+ logger.info(`System tool called via prefixed name: ${parsedTool.toolName}`, LOG_MODULES.GATEWAY);
64
+ return parsedTool.toolName;
65
+ }
66
+ }
67
+ if (SYSTEM_TOOL_NAMES.includes(toolName)) {
68
+ return toolName;
69
+ }
70
+ return null;
71
+ }
15
72
  /**
16
73
  * Register call tool handler on the MCP server.
17
74
  *
@@ -30,82 +87,27 @@ export function registerCallToolHandler(server, toolMap) {
30
87
  server.server.setRequestHandler(CallToolRequestSchema, async (request) => {
31
88
  const toolName = request.params.name;
32
89
  const toolArgs = request.params.arguments || {};
33
- // Parse prefixed tool names (like mcp__mcp-hub-lite__xxx) if applicable
34
- // This handles Claude Code style tool names with server prefix
35
- const parsedTool = ToolArgsParser.parsePrefixedToolName(toolName);
36
- if (parsedTool) {
37
- logger.debug(`Parsed prefixed tool name: "${toolName}" → server="${parsedTool.serverName}", tool="${parsedTool.toolName}"`, LOG_MODULES.GATEWAY);
38
- // Check if it's a system tool call
39
- if (parsedTool.serverName === MCP_HUB_LITE_SERVER &&
40
- SYSTEM_TOOL_NAMES.includes(parsedTool.toolName)) {
41
- logger.info(`System tool called via prefixed name: ${parsedTool.toolName}`, LOG_MODULES.GATEWAY);
42
- try {
43
- const result = await SystemToolHandler.handleSystemToolCall(parsedTool.toolName, toolArgs);
44
- if (result &&
45
- typeof result === 'object' &&
46
- 'content' in result &&
47
- Array.isArray(result.content)) {
48
- return result;
49
- }
50
- return {
51
- content: [
52
- {
53
- type: 'text',
54
- text: stringifyForLogging(result)
55
- }
56
- ]
57
- };
58
- }
59
- catch (error) {
60
- ErrorHandler.handleSystemToolError(parsedTool.toolName, error);
61
- }
62
- }
63
- }
90
+ const systemToolName = getSystemToolName(toolName);
64
91
  // Log incoming tool request with full context
65
92
  logger.info(`Tool call REQUEST received: toolName=${toolName}, args=${formatToolArgs(toolArgs)}`, LOG_MODULES.GATEWAY);
66
93
  logger.debug(`Tool context: toolMap size=${toolMap.size}, available tools=${Array.from(toolMap.keys()).slice(0, 10).join(', ')}${toolMap.size > 10 ? '...' : ''}`, LOG_MODULES.GATEWAY);
67
94
  // Handle system tools
68
- if (typeof toolName === 'string' && SYSTEM_TOOL_NAMES.includes(toolName)) {
69
- logger.debug(`System tool called: ${toolName}, args=${formatToolArgs(toolArgs)}`, LOG_MODULES.GATEWAY);
70
- try {
71
- const result = await SystemToolHandler.handleSystemToolCall(toolName, toolArgs);
72
- if (result &&
73
- typeof result === 'object' &&
74
- 'content' in result &&
75
- Array.isArray(result.content)) {
76
- return result;
77
- }
78
- return {
79
- content: [
80
- {
81
- type: 'text',
82
- text: stringifyForLogging(result)
83
- }
84
- ]
85
- };
86
- }
87
- catch (error) {
88
- ErrorHandler.handleSystemToolError(toolName, error);
89
- }
95
+ if (systemToolName) {
96
+ logger.debug(`System tool called: ${systemToolName}, args=${formatToolArgs(toolArgs)}`, LOG_MODULES.GATEWAY);
97
+ return await executeSystemToolCall(systemToolName, toolArgs);
90
98
  }
91
99
  const target = toolMap.get(toolName);
92
- logger.debug(`Tool lookup SUCCESS: toolName=${toolName} -> serverId=${target?.serverId}, realToolName=${target?.realToolName}`, LOG_MODULES.GATEWAY);
100
+ logger.debug(`Tool lookup SUCCESS: toolName=${toolName} -> serverName=${target?.serverName}, serverIndex=${target?.serverIndex}, realToolName=${target?.realToolName}`, LOG_MODULES.GATEWAY);
93
101
  if (!target) {
94
102
  logger.error(`Tool NOT FOUND: toolName=${toolName}, available tools=${Array.from(toolMap.keys()).join(', ')}`, LOG_MODULES.GATEWAY);
95
103
  throw new McpError(-32801, `Tool ${toolName} not found`);
96
104
  }
97
105
  const startTime = Date.now();
98
106
  try {
99
- // Inject CWD if available and not present in args
100
- const cwd = getClientCwd();
101
- if (cwd && !toolArgs.cwd) {
102
- toolArgs.cwd = cwd;
103
- logger.debug(`Injected CWD into tool call ${toolName}: ${cwd}`, LOG_MODULES.dynamic(toolName));
104
- }
105
- logger.debug(`Tool call EXECUTING: serverId=${target.serverId}, realToolName=${target.realToolName}, args=${formatToolArgs(toolArgs)}`, LOG_MODULES.GATEWAY);
106
- const result = await mcpConnectionManager.callTool(target.serverId, target.realToolName, toolArgs);
107
+ logger.debug(`Tool call EXECUTING: serverName=${target.serverName}, serverIndex=${target.serverIndex}, realToolName=${target.realToolName}, args=${formatToolArgs(toolArgs)}`, LOG_MODULES.GATEWAY);
108
+ const result = await mcpConnectionManager.callTool(target.serverName, target.serverIndex, target.realToolName, toolArgs);
107
109
  const duration = Date.now() - startTime;
108
- logger.info(`Tool call SUCCESS: serverId=${target.serverId}, realToolName=${target.realToolName}, duration=${duration}ms, response=${formatToolResponse(result)}`, LOG_MODULES.GATEWAY);
110
+ logger.info(`Tool call SUCCESS: serverName=${target.serverName}, serverIndex=${target.serverIndex}, realToolName=${target.realToolName}, duration=${duration}ms, response=${formatToolResponse(result)}`, LOG_MODULES.GATEWAY);
109
111
  // Wrap the result in a valid CallToolResult structure
110
112
  if (typeof result === 'object' && result !== null) {
111
113
  return {
@@ -125,7 +127,7 @@ export function registerCallToolHandler(server, toolMap) {
125
127
  }
126
128
  }
127
129
  catch (error) {
128
- ErrorHandler.handleToolCallError(target.serverId, target.realToolName, error);
130
+ ErrorHandler.handleToolCallError(`${target.serverName}-${target.serverIndex}`, target.realToolName, error);
129
131
  }
130
132
  });
131
133
  }
@@ -2,8 +2,8 @@
2
2
  * Gateway request handlers index.
3
3
  */
4
4
  export { registerInitializeHandlers } from './initialize-handler.js';
5
- export { registerToolsHandlers } from './tools-handler.js';
6
5
  export { registerResourcesHandlers } from './resources-handler.js';
7
6
  export { registerSystemToolsHandlers } from './system-tools-handler.js';
8
7
  export { registerCallToolHandler } from './call-tool-handler.js';
8
+ export * from './initialize.constants.js';
9
9
  //# sourceMappingURL=index.d.ts.map