mcp4openapi 0.2.8 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. package/README.md +143 -63
  2. package/dist/scripts/validate-profile.js +3 -3
  3. package/dist/scripts/validate-profile.js.map +1 -1
  4. package/dist/src/argument-normalizer.d.ts +5 -0
  5. package/dist/src/argument-normalizer.d.ts.map +1 -0
  6. package/dist/src/argument-normalizer.js +61 -0
  7. package/dist/src/argument-normalizer.js.map +1 -0
  8. package/dist/src/auth/oauth-provider.d.ts +131 -0
  9. package/dist/src/auth/oauth-provider.d.ts.map +1 -0
  10. package/dist/src/auth/oauth-provider.js +839 -0
  11. package/dist/src/auth/oauth-provider.js.map +1 -0
  12. package/dist/src/cli-config.d.ts +9 -0
  13. package/dist/src/cli-config.d.ts.map +1 -0
  14. package/dist/src/cli-config.js +111 -0
  15. package/dist/src/cli-config.js.map +1 -0
  16. package/dist/src/core/cli-config.d.ts +9 -0
  17. package/dist/src/core/cli-config.d.ts.map +1 -0
  18. package/dist/src/core/cli-config.js +125 -0
  19. package/dist/src/core/cli-config.js.map +1 -0
  20. package/dist/src/core/constants.d.ts +86 -0
  21. package/dist/src/core/constants.d.ts.map +1 -0
  22. package/dist/src/core/constants.js +86 -0
  23. package/dist/src/core/constants.js.map +1 -0
  24. package/dist/src/core/errors.d.ts +59 -0
  25. package/dist/src/core/errors.d.ts.map +1 -0
  26. package/dist/src/core/errors.js +119 -0
  27. package/dist/src/core/errors.js.map +1 -0
  28. package/dist/src/core/filtering.d.ts +19 -0
  29. package/dist/src/core/filtering.d.ts.map +1 -0
  30. package/dist/src/core/filtering.js +292 -0
  31. package/dist/src/core/filtering.js.map +1 -0
  32. package/dist/src/core/index.d.ts +26 -0
  33. package/dist/src/core/index.d.ts.map +1 -0
  34. package/dist/src/core/index.js +276 -0
  35. package/dist/src/core/index.js.map +1 -0
  36. package/dist/src/core/lib.d.ts +8 -0
  37. package/dist/src/core/lib.d.ts.map +1 -0
  38. package/dist/src/core/lib.js +7 -0
  39. package/dist/src/core/lib.js.map +1 -0
  40. package/dist/src/core/logger.d.ts +59 -0
  41. package/dist/src/core/logger.d.ts.map +1 -0
  42. package/dist/src/core/logger.js +197 -0
  43. package/dist/src/core/logger.js.map +1 -0
  44. package/dist/src/core/metrics.d.ts +97 -0
  45. package/dist/src/core/metrics.d.ts.map +1 -0
  46. package/dist/src/core/metrics.js +273 -0
  47. package/dist/src/core/metrics.js.map +1 -0
  48. package/dist/src/core/naming-warnings.d.ts +23 -0
  49. package/dist/src/core/naming-warnings.d.ts.map +1 -0
  50. package/dist/src/core/naming-warnings.js +83 -0
  51. package/dist/src/core/naming-warnings.js.map +1 -0
  52. package/dist/src/core/naming.d.ts +58 -0
  53. package/dist/src/core/naming.d.ts.map +1 -0
  54. package/dist/src/core/naming.js +510 -0
  55. package/dist/src/core/naming.js.map +1 -0
  56. package/dist/src/errors.d.ts +6 -0
  57. package/dist/src/errors.d.ts.map +1 -1
  58. package/dist/src/errors.js +15 -6
  59. package/dist/src/errors.js.map +1 -1
  60. package/dist/src/filtering.d.ts +19 -0
  61. package/dist/src/filtering.d.ts.map +1 -0
  62. package/dist/src/filtering.js +292 -0
  63. package/dist/src/filtering.js.map +1 -0
  64. package/dist/src/generated-schemas.d.ts +290 -79
  65. package/dist/src/generated-schemas.d.ts.map +1 -1
  66. package/dist/src/generated-schemas.js +17 -2
  67. package/dist/src/generated-schemas.js.map +1 -1
  68. package/dist/src/http-transport-config.d.ts +6 -0
  69. package/dist/src/http-transport-config.d.ts.map +1 -0
  70. package/dist/src/http-transport-config.js +47 -0
  71. package/dist/src/http-transport-config.js.map +1 -0
  72. package/dist/src/http-transport.d.ts +63 -13
  73. package/dist/src/http-transport.d.ts.map +1 -1
  74. package/dist/src/http-transport.js +1045 -482
  75. package/dist/src/http-transport.js.map +1 -1
  76. package/dist/src/index.d.ts +1 -6
  77. package/dist/src/index.d.ts.map +1 -1
  78. package/dist/src/index.js +1 -170
  79. package/dist/src/index.js.map +1 -1
  80. package/dist/src/interceptors.d.ts +1 -0
  81. package/dist/src/interceptors.d.ts.map +1 -1
  82. package/dist/src/interceptors.js +73 -63
  83. package/dist/src/interceptors.js.map +1 -1
  84. package/dist/src/lib.d.ts +1 -7
  85. package/dist/src/lib.d.ts.map +1 -1
  86. package/dist/src/lib.js +1 -6
  87. package/dist/src/lib.js.map +1 -1
  88. package/dist/src/logger.d.ts +5 -0
  89. package/dist/src/logger.d.ts.map +1 -1
  90. package/dist/src/logger.js +9 -1
  91. package/dist/src/logger.js.map +1 -1
  92. package/dist/src/mcp/mcp-server-manager.d.ts +20 -0
  93. package/dist/src/mcp/mcp-server-manager.d.ts.map +1 -0
  94. package/dist/src/mcp/mcp-server-manager.js +38 -0
  95. package/dist/src/mcp/mcp-server-manager.js.map +1 -0
  96. package/dist/src/mcp/mcp-server.d.ts +205 -0
  97. package/dist/src/mcp/mcp-server.d.ts.map +1 -0
  98. package/dist/src/mcp/mcp-server.js +1473 -0
  99. package/dist/src/mcp/mcp-server.js.map +1 -0
  100. package/dist/src/mcp-server-manager.d.ts +20 -0
  101. package/dist/src/mcp-server-manager.d.ts.map +1 -0
  102. package/dist/src/mcp-server-manager.js +38 -0
  103. package/dist/src/mcp-server-manager.js.map +1 -0
  104. package/dist/src/mcp-server.d.ts +28 -0
  105. package/dist/src/mcp-server.d.ts.map +1 -1
  106. package/dist/src/mcp-server.js +406 -109
  107. package/dist/src/mcp-server.js.map +1 -1
  108. package/dist/src/metrics.d.ts +11 -0
  109. package/dist/src/metrics.d.ts.map +1 -1
  110. package/dist/src/metrics.js +61 -0
  111. package/dist/src/metrics.js.map +1 -1
  112. package/dist/src/oauth-provider.d.ts +5 -0
  113. package/dist/src/oauth-provider.d.ts.map +1 -1
  114. package/dist/src/oauth-provider.js +29 -1
  115. package/dist/src/oauth-provider.js.map +1 -1
  116. package/dist/src/openapi/openapi-parser.d.ts +70 -0
  117. package/dist/src/openapi/openapi-parser.d.ts.map +1 -0
  118. package/dist/src/openapi/openapi-parser.js +458 -0
  119. package/dist/src/openapi/openapi-parser.js.map +1 -0
  120. package/dist/src/profile/profile-loader.d.ts +78 -0
  121. package/dist/src/profile/profile-loader.d.ts.map +1 -0
  122. package/dist/src/profile/profile-loader.js +490 -0
  123. package/dist/src/profile/profile-loader.js.map +1 -0
  124. package/dist/src/profile/profile-registry.d.ts +19 -0
  125. package/dist/src/profile/profile-registry.d.ts.map +1 -0
  126. package/dist/src/profile/profile-registry.js +43 -0
  127. package/dist/src/profile/profile-registry.js.map +1 -0
  128. package/dist/src/profile/profile-resolver.d.ts +41 -0
  129. package/dist/src/profile/profile-resolver.d.ts.map +1 -0
  130. package/dist/src/profile/profile-resolver.js +324 -0
  131. package/dist/src/profile/profile-resolver.js.map +1 -0
  132. package/dist/src/profile/startup-profile.d.ts +17 -0
  133. package/dist/src/profile/startup-profile.d.ts.map +1 -0
  134. package/dist/src/profile/startup-profile.js +30 -0
  135. package/dist/src/profile/startup-profile.js.map +1 -0
  136. package/dist/src/profile/startup-validation.d.ts +11 -0
  137. package/dist/src/profile/startup-validation.d.ts.map +1 -0
  138. package/dist/src/profile/startup-validation.js +21 -0
  139. package/dist/src/profile/startup-validation.js.map +1 -0
  140. package/dist/src/profile-loader.d.ts +1 -0
  141. package/dist/src/profile-loader.d.ts.map +1 -1
  142. package/dist/src/profile-loader.js +14 -3
  143. package/dist/src/profile-loader.js.map +1 -1
  144. package/dist/src/profile-registry.d.ts +18 -0
  145. package/dist/src/profile-registry.d.ts.map +1 -0
  146. package/dist/src/profile-registry.js +26 -0
  147. package/dist/src/profile-registry.js.map +1 -0
  148. package/dist/src/profile-resolver.d.ts +19 -0
  149. package/dist/src/profile-resolver.d.ts.map +1 -0
  150. package/dist/src/profile-resolver.js +167 -0
  151. package/dist/src/profile-resolver.js.map +1 -0
  152. package/dist/src/proxy-executor.d.ts.map +1 -1
  153. package/dist/src/proxy-executor.js +7 -0
  154. package/dist/src/proxy-executor.js.map +1 -1
  155. package/dist/src/startup-profile.d.ts +17 -0
  156. package/dist/src/startup-profile.d.ts.map +1 -0
  157. package/dist/src/startup-profile.js +30 -0
  158. package/dist/src/startup-profile.js.map +1 -0
  159. package/dist/src/startup-validation.d.ts +11 -0
  160. package/dist/src/startup-validation.d.ts.map +1 -0
  161. package/dist/src/startup-validation.js +21 -0
  162. package/dist/src/startup-validation.js.map +1 -0
  163. package/dist/src/testing/dynamic-mock-server.d.ts +24 -0
  164. package/dist/src/testing/dynamic-mock-server.d.ts.map +1 -0
  165. package/dist/src/testing/dynamic-mock-server.js +138 -0
  166. package/dist/src/testing/dynamic-mock-server.js.map +1 -0
  167. package/dist/src/testing/request-assertions.d.ts +5 -0
  168. package/dist/src/testing/request-assertions.d.ts.map +1 -0
  169. package/dist/src/testing/request-assertions.js +165 -0
  170. package/dist/src/testing/request-assertions.js.map +1 -0
  171. package/dist/src/testing/template-utils.d.ts +10 -0
  172. package/dist/src/testing/template-utils.d.ts.map +1 -0
  173. package/dist/src/testing/template-utils.js +72 -0
  174. package/dist/src/testing/template-utils.js.map +1 -0
  175. package/dist/src/testing/test-http-utils.d.ts +1 -1
  176. package/dist/src/testing/test-http-utils.d.ts.map +1 -1
  177. package/dist/src/testing/test-http-utils.js +1 -1
  178. package/dist/src/testing/test-http-utils.js.map +1 -1
  179. package/dist/src/testing/test-loader.d.ts +6 -0
  180. package/dist/src/testing/test-loader.d.ts.map +1 -0
  181. package/dist/src/testing/test-loader.js +212 -0
  182. package/dist/src/testing/test-loader.js.map +1 -0
  183. package/dist/src/testing/test-schema.d.ts +1270 -0
  184. package/dist/src/testing/test-schema.d.ts.map +1 -0
  185. package/dist/src/testing/test-schema.js +76 -0
  186. package/dist/src/testing/test-schema.js.map +1 -0
  187. package/dist/src/tool-filter/compat.d.ts +49 -0
  188. package/dist/src/tool-filter/compat.d.ts.map +1 -0
  189. package/dist/src/tool-filter/compat.js +72 -0
  190. package/dist/src/tool-filter/compat.js.map +1 -0
  191. package/dist/src/tool-filter/config/env-config-parser.d.ts +38 -0
  192. package/dist/src/tool-filter/config/env-config-parser.d.ts.map +1 -0
  193. package/dist/src/tool-filter/config/env-config-parser.js +103 -0
  194. package/dist/src/tool-filter/config/env-config-parser.js.map +1 -0
  195. package/dist/src/tool-filter/config/header-config-parser.d.ts +37 -0
  196. package/dist/src/tool-filter/config/header-config-parser.d.ts.map +1 -0
  197. package/dist/src/tool-filter/config/header-config-parser.js +118 -0
  198. package/dist/src/tool-filter/config/header-config-parser.js.map +1 -0
  199. package/dist/src/tool-filter/errors.d.ts +18 -0
  200. package/dist/src/tool-filter/errors.d.ts.map +1 -0
  201. package/dist/src/tool-filter/errors.js +21 -0
  202. package/dist/src/tool-filter/errors.js.map +1 -0
  203. package/dist/src/tool-filter/filter/filter-engine.d.ts +45 -0
  204. package/dist/src/tool-filter/filter/filter-engine.d.ts.map +1 -0
  205. package/dist/src/tool-filter/filter/filter-engine.js +94 -0
  206. package/dist/src/tool-filter/filter/filter-engine.js.map +1 -0
  207. package/dist/src/tool-filter/filter/filter-rules.d.ts +44 -0
  208. package/dist/src/tool-filter/filter/filter-rules.d.ts.map +1 -0
  209. package/dist/src/tool-filter/filter/filter-rules.js +72 -0
  210. package/dist/src/tool-filter/filter/filter-rules.js.map +1 -0
  211. package/dist/src/tool-filter/filter/global-tool-filter.d.ts +40 -0
  212. package/dist/src/tool-filter/filter/global-tool-filter.d.ts.map +1 -0
  213. package/dist/src/tool-filter/filter/global-tool-filter.js +92 -0
  214. package/dist/src/tool-filter/filter/global-tool-filter.js.map +1 -0
  215. package/dist/src/tool-filter/filter/session-tool-filter.d.ts +29 -0
  216. package/dist/src/tool-filter/filter/session-tool-filter.d.ts.map +1 -0
  217. package/dist/src/tool-filter/filter/session-tool-filter.js +69 -0
  218. package/dist/src/tool-filter/filter/session-tool-filter.js.map +1 -0
  219. package/dist/src/tool-filter/index.d.ts +25 -0
  220. package/dist/src/tool-filter/index.d.ts.map +1 -0
  221. package/dist/src/tool-filter/index.js +30 -0
  222. package/dist/src/tool-filter/index.js.map +1 -0
  223. package/dist/src/tool-filter/integration/tool-filter-service.d.ts +44 -0
  224. package/dist/src/tool-filter/integration/tool-filter-service.d.ts.map +1 -0
  225. package/dist/src/tool-filter/integration/tool-filter-service.js +68 -0
  226. package/dist/src/tool-filter/integration/tool-filter-service.js.map +1 -0
  227. package/dist/src/tool-filter/operation/operation-classifier.d.ts +20 -0
  228. package/dist/src/tool-filter/operation/operation-classifier.d.ts.map +1 -0
  229. package/dist/src/tool-filter/operation/operation-classifier.js +26 -0
  230. package/dist/src/tool-filter/operation/operation-classifier.js.map +1 -0
  231. package/dist/src/tool-filter/operation/operation-detector.d.ts +30 -0
  232. package/dist/src/tool-filter/operation/operation-detector.d.ts.map +1 -0
  233. package/dist/src/tool-filter/operation/operation-detector.js +96 -0
  234. package/dist/src/tool-filter/operation/operation-detector.js.map +1 -0
  235. package/dist/src/tool-filter/operation/operation-resolver.d.ts +22 -0
  236. package/dist/src/tool-filter/operation/operation-resolver.d.ts.map +1 -0
  237. package/dist/src/tool-filter/operation/operation-resolver.js +32 -0
  238. package/dist/src/tool-filter/operation/operation-resolver.js.map +1 -0
  239. package/dist/src/tool-filter/regex/regex-compiler.d.ts +22 -0
  240. package/dist/src/tool-filter/regex/regex-compiler.d.ts.map +1 -0
  241. package/dist/src/tool-filter/regex/regex-compiler.js +56 -0
  242. package/dist/src/tool-filter/regex/regex-compiler.js.map +1 -0
  243. package/dist/src/tool-filter/regex/regex-validator.d.ts +24 -0
  244. package/dist/src/tool-filter/regex/regex-validator.d.ts.map +1 -0
  245. package/dist/src/tool-filter/regex/regex-validator.js +58 -0
  246. package/dist/src/tool-filter/regex/regex-validator.js.map +1 -0
  247. package/dist/src/tool-filter/types.d.ts +92 -0
  248. package/dist/src/tool-filter/types.d.ts.map +1 -0
  249. package/dist/src/tool-filter/types.js +5 -0
  250. package/dist/src/tool-filter/types.js.map +1 -0
  251. package/dist/src/tool-filter/utils.d.ts +11 -0
  252. package/dist/src/tool-filter/utils.d.ts.map +1 -0
  253. package/dist/src/tool-filter/utils.js +13 -0
  254. package/dist/src/tool-filter/utils.js.map +1 -0
  255. package/dist/src/tool-filter.d.ts +65 -0
  256. package/dist/src/tool-filter.d.ts.map +1 -0
  257. package/dist/src/tool-filter.js +471 -0
  258. package/dist/src/tool-filter.js.map +1 -0
  259. package/dist/src/tool-generator.d.ts +1 -0
  260. package/dist/src/tool-generator.d.ts.map +1 -1
  261. package/dist/src/tool-generator.js +15 -6
  262. package/dist/src/tool-generator.js.map +1 -1
  263. package/dist/src/tooling/composite-executor.d.ts +77 -0
  264. package/dist/src/tooling/composite-executor.d.ts.map +1 -0
  265. package/dist/src/tooling/composite-executor.js +198 -0
  266. package/dist/src/tooling/composite-executor.js.map +1 -0
  267. package/dist/src/tooling/dag-executor.d.ts +49 -0
  268. package/dist/src/tooling/dag-executor.d.ts.map +1 -0
  269. package/dist/src/tooling/dag-executor.js +138 -0
  270. package/dist/src/tooling/dag-executor.js.map +1 -0
  271. package/dist/src/tooling/proxy-executor.d.ts +86 -0
  272. package/dist/src/tooling/proxy-executor.d.ts.map +1 -0
  273. package/dist/src/tooling/proxy-executor.js +501 -0
  274. package/dist/src/tooling/proxy-executor.js.map +1 -0
  275. package/dist/src/tooling/tool-generator.d.ts +67 -0
  276. package/dist/src/tooling/tool-generator.d.ts.map +1 -0
  277. package/dist/src/tooling/tool-generator.js +222 -0
  278. package/dist/src/tooling/tool-generator.js.map +1 -0
  279. package/dist/src/transport/http-client-factory.d.ts +65 -0
  280. package/dist/src/transport/http-client-factory.d.ts.map +1 -0
  281. package/dist/src/transport/http-client-factory.js +143 -0
  282. package/dist/src/transport/http-client-factory.js.map +1 -0
  283. package/dist/src/transport/http-transport-config.d.ts +6 -0
  284. package/dist/src/transport/http-transport-config.d.ts.map +1 -0
  285. package/dist/src/transport/http-transport-config.js +63 -0
  286. package/dist/src/transport/http-transport-config.js.map +1 -0
  287. package/dist/src/transport/http-transport.d.ts +329 -0
  288. package/dist/src/transport/http-transport.d.ts.map +1 -0
  289. package/dist/src/transport/http-transport.js +2584 -0
  290. package/dist/src/transport/http-transport.js.map +1 -0
  291. package/dist/src/transport/interceptors.d.ts +119 -0
  292. package/dist/src/transport/interceptors.d.ts.map +1 -0
  293. package/dist/src/transport/interceptors.js +413 -0
  294. package/dist/src/transport/interceptors.js.map +1 -0
  295. package/dist/src/transport/profile-index.d.ts +84 -0
  296. package/dist/src/transport/profile-index.d.ts.map +1 -0
  297. package/dist/src/transport/profile-index.js +405 -0
  298. package/dist/src/transport/profile-index.js.map +1 -0
  299. package/dist/src/types/http-transport.d.ts +26 -0
  300. package/dist/src/types/http-transport.d.ts.map +1 -1
  301. package/dist/src/types/openapi.d.ts +3 -0
  302. package/dist/src/types/openapi.d.ts.map +1 -1
  303. package/dist/src/types/profile.d.ts +16 -1
  304. package/dist/src/types/profile.d.ts.map +1 -1
  305. package/dist/src/validation/argument-normalizer.d.ts +6 -0
  306. package/dist/src/validation/argument-normalizer.d.ts.map +1 -0
  307. package/dist/src/validation/argument-normalizer.js +70 -0
  308. package/dist/src/validation/argument-normalizer.js.map +1 -0
  309. package/dist/src/validation/jsonrpc-validator.d.ts +27 -0
  310. package/dist/src/validation/jsonrpc-validator.d.ts.map +1 -0
  311. package/dist/src/validation/jsonrpc-validator.js +58 -0
  312. package/dist/src/validation/jsonrpc-validator.js.map +1 -0
  313. package/dist/src/validation/schema-validator.d.ts +30 -0
  314. package/dist/src/validation/schema-validator.d.ts.map +1 -0
  315. package/dist/src/validation/schema-validator.js +128 -0
  316. package/dist/src/validation/schema-validator.js.map +1 -0
  317. package/dist/src/validation/validation-utils.d.ts +49 -0
  318. package/dist/src/validation/validation-utils.d.ts.map +1 -0
  319. package/dist/src/validation/validation-utils.js +139 -0
  320. package/dist/src/validation/validation-utils.js.map +1 -0
  321. package/html/profile-index.html +386 -0
  322. package/package.json +10 -3
  323. package/profile-schema.json +77 -3
  324. package/profiles/gitlab/developer-profile-oauth.json +1520 -0
  325. package/profiles/gitlab/developer-profile-oauth.test.json +3432 -0
  326. package/profiles/gitlab/developer-profile.json +1508 -0
  327. package/profiles/gitlab/developer-profile.test.json +3432 -0
  328. package/profiles/gitlab/openapi.yaml +6891 -0
  329. package/profiles/n8n/openapi.yaml +2441 -0
  330. package/profiles/n8n/profile-optimized.json +965 -0
  331. package/profiles/n8n/profile-optimized.test.json +1078 -0
  332. package/profiles/n8n/profile.json +1033 -0
  333. package/profiles/n8n/profile.test.json +983 -0
  334. package/profiles/n8n-nodes/openapi.yaml +24 -0
  335. package/profiles/n8n-nodes/profile-nodes.json +44 -0
  336. package/profiles/n8n-nodes/profile-nodes.test.json +91 -0
  337. package/profiles/semgrep/openapi.yaml +4706 -0
  338. package/profiles/semgrep/profile.json +692 -0
  339. package/profiles/semgrep/profile.test.json +471 -0
  340. package/profiles/youtrack/openapi.json +16976 -0
  341. package/profiles/youtrack/profile.json +608 -0
  342. package/profiles/youtrack/profile.test.json +1926 -0
  343. package/dist/src/testing/fixtures.d.ts +0 -684
  344. package/dist/src/testing/fixtures.d.ts.map +0 -1
  345. package/dist/src/testing/fixtures.js +0 -528
  346. package/dist/src/testing/fixtures.js.map +0 -1
  347. package/dist/src/testing/mock-gitlab-server.d.ts +0 -43
  348. package/dist/src/testing/mock-gitlab-server.d.ts.map +0 -1
  349. package/dist/src/testing/mock-gitlab-server.js +0 -1026
  350. package/dist/src/testing/mock-gitlab-server.js.map +0 -1
  351. package/dist/src/testing/mock-semgrep-server.d.ts +0 -32
  352. package/dist/src/testing/mock-semgrep-server.d.ts.map +0 -1
  353. package/dist/src/testing/mock-semgrep-server.js +0 -213
  354. package/dist/src/testing/mock-semgrep-server.js.map +0 -1
  355. package/dist/src/testing/mock-youtrack-server.d.ts +0 -11
  356. package/dist/src/testing/mock-youtrack-server.d.ts.map +0 -1
  357. package/dist/src/testing/mock-youtrack-server.js +0 -152
  358. package/dist/src/testing/mock-youtrack-server.js.map +0 -1
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Prometheus Metrics Collector
3
+ *
4
+ * Why: Observability for production deployments
5
+ *
6
+ * Tracks:
7
+ * - HTTP requests (status, method, path)
8
+ * - Session lifecycle (active, created, destroyed)
9
+ * - MCP operations (tool calls, duration, errors)
10
+ * - API calls to backend (operation, status, duration)
11
+ */
12
+ import { Registry } from 'prom-client';
13
+ export interface MetricsCollectorConfig {
14
+ enabled: boolean;
15
+ prefix?: string;
16
+ }
17
+ export declare class MetricsCollector {
18
+ private registry;
19
+ private enabled;
20
+ private httpRequestsTotal;
21
+ private httpRequestDuration;
22
+ private sessionsActive;
23
+ private sessionsCreatedTotal;
24
+ private sessionsDestroyedTotal;
25
+ private mcpToolCallsTotal;
26
+ private mcpToolCallDuration;
27
+ private mcpToolCallErrors;
28
+ private toolsTotal;
29
+ private toolsFiltered;
30
+ private toolsSession;
31
+ private toolFilterRejections;
32
+ private toolFilterPatterns;
33
+ private apiCallsTotal;
34
+ private apiCallDuration;
35
+ private apiCallErrors;
36
+ constructor(config: MetricsCollectorConfig);
37
+ /**
38
+ * Record HTTP request
39
+ */
40
+ recordHttpRequest(method: string, path: string, status: number, durationSeconds: number): void;
41
+ /**
42
+ * Record session created
43
+ */
44
+ recordSessionCreated(): void;
45
+ /**
46
+ * Record session destroyed
47
+ */
48
+ recordSessionDestroyed(): void;
49
+ /**
50
+ * Record MCP tool call
51
+ */
52
+ recordToolCall(tool: string, status: 'success' | 'error', durationSeconds: number): void;
53
+ /**
54
+ * Record MCP tool call error
55
+ */
56
+ recordToolCallError(tool: string, errorType: string): void;
57
+ recordToolsTotal(source: string, count: number): void;
58
+ recordToolsFiltered(source: string, action: string, count: number): void;
59
+ recordToolsSession(sessionId: string, count: number): void;
60
+ clearToolsSession(sessionId: string): void;
61
+ recordToolFilterRejection(tool: string, source: string): void;
62
+ recordToolFilterPatternCount(type: string, count: number): void;
63
+ /**
64
+ * Record API call to backend
65
+ */
66
+ recordApiCall(operation: string, status: number, durationSeconds: number): void;
67
+ /**
68
+ * Record API call error
69
+ */
70
+ recordApiCallError(operation: string, errorType: string): void;
71
+ /**
72
+ * Get metrics in Prometheus format
73
+ */
74
+ getMetrics(): Promise<string>;
75
+ /**
76
+ * Get registry (for testing)
77
+ */
78
+ getRegistry(): Registry;
79
+ /**
80
+ * Normalize path for metrics (remove dynamic segments)
81
+ *
82
+ * Why: Avoid high cardinality in metrics labels
83
+ *
84
+ * Examples:
85
+ * - /mcp?sessionId=abc123 -> /mcp
86
+ * - /metrics -> /metrics
87
+ * - /health -> /health
88
+ */
89
+ private normalizePath;
90
+ /**
91
+ * Get status label (2xx, 4xx, 5xx)
92
+ *
93
+ * Why: Group similar statuses to reduce cardinality
94
+ */
95
+ private getStatusLabel;
96
+ }
97
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/core/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAA6B,MAAM,aAAa,CAAC;AAElE,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,OAAO,CAAU;IAGzB,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,mBAAmB,CAAY;IAGvC,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,oBAAoB,CAAU;IACtC,OAAO,CAAC,sBAAsB,CAAU;IAGxC,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,mBAAmB,CAAY;IACvC,OAAO,CAAC,iBAAiB,CAAU;IAGnC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,oBAAoB,CAAU;IACtC,OAAO,CAAC,kBAAkB,CAAQ;IAGlC,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,eAAe,CAAY;IACnC,OAAO,CAAC,aAAa,CAAU;gBAEnB,MAAM,EAAE,sBAAsB;IA4H1C;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAmB9F;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAM5B;;OAEG;IACH,sBAAsB,IAAI,IAAI;IAM9B;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAOxF;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAK1D,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKrD,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKxE,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1D,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAK1C,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAK7D,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK/D;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAS/E;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAK9D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAOnC;;OAEG;IACH,WAAW,IAAI,QAAQ;IAIvB;;;;;;;;;OASG;IACH,OAAO,CAAC,aAAa;IAcrB;;;;OAIG;IACH,OAAO,CAAC,cAAc;CAOvB"}
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Prometheus Metrics Collector
3
+ *
4
+ * Why: Observability for production deployments
5
+ *
6
+ * Tracks:
7
+ * - HTTP requests (status, method, path)
8
+ * - Session lifecycle (active, created, destroyed)
9
+ * - MCP operations (tool calls, duration, errors)
10
+ * - API calls to backend (operation, status, duration)
11
+ */
12
+ import { Registry, Counter, Gauge, Histogram } from 'prom-client';
13
+ export class MetricsCollector {
14
+ constructor(config) {
15
+ this.enabled = config.enabled;
16
+ this.registry = new Registry();
17
+ const prefix = config.prefix || 'mcp_';
18
+ // HTTP metrics
19
+ this.httpRequestsTotal = new Counter({
20
+ name: `${prefix}http_requests_total`,
21
+ help: 'Total number of HTTP requests',
22
+ labelNames: ['method', 'path', 'status'],
23
+ registers: [this.registry],
24
+ });
25
+ this.httpRequestDuration = new Histogram({
26
+ name: `${prefix}http_request_duration_seconds`,
27
+ help: 'HTTP request duration in seconds',
28
+ labelNames: ['method', 'path', 'status'],
29
+ buckets: [0.001, 0.01, 0.05, 0.1, 0.5, 1, 2, 5],
30
+ registers: [this.registry],
31
+ });
32
+ // Session metrics
33
+ this.sessionsActive = new Gauge({
34
+ name: `${prefix}sessions_active`,
35
+ help: 'Number of active sessions',
36
+ registers: [this.registry],
37
+ });
38
+ this.sessionsCreatedTotal = new Counter({
39
+ name: `${prefix}sessions_created_total`,
40
+ help: 'Total number of sessions created',
41
+ registers: [this.registry],
42
+ });
43
+ this.sessionsDestroyedTotal = new Counter({
44
+ name: `${prefix}sessions_destroyed_total`,
45
+ help: 'Total number of sessions destroyed',
46
+ registers: [this.registry],
47
+ });
48
+ // MCP operation metrics
49
+ this.mcpToolCallsTotal = new Counter({
50
+ name: `${prefix}tool_calls_total`,
51
+ help: 'Total number of MCP tool calls',
52
+ labelNames: ['tool', 'status'],
53
+ registers: [this.registry],
54
+ });
55
+ this.mcpToolCallDuration = new Histogram({
56
+ name: `${prefix}tool_call_duration_seconds`,
57
+ help: 'MCP tool call duration in seconds',
58
+ labelNames: ['tool', 'status'],
59
+ buckets: [0.01, 0.05, 0.1, 0.5, 1, 2, 5, 10, 30],
60
+ registers: [this.registry],
61
+ });
62
+ this.mcpToolCallErrors = new Counter({
63
+ name: `${prefix}tool_call_errors_total`,
64
+ help: 'Total number of MCP tool call errors',
65
+ labelNames: ['tool', 'error_type'],
66
+ registers: [this.registry],
67
+ });
68
+ // Tool filter metrics
69
+ this.toolsTotal = new Gauge({
70
+ name: `${prefix}tools_total`,
71
+ help: 'Total number of tools by source',
72
+ labelNames: ['source'],
73
+ registers: [this.registry],
74
+ });
75
+ this.toolsFiltered = new Gauge({
76
+ name: `${prefix}tools_filtered`,
77
+ help: 'Number of tools after filtering',
78
+ labelNames: ['source', 'action'],
79
+ registers: [this.registry],
80
+ });
81
+ this.toolsSession = new Gauge({
82
+ name: `${prefix}tools_session`,
83
+ help: 'Number of tools available per session',
84
+ labelNames: ['session_id'],
85
+ registers: [this.registry],
86
+ });
87
+ this.toolFilterRejections = new Counter({
88
+ name: `${prefix}tool_filter_rejections_total`,
89
+ help: 'Number of tool calls blocked by tool filters',
90
+ labelNames: ['tool', 'source'],
91
+ registers: [this.registry],
92
+ });
93
+ this.toolFilterPatterns = new Gauge({
94
+ name: `${prefix}tool_filter_patterns`,
95
+ help: 'Number of active tool filter patterns by type',
96
+ labelNames: ['type'],
97
+ registers: [this.registry],
98
+ });
99
+ // API metrics
100
+ this.apiCallsTotal = new Counter({
101
+ name: `${prefix}api_calls_total`,
102
+ help: 'Total number of API calls to backend',
103
+ labelNames: ['operation', 'status'],
104
+ registers: [this.registry],
105
+ });
106
+ this.apiCallDuration = new Histogram({
107
+ name: `${prefix}api_call_duration_seconds`,
108
+ help: 'API call duration in seconds',
109
+ labelNames: ['operation', 'status'],
110
+ buckets: [0.01, 0.05, 0.1, 0.5, 1, 2, 5, 10],
111
+ registers: [this.registry],
112
+ });
113
+ this.apiCallErrors = new Counter({
114
+ name: `${prefix}api_call_errors_total`,
115
+ help: 'Total number of API call errors',
116
+ labelNames: ['operation', 'error_type'],
117
+ registers: [this.registry],
118
+ });
119
+ }
120
+ /**
121
+ * Record HTTP request
122
+ */
123
+ recordHttpRequest(method, path, status, durationSeconds) {
124
+ if (!this.enabled)
125
+ return;
126
+ this.httpRequestsTotal.inc({
127
+ method,
128
+ path: this.normalizePath(path),
129
+ status: status.toString(),
130
+ });
131
+ this.httpRequestDuration.observe({
132
+ method,
133
+ path: this.normalizePath(path),
134
+ status: status.toString(),
135
+ }, durationSeconds);
136
+ }
137
+ /**
138
+ * Record session created
139
+ */
140
+ recordSessionCreated() {
141
+ if (!this.enabled)
142
+ return;
143
+ this.sessionsCreatedTotal.inc();
144
+ this.sessionsActive.inc();
145
+ }
146
+ /**
147
+ * Record session destroyed
148
+ */
149
+ recordSessionDestroyed() {
150
+ if (!this.enabled)
151
+ return;
152
+ this.sessionsDestroyedTotal.inc();
153
+ this.sessionsActive.dec();
154
+ }
155
+ /**
156
+ * Record MCP tool call
157
+ */
158
+ recordToolCall(tool, status, durationSeconds) {
159
+ if (!this.enabled)
160
+ return;
161
+ this.mcpToolCallsTotal.inc({ tool, status });
162
+ this.mcpToolCallDuration.observe({ tool, status }, durationSeconds);
163
+ }
164
+ /**
165
+ * Record MCP tool call error
166
+ */
167
+ recordToolCallError(tool, errorType) {
168
+ if (!this.enabled)
169
+ return;
170
+ this.mcpToolCallErrors.inc({ tool, error_type: errorType });
171
+ }
172
+ recordToolsTotal(source, count) {
173
+ if (!this.enabled)
174
+ return;
175
+ this.toolsTotal.set({ source }, count);
176
+ }
177
+ recordToolsFiltered(source, action, count) {
178
+ if (!this.enabled)
179
+ return;
180
+ this.toolsFiltered.set({ source, action }, count);
181
+ }
182
+ recordToolsSession(sessionId, count) {
183
+ if (!this.enabled)
184
+ return;
185
+ this.toolsSession.set({ session_id: sessionId }, count);
186
+ }
187
+ clearToolsSession(sessionId) {
188
+ if (!this.enabled)
189
+ return;
190
+ this.toolsSession.remove({ session_id: sessionId });
191
+ }
192
+ recordToolFilterRejection(tool, source) {
193
+ if (!this.enabled)
194
+ return;
195
+ this.toolFilterRejections.inc({ tool, source });
196
+ }
197
+ recordToolFilterPatternCount(type, count) {
198
+ if (!this.enabled)
199
+ return;
200
+ this.toolFilterPatterns.set({ type }, count);
201
+ }
202
+ /**
203
+ * Record API call to backend
204
+ */
205
+ recordApiCall(operation, status, durationSeconds) {
206
+ if (!this.enabled)
207
+ return;
208
+ const statusLabel = this.getStatusLabel(status);
209
+ this.apiCallsTotal.inc({ operation, status: statusLabel });
210
+ this.apiCallDuration.observe({ operation, status: statusLabel }, durationSeconds);
211
+ }
212
+ /**
213
+ * Record API call error
214
+ */
215
+ recordApiCallError(operation, errorType) {
216
+ if (!this.enabled)
217
+ return;
218
+ this.apiCallErrors.inc({ operation, error_type: errorType });
219
+ }
220
+ /**
221
+ * Get metrics in Prometheus format
222
+ */
223
+ async getMetrics() {
224
+ if (!this.enabled) {
225
+ return '# Metrics disabled\n';
226
+ }
227
+ return this.registry.metrics();
228
+ }
229
+ /**
230
+ * Get registry (for testing)
231
+ */
232
+ getRegistry() {
233
+ return this.registry;
234
+ }
235
+ /**
236
+ * Normalize path for metrics (remove dynamic segments)
237
+ *
238
+ * Why: Avoid high cardinality in metrics labels
239
+ *
240
+ * Examples:
241
+ * - /mcp?sessionId=abc123 -> /mcp
242
+ * - /metrics -> /metrics
243
+ * - /health -> /health
244
+ */
245
+ normalizePath(path) {
246
+ // Remove query string
247
+ const pathWithoutQuery = path.split('?')[0];
248
+ // Known paths
249
+ if (pathWithoutQuery === '/mcp' ||
250
+ pathWithoutQuery === '/metrics' ||
251
+ pathWithoutQuery === '/health') {
252
+ return pathWithoutQuery;
253
+ }
254
+ return pathWithoutQuery;
255
+ }
256
+ /**
257
+ * Get status label (2xx, 4xx, 5xx)
258
+ *
259
+ * Why: Group similar statuses to reduce cardinality
260
+ */
261
+ getStatusLabel(status) {
262
+ if (status >= 200 && status < 300)
263
+ return '2xx';
264
+ if (status >= 300 && status < 400)
265
+ return '3xx';
266
+ if (status >= 400 && status < 500)
267
+ return '4xx';
268
+ if (status >= 500 && status < 600)
269
+ return '5xx';
270
+ return 'unknown';
271
+ }
272
+ }
273
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/core/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Tool name length warning and recommendations
3
+ *
4
+ * Why: Help users understand name length issues and choose appropriate strategy
5
+ */
6
+ import type { Logger } from './logger.js';
7
+ import { type OperationForNaming } from './naming.js';
8
+ export interface NameWarningOptions {
9
+ maxLength: number;
10
+ similarTopN: number;
11
+ similarityThreshold: number;
12
+ minParts?: number;
13
+ minLength?: number;
14
+ }
15
+ /**
16
+ * Collect operations that exceed name length limit
17
+ */
18
+ export declare function collectOffenders(operations: OperationForNaming[], maxLength: number): OperationForNaming[];
19
+ /**
20
+ * Generate warnings and suggestions for long tool names
21
+ */
22
+ export declare function generateNameWarnings(operations: OperationForNaming[], options: NameWarningOptions, logger: Logger): void;
23
+ //# sourceMappingURL=naming-warnings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming-warnings.d.ts","sourceRoot":"","sources":["../../../src/core/naming-warnings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAKL,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,kBAAkB,EAAE,EAChC,SAAS,EAAE,MAAM,GAChB,kBAAkB,EAAE,CAEtB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,kBAAkB,EAAE,EAChC,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE,MAAM,GACb,IAAI,CAiFN"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Tool name length warning and recommendations
3
+ *
4
+ * Why: Help users understand name length issues and choose appropriate strategy
5
+ */
6
+ import { shortenToolName, pickMostSimilarPairs, detectCollisions, NamingStrategy } from './naming.js';
7
+ /**
8
+ * Collect operations that exceed name length limit
9
+ */
10
+ export function collectOffenders(operations, maxLength) {
11
+ return operations.filter(op => op.operationId.length > maxLength);
12
+ }
13
+ /**
14
+ * Generate warnings and suggestions for long tool names
15
+ */
16
+ export function generateNameWarnings(operations, options, logger) {
17
+ const { maxLength, similarTopN, similarityThreshold } = options;
18
+ const offenders = collectOffenders(operations, maxLength);
19
+ if (offenders.length === 0) {
20
+ return; // No warnings needed
21
+ }
22
+ logger.warn(`\n${'='.repeat(80)}`);
23
+ logger.warn(`⚠️ Tool Name Length Warning`);
24
+ logger.warn(`${'='.repeat(80)}\n`);
25
+ logger.warn(`Detected ${offenders.length} tool names exceeding ${maxLength} characters.`);
26
+ logger.warn(`Long names may be truncated or cause issues in some MCP clients.\n`);
27
+ // Pick most similar pairs to show as examples
28
+ const similarPairs = pickMostSimilarPairs(offenders, similarTopN, similarityThreshold);
29
+ if (similarPairs.length > 0) {
30
+ logger.warn(`Showing ${similarPairs.length} most similar name pairs with shortening suggestions:\n`);
31
+ for (let i = 0; i < similarPairs.length; i++) {
32
+ const pair = similarPairs[i];
33
+ logger.warn(`${'-'.repeat(80)}`);
34
+ logger.warn(`Example ${i + 1}/${similarPairs.length}:`);
35
+ logger.warn(` Operation A: ${pair.opA.operationId} (${pair.opA.operationId.length} chars)`);
36
+ logger.warn(` Operation B: ${pair.opB.operationId} (${pair.opB.operationId.length} chars)`);
37
+ logger.warn(` Similarity: ${(pair.similarity * 100).toFixed(1)}%\n`);
38
+ // Show all strategies
39
+ const strategies = [NamingStrategy.Balanced, NamingStrategy.Iterative, NamingStrategy.Hash];
40
+ for (const strategy of strategies) {
41
+ const resultA = shortenToolName(pair.opA, strategy, maxLength, operations, {
42
+ minParts: options.minParts,
43
+ minLength: options.minLength,
44
+ });
45
+ const resultB = shortenToolName(pair.opB, strategy, maxLength, operations, {
46
+ minParts: options.minParts,
47
+ minLength: options.minLength,
48
+ });
49
+ const collision = resultA.name === resultB.name ? '⚠️ COLLISION' : '✓ No collision';
50
+ logger.warn(` Strategy: ${strategy}`);
51
+ logger.warn(` A: ${resultA.name} (${resultA.name.length} chars)`);
52
+ logger.warn(` B: ${resultB.name} (${resultB.name.length} chars)`);
53
+ logger.warn(` ${collision}\n`);
54
+ }
55
+ }
56
+ }
57
+ // Show collision statistics for each strategy
58
+ logger.warn(`${'-'.repeat(80)}`);
59
+ logger.warn(`Collision Analysis:\n`);
60
+ const strategies = [NamingStrategy.Balanced, NamingStrategy.Iterative, NamingStrategy.Hash];
61
+ for (const strategy of strategies) {
62
+ const collisions = detectCollisions(offenders, strategy, maxLength, {
63
+ minParts: options.minParts,
64
+ minLength: options.minLength,
65
+ });
66
+ const collisionCount = Array.from(collisions.values()).reduce((sum, ops) => sum + ops.length - 1, 0);
67
+ logger.warn(` ${strategy}: ${collisionCount} collision(s) among ${offenders.length} names`);
68
+ }
69
+ logger.warn(`\n${'-'.repeat(80)}`);
70
+ logger.warn(`How to Fix:\n`);
71
+ logger.warn(` 1. Choose a shortening strategy based on collision analysis above`);
72
+ logger.warn(` 2. Set environment variables:\n`);
73
+ logger.warn(` export MCP4_TOOLNAME_STRATEGY=balanced # or: iterative, hash, auto`);
74
+ logger.warn(` export MCP4_TOOLNAME_WARN_ONLY=false # Apply shortening`);
75
+ logger.warn(` export MCP4_TOOLNAME_MAX=45 # Optional: adjust limit`);
76
+ logger.warn(` export MCP4_TOOLNAME_MIN_PARTS=3 # Optional: min parts (for balanced)`);
77
+ logger.warn(` export MCP4_TOOLNAME_MIN_LENGTH=20 # Optional: min length (for balanced)\n`);
78
+ logger.warn(` Example for balanced strategy:`);
79
+ logger.warn(` export MCP4_TOOLNAME_STRATEGY=balanced MCP4_TOOLNAME_WARN_ONLY=false\n`);
80
+ logger.warn(`${'-'.repeat(80)}`);
81
+ logger.warn(`Summary: ${offenders.length} names need shortening. Choose strategy and restart.\n`);
82
+ }
83
+ //# sourceMappingURL=naming-warnings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming-warnings.js","sourceRoot":"","sources":["../../../src/core/naming-warnings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Tool name shortening strategies
3
+ *
4
+ * Why: MCP tool names combined with server name must stay under limits.
5
+ * Different strategies offer trade-offs between readability and compactness.
6
+ */
7
+ export declare enum NamingStrategy {
8
+ None = "none",
9
+ Balanced = "balanced",
10
+ Iterative = "iterative",
11
+ Hash = "hash",
12
+ Auto = "auto"
13
+ }
14
+ export interface OperationForNaming {
15
+ operationId: string;
16
+ method: string;
17
+ path: string;
18
+ tags?: string[];
19
+ }
20
+ export interface ShortenResult {
21
+ name: string;
22
+ truncated: boolean;
23
+ strategy: NamingStrategy;
24
+ originalLength: number;
25
+ partsUsed?: number;
26
+ }
27
+ export interface SimilarPair {
28
+ opA: OperationForNaming;
29
+ opB: OperationForNaming;
30
+ similarity: number;
31
+ }
32
+ export interface ShorteningOptions {
33
+ maxLength: number;
34
+ minParts?: number;
35
+ minLength?: number;
36
+ allOperations?: OperationForNaming[];
37
+ }
38
+ /**
39
+ * Shorten tool name using specified strategy
40
+ */
41
+ export declare function shortenToolName(op: OperationForNaming, strategy: NamingStrategy, maxLength: number, allOperations?: OperationForNaming[], options?: Partial<ShorteningOptions>): ShortenResult;
42
+ /**
43
+ * Generate stable short hash from string
44
+ */
45
+ export declare function stableHash(str: string, length?: number): string;
46
+ /**
47
+ * Calculate Levenshtein distance between two strings
48
+ */
49
+ export declare function levenshteinDistance(a: string, b: string): number;
50
+ /**
51
+ * Pick most similar pairs of operations
52
+ */
53
+ export declare function pickMostSimilarPairs(operations: OperationForNaming[], topN: number, threshold?: number): SimilarPair[];
54
+ /**
55
+ * Detect potential collisions when shortening multiple operations
56
+ */
57
+ export declare function detectCollisions(operations: OperationForNaming[], strategy: NamingStrategy, maxLength: number, options?: Partial<ShorteningOptions>): Map<string, OperationForNaming[]>;
58
+ //# sourceMappingURL=naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../../src/core/naming.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,oBAAY,cAAc;IACxB,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,kBAAkB,CAAC;IACxB,GAAG,EAAE,kBAAkB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACtC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,kBAAkB,EACtB,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,kBAAkB,EAAE,EACpC,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACnC,aAAa,CAoDf;AAiYD;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,CAUlE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBhE;AAaD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,kBAAkB,EAAE,EAChC,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,MAAa,GACvB,WAAW,EAAE,CA4Df;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,kBAAkB,EAAE,EAChC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACnC,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAmBnC"}