@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
@@ -1,21 +1,16 @@
1
- import { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';
1
+ import { StdioServerParameters } from '@modelcontextprotocol/sdk/client/stdio.js';
2
2
  import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
3
+ import { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';
3
4
  import type { LogStorageService } from '../../services/log-storage.service.js';
4
- export interface StdioServerParameters {
5
- command: string;
6
- args?: string[];
7
- env?: NodeJS.ProcessEnv;
8
- stderr?: 'inherit' | 'pipe' | 'ignore';
9
- cwd?: string;
10
- }
5
+ import { PassThrough } from 'stream';
11
6
  export interface StdioTransportOptions {
12
- serverId?: string;
7
+ compositeKey?: string;
13
8
  logStorage?: LogStorageService;
14
9
  }
15
10
  /**
16
11
  * A transport implementation for communicating with MCP (Model Context Protocol) servers
17
- * via standard input/output streams. This transport spawns a child process and establishes
18
- * bidirectional communication using stdin/stdout for JSON-RPC message exchange.
12
+ * via standard input/output streams. This transport wraps the official SDK's StdioClientTransport
13
+ * and provides consistent logging and integration with the MCP Hub Lite system.
19
14
  *
20
15
  * The StdioTransport handles:
21
16
  * - Cross-platform process spawning (including Windows batch file compatibility)
@@ -30,19 +25,11 @@ export interface StdioTransportOptions {
30
25
  * @implements {Transport}
31
26
  */
32
27
  export declare class StdioTransport implements Transport {
33
- private _process?;
34
- private _readBuffer;
35
- private _stderrStream;
36
- private _serverParams;
28
+ private _transport;
37
29
  private _serverName?;
38
- private _serverId?;
30
+ private _compositeKey?;
39
31
  private _logStorage?;
40
- /**
41
- * Gets the process ID of the spawned child process.
42
- *
43
- * @returns {number | undefined} The PID of the child process, or undefined if not started
44
- */
45
- get pid(): number | undefined;
32
+ private _stderrStream;
46
33
  onclose?: () => void;
47
34
  onerror?: (error: Error) => void;
48
35
  onmessage?: (message: JSONRPCMessage) => void;
@@ -59,11 +46,11 @@ export declare class StdioTransport implements Transport {
59
46
  /**
60
47
  * Starts the transport by spawning the child process and establishing communication channels.
61
48
  *
62
- * This method handles platform-specific considerations:
63
- * - On Windows, it automatically wraps batch commands (like npx, npm, etc.) with cmd.exe /c
64
- * - Sets up proper stdio configuration based on the server parameters
65
- * - Configures event listeners for process lifecycle events
66
- * - Establishes data flow for stdout and stderr handling
49
+ * This method delegates to the SDK's StdioClientTransport.start() method which handles:
50
+ * - Platform-specific process spawning (including Windows batch file compatibility)
51
+ * - Proper stdio configuration
52
+ * - Event listeners for process lifecycle events
53
+ * - Data flow for stdout and stderr handling
67
54
  *
68
55
  * @returns {Promise<void>} Resolves when the child process is successfully spawned
69
56
  * @throws {Error} If the transport is already started
@@ -72,36 +59,23 @@ export declare class StdioTransport implements Transport {
72
59
  /**
73
60
  * Gets the stderr stream for the child process.
74
61
  *
75
- * Returns a PassThrough stream if stderr is configured as 'pipe', otherwise returns
76
- * the actual stderr stream from the child process, or null if no stderr is available.
62
+ * Returns our PassThrough stream that captures stderr data.
77
63
  *
78
- * @returns {PassThrough | NodeJS.ReadableStream | null} The stderr stream or null
64
+ * @returns {PassThrough | null} The stderr stream or null
79
65
  */
80
- get stderr(): import("node:stream").Readable | null;
66
+ get stderr(): PassThrough | null;
81
67
  /**
82
- * Processes the internal read buffer to extract and dispatch JSON-RPC messages.
83
- *
84
- * This method continuously reads complete JSON-RPC messages from the buffer
85
- * and dispatches them to the onmessage callback. It handles partial messages
86
- * by leaving incomplete data in the buffer for future processing.
87
- *
88
- * The method uses a while loop to process all available complete messages
89
- * in a single call, ensuring efficient message handling without blocking.
68
+ * Gets the process ID of the spawned child process.
90
69
  *
91
- * @private
70
+ * @returns {number | undefined} The PID of the child process, or undefined if not started
92
71
  */
93
- processReadBuffer(): void;
72
+ get pid(): number | undefined;
94
73
  /**
95
74
  * Closes the transport by gracefully terminating the child process.
96
75
  *
97
- * This method implements a graceful shutdown sequence:
98
- * 1. Sends SIGTERM to allow the child process to clean up
99
- * 2. Waits up to 5 seconds for graceful termination
100
- * 3. Forces termination with SIGKILL if the process doesn't exit
101
- * 4. Cleans up internal state and resolves the promise
102
- *
103
- * The method ensures proper cleanup of the read buffer and handles
104
- * any errors that occur during the shutdown process.
76
+ * This method delegates to the SDK's StdioClientTransport.close() method which handles:
77
+ * - Graceful shutdown sequence with SIGTERM/SIGKILL
78
+ * - Proper cleanup of internal state
105
79
  *
106
80
  * @returns {Promise<void>} Resolves when the transport is fully closed
107
81
  */
@@ -109,13 +83,10 @@ export declare class StdioTransport implements Transport {
109
83
  /**
110
84
  * Sends a JSON-RPC message to the child process via stdin.
111
85
  *
112
- * This method serializes the message to JSON, appends a newline character,
113
- * and writes it to the child process's stdin stream. It validates that
114
- * the transport is connected before attempting to send the message.
86
+ * This method delegates to the SDK's StdioClientTransport.send() method.
115
87
  *
116
88
  * @param {JSONRPCMessage} message - The JSON-RPC message to send
117
89
  * @returns {Promise<void>} Resolves when the message is written to stdin
118
- * @throws {Error} If the transport is not connected (no active child process)
119
90
  */
120
91
  send(message: JSONRPCMessage): Promise<void>;
121
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stdio-transport.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/stdio-transport.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAE1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAgC1E,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAC,CAAoB;IAExC;;;;OAIG;IACH,IAAW,GAAG,IAAI,MAAM,GAAG,SAAS,CAEnC;IAEM,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC;;;;;;OAMG;gBACS,MAAM,EAAE,qBAAqB,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB;IAU/F;;;;;;;;;;;OAWG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmJ5B;;;;;;;OAOG;IACH,IAAI,MAAM,0CAET;IAED;;;;;;;;;;;OAWG;IACH,iBAAiB;IAcjB;;;;;;;;;;;;;OAaG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C5B;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAOnD"}
1
+ {"version":3,"file":"stdio-transport.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/stdio-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EACtB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAC,CAAoB;IACxC,OAAO,CAAC,aAAa,CAA4B;IAE1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC;;;;;;OAMG;gBACS,MAAM,EAAE,qBAAqB,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB;IAiB/F;;;;;;;;;;;OAWG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2C5B;;;;;;OAMG;IACH,IAAI,MAAM,uBAET;IAED;;;;OAIG;IACH,IAAW,GAAG,IAAI,MAAM,GAAG,SAAS,CAEnC;IAED;;;;;;;;OAQG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;;;;;;OAOG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAGnD"}
@@ -1,37 +1,10 @@
1
- import { spawn } from 'child_process';
2
- import { PassThrough } from 'stream';
1
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
2
  import { logger } from '../logger.js';
4
- // Re-implement ReadBuffer as it is not exported from SDK root
5
- class ReadBuffer {
6
- _buffer;
7
- append(chunk) {
8
- this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk;
9
- }
10
- readMessage() {
11
- if (!this._buffer) {
12
- return null;
13
- }
14
- const index = this._buffer.indexOf('\n');
15
- if (index === -1) {
16
- return null;
17
- }
18
- const line = this._buffer.toString('utf8', 0, index).replace(/\r$/, '');
19
- this._buffer = this._buffer.subarray(index + 1);
20
- try {
21
- return JSON.parse(line);
22
- }
23
- catch {
24
- return null;
25
- }
26
- }
27
- clear() {
28
- this._buffer = undefined;
29
- }
30
- }
3
+ import { PassThrough } from 'stream';
31
4
  /**
32
5
  * A transport implementation for communicating with MCP (Model Context Protocol) servers
33
- * via standard input/output streams. This transport spawns a child process and establishes
34
- * bidirectional communication using stdin/stdout for JSON-RPC message exchange.
6
+ * via standard input/output streams. This transport wraps the official SDK's StdioClientTransport
7
+ * and provides consistent logging and integration with the MCP Hub Lite system.
35
8
  *
36
9
  * The StdioTransport handles:
37
10
  * - Cross-platform process spawning (including Windows batch file compatibility)
@@ -46,21 +19,11 @@ class ReadBuffer {
46
19
  * @implements {Transport}
47
20
  */
48
21
  export class StdioTransport {
49
- _process;
50
- _readBuffer = new ReadBuffer();
51
- _stderrStream = null;
52
- _serverParams;
22
+ _transport;
53
23
  _serverName;
54
- _serverId;
24
+ _compositeKey;
55
25
  _logStorage;
56
- /**
57
- * Gets the process ID of the spawned child process.
58
- *
59
- * @returns {number | undefined} The PID of the child process, or undefined if not started
60
- */
61
- get pid() {
62
- return this._process?.pid;
63
- }
26
+ _stderrStream = null;
64
27
  onclose;
65
28
  onerror;
66
29
  onmessage;
@@ -74,251 +37,107 @@ export class StdioTransport {
74
37
  * @param {StdioTransportOptions} [options] - Additional options for the transport
75
38
  */
76
39
  constructor(server, serverName, options) {
77
- this._serverParams = server;
40
+ // Convert our server parameters to match SDK format
41
+ const sdkParams = {
42
+ command: server.command,
43
+ args: server.args,
44
+ env: server.env,
45
+ stderr: 'pipe', // Always use pipe for stderr to enable logging
46
+ cwd: server.cwd
47
+ };
48
+ this._transport = new StdioClientTransport(sdkParams);
78
49
  this._serverName = serverName;
79
- this._serverId = options?.serverId;
50
+ this._compositeKey = options?.compositeKey;
80
51
  this._logStorage = options?.logStorage;
81
- if (server.stderr === 'pipe') {
82
- this._stderrStream = new PassThrough();
83
- }
52
+ this._stderrStream = new PassThrough();
84
53
  }
85
54
  /**
86
55
  * Starts the transport by spawning the child process and establishing communication channels.
87
56
  *
88
- * This method handles platform-specific considerations:
89
- * - On Windows, it automatically wraps batch commands (like npx, npm, etc.) with cmd.exe /c
90
- * - Sets up proper stdio configuration based on the server parameters
91
- * - Configures event listeners for process lifecycle events
92
- * - Establishes data flow for stdout and stderr handling
57
+ * This method delegates to the SDK's StdioClientTransport.start() method which handles:
58
+ * - Platform-specific process spawning (including Windows batch file compatibility)
59
+ * - Proper stdio configuration
60
+ * - Event listeners for process lifecycle events
61
+ * - Data flow for stdout and stderr handling
93
62
  *
94
63
  * @returns {Promise<void>} Resolves when the child process is successfully spawned
95
64
  * @throws {Error} If the transport is already started
96
65
  */
97
66
  async start() {
98
- if (this._process) {
99
- throw new Error('StdioTransport already started!');
100
- }
101
- let command = this._serverParams.command;
102
- let args = this._serverParams.args ?? [];
103
- // Windows compatibility: Batch files (npx, npm, etc.) need cmd.exe /c to run with shell: false
104
- if (process.platform === 'win32') {
105
- const knownBatchCommands = ['npx', 'npm', 'pnpm', 'yarn', 'uvx'];
106
- if (knownBatchCommands.includes(command) ||
107
- command.endsWith('.cmd') ||
108
- command.endsWith('.bat')) {
109
- // Use cmd.exe /c to execute the batch file
110
- args = ['/c', command, ...args];
111
- command = 'cmd.exe';
112
- }
113
- }
114
- return new Promise((resolve, reject) => {
115
- this._process = spawn(command, args, {
116
- env: { ...process.env, ...this._serverParams.env },
117
- stdio: [
118
- 'pipe',
119
- 'pipe',
120
- this._serverParams.stderr === 'pipe' ? 'pipe' : this._serverParams.stderr || 'inherit'
121
- ],
122
- shell: false,
123
- windowsHide: true, // Force hide window on Windows
124
- cwd: this._serverParams.cwd
125
- });
126
- this._process.on('error', (error) => {
127
- reject(error);
128
- this.onerror?.(error);
129
- });
130
- this._process.on('spawn', () => {
131
- resolve();
132
- });
133
- this._process.on('close', () => {
134
- this._process = undefined;
135
- this.onclose?.();
136
- });
137
- this._process.stdin?.on('error', (error) => {
138
- this.onerror?.(error);
139
- });
140
- this._process.stdout?.on('data', (chunk) => {
141
- const dataStr = chunk.toString('utf8');
142
- // Forward raw stdout data
143
- this.onstdout?.(dataStr);
144
- // Don't log raw JSON-RPC communication to avoid log noise
145
- // Only need to view raw communication during development debugging
146
- // Parse JSON-RPC messages
147
- this._readBuffer.append(chunk);
148
- this.processReadBuffer();
149
- });
150
- this._process.stdout?.on('error', (error) => {
151
- this.onerror?.(error);
152
- });
153
- /**
154
- * Handles stderr data with common processing logic.
155
- *
156
- * @param chunk - The stderr data chunk
157
- * @param writeToStream - Whether to write data to the PassThrough stream
158
- */
159
- const handleStderrData = (chunk, writeToStream = false) => {
160
- const dataStr = chunk.toString('utf8');
67
+ // Set up event handlers before starting
68
+ this._transport.onmessage = (message) => {
69
+ this.onmessage?.(message);
70
+ };
71
+ this._transport.onerror = (error) => {
72
+ this.onerror?.(error);
73
+ };
74
+ this._transport.onclose = () => {
75
+ this.onclose?.();
76
+ };
77
+ // Start the underlying transport
78
+ await this._transport.start();
79
+ // Handle stderr data by listening to the transport's stderr stream
80
+ if (this._transport.stderr) {
81
+ this._transport.stderr.on('data', (chunk) => {
82
+ const dataStr = chunk.toString('utf8').trim();
83
+ if (!dataStr)
84
+ return;
161
85
  // Forward raw stderr data
162
86
  this.onstderr?.(dataStr);
163
- const trimmedData = dataStr.trim();
164
- let logLevel = 'info';
165
- // Identify log levels by keywords: only explicit error/warning markers
166
- // use corresponding levels, everything else defaults to info
167
- const lowerData = trimmedData.toLowerCase();
168
- // Error level keywords
169
- if (lowerData.includes('error') ||
170
- lowerData.includes('err') ||
171
- lowerData.includes('exception') ||
172
- lowerData.includes('fatal') ||
173
- lowerData.includes('critical')) {
174
- logLevel = 'error';
175
- }
176
- // Warn level keywords
177
- else if (lowerData.includes('warn') ||
178
- lowerData.includes('wrn') ||
179
- lowerData.includes('warning') ||
180
- lowerData.includes('deprecation') ||
181
- lowerData.includes('deprecated')) {
182
- logLevel = 'warn';
87
+ // Log stderr output (per MCP spec, stderr is not necessarily errors)
88
+ const serverIdentifier = this._compositeKey || this._serverName || 'Unknown Server';
89
+ logger.serverLog('info', serverIdentifier, dataStr, { pid: this.pid });
90
+ if (this._logStorage && this._compositeKey) {
91
+ this._logStorage.append(this._compositeKey, 'info', dataStr);
183
92
  }
184
- if (this._serverName) {
185
- logger.serverLog(logLevel, this._serverName, trimmedData, {
186
- pid: this._process?.pid
187
- });
93
+ // Also write to our PassThrough stream for compatibility
94
+ // Guard against write after end during close() race condition
95
+ if (this._stderrStream && !this._stderrStream.writableEnded) {
96
+ this._stderrStream.write(chunk);
188
97
  }
189
- else {
190
- logger.serverLog(logLevel, 'Unknown Server', trimmedData, {
191
- pid: this._process?.pid
192
- });
193
- }
194
- // Store in logStorage for frontend display if available
195
- if (this._logStorage && this._serverId) {
196
- this._logStorage.append(this._serverId, logLevel, `[${this._serverName || 'Unknown Server'}] [STDERR] ${trimmedData}`);
197
- }
198
- // Optionally write to PassThrough stream if configured
199
- if (writeToStream) {
200
- this._stderrStream?.write(chunk);
201
- }
202
- };
203
- if (this._stderrStream && this._process.stderr) {
204
- this._process.stderr.on('data', (chunk) => {
205
- handleStderrData(chunk, true); // Write to PassThrough stream for piped stderr
206
- });
207
- }
208
- else if (this._process.stderr) {
209
- // If stderr is not in pipe mode, listen directly
210
- this._process.stderr.on('data', (chunk) => {
211
- handleStderrData(chunk, false); // No PassThrough stream for non-piped stderr
212
- });
213
- }
214
- });
98
+ });
99
+ }
215
100
  }
216
101
  /**
217
102
  * Gets the stderr stream for the child process.
218
103
  *
219
- * Returns a PassThrough stream if stderr is configured as 'pipe', otherwise returns
220
- * the actual stderr stream from the child process, or null if no stderr is available.
104
+ * Returns our PassThrough stream that captures stderr data.
221
105
  *
222
- * @returns {PassThrough | NodeJS.ReadableStream | null} The stderr stream or null
106
+ * @returns {PassThrough | null} The stderr stream or null
223
107
  */
224
108
  get stderr() {
225
- return this._stderrStream ?? this._process?.stderr ?? null;
109
+ return this._stderrStream;
226
110
  }
227
111
  /**
228
- * Processes the internal read buffer to extract and dispatch JSON-RPC messages.
229
- *
230
- * This method continuously reads complete JSON-RPC messages from the buffer
231
- * and dispatches them to the onmessage callback. It handles partial messages
232
- * by leaving incomplete data in the buffer for future processing.
233
- *
234
- * The method uses a while loop to process all available complete messages
235
- * in a single call, ensuring efficient message handling without blocking.
112
+ * Gets the process ID of the spawned child process.
236
113
  *
237
- * @private
114
+ * @returns {number | undefined} The PID of the child process, or undefined if not started
238
115
  */
239
- processReadBuffer() {
240
- while (true) {
241
- try {
242
- const message = this._readBuffer.readMessage();
243
- if (message === null) {
244
- break;
245
- }
246
- this.onmessage?.(message);
247
- }
248
- catch (error) {
249
- this.onerror?.(error);
250
- }
251
- }
116
+ get pid() {
117
+ return this._transport.pid ?? undefined;
252
118
  }
253
119
  /**
254
120
  * Closes the transport by gracefully terminating the child process.
255
121
  *
256
- * This method implements a graceful shutdown sequence:
257
- * 1. Sends SIGTERM to allow the child process to clean up
258
- * 2. Waits up to 5 seconds for graceful termination
259
- * 3. Forces termination with SIGKILL if the process doesn't exit
260
- * 4. Cleans up internal state and resolves the promise
261
- *
262
- * The method ensures proper cleanup of the read buffer and handles
263
- * any errors that occur during the shutdown process.
122
+ * This method delegates to the SDK's StdioClientTransport.close() method which handles:
123
+ * - Graceful shutdown sequence with SIGTERM/SIGKILL
124
+ * - Proper cleanup of internal state
264
125
  *
265
126
  * @returns {Promise<void>} Resolves when the transport is fully closed
266
127
  */
267
128
  async close() {
268
- if (this._process) {
269
- return new Promise((resolve) => {
270
- // Listen for child process exit events
271
- const cleanup = () => {
272
- this._process = undefined;
273
- this._readBuffer.clear();
274
- resolve();
275
- };
276
- if (this._process) {
277
- this._process.once('close', cleanup);
278
- this._process.once('exit', cleanup);
279
- // Send SIGTERM signal to give child process a chance to shut down gracefully
280
- try {
281
- this._process.kill('SIGTERM');
282
- // Set timeout protection to force kill if child process doesn't exit within 5 seconds
283
- const timeout = setTimeout(() => {
284
- if (this._process) {
285
- logger.warn('Child process did not exit gracefully, force killing...');
286
- this._process.kill('SIGKILL');
287
- }
288
- }, 5000);
289
- // Ensure timeout timer is cleared after process exits
290
- this._process.once('close', () => clearTimeout(timeout));
291
- this._process.once('exit', () => clearTimeout(timeout));
292
- }
293
- catch (error) {
294
- logger.error('Error closing stdio transport:', error);
295
- cleanup();
296
- }
297
- }
298
- else {
299
- // Process is already undefined, just resolve
300
- resolve();
301
- }
302
- });
303
- }
304
- this._readBuffer.clear();
129
+ await this._transport.close();
130
+ this._stderrStream?.end();
305
131
  }
306
132
  /**
307
133
  * Sends a JSON-RPC message to the child process via stdin.
308
134
  *
309
- * This method serializes the message to JSON, appends a newline character,
310
- * and writes it to the child process's stdin stream. It validates that
311
- * the transport is connected before attempting to send the message.
135
+ * This method delegates to the SDK's StdioClientTransport.send() method.
312
136
  *
313
137
  * @param {JSONRPCMessage} message - The JSON-RPC message to send
314
138
  * @returns {Promise<void>} Resolves when the message is written to stdin
315
- * @throws {Error} If the transport is not connected (no active child process)
316
139
  */
317
140
  async send(message) {
318
- if (!this._process?.stdin) {
319
- throw new Error('Not connected');
320
- }
321
- const json = JSON.stringify(message) + '\n';
322
- this._process.stdin.write(json);
141
+ await this._transport.send(message);
323
142
  }
324
143
  }
@@ -29,6 +29,7 @@ export declare class StreamableHttpTransport implements Transport {
29
29
  private url;
30
30
  private headers;
31
31
  private timeout;
32
+ private proxy?;
32
33
  /**
33
34
  * Internal reference to the underlying MCP SDK transport instance
34
35
  * @private
@@ -40,6 +41,16 @@ export declare class StreamableHttpTransport implements Transport {
40
41
  * @private
41
42
  */
42
43
  private isClosing;
44
+ /**
45
+ * Server name for logging context
46
+ * @private
47
+ */
48
+ private _serverName?;
49
+ /**
50
+ * Composite key (serverName-serverIndex) for logging context
51
+ * @private
52
+ */
53
+ private _compositeKey?;
43
54
  /**
44
55
  * Event handler called when a JSON-RPC message is received from the server
45
56
  * @public
@@ -63,8 +74,20 @@ export declare class StreamableHttpTransport implements Transport {
63
74
  * Commonly used for authentication tokens, API keys, or custom headers
64
75
  * @param timeout - Request timeout in milliseconds (default: 30000 = 30 seconds)
65
76
  * Controls how long to wait for HTTP responses before timing out
77
+ * @param proxy - Optional proxy configuration
78
+ * @param serverName - Optional server name for logging
79
+ * @param compositeKey - Optional composite key (serverName-serverIndex) for logging
80
+ */
81
+ constructor(url: string, headers?: Record<string, string>, timeout?: number, proxy?: {
82
+ url: string;
83
+ } | undefined, serverName?: string, compositeKey?: string);
84
+ /**
85
+ * Helper method to format log messages with server context.
86
+ *
87
+ * @param message - The base message
88
+ * @returns Formatted message with server context if available
66
89
  */
67
- constructor(url: string, headers?: Record<string, string>, timeout?: number);
90
+ private formatLogMessage;
68
91
  /**
69
92
  * Initializes and starts the Streamable HTTP transport connection
70
93
  *
@@ -1 +1 @@
1
- {"version":3,"file":"streamable-http-transport.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/streamable-http-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAK1E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,uBAAwB,YAAW,SAAS;IA0CrD,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IA3CjB;;;OAGG;IACH,OAAO,CAAC,SAAS,CAA8C;IAE/D;;;;OAIG;IACH,OAAO,CAAC,SAAS,CAAS;IAE1B;;;OAGG;IACI,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAErD;;;OAGG;IACI,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAExC;;;OAGG;IACI,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAE5B;;;;;;;;OAQG;gBAEO,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACpC,OAAO,GAAE,MAAc;IAGjC;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwD5B;;;;;;;;;;;;;;;;;;;OAmBG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAoBnD"}
1
+ {"version":3,"file":"streamable-http-transport.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/streamable-http-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAM1E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,uBAAwB,YAAW,SAAS;IAyDrD,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK,CAAC;IA3DhB;;;OAGG;IACH,OAAO,CAAC,SAAS,CAA8C;IAE/D;;;;OAIG;IACH,OAAO,CAAC,SAAS,CAAS;IAE1B;;;OAGG;IACH,OAAO,CAAC,WAAW,CAAC,CAAS;IAE7B;;;OAGG;IACH,OAAO,CAAC,aAAa,CAAC,CAAS;IAE/B;;;OAGG;IACI,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAErD;;;OAGG;IACI,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAExC;;;OAGG;IACI,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAE5B;;;;;;;;;;;OAWG;gBAEO,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACpC,OAAO,GAAE,MAAc,EACvB,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,YAAA,EAC/B,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM;IAMvB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6G5B;;;;;;;;;;;;;;;;;;;OAmBG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CA6BnD"}