@loop_ouroboros/mcp-hub-lite 1.0.2 → 1.1.1

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 (322) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/client/assets/{HomeView-7rMg9C6t.js → HomeView-BBwvy1oj.js} +1 -1
  3. package/dist/client/assets/ResourceDetailView-CZ2aB73w.js +1 -0
  4. package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
  5. package/dist/client/assets/ResourcesView-CN1NlhWs.js +1 -0
  6. package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
  7. package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
  8. package/dist/client/assets/ServerDashboard-k652Vw4Z.js +1 -0
  9. package/dist/client/assets/ServerDetail-BLQ-a4cO.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-BHrsFD5i.js +36 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHhwEuGe.js +1 -0
  14. package/dist/client/assets/SettingsView-CUOFNXrz.js +1 -0
  15. package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
  16. package/dist/client/assets/ToolCallDialog-BfPjLxfV.js +1 -0
  17. package/dist/client/assets/ToolsView-BxgXvPC3.css +1 -0
  18. package/dist/client/assets/ToolsView-CyuhYAE2.js +1 -0
  19. package/dist/client/assets/{_baseClone-5q1b0P3O.js → _baseClone-DO5qfalW.js} +1 -1
  20. package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
  21. package/dist/client/assets/el-form-item-CcGsD2K_.js +12 -0
  22. package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
  23. package/dist/client/assets/el-input-tYgeiaCT.js +1 -0
  24. package/dist/client/assets/{el-loading-H85n3BUC.js → el-loading-Dwl9E_Vr.js} +1 -1
  25. package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
  26. package/dist/client/assets/el-overlay-kqX_BABo.js +1 -0
  27. package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
  28. package/dist/client/assets/el-radio-group-D8aWBVOT.js +1 -0
  29. package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
  30. package/dist/client/assets/el-skeleton-item-BRwIFspE.js +1 -0
  31. package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
  32. package/dist/client/assets/el-switch-BF8c-xeU.js +1 -0
  33. package/dist/client/assets/el-tab-pane-C4Ep94cd.js +1 -0
  34. package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
  35. package/dist/client/assets/el-table-column-Cog6uCh-.js +1 -0
  36. package/dist/client/assets/index-ByNBhPAR.js +1 -0
  37. package/dist/client/assets/index-CTB6oe-9.js +2 -0
  38. package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
  39. package/dist/client/assets/omit-CUnDT6sS.js +1 -0
  40. package/dist/client/assets/{raf-DY5mgbuB.js → raf-CmzeRPMd.js} +1 -1
  41. package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-CbgVSHIh.js} +3 -3
  42. package/dist/client/index.html +3 -3
  43. package/dist/server/shared/models/resource.model.d.ts +2 -1
  44. package/dist/server/shared/models/resource.model.d.ts.map +1 -1
  45. package/dist/server/shared/models/server.model.d.ts +362 -5
  46. package/dist/server/shared/models/server.model.d.ts.map +1 -1
  47. package/dist/server/shared/models/server.model.js +220 -1
  48. package/dist/server/shared/models/session.model.d.ts +1 -57
  49. package/dist/server/shared/models/session.model.d.ts.map +1 -1
  50. package/dist/server/shared/models/session.model.js +1 -55
  51. package/dist/server/shared/models/tool.model.d.ts +4 -2
  52. package/dist/server/shared/models/tool.model.d.ts.map +1 -1
  53. package/dist/server/shared/types/session-context.types.d.ts +0 -2
  54. package/dist/server/shared/types/session-context.types.d.ts.map +1 -1
  55. package/dist/server/shared/types/websocket.types.d.ts +17 -10
  56. package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
  57. package/dist/server/src/api/mcp/debug-response-wrapper.js +2 -2
  58. package/dist/server/src/api/mcp/gateway.d.ts +1 -3
  59. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
  60. package/dist/server/src/api/mcp/gateway.js +32 -49
  61. package/dist/server/src/api/web/hub-tools.d.ts +2 -2
  62. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
  63. package/dist/server/src/api/web/hub-tools.js +3 -54
  64. package/dist/server/src/api/web/mcp-status.d.ts +1 -1
  65. package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
  66. package/dist/server/src/api/web/mcp-status.js +71 -30
  67. package/dist/server/src/api/web/resources.d.ts.map +1 -1
  68. package/dist/server/src/api/web/resources.js +28 -22
  69. package/dist/server/src/api/web/search.d.ts +2 -16
  70. package/dist/server/src/api/web/search.d.ts.map +1 -1
  71. package/dist/server/src/api/web/search.js +24 -45
  72. package/dist/server/src/api/web/servers.d.ts +3 -3
  73. package/dist/server/src/api/web/servers.d.ts.map +1 -1
  74. package/dist/server/src/api/web/servers.js +70 -25
  75. package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
  76. package/dist/server/src/api/ws/ws-handler.js +4 -2
  77. package/dist/server/src/app.d.ts.map +1 -1
  78. package/dist/server/src/app.js +0 -2
  79. package/dist/server/src/cli/commands/list.js +2 -2
  80. package/dist/server/src/cli/commands/server.d.ts +57 -0
  81. package/dist/server/src/cli/commands/server.d.ts.map +1 -0
  82. package/dist/server/src/cli/commands/server.js +169 -0
  83. package/dist/server/src/cli/commands/status.d.ts.map +1 -1
  84. package/dist/server/src/cli/commands/status.js +41 -30
  85. package/dist/server/src/cli/index.d.ts.map +1 -1
  86. package/dist/server/src/cli/index.js +2 -1
  87. package/dist/server/src/cli/server.d.ts +11 -2
  88. package/dist/server/src/cli/server.d.ts.map +1 -1
  89. package/dist/server/src/config/config-change-logger.d.ts +22 -0
  90. package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
  91. package/dist/server/src/config/config-change-logger.js +135 -11
  92. package/dist/server/src/config/config-loader.d.ts +6 -5
  93. package/dist/server/src/config/config-loader.d.ts.map +1 -1
  94. package/dist/server/src/config/config-loader.js +54 -16
  95. package/dist/server/src/config/config-manager.d.ts +51 -43
  96. package/dist/server/src/config/config-manager.d.ts.map +1 -1
  97. package/dist/server/src/config/config-manager.js +84 -66
  98. package/dist/server/src/config/config-migrator.d.ts +82 -0
  99. package/dist/server/src/config/config-migrator.d.ts.map +1 -0
  100. package/dist/server/src/config/config-migrator.js +348 -0
  101. package/dist/server/src/config/config-saver.d.ts +2 -0
  102. package/dist/server/src/config/config-saver.d.ts.map +1 -1
  103. package/dist/server/src/config/config-saver.js +8 -2
  104. package/dist/server/src/config/config.schema.d.ts +10 -104
  105. package/dist/server/src/config/config.schema.d.ts.map +1 -1
  106. package/dist/server/src/config/config.schema.js +15 -99
  107. package/dist/server/src/config/path-validator.d.ts +27 -0
  108. package/dist/server/src/config/path-validator.d.ts.map +1 -0
  109. package/dist/server/src/config/path-validator.js +53 -0
  110. package/dist/server/src/config/server-config-manager.d.ts +37 -31
  111. package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
  112. package/dist/server/src/config/server-config-manager.js +222 -66
  113. package/dist/server/src/config/type-converter.d.ts.map +1 -1
  114. package/dist/server/src/config/type-converter.js +3 -2
  115. package/dist/server/src/models/event.model.d.ts +17 -10
  116. package/dist/server/src/models/event.model.d.ts.map +1 -1
  117. package/dist/server/src/models/server.model.d.ts +17 -3
  118. package/dist/server/src/models/server.model.d.ts.map +1 -1
  119. package/dist/server/src/models/server.model.js +2 -1
  120. package/dist/server/src/models/system-tools.constants.d.ts +10 -27
  121. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  122. package/dist/server/src/models/system-tools.constants.js +4 -8
  123. package/dist/server/src/pid/manager.d.ts.map +1 -1
  124. package/dist/server/src/pid/manager.js +2 -1
  125. package/dist/server/src/server/dev-server.js +34 -20
  126. package/dist/server/src/server/runner.d.ts.map +1 -1
  127. package/dist/server/src/server/runner.js +41 -26
  128. package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
  129. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  130. package/dist/server/src/services/connection/connection-manager.js +286 -241
  131. package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
  132. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
  133. package/dist/server/src/services/connection/tool-cache.js +50 -55
  134. package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
  135. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
  136. package/dist/server/src/services/gateway/gateway.service.js +53 -23
  137. package/dist/server/src/services/gateway/global-transport.d.ts +19 -0
  138. package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
  139. package/dist/server/src/services/gateway/global-transport.js +66 -0
  140. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
  141. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
  142. package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
  143. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
  144. package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
  145. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
  146. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
  147. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +20 -80
  148. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
  149. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
  150. package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
  151. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
  152. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
  153. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
  154. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
  155. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
  156. package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
  157. package/dist/server/src/services/gateway/types.d.ts +2 -1
  158. package/dist/server/src/services/gateway/types.d.ts.map +1 -1
  159. package/dist/server/src/services/hub-manager.service.d.ts +32 -238
  160. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
  161. package/dist/server/src/services/hub-manager.service.js +89 -267
  162. package/dist/server/src/services/hub-tools/index.d.ts +1 -3
  163. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
  164. package/dist/server/src/services/hub-tools/index.js +1 -2
  165. package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
  166. package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
  167. package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
  168. package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
  169. package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
  170. package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
  171. package/dist/server/src/services/hub-tools/resource-generator.d.ts +24 -1
  172. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
  173. package/dist/server/src/services/hub-tools/resource-generator.js +259 -39
  174. package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
  175. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
  176. package/dist/server/src/services/hub-tools/server-selector.js +44 -37
  177. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
  178. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
  179. package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
  180. package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
  181. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
  182. package/dist/server/src/services/hub-tools/tool-search.js +10 -4
  183. package/dist/server/src/services/hub-tools/types.d.ts +2 -2
  184. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
  185. package/dist/server/src/services/hub-tools.service.d.ts +43 -72
  186. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  187. package/dist/server/src/services/hub-tools.service.js +185 -110
  188. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
  189. package/dist/server/src/services/system-tool-handler.js +7 -17
  190. package/dist/server/src/utils/composite-key.d.ts +29 -0
  191. package/dist/server/src/utils/composite-key.d.ts.map +1 -0
  192. package/dist/server/src/utils/composite-key.js +39 -0
  193. package/dist/server/src/utils/error-handler.d.ts.map +1 -1
  194. package/dist/server/src/utils/error-handler.js +3 -2
  195. package/dist/server/src/utils/index.d.ts +2 -0
  196. package/dist/server/src/utils/index.d.ts.map +1 -1
  197. package/dist/server/src/utils/index.js +2 -0
  198. package/dist/server/src/utils/instance-id.d.ts +22 -0
  199. package/dist/server/src/utils/instance-id.d.ts.map +1 -0
  200. package/dist/server/src/utils/instance-id.js +59 -0
  201. package/dist/server/src/utils/json-utils.d.ts +4 -4
  202. package/dist/server/src/utils/json-utils.d.ts.map +1 -1
  203. package/dist/server/src/utils/json-utils.js +4 -4
  204. package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
  205. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
  206. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
  207. package/dist/server/src/utils/logger/log-formatter.js +82 -5
  208. package/dist/server/src/utils/logger/log-modules.d.ts +15 -9
  209. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
  210. package/dist/server/src/utils/logger/log-modules.js +8 -6
  211. package/dist/server/src/utils/parameter-validator.d.ts +10 -0
  212. package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
  213. package/dist/server/src/utils/parameter-validator.js +53 -0
  214. package/dist/server/src/utils/process-tree.d.ts +49 -0
  215. package/dist/server/src/utils/process-tree.d.ts.map +1 -0
  216. package/dist/server/src/utils/process-tree.js +285 -0
  217. package/dist/server/src/utils/sort-utils.d.ts +40 -0
  218. package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
  219. package/dist/server/src/utils/sort-utils.js +131 -0
  220. package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
  221. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
  222. package/dist/server/src/utils/transports/sse-transport.js +55 -9
  223. package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
  224. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
  225. package/dist/server/src/utils/transports/stdio-transport.js +66 -247
  226. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
  227. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
  228. package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
  229. package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
  230. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
  231. package/dist/server/src/utils/transports/transport-factory.js +31 -11
  232. package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
  233. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
  234. package/dist/server/src/utils/version.d.ts +11 -0
  235. package/dist/server/src/utils/version.d.ts.map +1 -0
  236. package/dist/server/src/utils/version.js +57 -0
  237. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
  238. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
  239. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
  240. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
  241. package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
  242. package/dist/server/tests/server.test.js +27 -16
  243. package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
  244. package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
  245. package/dist/server/tests/temp/temp-run-docling.js +53 -0
  246. package/dist/server/tests/types/test-helpers.d.ts +1 -2
  247. package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
  248. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
  249. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
  250. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
  251. package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
  252. package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
  253. package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
  254. package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
  255. package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
  256. package/dist/server/tests/unit/config/config-saver.test.js +200 -0
  257. package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
  258. package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
  259. package/dist/server/tests/unit/config/config.schema.test.js +347 -0
  260. package/dist/server/tests/unit/server/runner.test.js +86 -62
  261. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
  262. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
  263. package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
  264. package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
  265. package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
  266. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
  267. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
  268. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
  269. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
  270. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
  271. package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
  272. package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -320
  273. package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
  274. package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
  275. package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
  276. package/dist/server/tests/unit/services/session-manager.test.js +26 -436
  277. package/dist/server/tests/unit/utils/config.test.js +88 -186
  278. package/dist/server/tests/unit/utils/json-utils.test.js +18 -18
  279. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
  280. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
  281. package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
  282. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
  283. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
  284. package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
  285. package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
  286. package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
  287. package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
  288. package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
  289. package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
  290. package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
  291. package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
  292. package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
  293. package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
  294. package/package.json +3 -1
  295. package/dist/client/assets/ResourceDetailView-Bf-1ffbk.js +0 -1
  296. package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
  297. package/dist/client/assets/ResourcesView-g5x4xCPh.js +0 -1
  298. package/dist/client/assets/ServerDashboard-Chpne8Q0.css +0 -1
  299. package/dist/client/assets/ServerDashboard-G8Wmp4hF.js +0 -2
  300. package/dist/client/assets/ServerListView-dV2XrPjo.js +0 -32
  301. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
  302. package/dist/client/assets/SessionsView-Ckd38lj1.js +0 -1
  303. package/dist/client/assets/SettingsView-BJUdepEQ.js +0 -1
  304. package/dist/client/assets/ToolCallDialog-C_bTCpHC.js +0 -1
  305. package/dist/client/assets/ToolsView-0c2eputu.js +0 -1
  306. package/dist/client/assets/ToolsView-E3Ps9c7i.css +0 -1
  307. package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
  308. package/dist/client/assets/el-form-item-ClFnj49k.js +0 -12
  309. package/dist/client/assets/el-input-CDnuSKVZ.js +0 -1
  310. package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
  311. package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
  312. package/dist/client/assets/el-overlay-CzMkXyYy.js +0 -1
  313. package/dist/client/assets/el-select-DvjGddk_.js +0 -1
  314. package/dist/client/assets/el-tab-pane-C_DQMcwe.js +0 -1
  315. package/dist/client/assets/el-table-column-CASRIbZM.js +0 -1
  316. package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
  317. package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
  318. package/dist/client/assets/el-tag-npbwux4f.js +0 -1
  319. package/dist/client/assets/index-CCnAxNF8.js +0 -2
  320. package/dist/client/assets/index-d1DZeSfz.js +0 -1
  321. package/dist/client/assets/omit-DPsOVNIJ.js +0 -1
  322. package/dist/client/assets/vnode-CHomNjgN.js +0 -1
@@ -4,9 +4,10 @@ import { eventBus, EventTypes } from './event-bus.service.js';
4
4
  import { gateway } from './gateway.service.js';
5
5
  import { logger, LOG_MODULES } from '../utils/logger.js';
6
6
  import { stringifyForLogging } from '../utils/json-utils.js';
7
- import { MCP_HUB_LITE_SERVER, LIST_SERVERS_TOOL, FIND_SERVERS_TOOL, LIST_ALL_TOOLS_IN_SERVER_TOOL, FIND_TOOLS_IN_SERVER_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, FIND_TOOLS_TOOL, SYSTEM_TOOL_NAMES } from '../models/system-tools.constants.js';
7
+ import { McpError } from '@modelcontextprotocol/sdk/types.js';
8
+ import { MCP_HUB_LITE_SERVER, LIST_SERVERS_TOOL, LIST_TOOLS_IN_SERVER_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, SYSTEM_TOOL_NAMES } from '../models/system-tools.constants.js';
8
9
  import { ToolArgsParser } from '../utils/tool-args-parser.js';
9
- import { hasValidId, selectBestInstance, getSystemTools, findServers as findServersUtil, findToolsInServer as findToolsInServerUtil, findTools as findToolsUtil, generateDynamicResources, readResource as readResourceUtil } from './hub-tools/index.js';
10
+ import { hasValidId, selectBestInstance, getServerDescription, getSystemTools, generateDynamicResources, readResource as readResourceUtil } from './hub-tools/index.js';
10
11
  /**
11
12
  * Central service for managing system tools and MCP server interactions in the MCP Hub Lite gateway.
12
13
  *
@@ -18,7 +19,7 @@ import { hasValidId, selectBestInstance, getSystemTools, findServers as findServ
18
19
  * ## Core Responsibilities
19
20
  *
20
21
  * - **System Tool Management**: Exposes a standardized set of system tools for server discovery and management
21
- * - **Tool Discovery**: Enables searching and listing tools across all connected MCP servers
22
+ * - **Tool Discovery**: Enables listing tools across all connected MCP servers
22
23
  * - **Tool Execution**: Provides safe, monitored execution of tools with comprehensive event tracking
23
24
  * - **Resource Management**: Dynamically generates and serves virtual resources representing server state
24
25
  * - **Instance Selection**: Handles intelligent server instance selection for multi-instance scenarios
@@ -28,12 +29,9 @@ import { hasValidId, selectBestInstance, getSystemTools, findServers as findServ
28
29
  *
29
30
  * The service exposes the following system tools through the `getSystemTools()` method:
30
31
  * - `list-servers`: Retrieve all connected server names
31
- * - `find-servers`: Search servers by pattern matching
32
- * - `list-all-tools-in-server`: List all tools from a specific server
33
- * - `find-tools-in-server`: Search tools within a specific server
32
+ * - `list-tools-in-server`: List all tools from a specific server
34
33
  * - `get-tool`: Retrieve complete schema for a specific tool
35
34
  * - `call-tool`: Execute a tool on a specific server
36
- * - `find-tools`: Search tools across all connected servers
37
35
  *
38
36
  * ## Architecture Integration
39
37
  *
@@ -55,9 +53,6 @@ import { hasValidId, selectBestInstance, getSystemTools, findServers as findServ
55
53
  *
56
54
  * // Call a tool on a specific server
57
55
  * const result = await hubTools.callTool('file-system-server', 'list-files', { directory: '/home' });
58
- *
59
- * // Search for tools across all servers
60
- * const matchingTools = await hubTools.findTools('search');
61
56
  * ```
62
57
  */
63
58
  export class HubToolsService {
@@ -97,30 +92,34 @@ export class HubToolsService {
97
92
  return getSystemTools();
98
93
  }
99
94
  /**
100
- * Lists all connected MCP servers by name.
95
+ * Lists all connected MCP servers with their descriptions.
101
96
  *
102
97
  * This method retrieves all configured servers from the hub manager, filters out
103
- * invalid entries using the hasValidId type guard, and returns an array of server names.
104
- * It provides a simple way to discover available servers in the system.
98
+ * invalid entries using the hasValidId type guard, and returns a Record mapping
99
+ * server names to their descriptions. If a server doesn't have a description,
100
+ * a default description is provided.
105
101
  *
106
- * @returns {Promise<string[]>} Array of connected server names
102
+ * @returns {Promise<Record<string, string>>} Record mapping server names to descriptions
107
103
  */
108
104
  async listServers() {
109
105
  const servers = hubManager.getAllServers();
110
- return servers.filter(hasValidId).map((server) => server.name);
111
- }
112
- /**
113
- * Finds servers matching a specified regex pattern.
114
- *
115
- * This method searches through all configured servers using the provided regex pattern,
116
- * supporting flexible search options including case sensitivity and search scope
117
- * (name, description, or both). It returns an array of matching server names.
118
- *
119
- * @param {FindServersParams} args - Search parameters
120
- * @returns {Promise<string[]>} Array of matching server names
121
- */
122
- async findServers(args) {
123
- return findServersUtil(args.pattern, args.searchIn, args.caseSensitive);
106
+ const result = {};
107
+ for (const server of servers.filter(hasValidId)) {
108
+ // Check if server is actually connected
109
+ const status = mcpConnectionManager.getStatusByName(server.name);
110
+ if (!status?.connected) {
111
+ continue;
112
+ }
113
+ // Use non-strict mode for management operations to avoid tag-match-unique errors
114
+ const serverInfo = selectBestInstance(server.name, undefined, false);
115
+ if (!serverInfo) {
116
+ // Skip servers that can't be selected (e.g., tag-match-unique without tags)
117
+ continue;
118
+ }
119
+ const description = getServerDescription(server.config, server.name);
120
+ result[server.name] = description;
121
+ }
122
+ return result;
124
123
  }
125
124
  /**
126
125
  * Lists all tools available from a specific MCP server.
@@ -130,57 +129,44 @@ export class HubToolsService {
130
129
  * It uses the selectBestInstance function to resolve server names to instances
131
130
  * and leverages the MCP connection manager for tool retrieval.
132
131
  *
133
- * @param {ListAllToolsInServerParams} args - Server name and request options
134
- * @returns {Promise<{ serverName: string; tools: Tool[] }>} Object containing server name and tools array
132
+ * @param {ListToolsInServerParams} args - Server name and request options
133
+ * @returns {Promise<{ serverName: string; tools: ToolSummary[] }>} Object containing server name and tools array
135
134
  * @throws {Error} If the specified server is not found or not connected
136
135
  */
137
- async listAllToolsInServer(args) {
136
+ async listToolsInServer(args) {
138
137
  // Handle MCP Hub Lite server (return system tools list)
139
138
  if (typeof args.serverName === 'string' && args.serverName === MCP_HUB_LITE_SERVER) {
140
139
  // Generate tool list using the same logic as tools/list
141
140
  const toolMap = new Map();
142
141
  const gatewayTools = gateway.generateGatewayToolsList(toolMap);
143
- // Convert to Tool format
144
- const tools = gatewayTools.map((tool) => ({
142
+ // Convert to ToolSummary format (without inputSchema)
143
+ const toolSummaries = gatewayTools.map((tool) => ({
145
144
  name: tool.name,
146
145
  description: tool.description,
147
- inputSchema: tool.inputSchema,
148
- serverName: MCP_HUB_LITE_SERVER,
149
- annotations: tool.annotations
146
+ serverName: MCP_HUB_LITE_SERVER
150
147
  }));
151
148
  return {
152
149
  serverName: args.serverName,
153
- tools
150
+ tools: toolSummaries
154
151
  };
155
152
  }
156
- const serverInfo = selectBestInstance(args.serverName, args.requestOptions);
157
- if (!serverInfo) {
153
+ // Use server name level cache to get tools directly without triggering instance selection
154
+ // This avoids tag-match-unique errors for multi-instance servers when listing tools
155
+ const tools = mcpConnectionManager.getToolsByServerName(args.serverName);
156
+ if (tools.length === 0) {
158
157
  throw new Error(`Server not found: ${args.serverName}`);
159
158
  }
160
- // Get instance ID
161
- const serverId = serverInfo.instance.id;
162
- // Get tool list from connection manager
163
- const tools = mcpConnectionManager.getTools(serverId);
159
+ // Convert to ToolSummary format (without inputSchema)
160
+ const toolSummaries = tools.map((tool) => ({
161
+ name: tool.name,
162
+ description: tool.description,
163
+ serverName: args.serverName
164
+ }));
164
165
  return {
165
166
  serverName: args.serverName,
166
- tools
167
+ tools: toolSummaries
167
168
  };
168
169
  }
169
- /**
170
- * Finds tools matching a pattern within a specific MCP server.
171
- *
172
- * This method searches through all tools available from the specified server using
173
- * the provided regex pattern, supporting flexible search options including case
174
- * sensitivity and search scope (name, description, or both). It returns matching
175
- * tools grouped by server name.
176
- *
177
- * @param {FindToolsInServerParams} args - Search parameters
178
- * @returns {Promise<{ serverName: string; tools: Tool[] }>} Object containing server name and matching tools
179
- * @throws {Error} If the specified server is not found or not connected
180
- */
181
- async findToolsInServer(args) {
182
- return findToolsInServerUtil(args.serverName, args.pattern, args.searchIn, args.caseSensitive, args.requestOptions);
183
- }
184
170
  /**
185
171
  * Retrieves the complete schema for a specific tool from a specific server.
186
172
  *
@@ -193,12 +179,57 @@ export class HubToolsService {
193
179
  * @throws {Error} If the specified server is not found or not connected
194
180
  */
195
181
  async getTool(args) {
196
- const serverInfo = selectBestInstance(args.serverName, args.requestOptions);
197
- if (!serverInfo) {
182
+ // Handle MCP Hub Lite server (return system tool)
183
+ if (typeof args.serverName === 'string' && args.serverName === MCP_HUB_LITE_SERVER) {
184
+ const systemTools = getSystemTools();
185
+ const found = systemTools.find((tool) => tool.name === args.toolName);
186
+ if (found) {
187
+ return {
188
+ ...found,
189
+ serverName: MCP_HUB_LITE_SERVER
190
+ };
191
+ }
192
+ return undefined;
193
+ }
194
+ // Use server name level cache to get tools directly without triggering instance selection
195
+ // This avoids tag-match-unique errors for multi-instance servers when getting tool details
196
+ const tools = mcpConnectionManager.getToolsByServerName(args.serverName);
197
+ if (tools.length === 0) {
198
198
  throw new Error(`Server not found: ${args.serverName}`);
199
199
  }
200
- const tools = mcpConnectionManager.getTools(serverInfo.instance.id);
201
- return tools.find((tool) => tool.name === args.toolName);
200
+ return tools.find((t) => t.name === args.toolName);
201
+ }
202
+ /**
203
+ * Updates the description of a specific MCP server.
204
+ *
205
+ * This method validates the server exists, updates its description in the configuration,
206
+ * and persists the change to disk. It leverages the existing hubManager.updateServer()
207
+ * method which handles configuration persistence and event publishing.
208
+ *
209
+ * @param {UpdateServerDescriptionParams} args - Server name and new description
210
+ * @returns {Promise<{ success: boolean; serverName: string; description: string }>} Confirmation of successful update
211
+ * @throws {Error} If the server is not found or update fails
212
+ */
213
+ async updateServerDescription(args) {
214
+ // Handle both direct call (UpdateServerDescriptionParams) and call_tool wrapper (CallToolParams with nested toolArgs)
215
+ const { serverName, description } = 'toolArgs' in args && args.toolArgs ? args.toolArgs : args;
216
+ // Validate server exists
217
+ const existing = hubManager.getServerByName(serverName);
218
+ if (!existing) {
219
+ throw new Error(`Server not found: ${serverName}`);
220
+ }
221
+ // Update server description using existing hubManager
222
+ await hubManager.updateServer(serverName, { description });
223
+ // Note: hubManager.updateServer() already:
224
+ // 1. Updates the in-memory configuration
225
+ // 2. Persists to disk via configManager
226
+ // 3. Publishes SERVER_UPDATED event
227
+ // 4. Triggers cache invalidation in HubToolsService
228
+ return {
229
+ success: true,
230
+ serverName,
231
+ description
232
+ };
202
233
  }
203
234
  /**
204
235
  * Calls a specific system tool directly with type-safe conditional return types.
@@ -220,16 +251,8 @@ export class HubToolsService {
220
251
  case LIST_SERVERS_TOOL:
221
252
  result = await this.listServers();
222
253
  break;
223
- case FIND_SERVERS_TOOL: {
224
- result = await this.findServers(toolArgs);
225
- break;
226
- }
227
- case LIST_ALL_TOOLS_IN_SERVER_TOOL: {
228
- result = await this.listAllToolsInServer(toolArgs);
229
- break;
230
- }
231
- case FIND_TOOLS_IN_SERVER_TOOL: {
232
- result = await this.findToolsInServer(toolArgs);
254
+ case LIST_TOOLS_IN_SERVER_TOOL: {
255
+ result = await this.listToolsInServer(toolArgs);
233
256
  break;
234
257
  }
235
258
  case GET_TOOL_TOOL: {
@@ -248,8 +271,8 @@ export class HubToolsService {
248
271
  });
249
272
  break;
250
273
  }
251
- case FIND_TOOLS_TOOL: {
252
- result = await this.findTools(toolArgs);
274
+ case UPDATE_SERVER_DESCRIPTION_TOOL: {
275
+ result = await this.updateServerDescription(toolArgs);
253
276
  break;
254
277
  }
255
278
  default:
@@ -278,7 +301,9 @@ export class HubToolsService {
278
301
  */
279
302
  async callTool(args) {
280
303
  let { serverName, toolName } = args;
281
- const { toolArgs, requestOptions } = args;
304
+ // Support both toolArgs and arguments for backward compatibility
305
+ const toolArgs = (args.toolArgs || args.arguments || {});
306
+ const { requestOptions } = args;
282
307
  // Parse prefixed tool names (like mcp__mcp-hub-lite__xxx) if applicable
283
308
  const parsedTool = ToolArgsParser.parsePrefixedToolName(toolName);
284
309
  if (parsedTool) {
@@ -291,9 +316,11 @@ export class HubToolsService {
291
316
  serverName = MCP_HUB_LITE_SERVER;
292
317
  }
293
318
  if (typeof serverName === 'string' && serverName === MCP_HUB_LITE_SERVER) {
294
- // Check if it's a system tool
295
- if (SYSTEM_TOOL_NAMES.includes(toolName)) {
296
- return await this.callSystemTool(toolName, toolArgs);
319
+ // System tools cannot be called via call_tool - they must be called directly
320
+ if (Array.isArray(SYSTEM_TOOL_NAMES) &&
321
+ SYSTEM_TOOL_NAMES.includes(toolName)) {
322
+ throw new McpError(-32801, `System tools cannot be called via 'call_tool'. Use 'tools/call' with the system tool name directly. ` +
323
+ `Example: use 'list_servers' directly instead of call_tool(serverName: "mcp-hub-lite", toolName: "list_servers").`);
297
324
  }
298
325
  // Not a system tool - find it in all connected servers
299
326
  logger.info(`Looking for tool '${toolName}' in all connected servers (gateway mode)`, LOG_MODULES.HUB_TOOLS);
@@ -304,9 +331,10 @@ export class HubToolsService {
304
331
  if (!hasValidId(server)) {
305
332
  continue;
306
333
  }
307
- const serverInfo = selectBestInstance(server.name, requestOptions);
334
+ const serverInfo = selectBestInstance(server.name, requestOptions, true);
308
335
  if (serverInfo && serverInfo.instance.id) {
309
- const tools = mcpConnectionManager.getTools(serverInfo.instance.id);
336
+ const instanceIndex = serverInfo.instance.index;
337
+ const tools = mcpConnectionManager.getTools(server.name, instanceIndex);
310
338
  if (tools.some((tool) => tool.name === toolName)) {
311
339
  matchingServers.push(server.name);
312
340
  }
@@ -323,29 +351,84 @@ export class HubToolsService {
323
351
  serverName = matchingServers[0];
324
352
  }
325
353
  logger.debug(`Tool call received: serverName=${serverName}, toolName=${toolName}, args=${stringifyForLogging(toolArgs)}`, LOG_MODULES.HUB_TOOLS);
326
- const serverInfo = selectBestInstance(serverName, requestOptions);
327
- if (!serverInfo) {
328
- logger.error(`Server not found: ${serverName}`, LOG_MODULES.HUB_TOOLS);
329
- throw new Error(`Server not found: ${serverName}`);
354
+ // Validate tool exists before doing strict instance selection
355
+ // Use strictMode=false to get serverInfo without triggering tag-match-unique errors
356
+ const validationServerInfo = selectBestInstance(serverName, requestOptions, false);
357
+ if (validationServerInfo && validationServerInfo.instance.id) {
358
+ const instanceIndex = validationServerInfo.instance.index;
359
+ const tools = mcpConnectionManager.getTools(serverName, instanceIndex);
360
+ if (!tools.some((tool) => tool.name === toolName)) {
361
+ throw new Error(`Tool '${toolName}' not found in server '${serverName}'. ` +
362
+ `Use list_tools_in_server(serverName: "${serverName}") to see available tools.`);
363
+ }
330
364
  }
331
- const serverId = serverInfo.instance.id;
365
+ const serverInfo = selectBestInstance(serverName, requestOptions, true);
332
366
  const requestId = `tool-call-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
367
+ if (!serverInfo) {
368
+ // Server not found in hubManager, try direct call by name through mcpConnectionManager
369
+ logger.debug(`Server not found in hubManager, trying direct call by name: ${serverName}`, LOG_MODULES.HUB_TOOLS);
370
+ // Use selectBestInstance with non-strict mode to find an available instance
371
+ const fallbackServerInfo = selectBestInstance(serverName, undefined, false);
372
+ if (!fallbackServerInfo) {
373
+ logger.error(`Server not found: ${serverName}`, LOG_MODULES.HUB_TOOLS);
374
+ throw new Error(`Server not found: ${serverName}`);
375
+ }
376
+ const instanceIndex = fallbackServerInfo.instance.index;
377
+ // Publish tool call started event with the resolved serverIndex
378
+ eventBus.publish(EventTypes.TOOL_CALL_STARTED, {
379
+ requestId,
380
+ serverName,
381
+ serverIndex: instanceIndex,
382
+ toolName,
383
+ timestamp: Date.now(),
384
+ args: toolArgs
385
+ });
386
+ try {
387
+ const result = await mcpConnectionManager.callTool(serverName, instanceIndex, toolName, toolArgs);
388
+ // Publish tool call completed event
389
+ eventBus.publish(EventTypes.TOOL_CALL_COMPLETED, {
390
+ requestId,
391
+ serverName,
392
+ serverIndex: instanceIndex,
393
+ toolName,
394
+ timestamp: Date.now(),
395
+ result
396
+ });
397
+ logger.debug(`Tool call SUCCESS: serverName=${serverName}, toolName=${toolName}`, LOG_MODULES.HUB_TOOLS);
398
+ return result;
399
+ }
400
+ catch (error) {
401
+ // Publish tool call error event
402
+ eventBus.publish(EventTypes.TOOL_CALL_ERROR, {
403
+ requestId,
404
+ serverName,
405
+ serverIndex: instanceIndex,
406
+ toolName,
407
+ timestamp: Date.now(),
408
+ error: error instanceof Error ? error.message : String(error),
409
+ stack: error instanceof Error ? error.stack : undefined
410
+ });
411
+ logger.error(`Tool call FAILED: serverName=${serverName}, toolName=${toolName}, error=${error instanceof Error ? error.message : String(error)}`, error, LOG_MODULES.HUB_TOOLS);
412
+ throw error;
413
+ }
414
+ }
415
+ const instanceIndex = serverInfo.instance.index;
333
416
  // Publish tool call started event
334
417
  eventBus.publish(EventTypes.TOOL_CALL_STARTED, {
335
418
  requestId,
336
- serverId,
337
419
  serverName,
420
+ serverIndex: instanceIndex,
338
421
  toolName,
339
422
  timestamp: Date.now(),
340
423
  args: toolArgs
341
424
  });
342
425
  try {
343
- const result = await mcpConnectionManager.callTool(serverId, toolName, toolArgs);
426
+ const result = await mcpConnectionManager.callTool(serverName, instanceIndex, toolName, toolArgs);
344
427
  // Publish tool call completed event
345
428
  eventBus.publish(EventTypes.TOOL_CALL_COMPLETED, {
346
429
  requestId,
347
- serverId,
348
430
  serverName,
431
+ serverIndex: instanceIndex,
349
432
  toolName,
350
433
  timestamp: Date.now(),
351
434
  result
@@ -357,8 +440,8 @@ export class HubToolsService {
357
440
  // Publish tool call error event
358
441
  eventBus.publish(EventTypes.TOOL_CALL_ERROR, {
359
442
  requestId,
360
- serverId,
361
443
  serverName,
444
+ serverIndex: instanceIndex,
362
445
  toolName,
363
446
  timestamp: Date.now(),
364
447
  error: error instanceof Error ? error.message : String(error),
@@ -375,14 +458,14 @@ export class HubToolsService {
375
458
  * the system tools provided by the MCP Hub Lite server itself. It returns a structured
376
459
  * object mapping server names to their respective tool arrays.
377
460
  *
378
- * @returns {Promise<Record<string, { tools: Tool[] }>>} Object mapping server names to tool arrays
461
+ * @returns {Promise<Record<string, { tools: ToolSummary[] }>>} Object mapping server names to tool arrays
379
462
  */
380
463
  async listAllTools() {
381
464
  const servers = hubManager.getAllServers();
382
465
  const allTools = {};
383
466
  // Add system tools under mcp-hub-lite server
384
467
  const systemTools = this.getSystemTools().map((tool) => ({
385
- ...tool,
468
+ name: tool.name,
386
469
  description: `[System] ${tool.description}`,
387
470
  serverName: MCP_HUB_LITE_SERVER
388
471
  }));
@@ -393,32 +476,24 @@ export class HubToolsService {
393
476
  if (!hasValidId(server)) {
394
477
  continue;
395
478
  }
396
- const instances = hubManager.getServerInstanceByName(server.name);
479
+ const instances = hubManager.getServerInstancesByName(server.name);
397
480
  for (const instance of instances) {
398
481
  if (instance.id) {
399
- const tools = mcpConnectionManager.getTools(instance.id);
482
+ const instanceIndex = instance.index ?? 0;
483
+ const tools = mcpConnectionManager.getTools(server.name, instanceIndex);
484
+ const toolSummaries = tools.map((tool) => ({
485
+ name: tool.name,
486
+ description: tool.description,
487
+ serverName: server.name
488
+ }));
400
489
  allTools[server.name] = {
401
- tools
490
+ tools: toolSummaries
402
491
  };
403
492
  }
404
493
  }
405
494
  }
406
495
  return allTools;
407
496
  }
408
- /**
409
- * Finds tools matching a pattern across all connected MCP servers.
410
- *
411
- * This method searches through all available tools from all connected servers using the
412
- * provided regex pattern, supporting flexible search options including case sensitivity
413
- * and search scope (name, description, or both). It returns matching tools grouped by
414
- * their originating server names.
415
- *
416
- * @param {FindToolsParams} args - Search parameters
417
- * @returns {Promise<Record<string, { tools: Tool[] }>>} Object mapping server names to matching tools
418
- */
419
- async findTools(args) {
420
- return findToolsUtil(args.pattern, args.searchIn, args.caseSensitive, () => this.listAllTools());
421
- }
422
497
  /**
423
498
  * Lists all dynamically generated Hub resources based on connected MCP servers.
424
499
  *
@@ -447,7 +522,7 @@ export class HubToolsService {
447
522
  * - Resources list: hub://servers/{serverName}/resources
448
523
  *
449
524
  * @param {string} uri - Resource URI to read (e.g., hub://servers/server-name)
450
- * @returns {Promise<ServerMetadata | Tool[] | Resource[]>} Resource content based on URI type
525
+ * @returns {Promise<ServerMetadata | Tool[] | Resource[] | string>} Resource content based on URI type
451
526
  * @throws {Error} If URI format is invalid, server not found, or resource type unknown
452
527
  */
453
528
  async readResource(uri) {
@@ -1 +1 @@
1
- {"version":3,"file":"system-tool-handler.d.ts","sourceRoot":"","sources":["../../../../src/services/system-tool-handler.ts"],"names":[],"mappings":"AAsBA;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;WACU,oBAAoB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,OAAO,CAAC;CAwEpB"}
1
+ {"version":3,"file":"system-tool-handler.d.ts","sourceRoot":"","sources":["../../../../src/services/system-tool-handler.ts"],"names":[],"mappings":"AAoBA;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;WACU,oBAAoB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,OAAO,CAAC;CA8DpB"}
@@ -1,7 +1,7 @@
1
1
  import { hubToolsService } from './hub-tools.service.js';
2
2
  import { McpError } from '@modelcontextprotocol/sdk/types.js';
3
3
  import { logger, LOG_MODULES } from '../utils/logger.js';
4
- import { LIST_SERVERS_TOOL, FIND_SERVERS_TOOL, LIST_ALL_TOOLS_IN_SERVER_TOOL, FIND_TOOLS_IN_SERVER_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, FIND_TOOLS_TOOL, MCP_HUB_LITE_SERVER } from '../models/system-tools.constants.js';
4
+ import { LIST_SERVERS_TOOL, LIST_TOOLS_IN_SERVER_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, MCP_HUB_LITE_SERVER } from '../models/system-tools.constants.js';
5
5
  import { stringifyForLogging } from '../utils/json-utils.js';
6
6
  /**
7
7
  * Unified system tool call handler
@@ -18,19 +18,9 @@ export class SystemToolHandler {
18
18
  case LIST_SERVERS_TOOL:
19
19
  result = await hubToolsService.listServers();
20
20
  break;
21
- case FIND_SERVERS_TOOL: {
22
- const findServersArgs = toolArgs;
23
- result = await hubToolsService.findServers(findServersArgs);
24
- break;
25
- }
26
- case LIST_ALL_TOOLS_IN_SERVER_TOOL: {
27
- const listAllToolsArgs = toolArgs;
28
- result = await hubToolsService.listAllToolsInServer(listAllToolsArgs);
29
- break;
30
- }
31
- case FIND_TOOLS_IN_SERVER_TOOL: {
32
- const findToolsInServerArgs = toolArgs;
33
- result = await hubToolsService.findToolsInServer(findToolsInServerArgs);
21
+ case LIST_TOOLS_IN_SERVER_TOOL: {
22
+ const listToolsArgs = toolArgs;
23
+ result = await hubToolsService.listToolsInServer(listToolsArgs);
34
24
  break;
35
25
  }
36
26
  case GET_TOOL_TOOL: {
@@ -50,9 +40,9 @@ export class SystemToolHandler {
50
40
  });
51
41
  break;
52
42
  }
53
- case FIND_TOOLS_TOOL: {
54
- const findToolsArgs = toolArgs;
55
- result = await hubToolsService.findTools(findToolsArgs);
43
+ case UPDATE_SERVER_DESCRIPTION_TOOL: {
44
+ const updateDescArgs = toolArgs;
45
+ result = await hubToolsService.updateServerDescription(updateDescArgs);
56
46
  break;
57
47
  }
58
48
  default:
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Composite key utilities for server instance identification
3
+ *
4
+ * This module provides utilities for generating and parsing composite keys
5
+ * that uniquely identify a server instance across multiple instances
6
+ * of the same server name.
7
+ *
8
+ * Format: `${serverName}-${serverIndex}`
9
+ * Example: 'my-server-0', 'my-server-1', 'test-server-0'
10
+ */
11
+ /**
12
+ * Generates a composite key from serverName and serverIndex
13
+ * @param serverName - The server name
14
+ * @param serverIndex - The instance index
15
+ * @returns Composite key string
16
+ * @example getCompositeKey('my-server', 0) => 'my-server-0'
17
+ */
18
+ export declare function getCompositeKey(serverName: string, serverIndex: number): string;
19
+ /**
20
+ * Parses a composite key back into serverName and serverIndex
21
+ * @param key - The composite key to parse
22
+ * @returns Object with serverName and serverIndex, or null if invalid
23
+ * @example parseCompositeKey('my-server-0') => { serverName: 'my-server', serverIndex: 0 }
24
+ */
25
+ export declare function parseCompositeKey(key: string): {
26
+ serverName: string;
27
+ serverIndex: number;
28
+ } | null;
29
+ //# sourceMappingURL=composite-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composite-key.d.ts","sourceRoot":"","sources":["../../../../src/utils/composite-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYjG"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Composite key utilities for server instance identification
3
+ *
4
+ * This module provides utilities for generating and parsing composite keys
5
+ * that uniquely identify a server instance across multiple instances
6
+ * of the same server name.
7
+ *
8
+ * Format: `${serverName}-${serverIndex}`
9
+ * Example: 'my-server-0', 'my-server-1', 'test-server-0'
10
+ */
11
+ /**
12
+ * Generates a composite key from serverName and serverIndex
13
+ * @param serverName - The server name
14
+ * @param serverIndex - The instance index
15
+ * @returns Composite key string
16
+ * @example getCompositeKey('my-server', 0) => 'my-server-0'
17
+ */
18
+ export function getCompositeKey(serverName, serverIndex) {
19
+ return `${serverName}-${serverIndex}`;
20
+ }
21
+ /**
22
+ * Parses a composite key back into serverName and serverIndex
23
+ * @param key - The composite key to parse
24
+ * @returns Object with serverName and serverIndex, or null if invalid
25
+ * @example parseCompositeKey('my-server-0') => { serverName: 'my-server', serverIndex: 0 }
26
+ */
27
+ export function parseCompositeKey(key) {
28
+ const lastDashIndex = key.lastIndexOf('-');
29
+ if (lastDashIndex === -1) {
30
+ return null;
31
+ }
32
+ const serverName = key.slice(0, lastDashIndex);
33
+ const serverIndexPart = key.slice(lastDashIndex + 1);
34
+ const serverIndex = parseInt(serverIndexPart, 10);
35
+ if (isNaN(serverIndex)) {
36
+ return null;
37
+ }
38
+ return { serverName, serverIndex };
39
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../../src/utils/error-handler.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,qBAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;IAgBrE;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;IA6BzF;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK;CAWlE"}
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../../src/utils/error-handler.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,qBAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;IAgBrE;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;IA6BzF;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK;CAWlE"}
@@ -1,5 +1,6 @@
1
1
  import { McpError } from '@modelcontextprotocol/sdk/types.js';
2
- import { logger, LOG_MODULES } from './logger.js';
2
+ import { logger } from './logger.js';
3
+ import { LOG_MODULES } from './logger/log-modules.js';
3
4
  /**
4
5
  * Unified error handler
5
6
  */
@@ -45,7 +46,7 @@ export class ErrorHandler {
45
46
  * Handles general errors
46
47
  */
47
48
  static handleGeneralError(error, message) {
48
- logger.error(message, error);
49
+ logger.error(message, error, LOG_MODULES.ERROR_HANDLER);
49
50
  if (error instanceof McpError) {
50
51
  throw error;
51
52
  }
@@ -1,2 +1,4 @@
1
1
  export { logger, LOG_MODULES } from './logger.js';
2
+ export * from './sort-utils.js';
3
+ export * from './version.js';
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClD,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
@@ -1 +1,3 @@
1
1
  export { logger, LOG_MODULES } from './logger.js';
2
+ export * from './sort-utils.js';
3
+ export * from './version.js';