@confluentinc/mcp-confluent 1.3.0 → 1.5.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 (429) hide show
  1. package/README.md +180 -78
  2. package/assets/oauth-templates/callback-success.html +80 -0
  3. package/assets/oauth-templates/styles.html +101 -40
  4. package/config.example.yaml +36 -7
  5. package/config.oauth.example.yaml +14 -1
  6. package/dist/config/env-config.d.ts +9 -3
  7. package/dist/config/env-config.d.ts.map +1 -1
  8. package/dist/config/env-config.js +20 -34
  9. package/dist/config/env-config.js.map +1 -1
  10. package/dist/config/models.d.ts +108 -13
  11. package/dist/config/models.d.ts.map +1 -1
  12. package/dist/config/models.js +54 -37
  13. package/dist/config/models.js.map +1 -1
  14. package/dist/confluent/base-client-manager.d.ts +36 -1
  15. package/dist/confluent/base-client-manager.d.ts.map +1 -1
  16. package/dist/confluent/base-client-manager.js +4 -0
  17. package/dist/confluent/base-client-manager.js.map +1 -1
  18. package/dist/confluent/client-manager.d.ts +14 -0
  19. package/dist/confluent/client-manager.d.ts.map +1 -1
  20. package/dist/confluent/direct-client-manager.d.ts +2 -2
  21. package/dist/confluent/direct-client-manager.d.ts.map +1 -1
  22. package/dist/confluent/direct-client-manager.js +25 -17
  23. package/dist/confluent/direct-client-manager.js.map +1 -1
  24. package/dist/confluent/node-deps.d.ts +1 -0
  25. package/dist/confluent/node-deps.d.ts.map +1 -1
  26. package/dist/confluent/node-deps.js +7 -1
  27. package/dist/confluent/node-deps.js.map +1 -1
  28. package/dist/confluent/oauth/auth0-config.d.ts +26 -4
  29. package/dist/confluent/oauth/auth0-config.d.ts.map +1 -1
  30. package/dist/confluent/oauth/auth0-config.js +59 -19
  31. package/dist/confluent/oauth/auth0-config.js.map +1 -1
  32. package/dist/confluent/oauth/callback-pages.d.ts +9 -1
  33. package/dist/confluent/oauth/callback-pages.d.ts.map +1 -1
  34. package/dist/confluent/oauth/callback-pages.js +14 -5
  35. package/dist/confluent/oauth/callback-pages.js.map +1 -1
  36. package/dist/confluent/oauth/pkce-login.d.ts +20 -1
  37. package/dist/confluent/oauth/pkce-login.d.ts.map +1 -1
  38. package/dist/confluent/oauth/pkce-login.js +118 -9
  39. package/dist/confluent/oauth/pkce-login.js.map +1 -1
  40. package/dist/confluent/oauth/types.d.ts +1 -2
  41. package/dist/confluent/oauth/types.d.ts.map +1 -1
  42. package/dist/confluent/oauth-client-manager.d.ts +7 -4
  43. package/dist/confluent/oauth-client-manager.d.ts.map +1 -1
  44. package/dist/confluent/oauth-client-manager.js +34 -12
  45. package/dist/confluent/oauth-client-manager.js.map +1 -1
  46. package/dist/confluent/oauth-resource-resolvers.d.ts +11 -0
  47. package/dist/confluent/oauth-resource-resolvers.d.ts.map +1 -1
  48. package/dist/confluent/oauth-resource-resolvers.js +24 -0
  49. package/dist/confluent/oauth-resource-resolvers.js.map +1 -1
  50. package/dist/confluent/schema-registry-helper.d.ts +119 -16
  51. package/dist/confluent/schema-registry-helper.d.ts.map +1 -1
  52. package/dist/confluent/schema-registry-helper.js +303 -49
  53. package/dist/confluent/schema-registry-helper.js.map +1 -1
  54. package/dist/confluent/telemetry.d.ts +7 -1
  55. package/dist/confluent/telemetry.d.ts.map +1 -1
  56. package/dist/confluent/telemetry.js +6 -0
  57. package/dist/confluent/telemetry.js.map +1 -1
  58. package/dist/confluent/tools/base-tools.d.ts +207 -21
  59. package/dist/confluent/tools/base-tools.d.ts.map +1 -1
  60. package/dist/confluent/tools/base-tools.js +259 -20
  61. package/dist/confluent/tools/base-tools.js.map +1 -1
  62. package/dist/confluent/tools/cluster-arg-resolvers.d.ts +21 -0
  63. package/dist/confluent/tools/cluster-arg-resolvers.d.ts.map +1 -1
  64. package/dist/confluent/tools/cluster-arg-resolvers.js +45 -0
  65. package/dist/confluent/tools/cluster-arg-resolvers.js.map +1 -1
  66. package/dist/confluent/tools/connection-predicates.d.ts +83 -12
  67. package/dist/confluent/tools/connection-predicates.d.ts.map +1 -1
  68. package/dist/confluent/tools/connection-predicates.js +85 -11
  69. package/dist/confluent/tools/connection-predicates.js.map +1 -1
  70. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts +2 -1
  71. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts.map +1 -1
  72. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js +37 -4
  73. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js.map +1 -1
  74. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.d.ts +3 -3
  75. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.d.ts.map +1 -1
  76. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.js +11 -6
  77. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.js.map +1 -1
  78. package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts +3 -3
  79. package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts.map +1 -1
  80. package/dist/confluent/tools/handlers/catalog/create-topic-tags.js +11 -6
  81. package/dist/confluent/tools/handlers/catalog/create-topic-tags.js.map +1 -1
  82. package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts +3 -3
  83. package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts.map +1 -1
  84. package/dist/confluent/tools/handlers/catalog/delete-tag.js +11 -6
  85. package/dist/confluent/tools/handlers/catalog/delete-tag.js.map +1 -1
  86. package/dist/confluent/tools/handlers/catalog/list-tags.d.ts +4 -4
  87. package/dist/confluent/tools/handlers/catalog/list-tags.d.ts.map +1 -1
  88. package/dist/confluent/tools/handlers/catalog/list-tags.js +16 -7
  89. package/dist/confluent/tools/handlers/catalog/list-tags.js.map +1 -1
  90. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts +3 -3
  91. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts.map +1 -1
  92. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.js +11 -6
  93. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.js.map +1 -1
  94. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts +2 -1
  95. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts.map +1 -1
  96. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js +3 -2
  97. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js.map +1 -1
  98. package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts +22 -9
  99. package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts.map +1 -1
  100. package/dist/confluent/tools/handlers/connect/connect-tool-handler.js +35 -11
  101. package/dist/confluent/tools/handlers/connect/connect-tool-handler.js.map +1 -1
  102. package/dist/confluent/tools/handlers/connect/create-connector-handler.d.ts.map +1 -1
  103. package/dist/confluent/tools/handlers/connect/create-connector-handler.js +1 -2
  104. package/dist/confluent/tools/handlers/connect/create-connector-handler.js.map +1 -1
  105. package/dist/confluent/tools/handlers/connect/delete-connector-handler.d.ts.map +1 -1
  106. package/dist/confluent/tools/handlers/connect/delete-connector-handler.js +1 -2
  107. package/dist/confluent/tools/handlers/connect/delete-connector-handler.js.map +1 -1
  108. package/dist/confluent/tools/handlers/connect/{read-connectors-handler.d.ts → get-connector-config-handler.d.ts} +2 -3
  109. package/dist/confluent/tools/handlers/connect/get-connector-config-handler.d.ts.map +1 -0
  110. package/dist/confluent/tools/handlers/connect/get-connector-config-handler.js +34 -0
  111. package/dist/confluent/tools/handlers/connect/get-connector-config-handler.js.map +1 -0
  112. package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.d.ts +9 -0
  113. package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.d.ts.map +1 -0
  114. package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.js +65 -0
  115. package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.js.map +1 -0
  116. package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.d.ts +9 -0
  117. package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.d.ts.map +1 -0
  118. package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.js +130 -0
  119. package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.js.map +1 -0
  120. package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.d.ts +9 -0
  121. package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.d.ts.map +1 -0
  122. package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.js +269 -0
  123. package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.js.map +1 -0
  124. package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.d.ts +9 -0
  125. package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.d.ts.map +1 -0
  126. package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.js +34 -0
  127. package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.js.map +1 -0
  128. package/dist/confluent/tools/handlers/connect/get-connector-status-handler.d.ts +9 -0
  129. package/dist/confluent/tools/handlers/connect/get-connector-status-handler.d.ts.map +1 -0
  130. package/dist/confluent/tools/handlers/connect/get-connector-status-handler.js +43 -0
  131. package/dist/confluent/tools/handlers/connect/get-connector-status-handler.js.map +1 -0
  132. package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.d.ts +9 -0
  133. package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.d.ts.map +1 -0
  134. package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.js +34 -0
  135. package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.js.map +1 -0
  136. package/dist/confluent/tools/handlers/connect/list-connectors-handler.d.ts.map +1 -1
  137. package/dist/confluent/tools/handlers/connect/list-connectors-handler.js +1 -2
  138. package/dist/confluent/tools/handlers/connect/list-connectors-handler.js.map +1 -1
  139. package/dist/confluent/tools/handlers/connect/pause-connector-handler.d.ts +9 -0
  140. package/dist/confluent/tools/handlers/connect/pause-connector-handler.d.ts.map +1 -0
  141. package/dist/confluent/tools/handlers/connect/pause-connector-handler.js +34 -0
  142. package/dist/confluent/tools/handlers/connect/pause-connector-handler.js.map +1 -0
  143. package/dist/confluent/tools/handlers/connect/restart-connector-handler.d.ts +9 -0
  144. package/dist/confluent/tools/handlers/connect/restart-connector-handler.d.ts.map +1 -0
  145. package/dist/confluent/tools/handlers/connect/restart-connector-handler.js +34 -0
  146. package/dist/confluent/tools/handlers/connect/restart-connector-handler.js.map +1 -0
  147. package/dist/confluent/tools/handlers/connect/resume-connector-handler.d.ts +9 -0
  148. package/dist/confluent/tools/handlers/connect/resume-connector-handler.d.ts.map +1 -0
  149. package/dist/confluent/tools/handlers/connect/resume-connector-handler.js +34 -0
  150. package/dist/confluent/tools/handlers/connect/resume-connector-handler.js.map +1 -0
  151. package/dist/confluent/tools/handlers/connect/update-connector-config-handler.d.ts +9 -0
  152. package/dist/confluent/tools/handlers/connect/update-connector-config-handler.d.ts.map +1 -0
  153. package/dist/confluent/tools/handlers/connect/update-connector-config-handler.js +43 -0
  154. package/dist/confluent/tools/handlers/connect/update-connector-config-handler.js.map +1 -0
  155. package/dist/confluent/tools/handlers/diagnostics/config-help-handler.d.ts +42 -0
  156. package/dist/confluent/tools/handlers/diagnostics/config-help-handler.d.ts.map +1 -0
  157. package/dist/confluent/tools/handlers/diagnostics/config-help-handler.js +297 -0
  158. package/dist/confluent/tools/handlers/diagnostics/config-help-handler.js.map +1 -0
  159. package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.d.ts +31 -0
  160. package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.d.ts.map +1 -0
  161. package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.js +116 -0
  162. package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.js.map +1 -0
  163. package/dist/confluent/tools/handlers/diagnostics/describe-fields.d.ts +52 -0
  164. package/dist/confluent/tools/handlers/diagnostics/describe-fields.d.ts.map +1 -0
  165. package/dist/confluent/tools/handlers/diagnostics/describe-fields.js +114 -0
  166. package/dist/confluent/tools/handlers/diagnostics/describe-fields.js.map +1 -0
  167. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts +21 -43
  168. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts.map +1 -1
  169. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.js +105 -78
  170. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.js.map +1 -1
  171. package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.d.ts +27 -0
  172. package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.d.ts.map +1 -0
  173. package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.js +93 -0
  174. package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.js.map +1 -0
  175. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.d.ts +2 -1
  176. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.d.ts.map +1 -1
  177. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.js +2 -1
  178. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.js.map +1 -1
  179. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.d.ts +2 -1
  180. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.d.ts.map +1 -1
  181. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.js +2 -1
  182. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.js.map +1 -1
  183. package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts +8 -7
  184. package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts.map +1 -1
  185. package/dist/confluent/tools/handlers/environments/list-environments-handler.js +8 -7
  186. package/dist/confluent/tools/handlers/environments/list-environments-handler.js.map +1 -1
  187. package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts +2 -1
  188. package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts.map +1 -1
  189. package/dist/confluent/tools/handlers/environments/read-environment-handler.js +3 -2
  190. package/dist/confluent/tools/handlers/environments/read-environment-handler.js.map +1 -1
  191. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts +16 -2
  192. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts.map +1 -1
  193. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js +4 -4
  194. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js.map +1 -1
  195. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts.map +1 -1
  196. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js +43 -30
  197. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js.map +1 -1
  198. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts.map +1 -1
  199. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js +43 -30
  200. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js.map +1 -1
  201. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts.map +1 -1
  202. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js +18 -11
  203. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js.map +1 -1
  204. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts.map +1 -1
  205. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js +23 -16
  206. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js.map +1 -1
  207. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts.map +1 -1
  208. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js +23 -16
  209. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js.map +1 -1
  210. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.d.ts.map +1 -1
  211. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js +27 -22
  212. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js.map +1 -1
  213. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.d.ts.map +1 -1
  214. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js +20 -12
  215. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js.map +1 -1
  216. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts.map +1 -1
  217. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js +20 -12
  218. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js.map +1 -1
  219. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts.map +1 -1
  220. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js +20 -18
  221. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js.map +1 -1
  222. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts.map +1 -1
  223. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js +24 -22
  224. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js.map +1 -1
  225. package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts +15 -1
  226. package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts.map +1 -1
  227. package/dist/confluent/tools/handlers/flink/flink-sql-helper.js +133 -57
  228. package/dist/confluent/tools/handlers/flink/flink-sql-helper.js.map +1 -1
  229. package/dist/confluent/tools/handlers/flink/flink-tool-handler.d.ts +29 -7
  230. package/dist/confluent/tools/handlers/flink/flink-tool-handler.d.ts.map +1 -1
  231. package/dist/confluent/tools/handlers/flink/flink-tool-handler.js +38 -8
  232. package/dist/confluent/tools/handlers/flink/flink-tool-handler.js.map +1 -1
  233. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts.map +1 -1
  234. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js +20 -12
  235. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js.map +1 -1
  236. package/dist/confluent/tools/handlers/flink/{read-flink-statement-handler.d.ts → get-flink-statement-results-handler.d.ts} +2 -2
  237. package/dist/confluent/tools/handlers/flink/get-flink-statement-results-handler.d.ts.map +1 -0
  238. package/dist/confluent/tools/handlers/flink/{read-flink-statement-handler.js → get-flink-statement-results-handler.js} +30 -22
  239. package/dist/confluent/tools/handlers/flink/get-flink-statement-results-handler.js.map +1 -0
  240. package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.d.ts +10 -0
  241. package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.d.ts.map +1 -0
  242. package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.js +118 -0
  243. package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.js.map +1 -0
  244. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts.map +1 -1
  245. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js +19 -18
  246. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js.map +1 -1
  247. package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts +2 -1
  248. package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts.map +1 -1
  249. package/dist/confluent/tools/handlers/kafka/alter-topic-config.js +3 -2
  250. package/dist/confluent/tools/handlers/kafka/alter-topic-config.js.map +1 -1
  251. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts +223 -28
  252. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts.map +1 -1
  253. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js +832 -68
  254. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js.map +1 -1
  255. package/dist/confluent/tools/handlers/kafka/consumer-group-enums.d.ts +48 -0
  256. package/dist/confluent/tools/handlers/kafka/consumer-group-enums.d.ts.map +1 -0
  257. package/dist/confluent/tools/handlers/kafka/consumer-group-enums.js +84 -0
  258. package/dist/confluent/tools/handlers/kafka/consumer-group-enums.js.map +1 -0
  259. package/dist/confluent/tools/handlers/kafka/consumer-group-helpers.d.ts +54 -0
  260. package/dist/confluent/tools/handlers/kafka/consumer-group-helpers.d.ts.map +1 -0
  261. package/dist/confluent/tools/handlers/kafka/consumer-group-helpers.js +89 -0
  262. package/dist/confluent/tools/handlers/kafka/consumer-group-helpers.js.map +1 -0
  263. package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts +2 -1
  264. package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts.map +1 -1
  265. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js +14 -4
  266. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js.map +1 -1
  267. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts +2 -1
  268. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts.map +1 -1
  269. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js +3 -2
  270. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js.map +1 -1
  271. package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.d.ts +64 -0
  272. package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.d.ts.map +1 -0
  273. package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.js +140 -0
  274. package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.js.map +1 -0
  275. package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.d.ts +73 -0
  276. package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.d.ts.map +1 -0
  277. package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.js +337 -0
  278. package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.js.map +1 -0
  279. package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.d.ts +43 -0
  280. package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.d.ts.map +1 -0
  281. package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.js +123 -0
  282. package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.js.map +1 -0
  283. package/dist/confluent/tools/handlers/kafka/get-topic-config.d.ts +2 -1
  284. package/dist/confluent/tools/handlers/kafka/get-topic-config.d.ts.map +1 -1
  285. package/dist/confluent/tools/handlers/kafka/get-topic-config.js +3 -2
  286. package/dist/confluent/tools/handlers/kafka/get-topic-config.js.map +1 -1
  287. package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.d.ts +45 -0
  288. package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.d.ts.map +1 -0
  289. package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.js +86 -0
  290. package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.js.map +1 -0
  291. package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts +2 -1
  292. package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts.map +1 -1
  293. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js +3 -2
  294. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js.map +1 -1
  295. package/dist/confluent/tools/handlers/kafka/partition-watermarks.d.ts +54 -0
  296. package/dist/confluent/tools/handlers/kafka/partition-watermarks.d.ts.map +1 -0
  297. package/dist/confluent/tools/handlers/kafka/partition-watermarks.js +56 -0
  298. package/dist/confluent/tools/handlers/kafka/partition-watermarks.js.map +1 -0
  299. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.d.ts +13 -5
  300. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.d.ts.map +1 -1
  301. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js +145 -47
  302. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js.map +1 -1
  303. package/dist/confluent/tools/handlers/kafka/topic-metadata.d.ts +18 -0
  304. package/dist/confluent/tools/handlers/kafka/topic-metadata.d.ts.map +1 -0
  305. package/dist/confluent/tools/handlers/kafka/topic-metadata.js +18 -0
  306. package/dist/confluent/tools/handlers/kafka/topic-metadata.js.map +1 -0
  307. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts +3 -3
  308. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts.map +1 -1
  309. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js +5 -4
  310. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js.map +1 -1
  311. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts +3 -3
  312. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts.map +1 -1
  313. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js +8 -5
  314. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js.map +1 -1
  315. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts +2 -1
  316. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts.map +1 -1
  317. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.js +4 -2
  318. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.js.map +1 -1
  319. package/dist/confluent/tools/handlers/schema/create-schema-handler.d.ts +10 -0
  320. package/dist/confluent/tools/handlers/schema/create-schema-handler.d.ts.map +1 -0
  321. package/dist/confluent/tools/handlers/schema/create-schema-handler.js +76 -0
  322. package/dist/confluent/tools/handlers/schema/create-schema-handler.js.map +1 -0
  323. package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts +2 -1
  324. package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts.map +1 -1
  325. package/dist/confluent/tools/handlers/schema/delete-schema-handler.js +3 -2
  326. package/dist/confluent/tools/handlers/schema/delete-schema-handler.js.map +1 -1
  327. package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts +2 -1
  328. package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts.map +1 -1
  329. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js +3 -2
  330. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js.map +1 -1
  331. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.d.ts +3 -3
  332. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.d.ts.map +1 -1
  333. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.js +11 -6
  334. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.js.map +1 -1
  335. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.d.ts +3 -3
  336. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.d.ts.map +1 -1
  337. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.js +11 -6
  338. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.js.map +1 -1
  339. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.d.ts.map +1 -1
  340. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js +2 -2
  341. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js.map +1 -1
  342. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.d.ts.map +1 -1
  343. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js +2 -2
  344. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js.map +1 -1
  345. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.d.ts.map +1 -1
  346. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js +2 -2
  347. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js.map +1 -1
  348. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.d.ts.map +1 -1
  349. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js +2 -2
  350. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js.map +1 -1
  351. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.d.ts.map +1 -1
  352. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js +1 -1
  353. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js.map +1 -1
  354. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.d.ts.map +1 -1
  355. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js +2 -3
  356. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js.map +1 -1
  357. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.d.ts +17 -11
  358. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.d.ts.map +1 -1
  359. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.js +19 -15
  360. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.js.map +1 -1
  361. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.d.ts.map +1 -1
  362. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.js +2 -2
  363. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.js.map +1 -1
  364. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.d.ts.map +1 -1
  365. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js +2 -2
  366. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js.map +1 -1
  367. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.d.ts.map +1 -1
  368. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js +2 -2
  369. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js.map +1 -1
  370. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.d.ts.map +1 -1
  371. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js +2 -2
  372. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js.map +1 -1
  373. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.d.ts.map +1 -1
  374. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js +1 -1
  375. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js.map +1 -1
  376. package/dist/confluent/tools/tool-availability.d.ts +84 -36
  377. package/dist/confluent/tools/tool-availability.d.ts.map +1 -1
  378. package/dist/confluent/tools/tool-availability.js +106 -65
  379. package/dist/confluent/tools/tool-availability.js.map +1 -1
  380. package/dist/confluent/tools/tool-metadata-handler.d.ts +51 -0
  381. package/dist/confluent/tools/tool-metadata-handler.d.ts.map +1 -0
  382. package/dist/confluent/tools/tool-metadata-handler.js +61 -0
  383. package/dist/confluent/tools/tool-metadata-handler.js.map +1 -0
  384. package/dist/confluent/tools/tool-name.d.ts +22 -3
  385. package/dist/confluent/tools/tool-name.d.ts.map +1 -1
  386. package/dist/confluent/tools/tool-name.js +21 -2
  387. package/dist/confluent/tools/tool-name.js.map +1 -1
  388. package/dist/confluent/tools/tool-registry.d.ts +1 -2
  389. package/dist/confluent/tools/tool-registry.d.ts.map +1 -1
  390. package/dist/confluent/tools/tool-registry.js +60 -7
  391. package/dist/confluent/tools/tool-registry.js.map +1 -1
  392. package/dist/env-schema.d.ts +1 -1
  393. package/dist/env-schema.d.ts.map +1 -1
  394. package/dist/env-schema.js +10 -12
  395. package/dist/env-schema.js.map +1 -1
  396. package/dist/env.d.ts +1 -1
  397. package/dist/index.d.ts +54 -64
  398. package/dist/index.d.ts.map +1 -1
  399. package/dist/index.js +78 -301
  400. package/dist/index.js.map +1 -1
  401. package/dist/lazy.d.ts +4 -2
  402. package/dist/lazy.d.ts.map +1 -1
  403. package/dist/lazy.js +27 -12
  404. package/dist/lazy.js.map +1 -1
  405. package/dist/mcp/server.d.ts.map +1 -1
  406. package/dist/mcp/server.js +9 -5
  407. package/dist/mcp/server.js.map +1 -1
  408. package/dist/preflight.d.ts +33 -0
  409. package/dist/preflight.d.ts.map +1 -0
  410. package/dist/preflight.js +68 -0
  411. package/dist/preflight.js.map +1 -0
  412. package/dist/server-main.d.ts +98 -0
  413. package/dist/server-main.d.ts.map +1 -0
  414. package/dist/server-main.js +383 -0
  415. package/dist/server-main.js.map +1 -0
  416. package/dist/server-runtime.d.ts +20 -5
  417. package/dist/server-runtime.d.ts.map +1 -1
  418. package/dist/server-runtime.js +45 -28
  419. package/dist/server-runtime.js.map +1 -1
  420. package/dist/utils/quote-join-ids.d.ts +9 -0
  421. package/dist/utils/quote-join-ids.d.ts.map +1 -0
  422. package/dist/utils/quote-join-ids.js +11 -0
  423. package/dist/utils/quote-join-ids.js.map +1 -0
  424. package/package.json +33 -34
  425. package/dist/confluent/tools/handlers/connect/read-connectors-handler.d.ts.map +0 -1
  426. package/dist/confluent/tools/handlers/connect/read-connectors-handler.js +0 -54
  427. package/dist/confluent/tools/handlers/connect/read-connectors-handler.js.map +0 -1
  428. package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.d.ts.map +0 -1
  429. package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.js.map +0 -1
@@ -1,11 +1,11 @@
1
1
  import type { ToolAnnotations } from "@modelcontextprotocol/sdk/types.js";
2
- import type { ConnectionConfig } from "../../config/models.js";
2
+ import type { ConnectionConfig, DirectConnectionConfig } from "../../config/models.js";
3
3
  import type { BaseClientManager } from "../../confluent/base-client-manager.js";
4
4
  import { CallToolResult } from "../../confluent/schema.js";
5
5
  import { ConnectionPredicate, PredicateResult } from "../../confluent/tools/connection-predicates.js";
6
6
  import { ToolName } from "../../confluent/tools/tool-name.js";
7
7
  import { ServerRuntime } from "../../server-runtime.js";
8
- import { ZodRawShape } from "zod";
8
+ import { z, ZodRawShape } from "zod";
9
9
  /**
10
10
  * Standard MCP tool annotations.
11
11
  * Tools should reference these constants rather than creating ad-hoc instances.
@@ -13,9 +13,51 @@ import { ZodRawShape } from "zod";
13
13
  export declare const READ_ONLY: ToolAnnotations;
14
14
  export declare const CREATE_UPDATE: ToolAnnotations;
15
15
  export declare const DESTRUCTIVE: ToolAnnotations;
16
+ /**
17
+ * Opening clause of the injected `connectionId` parameter description, before the
18
+ * quoted, comma-separated list of viable connection ids (see
19
+ * {@linkcode quoteJoinIds}) is appended.
20
+ */
21
+ export declare const CONNECTION_ID_DESCRIPTION_PREFIX = "Which configured connection to target. One of: ";
22
+ /**
23
+ * Sentence appended to the `connectionId` description that steers the agent at the
24
+ * discovery tool. Emitted only when that tool is itself reachable; the joining space
25
+ * is added at the call site so a blocked tool leaves no dangling trailing space.
26
+ */
27
+ export declare const LIST_CONFIGURED_CONNECTIONS_POINTER = "Discover connections and learn what tools are supported by each connection by invoking 'list-configured-connections'.";
28
+ /**
29
+ * Operator-facing taxonomy of tool kinds.
30
+ *
31
+ * Answers "what kind of tool is this?" — orthogonal to the
32
+ * {@linkcode ConnectionPredicate}-based "is this tool enabled?" question that
33
+ * lives next door. Predicates gate advertisement; categories classify intent.
34
+ */
35
+ export declare enum ToolCategory {
36
+ Billing = "billing",
37
+ Catalog = "catalog",
38
+ ConfluentCloud = "confluent-cloud",
39
+ Connect = "connect",
40
+ Docs = "docs",
41
+ Flink = "flink",
42
+ Kafka = "kafka",
43
+ McpServerDiagnostics = "mcp-server-diagnostics",
44
+ Metrics = "metrics",
45
+ SchemaRegistry = "schema-registry",
46
+ Tableflow = "tableflow"
47
+ }
16
48
  export interface ToolHandler {
49
+ /** Handle a tool invocation. */
17
50
  handle(runtime: ServerRuntime, toolArguments: Record<string, unknown> | undefined, sessionId?: string): Promise<CallToolResult> | CallToolResult;
18
- getToolConfig(): ToolConfig;
51
+ /**
52
+ * Produce the actual config registered with MCP for this tool, injecting a
53
+ * required `connectionId` parameter when the server holds more than one
54
+ * connection. See {@linkcode BaseToolHandler.getRegisteredToolConfig} for the
55
+ * rules.
56
+ *
57
+ * This method is called when setting up the MCP server, and we ourselves make
58
+ * the downcall to the handler-authored `getToolConfig()`.
59
+ */
60
+ getRegisteredToolConfig(runtime: ServerRuntime): RegisteredToolConfig;
19
61
  /**
20
62
  * The connection predicate that gates this tool's enablement. Lifted onto
21
63
  * the interface so the MCP tool-call wrapper can compare it against
@@ -24,6 +66,12 @@ export interface ToolHandler {
24
66
  * {@linkcode BaseToolHandler.predicate} for the rules around setting it.
25
67
  */
26
68
  readonly predicate: ConnectionPredicate;
69
+ /**
70
+ * The {@linkcode ToolCategory} this tool belongs to — operator-facing
71
+ * taxonomy, orthogonal to {@linkcode predicate}. See
72
+ * {@linkcode BaseToolHandler.category} for the rules around setting it.
73
+ */
74
+ readonly category: ToolCategory;
27
75
  /**
28
76
  * IDs of connections that satisfy this tool's service requirements. A
29
77
  * non-empty result enables the tool; an empty result disables it. Always a
@@ -42,6 +90,16 @@ export interface ToolHandler {
42
90
  * `describe-tool-availability` diagnostic tool.
43
91
  */
44
92
  connectionVerdicts(runtime: ServerRuntime): Map<string, PredicateResult>;
93
+ /**
94
+ * Whether this tool is enabled irrespective of the configured connections.
95
+ * See {@linkcode BaseToolHandler.isConnectionIndependent}.
96
+ */
97
+ readonly isConnectionIndependent: boolean;
98
+ /**
99
+ * The connection id this invocation routes to, or `undefined` when it routes
100
+ * to none. See {@linkcode BaseToolHandler.resolvedTargetConnectionId}.
101
+ */
102
+ resolvedTargetConnectionId(runtime: ServerRuntime, toolArguments: Record<string, unknown> | undefined): string | undefined;
45
103
  }
46
104
  export interface ToolConfig {
47
105
  name: ToolName;
@@ -49,9 +107,65 @@ export interface ToolConfig {
49
107
  inputSchema: ZodRawShape;
50
108
  annotations: ToolAnnotations;
51
109
  }
110
+ /**
111
+ * The config actually registered with MCP, produced by
112
+ * {@linkcode BaseToolHandler.getRegisteredToolConfig}. Differs from the
113
+ * handler-authored {@linkcode ToolConfig} in that `inputSchema` is a resolved,
114
+ * strict Zod object rather than a bare shape: strict so unknown parameters are
115
+ * rejected (not silently stripped) before `handle()` runs, and resolved because
116
+ * a multi-connection server injects the required `connectionId` enum into it.
117
+ */
118
+ export interface RegisteredToolConfig extends Omit<ToolConfig, "inputSchema"> {
119
+ inputSchema: z.ZodObject;
120
+ }
121
+ /**
122
+ * What the connection-resolution helpers hand back: the chosen connection id,
123
+ * its resolved config, and the client manager bound to it.
124
+ *
125
+ * Generic over the connection arm so the type-neutral resolvers
126
+ * ({@linkcode BaseToolHandler.resolveConnection}) and the direct-narrowing one
127
+ * ({@linkcode BaseToolHandler.resolveDirectConnection}) share a single name —
128
+ * the latter instantiates it via the {@link ResolvedDirectConnection} alias.
129
+ */
130
+ export interface ResolvedConnection<C extends ConnectionConfig = ConnectionConfig> {
131
+ connId: string;
132
+ conn: C;
133
+ clientManager: BaseClientManager;
134
+ }
135
+ /**
136
+ * A {@link ResolvedConnection} pre-narrowed to the direct arm — the return type
137
+ * of {@linkcode BaseToolHandler.resolveDirectConnection}.
138
+ */
139
+ export type ResolvedDirectConnection = ResolvedConnection<DirectConnectionConfig>;
52
140
  export declare abstract class BaseToolHandler implements ToolHandler {
53
141
  abstract handle(runtime: ServerRuntime, toolArguments: Record<string, unknown> | undefined, sessionId?: string): Promise<CallToolResult> | CallToolResult;
54
- abstract getToolConfig(): ToolConfig;
142
+ protected abstract getToolConfig(): ToolConfig;
143
+ /**
144
+ * Produce the actual config registered with MCP for this tool.
145
+ *
146
+ * * If the tool is connection-oriented and the server is configured
147
+ * with multiple connections, injects a required `connectionId` parameter
148
+ * indicating which connection the tool call should route to.
149
+ * See {@linkcode registeredInputShape} for more details.
150
+ *
151
+ * * Wrap the input schema in `z.object(...).strict()` to uniformly reject
152
+ * unknown parameters before `handle()` runs.
153
+ *
154
+ * This method is called for each active tool when setting up the MCP server.
155
+ *
156
+ * @final — concrete on `BaseToolHandler`; subclasses must not override.
157
+ */
158
+ getRegisteredToolConfig(runtime: ServerRuntime): RegisteredToolConfig;
159
+ /**
160
+ * The input shape to register, before strict-wrapping: the authored shape,
161
+ * plus a required `connectionId` enum when the server holds more than one
162
+ * connection AND this tool is connection-oriented. A single-element enum (when
163
+ * only one connection is viable) is still injected on a multi-connection server,
164
+ * so that an explicit request for a non-viable connection (e.g. to a disabled
165
+ * tool because it is read_only) is rejected by the enum rather than silently
166
+ * auto-routed.
167
+ */
168
+ private registeredInputShape;
55
169
  /**
56
170
  * The connection predicate that gates this tool. The single customization
57
171
  * seam for tool enablement — declared as a one-line readonly property:
@@ -84,8 +198,17 @@ export declare abstract class BaseToolHandler implements ToolHandler {
84
198
  */
85
199
  abstract readonly predicate: ConnectionPredicate;
86
200
  /**
87
- * IDs of connections that satisfy this tool's {@linkcode predicate}. A
88
- * non-empty result enables the tool; an empty result disables it.
201
+ * The {@linkcode ToolCategory} this tool belongs to — operator-facing
202
+ * taxonomy answering "what kind of tool is this?" Orthogonal to
203
+ * {@linkcode predicate} (which gates advertisement); category classifies
204
+ * intent for grouping in diagnostic surfaces and AI-client UX.
205
+ */
206
+ abstract readonly category: ToolCategory;
207
+ /**
208
+ * IDs of connections that satisfy this tool's {@linkcode predicate} and are
209
+ * not blocked by the read-only overlay. A non-empty result enables the tool;
210
+ * an empty result disables it. Derived from {@linkcode connectionVerdicts} so
211
+ * the two stay in lockstep.
89
212
  *
90
213
  * Customize tool gating by declaring {@linkcode predicate}, never by
91
214
  * replacing this derivation.
@@ -94,9 +217,40 @@ export declare abstract class BaseToolHandler implements ToolHandler {
94
217
  */
95
218
  enabledConnectionIds(runtime: ServerRuntime): string[];
96
219
  /**
97
- * Per-connection verdict map for this tool, derived from
98
- * {@linkcode predicate}. Powers grouped startup logging and
99
- * the diagnostic-tool surface.
220
+ * Whether this tool is enabled regardless of the configured connections —
221
+ * true exactly when its {@linkcode predicate} is `alwaysEnabled`, the only
222
+ * predicate that returns enabled without inspecting a connection. Such tools
223
+ * (docs lookup, server diagnostics) never route to a connection, so they
224
+ * register even on a zero-connection config, where the per-connection verdict
225
+ * map driving {@linkcode enabledConnectionIds} is empty.
226
+ */
227
+ get isConnectionIndependent(): boolean;
228
+ /**
229
+ * The connection id this invocation routes to — the OAuth-login gate uses it
230
+ * to launch the browser flow only when a call actually targets the OAuth
231
+ * connection, not merely because one exists somewhere in the config.
232
+ *
233
+ * Returns `undefined` for a connection-independent tool — it routes to no
234
+ * connection, so there is nothing to pre-launch a login for.
235
+ *
236
+ * Otherwise delegates to {@linkcode resolveConnection} so routing is decided
237
+ * in one place rather than duplicated in the gate, and propagates its throw.
238
+ * Every throw path there is a `"Wacky --"` invariant violation: the injected
239
+ * schema (see {@linkcode getRegisteredToolConfig}) makes `connectionId`
240
+ * required for multi-connection tools and strips it for single-connection
241
+ * ones, so a call that can't resolve means that contract broke. Surfacing the
242
+ * error rather than swallowing it to `undefined` lets the broken invariant
243
+ * reach the caller instead of being silently re-discovered inside `handle()`.
244
+ *
245
+ * @final — concrete on `BaseToolHandler`; subclasses must not override.
246
+ */
247
+ resolvedTargetConnectionId(runtime: ServerRuntime, toolArguments: Record<string, unknown> | undefined): string | undefined;
248
+ /**
249
+ * Per-connection verdict map for this tool — the single source of truth for
250
+ * enablement. Each verdict composes the {@linkcode predicate} with the
251
+ * read-only overlay (see {@linkcode connectionVerdict}). Powers grouped
252
+ * startup logging, the diagnostic-tool surface, and
253
+ * {@linkcode enabledConnectionIds}.
100
254
  *
101
255
  * Customize tool gating by declaring {@linkcode predicate}, never by
102
256
  * replacing this derivation.
@@ -105,20 +259,43 @@ export declare abstract class BaseToolHandler implements ToolHandler {
105
259
  */
106
260
  connectionVerdicts(runtime: ServerRuntime): Map<string, PredicateResult>;
107
261
  /**
108
- * Resolves the single connection enabled for this tool, returning the
109
- * connection id, its config, and the matching client manager. Designed
110
- * for handlers that look up `runtime.clientManagers[connId]` (multi-
111
- * connection-ready shape).
262
+ * Single-connection verdict composing the two gating layers: the
263
+ * {@linkcode predicate} (service reachability) and the read-only overlay.
112
264
  *
113
- * Selects `enabledConnectionIds(runtime)[0]` — current runtime is single-
114
- * connection, so this is unambiguous; if multi-connection support lands
115
- * later, handlers can switch to iterating ids.
265
+ * A connection the predicate already disables keeps that verdict unchanged —
266
+ * service reachability is the more fundamental reason and wins, so a
267
+ * connection missing the service block is never reported as "read-only
268
+ * blocked". Otherwise, a `read_only` connection disables any tool that
269
+ * mutates state (`annotations.readOnlyHint !== true`).
270
+ */
271
+ private connectionVerdict;
272
+ /**
273
+ * Resolves which connection a tool call targets: the explicit `connectionId`
274
+ * argument when present, else the sole connection enabled for this tool.
275
+ * Throws a listing error when the id is unknown/not-enabled, when it is
276
+ * present but not a string, or when omitted while two or more connections are
277
+ * candidates (the augmented schema makes all three unreachable in normal MCP
278
+ * flow — these are defensive backstops against internal call sites).
279
+ *
280
+ * Reads `connectionId` off the **raw** `toolArguments` rather than off the
281
+ * handler's locally-parsed object: the framework already validated it against
282
+ * the registered schema (see {@linkcode getRegisteredToolConfig}), and a
283
+ * handler's own `z.object` re-`parse()` would strip the key it never declared.
284
+ *
285
+ * @final — concrete on `BaseToolHandler`; subclasses must not override.
116
286
  */
117
- protected resolveSoleConnection(runtime: ServerRuntime): {
118
- connId: string;
119
- conn: ConnectionConfig;
120
- clientManager: BaseClientManager;
121
- };
287
+ protected resolveConnection(runtime: ServerRuntime, toolArguments: Record<string, unknown> | undefined): ResolvedConnection;
288
+ /**
289
+ * Like {@linkcode resolveConnection}, but narrows the resolved connection to
290
+ * a {@link DirectConnectionConfig} — throwing if the addressed connection is
291
+ * OAuth-typed. The throw is a defensive backstop: a tool's `connectionId`
292
+ * enum only offers connections its predicate enables, and the direct-block
293
+ * predicates exclude OAuth, so an OAuth connection is unreachable here via
294
+ * normal MCP flow.
295
+ *
296
+ * @final — concrete on `BaseToolHandler`; subclasses must not override.
297
+ */
298
+ protected resolveDirectConnection(runtime: ServerRuntime, toolArguments: Record<string, unknown> | undefined): ResolvedDirectConnection;
122
299
  /**
123
300
  * Resolves a required string from an explicit tool argument, falling back to
124
301
  * a connection-config value. Throws if neither is present.
@@ -130,5 +307,14 @@ export declare abstract class BaseToolHandler implements ToolHandler {
130
307
  /** Like resolveParam but returns undefined instead of throwing when both are absent or blank. The returned value is always trimmed. */
131
308
  protected resolveOptionalParam(argValue: string | undefined, configValue: string | undefined): string | undefined;
132
309
  createResponse(message: string, isError?: boolean, _meta?: Record<string, unknown>): CallToolResult;
310
+ /**
311
+ * Variant of {@link createResponse} that surfaces the response's
312
+ * machine-readable payload via MCP's `structuredContent` channel (per the
313
+ * [2025-11-25 spec](https://modelcontextprotocol.io/specification/2025-11-25/server/tools)).
314
+ * The `message` carries the human-readable summary on `content`; the
315
+ * `structuredContent` field carries the typed JSON payload callers (or
316
+ * `outputSchema` validators) can consume directly.
317
+ */
318
+ createStructuredResponse(message: string, structuredContent: Record<string, unknown>): CallToolResult;
133
319
  }
134
320
  //# sourceMappingURL=base-tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-tools.d.ts","sourceRoot":"","sources":["../../../src/confluent/tools/base-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-tools.d.ts","sourceRoot":"","sources":["../../../src/confluent/tools/base-tools.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ import { alwaysEnabled, ENABLED, ToolDisabledReason, } from "../../confluent/tools/connection-predicates.js";
2
+ import { ToolName } from "../../confluent/tools/tool-name.js";
3
+ import { quoteJoinIds } from "../../utils/quote-join-ids.js";
4
+ import { z } from "zod";
1
5
  /**
2
6
  * Standard MCP tool annotations.
3
7
  * Tools should reference these constants rather than creating ad-hoc instances.
@@ -13,10 +17,112 @@ export const DESTRUCTIVE = {
13
17
  destructiveHint: true,
14
18
  readOnlyHint: false,
15
19
  };
20
+ /**
21
+ * Opening clause of the injected `connectionId` parameter description, before the
22
+ * quoted, comma-separated list of viable connection ids (see
23
+ * {@linkcode quoteJoinIds}) is appended.
24
+ */
25
+ export const CONNECTION_ID_DESCRIPTION_PREFIX = "Which configured connection to target. One of: ";
26
+ /**
27
+ * Sentence appended to the `connectionId` description that steers the agent at the
28
+ * discovery tool. Emitted only when that tool is itself reachable; the joining space
29
+ * is added at the call site so a blocked tool leaves no dangling trailing space.
30
+ */
31
+ export const LIST_CONFIGURED_CONNECTIONS_POINTER = `Discover connections and learn what tools are supported by each connection by invoking '${ToolName.LIST_CONFIGURED_CONNECTIONS}'.`;
32
+ /**
33
+ * Operator-facing taxonomy of tool kinds.
34
+ *
35
+ * Answers "what kind of tool is this?" — orthogonal to the
36
+ * {@linkcode ConnectionPredicate}-based "is this tool enabled?" question that
37
+ * lives next door. Predicates gate advertisement; categories classify intent.
38
+ */
39
+ export var ToolCategory;
40
+ (function (ToolCategory) {
41
+ ToolCategory["Billing"] = "billing";
42
+ ToolCategory["Catalog"] = "catalog";
43
+ ToolCategory["ConfluentCloud"] = "confluent-cloud";
44
+ ToolCategory["Connect"] = "connect";
45
+ ToolCategory["Docs"] = "docs";
46
+ ToolCategory["Flink"] = "flink";
47
+ ToolCategory["Kafka"] = "kafka";
48
+ ToolCategory["McpServerDiagnostics"] = "mcp-server-diagnostics";
49
+ ToolCategory["Metrics"] = "metrics";
50
+ ToolCategory["SchemaRegistry"] = "schema-registry";
51
+ ToolCategory["Tableflow"] = "tableflow";
52
+ })(ToolCategory || (ToolCategory = {}));
16
53
  export class BaseToolHandler {
17
54
  /**
18
- * IDs of connections that satisfy this tool's {@linkcode predicate}. A
19
- * non-empty result enables the tool; an empty result disables it.
55
+ * Produce the actual config registered with MCP for this tool.
56
+ *
57
+ * * If the tool is connection-oriented and the server is configured
58
+ * with multiple connections, injects a required `connectionId` parameter
59
+ * indicating which connection the tool call should route to.
60
+ * See {@linkcode registeredInputShape} for more details.
61
+ *
62
+ * * Wrap the input schema in `z.object(...).strict()` to uniformly reject
63
+ * unknown parameters before `handle()` runs.
64
+ *
65
+ * This method is called for each active tool when setting up the MCP server.
66
+ *
67
+ * @final — concrete on `BaseToolHandler`; subclasses must not override.
68
+ */
69
+ getRegisteredToolConfig(runtime) {
70
+ const config = this.getToolConfig();
71
+ return {
72
+ ...config,
73
+ inputSchema: z
74
+ .object(this.registeredInputShape(config, runtime))
75
+ .strict(),
76
+ };
77
+ }
78
+ /**
79
+ * The input shape to register, before strict-wrapping: the authored shape,
80
+ * plus a required `connectionId` enum when the server holds more than one
81
+ * connection AND this tool is connection-oriented. A single-element enum (when
82
+ * only one connection is viable) is still injected on a multi-connection server,
83
+ * so that an explicit request for a non-viable connection (e.g. to a disabled
84
+ * tool because it is read_only) is rejected by the enum rather than silently
85
+ * auto-routed.
86
+ */
87
+ registeredInputShape(config, runtime) {
88
+ // Connection-independent tools (docs, diagnostics) never route to a
89
+ // connection and so never need a connectionId parameter.
90
+ if (this.isConnectionIndependent)
91
+ return config.inputSchema;
92
+ // A single-connection (or zero-connection) server has no ambiguity as to
93
+ // which connection a call routes to, so the call auto-routes with no extra
94
+ // argument. The zero-connection case also covers the `--list-tools` runtime,
95
+ // which wants the unaugmented view.
96
+ if (runtime.config.getConnectionIds().length <= 1)
97
+ return config.inputSchema;
98
+ const ids = this.enabledConnectionIds(runtime);
99
+ // A tool viable on no connection is never registered (the enablement filter
100
+ // in index.ts drops it), so this method is never called for one. Reaching
101
+ // here means the wiring is broken; bail loudly rather than build an illegal
102
+ // `z.enum([])`.
103
+ if (ids.length === 0) {
104
+ throw new Error(`Wacky -- tool ${config.name} resolved to zero enabled connections on a multi-connection server; it should never have been registered`);
105
+ }
106
+ // Point the agent at list-configured-connections so it can learn which
107
+ // tools each connection supports — but only when that tool is itself
108
+ // reachable; naming a tool the operator blocked would send the agent
109
+ // chasing a ghost. The leading space rides with the pointer (not the
110
+ // template) so the blocked, empty-pointer case ends cleanly at the period.
111
+ const listConfiguredConnectionsPointer = runtime.isToolAllowed(ToolName.LIST_CONFIGURED_CONNECTIONS)
112
+ ? ` ${LIST_CONFIGURED_CONNECTIONS_POINTER}`
113
+ : "";
114
+ return {
115
+ ...config.inputSchema,
116
+ connectionId: z
117
+ .enum(ids)
118
+ .describe(`${CONNECTION_ID_DESCRIPTION_PREFIX}${quoteJoinIds(ids)}.${listConfiguredConnectionsPointer}`),
119
+ };
120
+ }
121
+ /**
122
+ * IDs of connections that satisfy this tool's {@linkcode predicate} and are
123
+ * not blocked by the read-only overlay. A non-empty result enables the tool;
124
+ * an empty result disables it. Derived from {@linkcode connectionVerdicts} so
125
+ * the two stay in lockstep.
20
126
  *
21
127
  * Customize tool gating by declaring {@linkcode predicate}, never by
22
128
  * replacing this derivation.
@@ -24,14 +130,51 @@ export class BaseToolHandler {
24
130
  * @final — concrete on `BaseToolHandler`; subclasses must not override.
25
131
  */
26
132
  enabledConnectionIds(runtime) {
27
- return Object.entries(runtime.config.connections)
28
- .filter(([, conn]) => this.predicate(conn).enabled)
133
+ return [...this.connectionVerdicts(runtime)]
134
+ .filter(([, verdict]) => verdict.enabled)
29
135
  .map(([id]) => id);
30
136
  }
31
137
  /**
32
- * Per-connection verdict map for this tool, derived from
33
- * {@linkcode predicate}. Powers grouped startup logging and
34
- * the diagnostic-tool surface.
138
+ * Whether this tool is enabled regardless of the configured connections —
139
+ * true exactly when its {@linkcode predicate} is `alwaysEnabled`, the only
140
+ * predicate that returns enabled without inspecting a connection. Such tools
141
+ * (docs lookup, server diagnostics) never route to a connection, so they
142
+ * register even on a zero-connection config, where the per-connection verdict
143
+ * map driving {@linkcode enabledConnectionIds} is empty.
144
+ */
145
+ get isConnectionIndependent() {
146
+ return this.predicate === alwaysEnabled;
147
+ }
148
+ /**
149
+ * The connection id this invocation routes to — the OAuth-login gate uses it
150
+ * to launch the browser flow only when a call actually targets the OAuth
151
+ * connection, not merely because one exists somewhere in the config.
152
+ *
153
+ * Returns `undefined` for a connection-independent tool — it routes to no
154
+ * connection, so there is nothing to pre-launch a login for.
155
+ *
156
+ * Otherwise delegates to {@linkcode resolveConnection} so routing is decided
157
+ * in one place rather than duplicated in the gate, and propagates its throw.
158
+ * Every throw path there is a `"Wacky --"` invariant violation: the injected
159
+ * schema (see {@linkcode getRegisteredToolConfig}) makes `connectionId`
160
+ * required for multi-connection tools and strips it for single-connection
161
+ * ones, so a call that can't resolve means that contract broke. Surfacing the
162
+ * error rather than swallowing it to `undefined` lets the broken invariant
163
+ * reach the caller instead of being silently re-discovered inside `handle()`.
164
+ *
165
+ * @final — concrete on `BaseToolHandler`; subclasses must not override.
166
+ */
167
+ resolvedTargetConnectionId(runtime, toolArguments) {
168
+ if (this.isConnectionIndependent)
169
+ return undefined;
170
+ return this.resolveConnection(runtime, toolArguments).connId;
171
+ }
172
+ /**
173
+ * Per-connection verdict map for this tool — the single source of truth for
174
+ * enablement. Each verdict composes the {@linkcode predicate} with the
175
+ * read-only overlay (see {@linkcode connectionVerdict}). Powers grouped
176
+ * startup logging, the diagnostic-tool surface, and
177
+ * {@linkcode enabledConnectionIds}.
35
178
  *
36
179
  * Customize tool gating by declaring {@linkcode predicate}, never by
37
180
  * replacing this derivation.
@@ -41,27 +184,108 @@ export class BaseToolHandler {
41
184
  connectionVerdicts(runtime) {
42
185
  return new Map(Object.entries(runtime.config.connections).map(([id, conn]) => [
43
186
  id,
44
- this.predicate(conn),
187
+ this.connectionVerdict(conn),
45
188
  ]));
46
189
  }
47
190
  /**
48
- * Resolves the single connection enabled for this tool, returning the
49
- * connection id, its config, and the matching client manager. Designed
50
- * for handlers that look up `runtime.clientManagers[connId]` (multi-
51
- * connection-ready shape).
191
+ * Single-connection verdict composing the two gating layers: the
192
+ * {@linkcode predicate} (service reachability) and the read-only overlay.
52
193
  *
53
- * Selects `enabledConnectionIds(runtime)[0]` — current runtime is single-
54
- * connection, so this is unambiguous; if multi-connection support lands
55
- * later, handlers can switch to iterating ids.
194
+ * A connection the predicate already disables keeps that verdict unchanged —
195
+ * service reachability is the more fundamental reason and wins, so a
196
+ * connection missing the service block is never reported as "read-only
197
+ * blocked". Otherwise, a `read_only` connection disables any tool that
198
+ * mutates state (`annotations.readOnlyHint !== true`).
56
199
  */
57
- resolveSoleConnection(runtime) {
58
- const connId = this.enabledConnectionIds(runtime)[0];
200
+ connectionVerdict(conn) {
201
+ const verdict = this.predicate(conn);
202
+ if (!verdict.enabled)
203
+ return verdict;
204
+ if (conn.read_only === true &&
205
+ this.getToolConfig().annotations.readOnlyHint !== true) {
206
+ return { enabled: false, reason: ToolDisabledReason.ReadOnlyConnection };
207
+ }
208
+ return ENABLED;
209
+ }
210
+ /**
211
+ * Resolves which connection a tool call targets: the explicit `connectionId`
212
+ * argument when present, else the sole connection enabled for this tool.
213
+ * Throws a listing error when the id is unknown/not-enabled, when it is
214
+ * present but not a string, or when omitted while two or more connections are
215
+ * candidates (the augmented schema makes all three unreachable in normal MCP
216
+ * flow — these are defensive backstops against internal call sites).
217
+ *
218
+ * Reads `connectionId` off the **raw** `toolArguments` rather than off the
219
+ * handler's locally-parsed object: the framework already validated it against
220
+ * the registered schema (see {@linkcode getRegisteredToolConfig}), and a
221
+ * handler's own `z.object` re-`parse()` would strip the key it never declared.
222
+ *
223
+ * @final — concrete on `BaseToolHandler`; subclasses must not override.
224
+ */
225
+ resolveConnection(runtime, toolArguments) {
226
+ // The connection this tool call should route to.
227
+ let determinedId;
228
+ // What connection ids this tool possibly supports.
229
+ const enabledIds = this.enabledConnectionIds(runtime);
230
+ // The requested connection id, if the caller provided one. Per the Zod schema injected by
231
+ // `getRegisteredToolConfig()` it should be a string that is one of the enabled ids; both
232
+ // expectations are enforced below rather than assumed.
233
+ const requestedId = toolArguments?.connectionId;
234
+ if (typeof requestedId === "string") {
235
+ if (!enabledIds.includes(requestedId)) {
236
+ throw new Error(`Wacky -- connection "${requestedId}" is not an enabled connection for this tool; enabled: ${enabledIds.join(", ")}`);
237
+ }
238
+ // Explicit requested ID must be valid based on the injected schema enum already having validated it, so can
239
+ // at this point trust fully.
240
+ determinedId = requestedId;
241
+ }
242
+ else if (requestedId !== undefined) {
243
+ // Unreachable in normal operation: Zod has already validated `args`
244
+ // against the registered schema before `handle()` runs, and that schema
245
+ // either declares `connectionId` as a string enum (multi-connection
246
+ // servers — a non-string fails parsing) or omits it entirely (single-
247
+ // connection servers — the strict schema rejects the unknown key). Either
248
+ // way a non-string can't survive to reach this branch. It exists purely as a symmetric
249
+ // peer to the two backstops below, so a malformed value can never quietly
250
+ // masquerade as an omission and auto-route.
251
+ throw new Error(`Wacky -- connectionId present but not a string (got ${typeof requestedId}); the injected schema should have rejected this`);
252
+ }
253
+ else if (enabledIds.length === 1) {
254
+ // No requested ID, but only one enabled connection — unambiguous, so route there.
255
+ determinedId = enabledIds[0];
256
+ }
257
+ else {
258
+ // Not a string and not a sole enabled connection. Should have been blocked by the injected schema.
259
+ throw new Error(`Wacky -- connectionId omitted but this tool is enabled for ${enabledIds.length} connections (${enabledIds.join(", ") || "none"}); cannot auto-route`);
260
+ }
59
261
  return {
60
- connId,
61
- conn: runtime.config.connections[connId],
62
- clientManager: runtime.clientManagers[connId],
262
+ connId: determinedId,
263
+ conn: runtime.config.connections[determinedId],
264
+ clientManager: runtime.clientManagers[determinedId],
63
265
  };
64
266
  }
267
+ /**
268
+ * Like {@linkcode resolveConnection}, but narrows the resolved connection to
269
+ * a {@link DirectConnectionConfig} — throwing if the addressed connection is
270
+ * OAuth-typed. The throw is a defensive backstop: a tool's `connectionId`
271
+ * enum only offers connections its predicate enables, and the direct-block
272
+ * predicates exclude OAuth, so an OAuth connection is unreachable here via
273
+ * normal MCP flow.
274
+ *
275
+ * @final — concrete on `BaseToolHandler`; subclasses must not override.
276
+ */
277
+ resolveDirectConnection(runtime, toolArguments) {
278
+ // Reuse resolveConnection for id selection + validation; this method only
279
+ // adds the direct-vs-oauth narrowing on top of its type-neutral result.
280
+ const { connId, conn, clientManager } = this.resolveConnection(runtime, toolArguments);
281
+ // A resolved OAuth connection means the wiring is broken (a non-oauth tool
282
+ // somehow offered an oauth id), not that a caller legitimately asked for one.
283
+ if (conn.type !== "direct") {
284
+ throw new Error(`Wacky -- connection "${connId}" is ${conn.type}-typed; this tool requires a direct connection`);
285
+ }
286
+ // conn is narrowed to DirectConnectionConfig by the guard above.
287
+ return { connId, conn, clientManager };
288
+ }
65
289
  /**
66
290
  * Resolves a required string from an explicit tool argument, falling back to
67
291
  * a connection-config value. Throws if neither is present.
@@ -92,5 +316,20 @@ export class BaseToolHandler {
92
316
  };
93
317
  return response;
94
318
  }
319
+ /**
320
+ * Variant of {@link createResponse} that surfaces the response's
321
+ * machine-readable payload via MCP's `structuredContent` channel (per the
322
+ * [2025-11-25 spec](https://modelcontextprotocol.io/specification/2025-11-25/server/tools)).
323
+ * The `message` carries the human-readable summary on `content`; the
324
+ * `structuredContent` field carries the typed JSON payload callers (or
325
+ * `outputSchema` validators) can consume directly.
326
+ */
327
+ createStructuredResponse(message, structuredContent) {
328
+ return {
329
+ content: [{ type: "text", text: message }],
330
+ structuredContent,
331
+ isError: false,
332
+ };
333
+ }
95
334
  }
96
335
  //# sourceMappingURL=base-tools.js.map