@strapi/core 5.48.1 → 5.50.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 (420) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +11 -5
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +2 -1
  5. package/dist/Strapi.mjs.map +1 -1
  6. package/dist/ai.d.ts +2 -0
  7. package/dist/ai.d.ts.map +1 -0
  8. package/dist/ai.js +8 -0
  9. package/dist/ai.js.map +1 -0
  10. package/dist/ai.mjs +3 -0
  11. package/dist/ai.mjs.map +1 -0
  12. package/dist/configuration/config-loader.d.ts.map +1 -1
  13. package/dist/configuration/config-loader.js +11 -6
  14. package/dist/configuration/config-loader.js.map +1 -1
  15. package/dist/configuration/get-dirs.d.ts.map +1 -1
  16. package/dist/configuration/index.d.ts +0 -3
  17. package/dist/configuration/index.d.ts.map +1 -1
  18. package/dist/configuration/index.js +22 -18
  19. package/dist/configuration/index.js.map +1 -1
  20. package/dist/configuration/index.mjs +0 -3
  21. package/dist/configuration/index.mjs.map +1 -1
  22. package/dist/configuration/server-config.d.ts +11 -0
  23. package/dist/configuration/server-config.d.ts.map +1 -0
  24. package/dist/configuration/server-config.js +16 -0
  25. package/dist/configuration/server-config.js.map +1 -0
  26. package/dist/configuration/server-config.mjs +14 -0
  27. package/dist/configuration/server-config.mjs.map +1 -0
  28. package/dist/configuration/urls.d.ts.map +1 -1
  29. package/dist/configuration/urls.js +11 -7
  30. package/dist/configuration/urls.js.map +1 -1
  31. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  32. package/dist/core-api/controller/single-type.d.ts.map +1 -1
  33. package/dist/core-api/controller/transform.d.ts.map +1 -1
  34. package/dist/core-api/routes/index.d.ts.map +1 -1
  35. package/dist/core-api/routes/index.js +3 -2
  36. package/dist/core-api/routes/index.js.map +1 -1
  37. package/dist/core-api/routes/validation/attributes.d.ts.map +1 -1
  38. package/dist/core-api/routes/validation/common.js +3 -2
  39. package/dist/core-api/routes/validation/common.js.map +1 -1
  40. package/dist/core-api/routes/validation/content-type.js +3 -2
  41. package/dist/core-api/routes/validation/content-type.js.map +1 -1
  42. package/dist/core-api/routes/validation/mappers.d.ts.map +1 -1
  43. package/dist/core-api/routes/validation/mappers.js +3 -2
  44. package/dist/core-api/routes/validation/mappers.js.map +1 -1
  45. package/dist/core-api/routes/validation/utils.d.ts.map +1 -1
  46. package/dist/core-api/routes/validation/utils.js +3 -2
  47. package/dist/core-api/routes/validation/utils.js.map +1 -1
  48. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  49. package/dist/core-api/service/pagination.d.ts.map +1 -1
  50. package/dist/core-api/service/single-type.d.ts.map +1 -1
  51. package/dist/domain/content-type/index.d.ts.map +1 -1
  52. package/dist/domain/content-type/index.js +9 -5
  53. package/dist/domain/content-type/index.js.map +1 -1
  54. package/dist/domain/content-type/validator.d.ts.map +1 -1
  55. package/dist/domain/content-type/validator.js +6 -2
  56. package/dist/domain/content-type/validator.js.map +1 -1
  57. package/dist/domain/module/index.d.ts.map +1 -1
  58. package/dist/domain/module/index.js +6 -2
  59. package/dist/domain/module/index.js.map +1 -1
  60. package/dist/domain/module/validation.d.ts.map +1 -1
  61. package/dist/ee/index.d.ts +2 -1
  62. package/dist/ee/index.d.ts.map +1 -1
  63. package/dist/ee/license.d.ts.map +1 -1
  64. package/dist/ee/license.js +8 -3
  65. package/dist/ee/license.js.map +1 -1
  66. package/dist/factories.d.ts.map +1 -1
  67. package/dist/index.d.ts +5 -1
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +2 -0
  70. package/dist/index.js.map +1 -1
  71. package/dist/index.mjs +2 -0
  72. package/dist/index.mjs.map +1 -1
  73. package/dist/loaders/admin.js +5 -1
  74. package/dist/loaders/admin.js.map +1 -1
  75. package/dist/loaders/apis.js +16 -11
  76. package/dist/loaders/apis.js.map +1 -1
  77. package/dist/loaders/components.js +6 -2
  78. package/dist/loaders/components.js.map +1 -1
  79. package/dist/loaders/middlewares.js +6 -2
  80. package/dist/loaders/middlewares.js.map +1 -1
  81. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  82. package/dist/loaders/plugins/get-enabled-plugins.js +5 -1
  83. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  84. package/dist/loaders/plugins/get-user-plugins-config.js +6 -2
  85. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  86. package/dist/loaders/plugins/index.js +8 -4
  87. package/dist/loaders/plugins/index.js.map +1 -1
  88. package/dist/loaders/policies.js +6 -2
  89. package/dist/loaders/policies.js.map +1 -1
  90. package/dist/loaders/sanitizers.d.ts.map +1 -1
  91. package/dist/loaders/src-index.d.ts.map +1 -1
  92. package/dist/loaders/validators.d.ts.map +1 -1
  93. package/dist/mcp.d.ts +4 -0
  94. package/dist/mcp.d.ts.map +1 -0
  95. package/dist/mcp.js +12 -0
  96. package/dist/mcp.js.map +1 -0
  97. package/dist/mcp.mjs +4 -0
  98. package/dist/mcp.mjs.map +1 -0
  99. package/dist/middlewares/body.d.ts.map +1 -1
  100. package/dist/middlewares/body.js +9 -4
  101. package/dist/middlewares/body.js.map +1 -1
  102. package/dist/middlewares/body.mjs +1 -1
  103. package/dist/middlewares/body.mjs.map +1 -1
  104. package/dist/middlewares/compression.js +5 -1
  105. package/dist/middlewares/compression.js.map +1 -1
  106. package/dist/middlewares/cors.d.ts.map +1 -1
  107. package/dist/middlewares/cors.js +5 -1
  108. package/dist/middlewares/cors.js.map +1 -1
  109. package/dist/middlewares/errors.d.ts +5 -0
  110. package/dist/middlewares/errors.d.ts.map +1 -1
  111. package/dist/middlewares/errors.js.map +1 -1
  112. package/dist/middlewares/errors.mjs.map +1 -1
  113. package/dist/middlewares/favicon.d.ts +0 -1
  114. package/dist/middlewares/favicon.d.ts.map +1 -1
  115. package/dist/middlewares/favicon.js +5 -1
  116. package/dist/middlewares/favicon.js.map +1 -1
  117. package/dist/middlewares/ip.js +5 -1
  118. package/dist/middlewares/ip.js.map +1 -1
  119. package/dist/middlewares/public.js +5 -1
  120. package/dist/middlewares/public.js.map +1 -1
  121. package/dist/middlewares/query.js +6 -2
  122. package/dist/middlewares/query.js.map +1 -1
  123. package/dist/middlewares/security.js +5 -1
  124. package/dist/middlewares/security.js.map +1 -1
  125. package/dist/migrations/database/5.0.0-discard-drafts.js +5 -1
  126. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  127. package/dist/migrations/draft-publish.d.ts.map +1 -1
  128. package/dist/migrations/first-published-at.d.ts.map +1 -1
  129. package/dist/migrations/first-published-at.js +5 -1
  130. package/dist/migrations/first-published-at.js.map +1 -1
  131. package/dist/migrations/i18n.d.ts.map +1 -1
  132. package/dist/migrations/index.d.ts.map +1 -1
  133. package/dist/package.json.js +18 -21
  134. package/dist/package.json.js.map +1 -1
  135. package/dist/package.json.mjs +18 -21
  136. package/dist/package.json.mjs.map +1 -1
  137. package/dist/providers/provider.d.ts.map +1 -1
  138. package/dist/registries/apis.d.ts.map +1 -1
  139. package/dist/registries/components.d.ts +1 -1
  140. package/dist/registries/components.d.ts.map +1 -1
  141. package/dist/registries/content-types.d.ts +2 -3
  142. package/dist/registries/content-types.d.ts.map +1 -1
  143. package/dist/registries/controllers.d.ts +3 -3
  144. package/dist/registries/controllers.d.ts.map +1 -1
  145. package/dist/registries/custom-fields.d.ts.map +1 -1
  146. package/dist/registries/hooks.d.ts +3 -4
  147. package/dist/registries/hooks.d.ts.map +1 -1
  148. package/dist/registries/middlewares.d.ts +2 -3
  149. package/dist/registries/middlewares.d.ts.map +1 -1
  150. package/dist/registries/models.d.ts +1 -1
  151. package/dist/registries/modules.d.ts.map +1 -1
  152. package/dist/registries/namespace.d.ts.map +1 -1
  153. package/dist/registries/plugins.d.ts.map +1 -1
  154. package/dist/registries/policies.d.ts +1 -2
  155. package/dist/registries/policies.d.ts.map +1 -1
  156. package/dist/registries/sanitizers.d.ts +2 -2
  157. package/dist/registries/sanitizers.js +7 -3
  158. package/dist/registries/sanitizers.js.map +1 -1
  159. package/dist/registries/services.d.ts +3 -3
  160. package/dist/registries/services.d.ts.map +1 -1
  161. package/dist/registries/validators.d.ts +2 -2
  162. package/dist/registries/validators.js +7 -3
  163. package/dist/registries/validators.js.map +1 -1
  164. package/dist/services/ai.d.ts.map +1 -1
  165. package/dist/services/auth/index.js +7 -3
  166. package/dist/services/auth/index.js.map +1 -1
  167. package/dist/services/config.d.ts.map +1 -1
  168. package/dist/services/content-api/index.d.ts +4 -4
  169. package/dist/services/content-api/index.d.ts.map +1 -1
  170. package/dist/services/content-api/index.js +10 -6
  171. package/dist/services/content-api/index.js.map +1 -1
  172. package/dist/services/content-api/permissions/engine.d.ts.map +1 -1
  173. package/dist/services/content-api/permissions/engine.js +5 -1
  174. package/dist/services/content-api/permissions/engine.js.map +1 -1
  175. package/dist/services/content-api/permissions/index.d.ts +2 -2
  176. package/dist/services/content-api/permissions/index.d.ts.map +1 -1
  177. package/dist/services/content-api/permissions/index.js +10 -6
  178. package/dist/services/content-api/permissions/index.js.map +1 -1
  179. package/dist/services/content-api/permissions/providers/action.d.ts +1 -1
  180. package/dist/services/content-api/permissions/providers/action.d.ts.map +1 -1
  181. package/dist/services/content-api/permissions/providers/condition.d.ts +1 -1
  182. package/dist/services/content-api/permissions/providers/condition.d.ts.map +1 -1
  183. package/dist/services/content-source-maps.d.ts.map +1 -1
  184. package/dist/services/core-store.d.ts.map +1 -1
  185. package/dist/services/cron.d.ts +5 -5
  186. package/dist/services/custom-fields.d.ts.map +1 -1
  187. package/dist/services/document-service/attributes/index.d.ts +0 -1
  188. package/dist/services/document-service/attributes/index.d.ts.map +1 -1
  189. package/dist/services/document-service/attributes/transforms.js +5 -1
  190. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  191. package/dist/services/document-service/common.d.ts.map +1 -1
  192. package/dist/services/document-service/components.d.ts +2 -2
  193. package/dist/services/document-service/components.d.ts.map +1 -1
  194. package/dist/services/document-service/components.js +14 -10
  195. package/dist/services/document-service/components.js.map +1 -1
  196. package/dist/services/document-service/components.mjs.map +1 -1
  197. package/dist/services/document-service/draft-and-publish.d.ts +0 -1
  198. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  199. package/dist/services/document-service/draft-and-publish.js +1 -1
  200. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  201. package/dist/services/document-service/draft-and-publish.mjs +1 -1
  202. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  203. package/dist/services/document-service/entries.d.ts.map +1 -1
  204. package/dist/services/document-service/entries.js +6 -2
  205. package/dist/services/document-service/entries.js.map +1 -1
  206. package/dist/services/document-service/entries.mjs +7 -3
  207. package/dist/services/document-service/entries.mjs.map +1 -1
  208. package/dist/services/document-service/events.d.ts.map +1 -1
  209. package/dist/services/document-service/first-published-at.d.ts.map +1 -1
  210. package/dist/services/document-service/index.d.ts.map +1 -1
  211. package/dist/services/document-service/internationalization.d.ts +0 -1
  212. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  213. package/dist/services/document-service/internationalization.js.map +1 -1
  214. package/dist/services/document-service/internationalization.mjs.map +1 -1
  215. package/dist/services/document-service/middlewares/middleware-manager.d.ts.map +1 -1
  216. package/dist/services/document-service/params.d.ts +1 -1
  217. package/dist/services/document-service/params.d.ts.map +1 -1
  218. package/dist/services/document-service/publication-filter.d.ts +1 -1
  219. package/dist/services/document-service/publication-filter.d.ts.map +1 -1
  220. package/dist/services/document-service/transform/data.d.ts +2 -0
  221. package/dist/services/document-service/transform/data.d.ts.map +1 -1
  222. package/dist/services/document-service/transform/data.js +7 -1
  223. package/dist/services/document-service/transform/data.js.map +1 -1
  224. package/dist/services/document-service/transform/data.mjs +7 -2
  225. package/dist/services/document-service/transform/data.mjs.map +1 -1
  226. package/dist/services/document-service/transform/fields.d.ts.map +1 -1
  227. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  228. package/dist/services/document-service/transform/id-map.js +7 -4
  229. package/dist/services/document-service/transform/id-map.js.map +1 -1
  230. package/dist/services/document-service/transform/id-map.mjs +7 -4
  231. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  232. package/dist/services/document-service/transform/id-transform.d.ts +0 -1
  233. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  234. package/dist/services/document-service/transform/populate.d.ts.map +1 -1
  235. package/dist/services/document-service/transform/query.d.ts +0 -1
  236. package/dist/services/document-service/transform/query.d.ts.map +1 -1
  237. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  238. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  239. package/dist/services/document-service/transform/relations/transform/default-locale.d.ts.map +1 -1
  240. package/dist/services/document-service/transform/relations/utils/data.d.ts.map +1 -1
  241. package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
  242. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  243. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  244. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts +0 -1
  245. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  246. package/dist/services/document-service/transform/relations/utils/xto-one.d.ts.map +1 -1
  247. package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -1
  248. package/dist/services/document-service/utils/bidirectional-relations.js +7 -2
  249. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -1
  250. package/dist/services/document-service/utils/bidirectional-relations.mjs +7 -2
  251. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -1
  252. package/dist/services/document-service/utils/clean-component-join-table.d.ts.map +1 -1
  253. package/dist/services/document-service/utils/ordered-parallel.d.ts.map +1 -1
  254. package/dist/services/document-service/utils/populate.d.ts +1 -1
  255. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  256. package/dist/services/document-service/utils/populate.js.map +1 -1
  257. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  258. package/dist/services/document-service/utils/self-referential-relations.d.ts.map +1 -1
  259. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  260. package/dist/services/entity-service/index.d.ts.map +1 -1
  261. package/dist/services/entity-service/index.js +9 -4
  262. package/dist/services/entity-service/index.js.map +1 -1
  263. package/dist/services/entity-validator/index.d.ts.map +1 -1
  264. package/dist/services/entity-validator/index.js +9 -4
  265. package/dist/services/entity-validator/index.js.map +1 -1
  266. package/dist/services/entity-validator/index.mjs.map +1 -1
  267. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  268. package/dist/services/entity-validator/validators.js +10 -6
  269. package/dist/services/entity-validator/validators.js.map +1 -1
  270. package/dist/services/errors.d.ts.map +1 -1
  271. package/dist/services/errors.js +7 -3
  272. package/dist/services/errors.js.map +1 -1
  273. package/dist/services/features.d.ts.map +1 -1
  274. package/dist/services/fs.d.ts.map +1 -1
  275. package/dist/services/fs.js +10 -5
  276. package/dist/services/fs.js.map +1 -1
  277. package/dist/services/mcp/authentication.d.ts.map +1 -1
  278. package/dist/services/mcp/handlers/handlePost.d.ts.map +1 -1
  279. package/dist/services/mcp/index.d.ts.map +1 -1
  280. package/dist/services/mcp/internal/McpCapabilityRegistry.d.ts +2 -2
  281. package/dist/services/mcp/internal/McpServerFactory.d.ts.map +1 -1
  282. package/dist/services/mcp/internal/syncMcpSessionCapabilities.d.ts.map +1 -1
  283. package/dist/services/mcp/metrics/metrics.d.ts.map +1 -1
  284. package/dist/services/mcp/metrics/normalizeMcpCapability.d.ts.map +1 -1
  285. package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.d.ts.map +1 -1
  286. package/dist/services/mcp/middleware/oauthDiscoveryFallback.d.ts.map +1 -1
  287. package/dist/services/mcp/prompt-registry.d.ts +31 -3
  288. package/dist/services/mcp/prompt-registry.d.ts.map +1 -1
  289. package/dist/services/mcp/prompt-registry.js +31 -0
  290. package/dist/services/mcp/prompt-registry.js.map +1 -1
  291. package/dist/services/mcp/prompt-registry.mjs +31 -1
  292. package/dist/services/mcp/prompt-registry.mjs.map +1 -1
  293. package/dist/services/mcp/resource-registry.d.ts +31 -1
  294. package/dist/services/mcp/resource-registry.d.ts.map +1 -1
  295. package/dist/services/mcp/resource-registry.js +31 -0
  296. package/dist/services/mcp/resource-registry.js.map +1 -1
  297. package/dist/services/mcp/resource-registry.mjs +31 -1
  298. package/dist/services/mcp/resource-registry.mjs.map +1 -1
  299. package/dist/services/mcp/routes.d.ts +1 -1
  300. package/dist/services/mcp/routes.d.ts.map +1 -1
  301. package/dist/services/mcp/tool-registry.d.ts +36 -9
  302. package/dist/services/mcp/tool-registry.d.ts.map +1 -1
  303. package/dist/services/mcp/tool-registry.js +35 -3
  304. package/dist/services/mcp/tool-registry.js.map +1 -1
  305. package/dist/services/mcp/tool-registry.mjs +35 -3
  306. package/dist/services/mcp/tool-registry.mjs.map +1 -1
  307. package/dist/services/mcp/tools/log.d.ts +15 -85
  308. package/dist/services/mcp/tools/log.d.ts.map +1 -1
  309. package/dist/services/mcp/utils/createSafeCapabilityRegistration.d.ts.map +1 -1
  310. package/dist/services/mcp/utils/safeHandlerWrapper.d.ts.map +1 -1
  311. package/dist/services/mcp/utils/sendJsonRpcError.d.ts +0 -1
  312. package/dist/services/mcp/utils/sendJsonRpcError.d.ts.map +1 -1
  313. package/dist/services/mcp/utils/withTimeout.d.ts.map +1 -1
  314. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  315. package/dist/services/metrics/admin-user-hash.js +5 -1
  316. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  317. package/dist/services/metrics/index.d.ts.map +1 -1
  318. package/dist/services/metrics/is-truthy.d.ts.map +1 -1
  319. package/dist/services/metrics/is-truthy.js +5 -1
  320. package/dist/services/metrics/is-truthy.js.map +1 -1
  321. package/dist/services/metrics/middleware.d.ts.map +1 -1
  322. package/dist/services/metrics/rate-limiter.d.ts +2 -1
  323. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  324. package/dist/services/metrics/sender.d.ts.map +1 -1
  325. package/dist/services/metrics/sender.js +17 -9
  326. package/dist/services/metrics/sender.js.map +1 -1
  327. package/dist/services/query-params.d.ts.map +1 -1
  328. package/dist/services/reloader.d.ts.map +1 -1
  329. package/dist/services/request-context.d.ts.map +1 -1
  330. package/dist/services/server/admin-api.d.ts +3 -5
  331. package/dist/services/server/admin-api.d.ts.map +1 -1
  332. package/dist/services/server/api.d.ts +3 -4
  333. package/dist/services/server/api.d.ts.map +1 -1
  334. package/dist/services/server/api.js +5 -1
  335. package/dist/services/server/api.js.map +1 -1
  336. package/dist/services/server/compose-endpoint.d.ts.map +1 -1
  337. package/dist/services/server/compose-endpoint.js +5 -1
  338. package/dist/services/server/compose-endpoint.js.map +1 -1
  339. package/dist/services/server/content-api.d.ts +3 -5
  340. package/dist/services/server/content-api.d.ts.map +1 -1
  341. package/dist/services/server/http-server.d.ts +0 -1
  342. package/dist/services/server/http-server.d.ts.map +1 -1
  343. package/dist/services/server/http-server.js +5 -1
  344. package/dist/services/server/http-server.js.map +1 -1
  345. package/dist/services/server/index.d.ts.map +1 -1
  346. package/dist/services/server/index.js +5 -1
  347. package/dist/services/server/index.js.map +1 -1
  348. package/dist/services/server/koa-methods.d.ts +107 -0
  349. package/dist/services/server/koa-methods.d.ts.map +1 -0
  350. package/dist/services/server/koa-methods.js +24 -0
  351. package/dist/services/server/koa-methods.js.map +1 -0
  352. package/dist/services/server/koa-methods.mjs +22 -0
  353. package/dist/services/server/koa-methods.mjs.map +1 -0
  354. package/dist/services/server/koa.d.ts +0 -9
  355. package/dist/services/server/koa.d.ts.map +1 -1
  356. package/dist/services/server/koa.js +14 -10
  357. package/dist/services/server/koa.js.map +1 -1
  358. package/dist/services/server/koa.mjs +7 -9
  359. package/dist/services/server/koa.mjs.map +1 -1
  360. package/dist/services/server/middleware.d.ts.map +1 -1
  361. package/dist/services/server/middleware.js +5 -1
  362. package/dist/services/server/middleware.js.map +1 -1
  363. package/dist/services/server/openapi.d.ts.map +1 -1
  364. package/dist/services/server/openapi.js +11 -6
  365. package/dist/services/server/openapi.js.map +1 -1
  366. package/dist/services/server/policy.d.ts.map +1 -1
  367. package/dist/services/server/register-middlewares.d.ts.map +1 -1
  368. package/dist/services/server/register-routes.d.ts.map +1 -1
  369. package/dist/services/server/register-routes.js +8 -4
  370. package/dist/services/server/register-routes.js.map +1 -1
  371. package/dist/services/server/routing.d.ts +0 -2
  372. package/dist/services/server/routing.d.ts.map +1 -1
  373. package/dist/services/server/routing.js +5 -1
  374. package/dist/services/server/routing.js.map +1 -1
  375. package/dist/services/session-manager.d.ts +20 -0
  376. package/dist/services/session-manager.d.ts.map +1 -1
  377. package/dist/services/session-manager.js +71 -9
  378. package/dist/services/session-manager.js.map +1 -1
  379. package/dist/services/session-manager.mjs +57 -0
  380. package/dist/services/session-manager.mjs.map +1 -1
  381. package/dist/services/webhook-runner.js +7 -2
  382. package/dist/services/webhook-runner.js.map +1 -1
  383. package/dist/services/webhook-store.d.ts.map +1 -1
  384. package/dist/services/worker-queue.js +5 -1
  385. package/dist/services/worker-queue.js.map +1 -1
  386. package/dist/utils/convert-custom-field-type.d.ts.map +1 -1
  387. package/dist/utils/cron.d.ts.map +1 -1
  388. package/dist/utils/fetch.d.ts.map +1 -1
  389. package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
  390. package/dist/utils/filepath-to-prop-path.js +13 -8
  391. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  392. package/dist/utils/is-initialized.d.ts.map +1 -1
  393. package/dist/utils/load-config-file.d.ts.map +1 -1
  394. package/dist/utils/load-config-file.js +7 -2
  395. package/dist/utils/load-config-file.js.map +1 -1
  396. package/dist/utils/load-files.d.ts +1 -1
  397. package/dist/utils/load-files.d.ts.map +1 -1
  398. package/dist/utils/load-files.js +12 -6
  399. package/dist/utils/load-files.js.map +1 -1
  400. package/dist/utils/open-browser.d.ts +0 -1
  401. package/dist/utils/open-browser.d.ts.map +1 -1
  402. package/dist/utils/open-browser.js +5 -1
  403. package/dist/utils/open-browser.js.map +1 -1
  404. package/dist/utils/resolve-working-dirs.d.ts.map +1 -1
  405. package/dist/utils/resolve-working-dirs.js +6 -2
  406. package/dist/utils/resolve-working-dirs.js.map +1 -1
  407. package/dist/utils/signals.d.ts.map +1 -1
  408. package/dist/utils/startup-logger.d.ts.map +1 -1
  409. package/dist/utils/startup-logger.js +27 -21
  410. package/dist/utils/startup-logger.js.map +1 -1
  411. package/dist/utils/transform-content-types-to-models.d.ts +3 -3
  412. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  413. package/dist/utils/transform-content-types-to-models.js +10 -5
  414. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  415. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  416. package/dist/utils/update-notifier/index.js +21 -8
  417. package/dist/utils/update-notifier/index.js.map +1 -1
  418. package/dist/utils/update-notifier/index.mjs +6 -1
  419. package/dist/utils/update-notifier/index.mjs.map +1 -1
  420. package/package.json +18 -21
@@ -13,6 +13,36 @@ var id = 0;
13
13
  function _class_private_field_loose_key(name) {
14
14
  return "__private_" + id++ + "_" + name;
15
15
  }
16
+ /**
17
+ * Defines a Strapi MCP prompt with full type inference, ready to pass to
18
+ * `strapi.ai.mcp.registerPrompt()`. Exposed publicly as `ai.mcp.definePrompt`.
19
+ *
20
+ * The returned value is the definition unchanged — this builder only exists to
21
+ * infer the `name`/`argsSchema` and narrow the access variant (`devModeOnly` vs
22
+ * `auth`) so the result is directly assignable to `registerPrompt`.
23
+ *
24
+ * @param prompt - The prompt definition. Provide either `devModeOnly: true`
25
+ * (dev-only, no auth) or an `auth` policy set — never both.
26
+ * @returns The same definition, with its access variant narrowed.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * import { ai } from '@strapi/strapi';
31
+ *
32
+ * const context = ai.mcp.definePrompt({
33
+ * name: 'app-context',
34
+ * title: 'App Context',
35
+ * description: 'Provides context about the app',
36
+ * devModeOnly: true,
37
+ * createHandler: (strapi) => async () => ({
38
+ * messages: [{ role: 'user', content: { type: 'text', text: 'You are connected to Strapi.' } }],
39
+ * }),
40
+ * });
41
+ *
42
+ * // later, in register() or bootstrap():
43
+ * strapi.ai.mcp.registerPrompt(context);
44
+ * ```
45
+ */ const makeMcpPromptDefinition = (definition)=>definition;
16
46
  var _strapi = /*#__PURE__*/ _class_private_field_loose_key("_strapi");
17
47
  class McpPromptRegistry extends McpCapabilityRegistryBase {
18
48
  bind(mcpServer) {
@@ -71,5 +101,5 @@ class McpPromptRegistry extends McpCapabilityRegistryBase {
71
101
  }
72
102
  }
73
103
 
74
- export { McpPromptRegistry };
104
+ export { McpPromptRegistry, makeMcpPromptDefinition };
75
105
  //# sourceMappingURL=prompt-registry.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-registry.mjs","sources":["../../../src/services/mcp/prompt-registry.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions\nimport type { McpServer, RegisteredPrompt } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Core, Modules } from '@strapi/types';\n\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport {\n type McpCapabilityRegistry,\n McpCapabilityRegistryBase,\n} from './internal/McpCapabilityRegistry';\nimport { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration';\nimport { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics';\n\nexport const makeMcpPromptDefinition = <Definition extends Modules.MCP.McpPromptDefinition>(\n prompt: Definition\n): Definition => prompt;\n\nexport class McpPromptRegistry\n extends McpCapabilityRegistryBase<'prompt', Modules.MCP.McpPromptDefinition, RegisteredPrompt>\n implements McpCapabilityRegistry\n{\n #strapi: Core.Strapi;\n\n constructor(ctx: {\n strapi: Core.Strapi;\n definitions: McpCapabilityDefinitionRegistry<'prompt', Modules.MCP.McpPromptDefinition>;\n }) {\n super(ctx.definitions);\n this.#strapi = ctx.strapi;\n }\n\n bind(mcpServer: McpServer) {\n const strapi = this.#strapi;\n\n super.register((definition) => {\n const { name, title, description, argsSchema, createHandler } = definition;\n\n return createSafeCapabilityRegistration({\n strapi,\n capabilityType: 'Prompt',\n name,\n createHandler,\n createFallbackHandler(errorMessage) {\n return async () => ({\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Prompt \"${name}\" failed to initialize: ${errorMessage}`,\n },\n },\n ],\n });\n },\n createErrorResult(error) {\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Prompt \"${name}\" execution failed: ${error.message}`,\n },\n },\n ],\n };\n },\n registerWithSdk(safeHandler) {\n const sdkHandler = wrapCapabilityHandlerForMetrics(\n strapi,\n 'prompt',\n name,\n definition.telemetry,\n safeHandler\n );\n\n return mcpServer.registerPrompt(\n name,\n {\n title,\n description,\n // @ts-expect-error - Internal handler type mismatch due to optional argsSchema\n argsSchema,\n },\n sdkHandler\n );\n },\n });\n });\n }\n}\n"],"names":["McpPromptRegistry","McpCapabilityRegistryBase","bind","mcpServer","strapi","register","definition","name","title","description","argsSchema","createHandler","createSafeCapabilityRegistration","capabilityType","createFallbackHandler","errorMessage","messages","role","content","type","text","createErrorResult","error","message","registerWithSdk","safeHandler","sdkHandler","wrapCapabilityHandlerForMetrics","telemetry","registerPrompt","ctx","definitions"],"mappings":";;;;AAAA;;;;;;;;;;;AAoBE,IAAA,OAAA,iBAAA,8BAAA,CAAA,SAAA,CAAA;AAJK,MAAMA,iBAAAA,SACHC,yBAAAA,CAAAA;AAaRC,IAAAA,IAAAA,CAAKC,SAAoB,EAAE;AACzB,QAAA,MAAMC,MAAAA,GAAS,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA;QAEpB,KAAK,CAACC,SAAS,CAACC,UAAAA,GAAAA;YACd,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAEC,WAAW,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAGL,UAAAA;AAEhE,YAAA,OAAOM,gCAAAA,CAAiC;AACtCR,gBAAAA,MAAAA;gBACAS,cAAAA,EAAgB,QAAA;AAChBN,gBAAAA,IAAAA;AACAI,gBAAAA,aAAAA;AACAG,gBAAAA,qBAAAA,CAAAA,CAAsBC,YAAY,EAAA;AAChC,oBAAA,OAAO,WAAa;4BAClBC,QAAAA,EAAU;AACR,gCAAA;oCACEC,IAAAA,EAAM,MAAA;oCACNC,OAAAA,EAAS;wCACPC,IAAAA,EAAM,MAAA;AACNC,wCAAAA,IAAAA,EAAM,CAAC,QAAQ,EAAEb,IAAAA,CAAK,wBAAwB,EAAEQ,YAAAA,CAAAA;AAClD;AACF;AACD;yBACH,CAAA;AACF,gBAAA,CAAA;AACAM,gBAAAA,iBAAAA,CAAAA,CAAkBC,KAAK,EAAA;oBACrB,OAAO;wBACLN,QAAAA,EAAU;AACR,4BAAA;gCACEC,IAAAA,EAAM,MAAA;gCACNC,OAAAA,EAAS;oCACPC,IAAAA,EAAM,MAAA;oCACNC,IAAAA,EAAM,CAAC,QAAQ,EAAEb,IAAAA,CAAK,oBAAoB,EAAEe,KAAAA,CAAMC,OAAO,CAAA;AAC3D;AACF;AACD;AACH,qBAAA;AACF,gBAAA,CAAA;AACAC,gBAAAA,eAAAA,CAAAA,CAAgBC,WAAW,EAAA;AACzB,oBAAA,MAAMC,aAAaC,+BAAAA,CACjBvB,MAAAA,EACA,UACAG,IAAAA,EACAD,UAAAA,CAAWsB,SAAS,EACpBH,WAAAA,CAAAA;oBAGF,OAAOtB,SAAAA,CAAU0B,cAAc,CAC7BtB,IAAAA,EACA;AACEC,wBAAAA,KAAAA;AACAC,wBAAAA,WAAAA;;AAEAC,wBAAAA;qBACF,EACAgB,UAAAA,CAAAA;AAEJ,gBAAA;AACF,aAAA,CAAA;AACF,QAAA,CAAA,CAAA;AACF,IAAA;AAnEA,IAAA,WAAA,CAAYI,GAGX,CAAE;AACD,QAAA,KAAK,CAACA,GAAAA,CAAIC,WAAW,CAAA,EANvB,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;;mBAAA;;AAOE,QAAA,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA,GAAUD,IAAI1B,MAAM;AAC3B,IAAA;AA8DF;;;;"}
1
+ {"version":3,"file":"prompt-registry.mjs","sources":["../../../src/services/mcp/prompt-registry.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions\nimport type { McpServer, RegisteredPrompt } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Core, Modules } from '@strapi/types';\n\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport {\n type McpCapabilityRegistry,\n McpCapabilityRegistryBase,\n} from './internal/McpCapabilityRegistry';\nimport { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration';\nimport { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics';\n\n/**\n * Defines a Strapi MCP prompt with full type inference, ready to pass to\n * `strapi.ai.mcp.registerPrompt()`. Exposed publicly as `ai.mcp.definePrompt`.\n *\n * The returned value is the definition unchanged — this builder only exists to\n * infer the `name`/`argsSchema` and narrow the access variant (`devModeOnly` vs\n * `auth`) so the result is directly assignable to `registerPrompt`.\n *\n * @param prompt - The prompt definition. Provide either `devModeOnly: true`\n * (dev-only, no auth) or an `auth` policy set — never both.\n * @returns The same definition, with its access variant narrowed.\n *\n * @example\n * ```ts\n * import { ai } from '@strapi/strapi';\n *\n * const context = ai.mcp.definePrompt({\n * name: 'app-context',\n * title: 'App Context',\n * description: 'Provides context about the app',\n * devModeOnly: true,\n * createHandler: (strapi) => async () => ({\n * messages: [{ role: 'user', content: { type: 'text', text: 'You are connected to Strapi.' } }],\n * }),\n * });\n *\n * // later, in register() or bootstrap():\n * strapi.ai.mcp.registerPrompt(context);\n * ```\n */\nexport const makeMcpPromptDefinition = ((definition: Modules.MCP.McpPromptDefinition) =>\n definition) as unknown as Modules.MCP.McpPromptBuilder;\n\nexport class McpPromptRegistry\n extends McpCapabilityRegistryBase<'prompt', Modules.MCP.McpPromptDefinition, RegisteredPrompt>\n implements McpCapabilityRegistry\n{\n #strapi: Core.Strapi;\n\n constructor(ctx: {\n strapi: Core.Strapi;\n definitions: McpCapabilityDefinitionRegistry<'prompt', Modules.MCP.McpPromptDefinition>;\n }) {\n super(ctx.definitions);\n this.#strapi = ctx.strapi;\n }\n\n bind(mcpServer: McpServer) {\n const strapi = this.#strapi;\n\n super.register((definition) => {\n const { name, title, description, argsSchema, createHandler } = definition;\n\n return createSafeCapabilityRegistration({\n strapi,\n capabilityType: 'Prompt',\n name,\n createHandler,\n createFallbackHandler(errorMessage) {\n return async () => ({\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Prompt \"${name}\" failed to initialize: ${errorMessage}`,\n },\n },\n ],\n });\n },\n createErrorResult(error) {\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Prompt \"${name}\" execution failed: ${error.message}`,\n },\n },\n ],\n };\n },\n registerWithSdk(safeHandler) {\n const sdkHandler = wrapCapabilityHandlerForMetrics(\n strapi,\n 'prompt',\n name,\n definition.telemetry,\n safeHandler\n );\n\n return mcpServer.registerPrompt(\n name,\n {\n title,\n description,\n // @ts-expect-error - Internal handler type mismatch due to optional argsSchema\n argsSchema,\n },\n sdkHandler\n );\n },\n });\n });\n }\n}\n"],"names":["makeMcpPromptDefinition","definition","McpPromptRegistry","McpCapabilityRegistryBase","bind","mcpServer","strapi","register","name","title","description","argsSchema","createHandler","createSafeCapabilityRegistration","capabilityType","createFallbackHandler","errorMessage","messages","role","content","type","text","createErrorResult","error","message","registerWithSdk","safeHandler","sdkHandler","wrapCapabilityHandlerForMetrics","telemetry","registerPrompt","ctx","definitions"],"mappings":";;;;AAAA;;;;;;;;;;;AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BC,IACM,MAAMA,uBAAAA,GAA2B,CAACC,aACvCA;AAMA,IAAA,OAAA,iBAAA,8BAAA,CAAA,SAAA,CAAA;AAJK,MAAMC,iBAAAA,SACHC,yBAAAA,CAAAA;AAaRC,IAAAA,IAAAA,CAAKC,SAAoB,EAAE;AACzB,QAAA,MAAMC,MAAAA,GAAS,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA;QAEpB,KAAK,CAACC,SAAS,CAACN,UAAAA,GAAAA;YACd,MAAM,EAAEO,IAAI,EAAEC,KAAK,EAAEC,WAAW,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAGX,UAAAA;AAEhE,YAAA,OAAOY,gCAAAA,CAAiC;AACtCP,gBAAAA,MAAAA;gBACAQ,cAAAA,EAAgB,QAAA;AAChBN,gBAAAA,IAAAA;AACAI,gBAAAA,aAAAA;AACAG,gBAAAA,qBAAAA,CAAAA,CAAsBC,YAAY,EAAA;AAChC,oBAAA,OAAO,WAAa;4BAClBC,QAAAA,EAAU;AACR,gCAAA;oCACEC,IAAAA,EAAM,MAAA;oCACNC,OAAAA,EAAS;wCACPC,IAAAA,EAAM,MAAA;AACNC,wCAAAA,IAAAA,EAAM,CAAC,QAAQ,EAAEb,IAAAA,CAAK,wBAAwB,EAAEQ,YAAAA,CAAAA;AAClD;AACF;AACD;yBACH,CAAA;AACF,gBAAA,CAAA;AACAM,gBAAAA,iBAAAA,CAAAA,CAAkBC,KAAK,EAAA;oBACrB,OAAO;wBACLN,QAAAA,EAAU;AACR,4BAAA;gCACEC,IAAAA,EAAM,MAAA;gCACNC,OAAAA,EAAS;oCACPC,IAAAA,EAAM,MAAA;oCACNC,IAAAA,EAAM,CAAC,QAAQ,EAAEb,IAAAA,CAAK,oBAAoB,EAAEe,KAAAA,CAAMC,OAAO,CAAA;AAC3D;AACF;AACD;AACH,qBAAA;AACF,gBAAA,CAAA;AACAC,gBAAAA,eAAAA,CAAAA,CAAgBC,WAAW,EAAA;AACzB,oBAAA,MAAMC,aAAaC,+BAAAA,CACjBtB,MAAAA,EACA,UACAE,IAAAA,EACAP,UAAAA,CAAW4B,SAAS,EACpBH,WAAAA,CAAAA;oBAGF,OAAOrB,SAAAA,CAAUyB,cAAc,CAC7BtB,IAAAA,EACA;AACEC,wBAAAA,KAAAA;AACAC,wBAAAA,WAAAA;;AAEAC,wBAAAA;qBACF,EACAgB,UAAAA,CAAAA;AAEJ,gBAAA;AACF,aAAA,CAAA;AACF,QAAA,CAAA,CAAA;AACF,IAAA;AAnEA,IAAA,WAAA,CAAYI,GAGX,CAAE;AACD,QAAA,KAAK,CAACA,GAAAA,CAAIC,WAAW,CAAA,EANvB,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;;mBAAA;;AAOE,QAAA,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA,GAAUD,IAAIzB,MAAM;AAC3B,IAAA;AA8DF;;;;"}
@@ -2,7 +2,37 @@ import type { McpServer, RegisteredResource } from '@modelcontextprotocol/sdk/se
2
2
  import type { Core, Modules } from '@strapi/types';
3
3
  import { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';
4
4
  import { type McpCapabilityRegistry, McpCapabilityRegistryBase } from './internal/McpCapabilityRegistry';
5
- export declare const makeMcpResourceDefinition: <Definition extends Modules.MCP.McpResourceDefinition<string>>(resource: Definition) => Definition;
5
+ /**
6
+ * Defines a Strapi MCP resource with full type inference, ready to pass to
7
+ * `strapi.ai.mcp.registerResource()`. Exposed publicly as `ai.mcp.defineResource`.
8
+ *
9
+ * The returned value is the definition unchanged — this builder only exists to
10
+ * infer the `name` and narrow the access variant (`devModeOnly` vs `auth`) so the
11
+ * result is directly assignable to `registerResource`.
12
+ *
13
+ * @param resource - The resource definition. Provide either `devModeOnly: true`
14
+ * (dev-only, no auth) or an `auth` policy set — never both.
15
+ * @returns The same definition, with its access variant narrowed.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * import { ai } from '@strapi/strapi';
20
+ *
21
+ * const appInfo = ai.mcp.defineResource({
22
+ * name: 'app-info',
23
+ * uri: 'strapi://app/info',
24
+ * metadata: { description: 'Metadata about the app', mimeType: 'application/json' },
25
+ * devModeOnly: true,
26
+ * createHandler: (strapi) => async (uri) => ({
27
+ * contents: [{ uri: uri.href, mimeType: 'application/json', text: JSON.stringify({ ok: true }) }],
28
+ * }),
29
+ * });
30
+ *
31
+ * // later, in register() or bootstrap():
32
+ * strapi.ai.mcp.registerResource(appInfo);
33
+ * ```
34
+ */
35
+ export declare const makeMcpResourceDefinition: Modules.MCP.McpResourceBuilder;
6
36
  export declare class McpResourceRegistry extends McpCapabilityRegistryBase<'resource', Modules.MCP.McpResourceDefinition, RegisteredResource> implements McpCapabilityRegistry {
7
37
  #private;
8
38
  constructor(ctx: {
@@ -1 +1 @@
1
- {"version":3,"file":"resource-registry.d.ts","sourceRoot":"","sources":["../../../src/services/mcp/resource-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,kBAAkB,EAEnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EACL,KAAK,qBAAqB,EAC1B,yBAAyB,EAC1B,MAAM,kCAAkC,CAAC;AAI1C,eAAO,MAAM,yBAAyB,2EAC1B,UAAU,KACnB,UAAsB,CAAC;AAE1B,qBAAa,mBACX,SAAQ,yBAAyB,CAC/B,UAAU,EACV,OAAO,CAAC,GAAG,CAAC,qBAAqB,EACjC,kBAAkB,CAEpB,YAAW,qBAAqB;;gBAIpB,GAAG,EAAE;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,+BAA+B,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;KAC7F;IAKD,IAAI,CAAC,SAAS,EAAE,SAAS;CA+C1B"}
1
+ {"version":3,"file":"resource-registry.d.ts","sourceRoot":"","sources":["../../../src/services/mcp/resource-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,kBAAkB,EAEnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EACL,KAAK,qBAAqB,EAC1B,yBAAyB,EAC1B,MAAM,kCAAkC,CAAC;AAI1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,yBAAyB,EACV,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAE3D,qBAAa,mBACX,SAAQ,yBAAyB,CAC/B,UAAU,EACV,OAAO,CAAC,GAAG,CAAC,qBAAqB,EACjC,kBAAkB,CAEpB,YAAW,qBAAqB;;gBAIpB,GAAG,EAAE;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,+BAA+B,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;KAC7F;IAKD,IAAI,CAAC,SAAS,EAAE,SAAS;CA+C1B"}
@@ -14,6 +14,36 @@ var id = 0;
14
14
  function _class_private_field_loose_key(name) {
15
15
  return "__private_" + id++ + "_" + name;
16
16
  }
17
+ /**
18
+ * Defines a Strapi MCP resource with full type inference, ready to pass to
19
+ * `strapi.ai.mcp.registerResource()`. Exposed publicly as `ai.mcp.defineResource`.
20
+ *
21
+ * The returned value is the definition unchanged — this builder only exists to
22
+ * infer the `name` and narrow the access variant (`devModeOnly` vs `auth`) so the
23
+ * result is directly assignable to `registerResource`.
24
+ *
25
+ * @param resource - The resource definition. Provide either `devModeOnly: true`
26
+ * (dev-only, no auth) or an `auth` policy set — never both.
27
+ * @returns The same definition, with its access variant narrowed.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * import { ai } from '@strapi/strapi';
32
+ *
33
+ * const appInfo = ai.mcp.defineResource({
34
+ * name: 'app-info',
35
+ * uri: 'strapi://app/info',
36
+ * metadata: { description: 'Metadata about the app', mimeType: 'application/json' },
37
+ * devModeOnly: true,
38
+ * createHandler: (strapi) => async (uri) => ({
39
+ * contents: [{ uri: uri.href, mimeType: 'application/json', text: JSON.stringify({ ok: true }) }],
40
+ * }),
41
+ * });
42
+ *
43
+ * // later, in register() or bootstrap():
44
+ * strapi.ai.mcp.registerResource(appInfo);
45
+ * ```
46
+ */ const makeMcpResourceDefinition = (definition)=>definition;
17
47
  var _strapi = /*#__PURE__*/ _class_private_field_loose_key("_strapi");
18
48
  class McpResourceRegistry extends McpCapabilityRegistry.McpCapabilityRegistryBase {
19
49
  bind(mcpServer) {
@@ -64,4 +94,5 @@ class McpResourceRegistry extends McpCapabilityRegistry.McpCapabilityRegistryBas
64
94
  }
65
95
 
66
96
  exports.McpResourceRegistry = McpResourceRegistry;
97
+ exports.makeMcpResourceDefinition = makeMcpResourceDefinition;
67
98
  //# sourceMappingURL=resource-registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource-registry.js","sources":["../../../src/services/mcp/resource-registry.ts"],"sourcesContent":["import type {\n McpServer,\n RegisteredResource,\n // eslint-disable-next-line import/extensions\n} from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Core, Modules } from '@strapi/types';\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport {\n type McpCapabilityRegistry,\n McpCapabilityRegistryBase,\n} from './internal/McpCapabilityRegistry';\nimport { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration';\nimport { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics';\n\nexport const makeMcpResourceDefinition = <Definition extends Modules.MCP.McpResourceDefinition>(\n resource: Definition\n): Definition => resource;\n\nexport class McpResourceRegistry\n extends McpCapabilityRegistryBase<\n 'resource',\n Modules.MCP.McpResourceDefinition,\n RegisteredResource\n >\n implements McpCapabilityRegistry\n{\n #strapi: Core.Strapi;\n\n constructor(ctx: {\n strapi: Core.Strapi;\n definitions: McpCapabilityDefinitionRegistry<'resource', Modules.MCP.McpResourceDefinition>;\n }) {\n super(ctx.definitions);\n this.#strapi = ctx.strapi;\n }\n\n bind(mcpServer: McpServer) {\n const strapi = this.#strapi;\n\n super.register((definition) => {\n const { name, uri, metadata, createHandler } = definition;\n\n return createSafeCapabilityRegistration({\n strapi,\n capabilityType: 'Resource',\n name,\n createHandler,\n createFallbackHandler(errorMessage) {\n return async (resourceUri) => ({\n contents: [\n {\n uri: resourceUri.href,\n text: `Resource \"${name}\" failed to initialize: ${errorMessage}`,\n mimeType: 'text/plain',\n },\n ],\n });\n },\n createErrorResult(error, args) {\n return {\n contents: [\n {\n uri: args[0] instanceof URL ? args[0].href : uri,\n text: `Resource \"${name}\" execution failed: ${error.message}`,\n mimeType: 'text/plain',\n },\n ],\n };\n },\n registerWithSdk(safeHandler) {\n const sdkHandler = wrapCapabilityHandlerForMetrics(\n strapi,\n 'resource',\n name,\n definition.telemetry,\n safeHandler\n );\n\n return mcpServer.registerResource(name, uri, metadata, sdkHandler);\n },\n });\n });\n }\n}\n"],"names":["McpResourceRegistry","McpCapabilityRegistryBase","bind","mcpServer","strapi","register","definition","name","uri","metadata","createHandler","createSafeCapabilityRegistration","capabilityType","createFallbackHandler","errorMessage","resourceUri","contents","href","text","mimeType","createErrorResult","error","args","URL","message","registerWithSdk","safeHandler","sdkHandler","wrapCapabilityHandlerForMetrics","telemetry","registerResource","ctx","definitions"],"mappings":";;;;;;;;;;;;;;;;AA0BE,IAAA,OAAA,iBAAA,8BAAA,CAAA,SAAA,CAAA;AARK,MAAMA,mBAAAA,SACHC,+CAAAA,CAAAA;AAiBRC,IAAAA,IAAAA,CAAKC,SAAoB,EAAE;AACzB,QAAA,MAAMC,MAAAA,GAAS,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA;QAEpB,KAAK,CAACC,SAAS,CAACC,UAAAA,GAAAA;YACd,MAAM,EAAEC,IAAI,EAAEC,GAAG,EAAEC,QAAQ,EAAEC,aAAa,EAAE,GAAGJ,UAAAA;AAE/C,YAAA,OAAOK,iEAAAA,CAAiC;AACtCP,gBAAAA,MAAAA;gBACAQ,cAAAA,EAAgB,UAAA;AAChBL,gBAAAA,IAAAA;AACAG,gBAAAA,aAAAA;AACAG,gBAAAA,qBAAAA,CAAAA,CAAsBC,YAAY,EAAA;oBAChC,OAAO,OAAOC,eAAiB;4BAC7BC,QAAAA,EAAU;AACR,gCAAA;AACER,oCAAAA,GAAAA,EAAKO,YAAYE,IAAI;AACrBC,oCAAAA,IAAAA,EAAM,CAAC,UAAU,EAAEX,IAAAA,CAAK,wBAAwB,EAAEO,YAAAA,CAAAA,CAAc;oCAChEK,QAAAA,EAAU;AACZ;AACD;yBACH,CAAA;AACF,gBAAA,CAAA;gBACAC,iBAAAA,CAAAA,CAAkBC,KAAK,EAAEC,IAAI,EAAA;oBAC3B,OAAO;wBACLN,QAAAA,EAAU;AACR,4BAAA;gCACER,GAAAA,EAAKc,IAAI,CAAC,CAAA,CAAE,YAAYC,GAAAA,GAAMD,IAAI,CAAC,CAAA,CAAE,CAACL,IAAI,GAAGT,GAAAA;gCAC7CU,IAAAA,EAAM,CAAC,UAAU,EAAEX,IAAAA,CAAK,oBAAoB,EAAEc,KAAAA,CAAMG,OAAO,CAAA,CAAE;gCAC7DL,QAAAA,EAAU;AACZ;AACD;AACH,qBAAA;AACF,gBAAA,CAAA;AACAM,gBAAAA,eAAAA,CAAAA,CAAgBC,WAAW,EAAA;AACzB,oBAAA,MAAMC,aAAaC,+DAAAA,CACjBxB,MAAAA,EACA,YACAG,IAAAA,EACAD,UAAAA,CAAWuB,SAAS,EACpBH,WAAAA,CAAAA;AAGF,oBAAA,OAAOvB,SAAAA,CAAU2B,gBAAgB,CAACvB,IAAAA,EAAMC,KAAKC,QAAAA,EAAUkB,UAAAA,CAAAA;AACzD,gBAAA;AACF,aAAA,CAAA;AACF,QAAA,CAAA,CAAA;AACF,IAAA;AAtDA,IAAA,WAAA,CAAYI,GAGX,CAAE;AACD,QAAA,KAAK,CAACA,GAAAA,CAAIC,WAAW,CAAA,EANvB,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;;mBAAA;;AAOE,QAAA,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA,GAAUD,IAAI3B,MAAM;AAC3B,IAAA;AAiDF;;;;"}
1
+ {"version":3,"file":"resource-registry.js","sources":["../../../src/services/mcp/resource-registry.ts"],"sourcesContent":["import type {\n McpServer,\n RegisteredResource,\n // eslint-disable-next-line import/extensions\n} from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Core, Modules } from '@strapi/types';\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport {\n type McpCapabilityRegistry,\n McpCapabilityRegistryBase,\n} from './internal/McpCapabilityRegistry';\nimport { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration';\nimport { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics';\n\n/**\n * Defines a Strapi MCP resource with full type inference, ready to pass to\n * `strapi.ai.mcp.registerResource()`. Exposed publicly as `ai.mcp.defineResource`.\n *\n * The returned value is the definition unchanged — this builder only exists to\n * infer the `name` and narrow the access variant (`devModeOnly` vs `auth`) so the\n * result is directly assignable to `registerResource`.\n *\n * @param resource - The resource definition. Provide either `devModeOnly: true`\n * (dev-only, no auth) or an `auth` policy set — never both.\n * @returns The same definition, with its access variant narrowed.\n *\n * @example\n * ```ts\n * import { ai } from '@strapi/strapi';\n *\n * const appInfo = ai.mcp.defineResource({\n * name: 'app-info',\n * uri: 'strapi://app/info',\n * metadata: { description: 'Metadata about the app', mimeType: 'application/json' },\n * devModeOnly: true,\n * createHandler: (strapi) => async (uri) => ({\n * contents: [{ uri: uri.href, mimeType: 'application/json', text: JSON.stringify({ ok: true }) }],\n * }),\n * });\n *\n * // later, in register() or bootstrap():\n * strapi.ai.mcp.registerResource(appInfo);\n * ```\n */\nexport const makeMcpResourceDefinition = ((definition: Modules.MCP.McpResourceDefinition) =>\n definition) as unknown as Modules.MCP.McpResourceBuilder;\n\nexport class McpResourceRegistry\n extends McpCapabilityRegistryBase<\n 'resource',\n Modules.MCP.McpResourceDefinition,\n RegisteredResource\n >\n implements McpCapabilityRegistry\n{\n #strapi: Core.Strapi;\n\n constructor(ctx: {\n strapi: Core.Strapi;\n definitions: McpCapabilityDefinitionRegistry<'resource', Modules.MCP.McpResourceDefinition>;\n }) {\n super(ctx.definitions);\n this.#strapi = ctx.strapi;\n }\n\n bind(mcpServer: McpServer) {\n const strapi = this.#strapi;\n\n super.register((definition) => {\n const { name, uri, metadata, createHandler } = definition;\n\n return createSafeCapabilityRegistration({\n strapi,\n capabilityType: 'Resource',\n name,\n createHandler,\n createFallbackHandler(errorMessage) {\n return async (resourceUri) => ({\n contents: [\n {\n uri: resourceUri.href,\n text: `Resource \"${name}\" failed to initialize: ${errorMessage}`,\n mimeType: 'text/plain',\n },\n ],\n });\n },\n createErrorResult(error, args) {\n return {\n contents: [\n {\n uri: args[0] instanceof URL ? args[0].href : uri,\n text: `Resource \"${name}\" execution failed: ${error.message}`,\n mimeType: 'text/plain',\n },\n ],\n };\n },\n registerWithSdk(safeHandler) {\n const sdkHandler = wrapCapabilityHandlerForMetrics(\n strapi,\n 'resource',\n name,\n definition.telemetry,\n safeHandler\n );\n\n return mcpServer.registerResource(name, uri, metadata, sdkHandler);\n },\n });\n });\n }\n}\n"],"names":["makeMcpResourceDefinition","definition","McpResourceRegistry","McpCapabilityRegistryBase","bind","mcpServer","strapi","register","name","uri","metadata","createHandler","createSafeCapabilityRegistration","capabilityType","createFallbackHandler","errorMessage","resourceUri","contents","href","text","mimeType","createErrorResult","error","args","URL","message","registerWithSdk","safeHandler","sdkHandler","wrapCapabilityHandlerForMetrics","telemetry","registerResource","ctx","definitions"],"mappings":";;;;;;;;;;;;;;;;AAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BC,IACM,MAAMA,yBAAAA,GAA6B,CAACC,aACzCA;AAUA,IAAA,OAAA,iBAAA,8BAAA,CAAA,SAAA,CAAA;AARK,MAAMC,mBAAAA,SACHC,+CAAAA,CAAAA;AAiBRC,IAAAA,IAAAA,CAAKC,SAAoB,EAAE;AACzB,QAAA,MAAMC,MAAAA,GAAS,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA;QAEpB,KAAK,CAACC,SAAS,CAACN,UAAAA,GAAAA;YACd,MAAM,EAAEO,IAAI,EAAEC,GAAG,EAAEC,QAAQ,EAAEC,aAAa,EAAE,GAAGV,UAAAA;AAE/C,YAAA,OAAOW,iEAAAA,CAAiC;AACtCN,gBAAAA,MAAAA;gBACAO,cAAAA,EAAgB,UAAA;AAChBL,gBAAAA,IAAAA;AACAG,gBAAAA,aAAAA;AACAG,gBAAAA,qBAAAA,CAAAA,CAAsBC,YAAY,EAAA;oBAChC,OAAO,OAAOC,eAAiB;4BAC7BC,QAAAA,EAAU;AACR,gCAAA;AACER,oCAAAA,GAAAA,EAAKO,YAAYE,IAAI;AACrBC,oCAAAA,IAAAA,EAAM,CAAC,UAAU,EAAEX,IAAAA,CAAK,wBAAwB,EAAEO,YAAAA,CAAAA,CAAc;oCAChEK,QAAAA,EAAU;AACZ;AACD;yBACH,CAAA;AACF,gBAAA,CAAA;gBACAC,iBAAAA,CAAAA,CAAkBC,KAAK,EAAEC,IAAI,EAAA;oBAC3B,OAAO;wBACLN,QAAAA,EAAU;AACR,4BAAA;gCACER,GAAAA,EAAKc,IAAI,CAAC,CAAA,CAAE,YAAYC,GAAAA,GAAMD,IAAI,CAAC,CAAA,CAAE,CAACL,IAAI,GAAGT,GAAAA;gCAC7CU,IAAAA,EAAM,CAAC,UAAU,EAAEX,IAAAA,CAAK,oBAAoB,EAAEc,KAAAA,CAAMG,OAAO,CAAA,CAAE;gCAC7DL,QAAAA,EAAU;AACZ;AACD;AACH,qBAAA;AACF,gBAAA,CAAA;AACAM,gBAAAA,eAAAA,CAAAA,CAAgBC,WAAW,EAAA;AACzB,oBAAA,MAAMC,aAAaC,+DAAAA,CACjBvB,MAAAA,EACA,YACAE,IAAAA,EACAP,UAAAA,CAAW6B,SAAS,EACpBH,WAAAA,CAAAA;AAGF,oBAAA,OAAOtB,SAAAA,CAAU0B,gBAAgB,CAACvB,IAAAA,EAAMC,KAAKC,QAAAA,EAAUkB,UAAAA,CAAAA;AACzD,gBAAA;AACF,aAAA,CAAA;AACF,QAAA,CAAA,CAAA;AACF,IAAA;AAtDA,IAAA,WAAA,CAAYI,GAGX,CAAE;AACD,QAAA,KAAK,CAACA,GAAAA,CAAIC,WAAW,CAAA,EANvB,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;;mBAAA;;AAOE,QAAA,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA,GAAUD,IAAI1B,MAAM;AAC3B,IAAA;AAiDF;;;;;"}
@@ -12,6 +12,36 @@ var id = 0;
12
12
  function _class_private_field_loose_key(name) {
13
13
  return "__private_" + id++ + "_" + name;
14
14
  }
15
+ /**
16
+ * Defines a Strapi MCP resource with full type inference, ready to pass to
17
+ * `strapi.ai.mcp.registerResource()`. Exposed publicly as `ai.mcp.defineResource`.
18
+ *
19
+ * The returned value is the definition unchanged — this builder only exists to
20
+ * infer the `name` and narrow the access variant (`devModeOnly` vs `auth`) so the
21
+ * result is directly assignable to `registerResource`.
22
+ *
23
+ * @param resource - The resource definition. Provide either `devModeOnly: true`
24
+ * (dev-only, no auth) or an `auth` policy set — never both.
25
+ * @returns The same definition, with its access variant narrowed.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * import { ai } from '@strapi/strapi';
30
+ *
31
+ * const appInfo = ai.mcp.defineResource({
32
+ * name: 'app-info',
33
+ * uri: 'strapi://app/info',
34
+ * metadata: { description: 'Metadata about the app', mimeType: 'application/json' },
35
+ * devModeOnly: true,
36
+ * createHandler: (strapi) => async (uri) => ({
37
+ * contents: [{ uri: uri.href, mimeType: 'application/json', text: JSON.stringify({ ok: true }) }],
38
+ * }),
39
+ * });
40
+ *
41
+ * // later, in register() or bootstrap():
42
+ * strapi.ai.mcp.registerResource(appInfo);
43
+ * ```
44
+ */ const makeMcpResourceDefinition = (definition)=>definition;
15
45
  var _strapi = /*#__PURE__*/ _class_private_field_loose_key("_strapi");
16
46
  class McpResourceRegistry extends McpCapabilityRegistryBase {
17
47
  bind(mcpServer) {
@@ -61,5 +91,5 @@ class McpResourceRegistry extends McpCapabilityRegistryBase {
61
91
  }
62
92
  }
63
93
 
64
- export { McpResourceRegistry };
94
+ export { McpResourceRegistry, makeMcpResourceDefinition };
65
95
  //# sourceMappingURL=resource-registry.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource-registry.mjs","sources":["../../../src/services/mcp/resource-registry.ts"],"sourcesContent":["import type {\n McpServer,\n RegisteredResource,\n // eslint-disable-next-line import/extensions\n} from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Core, Modules } from '@strapi/types';\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport {\n type McpCapabilityRegistry,\n McpCapabilityRegistryBase,\n} from './internal/McpCapabilityRegistry';\nimport { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration';\nimport { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics';\n\nexport const makeMcpResourceDefinition = <Definition extends Modules.MCP.McpResourceDefinition>(\n resource: Definition\n): Definition => resource;\n\nexport class McpResourceRegistry\n extends McpCapabilityRegistryBase<\n 'resource',\n Modules.MCP.McpResourceDefinition,\n RegisteredResource\n >\n implements McpCapabilityRegistry\n{\n #strapi: Core.Strapi;\n\n constructor(ctx: {\n strapi: Core.Strapi;\n definitions: McpCapabilityDefinitionRegistry<'resource', Modules.MCP.McpResourceDefinition>;\n }) {\n super(ctx.definitions);\n this.#strapi = ctx.strapi;\n }\n\n bind(mcpServer: McpServer) {\n const strapi = this.#strapi;\n\n super.register((definition) => {\n const { name, uri, metadata, createHandler } = definition;\n\n return createSafeCapabilityRegistration({\n strapi,\n capabilityType: 'Resource',\n name,\n createHandler,\n createFallbackHandler(errorMessage) {\n return async (resourceUri) => ({\n contents: [\n {\n uri: resourceUri.href,\n text: `Resource \"${name}\" failed to initialize: ${errorMessage}`,\n mimeType: 'text/plain',\n },\n ],\n });\n },\n createErrorResult(error, args) {\n return {\n contents: [\n {\n uri: args[0] instanceof URL ? args[0].href : uri,\n text: `Resource \"${name}\" execution failed: ${error.message}`,\n mimeType: 'text/plain',\n },\n ],\n };\n },\n registerWithSdk(safeHandler) {\n const sdkHandler = wrapCapabilityHandlerForMetrics(\n strapi,\n 'resource',\n name,\n definition.telemetry,\n safeHandler\n );\n\n return mcpServer.registerResource(name, uri, metadata, sdkHandler);\n },\n });\n });\n }\n}\n"],"names":["McpResourceRegistry","McpCapabilityRegistryBase","bind","mcpServer","strapi","register","definition","name","uri","metadata","createHandler","createSafeCapabilityRegistration","capabilityType","createFallbackHandler","errorMessage","resourceUri","contents","href","text","mimeType","createErrorResult","error","args","URL","message","registerWithSdk","safeHandler","sdkHandler","wrapCapabilityHandlerForMetrics","telemetry","registerResource","ctx","definitions"],"mappings":";;;;;;;;;;;;;;AA0BE,IAAA,OAAA,iBAAA,8BAAA,CAAA,SAAA,CAAA;AARK,MAAMA,mBAAAA,SACHC,yBAAAA,CAAAA;AAiBRC,IAAAA,IAAAA,CAAKC,SAAoB,EAAE;AACzB,QAAA,MAAMC,MAAAA,GAAS,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA;QAEpB,KAAK,CAACC,SAAS,CAACC,UAAAA,GAAAA;YACd,MAAM,EAAEC,IAAI,EAAEC,GAAG,EAAEC,QAAQ,EAAEC,aAAa,EAAE,GAAGJ,UAAAA;AAE/C,YAAA,OAAOK,gCAAAA,CAAiC;AACtCP,gBAAAA,MAAAA;gBACAQ,cAAAA,EAAgB,UAAA;AAChBL,gBAAAA,IAAAA;AACAG,gBAAAA,aAAAA;AACAG,gBAAAA,qBAAAA,CAAAA,CAAsBC,YAAY,EAAA;oBAChC,OAAO,OAAOC,eAAiB;4BAC7BC,QAAAA,EAAU;AACR,gCAAA;AACER,oCAAAA,GAAAA,EAAKO,YAAYE,IAAI;AACrBC,oCAAAA,IAAAA,EAAM,CAAC,UAAU,EAAEX,IAAAA,CAAK,wBAAwB,EAAEO,YAAAA,CAAAA,CAAc;oCAChEK,QAAAA,EAAU;AACZ;AACD;yBACH,CAAA;AACF,gBAAA,CAAA;gBACAC,iBAAAA,CAAAA,CAAkBC,KAAK,EAAEC,IAAI,EAAA;oBAC3B,OAAO;wBACLN,QAAAA,EAAU;AACR,4BAAA;gCACER,GAAAA,EAAKc,IAAI,CAAC,CAAA,CAAE,YAAYC,GAAAA,GAAMD,IAAI,CAAC,CAAA,CAAE,CAACL,IAAI,GAAGT,GAAAA;gCAC7CU,IAAAA,EAAM,CAAC,UAAU,EAAEX,IAAAA,CAAK,oBAAoB,EAAEc,KAAAA,CAAMG,OAAO,CAAA,CAAE;gCAC7DL,QAAAA,EAAU;AACZ;AACD;AACH,qBAAA;AACF,gBAAA,CAAA;AACAM,gBAAAA,eAAAA,CAAAA,CAAgBC,WAAW,EAAA;AACzB,oBAAA,MAAMC,aAAaC,+BAAAA,CACjBxB,MAAAA,EACA,YACAG,IAAAA,EACAD,UAAAA,CAAWuB,SAAS,EACpBH,WAAAA,CAAAA;AAGF,oBAAA,OAAOvB,SAAAA,CAAU2B,gBAAgB,CAACvB,IAAAA,EAAMC,KAAKC,QAAAA,EAAUkB,UAAAA,CAAAA;AACzD,gBAAA;AACF,aAAA,CAAA;AACF,QAAA,CAAA,CAAA;AACF,IAAA;AAtDA,IAAA,WAAA,CAAYI,GAGX,CAAE;AACD,QAAA,KAAK,CAACA,GAAAA,CAAIC,WAAW,CAAA,EANvB,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;;mBAAA;;AAOE,QAAA,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA,GAAUD,IAAI3B,MAAM;AAC3B,IAAA;AAiDF;;;;"}
1
+ {"version":3,"file":"resource-registry.mjs","sources":["../../../src/services/mcp/resource-registry.ts"],"sourcesContent":["import type {\n McpServer,\n RegisteredResource,\n // eslint-disable-next-line import/extensions\n} from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Core, Modules } from '@strapi/types';\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport {\n type McpCapabilityRegistry,\n McpCapabilityRegistryBase,\n} from './internal/McpCapabilityRegistry';\nimport { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration';\nimport { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics';\n\n/**\n * Defines a Strapi MCP resource with full type inference, ready to pass to\n * `strapi.ai.mcp.registerResource()`. Exposed publicly as `ai.mcp.defineResource`.\n *\n * The returned value is the definition unchanged — this builder only exists to\n * infer the `name` and narrow the access variant (`devModeOnly` vs `auth`) so the\n * result is directly assignable to `registerResource`.\n *\n * @param resource - The resource definition. Provide either `devModeOnly: true`\n * (dev-only, no auth) or an `auth` policy set — never both.\n * @returns The same definition, with its access variant narrowed.\n *\n * @example\n * ```ts\n * import { ai } from '@strapi/strapi';\n *\n * const appInfo = ai.mcp.defineResource({\n * name: 'app-info',\n * uri: 'strapi://app/info',\n * metadata: { description: 'Metadata about the app', mimeType: 'application/json' },\n * devModeOnly: true,\n * createHandler: (strapi) => async (uri) => ({\n * contents: [{ uri: uri.href, mimeType: 'application/json', text: JSON.stringify({ ok: true }) }],\n * }),\n * });\n *\n * // later, in register() or bootstrap():\n * strapi.ai.mcp.registerResource(appInfo);\n * ```\n */\nexport const makeMcpResourceDefinition = ((definition: Modules.MCP.McpResourceDefinition) =>\n definition) as unknown as Modules.MCP.McpResourceBuilder;\n\nexport class McpResourceRegistry\n extends McpCapabilityRegistryBase<\n 'resource',\n Modules.MCP.McpResourceDefinition,\n RegisteredResource\n >\n implements McpCapabilityRegistry\n{\n #strapi: Core.Strapi;\n\n constructor(ctx: {\n strapi: Core.Strapi;\n definitions: McpCapabilityDefinitionRegistry<'resource', Modules.MCP.McpResourceDefinition>;\n }) {\n super(ctx.definitions);\n this.#strapi = ctx.strapi;\n }\n\n bind(mcpServer: McpServer) {\n const strapi = this.#strapi;\n\n super.register((definition) => {\n const { name, uri, metadata, createHandler } = definition;\n\n return createSafeCapabilityRegistration({\n strapi,\n capabilityType: 'Resource',\n name,\n createHandler,\n createFallbackHandler(errorMessage) {\n return async (resourceUri) => ({\n contents: [\n {\n uri: resourceUri.href,\n text: `Resource \"${name}\" failed to initialize: ${errorMessage}`,\n mimeType: 'text/plain',\n },\n ],\n });\n },\n createErrorResult(error, args) {\n return {\n contents: [\n {\n uri: args[0] instanceof URL ? args[0].href : uri,\n text: `Resource \"${name}\" execution failed: ${error.message}`,\n mimeType: 'text/plain',\n },\n ],\n };\n },\n registerWithSdk(safeHandler) {\n const sdkHandler = wrapCapabilityHandlerForMetrics(\n strapi,\n 'resource',\n name,\n definition.telemetry,\n safeHandler\n );\n\n return mcpServer.registerResource(name, uri, metadata, sdkHandler);\n },\n });\n });\n }\n}\n"],"names":["makeMcpResourceDefinition","definition","McpResourceRegistry","McpCapabilityRegistryBase","bind","mcpServer","strapi","register","name","uri","metadata","createHandler","createSafeCapabilityRegistration","capabilityType","createFallbackHandler","errorMessage","resourceUri","contents","href","text","mimeType","createErrorResult","error","args","URL","message","registerWithSdk","safeHandler","sdkHandler","wrapCapabilityHandlerForMetrics","telemetry","registerResource","ctx","definitions"],"mappings":";;;;;;;;;;;;;;AAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BC,IACM,MAAMA,yBAAAA,GAA6B,CAACC,aACzCA;AAUA,IAAA,OAAA,iBAAA,8BAAA,CAAA,SAAA,CAAA;AARK,MAAMC,mBAAAA,SACHC,yBAAAA,CAAAA;AAiBRC,IAAAA,IAAAA,CAAKC,SAAoB,EAAE;AACzB,QAAA,MAAMC,MAAAA,GAAS,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA;QAEpB,KAAK,CAACC,SAAS,CAACN,UAAAA,GAAAA;YACd,MAAM,EAAEO,IAAI,EAAEC,GAAG,EAAEC,QAAQ,EAAEC,aAAa,EAAE,GAAGV,UAAAA;AAE/C,YAAA,OAAOW,gCAAAA,CAAiC;AACtCN,gBAAAA,MAAAA;gBACAO,cAAAA,EAAgB,UAAA;AAChBL,gBAAAA,IAAAA;AACAG,gBAAAA,aAAAA;AACAG,gBAAAA,qBAAAA,CAAAA,CAAsBC,YAAY,EAAA;oBAChC,OAAO,OAAOC,eAAiB;4BAC7BC,QAAAA,EAAU;AACR,gCAAA;AACER,oCAAAA,GAAAA,EAAKO,YAAYE,IAAI;AACrBC,oCAAAA,IAAAA,EAAM,CAAC,UAAU,EAAEX,IAAAA,CAAK,wBAAwB,EAAEO,YAAAA,CAAAA,CAAc;oCAChEK,QAAAA,EAAU;AACZ;AACD;yBACH,CAAA;AACF,gBAAA,CAAA;gBACAC,iBAAAA,CAAAA,CAAkBC,KAAK,EAAEC,IAAI,EAAA;oBAC3B,OAAO;wBACLN,QAAAA,EAAU;AACR,4BAAA;gCACER,GAAAA,EAAKc,IAAI,CAAC,CAAA,CAAE,YAAYC,GAAAA,GAAMD,IAAI,CAAC,CAAA,CAAE,CAACL,IAAI,GAAGT,GAAAA;gCAC7CU,IAAAA,EAAM,CAAC,UAAU,EAAEX,IAAAA,CAAK,oBAAoB,EAAEc,KAAAA,CAAMG,OAAO,CAAA,CAAE;gCAC7DL,QAAAA,EAAU;AACZ;AACD;AACH,qBAAA;AACF,gBAAA,CAAA;AACAM,gBAAAA,eAAAA,CAAAA,CAAgBC,WAAW,EAAA;AACzB,oBAAA,MAAMC,aAAaC,+BAAAA,CACjBvB,MAAAA,EACA,YACAE,IAAAA,EACAP,UAAAA,CAAW6B,SAAS,EACpBH,WAAAA,CAAAA;AAGF,oBAAA,OAAOtB,SAAAA,CAAU0B,gBAAgB,CAACvB,IAAAA,EAAMC,KAAKC,QAAAA,EAAUkB,UAAAA,CAAAA;AACzD,gBAAA;AACF,aAAA,CAAA;AACF,QAAA,CAAA,CAAA;AACF,IAAA;AAtDA,IAAA,WAAA,CAAYI,GAGX,CAAE;AACD,QAAA,KAAK,CAACA,GAAAA,CAAIC,WAAW,CAAA,EANvB,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;;mBAAA;;AAOE,QAAA,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA,GAAUD,IAAI1B,MAAM;AAC3B,IAAA;AAiDF;;;;"}
@@ -7,5 +7,5 @@ export type McpRouteHandlers = {
7
7
  * Creates MCP route definitions for registration with Strapi server.
8
8
  * @internal
9
9
  */
10
- export declare const createMcpRoutes: (config: McpConfiguration, handlers: McpRouteHandlers) => Omit<Core.Route, 'info'>[];
10
+ export declare const createMcpRoutes: (config: McpConfiguration, handlers: McpRouteHandlers) => Omit<Core.Route, "info">[];
11
11
  //# sourceMappingURL=routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/services/mcp/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAgB/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC;CACpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,WAClB,gBAAgB,YACd,gBAAgB,KACzB,KAAK,KAAK,KAAK,EAAE,MAAM,CAAC,EAU1B,CAAC"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/services/mcp/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAgB/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC;CACpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,gBAAgB,EACxB,UAAU,gBAAgB,KACzB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAU1B,CAAC"}
@@ -1,17 +1,44 @@
1
1
  import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import type { Core, Modules } from '@strapi/types';
3
- import { z } from '@strapi/utils';
4
3
  import { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';
5
4
  import { type McpCapabilityRegistry, McpCapabilityRegistryBase } from './internal/McpCapabilityRegistry';
6
5
  import type { McpAdminTokenAbility } from './authentication';
7
- export declare function makeMcpToolDefinition<Name extends string, Title extends string, Description extends string, OutputSchema extends z.ZodObject<z.ZodRawShape>, InputSchema extends z.ZodObject<z.ZodRawShape> | undefined = undefined, Access extends Modules.MCP.McpCapabilityAccess = Modules.MCP.McpCapabilityAccess>(tool: {
8
- name: Name;
9
- title: Title;
10
- description: Description;
11
- resolveInputSchema?: (context: Modules.MCP.McpHandlerContext) => InputSchema;
12
- resolveOutputSchema: (context: Modules.MCP.McpHandlerContext) => OutputSchema;
13
- createHandler: (strapi: Core.Strapi, context: Modules.MCP.McpHandlerContext) => Modules.MCP.McpToolHandler<NoInfer<InputSchema>, NoInfer<OutputSchema>>;
14
- } & Access): Modules.MCP.McpToolDefinition<Name, InputSchema, OutputSchema, Title, Description> & Access;
6
+ /**
7
+ * Defines a Strapi MCP tool with full type inference, ready to pass to
8
+ * `strapi.ai.mcp.registerTool()`. Exposed publicly as `ai.mcp.defineTool`.
9
+ *
10
+ * The returned value is the definition unchanged — this builder only exists to
11
+ * infer the `name`, input/output schemas and handler types, and to narrow the
12
+ * access variant (`devModeOnly` vs `auth`) so the result is directly assignable
13
+ * to `registerTool`.
14
+ *
15
+ * @param tool - The tool definition. Provide either `devModeOnly: true` (dev-only,
16
+ * no auth) or an `auth` policy set — never both.
17
+ * @returns The same definition, with its access variant narrowed.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import { ai } from '@strapi/strapi';
22
+ * import { z } from '@strapi/utils';
23
+ *
24
+ * const greet = ai.mcp.defineTool({
25
+ * name: 'greet',
26
+ * title: 'Greet',
27
+ * description: 'Greets a user by name',
28
+ * devModeOnly: true,
29
+ * resolveInputSchema: () => z.object({ name: z.string() }),
30
+ * resolveOutputSchema: () => z.object({ message: z.string() }),
31
+ * createHandler: (strapi) => async ({ args }) => {
32
+ * const message = `Hello, ${args.name}!`;
33
+ * return { content: [{ type: 'text', text: message }], structuredContent: { message } };
34
+ * },
35
+ * });
36
+ *
37
+ * // later, in register() or bootstrap():
38
+ * strapi.ai.mcp.registerTool(greet);
39
+ * ```
40
+ */
41
+ export declare const makeMcpToolDefinition: Modules.MCP.McpToolBuilder;
15
42
  export declare class McpToolRegistry extends McpCapabilityRegistryBase<'tool', Modules.MCP.McpToolDefinition, RegisteredTool> implements McpCapabilityRegistry {
16
43
  #private;
17
44
  constructor(ctx: {
@@ -1 +1 @@
1
- {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../../src/services/mcp/tool-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EACL,KAAK,qBAAqB,EAC1B,yBAAyB,EAC1B,MAAM,kCAAkC,CAAC;AAG1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,wBAAgB,qBAAqB,CACnC,IAAI,SAAS,MAAM,EACnB,KAAK,SAAS,MAAM,EACpB,WAAW,SAAS,MAAM,EAC1B,YAAY,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EAC/C,WAAW,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,SAAS,GAAG,SAAS,EACtE,MAAM,SAAS,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAEhF,IAAI,EAAE;IACJ,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,WAAW,CAAC;IAC7E,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,YAAY,CAAC;IAC9E,aAAa,EAAE,CACb,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KACnC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;CAC9E,GAAG,MAAM,GACT,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,MAAM,CAS7F;AAED,qBAAa,eACX,SAAQ,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,cAAc,CACvF,YAAW,qBAAqB;;gBAQpB,GAAG,EAAE;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,+BAA+B,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACpF,OAAO,EAAE,oBAAoB,CAAC;QAC9B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;KAC7C;IAOD,IAAI,CAAC,SAAS,EAAE,SAAS;CAwE1B"}
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../../src/services/mcp/tool-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EACL,KAAK,qBAAqB,EAC1B,yBAAyB,EAC1B,MAAM,kCAAkC,CAAC;AAG1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,qBAAqB,EACN,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAEvD,qBAAa,eACX,SAAQ,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,cAAc,CACvF,YAAW,qBAAqB;;gBAQpB,GAAG,EAAE;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,+BAA+B,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACpF,OAAO,EAAE,oBAAoB,CAAC;QAC9B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;KAC7C;IAOD,IAAI,CAAC,SAAS,EAAE,SAAS;CAwE1B"}
@@ -15,9 +15,41 @@ var id = 0;
15
15
  function _class_private_field_loose_key(name) {
16
16
  return "__private_" + id++ + "_" + name;
17
17
  }
18
- function makeMcpToolDefinition(tool) {
19
- return tool;
20
- }
18
+ /**
19
+ * Defines a Strapi MCP tool with full type inference, ready to pass to
20
+ * `strapi.ai.mcp.registerTool()`. Exposed publicly as `ai.mcp.defineTool`.
21
+ *
22
+ * The returned value is the definition unchanged — this builder only exists to
23
+ * infer the `name`, input/output schemas and handler types, and to narrow the
24
+ * access variant (`devModeOnly` vs `auth`) so the result is directly assignable
25
+ * to `registerTool`.
26
+ *
27
+ * @param tool - The tool definition. Provide either `devModeOnly: true` (dev-only,
28
+ * no auth) or an `auth` policy set — never both.
29
+ * @returns The same definition, with its access variant narrowed.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * import { ai } from '@strapi/strapi';
34
+ * import { z } from '@strapi/utils';
35
+ *
36
+ * const greet = ai.mcp.defineTool({
37
+ * name: 'greet',
38
+ * title: 'Greet',
39
+ * description: 'Greets a user by name',
40
+ * devModeOnly: true,
41
+ * resolveInputSchema: () => z.object({ name: z.string() }),
42
+ * resolveOutputSchema: () => z.object({ message: z.string() }),
43
+ * createHandler: (strapi) => async ({ args }) => {
44
+ * const message = `Hello, ${args.name}!`;
45
+ * return { content: [{ type: 'text', text: message }], structuredContent: { message } };
46
+ * },
47
+ * });
48
+ *
49
+ * // later, in register() or bootstrap():
50
+ * strapi.ai.mcp.registerTool(greet);
51
+ * ```
52
+ */ const makeMcpToolDefinition = (definition)=>definition;
21
53
  var _strapi = /*#__PURE__*/ _class_private_field_loose_key("_strapi"), _ability = /*#__PURE__*/ _class_private_field_loose_key("_ability"), _user = /*#__PURE__*/ _class_private_field_loose_key("_user");
22
54
  class McpToolRegistry extends McpCapabilityRegistry.McpCapabilityRegistryBase {
23
55
  bind(mcpServer) {
@@ -1 +1 @@
1
- {"version":3,"file":"tool-registry.js","sources":["../../../src/services/mcp/tool-registry.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions\nimport type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Core, Modules } from '@strapi/types';\nimport { z } from '@strapi/utils';\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport {\n type McpCapabilityRegistry,\n McpCapabilityRegistryBase,\n} from './internal/McpCapabilityRegistry';\nimport { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics';\nimport { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration';\nimport type { McpAdminTokenAbility } from './authentication';\n\nexport function makeMcpToolDefinition<\n Name extends string,\n Title extends string,\n Description extends string,\n OutputSchema extends z.ZodObject<z.ZodRawShape>,\n InputSchema extends z.ZodObject<z.ZodRawShape> | undefined = undefined,\n Access extends Modules.MCP.McpCapabilityAccess = Modules.MCP.McpCapabilityAccess,\n>(\n tool: {\n name: Name;\n title: Title;\n description: Description;\n resolveInputSchema?: (context: Modules.MCP.McpHandlerContext) => InputSchema;\n resolveOutputSchema: (context: Modules.MCP.McpHandlerContext) => OutputSchema;\n createHandler: (\n strapi: Core.Strapi,\n context: Modules.MCP.McpHandlerContext\n ) => Modules.MCP.McpToolHandler<NoInfer<InputSchema>, NoInfer<OutputSchema>>;\n } & Access\n): Modules.MCP.McpToolDefinition<Name, InputSchema, OutputSchema, Title, Description> & Access {\n return tool as Modules.MCP.McpToolDefinition<\n Name,\n InputSchema,\n OutputSchema,\n Title,\n Description\n > &\n Access;\n}\n\nexport class McpToolRegistry\n extends McpCapabilityRegistryBase<'tool', Modules.MCP.McpToolDefinition, RegisteredTool>\n implements McpCapabilityRegistry\n{\n #strapi: Core.Strapi;\n\n #ability: McpAdminTokenAbility;\n\n #user: Modules.MCP.McpHandlerContext['user'];\n\n constructor(ctx: {\n strapi: Core.Strapi;\n definitions: McpCapabilityDefinitionRegistry<'tool', Modules.MCP.McpToolDefinition>;\n ability: McpAdminTokenAbility;\n user: Modules.MCP.McpHandlerContext['user'];\n }) {\n super(ctx.definitions);\n this.#strapi = ctx.strapi;\n this.#ability = ctx.ability;\n this.#user = ctx.user;\n }\n\n bind(mcpServer: McpServer) {\n const strapi = this.#strapi;\n\n super.register((definition) => {\n const { name, title, description, resolveInputSchema, resolveOutputSchema, createHandler } =\n definition;\n\n // Bind the session ability and token owner into the handler context so handlers can enforce\n // field-level and entity-level permission checks and set creator fields.\n const context: Modules.MCP.McpHandlerContext = {\n userAbility: this.#ability,\n user: this.#user,\n };\n const createHandlerWithContext = (strapi: Core.Strapi) => createHandler(strapi, context);\n\n return createSafeCapabilityRegistration({\n strapi,\n capabilityType: 'Tool',\n name,\n createHandler: createHandlerWithContext,\n createFallbackHandler(errorMessage) {\n return async () => ({\n content: [\n {\n type: 'text' as const,\n text: `Tool \"${name}\" failed to initialize: ${errorMessage}`,\n },\n ],\n isError: true,\n });\n },\n createErrorResult(error) {\n return {\n content: [\n {\n type: 'text' as const,\n text: `Tool \"${name}\" execution failed: ${error.message}`,\n },\n ],\n isError: true,\n };\n },\n registerWithSdk(safeHandler) {\n const inputSchema =\n resolveInputSchema !== undefined ? resolveInputSchema(context) : undefined;\n const outputSchema = resolveOutputSchema(context);\n\n // Adapt from our object-literal handler `({ args, extra })` to\n // the MCP SDK's positional form `(args, extra)` / `(extra)`.\n const baseHandler =\n inputSchema !== undefined\n ? (args: unknown, extra: unknown) =>\n safeHandler({ args, extra } as Parameters<typeof safeHandler>[0])\n : (extra: unknown) => safeHandler({ extra } as Parameters<typeof safeHandler>[0]);\n\n const sdkHandler = wrapCapabilityHandlerForMetrics(\n strapi,\n 'tool',\n name,\n definition.telemetry,\n baseHandler\n );\n\n return mcpServer.registerTool(\n name,\n { title, description, inputSchema, outputSchema },\n sdkHandler\n );\n },\n });\n });\n }\n}\n"],"names":["makeMcpToolDefinition","tool","McpToolRegistry","McpCapabilityRegistryBase","bind","mcpServer","strapi","register","definition","name","title","description","resolveInputSchema","resolveOutputSchema","createHandler","context","userAbility","user","createHandlerWithContext","createSafeCapabilityRegistration","capabilityType","createFallbackHandler","errorMessage","content","type","text","isError","createErrorResult","error","message","registerWithSdk","safeHandler","inputSchema","undefined","outputSchema","baseHandler","args","extra","sdkHandler","wrapCapabilityHandlerForMetrics","telemetry","registerTool","ctx","definitions","ability"],"mappings":"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"}
1
+ {"version":3,"file":"tool-registry.js","sources":["../../../src/services/mcp/tool-registry.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions\nimport type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Core, Modules } from '@strapi/types';\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport {\n type McpCapabilityRegistry,\n McpCapabilityRegistryBase,\n} from './internal/McpCapabilityRegistry';\nimport { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics';\nimport { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration';\nimport type { McpAdminTokenAbility } from './authentication';\n\n/**\n * Defines a Strapi MCP tool with full type inference, ready to pass to\n * `strapi.ai.mcp.registerTool()`. Exposed publicly as `ai.mcp.defineTool`.\n *\n * The returned value is the definition unchanged — this builder only exists to\n * infer the `name`, input/output schemas and handler types, and to narrow the\n * access variant (`devModeOnly` vs `auth`) so the result is directly assignable\n * to `registerTool`.\n *\n * @param tool - The tool definition. Provide either `devModeOnly: true` (dev-only,\n * no auth) or an `auth` policy set — never both.\n * @returns The same definition, with its access variant narrowed.\n *\n * @example\n * ```ts\n * import { ai } from '@strapi/strapi';\n * import { z } from '@strapi/utils';\n *\n * const greet = ai.mcp.defineTool({\n * name: 'greet',\n * title: 'Greet',\n * description: 'Greets a user by name',\n * devModeOnly: true,\n * resolveInputSchema: () => z.object({ name: z.string() }),\n * resolveOutputSchema: () => z.object({ message: z.string() }),\n * createHandler: (strapi) => async ({ args }) => {\n * const message = `Hello, ${args.name}!`;\n * return { content: [{ type: 'text', text: message }], structuredContent: { message } };\n * },\n * });\n *\n * // later, in register() or bootstrap():\n * strapi.ai.mcp.registerTool(greet);\n * ```\n */\nexport const makeMcpToolDefinition = ((definition: Modules.MCP.McpToolDefinition) =>\n definition) as unknown as Modules.MCP.McpToolBuilder;\n\nexport class McpToolRegistry\n extends McpCapabilityRegistryBase<'tool', Modules.MCP.McpToolDefinition, RegisteredTool>\n implements McpCapabilityRegistry\n{\n #strapi: Core.Strapi;\n\n #ability: McpAdminTokenAbility;\n\n #user: Modules.MCP.McpHandlerContext['user'];\n\n constructor(ctx: {\n strapi: Core.Strapi;\n definitions: McpCapabilityDefinitionRegistry<'tool', Modules.MCP.McpToolDefinition>;\n ability: McpAdminTokenAbility;\n user: Modules.MCP.McpHandlerContext['user'];\n }) {\n super(ctx.definitions);\n this.#strapi = ctx.strapi;\n this.#ability = ctx.ability;\n this.#user = ctx.user;\n }\n\n bind(mcpServer: McpServer) {\n const strapi = this.#strapi;\n\n super.register((definition) => {\n const { name, title, description, resolveInputSchema, resolveOutputSchema, createHandler } =\n definition;\n\n // Bind the session ability and token owner into the handler context so handlers can enforce\n // field-level and entity-level permission checks and set creator fields.\n const context: Modules.MCP.McpHandlerContext = {\n userAbility: this.#ability,\n user: this.#user,\n };\n const createHandlerWithContext = (strapi: Core.Strapi) => createHandler(strapi, context);\n\n return createSafeCapabilityRegistration({\n strapi,\n capabilityType: 'Tool',\n name,\n createHandler: createHandlerWithContext,\n createFallbackHandler(errorMessage) {\n return async () => ({\n content: [\n {\n type: 'text' as const,\n text: `Tool \"${name}\" failed to initialize: ${errorMessage}`,\n },\n ],\n isError: true,\n });\n },\n createErrorResult(error) {\n return {\n content: [\n {\n type: 'text' as const,\n text: `Tool \"${name}\" execution failed: ${error.message}`,\n },\n ],\n isError: true,\n };\n },\n registerWithSdk(safeHandler) {\n const inputSchema =\n resolveInputSchema !== undefined ? resolveInputSchema(context) : undefined;\n const outputSchema = resolveOutputSchema(context);\n\n // Adapt from our object-literal handler `({ args, extra })` to\n // the MCP SDK's positional form `(args, extra)` / `(extra)`.\n const baseHandler =\n inputSchema !== undefined\n ? (args: unknown, extra: unknown) =>\n safeHandler({ args, extra } as Parameters<typeof safeHandler>[0])\n : (extra: unknown) => safeHandler({ extra } as Parameters<typeof safeHandler>[0]);\n\n const sdkHandler = wrapCapabilityHandlerForMetrics(\n strapi,\n 'tool',\n name,\n definition.telemetry,\n baseHandler\n );\n\n return mcpServer.registerTool(\n name,\n { title, description, inputSchema, outputSchema },\n sdkHandler\n );\n },\n });\n });\n }\n}\n"],"names":["makeMcpToolDefinition","definition","McpToolRegistry","McpCapabilityRegistryBase","bind","mcpServer","strapi","register","name","title","description","resolveInputSchema","resolveOutputSchema","createHandler","context","userAbility","user","createHandlerWithContext","createSafeCapabilityRegistration","capabilityType","createFallbackHandler","errorMessage","content","type","text","isError","createErrorResult","error","message","registerWithSdk","safeHandler","inputSchema","undefined","outputSchema","baseHandler","args","extra","sdkHandler","wrapCapabilityHandlerForMetrics","telemetry","registerTool","ctx","definitions","ability"],"mappings":"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"}
@@ -13,9 +13,41 @@ var id = 0;
13
13
  function _class_private_field_loose_key(name) {
14
14
  return "__private_" + id++ + "_" + name;
15
15
  }
16
- function makeMcpToolDefinition(tool) {
17
- return tool;
18
- }
16
+ /**
17
+ * Defines a Strapi MCP tool with full type inference, ready to pass to
18
+ * `strapi.ai.mcp.registerTool()`. Exposed publicly as `ai.mcp.defineTool`.
19
+ *
20
+ * The returned value is the definition unchanged — this builder only exists to
21
+ * infer the `name`, input/output schemas and handler types, and to narrow the
22
+ * access variant (`devModeOnly` vs `auth`) so the result is directly assignable
23
+ * to `registerTool`.
24
+ *
25
+ * @param tool - The tool definition. Provide either `devModeOnly: true` (dev-only,
26
+ * no auth) or an `auth` policy set — never both.
27
+ * @returns The same definition, with its access variant narrowed.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * import { ai } from '@strapi/strapi';
32
+ * import { z } from '@strapi/utils';
33
+ *
34
+ * const greet = ai.mcp.defineTool({
35
+ * name: 'greet',
36
+ * title: 'Greet',
37
+ * description: 'Greets a user by name',
38
+ * devModeOnly: true,
39
+ * resolveInputSchema: () => z.object({ name: z.string() }),
40
+ * resolveOutputSchema: () => z.object({ message: z.string() }),
41
+ * createHandler: (strapi) => async ({ args }) => {
42
+ * const message = `Hello, ${args.name}!`;
43
+ * return { content: [{ type: 'text', text: message }], structuredContent: { message } };
44
+ * },
45
+ * });
46
+ *
47
+ * // later, in register() or bootstrap():
48
+ * strapi.ai.mcp.registerTool(greet);
49
+ * ```
50
+ */ const makeMcpToolDefinition = (definition)=>definition;
19
51
  var _strapi = /*#__PURE__*/ _class_private_field_loose_key("_strapi"), _ability = /*#__PURE__*/ _class_private_field_loose_key("_ability"), _user = /*#__PURE__*/ _class_private_field_loose_key("_user");
20
52
  class McpToolRegistry extends McpCapabilityRegistryBase {
21
53
  bind(mcpServer) {
@@ -1 +1 @@
1
- {"version":3,"file":"tool-registry.mjs","sources":["../../../src/services/mcp/tool-registry.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions\nimport type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Core, Modules } from '@strapi/types';\nimport { z } from '@strapi/utils';\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport {\n type McpCapabilityRegistry,\n McpCapabilityRegistryBase,\n} from './internal/McpCapabilityRegistry';\nimport { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics';\nimport { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration';\nimport type { McpAdminTokenAbility } from './authentication';\n\nexport function makeMcpToolDefinition<\n Name extends string,\n Title extends string,\n Description extends string,\n OutputSchema extends z.ZodObject<z.ZodRawShape>,\n InputSchema extends z.ZodObject<z.ZodRawShape> | undefined = undefined,\n Access extends Modules.MCP.McpCapabilityAccess = Modules.MCP.McpCapabilityAccess,\n>(\n tool: {\n name: Name;\n title: Title;\n description: Description;\n resolveInputSchema?: (context: Modules.MCP.McpHandlerContext) => InputSchema;\n resolveOutputSchema: (context: Modules.MCP.McpHandlerContext) => OutputSchema;\n createHandler: (\n strapi: Core.Strapi,\n context: Modules.MCP.McpHandlerContext\n ) => Modules.MCP.McpToolHandler<NoInfer<InputSchema>, NoInfer<OutputSchema>>;\n } & Access\n): Modules.MCP.McpToolDefinition<Name, InputSchema, OutputSchema, Title, Description> & Access {\n return tool as Modules.MCP.McpToolDefinition<\n Name,\n InputSchema,\n OutputSchema,\n Title,\n Description\n > &\n Access;\n}\n\nexport class McpToolRegistry\n extends McpCapabilityRegistryBase<'tool', Modules.MCP.McpToolDefinition, RegisteredTool>\n implements McpCapabilityRegistry\n{\n #strapi: Core.Strapi;\n\n #ability: McpAdminTokenAbility;\n\n #user: Modules.MCP.McpHandlerContext['user'];\n\n constructor(ctx: {\n strapi: Core.Strapi;\n definitions: McpCapabilityDefinitionRegistry<'tool', Modules.MCP.McpToolDefinition>;\n ability: McpAdminTokenAbility;\n user: Modules.MCP.McpHandlerContext['user'];\n }) {\n super(ctx.definitions);\n this.#strapi = ctx.strapi;\n this.#ability = ctx.ability;\n this.#user = ctx.user;\n }\n\n bind(mcpServer: McpServer) {\n const strapi = this.#strapi;\n\n super.register((definition) => {\n const { name, title, description, resolveInputSchema, resolveOutputSchema, createHandler } =\n definition;\n\n // Bind the session ability and token owner into the handler context so handlers can enforce\n // field-level and entity-level permission checks and set creator fields.\n const context: Modules.MCP.McpHandlerContext = {\n userAbility: this.#ability,\n user: this.#user,\n };\n const createHandlerWithContext = (strapi: Core.Strapi) => createHandler(strapi, context);\n\n return createSafeCapabilityRegistration({\n strapi,\n capabilityType: 'Tool',\n name,\n createHandler: createHandlerWithContext,\n createFallbackHandler(errorMessage) {\n return async () => ({\n content: [\n {\n type: 'text' as const,\n text: `Tool \"${name}\" failed to initialize: ${errorMessage}`,\n },\n ],\n isError: true,\n });\n },\n createErrorResult(error) {\n return {\n content: [\n {\n type: 'text' as const,\n text: `Tool \"${name}\" execution failed: ${error.message}`,\n },\n ],\n isError: true,\n };\n },\n registerWithSdk(safeHandler) {\n const inputSchema =\n resolveInputSchema !== undefined ? resolveInputSchema(context) : undefined;\n const outputSchema = resolveOutputSchema(context);\n\n // Adapt from our object-literal handler `({ args, extra })` to\n // the MCP SDK's positional form `(args, extra)` / `(extra)`.\n const baseHandler =\n inputSchema !== undefined\n ? (args: unknown, extra: unknown) =>\n safeHandler({ args, extra } as Parameters<typeof safeHandler>[0])\n : (extra: unknown) => safeHandler({ extra } as Parameters<typeof safeHandler>[0]);\n\n const sdkHandler = wrapCapabilityHandlerForMetrics(\n strapi,\n 'tool',\n name,\n definition.telemetry,\n baseHandler\n );\n\n return mcpServer.registerTool(\n name,\n { title, description, inputSchema, outputSchema },\n sdkHandler\n );\n },\n });\n });\n }\n}\n"],"names":["makeMcpToolDefinition","tool","McpToolRegistry","McpCapabilityRegistryBase","bind","mcpServer","strapi","register","definition","name","title","description","resolveInputSchema","resolveOutputSchema","createHandler","context","userAbility","user","createHandlerWithContext","createSafeCapabilityRegistration","capabilityType","createFallbackHandler","errorMessage","content","type","text","isError","createErrorResult","error","message","registerWithSdk","safeHandler","inputSchema","undefined","outputSchema","baseHandler","args","extra","sdkHandler","wrapCapabilityHandlerForMetrics","telemetry","registerTool","ctx","definitions","ability"],"mappings":"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"}
1
+ {"version":3,"file":"tool-registry.mjs","sources":["../../../src/services/mcp/tool-registry.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions\nimport type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Core, Modules } from '@strapi/types';\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport {\n type McpCapabilityRegistry,\n McpCapabilityRegistryBase,\n} from './internal/McpCapabilityRegistry';\nimport { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics';\nimport { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration';\nimport type { McpAdminTokenAbility } from './authentication';\n\n/**\n * Defines a Strapi MCP tool with full type inference, ready to pass to\n * `strapi.ai.mcp.registerTool()`. Exposed publicly as `ai.mcp.defineTool`.\n *\n * The returned value is the definition unchanged — this builder only exists to\n * infer the `name`, input/output schemas and handler types, and to narrow the\n * access variant (`devModeOnly` vs `auth`) so the result is directly assignable\n * to `registerTool`.\n *\n * @param tool - The tool definition. Provide either `devModeOnly: true` (dev-only,\n * no auth) or an `auth` policy set — never both.\n * @returns The same definition, with its access variant narrowed.\n *\n * @example\n * ```ts\n * import { ai } from '@strapi/strapi';\n * import { z } from '@strapi/utils';\n *\n * const greet = ai.mcp.defineTool({\n * name: 'greet',\n * title: 'Greet',\n * description: 'Greets a user by name',\n * devModeOnly: true,\n * resolveInputSchema: () => z.object({ name: z.string() }),\n * resolveOutputSchema: () => z.object({ message: z.string() }),\n * createHandler: (strapi) => async ({ args }) => {\n * const message = `Hello, ${args.name}!`;\n * return { content: [{ type: 'text', text: message }], structuredContent: { message } };\n * },\n * });\n *\n * // later, in register() or bootstrap():\n * strapi.ai.mcp.registerTool(greet);\n * ```\n */\nexport const makeMcpToolDefinition = ((definition: Modules.MCP.McpToolDefinition) =>\n definition) as unknown as Modules.MCP.McpToolBuilder;\n\nexport class McpToolRegistry\n extends McpCapabilityRegistryBase<'tool', Modules.MCP.McpToolDefinition, RegisteredTool>\n implements McpCapabilityRegistry\n{\n #strapi: Core.Strapi;\n\n #ability: McpAdminTokenAbility;\n\n #user: Modules.MCP.McpHandlerContext['user'];\n\n constructor(ctx: {\n strapi: Core.Strapi;\n definitions: McpCapabilityDefinitionRegistry<'tool', Modules.MCP.McpToolDefinition>;\n ability: McpAdminTokenAbility;\n user: Modules.MCP.McpHandlerContext['user'];\n }) {\n super(ctx.definitions);\n this.#strapi = ctx.strapi;\n this.#ability = ctx.ability;\n this.#user = ctx.user;\n }\n\n bind(mcpServer: McpServer) {\n const strapi = this.#strapi;\n\n super.register((definition) => {\n const { name, title, description, resolveInputSchema, resolveOutputSchema, createHandler } =\n definition;\n\n // Bind the session ability and token owner into the handler context so handlers can enforce\n // field-level and entity-level permission checks and set creator fields.\n const context: Modules.MCP.McpHandlerContext = {\n userAbility: this.#ability,\n user: this.#user,\n };\n const createHandlerWithContext = (strapi: Core.Strapi) => createHandler(strapi, context);\n\n return createSafeCapabilityRegistration({\n strapi,\n capabilityType: 'Tool',\n name,\n createHandler: createHandlerWithContext,\n createFallbackHandler(errorMessage) {\n return async () => ({\n content: [\n {\n type: 'text' as const,\n text: `Tool \"${name}\" failed to initialize: ${errorMessage}`,\n },\n ],\n isError: true,\n });\n },\n createErrorResult(error) {\n return {\n content: [\n {\n type: 'text' as const,\n text: `Tool \"${name}\" execution failed: ${error.message}`,\n },\n ],\n isError: true,\n };\n },\n registerWithSdk(safeHandler) {\n const inputSchema =\n resolveInputSchema !== undefined ? resolveInputSchema(context) : undefined;\n const outputSchema = resolveOutputSchema(context);\n\n // Adapt from our object-literal handler `({ args, extra })` to\n // the MCP SDK's positional form `(args, extra)` / `(extra)`.\n const baseHandler =\n inputSchema !== undefined\n ? (args: unknown, extra: unknown) =>\n safeHandler({ args, extra } as Parameters<typeof safeHandler>[0])\n : (extra: unknown) => safeHandler({ extra } as Parameters<typeof safeHandler>[0]);\n\n const sdkHandler = wrapCapabilityHandlerForMetrics(\n strapi,\n 'tool',\n name,\n definition.telemetry,\n baseHandler\n );\n\n return mcpServer.registerTool(\n name,\n { title, description, inputSchema, outputSchema },\n sdkHandler\n );\n },\n });\n });\n }\n}\n"],"names":["makeMcpToolDefinition","definition","McpToolRegistry","McpCapabilityRegistryBase","bind","mcpServer","strapi","register","name","title","description","resolveInputSchema","resolveOutputSchema","createHandler","context","userAbility","user","createHandlerWithContext","createSafeCapabilityRegistration","capabilityType","createFallbackHandler","errorMessage","content","type","text","isError","createErrorResult","error","message","registerWithSdk","safeHandler","inputSchema","undefined","outputSchema","baseHandler","args","extra","sdkHandler","wrapCapabilityHandlerForMetrics","telemetry","registerTool","ctx","definitions","ability"],"mappings":"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"}