@loop_ouroboros/mcp-hub-lite 1.2.8 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/dist/client/assets/{HomeView-CgEri1kD.js → HomeView-Bi2bkUKf.js} +1 -1
  3. package/dist/client/assets/{ResourceDetailView-DUJZbegl.css → ResourceDetailView-BkTSg91z.css} +1 -1
  4. package/dist/client/assets/ResourceDetailView-DyuSovH9.js +1 -0
  5. package/dist/client/assets/ResourcesView-CU0VbNy5.js +1 -0
  6. package/dist/client/assets/ResourcesView-zgV8Nq7w.css +1 -0
  7. package/dist/client/assets/{ServerDashboard-B3O-crvv.js → ServerDashboard-BGyyZAti.js} +1 -1
  8. package/dist/client/assets/{ServerDetail-CXg8rI3q.css → ServerDetail-CPNAFBPM.css} +1 -1
  9. package/dist/client/assets/ServerDetail-bcQ8BVXR.js +2 -0
  10. package/dist/client/assets/{ServerListView-SlZN8ppC.js → ServerListView-yQPVJFHG.js} +1 -1
  11. package/dist/client/assets/{ServerStatusTags.vue_vue_type_script_setup_true_lang-DmGg4uuV.js → ServerStatusTags.vue_vue_type_script_setup_true_lang-C8gQlxGE.js} +1 -1
  12. package/dist/client/assets/{SettingsView-D8fiOG0O.js → SettingsView-B1DxbFP3.js} +1 -1
  13. package/dist/client/assets/ToolCallDialog-BQ9UJZ_-.css +1 -0
  14. package/dist/client/assets/ToolCallDialog-DEapCO06.js +1 -0
  15. package/dist/client/assets/ToolsView-DA0u_bCw.js +1 -0
  16. package/dist/client/assets/ToolsView-cO61nMNr.css +1 -0
  17. package/dist/client/assets/{_baseClone-BYxCbA_9.js → _baseClone-B991Lvrt.js} +1 -1
  18. package/dist/client/assets/{el-form-item-ySymCPMr.js → el-form-item-DfWq_kSy.js} +1 -1
  19. package/dist/client/assets/{el-input-C85p6Nqj.js → el-input-5YzZrwir.js} +1 -1
  20. package/dist/client/assets/{el-loading-DIjKEx81.js → el-loading-DE3FcxNH.js} +1 -1
  21. package/dist/client/assets/{el-overlay-B_CxiSem.js → el-overlay-BTeTueuN.js} +1 -1
  22. package/dist/client/assets/{el-radio-group-BjkTCPRf.js → el-radio-group-Y1E2bxIW.js} +1 -1
  23. package/dist/client/assets/{el-skeleton-item-CupTKK6n.js → el-skeleton-item-DhgR50Jx.js} +1 -1
  24. package/dist/client/assets/{el-switch-BosIJ9jf.js → el-switch-fF--nMSD.js} +1 -1
  25. package/dist/client/assets/{el-tab-pane-BydxdJoc.js → el-tab-pane-rvS_KTwP.js} +1 -1
  26. package/dist/client/assets/{el-table-column-DV5TZOUW.js → el-table-column-B1O8mY47.js} +1 -1
  27. package/dist/client/assets/{index-xJkq2euk.css → index-Bzz3tYbS.css} +1 -1
  28. package/dist/client/assets/index-DkqV9kH4.js +2 -0
  29. package/dist/client/assets/{omit-DxDGRttI.js → omit-BIIebEYo.js} +1 -1
  30. package/dist/client/assets/{raf-Y9AoxecD.js → raf-Cj-gATZv.js} +1 -1
  31. package/dist/client/index.html +2 -2
  32. package/dist/server/shared/models/constants.d.ts +3 -0
  33. package/dist/server/shared/models/constants.d.ts.map +1 -0
  34. package/dist/server/shared/models/constants.js +2 -0
  35. package/dist/server/shared/models/index.d.ts +1 -0
  36. package/dist/server/shared/models/index.d.ts.map +1 -1
  37. package/dist/server/shared/models/index.js +1 -0
  38. package/dist/server/shared/types/index.d.ts +0 -1
  39. package/dist/server/shared/types/index.d.ts.map +1 -1
  40. package/dist/server/shared/types/index.js +0 -1
  41. package/dist/server/src/api/mcp/debug-response-wrapper.js +1 -1
  42. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
  43. package/dist/server/src/api/mcp/gateway.js +23 -41
  44. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
  45. package/dist/server/src/api/web/hub-tools.js +11 -0
  46. package/dist/server/src/api/web/mcp-status.js +2 -2
  47. package/dist/server/src/api/web/search.d.ts +2 -1
  48. package/dist/server/src/api/web/search.d.ts.map +1 -1
  49. package/dist/server/src/api/web/search.js +23 -10
  50. package/dist/server/src/api/web/servers.js +1 -1
  51. package/dist/server/src/api/ws/events.js +1 -1
  52. package/dist/server/src/api/ws/ws-handler.js +1 -1
  53. package/dist/server/src/app.js +1 -1
  54. package/dist/server/src/cli/commands/tool-use.d.ts +10 -3
  55. package/dist/server/src/cli/commands/tool-use.d.ts.map +1 -1
  56. package/dist/server/src/cli/commands/tool-use.js +69 -30
  57. package/dist/server/src/config/config-change-logger.js +1 -1
  58. package/dist/server/src/config/config-loader.js +1 -1
  59. package/dist/server/src/config/config-manager.js +1 -1
  60. package/dist/server/src/config/config-migrator.d.ts +4 -48
  61. package/dist/server/src/config/config-migrator.d.ts.map +1 -1
  62. package/dist/server/src/config/config-migrator.js +2 -103
  63. package/dist/server/src/config/config-saver.js +1 -1
  64. package/dist/server/src/config/server-config-manager.js +1 -1
  65. package/dist/server/src/models/event.model.d.ts +0 -98
  66. package/dist/server/src/models/event.model.d.ts.map +1 -1
  67. package/dist/server/src/models/event.model.js +0 -4
  68. package/dist/server/src/models/server.model.d.ts +0 -2
  69. package/dist/server/src/models/server.model.d.ts.map +1 -1
  70. package/dist/server/src/models/system-tools.constants.d.ts +8 -3
  71. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  72. package/dist/server/src/models/system-tools.constants.js +5 -2
  73. package/dist/server/src/pid/manager.js +1 -1
  74. package/dist/server/src/pid/types.d.ts +0 -5
  75. package/dist/server/src/pid/types.d.ts.map +1 -1
  76. package/dist/server/src/server/dev-server.js +2 -2
  77. package/dist/server/src/server/runner.js +2 -2
  78. package/dist/server/src/server/startup.js +2 -2
  79. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  80. package/dist/server/src/services/connection/connection-manager.js +16 -21
  81. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
  82. package/dist/server/src/services/connection/tool-cache.js +10 -8
  83. package/dist/server/src/services/event-bus.service.d.ts +3 -1
  84. package/dist/server/src/services/event-bus.service.d.ts.map +1 -1
  85. package/dist/server/src/services/event-bus.service.js +1 -0
  86. package/dist/server/src/services/gateway/gateway.service.d.ts +1 -0
  87. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
  88. package/dist/server/src/services/gateway/gateway.service.js +29 -7
  89. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts +1 -2
  90. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
  91. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +24 -13
  92. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
  93. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +7 -3
  94. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
  95. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +28 -1
  96. package/dist/server/src/services/gateway/tool-list-generator.d.ts +14 -19
  97. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
  98. package/dist/server/src/services/gateway/tool-list-generator.js +221 -80
  99. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
  100. package/dist/server/src/services/hub-manager.service.js +21 -4
  101. package/dist/server/src/services/hub-tools/instance-selector.js +1 -1
  102. package/dist/server/src/services/hub-tools/resource-generator.d.ts +0 -21
  103. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
  104. package/dist/server/src/services/hub-tools/resource-generator.js +15 -15
  105. package/dist/server/src/services/hub-tools/server-selector.js +1 -1
  106. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -0
  107. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
  108. package/dist/server/src/services/hub-tools/system-tool-definitions.js +25 -1
  109. package/dist/server/src/services/hub-tools.service.d.ts +21 -4
  110. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  111. package/dist/server/src/services/hub-tools.service.js +74 -13
  112. package/dist/server/src/services/log-storage.service.js +1 -1
  113. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
  114. package/dist/server/src/services/system-tool-handler.js +10 -2
  115. package/dist/server/src/utils/error-handler.js +1 -1
  116. package/dist/server/src/utils/index.d.ts +1 -1
  117. package/dist/server/src/utils/index.d.ts.map +1 -1
  118. package/dist/server/src/utils/index.js +1 -1
  119. package/dist/server/src/utils/instance-id.d.ts +0 -8
  120. package/dist/server/src/utils/instance-id.d.ts.map +1 -1
  121. package/dist/server/src/utils/instance-id.js +1 -1
  122. package/dist/server/src/utils/json-utils.js +4 -4
  123. package/dist/server/src/utils/log-rotator.d.ts +0 -15
  124. package/dist/server/src/utils/log-rotator.d.ts.map +1 -1
  125. package/dist/server/src/utils/log-rotator.js +0 -18
  126. package/dist/server/src/utils/logger/index.d.ts +0 -22
  127. package/dist/server/src/utils/logger/index.d.ts.map +1 -1
  128. package/dist/server/src/utils/logger/index.js +0 -29
  129. package/dist/server/src/utils/port-checker.js +1 -1
  130. package/dist/server/src/utils/sort-utils.d.ts +0 -16
  131. package/dist/server/src/utils/sort-utils.d.ts.map +1 -1
  132. package/dist/server/src/utils/sort-utils.js +0 -42
  133. package/dist/server/src/utils/transports/stdio-transport.js +1 -1
  134. package/dist/server/src/utils/transports/streamable-http-transport.js +1 -1
  135. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
  136. package/dist/server/src/utils/transports/transport-factory.js +26 -3
  137. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +1 -1
  138. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +1 -1
  139. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +1 -1
  140. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +1 -1
  141. package/dist/server/tests/integration/gateway/mcp-connection.test.js +1 -1
  142. package/dist/server/tests/types/logger-test-helpers.d.ts +1 -1
  143. package/dist/server/tests/types/logger-test-helpers.d.ts.map +1 -1
  144. package/dist/server/tests/unit/api/search.test.d.ts +2 -0
  145. package/dist/server/tests/unit/api/search.test.d.ts.map +1 -0
  146. package/dist/server/tests/unit/api/search.test.js +61 -0
  147. package/dist/server/tests/unit/config/config-migrator.test.js +45 -105
  148. package/dist/server/tests/unit/config/config-saver.test.js +1 -1
  149. package/dist/server/tests/unit/server/runner.test.js +5 -6
  150. package/dist/server/tests/unit/services/gateway-logging.test.js +1 -1
  151. package/dist/server/tests/unit/services/hub-manager-service.test.js +4 -5
  152. package/dist/server/tests/unit/services/hub-tools.service.test.js +80 -3
  153. package/dist/server/tests/unit/utils/log-rotator.test.js +1 -15
  154. package/dist/server/tests/unit/utils/logger.test.js +1 -23
  155. package/dist/server/tests/unit/utils/sort-utils.test.js +1 -92
  156. package/package.json +1 -3
  157. package/dist/client/assets/ResourceDetailView-B8Qo1_jK.js +0 -1
  158. package/dist/client/assets/ResourcesView-B12FzUdo.js +0 -1
  159. package/dist/client/assets/ResourcesView-Cc8RHtia.css +0 -1
  160. package/dist/client/assets/ServerDetail-Bz5_9yOY.js +0 -2
  161. package/dist/client/assets/ToolCallDialog-BhdPX-Kf.css +0 -1
  162. package/dist/client/assets/ToolCallDialog-DYEdhnCk.js +0 -1
  163. package/dist/client/assets/ToolsView-BreAl-yn.js +0 -1
  164. package/dist/client/assets/ToolsView-BxgXvPC3.css +0 -1
  165. package/dist/client/assets/index-kC4mf0Vo.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"hub-tools.service.d.ts","sourceRoot":"","sources":["../../../../src/services/hub-tools.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub-tools.service.d.ts","sourceRoot":"","sources":["../../../../src/services/hub-tools.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAOjE,OAAO,EAEL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,8BAA8B,EAC9B,cAAc,EACd,iBAAiB,EAElB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,6BAA6B,EAC7B,cAAc,EACd,iBAAiB,EAClB,MAAM,mCAAmC,CAAC;AAa3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,qBAAa,eAAe;;IAM1B;;;;;;;;;OASG;IACH,cAAc;IAId;;;;;;;;;OASG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAkBpD;;;;;;;;;;;OAWG;IACG,iBAAiB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC;QAC9D,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,WAAW,EAAE,CAAC;KACtB,CAAC;IAqDF;;;;;;;;;;OAUG;IACG,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IA+B7D;;;;;;;;;;OAUG;IACG,uBAAuB,CAAC,IAAI,EAAE,6BAA6B,GAAG,OAAO,CAAC;QAC1E,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAkCF;;;;;;;;;;OAUG;IACG,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC;QAC5C,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAC,CAAC;KAC/E,CAAC;IAmBF;;;;;;;;;;;OAWG;IACG,cAAc,CAAC,CAAC,SAAS,cAAc,EAC3C,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,SAAS,OAAO,iBAAiB,GACxC,iBAAiB,GACjB,CAAC,SAAS,OAAO,eAAe,GAC9B,uBAAuB,GACvB,CAAC,SAAS,OAAO,aAAa,GAC5B,aAAa,GACb,CAAC,SAAS,OAAO,cAAc,GAC7B,cAAc,GACd,CAAC,SAAS,OAAO,8BAA8B,GAC7C,6BAA6B,GAC7B,CAAC,SAAS,OAAO,cAAc,GAC7B,cAAc,GACd,CAAC,SAAS,OAAO,iBAAiB,GAChC,iBAAiB,GACjB,KAAK,GACpB,OAAO,CACR,CAAC,SAAS,OAAO,iBAAiB,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtB,CAAC,SAAS,OAAO,eAAe,GAC9B;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,EAAE,CAAA;KAAE,GAC5C,CAAC,SAAS,OAAO,aAAa,GAC5B,IAAI,GAAG,SAAS,GAChB,CAAC,SAAS,OAAO,cAAc,GAC7B,OAAO,GACP,CAAC,SAAS,OAAO,8BAA8B,GAC7C;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAC7D,CAAC,SAAS,OAAO,cAAc,GAC7B;QACE,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAC,CAAC;KAC/E,GACD,CAAC,SAAS,OAAO,iBAAiB,GAChC,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC,GAC7D,KAAK,CACtB;IAkFD;;;;;;;;;;;OAWG;IACG,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAgTtD;;;;;;;;OAQG;IACG,YAAY,IAAI,OAAO,CAC3B,MAAM,CACJ,MAAM,EACN;QACE,KAAK,EAAE,WAAW,EAAE,CAAC;KACtB,CACF,CACF;IAuCD;;;;;;;;;OASG;IACG,WAAW,CACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC,CAAC;IAgDzE;;;;;;;;OAQG;IACG,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAK1C;;;;;;;;;;;;;OAaG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CACpC;QACE,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B,cAAc,EAAE,MAAM,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;KACrB,GACD,IAAI,EAAE,GACN,QAAQ,EAAE,GACV,MAAM,CACT;CAiBF;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
@@ -1,12 +1,12 @@
1
1
  import { hubManager } from './hub-manager.service.js';
2
- import { mcpConnectionManager } from './mcp-connection-manager.js';
2
+ import { mcpConnectionManager } from './connection/index.js';
3
3
  import { eventBus, EventTypes } from './event-bus.service.js';
4
- import { gateway } from './gateway.service.js';
5
- import { logger, LOG_MODULES } from '../utils/logger.js';
4
+ import { generateGatewayToolsList } from './gateway/tool-list-generator.js';
5
+ import { logger, LOG_MODULES } from '../utils/logger/index.js';
6
6
  import { stringifyForLogging } from '../utils/json-utils.js';
7
7
  import { normalizeToolName } from '../utils/name-converter.js';
8
8
  import { McpError } from '@modelcontextprotocol/sdk/types.js';
9
- import { MCP_HUB_LITE_SERVER, LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL, SYSTEM_TOOL_NAMES } from '../models/system-tools.constants.js';
9
+ import { MCP_HUB_LITE_SERVER, LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL, SEARCH_TOOLS_TOOL, SYSTEM_TOOL_NAMES } from '../models/system-tools.constants.js';
10
10
  import { ToolArgsParser } from '../utils/tool-args-parser.js';
11
11
  import { hasValidId, selectBestInstance, getServerDescription, getSystemTools, generateDynamicResources, readResource as readResourceUtil } from './hub-tools/index.js';
12
12
  import { InstanceSelector } from './hub-tools/instance-selector.js';
@@ -96,12 +96,6 @@ export class HubToolsService {
96
96
  if (indexes.length === 0) {
97
97
  continue;
98
98
  }
99
- // Use non-strict mode for management operations to avoid tag-match-unique errors
100
- const serverInfo = selectBestInstance(server.name, undefined, false);
101
- if (!serverInfo) {
102
- // Skip servers that can't be selected (e.g., tag-match-unique without tags)
103
- continue;
104
- }
105
99
  const description = getServerDescription(server.config, server.name);
106
100
  result[server.name] = description;
107
101
  }
@@ -127,7 +121,7 @@ export class HubToolsService {
127
121
  if (typeof args.serverName === 'string' && args.serverName === MCP_HUB_LITE_SERVER) {
128
122
  // Generate tool list using the same logic as tools/list
129
123
  const toolMap = new Map();
130
- const gatewayTools = gateway.generateGatewayToolsList(toolMap);
124
+ const gatewayTools = generateGatewayToolsList(toolMap);
131
125
  // Convert to ToolSummary format (without inputSchema)
132
126
  const toolSummaries = gatewayTools.map((tool) => ({
133
127
  name: tool.name,
@@ -309,6 +303,14 @@ export class HubToolsService {
309
303
  result = await this.listTags(toolArgs);
310
304
  break;
311
305
  }
306
+ case SEARCH_TOOLS_TOOL: {
307
+ const searchArgs = toolArgs;
308
+ if (!searchArgs.query) {
309
+ throw new Error('query is required for search_tools');
310
+ }
311
+ result = await this.searchTools(searchArgs.query);
312
+ break;
313
+ }
312
314
  default:
313
315
  throw new Error(`System tool "${toolName}" not found`);
314
316
  }
@@ -336,8 +338,17 @@ export class HubToolsService {
336
338
  async callTool(args) {
337
339
  let { serverName, toolName } = args;
338
340
  // Support both toolArgs and arguments for backward compatibility
339
- const toolArgs = (args.toolArgs || args.arguments || {});
340
- const { requestOptions } = args;
341
+ let toolArgs = (args.toolArgs || args.arguments || {});
342
+ let { requestOptions } = args;
343
+ // Unwrap gateway-wrapped arguments: if toolArgs itself contains a nested
344
+ // toolArgs property (the wrapped schema), extract the real tool arguments.
345
+ if (toolArgs && typeof toolArgs.toolArgs === 'object' && toolArgs.toolArgs !== null) {
346
+ const wrapped = toolArgs;
347
+ toolArgs = wrapped.toolArgs;
348
+ if (wrapped.requestOptions && !requestOptions) {
349
+ requestOptions = wrapped.requestOptions;
350
+ }
351
+ }
341
352
  // Parse prefixed tool names (like mcp__mcp-hub-lite__xxx) if applicable
342
353
  const parsedTool = ToolArgsParser.parsePrefixedToolName(toolName);
343
354
  if (parsedTool) {
@@ -579,6 +590,56 @@ export class HubToolsService {
579
590
  }
580
591
  return allTools;
581
592
  }
593
+ /**
594
+ * Searches for tools matching the query across all connected MCP servers.
595
+ *
596
+ * Results are grouped by server name, and only servers with at least one
597
+ * matching tool are included. Matching is case-insensitive on tool name and description.
598
+ *
599
+ * @param {string} query - Search query string for matching tool names and descriptions
600
+ * @returns {Promise<Record<string, { description: string; tools: ToolSummary[] }>>}
601
+ * Object mapping server names to their descriptions and matching tools
602
+ */
603
+ async searchTools(query) {
604
+ if (!query || typeof query !== 'string') {
605
+ throw new Error('query is required and must be a non-empty string');
606
+ }
607
+ const normalizedQuery = query.toLowerCase();
608
+ const servers = hubManager.getAllServers();
609
+ const result = {};
610
+ for (const server of servers) {
611
+ if (!hasValidId(server)) {
612
+ continue;
613
+ }
614
+ const indexes = mcpConnectionManager.getConnectedIndexes(server.name);
615
+ if (indexes.length === 0) {
616
+ continue;
617
+ }
618
+ const description = getServerDescription(server.config, server.name);
619
+ const tools = mcpConnectionManager.getToolsByServerName(server.name);
620
+ if (tools.length === 0) {
621
+ continue;
622
+ }
623
+ const matchingTools = tools
624
+ .filter((tool) => {
625
+ const nameMatch = tool.name.toLowerCase().includes(normalizedQuery);
626
+ const descMatch = tool.description?.toLowerCase().includes(normalizedQuery);
627
+ return nameMatch || descMatch;
628
+ })
629
+ .map((tool) => ({
630
+ name: tool.name,
631
+ description: tool.description,
632
+ serverName: server.name
633
+ }));
634
+ if (matchingTools.length > 0) {
635
+ result[server.name] = {
636
+ description,
637
+ tools: matchingTools
638
+ };
639
+ }
640
+ }
641
+ return result;
642
+ }
582
643
  /**
583
644
  * Lists all dynamically generated Hub resources based on connected MCP servers.
584
645
  *
@@ -1,4 +1,4 @@
1
- import { logger, LOG_MODULES } from '../utils/logger.js';
1
+ import { logger, LOG_MODULES } from '../utils/logger/index.js';
2
2
  import { eventBus, EventTypes } from './event-bus.service.js';
3
3
  /**
4
4
  * Service for managing and storing log entries for MCP servers.
@@ -1 +1 @@
1
- {"version":3,"file":"system-tool-handler.d.ts","sourceRoot":"","sources":["../../../../src/services/system-tool-handler.ts"],"names":[],"mappings":"AAqBA;;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;CA2EpB"}
1
+ {"version":3,"file":"system-tool-handler.d.ts","sourceRoot":"","sources":["../../../../src/services/system-tool-handler.ts"],"names":[],"mappings":"AAuBA;;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;CAmFpB"}
@@ -1,7 +1,7 @@
1
1
  import { hubToolsService } from './hub-tools.service.js';
2
2
  import { McpError } from '@modelcontextprotocol/sdk/types.js';
3
- import { logger, LOG_MODULES } from '../utils/logger.js';
4
- import { LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL } from '../models/system-tools.constants.js';
3
+ import { logger, LOG_MODULES } from '../utils/logger/index.js';
4
+ import { LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL, SEARCH_TOOLS_TOOL } from '../models/system-tools.constants.js';
5
5
  import { stringifyForLogging } from '../utils/json-utils.js';
6
6
  /**
7
7
  * Unified system tool call handler
@@ -58,6 +58,14 @@ export class SystemToolHandler {
58
58
  result = await hubToolsService.listTags(listTagsArgs);
59
59
  break;
60
60
  }
61
+ case SEARCH_TOOLS_TOOL: {
62
+ const searchArgs = toolArgs;
63
+ if (!searchArgs.query) {
64
+ throw new McpError(-32802, 'query is required for search_tools');
65
+ }
66
+ result = await hubToolsService.searchTools(searchArgs.query);
67
+ break;
68
+ }
61
69
  default:
62
70
  throw new McpError(-32801, `Unknown system tool: ${toolName}`);
63
71
  }
@@ -1,5 +1,5 @@
1
1
  import { McpError } from '@modelcontextprotocol/sdk/types.js';
2
- import { logger } from './logger.js';
2
+ import { logger } from './logger/index.js';
3
3
  import { LOG_MODULES } from './logger/log-modules.js';
4
4
  /**
5
5
  * Unified error handler
@@ -1,4 +1,4 @@
1
- export { logger, LOG_MODULES } from './logger.js';
1
+ export { logger, LOG_MODULES } from './logger/index.js';
2
2
  export * from './sort-utils.js';
3
3
  export * from './version.js';
4
4
  export { normalizeToolName } from './name-converter.js';
@@ -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;AAClD,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxD,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,4 +1,4 @@
1
- export { logger, LOG_MODULES } from './logger.js';
1
+ export { logger, LOG_MODULES } from './logger/index.js';
2
2
  export * from './sort-utils.js';
3
3
  export * from './version.js';
4
4
  export { normalizeToolName } from './name-converter.js';
@@ -2,14 +2,6 @@
2
2
  * Instance ID generation utilities using content-based hashing.
3
3
  */
4
4
  import type { ServerInstance } from '../config/config.schema.js';
5
- /**
6
- * Generates a stable 8-character hash from an object.
7
- * Uses SHA-256 and returns the first 8 hex characters.
8
- *
9
- * @param obj - The object to hash
10
- * @returns An 8-character hex string
11
- */
12
- export declare function generateInstanceHash(obj: Record<string, unknown>): string;
13
5
  /**
14
6
  * Generates a deterministic instance ID based on server name and instance configuration.
15
7
  * The ID format is: ${serverName}-${hash}
@@ -1 +1 @@
1
- {"version":3,"file":"instance-id.d.ts","sourceRoot":"","sources":["../../../../src/utils/instance-id.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAyBzE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,GACtC,MAAM,CAiBR"}
1
+ {"version":3,"file":"instance-id.d.ts","sourceRoot":"","sources":["../../../../src/utils/instance-id.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAoC/D;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,GACtC,MAAM,CAiBR"}
@@ -9,7 +9,7 @@ import { createHash } from 'node:crypto';
9
9
  * @param obj - The object to hash
10
10
  * @returns An 8-character hex string
11
11
  */
12
- export function generateInstanceHash(obj) {
12
+ function generateInstanceHash(obj) {
13
13
  function stableStringify(value) {
14
14
  if (value === null || typeof value !== 'object') {
15
15
  return JSON.stringify(value);
@@ -207,9 +207,9 @@ export function stringifyForLogging(obj) {
207
207
  const jsonPretty = getJsonPrettySetting();
208
208
  if (jsonPretty) {
209
209
  const jsonStr = JSON.stringify(obj, null, 2);
210
- return processPrettyJsonForLogging(jsonStr);
210
+ return '\n' + processPrettyJsonForLogging(jsonStr);
211
211
  }
212
- return JSON.stringify(obj);
212
+ return '\n' + JSON.stringify(obj);
213
213
  }
214
214
  /**
215
215
  * Stringify object for logging with replacer and dynamic pretty formatting based on LOG_JSON_PRETTY environment variable
@@ -221,7 +221,7 @@ export function stringifyForLoggingWithReplacer(obj, replacer) {
221
221
  const jsonPretty = getJsonPrettySetting();
222
222
  if (jsonPretty) {
223
223
  const jsonStr = JSON.stringify(obj, replacer, 2);
224
- return processPrettyJsonForLogging(jsonStr);
224
+ return '\n' + processPrettyJsonForLogging(jsonStr);
225
225
  }
226
- return JSON.stringify(obj, replacer);
226
+ return '\n' + JSON.stringify(obj, replacer);
227
227
  }
@@ -128,21 +128,6 @@ export declare class LogRotator {
128
128
  * ```
129
129
  */
130
130
  getLatestLogFilePath(): string | null;
131
- /**
132
- * Gets the current log file path (backward compatibility).
133
- *
134
- * This method is maintained for backward compatibility. It first tries to get
135
- * the latest existing log file. If none exists, it creates a new one.
136
- *
137
- * @returns {string} The absolute file path for the current log file.
138
- * @deprecated Use createNewLogFilePath() or getLatestLogFilePath() instead
139
- * @example
140
- * ```typescript
141
- * const rotator = new LogRotator('/var/log/mcp-hub', 'mcp-hub');
142
- * const logPath = rotator.getCurrentLogFilePath();
143
- * ```
144
- */
145
- getCurrentLogFilePath(): string;
146
131
  /**
147
132
  * Performs log rotation by cleaning up old log files beyond the retention period.
148
133
  *
@@ -1 +1 @@
1
- {"version":3,"file":"log-rotator.d.ts","sourceRoot":"","sources":["../../../../src/utils/log-rotator.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,KAAK,YAAY,GAAG,MAAM;IAAE,MAAM,EAAE;QAAE,OAAO,EAAE;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,YAAY,CAAsB;IAE1C;;;;;;;OAOG;gBAED,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,MAAkB,EAC/B,YAAY,CAAC,EAAE,aAAa,EAC5B,YAAY,CAAC,EAAE,YAAY;IAa7B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAWvB;;;;;;;;;;;;;;;;;OAiBG;IACI,oBAAoB,IAAI,MAAM;IAKrC;;;;;;;;;;;;;;OAcG;IACI,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAK5C;;;;;;;;;;;;;OAaG;IACI,qBAAqB,IAAI,MAAM;IAKtC;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,UAAU,IAAI,IAAI;IAwBzB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,WAAW,IAAI,MAAM,EAAE;IAqB9B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,uBAAuB;CA8BhC"}
1
+ {"version":3,"file":"log-rotator.d.ts","sourceRoot":"","sources":["../../../../src/utils/log-rotator.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,KAAK,YAAY,GAAG,MAAM;IAAE,MAAM,EAAE;QAAE,OAAO,EAAE;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,YAAY,CAAsB;IAE1C;;;;;;;OAOG;gBAED,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,MAAkB,EAC/B,YAAY,CAAC,EAAE,aAAa,EAC5B,YAAY,CAAC,EAAE,YAAY;IAa7B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAWvB;;;;;;;;;;;;;;;;;OAiBG;IACI,oBAAoB,IAAI,MAAM;IAKrC;;;;;;;;;;;;;;OAcG;IACI,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAK5C;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,UAAU,IAAI,IAAI;IAwBzB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,WAAW,IAAI,MAAM,EAAE;IAqB9B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,uBAAuB;CA8BhC"}
@@ -159,24 +159,6 @@ export class LogRotator {
159
159
  const logFiles = this.getLogFiles();
160
160
  return logFiles.length > 0 ? logFiles[0] : null;
161
161
  }
162
- /**
163
- * Gets the current log file path (backward compatibility).
164
- *
165
- * This method is maintained for backward compatibility. It first tries to get
166
- * the latest existing log file. If none exists, it creates a new one.
167
- *
168
- * @returns {string} The absolute file path for the current log file.
169
- * @deprecated Use createNewLogFilePath() or getLatestLogFilePath() instead
170
- * @example
171
- * ```typescript
172
- * const rotator = new LogRotator('/var/log/mcp-hub', 'mcp-hub');
173
- * const logPath = rotator.getCurrentLogFilePath();
174
- * ```
175
- */
176
- getCurrentLogFilePath() {
177
- const latest = this.getLatestLogFilePath();
178
- return latest ?? this.createNewLogFilePath();
179
- }
180
162
  /**
181
163
  * Performs log rotation by cleaning up old log files beyond the retention period.
182
164
  *
@@ -10,27 +10,5 @@ export { formatTimestamp, formatLogLevel, formatPid, createColoredLogMessage, cr
10
10
  export { isToolsListResponse, simplifyToolsListResponse, hasImageContent, simplifyImageContent, formatMcpMessageForLogging, isNotificationMessage, logNotificationMessage } from './log-output.js';
11
11
  export { Logger } from './logger.js';
12
12
  import { Logger } from './logger.js';
13
- import type { LogContext } from './log-context.js';
14
13
  export declare const logger: Logger;
15
- /**
16
- * Log a message with color formatting for console and plain text for file output.
17
- *
18
- * This function provides a convenient way to log messages that appear with
19
- * ANSI color codes in the console but are written as plain text to log files.
20
- * It uses the logger's internal formatting methods to ensure consistent output.
21
- *
22
- * @param coloredMessage - The message to display in the console with color formatting
23
- * @param plainMessage - The message to write to log files in plain text format
24
- * @param context - Optional logging context including PID, server name, trace ID, etc.
25
- *
26
- * @example
27
- * ```typescript
28
- * logWithColor(
29
- * '\x1b[32m[SUCCESS]\x1b[0m Server started',
30
- * '[SUCCESS] Server started',
31
- * { serverName: 'mcp-hub', pid: process.pid }
32
- * );
33
- * ```
34
- */
35
- export declare function logWithColor(coloredMessage: string, plainMessage: string, context?: LogContext): void;
36
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG9E,OAAO,EACL,eAAe,EACf,cAAc,EACd,SAAS,EACT,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,eAAO,MAAM,MAAM,QAAe,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAC1B,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,UAAU,GACnB,IAAI,CAQN"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG9E,OAAO,EACL,eAAe,EACf,cAAc,EACd,SAAS,EACT,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -14,33 +14,4 @@ export { isToolsListResponse, simplifyToolsListResponse, hasImageContent, simpli
14
14
  export { Logger } from './logger.js';
15
15
  // Create and export the default logger instance
16
16
  import { Logger } from './logger.js';
17
- import { createColoredLogMessage, createLogMessage } from './log-formatter.js';
18
17
  export const logger = new Logger();
19
- /**
20
- * Log a message with color formatting for console and plain text for file output.
21
- *
22
- * This function provides a convenient way to log messages that appear with
23
- * ANSI color codes in the console but are written as plain text to log files.
24
- * It uses the logger's internal formatting methods to ensure consistent output.
25
- *
26
- * @param coloredMessage - The message to display in the console with color formatting
27
- * @param plainMessage - The message to write to log files in plain text format
28
- * @param context - Optional logging context including PID, server name, trace ID, etc.
29
- *
30
- * @example
31
- * ```typescript
32
- * logWithColor(
33
- * '\x1b[32m[SUCCESS]\x1b[0m Server started',
34
- * '[SUCCESS] Server started',
35
- * { serverName: 'mcp-hub', pid: process.pid }
36
- * );
37
- * ```
38
- */
39
- export function logWithColor(coloredMessage, plainMessage, context) {
40
- const coloredLogMsg = createColoredLogMessage('info', coloredMessage, context);
41
- console.info(coloredLogMsg);
42
- if (logger.logFileStream) {
43
- const plainLogMsg = createLogMessage('info', plainMessage, context);
44
- logger.logFileStream.write(plainLogMsg + '\n');
45
- }
46
- }
@@ -5,7 +5,7 @@
5
5
  import { exec } from 'child_process';
6
6
  import { promisify } from 'util';
7
7
  import { PidManager } from '../pid/manager.js';
8
- import { logger, LOG_MODULES } from './logger.js';
8
+ import { logger, LOG_MODULES } from './logger/index.js';
9
9
  const execAsync = promisify(exec);
10
10
  /**
11
11
  * Check if port is in use
@@ -1,14 +1,6 @@
1
1
  /**
2
2
  * Object key sorting utilities for consistent configuration.
3
3
  */
4
- /**
5
- * Sorts object keys alphabetically using localeCompare.
6
- * Returns a new object with sorted keys, preserving the original object.
7
- *
8
- * @param obj - Object to sort
9
- * @returns New object with sorted keys
10
- */
11
- export declare function sortObjectKeys<T extends Record<string, unknown>>(obj: T): T;
12
4
  /**
13
5
  * Sorts object keys alphabetically, case-insensitive.
14
6
  * Returns a new object with sorted keys, preserving the original object and original key case.
@@ -17,14 +9,6 @@ export declare function sortObjectKeys<T extends Record<string, unknown>>(obj: T
17
9
  * @returns New object with sorted keys (case-insensitive sort)
18
10
  */
19
11
  export declare function sortObjectKeysCaseInsensitive<T extends Record<string, unknown>>(obj: T): T;
20
- /**
21
- * Recursively sorts all object keys in a nested structure.
22
- * Returns a new object with all nested keys sorted, preserving the original object.
23
- *
24
- * @param obj - Object to sort recursively
25
- * @returns New object with all nested keys sorted
26
- */
27
- export declare function sortObjectKeysDeep<T>(obj: T): T;
28
12
  /**
29
13
  * Sorts env and headers objects in a server configuration.
30
14
  * This is a convenience function for server template/instance configurations.
@@ -1 +1 @@
1
- {"version":3,"file":"sort-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/sort-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoDH;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAW3E;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAa1F;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAmB/C;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,CAAC,SAAS;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAC5E,MAAM,EAAE,CAAC,GAAG,CAAC,CAcd"}
1
+ {"version":3,"file":"sort-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/sort-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoDH;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAa1F;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,CAAC,SAAS;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAC5E,MAAM,EAAE,CAAC,GAAG,CAAC,CAcd"}
@@ -49,24 +49,6 @@ function normalizeConfigUrls(obj) {
49
49
  }
50
50
  return obj;
51
51
  }
52
- /**
53
- * Sorts object keys alphabetically using localeCompare.
54
- * Returns a new object with sorted keys, preserving the original object.
55
- *
56
- * @param obj - Object to sort
57
- * @returns New object with sorted keys
58
- */
59
- export function sortObjectKeys(obj) {
60
- if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {
61
- return obj;
62
- }
63
- const sortedObj = {};
64
- const keys = Object.keys(obj).sort((a, b) => a.localeCompare(b));
65
- for (const key of keys) {
66
- sortedObj[key] = obj[key];
67
- }
68
- return sortedObj;
69
- }
70
52
  /**
71
53
  * Sorts object keys alphabetically, case-insensitive.
72
54
  * Returns a new object with sorted keys, preserving the original object and original key case.
@@ -85,30 +67,6 @@ export function sortObjectKeysCaseInsensitive(obj) {
85
67
  }
86
68
  return sortedObj;
87
69
  }
88
- /**
89
- * Recursively sorts all object keys in a nested structure.
90
- * Returns a new object with all nested keys sorted, preserving the original object.
91
- *
92
- * @param obj - Object to sort recursively
93
- * @returns New object with all nested keys sorted
94
- */
95
- export function sortObjectKeysDeep(obj) {
96
- if (!obj) {
97
- return obj;
98
- }
99
- if (Array.isArray(obj)) {
100
- return obj.map((item) => sortObjectKeysDeep(item));
101
- }
102
- if (typeof obj === 'object') {
103
- const sortedObj = {};
104
- const keys = Object.keys(obj).sort((a, b) => a.localeCompare(b));
105
- for (const key of keys) {
106
- sortedObj[key] = sortObjectKeysDeep(obj[key]);
107
- }
108
- return sortedObj;
109
- }
110
- return obj;
111
- }
112
70
  /**
113
71
  * Sorts env and headers objects in a server configuration.
114
72
  * This is a convenience function for server template/instance configurations.
@@ -1,5 +1,5 @@
1
1
  import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
2
- import { logger, LOG_MODULES } from '../logger.js';
2
+ import { logger, LOG_MODULES } from '../logger/index.js';
3
3
  import { PassThrough } from 'stream';
4
4
  /**
5
5
  * A transport implementation for communicating with MCP (Model Context Protocol) servers
@@ -1,4 +1,4 @@
1
- import { logger, LOG_MODULES } from '../logger.js';
1
+ import { logger, LOG_MODULES } from '../logger/index.js';
2
2
  import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
3
3
  import { URL } from 'url';
4
4
  import { ProxyAgent, fetch as undiciFetch } from 'undici';
@@ -1 +1 @@
1
- {"version":3,"file":"transport-factory.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/transport-factory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAKtE;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CACpB,MAAM,EAAE,mBAAmB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAC9C,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,sBAAsB,CAAC;KACvC,GACA,OAAO,+CAA+C,EAAE,SAAS;IA4EpE;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAW7B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAW9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;CA8CxC"}
1
+ {"version":3,"file":"transport-factory.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/transport-factory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAMtE;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CACpB,MAAM,EAAE,mBAAmB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAC9C,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,sBAAsB,CAAC;KACvC,GACA,OAAO,+CAA+C,EAAE,SAAS;IA8FpE;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAW7B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAW9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;CA8CxC"}
@@ -1,8 +1,9 @@
1
1
  import { StdioTransport } from './stdio-transport.js';
2
- import { SseTransport } from './sse-transport.js';
2
+ import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
3
3
  import { StreamableHttpTransport } from './streamable-http-transport.js';
4
4
  import { logStorage } from '../../services/log-storage.service.js';
5
5
  import { McpOAuthClientProvider } from '../../services/mcp-oauth/index.js';
6
+ import { ProxyAgent, fetch as undiciFetch } from 'undici';
6
7
  import { createHash } from 'node:crypto';
7
8
  import path from 'node:path';
8
9
  import os from 'node:os';
@@ -39,11 +40,33 @@ export class TransportFactory {
39
40
  readyPatterns: options?.readyPatterns,
40
41
  readyTimeout: options?.readyTimeout ?? 120000
41
42
  });
42
- case 'sse':
43
+ case 'sse': {
43
44
  if (!config.url) {
44
45
  throw new Error('SSE transport requires a URL');
45
46
  }
46
- return new SseTransport(config.url, config.headers, config.reconnectInterval, config.maxReconnectAttempts, config.proxy, server.name, compositeKey);
47
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
+ const sseOpts = {};
49
+ // Headers shared between SSE GET (eventSourceInit) and POST (requestInit)
50
+ if (config.headers && Object.keys(config.headers).length > 0) {
51
+ sseOpts.requestInit = { headers: config.headers };
52
+ sseOpts.eventSourceInit = { headers: config.headers };
53
+ }
54
+ // OAuth provider
55
+ if (options?.authProvider) {
56
+ sseOpts.authProvider = options.authProvider;
57
+ }
58
+ // Proxy support via custom fetch
59
+ if (config.proxy?.url) {
60
+ const agent = new ProxyAgent(config.proxy.url);
61
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
62
+ sseOpts.fetch = (input, init) => {
63
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
+ const fetchOptions = { ...init, dispatcher: agent };
65
+ return undiciFetch(input, fetchOptions);
66
+ };
67
+ }
68
+ return new SSEClientTransport(new URL(config.url), sseOpts);
69
+ }
47
70
  case 'streamable-http':
48
71
  case 'http': {
49
72
  // Compatibility with http type, treat as streamable-http
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import { mcpConnectionManager } from '../../../src/services/mcp-connection-manager.js';
2
+ import { mcpConnectionManager } from '../../../src/services/connection/index.js';
3
3
  import { hubManager } from '../../../src/services/hub-manager.service.js';
4
4
  import { resolveInstanceConfig } from '../../../src/config/config-migrator.js';
5
5
  // Mock MCP SDK
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import { mcpConnectionManager } from '../../../src/services/mcp-connection-manager.js';
2
+ import { mcpConnectionManager } from '../../../src/services/connection/index.js';
3
3
  import { hubManager } from '../../../src/services/hub-manager.service.js';
4
4
  import { resolveInstanceConfig } from '../../../src/config/config-migrator.js';
5
5
  // Mock MCP SDK
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import { mcpConnectionManager } from '../../../src/services/mcp-connection-manager.js';
2
+ import { mcpConnectionManager } from '../../../src/services/connection/index.js';
3
3
  import { hubManager } from '../../../src/services/hub-manager.service.js';
4
4
  import { resolveInstanceConfig } from '../../../src/config/config-migrator.js';
5
5
  // Mock MCP SDK
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, vi } from 'vitest';
2
- import { mcpConnectionManager } from '../../../src/services/mcp-connection-manager.js';
2
+ import { mcpConnectionManager } from '../../../src/services/connection/index.js';
3
3
  import { hubManager } from '../../../src/services/hub-manager.service.js';
4
4
  import { configManager } from '../../../src/config/config-manager.js';
5
5
  import { resolveInstanceConfig } from '../../../src/config/config-migrator.js';
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import { mcpConnectionManager } from '../../../src/services/mcp-connection-manager.js';
2
+ import { mcpConnectionManager } from '../../../src/services/connection/index.js';
3
3
  import { hubManager } from '../../../src/services/hub-manager.service.js';
4
4
  import { configManager } from '../../../src/config/config-manager.js';
5
5
  import { resolveInstanceConfig } from '../../../src/config/config-migrator.js';
@@ -2,7 +2,7 @@
2
2
  * Logger test helper types for accessing private methods in tests
3
3
  */
4
4
  import type { LogLevel } from '../../shared/types/common.types.js';
5
- import type { LogContext } from '../../src/utils/logger.js';
5
+ import type { LogContext } from '../../src/utils/logger/index.js';
6
6
  import type { WriteStream } from 'node:fs';
7
7
  export interface LoggerWithPrivateMethods {
8
8
  shouldLog: (level: string) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"logger-test-helpers.d.ts","sourceRoot":"","sources":["../../../../tests/types/logger-test-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IACxC,cAAc,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,MAAM,CAAC;IAC5C,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,uBAAuB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC;IAC5F,gBAAgB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC;IACrF,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACxC,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC;CACnC"}
1
+ {"version":3,"file":"logger-test-helpers.d.ts","sourceRoot":"","sources":["../../../../tests/types/logger-test-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IACxC,cAAc,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,MAAM,CAAC;IAC5C,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,uBAAuB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC;IAC5F,gBAAgB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC;IACrF,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACxC,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC;CACnC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=search.test.d.ts.map