@ibm/ibmi-mcp-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (482) hide show
  1. package/README.md +88 -0
  2. package/dist/config/index.d.ts +100 -0
  3. package/dist/config/index.d.ts.map +1 -0
  4. package/dist/config/index.js +463 -0
  5. package/dist/config/index.js.map +1 -0
  6. package/dist/config/resolver.d.ts +32 -0
  7. package/dist/config/resolver.d.ts.map +1 -0
  8. package/dist/config/resolver.js +60 -0
  9. package/dist/config/resolver.js.map +1 -0
  10. package/dist/ibmi-mcp-server/auth/crypto.d.ts +11 -0
  11. package/dist/ibmi-mcp-server/auth/crypto.d.ts.map +1 -0
  12. package/dist/ibmi-mcp-server/auth/crypto.js +100 -0
  13. package/dist/ibmi-mcp-server/auth/crypto.js.map +1 -0
  14. package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.d.ts +28 -0
  15. package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.d.ts.map +1 -0
  16. package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.js +243 -0
  17. package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.js.map +1 -0
  18. package/dist/ibmi-mcp-server/auth/index.d.ts +9 -0
  19. package/dist/ibmi-mcp-server/auth/index.d.ts.map +1 -0
  20. package/dist/ibmi-mcp-server/auth/index.js +8 -0
  21. package/dist/ibmi-mcp-server/auth/index.js.map +1 -0
  22. package/dist/ibmi-mcp-server/auth/tokenManager.d.ts +86 -0
  23. package/dist/ibmi-mcp-server/auth/tokenManager.d.ts.map +1 -0
  24. package/dist/ibmi-mcp-server/auth/tokenManager.js +214 -0
  25. package/dist/ibmi-mcp-server/auth/tokenManager.js.map +1 -0
  26. package/dist/ibmi-mcp-server/auth/types.d.ts +31 -0
  27. package/dist/ibmi-mcp-server/auth/types.d.ts.map +1 -0
  28. package/dist/ibmi-mcp-server/auth/types.js +5 -0
  29. package/dist/ibmi-mcp-server/auth/types.js.map +1 -0
  30. package/dist/ibmi-mcp-server/index.d.ts +8 -0
  31. package/dist/ibmi-mcp-server/index.d.ts.map +1 -0
  32. package/dist/ibmi-mcp-server/index.js +126 -0
  33. package/dist/ibmi-mcp-server/index.js.map +1 -0
  34. package/dist/ibmi-mcp-server/resources/toolsetsResource/index.d.ts +7 -0
  35. package/dist/ibmi-mcp-server/resources/toolsetsResource/index.d.ts.map +1 -0
  36. package/dist/ibmi-mcp-server/resources/toolsetsResource/index.js +7 -0
  37. package/dist/ibmi-mcp-server/resources/toolsetsResource/index.js.map +1 -0
  38. package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.d.ts +106 -0
  39. package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.d.ts.map +1 -0
  40. package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.js +145 -0
  41. package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.js.map +1 -0
  42. package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.d.ts +16 -0
  43. package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.d.ts.map +1 -0
  44. package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.js +110 -0
  45. package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.js.map +1 -0
  46. package/dist/ibmi-mcp-server/schemas/common.d.ts +174 -0
  47. package/dist/ibmi-mcp-server/schemas/common.d.ts.map +1 -0
  48. package/dist/ibmi-mcp-server/schemas/common.js +119 -0
  49. package/dist/ibmi-mcp-server/schemas/common.js.map +1 -0
  50. package/dist/ibmi-mcp-server/schemas/config.d.ts +858 -0
  51. package/dist/ibmi-mcp-server/schemas/config.d.ts.map +1 -0
  52. package/dist/ibmi-mcp-server/schemas/config.js +248 -0
  53. package/dist/ibmi-mcp-server/schemas/config.js.map +1 -0
  54. package/dist/ibmi-mcp-server/schemas/index.d.ts +12 -0
  55. package/dist/ibmi-mcp-server/schemas/index.d.ts.map +1 -0
  56. package/dist/ibmi-mcp-server/schemas/index.js +20 -0
  57. package/dist/ibmi-mcp-server/schemas/index.js.map +1 -0
  58. package/dist/ibmi-mcp-server/schemas/tools.d.ts +287 -0
  59. package/dist/ibmi-mcp-server/schemas/tools.d.ts.map +1 -0
  60. package/dist/ibmi-mcp-server/schemas/tools.js +167 -0
  61. package/dist/ibmi-mcp-server/schemas/tools.js.map +1 -0
  62. package/dist/ibmi-mcp-server/services/authenticatedPoolManager.d.ts +82 -0
  63. package/dist/ibmi-mcp-server/services/authenticatedPoolManager.d.ts.map +1 -0
  64. package/dist/ibmi-mcp-server/services/authenticatedPoolManager.js +262 -0
  65. package/dist/ibmi-mcp-server/services/authenticatedPoolManager.js.map +1 -0
  66. package/dist/ibmi-mcp-server/services/baseConnectionPool.d.ts +130 -0
  67. package/dist/ibmi-mcp-server/services/baseConnectionPool.d.ts.map +1 -0
  68. package/dist/ibmi-mcp-server/services/baseConnectionPool.js +431 -0
  69. package/dist/ibmi-mcp-server/services/baseConnectionPool.js.map +1 -0
  70. package/dist/ibmi-mcp-server/services/connectionPool.d.ts +60 -0
  71. package/dist/ibmi-mcp-server/services/connectionPool.d.ts.map +1 -0
  72. package/dist/ibmi-mcp-server/services/connectionPool.js +153 -0
  73. package/dist/ibmi-mcp-server/services/connectionPool.js.map +1 -0
  74. package/dist/ibmi-mcp-server/services/securityValidation.d.ts +35 -0
  75. package/dist/ibmi-mcp-server/services/securityValidation.d.ts.map +1 -0
  76. package/dist/ibmi-mcp-server/services/securityValidation.js +93 -0
  77. package/dist/ibmi-mcp-server/services/securityValidation.js.map +1 -0
  78. package/dist/ibmi-mcp-server/services/sourceManager.d.ts +82 -0
  79. package/dist/ibmi-mcp-server/services/sourceManager.d.ts.map +1 -0
  80. package/dist/ibmi-mcp-server/services/sourceManager.js +151 -0
  81. package/dist/ibmi-mcp-server/services/sourceManager.js.map +1 -0
  82. package/dist/ibmi-mcp-server/tools/executeSql/index.d.ts +9 -0
  83. package/dist/ibmi-mcp-server/tools/executeSql/index.d.ts.map +1 -0
  84. package/dist/ibmi-mcp-server/tools/executeSql/index.js +9 -0
  85. package/dist/ibmi-mcp-server/tools/executeSql/index.js.map +1 -0
  86. package/dist/ibmi-mcp-server/tools/executeSql/logic.d.ts +51 -0
  87. package/dist/ibmi-mcp-server/tools/executeSql/logic.d.ts.map +1 -0
  88. package/dist/ibmi-mcp-server/tools/executeSql/logic.js +179 -0
  89. package/dist/ibmi-mcp-server/tools/executeSql/logic.js.map +1 -0
  90. package/dist/ibmi-mcp-server/tools/executeSql/registration.d.ts +52 -0
  91. package/dist/ibmi-mcp-server/tools/executeSql/registration.d.ts.map +1 -0
  92. package/dist/ibmi-mcp-server/tools/executeSql/registration.js +161 -0
  93. package/dist/ibmi-mcp-server/tools/executeSql/registration.js.map +1 -0
  94. package/dist/ibmi-mcp-server/tools/generateSql/index.d.ts +13 -0
  95. package/dist/ibmi-mcp-server/tools/generateSql/index.d.ts.map +1 -0
  96. package/dist/ibmi-mcp-server/tools/generateSql/index.js +13 -0
  97. package/dist/ibmi-mcp-server/tools/generateSql/index.js.map +1 -0
  98. package/dist/ibmi-mcp-server/tools/generateSql/logic.d.ts +64 -0
  99. package/dist/ibmi-mcp-server/tools/generateSql/logic.d.ts.map +1 -0
  100. package/dist/ibmi-mcp-server/tools/generateSql/logic.js +190 -0
  101. package/dist/ibmi-mcp-server/tools/generateSql/logic.js.map +1 -0
  102. package/dist/ibmi-mcp-server/tools/generateSql/registration.d.ts +18 -0
  103. package/dist/ibmi-mcp-server/tools/generateSql/registration.d.ts.map +1 -0
  104. package/dist/ibmi-mcp-server/tools/generateSql/registration.js +64 -0
  105. package/dist/ibmi-mcp-server/tools/generateSql/registration.js.map +1 -0
  106. package/dist/ibmi-mcp-server/utils/cli/argumentParser.d.ts +42 -0
  107. package/dist/ibmi-mcp-server/utils/cli/argumentParser.d.ts.map +1 -0
  108. package/dist/ibmi-mcp-server/utils/cli/argumentParser.js +156 -0
  109. package/dist/ibmi-mcp-server/utils/cli/argumentParser.js.map +1 -0
  110. package/dist/ibmi-mcp-server/utils/cli/index.d.ts +6 -0
  111. package/dist/ibmi-mcp-server/utils/cli/index.d.ts.map +1 -0
  112. package/dist/ibmi-mcp-server/utils/cli/index.js +6 -0
  113. package/dist/ibmi-mcp-server/utils/cli/index.js.map +1 -0
  114. package/dist/ibmi-mcp-server/utils/config/configParser.d.ts +77 -0
  115. package/dist/ibmi-mcp-server/utils/config/configParser.d.ts.map +1 -0
  116. package/dist/ibmi-mcp-server/utils/config/configParser.js +309 -0
  117. package/dist/ibmi-mcp-server/utils/config/configParser.js.map +1 -0
  118. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.d.ts +143 -0
  119. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.d.ts.map +1 -0
  120. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js +665 -0
  121. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js.map +1 -0
  122. package/dist/ibmi-mcp-server/utils/config/toolConfigCache.d.ts +71 -0
  123. package/dist/ibmi-mcp-server/utils/config/toolConfigCache.d.ts.map +1 -0
  124. package/dist/ibmi-mcp-server/utils/config/toolConfigCache.js +158 -0
  125. package/dist/ibmi-mcp-server/utils/config/toolConfigCache.js.map +1 -0
  126. package/dist/ibmi-mcp-server/utils/config/toolDefinitions.d.ts +206 -0
  127. package/dist/ibmi-mcp-server/utils/config/toolDefinitions.d.ts.map +1 -0
  128. package/dist/ibmi-mcp-server/utils/config/toolDefinitions.js +236 -0
  129. package/dist/ibmi-mcp-server/utils/config/toolDefinitions.js.map +1 -0
  130. package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts +65 -0
  131. package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts.map +1 -0
  132. package/dist/ibmi-mcp-server/utils/config/toolFactory.js +236 -0
  133. package/dist/ibmi-mcp-server/utils/config/toolFactory.js.map +1 -0
  134. package/dist/ibmi-mcp-server/utils/config/toolProcessor.d.ts +175 -0
  135. package/dist/ibmi-mcp-server/utils/config/toolProcessor.d.ts.map +1 -0
  136. package/dist/ibmi-mcp-server/utils/config/toolProcessor.js +460 -0
  137. package/dist/ibmi-mcp-server/utils/config/toolProcessor.js.map +1 -0
  138. package/dist/ibmi-mcp-server/utils/config/toolsetManager.d.ts +126 -0
  139. package/dist/ibmi-mcp-server/utils/config/toolsetManager.d.ts.map +1 -0
  140. package/dist/ibmi-mcp-server/utils/config/toolsetManager.js +240 -0
  141. package/dist/ibmi-mcp-server/utils/config/toolsetManager.js.map +1 -0
  142. package/dist/ibmi-mcp-server/utils/config/types.d.ts +74 -0
  143. package/dist/ibmi-mcp-server/utils/config/types.d.ts.map +1 -0
  144. package/dist/ibmi-mcp-server/utils/config/types.js +8 -0
  145. package/dist/ibmi-mcp-server/utils/config/types.js.map +1 -0
  146. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.d.ts +116 -0
  147. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.d.ts.map +1 -0
  148. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js +426 -0
  149. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js.map +1 -0
  150. package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.d.ts +182 -0
  151. package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.d.ts.map +1 -0
  152. package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.js +726 -0
  153. package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.js.map +1 -0
  154. package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.d.ts +90 -0
  155. package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.d.ts.map +1 -0
  156. package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.js +187 -0
  157. package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.js.map +1 -0
  158. package/dist/index.d.ts +10 -0
  159. package/dist/index.d.ts.map +1 -0
  160. package/dist/index.js +270 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/mcp-server/constants.d.ts +13 -0
  163. package/dist/mcp-server/constants.d.ts.map +1 -0
  164. package/dist/mcp-server/constants.js +13 -0
  165. package/dist/mcp-server/constants.js.map +1 -0
  166. package/dist/mcp-server/logging/index.d.ts +8 -0
  167. package/dist/mcp-server/logging/index.d.ts.map +1 -0
  168. package/dist/mcp-server/logging/index.js +8 -0
  169. package/dist/mcp-server/logging/index.js.map +1 -0
  170. package/dist/mcp-server/logging/setLevelHandler.d.ts +38 -0
  171. package/dist/mcp-server/logging/setLevelHandler.d.ts.map +1 -0
  172. package/dist/mcp-server/logging/setLevelHandler.js +83 -0
  173. package/dist/mcp-server/logging/setLevelHandler.js.map +1 -0
  174. package/dist/mcp-server/resources/echoResource/index.d.ts +14 -0
  175. package/dist/mcp-server/resources/echoResource/index.d.ts.map +1 -0
  176. package/dist/mcp-server/resources/echoResource/index.js +14 -0
  177. package/dist/mcp-server/resources/echoResource/index.js.map +1 -0
  178. package/dist/mcp-server/resources/echoResource/logic.d.ts +37 -0
  179. package/dist/mcp-server/resources/echoResource/logic.d.ts.map +1 -0
  180. package/dist/mcp-server/resources/echoResource/logic.js +46 -0
  181. package/dist/mcp-server/resources/echoResource/logic.js.map +1 -0
  182. package/dist/mcp-server/resources/echoResource/registration.d.ts +7 -0
  183. package/dist/mcp-server/resources/echoResource/registration.d.ts.map +1 -0
  184. package/dist/mcp-server/resources/echoResource/registration.js +51 -0
  185. package/dist/mcp-server/resources/echoResource/registration.js.map +1 -0
  186. package/dist/mcp-server/resources/index.d.ts +10 -0
  187. package/dist/mcp-server/resources/index.d.ts.map +1 -0
  188. package/dist/mcp-server/resources/index.js +19 -0
  189. package/dist/mcp-server/resources/index.js.map +1 -0
  190. package/dist/mcp-server/resources/utils/resource-utils.d.ts +43 -0
  191. package/dist/mcp-server/resources/utils/resource-utils.d.ts.map +1 -0
  192. package/dist/mcp-server/resources/utils/resource-utils.js +44 -0
  193. package/dist/mcp-server/resources/utils/resource-utils.js.map +1 -0
  194. package/dist/mcp-server/server.d.ts +23 -0
  195. package/dist/mcp-server/server.d.ts.map +1 -0
  196. package/dist/mcp-server/server.js +114 -0
  197. package/dist/mcp-server/server.js.map +1 -0
  198. package/dist/mcp-server/tools/catFactFetcher/index.d.ts +8 -0
  199. package/dist/mcp-server/tools/catFactFetcher/index.d.ts.map +1 -0
  200. package/dist/mcp-server/tools/catFactFetcher/index.js +8 -0
  201. package/dist/mcp-server/tools/catFactFetcher/index.js.map +1 -0
  202. package/dist/mcp-server/tools/catFactFetcher/logic.d.ts +52 -0
  203. package/dist/mcp-server/tools/catFactFetcher/logic.d.ts.map +1 -0
  204. package/dist/mcp-server/tools/catFactFetcher/logic.js +95 -0
  205. package/dist/mcp-server/tools/catFactFetcher/logic.js.map +1 -0
  206. package/dist/mcp-server/tools/catFactFetcher/registration.d.ts +9 -0
  207. package/dist/mcp-server/tools/catFactFetcher/registration.d.ts.map +1 -0
  208. package/dist/mcp-server/tools/catFactFetcher/registration.js +43 -0
  209. package/dist/mcp-server/tools/catFactFetcher/registration.js.map +1 -0
  210. package/dist/mcp-server/tools/echoTool/index.d.ts +13 -0
  211. package/dist/mcp-server/tools/echoTool/index.d.ts.map +1 -0
  212. package/dist/mcp-server/tools/echoTool/index.js +13 -0
  213. package/dist/mcp-server/tools/echoTool/index.js.map +1 -0
  214. package/dist/mcp-server/tools/echoTool/logic.d.ts +69 -0
  215. package/dist/mcp-server/tools/echoTool/logic.d.ts.map +1 -0
  216. package/dist/mcp-server/tools/echoTool/logic.js +119 -0
  217. package/dist/mcp-server/tools/echoTool/logic.js.map +1 -0
  218. package/dist/mcp-server/tools/echoTool/registration.d.ts +9 -0
  219. package/dist/mcp-server/tools/echoTool/registration.d.ts.map +1 -0
  220. package/dist/mcp-server/tools/echoTool/registration.js +45 -0
  221. package/dist/mcp-server/tools/echoTool/registration.js.map +1 -0
  222. package/dist/mcp-server/tools/imageTest/index.d.ts +7 -0
  223. package/dist/mcp-server/tools/imageTest/index.d.ts.map +1 -0
  224. package/dist/mcp-server/tools/imageTest/index.js +7 -0
  225. package/dist/mcp-server/tools/imageTest/index.js.map +1 -0
  226. package/dist/mcp-server/tools/imageTest/logic.d.ts +27 -0
  227. package/dist/mcp-server/tools/imageTest/logic.d.ts.map +1 -0
  228. package/dist/mcp-server/tools/imageTest/logic.js +44 -0
  229. package/dist/mcp-server/tools/imageTest/logic.js.map +1 -0
  230. package/dist/mcp-server/tools/imageTest/registration.d.ts +9 -0
  231. package/dist/mcp-server/tools/imageTest/registration.d.ts.map +1 -0
  232. package/dist/mcp-server/tools/imageTest/registration.js +49 -0
  233. package/dist/mcp-server/tools/imageTest/registration.js.map +1 -0
  234. package/dist/mcp-server/tools/index.d.ts +4 -0
  235. package/dist/mcp-server/tools/index.d.ts.map +1 -0
  236. package/dist/mcp-server/tools/index.js +13 -0
  237. package/dist/mcp-server/tools/index.js.map +1 -0
  238. package/dist/mcp-server/tools/utils/tool-utils.d.ts +43 -0
  239. package/dist/mcp-server/tools/utils/tool-utils.d.ts.map +1 -0
  240. package/dist/mcp-server/tools/utils/tool-utils.js +44 -0
  241. package/dist/mcp-server/tools/utils/tool-utils.js.map +1 -0
  242. package/dist/mcp-server/transports/auth/authFactory.d.ts +11 -0
  243. package/dist/mcp-server/transports/auth/authFactory.d.ts.map +1 -0
  244. package/dist/mcp-server/transports/auth/authFactory.js +46 -0
  245. package/dist/mcp-server/transports/auth/authFactory.js.map +1 -0
  246. package/dist/mcp-server/transports/auth/authMiddleware.d.ts +20 -0
  247. package/dist/mcp-server/transports/auth/authMiddleware.d.ts.map +1 -0
  248. package/dist/mcp-server/transports/auth/authMiddleware.js +58 -0
  249. package/dist/mcp-server/transports/auth/authMiddleware.js.map +1 -0
  250. package/dist/mcp-server/transports/auth/index.d.ts +14 -0
  251. package/dist/mcp-server/transports/auth/index.d.ts.map +1 -0
  252. package/dist/mcp-server/transports/auth/index.js +12 -0
  253. package/dist/mcp-server/transports/auth/index.js.map +1 -0
  254. package/dist/mcp-server/transports/auth/lib/authContext.d.ts +34 -0
  255. package/dist/mcp-server/transports/auth/lib/authContext.d.ts.map +1 -0
  256. package/dist/mcp-server/transports/auth/lib/authContext.js +25 -0
  257. package/dist/mcp-server/transports/auth/lib/authContext.js.map +1 -0
  258. package/dist/mcp-server/transports/auth/lib/authTypes.d.ts +15 -0
  259. package/dist/mcp-server/transports/auth/lib/authTypes.d.ts.map +1 -0
  260. package/dist/mcp-server/transports/auth/lib/authTypes.js +9 -0
  261. package/dist/mcp-server/transports/auth/lib/authTypes.js.map +1 -0
  262. package/dist/mcp-server/transports/auth/lib/authUtils.d.ts +19 -0
  263. package/dist/mcp-server/transports/auth/lib/authUtils.d.ts.map +1 -0
  264. package/dist/mcp-server/transports/auth/lib/authUtils.js +53 -0
  265. package/dist/mcp-server/transports/auth/lib/authUtils.js.map +1 -0
  266. package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts +18 -0
  267. package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts.map +1 -0
  268. package/dist/mcp-server/transports/auth/strategies/authStrategy.js +2 -0
  269. package/dist/mcp-server/transports/auth/strategies/authStrategy.js.map +1 -0
  270. package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.d.ts +21 -0
  271. package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.d.ts.map +1 -0
  272. package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.js +64 -0
  273. package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.js.map +1 -0
  274. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts +8 -0
  275. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts.map +1 -0
  276. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js +118 -0
  277. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js.map +1 -0
  278. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts +8 -0
  279. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts.map +1 -0
  280. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js +118 -0
  281. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js.map +1 -0
  282. package/dist/mcp-server/transports/core/autoTransportManager.d.ts +48 -0
  283. package/dist/mcp-server/transports/core/autoTransportManager.d.ts.map +1 -0
  284. package/dist/mcp-server/transports/core/autoTransportManager.js +57 -0
  285. package/dist/mcp-server/transports/core/autoTransportManager.js.map +1 -0
  286. package/dist/mcp-server/transports/core/baseTransportManager.d.ts +17 -0
  287. package/dist/mcp-server/transports/core/baseTransportManager.d.ts.map +1 -0
  288. package/dist/mcp-server/transports/core/baseTransportManager.js +20 -0
  289. package/dist/mcp-server/transports/core/baseTransportManager.js.map +1 -0
  290. package/dist/mcp-server/transports/core/headerUtils.d.ts +27 -0
  291. package/dist/mcp-server/transports/core/headerUtils.d.ts.map +1 -0
  292. package/dist/mcp-server/transports/core/headerUtils.js +53 -0
  293. package/dist/mcp-server/transports/core/headerUtils.js.map +1 -0
  294. package/dist/mcp-server/transports/core/honoNodeBridge.d.ts +77 -0
  295. package/dist/mcp-server/transports/core/honoNodeBridge.d.ts.map +1 -0
  296. package/dist/mcp-server/transports/core/honoNodeBridge.js +150 -0
  297. package/dist/mcp-server/transports/core/honoNodeBridge.js.map +1 -0
  298. package/dist/mcp-server/transports/core/statefulTransportManager.d.ts +81 -0
  299. package/dist/mcp-server/transports/core/statefulTransportManager.d.ts.map +1 -0
  300. package/dist/mcp-server/transports/core/statefulTransportManager.js +326 -0
  301. package/dist/mcp-server/transports/core/statefulTransportManager.js.map +1 -0
  302. package/dist/mcp-server/transports/core/statelessTransportManager.d.ts +57 -0
  303. package/dist/mcp-server/transports/core/statelessTransportManager.d.ts.map +1 -0
  304. package/dist/mcp-server/transports/core/statelessTransportManager.js +151 -0
  305. package/dist/mcp-server/transports/core/statelessTransportManager.js.map +1 -0
  306. package/dist/mcp-server/transports/core/transportRequest.d.ts +9 -0
  307. package/dist/mcp-server/transports/core/transportRequest.d.ts.map +1 -0
  308. package/dist/mcp-server/transports/core/transportRequest.js +2 -0
  309. package/dist/mcp-server/transports/core/transportRequest.js.map +1 -0
  310. package/dist/mcp-server/transports/core/transportTypes.d.ts +112 -0
  311. package/dist/mcp-server/transports/core/transportTypes.d.ts.map +1 -0
  312. package/dist/mcp-server/transports/core/transportTypes.js +15 -0
  313. package/dist/mcp-server/transports/core/transportTypes.js.map +1 -0
  314. package/dist/mcp-server/transports/http/httpErrorHandler.d.ts +25 -0
  315. package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -0
  316. package/dist/mcp-server/transports/http/httpErrorHandler.js +86 -0
  317. package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -0
  318. package/dist/mcp-server/transports/http/httpTransport.d.ts +27 -0
  319. package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -0
  320. package/dist/mcp-server/transports/http/httpTransport.js +407 -0
  321. package/dist/mcp-server/transports/http/httpTransport.js.map +1 -0
  322. package/dist/mcp-server/transports/http/httpTypes.d.ts +17 -0
  323. package/dist/mcp-server/transports/http/httpTypes.d.ts.map +1 -0
  324. package/dist/mcp-server/transports/http/httpTypes.js +6 -0
  325. package/dist/mcp-server/transports/http/httpTypes.js.map +1 -0
  326. package/dist/mcp-server/transports/http/index.d.ts +8 -0
  327. package/dist/mcp-server/transports/http/index.d.ts.map +1 -0
  328. package/dist/mcp-server/transports/http/index.js +7 -0
  329. package/dist/mcp-server/transports/http/index.js.map +1 -0
  330. package/dist/mcp-server/transports/http/mcpTransportMiddleware.d.ts +21 -0
  331. package/dist/mcp-server/transports/http/mcpTransportMiddleware.d.ts.map +1 -0
  332. package/dist/mcp-server/transports/http/mcpTransportMiddleware.js +54 -0
  333. package/dist/mcp-server/transports/http/mcpTransportMiddleware.js.map +1 -0
  334. package/dist/mcp-server/transports/stdio/index.d.ts +6 -0
  335. package/dist/mcp-server/transports/stdio/index.d.ts.map +1 -0
  336. package/dist/mcp-server/transports/stdio/index.js +6 -0
  337. package/dist/mcp-server/transports/stdio/index.js.map +1 -0
  338. package/dist/mcp-server/transports/stdio/stdioTransport.d.ts +43 -0
  339. package/dist/mcp-server/transports/stdio/stdioTransport.d.ts.map +1 -0
  340. package/dist/mcp-server/transports/stdio/stdioTransport.js +71 -0
  341. package/dist/mcp-server/transports/stdio/stdioTransport.js.map +1 -0
  342. package/dist/services/duck-db/duckDBConnectionManager.d.ts +55 -0
  343. package/dist/services/duck-db/duckDBConnectionManager.d.ts.map +1 -0
  344. package/dist/services/duck-db/duckDBConnectionManager.js +184 -0
  345. package/dist/services/duck-db/duckDBConnectionManager.js.map +1 -0
  346. package/dist/services/duck-db/duckDBQueryExecutor.d.ts +18 -0
  347. package/dist/services/duck-db/duckDBQueryExecutor.d.ts.map +1 -0
  348. package/dist/services/duck-db/duckDBQueryExecutor.js +115 -0
  349. package/dist/services/duck-db/duckDBQueryExecutor.js.map +1 -0
  350. package/dist/services/duck-db/duckDBService.d.ts +27 -0
  351. package/dist/services/duck-db/duckDBService.d.ts.map +1 -0
  352. package/dist/services/duck-db/duckDBService.js +151 -0
  353. package/dist/services/duck-db/duckDBService.js.map +1 -0
  354. package/dist/services/duck-db/types.d.ts +135 -0
  355. package/dist/services/duck-db/types.d.ts.map +1 -0
  356. package/dist/services/duck-db/types.js +6 -0
  357. package/dist/services/duck-db/types.js.map +1 -0
  358. package/dist/services/llm-providers/openRouterProvider.d.ts +36 -0
  359. package/dist/services/llm-providers/openRouterProvider.d.ts.map +1 -0
  360. package/dist/services/llm-providers/openRouterProvider.js +235 -0
  361. package/dist/services/llm-providers/openRouterProvider.js.map +1 -0
  362. package/dist/services/supabase/supabaseClient.d.ts +25 -0
  363. package/dist/services/supabase/supabaseClient.d.ts.map +1 -0
  364. package/dist/services/supabase/supabaseClient.js +68 -0
  365. package/dist/services/supabase/supabaseClient.js.map +1 -0
  366. package/dist/storage/duckdbExample.d.ts +8 -0
  367. package/dist/storage/duckdbExample.d.ts.map +1 -0
  368. package/dist/storage/duckdbExample.js +197 -0
  369. package/dist/storage/duckdbExample.js.map +1 -0
  370. package/dist/types-global/errors.d.ts +101 -0
  371. package/dist/types-global/errors.d.ts.map +1 -0
  372. package/dist/types-global/errors.js +109 -0
  373. package/dist/types-global/errors.js.map +1 -0
  374. package/dist/utils/formatting/index.d.ts +10 -0
  375. package/dist/utils/formatting/index.d.ts.map +1 -0
  376. package/dist/utils/formatting/index.js +10 -0
  377. package/dist/utils/formatting/index.js.map +1 -0
  378. package/dist/utils/formatting/markdownBuilder.d.ts +348 -0
  379. package/dist/utils/formatting/markdownBuilder.d.ts.map +1 -0
  380. package/dist/utils/formatting/markdownBuilder.js +501 -0
  381. package/dist/utils/formatting/markdownBuilder.js.map +1 -0
  382. package/dist/utils/formatting/sqlFormattingUtils.d.ts +69 -0
  383. package/dist/utils/formatting/sqlFormattingUtils.d.ts.map +1 -0
  384. package/dist/utils/formatting/sqlFormattingUtils.js +131 -0
  385. package/dist/utils/formatting/sqlFormattingUtils.js.map +1 -0
  386. package/dist/utils/formatting/tableFormatter.d.ts +268 -0
  387. package/dist/utils/formatting/tableFormatter.d.ts.map +1 -0
  388. package/dist/utils/formatting/tableFormatter.js +550 -0
  389. package/dist/utils/formatting/tableFormatter.js.map +1 -0
  390. package/dist/utils/index.d.ts +13 -0
  391. package/dist/utils/index.d.ts.map +1 -0
  392. package/dist/utils/index.js +21 -0
  393. package/dist/utils/index.js.map +1 -0
  394. package/dist/utils/internal/asyncContext.d.ts +35 -0
  395. package/dist/utils/internal/asyncContext.d.ts.map +1 -0
  396. package/dist/utils/internal/asyncContext.js +38 -0
  397. package/dist/utils/internal/asyncContext.js.map +1 -0
  398. package/dist/utils/internal/errorHandler.d.ts +95 -0
  399. package/dist/utils/internal/errorHandler.d.ts.map +1 -0
  400. package/dist/utils/internal/errorHandler.js +210 -0
  401. package/dist/utils/internal/errorHandler.js.map +1 -0
  402. package/dist/utils/internal/index.d.ts +12 -0
  403. package/dist/utils/internal/index.d.ts.map +1 -0
  404. package/dist/utils/internal/index.js +12 -0
  405. package/dist/utils/internal/index.js.map +1 -0
  406. package/dist/utils/internal/logger.d.ts +30 -0
  407. package/dist/utils/internal/logger.d.ts.map +1 -0
  408. package/dist/utils/internal/logger.js +228 -0
  409. package/dist/utils/internal/logger.js.map +1 -0
  410. package/dist/utils/internal/logging-helpers.d.ts +49 -0
  411. package/dist/utils/internal/logging-helpers.d.ts.map +1 -0
  412. package/dist/utils/internal/logging-helpers.js +60 -0
  413. package/dist/utils/internal/logging-helpers.js.map +1 -0
  414. package/dist/utils/internal/performance.d.ts +19 -0
  415. package/dist/utils/internal/performance.d.ts.map +1 -0
  416. package/dist/utils/internal/performance.js +110 -0
  417. package/dist/utils/internal/performance.js.map +1 -0
  418. package/dist/utils/internal/requestContext.d.ts +41 -0
  419. package/dist/utils/internal/requestContext.d.ts.map +1 -0
  420. package/dist/utils/internal/requestContext.js +47 -0
  421. package/dist/utils/internal/requestContext.js.map +1 -0
  422. package/dist/utils/metrics/index.d.ts +8 -0
  423. package/dist/utils/metrics/index.d.ts.map +1 -0
  424. package/dist/utils/metrics/index.js +8 -0
  425. package/dist/utils/metrics/index.js.map +1 -0
  426. package/dist/utils/metrics/tokenCounter.d.ts +36 -0
  427. package/dist/utils/metrics/tokenCounter.d.ts.map +1 -0
  428. package/dist/utils/metrics/tokenCounter.js +115 -0
  429. package/dist/utils/metrics/tokenCounter.js.map +1 -0
  430. package/dist/utils/network/fetchWithTimeout.d.ts +22 -0
  431. package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -0
  432. package/dist/utils/network/fetchWithTimeout.js +78 -0
  433. package/dist/utils/network/fetchWithTimeout.js.map +1 -0
  434. package/dist/utils/network/index.d.ts +7 -0
  435. package/dist/utils/network/index.d.ts.map +1 -0
  436. package/dist/utils/network/index.js +6 -0
  437. package/dist/utils/network/index.js.map +1 -0
  438. package/dist/utils/parsing/dateParser.d.ts +73 -0
  439. package/dist/utils/parsing/dateParser.d.ts.map +1 -0
  440. package/dist/utils/parsing/dateParser.js +108 -0
  441. package/dist/utils/parsing/dateParser.js.map +1 -0
  442. package/dist/utils/parsing/index.d.ts +9 -0
  443. package/dist/utils/parsing/index.d.ts.map +1 -0
  444. package/dist/utils/parsing/index.js +9 -0
  445. package/dist/utils/parsing/index.js.map +1 -0
  446. package/dist/utils/parsing/jsonParser.d.ts +83 -0
  447. package/dist/utils/parsing/jsonParser.d.ts.map +1 -0
  448. package/dist/utils/parsing/jsonParser.js +128 -0
  449. package/dist/utils/parsing/jsonParser.js.map +1 -0
  450. package/dist/utils/scheduling/index.d.ts +7 -0
  451. package/dist/utils/scheduling/index.d.ts.map +1 -0
  452. package/dist/utils/scheduling/index.js +7 -0
  453. package/dist/utils/scheduling/index.js.map +1 -0
  454. package/dist/utils/scheduling/scheduler.d.ts +73 -0
  455. package/dist/utils/scheduling/scheduler.d.ts.map +1 -0
  456. package/dist/utils/scheduling/scheduler.js +155 -0
  457. package/dist/utils/scheduling/scheduler.js.map +1 -0
  458. package/dist/utils/security/idGenerator.d.ts +144 -0
  459. package/dist/utils/security/idGenerator.d.ts.map +1 -0
  460. package/dist/utils/security/idGenerator.js +232 -0
  461. package/dist/utils/security/idGenerator.js.map +1 -0
  462. package/dist/utils/security/index.d.ts +10 -0
  463. package/dist/utils/security/index.d.ts.map +1 -0
  464. package/dist/utils/security/index.js +10 -0
  465. package/dist/utils/security/index.js.map +1 -0
  466. package/dist/utils/security/rateLimiter.d.ts +109 -0
  467. package/dist/utils/security/rateLimiter.d.ts.map +1 -0
  468. package/dist/utils/security/rateLimiter.js +202 -0
  469. package/dist/utils/security/rateLimiter.js.map +1 -0
  470. package/dist/utils/security/sanitization.d.ts +185 -0
  471. package/dist/utils/security/sanitization.d.ts.map +1 -0
  472. package/dist/utils/security/sanitization.js +472 -0
  473. package/dist/utils/security/sanitization.js.map +1 -0
  474. package/dist/utils/telemetry/instrumentation.d.ts +8 -0
  475. package/dist/utils/telemetry/instrumentation.d.ts.map +1 -0
  476. package/dist/utils/telemetry/instrumentation.js +121 -0
  477. package/dist/utils/telemetry/instrumentation.js.map +1 -0
  478. package/dist/utils/telemetry/semconv.d.ts +16 -0
  479. package/dist/utils/telemetry/semconv.d.ts.map +1 -0
  480. package/dist/utils/telemetry/semconv.js +16 -0
  481. package/dist/utils/telemetry/semconv.js.map +1 -0
  482. package/package.json +161 -0
@@ -0,0 +1,665 @@
1
+ /**
2
+ * @fileoverview Tool Configuration Builder - Standardized tool configuration creation
3
+ * Unifies all tool configuration creation logic into a single, consistent class
4
+ * Eliminates duplicate logic between cached and regular tool creation paths
5
+ *
6
+ * @module src/ibmi-mcp-server/utils/yaml/toolConfigBuilder
7
+ */
8
+ import { z } from "zod";
9
+ import { resolve, join } from "path";
10
+ import { existsSync } from "fs";
11
+ import { glob } from "glob";
12
+ import { ConfigParser } from "./configParser.js";
13
+ import { ErrorHandler, logger } from "../../../utils/internal/index.js";
14
+ import { requestContextService, } from "../../../utils/internal/requestContext.js";
15
+ import { JsonRpcErrorCode, McpError } from "../../../types-global/errors.js";
16
+ import { SQLToolFactory } from "./toolFactory.js";
17
+ import { sqlResponseFormatter, defaultResponseFormatter, standardSqlToolOutputSchema, } from "./toolDefinitions.js";
18
+ import { config } from "../../../config/index.js";
19
+ /**
20
+ * Tool Configuration Builder
21
+ * Standardized tool configuration creation with consistent error handling,
22
+ * schema generation, and handler creation logic
23
+ */
24
+ export class ToolConfigBuilder {
25
+ static instance;
26
+ /**
27
+ * Get the singleton instance
28
+ */
29
+ static getInstance() {
30
+ if (!ToolConfigBuilder.instance) {
31
+ ToolConfigBuilder.instance = new ToolConfigBuilder();
32
+ }
33
+ return ToolConfigBuilder.instance;
34
+ }
35
+ /**
36
+ * Generate a Zod schema from SQL parameter definitions
37
+ * @param parameters - SQL parameter definitions (using standardized types)
38
+ * @param toolName - Tool name for error reporting
39
+ * @returns Generated Zod schema
40
+ */
41
+ generateZodSchema(parameters, toolName) {
42
+ const schemaShape = {};
43
+ // Process parameters
44
+ for (const param of parameters) {
45
+ let zodType;
46
+ // Generate Zod type based on parameter type
47
+ switch (param.type) {
48
+ case "string": {
49
+ let stringType = z.string();
50
+ // Apply string-specific constraints using native Zod methods
51
+ if (param.minLength !== undefined) {
52
+ stringType = stringType.min(param.minLength, `Length must be >= ${param.minLength}`);
53
+ }
54
+ if (param.maxLength !== undefined) {
55
+ stringType = stringType.max(param.maxLength, `Length must be <= ${param.maxLength}`);
56
+ }
57
+ if (param.pattern) {
58
+ stringType = stringType.regex(new RegExp(param.pattern), `Value does not match pattern: ${param.pattern}`);
59
+ }
60
+ zodType = stringType;
61
+ break;
62
+ }
63
+ case "integer": {
64
+ let intType = z.number().int("Value must be an integer");
65
+ // Apply numeric constraints using native Zod methods
66
+ if (param.min !== undefined) {
67
+ intType = intType.min(param.min, `Value must be >= ${param.min}`);
68
+ }
69
+ if (param.max !== undefined) {
70
+ intType = intType.max(param.max, `Value must be <= ${param.max}`);
71
+ }
72
+ zodType = intType;
73
+ break;
74
+ }
75
+ case "float": {
76
+ let floatType = z.number();
77
+ // Apply numeric constraints using native Zod methods
78
+ if (param.min !== undefined) {
79
+ floatType = floatType.min(param.min, `Value must be >= ${param.min}`);
80
+ }
81
+ if (param.max !== undefined) {
82
+ floatType = floatType.max(param.max, `Value must be <= ${param.max}`);
83
+ }
84
+ zodType = floatType;
85
+ break;
86
+ }
87
+ case "boolean":
88
+ zodType = z.boolean();
89
+ break;
90
+ case "array": {
91
+ // For array parameters, create array of the specified item type
92
+ let itemType;
93
+ if (param.itemType === "string") {
94
+ itemType = z.string();
95
+ }
96
+ else if (param.itemType === "integer") {
97
+ itemType = z.number().int("Array items must be integers");
98
+ }
99
+ else if (param.itemType === "float") {
100
+ itemType = z.number();
101
+ }
102
+ else if (param.itemType === "boolean") {
103
+ itemType = z.boolean();
104
+ }
105
+ else {
106
+ itemType = z.unknown();
107
+ }
108
+ let arrayType = z.array(itemType);
109
+ // Apply array length constraints using native Zod methods
110
+ if (param.minLength !== undefined) {
111
+ arrayType = arrayType.min(param.minLength, `Array length must be >= ${param.minLength}`);
112
+ }
113
+ if (param.maxLength !== undefined) {
114
+ arrayType = arrayType.max(param.maxLength, `Array length must be <= ${param.maxLength}`);
115
+ }
116
+ zodType = arrayType;
117
+ break;
118
+ }
119
+ default:
120
+ throw new McpError(JsonRpcErrorCode.InvalidParams, `Unsupported parameter type '${param.type}' for parameter '${param.name}' in tool '${toolName}'`, { toolName, parameterName: param.name, parameterType: param.type });
121
+ }
122
+ // Handle enum constraints for all types (except boolean which is already constrained)
123
+ if (param.enum &&
124
+ Array.isArray(param.enum) &&
125
+ param.enum.length > 0 &&
126
+ param.type !== "boolean") {
127
+ // For enums, we need to replace the base type with a union of literals
128
+ // This properly translates to JSON Schema with "enum" keyword
129
+ const enumValues = param.enum;
130
+ if (enumValues.length === 1) {
131
+ // Single value enum becomes a literal
132
+ zodType = z.literal(enumValues[0]);
133
+ }
134
+ else if (enumValues.every((v) => typeof v === "string")) {
135
+ // All strings: use z.enum for optimal JSON Schema generation
136
+ zodType = z.enum(enumValues);
137
+ }
138
+ else {
139
+ // Mixed types or numbers: use union of literals
140
+ // Construct the tuple directly to satisfy TypeScript's type requirements
141
+ const [first, second, ...rest] = enumValues;
142
+ zodType = z.union([
143
+ z.literal(first),
144
+ z.literal(second),
145
+ ...rest.map((val) => z.literal(val)),
146
+ ]);
147
+ }
148
+ }
149
+ // Build enhanced description with enum values for LLM clarity
150
+ let finalDescription = param.description || "";
151
+ // Append enum constraint to description for LLM understanding
152
+ if (param.enum && Array.isArray(param.enum) && param.enum.length > 0) {
153
+ const formattedValues = param.enum
154
+ .map((v) => (typeof v === "string" ? `'${v}'` : String(v)))
155
+ .join(", ");
156
+ const enumClause = `Must be one of: ${formattedValues}`;
157
+ if (finalDescription) {
158
+ // Append to existing description with proper punctuation
159
+ finalDescription = finalDescription.trim();
160
+ if (!finalDescription.endsWith(".") &&
161
+ !finalDescription.endsWith("?") &&
162
+ !finalDescription.endsWith("!")) {
163
+ finalDescription += ".";
164
+ }
165
+ finalDescription += ` ${enumClause}`;
166
+ }
167
+ else {
168
+ // Use as the sole description
169
+ finalDescription = enumClause;
170
+ }
171
+ }
172
+ // Add description (now includes enum info if applicable)
173
+ if (finalDescription) {
174
+ zodType = zodType.describe(finalDescription);
175
+ }
176
+ // Add default value if provided (must be done last)
177
+ if (param.default !== undefined) {
178
+ zodType = zodType.default(param.default);
179
+ }
180
+ // Mark as optional if not required and no default provided
181
+ if (param.required === false && param.default === undefined) {
182
+ zodType = zodType.optional();
183
+ }
184
+ schemaShape[param.name] = zodType;
185
+ }
186
+ return z.object(schemaShape).strict();
187
+ }
188
+ /**
189
+ * Filter processed tools by allowed toolsets
190
+ * @param processedTools - Array of processed tools to filter
191
+ * @param allowedToolsets - List of toolset names to include
192
+ * @returns Filtered array containing only tools that belong to allowed toolsets
193
+ */
194
+ filterToolsByToolsets(processedTools, allowedToolsets) {
195
+ if (!allowedToolsets || allowedToolsets.length === 0) {
196
+ return processedTools;
197
+ }
198
+ return processedTools.filter((tool) => tool.toolsets &&
199
+ tool.toolsets.some((toolset) => allowedToolsets.includes(toolset)));
200
+ }
201
+ /**
202
+ * Build a complete tool configuration
203
+ * This is the single, unified method for creating all tool configurations
204
+ * @param toolName - Name of the tool
205
+ * @param config - Tool configuration from YAML
206
+ * @param toolsets - Toolsets this tool belongs to
207
+ * @param context - Request context
208
+ * @returns Complete cached tool configuration
209
+ */
210
+ async buildToolConfig(toolName, config, toolsets, context) {
211
+ const buildContext = requestContextService.createRequestContext({
212
+ parentRequestId: context.requestId,
213
+ operation: "ToolConfigBuilder.buildToolConfig",
214
+ toolName,
215
+ });
216
+ return ErrorHandler.tryCatch(async () => {
217
+ logger.debug({
218
+ ...buildContext,
219
+ description: config.description,
220
+ toolsets,
221
+ domain: config.domain,
222
+ category: config.category,
223
+ }, `Building tool configuration: ${toolName}`);
224
+ // Generate Zod schema for parameters
225
+ const inputSchema = this.generateZodSchema(config.parameters || [], toolName);
226
+ const toolLogic = this.createToolLogic(toolName, config, inputSchema, buildContext);
227
+ const annotations = this.buildAnnotations(toolName, config, toolsets);
228
+ const responseFormatter = this.getResponseFormatter(config);
229
+ const toolConfig = {
230
+ name: toolName,
231
+ title: this.formatToolTitle(toolName),
232
+ description: config.description,
233
+ inputSchema,
234
+ outputSchema: standardSqlToolOutputSchema,
235
+ annotations,
236
+ logic: toolLogic,
237
+ responseFormatter,
238
+ };
239
+ logger.debug(buildContext, `Tool configuration built successfully: ${toolName}`);
240
+ return toolConfig;
241
+ }, {
242
+ operation: "ToolConfigBuilder.buildToolConfig",
243
+ context: buildContext,
244
+ errorCode: JsonRpcErrorCode.InternalError,
245
+ });
246
+ }
247
+ /**
248
+ * Create a unified tool handler function
249
+ * This replaces the duplicate handler logic in yamlToolFactory
250
+ * @param toolName - Name of the tool
251
+ * @param config - Tool configuration
252
+ * @param context - Request context
253
+ * @returns Tool handler function
254
+ * @private
255
+ */
256
+ createToolLogic(toolName, config, inputSchema, context) {
257
+ return async (params, requestContext) => {
258
+ const executionContext = requestContextService.createRequestContext({
259
+ parentRequestId: context.requestId,
260
+ operation: `ExecuteYamlTool_${toolName}`,
261
+ toolName,
262
+ input: params,
263
+ requestContext,
264
+ });
265
+ return ErrorHandler.tryCatch(async () => {
266
+ if (!config.statement) {
267
+ throw new McpError(JsonRpcErrorCode.InvalidParams, `Tool ${toolName} has no SQL statement defined`, { toolName });
268
+ }
269
+ const result = await SQLToolFactory.executeStatementWithParameters(toolName, config.source, config.statement, params, config.parameters || [], executionContext, config.security);
270
+ const simplifiedColumns = (result.columns ?? []).map((column, index) => {
271
+ const record = column;
272
+ const name = record.name ?? record.label ?? `column_${index}`;
273
+ return {
274
+ name,
275
+ type: record.type,
276
+ label: record.label ?? record.name,
277
+ };
278
+ });
279
+ return {
280
+ success: true,
281
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
282
+ data: result.data,
283
+ metadata: {
284
+ executionTime: result.executionTime,
285
+ rowCount: result.rowCount,
286
+ affectedRows: result.affectedRows,
287
+ columns: simplifiedColumns.length > 0 ? simplifiedColumns : undefined,
288
+ parameterMode: result.parameterMetadata?.mode,
289
+ parameterCount: result.parameterMetadata?.parameterCount,
290
+ processedParameters: result.parameterMetadata?.processedParameters,
291
+ toolName,
292
+ sqlStatement: config.statement,
293
+ parameters: params,
294
+ },
295
+ };
296
+ }, {
297
+ operation: `ExecuteYamlTool_${toolName}`,
298
+ context: executionContext,
299
+ input: params,
300
+ errorCode: JsonRpcErrorCode.InternalError,
301
+ });
302
+ };
303
+ }
304
+ /**
305
+ * Determines the appropriate response formatter based on tool configuration.
306
+ * For SQL formatters, extracts and passes formatting configuration (tableFormat, maxDisplayRows).
307
+ */
308
+ getResponseFormatter(config) {
309
+ if (config.responseFormat === "markdown") {
310
+ // Extract formatting configuration from tool config
311
+ const formatterConfig = {
312
+ tableFormat: config.tableFormat,
313
+ maxDisplayRows: config.maxDisplayRows,
314
+ };
315
+ // Return a wrapper that passes the config to sqlResponseFormatter
316
+ return (result) => sqlResponseFormatter(result, formatterConfig);
317
+ }
318
+ return defaultResponseFormatter;
319
+ }
320
+ buildAnnotations(toolName, config, toolsets) {
321
+ const annotationInput = {
322
+ ...(config.annotations ?? {}),
323
+ };
324
+ const legacyReadOnly = config.readOnlyHint;
325
+ const legacyOpenWorld = config.openWorldHint;
326
+ const legacyIdempotent = config.idempotentHint;
327
+ const legacyDestructive = config.destructiveHint;
328
+ if (Array.isArray(annotationInput.toolsets) &&
329
+ annotationInput.toolsets.length > 0) {
330
+ logger.warning({
331
+ toolName,
332
+ providedToolsets: annotationInput.toolsets,
333
+ resolvedToolsets: toolsets,
334
+ }, "Tool annotations specified 'toolsets', but toolset membership is derived from YAML toolset mappings. Ignoring provided values.");
335
+ }
336
+ // Remove any externally provided toolsets to prevent divergence from configured mappings
337
+ delete annotationInput.toolsets;
338
+ const mergedCustomMetadata = this.mergeCustomMetadata(annotationInput.customMetadata, config.metadata);
339
+ const resolvedAnnotations = {
340
+ ...annotationInput,
341
+ title: annotationInput.title ?? this.formatToolTitle(toolName),
342
+ domain: annotationInput.domain ?? config.domain,
343
+ category: annotationInput.category ?? config.category,
344
+ readOnlyHint: annotationInput.readOnlyHint ??
345
+ legacyReadOnly ??
346
+ config.security?.readOnly ??
347
+ true,
348
+ openWorldHint: annotationInput.openWorldHint ?? legacyOpenWorld,
349
+ idempotentHint: annotationInput.idempotentHint ?? legacyIdempotent,
350
+ destructiveHint: annotationInput.destructiveHint ?? legacyDestructive,
351
+ toolsets,
352
+ };
353
+ if (mergedCustomMetadata) {
354
+ resolvedAnnotations.customMetadata = mergedCustomMetadata;
355
+ }
356
+ return resolvedAnnotations;
357
+ }
358
+ mergeCustomMetadata(annotationsMetadata, toolMetadata) {
359
+ const candidates = [annotationsMetadata, toolMetadata].filter((value) => value !== null && typeof value === "object" && !Array.isArray(value));
360
+ if (candidates.length === 0) {
361
+ return undefined;
362
+ }
363
+ return Object.assign({}, ...candidates);
364
+ }
365
+ /**
366
+ * Format tool name into a human-readable title
367
+ * @param toolName - Tool name
368
+ * @returns Formatted title
369
+ * @private
370
+ */
371
+ formatToolTitle(toolName) {
372
+ return toolName
373
+ .split(/[_-]/)
374
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
375
+ .join(" ");
376
+ }
377
+ // ============================================================================
378
+ // Configuration Parsing Methods (moved from YamlConfigBuilder)
379
+ // ============================================================================
380
+ /**
381
+ * Build configuration from multiple sources
382
+ * @param sources - Array of configuration sources
383
+ * @param options - Merge options
384
+ * @param context - Request context
385
+ * @returns Built configuration
386
+ */
387
+ async buildFromSources(sources, options, context) {
388
+ const operationContext = context ||
389
+ requestContextService.createRequestContext({
390
+ operation: "ToolConfigBuilder.buildFromSources",
391
+ });
392
+ return ErrorHandler.tryCatch(async () => {
393
+ logger.info(operationContext, `Building YAML configuration from sources: ${sources.length} sources`);
394
+ const filePaths = await this.resolveAllFilePaths(sources, operationContext);
395
+ const configs = await this.loadAllConfigurations(filePaths, operationContext);
396
+ const mergedConfig = await this.mergeConfigurations(configs, options, operationContext);
397
+ const stats = {
398
+ sourcesLoaded: filePaths.length,
399
+ sourcesMerged: configs.length,
400
+ toolsTotal: Object.keys(mergedConfig.tools || {}).length,
401
+ toolsetsTotal: Object.keys(mergedConfig.toolsets || {}).length,
402
+ sourcesTotal: Object.keys(mergedConfig.sources || {}).length,
403
+ };
404
+ logger.info({
405
+ ...operationContext,
406
+ ...stats,
407
+ }, "YAML configuration built successfully");
408
+ return {
409
+ success: true,
410
+ config: mergedConfig,
411
+ stats,
412
+ resolvedFilePaths: filePaths,
413
+ };
414
+ }, {
415
+ operation: "ToolConfigBuilder.buildFromSources",
416
+ context: operationContext,
417
+ errorCode: JsonRpcErrorCode.ConfigurationError,
418
+ });
419
+ }
420
+ /**
421
+ * Resolve all file paths from sources
422
+ * @private
423
+ */
424
+ async resolveAllFilePaths(sources, context) {
425
+ const allPaths = [];
426
+ for (const source of sources) {
427
+ try {
428
+ const paths = await this.resolveSourcePaths(source);
429
+ allPaths.push(...paths);
430
+ }
431
+ catch (error) {
432
+ if (source.required) {
433
+ throw error;
434
+ }
435
+ logger.warning(context, `Optional source not found: ${source.path} (${source.type})`);
436
+ }
437
+ }
438
+ // Remove duplicates
439
+ return [...new Set(allPaths)];
440
+ }
441
+ /**
442
+ * Resolve paths for a single source
443
+ * @private
444
+ */
445
+ async resolveSourcePaths(source) {
446
+ switch (source.type) {
447
+ case "file":
448
+ return this.resolveFilePath(source.path);
449
+ case "directory":
450
+ return this.resolveDirectoryPaths(source.path);
451
+ case "glob":
452
+ return this.resolveGlobPaths(source.path, source.baseDir);
453
+ default:
454
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, `Unknown source type: ${source.type}`);
455
+ }
456
+ }
457
+ /**
458
+ * Resolve a single file path
459
+ * @private
460
+ */
461
+ resolveFilePath(filePath) {
462
+ const resolvedPath = resolve(filePath);
463
+ if (!existsSync(resolvedPath)) {
464
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, `Configuration file not found: ${resolvedPath}`);
465
+ }
466
+ return [resolvedPath];
467
+ }
468
+ /**
469
+ * Resolve directory paths
470
+ * @private
471
+ */
472
+ resolveDirectoryPaths(directoryPath) {
473
+ const resolvedDir = resolve(directoryPath);
474
+ if (!existsSync(resolvedDir)) {
475
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, `Configuration directory not found: ${resolvedDir}`);
476
+ }
477
+ const pattern = join(resolvedDir, "**/*.{yaml,yml}");
478
+ return glob.sync(pattern, { absolute: true });
479
+ }
480
+ /**
481
+ * Resolve glob paths
482
+ * @private
483
+ */
484
+ resolveGlobPaths(pattern, baseDir) {
485
+ const searchPattern = baseDir ? join(baseDir, pattern) : pattern;
486
+ const paths = glob.sync(searchPattern, { absolute: true });
487
+ if (paths.length === 0) {
488
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, `No files found matching pattern: ${searchPattern}`);
489
+ }
490
+ return paths;
491
+ }
492
+ /**
493
+ * Load all configurations from file paths
494
+ * @private
495
+ */
496
+ async loadAllConfigurations(filePaths, context) {
497
+ const configs = [];
498
+ for (const filePath of filePaths) {
499
+ try {
500
+ logger.debug(context, `Loading configuration from: ${filePath}`);
501
+ const result = await ConfigParser.parseYamlFile(filePath, context);
502
+ if (result.success && result.config) {
503
+ configs.push(result.config);
504
+ }
505
+ else {
506
+ logger.error(context, `Failed to load configuration from: ${filePath}`);
507
+ }
508
+ }
509
+ catch (error) {
510
+ logger.error(context, `Error loading configuration from: ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
511
+ throw error;
512
+ }
513
+ }
514
+ return configs;
515
+ }
516
+ /**
517
+ * Merge multiple configurations
518
+ * Uses environment-configured merge options from config.yamlMergeOptions as defaults
519
+ * @private
520
+ */
521
+ async mergeConfigurations(configs, options, context) {
522
+ if (configs.length === 0) {
523
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, "No valid configurations to merge");
524
+ }
525
+ if (configs.length === 1) {
526
+ return configs[0];
527
+ }
528
+ // Use environment-configured merge options as defaults, allow explicit overrides
529
+ const mergeOptions = {
530
+ ...config.yamlMergeOptions,
531
+ ...options,
532
+ };
533
+ logger.debug(context || {}, `Merging ${configs.length} configurations with options: ${JSON.stringify(mergeOptions)}`);
534
+ const mergedConfig = {
535
+ sources: {},
536
+ tools: {},
537
+ toolsets: {},
538
+ metadata: {},
539
+ };
540
+ // Merge each configuration
541
+ for (const configToMerge of configs) {
542
+ await this.mergeIntoTarget(mergedConfig, configToMerge, mergeOptions, context);
543
+ }
544
+ // Validate merged configuration if requested
545
+ if (mergeOptions.validateMerged) {
546
+ await this.validateMergedConfiguration(mergedConfig, context);
547
+ }
548
+ return mergedConfig;
549
+ }
550
+ /**
551
+ * Merge a configuration into the target
552
+ * @private
553
+ */
554
+ async mergeIntoTarget(target, source, options, context) {
555
+ // Merge sources
556
+ if (source.sources) {
557
+ if (!target.sources) {
558
+ target.sources = {};
559
+ }
560
+ for (const [sourceName, sourceConfig] of Object.entries(source.sources)) {
561
+ if (target.sources[sourceName]) {
562
+ if (!options.allowDuplicateSources) {
563
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, `Duplicate source name: ${sourceName}`);
564
+ }
565
+ logger.warning(context || {}, `Overriding existing source: ${sourceName}`);
566
+ }
567
+ target.sources[sourceName] = sourceConfig;
568
+ }
569
+ }
570
+ // Merge tools
571
+ if (source.tools) {
572
+ if (!target.tools) {
573
+ target.tools = {};
574
+ }
575
+ for (const [toolName, toolConfig] of Object.entries(source.tools)) {
576
+ if (target.tools[toolName]) {
577
+ if (!options.allowDuplicateTools) {
578
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, `Duplicate tool name: ${toolName}`);
579
+ }
580
+ logger.warning(context || {}, `Overriding existing tool: ${toolName}`);
581
+ }
582
+ target.tools[toolName] = toolConfig;
583
+ }
584
+ }
585
+ // Merge toolsets
586
+ if (source.toolsets) {
587
+ if (!target.toolsets) {
588
+ target.toolsets = {};
589
+ }
590
+ for (const [toolsetName, toolsetConfig] of Object.entries(source.toolsets)) {
591
+ if (target.toolsets[toolsetName]) {
592
+ if (options.mergeArrays) {
593
+ // Merge tool arrays
594
+ target.toolsets[toolsetName].tools = [
595
+ ...target.toolsets[toolsetName].tools,
596
+ ...toolsetConfig.tools,
597
+ ];
598
+ }
599
+ else {
600
+ // Replace with new toolset
601
+ target.toolsets[toolsetName] = toolsetConfig;
602
+ }
603
+ }
604
+ else {
605
+ target.toolsets[toolsetName] = toolsetConfig;
606
+ }
607
+ }
608
+ }
609
+ // Merge metadata
610
+ if (source.metadata) {
611
+ if (!target.metadata) {
612
+ target.metadata = {};
613
+ }
614
+ target.metadata = { ...target.metadata, ...source.metadata };
615
+ }
616
+ }
617
+ /**
618
+ * Validate the merged configuration
619
+ * @private
620
+ */
621
+ async validateMergedConfiguration(config, context) {
622
+ // Validate that all tool sources exist (only if both sections exist)
623
+ if (config.tools && config.sources) {
624
+ for (const [toolName, toolConfig] of Object.entries(config.tools)) {
625
+ if (!config.sources[toolConfig.source]) {
626
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, `Tool '${toolName}' references non-existent source '${toolConfig.source}'`);
627
+ }
628
+ }
629
+ }
630
+ // Validate that all toolset tools exist (only if both sections exist)
631
+ if (config.toolsets && config.tools) {
632
+ for (const [toolsetName, toolsetConfig] of Object.entries(config.toolsets)) {
633
+ for (const toolName of toolsetConfig.tools) {
634
+ if (!config.tools[toolName]) {
635
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, `Toolset '${toolsetName}' references non-existent tool '${toolName}'`);
636
+ }
637
+ }
638
+ }
639
+ }
640
+ logger.debug(context || {}, "Merged configuration validated successfully");
641
+ }
642
+ // Static factory methods for convenience
643
+ static async fromFile(filePath, context) {
644
+ const builder = ToolConfigBuilder.getInstance();
645
+ return builder.buildFromSources([{ type: "file", path: filePath, required: true }], undefined, context);
646
+ }
647
+ static async fromFiles(filePaths, context) {
648
+ const builder = ToolConfigBuilder.getInstance();
649
+ const sources = filePaths.map((path) => ({
650
+ type: "file",
651
+ path,
652
+ required: true,
653
+ }));
654
+ return builder.buildFromSources(sources, undefined, context);
655
+ }
656
+ static async fromDirectory(directoryPath, context) {
657
+ const builder = ToolConfigBuilder.getInstance();
658
+ return builder.buildFromSources([{ type: "directory", path: directoryPath, required: true }], undefined, context);
659
+ }
660
+ static async fromGlob(pattern, baseDir, context) {
661
+ const builder = ToolConfigBuilder.getInstance();
662
+ return builder.buildFromSources([{ type: "glob", path: pattern, baseDir, required: true }], undefined, context);
663
+ }
664
+ }
665
+ //# sourceMappingURL=toolConfigBuilder.js.map