@payloadcms/plugin-mcp 3.86.0-internal.ac46214 → 4.0.0-internal.183b315

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 (341) hide show
  1. package/README.md +2 -2
  2. package/bin.js +39 -0
  3. package/dist/@types/assets.d.js +2 -0
  4. package/dist/@types/assets.d.js.map +1 -0
  5. package/dist/collection/getAccessField.d.ts +12 -0
  6. package/dist/collection/getAccessField.d.ts.map +1 -0
  7. package/dist/collection/getAccessField.js +57 -0
  8. package/dist/collection/getAccessField.js.map +1 -0
  9. package/dist/collection/index.d.ts +6 -0
  10. package/dist/collection/index.d.ts.map +1 -0
  11. package/dist/collection/index.js +60 -0
  12. package/dist/collection/index.js.map +1 -0
  13. package/dist/components/AccessField/index.client.d.ts +10 -0
  14. package/dist/components/AccessField/index.client.d.ts.map +1 -0
  15. package/dist/components/AccessField/index.client.js +305 -0
  16. package/dist/components/AccessField/index.client.js.map +1 -0
  17. package/dist/components/AccessField/index.css +93 -0
  18. package/dist/defineTool.d.ts +26 -0
  19. package/dist/defineTool.d.ts.map +1 -0
  20. package/dist/defineTool.js +37 -0
  21. package/dist/defineTool.js.map +1 -0
  22. package/dist/endpoint/access.d.ts +10 -0
  23. package/dist/endpoint/access.d.ts.map +1 -0
  24. package/dist/endpoint/access.js +106 -0
  25. package/dist/endpoint/access.js.map +1 -0
  26. package/dist/endpoint/index.d.ts +3 -0
  27. package/dist/endpoint/index.d.ts.map +1 -0
  28. package/dist/endpoint/index.js +36 -0
  29. package/dist/endpoint/index.js.map +1 -0
  30. package/dist/exports/client.d.ts +2 -0
  31. package/dist/exports/client.d.ts.map +1 -0
  32. package/dist/exports/client.js +4 -0
  33. package/dist/exports/client.js.map +1 -0
  34. package/dist/index.d.ts +4 -7
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +44 -67
  37. package/dist/index.js.map +1 -1
  38. package/dist/mcp/buildMcpServer.d.ts +19 -0
  39. package/dist/mcp/buildMcpServer.d.ts.map +1 -0
  40. package/dist/mcp/buildMcpServer.js +170 -0
  41. package/dist/mcp/buildMcpServer.js.map +1 -0
  42. package/dist/mcp/builtin/collections/authTools.d.ts +7 -0
  43. package/dist/mcp/builtin/collections/authTools.d.ts.map +1 -0
  44. package/dist/mcp/builtin/collections/authTools.js +250 -0
  45. package/dist/mcp/builtin/collections/authTools.js.map +1 -0
  46. package/dist/mcp/builtin/collections/createTool.d.ts +2 -0
  47. package/dist/mcp/builtin/collections/createTool.d.ts.map +1 -0
  48. package/dist/mcp/builtin/collections/createTool.js +91 -0
  49. package/dist/mcp/builtin/collections/createTool.js.map +1 -0
  50. package/dist/mcp/builtin/collections/deleteTool.d.ts +2 -0
  51. package/dist/mcp/builtin/collections/deleteTool.d.ts.map +1 -0
  52. package/dist/mcp/builtin/collections/deleteTool.js +117 -0
  53. package/dist/mcp/builtin/collections/deleteTool.js.map +1 -0
  54. package/dist/mcp/builtin/collections/findTool.d.ts +2 -0
  55. package/dist/mcp/builtin/collections/findTool.d.ts.map +1 -0
  56. package/dist/mcp/builtin/collections/findTool.js +159 -0
  57. package/dist/mcp/builtin/collections/findTool.js.map +1 -0
  58. package/dist/mcp/builtin/collections/updateTool.d.ts +2 -0
  59. package/dist/mcp/builtin/collections/updateTool.d.ts.map +1 -0
  60. package/dist/mcp/builtin/collections/updateTool.js +191 -0
  61. package/dist/mcp/builtin/collections/updateTool.js.map +1 -0
  62. package/dist/mcp/builtin/globals/findTool.d.ts +2 -0
  63. package/dist/mcp/builtin/globals/findTool.d.ts.map +1 -0
  64. package/dist/mcp/builtin/globals/findTool.js +76 -0
  65. package/dist/mcp/builtin/globals/findTool.js.map +1 -0
  66. package/dist/mcp/builtin/globals/updateTool.d.ts +2 -0
  67. package/dist/mcp/builtin/globals/updateTool.d.ts.map +1 -0
  68. package/dist/mcp/builtin/globals/updateTool.js +96 -0
  69. package/dist/mcp/builtin/globals/updateTool.js.map +1 -0
  70. package/dist/mcp/builtinTools.d.ts +37 -0
  71. package/dist/mcp/builtinTools.d.ts.map +1 -0
  72. package/dist/mcp/builtinTools.js +64 -0
  73. package/dist/mcp/builtinTools.js.map +1 -0
  74. package/dist/mcp/sanitizeMCPConfig.d.ts +17 -0
  75. package/dist/mcp/sanitizeMCPConfig.d.ts.map +1 -0
  76. package/dist/mcp/sanitizeMCPConfig.js +167 -0
  77. package/dist/mcp/sanitizeMCPConfig.js.map +1 -0
  78. package/dist/stdio.d.ts +8 -0
  79. package/dist/stdio.d.ts.map +1 -0
  80. package/dist/stdio.js +89 -0
  81. package/dist/stdio.js.map +1 -0
  82. package/dist/types.d.ts +262 -455
  83. package/dist/types.d.ts.map +1 -1
  84. package/dist/types.js +6 -1
  85. package/dist/types.js.map +1 -1
  86. package/dist/utils/camelCase.d.ts.map +1 -1
  87. package/dist/utils/getLogger.d.ts +10 -0
  88. package/dist/utils/getLogger.d.ts.map +1 -0
  89. package/dist/utils/getLogger.js +22 -0
  90. package/dist/utils/getLogger.js.map +1 -0
  91. package/dist/utils/getPluginConfig.d.ts +12 -0
  92. package/dist/utils/getPluginConfig.d.ts.map +1 -0
  93. package/dist/utils/getPluginConfig.js +15 -0
  94. package/dist/utils/getPluginConfig.js.map +1 -0
  95. package/dist/utils/localAPIDefaults.d.ts +20 -0
  96. package/dist/utils/localAPIDefaults.d.ts.map +1 -0
  97. package/dist/utils/localAPIDefaults.js +19 -0
  98. package/dist/utils/localAPIDefaults.js.map +1 -0
  99. package/dist/utils/resolveProjectRoot.d.ts +7 -0
  100. package/dist/utils/resolveProjectRoot.d.ts.map +1 -0
  101. package/dist/utils/resolveProjectRoot.js +15 -0
  102. package/dist/utils/resolveProjectRoot.js.map +1 -0
  103. package/dist/utils/schemaConversion/buildToolInput.d.ts +29 -0
  104. package/dist/utils/schemaConversion/buildToolInput.d.ts.map +1 -0
  105. package/dist/utils/schemaConversion/buildToolInput.js +51 -0
  106. package/dist/utils/schemaConversion/buildToolInput.js.map +1 -0
  107. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts +2 -2
  108. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts.map +1 -1
  109. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js.map +1 -1
  110. package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts +15 -0
  111. package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts.map +1 -0
  112. package/dist/utils/schemaConversion/sanitizeEntitySchema.js +464 -0
  113. package/dist/utils/schemaConversion/sanitizeEntitySchema.js.map +1 -0
  114. package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js +158 -0
  115. package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js.map +1 -0
  116. package/dist/utils/toStandardSchema.d.ts +5 -0
  117. package/dist/utils/toStandardSchema.d.ts.map +1 -0
  118. package/dist/utils/toStandardSchema.js +4 -0
  119. package/dist/utils/toStandardSchema.js.map +1 -0
  120. package/package.json +35 -10
  121. package/src/@types/assets.d.ts +3 -0
  122. package/src/collection/getAccessField.ts +64 -0
  123. package/src/collection/index.ts +64 -0
  124. package/src/components/AccessField/index.client.tsx +344 -0
  125. package/src/components/AccessField/index.css +93 -0
  126. package/src/defineTool.ts +44 -0
  127. package/src/endpoint/access.ts +132 -0
  128. package/src/endpoint/index.ts +35 -0
  129. package/src/exports/client.ts +2 -0
  130. package/src/index.ts +35 -85
  131. package/src/mcp/buildMcpServer.ts +229 -0
  132. package/src/mcp/builtin/collections/authTools.ts +233 -0
  133. package/src/mcp/builtin/collections/createTool.ts +116 -0
  134. package/src/mcp/builtin/collections/deleteTool.ts +123 -0
  135. package/src/mcp/builtin/collections/findTool.ts +187 -0
  136. package/src/mcp/builtin/collections/updateTool.ts +210 -0
  137. package/src/mcp/builtin/globals/findTool.ts +96 -0
  138. package/src/mcp/builtin/globals/updateTool.ts +120 -0
  139. package/src/mcp/builtinTools.ts +84 -0
  140. package/src/mcp/sanitizeMCPConfig.ts +239 -0
  141. package/src/stdio.ts +98 -0
  142. package/src/types.ts +295 -490
  143. package/src/utils/getLogger.ts +22 -0
  144. package/src/utils/getPluginConfig.ts +24 -0
  145. package/src/utils/localAPIDefaults.ts +22 -0
  146. package/src/utils/resolveProjectRoot.ts +17 -0
  147. package/src/utils/schemaConversion/buildToolInput.ts +68 -0
  148. package/src/utils/schemaConversion/removeVirtualFieldsFromSchema.ts +3 -3
  149. package/src/utils/schemaConversion/sanitizeEntitySchema.spec.ts +103 -0
  150. package/src/utils/schemaConversion/sanitizeEntitySchema.ts +529 -0
  151. package/src/utils/toStandardSchema.ts +9 -0
  152. package/dist/collections/createApiKeysCollection.d.ts +0 -7
  153. package/dist/collections/createApiKeysCollection.d.ts.map +0 -1
  154. package/dist/collections/createApiKeysCollection.js +0 -317
  155. package/dist/collections/createApiKeysCollection.js.map +0 -1
  156. package/dist/defaults.d.ts +0 -4
  157. package/dist/defaults.d.ts.map +0 -1
  158. package/dist/defaults.js +0 -5
  159. package/dist/defaults.js.map +0 -1
  160. package/dist/endpoints/mcp.d.ts +0 -4
  161. package/dist/endpoints/mcp.d.ts.map +0 -1
  162. package/dist/endpoints/mcp.js +0 -71
  163. package/dist/endpoints/mcp.js.map +0 -1
  164. package/dist/mcp/createRequest.d.ts +0 -3
  165. package/dist/mcp/createRequest.d.ts.map +0 -1
  166. package/dist/mcp/createRequest.js +0 -14
  167. package/dist/mcp/createRequest.js.map +0 -1
  168. package/dist/mcp/getMcpHandler.d.ts +0 -4
  169. package/dist/mcp/getMcpHandler.d.ts.map +0 -1
  170. package/dist/mcp/getMcpHandler.js +0 -231
  171. package/dist/mcp/getMcpHandler.js.map +0 -1
  172. package/dist/mcp/helpers/config.d.ts +0 -22
  173. package/dist/mcp/helpers/config.d.ts.map +0 -1
  174. package/dist/mcp/helpers/config.js +0 -153
  175. package/dist/mcp/helpers/config.js.map +0 -1
  176. package/dist/mcp/helpers/fields.d.ts +0 -19
  177. package/dist/mcp/helpers/fields.d.ts.map +0 -1
  178. package/dist/mcp/helpers/fields.js +0 -102
  179. package/dist/mcp/helpers/fields.js.map +0 -1
  180. package/dist/mcp/helpers/fileValidation.d.ts +0 -67
  181. package/dist/mcp/helpers/fileValidation.d.ts.map +0 -1
  182. package/dist/mcp/helpers/fileValidation.js +0 -267
  183. package/dist/mcp/helpers/fileValidation.js.map +0 -1
  184. package/dist/mcp/registerTool.d.ts +0 -6
  185. package/dist/mcp/registerTool.d.ts.map +0 -1
  186. package/dist/mcp/registerTool.js +0 -18
  187. package/dist/mcp/registerTool.js.map +0 -1
  188. package/dist/mcp/tools/auth/auth.d.ts +0 -4
  189. package/dist/mcp/tools/auth/auth.d.ts.map +0 -1
  190. package/dist/mcp/tools/auth/auth.js +0 -57
  191. package/dist/mcp/tools/auth/auth.js.map +0 -1
  192. package/dist/mcp/tools/auth/forgotPassword.d.ts +0 -4
  193. package/dist/mcp/tools/auth/forgotPassword.d.ts.map +0 -1
  194. package/dist/mcp/tools/auth/forgotPassword.js +0 -48
  195. package/dist/mcp/tools/auth/forgotPassword.js.map +0 -1
  196. package/dist/mcp/tools/auth/login.d.ts +0 -4
  197. package/dist/mcp/tools/auth/login.d.ts.map +0 -1
  198. package/dist/mcp/tools/auth/login.js +0 -51
  199. package/dist/mcp/tools/auth/login.js.map +0 -1
  200. package/dist/mcp/tools/auth/resetPassword.d.ts +0 -4
  201. package/dist/mcp/tools/auth/resetPassword.d.ts.map +0 -1
  202. package/dist/mcp/tools/auth/resetPassword.js +0 -49
  203. package/dist/mcp/tools/auth/resetPassword.js.map +0 -1
  204. package/dist/mcp/tools/auth/unlock.d.ts +0 -4
  205. package/dist/mcp/tools/auth/unlock.d.ts.map +0 -1
  206. package/dist/mcp/tools/auth/unlock.js +0 -48
  207. package/dist/mcp/tools/auth/unlock.js.map +0 -1
  208. package/dist/mcp/tools/auth/verify.d.ts +0 -4
  209. package/dist/mcp/tools/auth/verify.d.ts.map +0 -1
  210. package/dist/mcp/tools/auth/verify.js +0 -45
  211. package/dist/mcp/tools/auth/verify.js.map +0 -1
  212. package/dist/mcp/tools/collection/create.d.ts +0 -10
  213. package/dist/mcp/tools/collection/create.d.ts.map +0 -1
  214. package/dist/mcp/tools/collection/create.js +0 -139
  215. package/dist/mcp/tools/collection/create.js.map +0 -1
  216. package/dist/mcp/tools/collection/delete.d.ts +0 -10
  217. package/dist/mcp/tools/collection/delete.d.ts.map +0 -1
  218. package/dist/mcp/tools/collection/delete.js +0 -154
  219. package/dist/mcp/tools/collection/delete.js.map +0 -1
  220. package/dist/mcp/tools/collection/find.d.ts +0 -10
  221. package/dist/mcp/tools/collection/find.d.ts.map +0 -1
  222. package/dist/mcp/tools/collection/find.js +0 -165
  223. package/dist/mcp/tools/collection/find.js.map +0 -1
  224. package/dist/mcp/tools/collection/update.d.ts +0 -10
  225. package/dist/mcp/tools/collection/update.d.ts.map +0 -1
  226. package/dist/mcp/tools/collection/update.js +0 -209
  227. package/dist/mcp/tools/collection/update.js.map +0 -1
  228. package/dist/mcp/tools/config/find.d.ts +0 -10
  229. package/dist/mcp/tools/config/find.d.ts.map +0 -1
  230. package/dist/mcp/tools/config/find.js +0 -97
  231. package/dist/mcp/tools/config/find.js.map +0 -1
  232. package/dist/mcp/tools/config/update.d.ts +0 -10
  233. package/dist/mcp/tools/config/update.d.ts.map +0 -1
  234. package/dist/mcp/tools/config/update.js +0 -215
  235. package/dist/mcp/tools/config/update.js.map +0 -1
  236. package/dist/mcp/tools/global/find.d.ts +0 -5
  237. package/dist/mcp/tools/global/find.d.ts.map +0 -1
  238. package/dist/mcp/tools/global/find.js +0 -82
  239. package/dist/mcp/tools/global/find.js.map +0 -1
  240. package/dist/mcp/tools/global/update.d.ts +0 -6
  241. package/dist/mcp/tools/global/update.d.ts.map +0 -1
  242. package/dist/mcp/tools/global/update.js +0 -124
  243. package/dist/mcp/tools/global/update.js.map +0 -1
  244. package/dist/mcp/tools/job/create.d.ts +0 -10
  245. package/dist/mcp/tools/job/create.d.ts.map +0 -1
  246. package/dist/mcp/tools/job/create.js +0 -293
  247. package/dist/mcp/tools/job/create.js.map +0 -1
  248. package/dist/mcp/tools/job/run.d.ts +0 -10
  249. package/dist/mcp/tools/job/run.d.ts.map +0 -1
  250. package/dist/mcp/tools/job/run.js +0 -129
  251. package/dist/mcp/tools/job/run.js.map +0 -1
  252. package/dist/mcp/tools/job/update.d.ts +0 -11
  253. package/dist/mcp/tools/job/update.d.ts.map +0 -1
  254. package/dist/mcp/tools/job/update.js +0 -186
  255. package/dist/mcp/tools/job/update.js.map +0 -1
  256. package/dist/mcp/tools/resource/create.d.ts +0 -6
  257. package/dist/mcp/tools/resource/create.d.ts.map +0 -1
  258. package/dist/mcp/tools/resource/create.js +0 -124
  259. package/dist/mcp/tools/resource/create.js.map +0 -1
  260. package/dist/mcp/tools/resource/delete.d.ts +0 -5
  261. package/dist/mcp/tools/resource/delete.d.ts.map +0 -1
  262. package/dist/mcp/tools/resource/delete.js +0 -151
  263. package/dist/mcp/tools/resource/delete.js.map +0 -1
  264. package/dist/mcp/tools/resource/find.d.ts +0 -5
  265. package/dist/mcp/tools/resource/find.d.ts.map +0 -1
  266. package/dist/mcp/tools/resource/find.js +0 -170
  267. package/dist/mcp/tools/resource/find.js.map +0 -1
  268. package/dist/mcp/tools/resource/update.d.ts +0 -6
  269. package/dist/mcp/tools/resource/update.d.ts.map +0 -1
  270. package/dist/mcp/tools/resource/update.js +0 -256
  271. package/dist/mcp/tools/resource/update.js.map +0 -1
  272. package/dist/mcp/tools/schemas.d.ts +0 -457
  273. package/dist/mcp/tools/schemas.d.ts.map +0 -1
  274. package/dist/mcp/tools/schemas.js +0 -243
  275. package/dist/mcp/tools/schemas.js.map +0 -1
  276. package/dist/utils/adminEntitySettings.d.ts +0 -17
  277. package/dist/utils/adminEntitySettings.d.ts.map +0 -1
  278. package/dist/utils/adminEntitySettings.js +0 -41
  279. package/dist/utils/adminEntitySettings.js.map +0 -1
  280. package/dist/utils/createApiKeyFields.d.ts +0 -15
  281. package/dist/utils/createApiKeyFields.d.ts.map +0 -1
  282. package/dist/utils/createApiKeyFields.js +0 -57
  283. package/dist/utils/createApiKeyFields.js.map +0 -1
  284. package/dist/utils/getEnabledSlugs.d.ts +0 -13
  285. package/dist/utils/getEnabledSlugs.d.ts.map +0 -1
  286. package/dist/utils/getEnabledSlugs.js +0 -32
  287. package/dist/utils/getEnabledSlugs.js.map +0 -1
  288. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts +0 -3
  289. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts.map +0 -1
  290. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js +0 -43
  291. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js.map +0 -1
  292. package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts +0 -13
  293. package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts.map +0 -1
  294. package/dist/utils/schemaConversion/sanitizeJsonSchema.js +0 -56
  295. package/dist/utils/schemaConversion/sanitizeJsonSchema.js.map +0 -1
  296. package/dist/utils/schemaConversion/simplifyRelationshipFields.d.ts +0 -20
  297. package/dist/utils/schemaConversion/simplifyRelationshipFields.d.ts.map +0 -1
  298. package/dist/utils/schemaConversion/simplifyRelationshipFields.js +0 -53
  299. package/dist/utils/schemaConversion/simplifyRelationshipFields.js.map +0 -1
  300. package/dist/utils/schemaConversion/transformPointFields.d.ts +0 -3
  301. package/dist/utils/schemaConversion/transformPointFields.d.ts.map +0 -1
  302. package/dist/utils/schemaConversion/transformPointFields.js +0 -51
  303. package/dist/utils/schemaConversion/transformPointFields.js.map +0 -1
  304. package/src/collections/createApiKeysCollection.ts +0 -373
  305. package/src/defaults.ts +0 -3
  306. package/src/endpoints/mcp.ts +0 -91
  307. package/src/mcp/createRequest.ts +0 -13
  308. package/src/mcp/getMcpHandler.ts +0 -545
  309. package/src/mcp/helpers/config.ts +0 -213
  310. package/src/mcp/helpers/fields.ts +0 -154
  311. package/src/mcp/helpers/fileValidation.ts +0 -362
  312. package/src/mcp/registerTool.ts +0 -22
  313. package/src/mcp/tools/auth/auth.ts +0 -71
  314. package/src/mcp/tools/auth/forgotPassword.ts +0 -70
  315. package/src/mcp/tools/auth/login.ts +0 -72
  316. package/src/mcp/tools/auth/resetPassword.ts +0 -61
  317. package/src/mcp/tools/auth/unlock.ts +0 -64
  318. package/src/mcp/tools/auth/verify.ts +0 -57
  319. package/src/mcp/tools/collection/create.ts +0 -210
  320. package/src/mcp/tools/collection/delete.ts +0 -211
  321. package/src/mcp/tools/collection/find.ts +0 -224
  322. package/src/mcp/tools/collection/update.ts +0 -290
  323. package/src/mcp/tools/config/find.ts +0 -128
  324. package/src/mcp/tools/config/update.ts +0 -280
  325. package/src/mcp/tools/global/find.ts +0 -128
  326. package/src/mcp/tools/global/update.ts +0 -207
  327. package/src/mcp/tools/job/create.ts +0 -416
  328. package/src/mcp/tools/job/run.ts +0 -167
  329. package/src/mcp/tools/job/update.ts +0 -274
  330. package/src/mcp/tools/resource/create.ts +0 -211
  331. package/src/mcp/tools/resource/delete.ts +0 -218
  332. package/src/mcp/tools/resource/find.ts +0 -246
  333. package/src/mcp/tools/resource/update.ts +0 -383
  334. package/src/mcp/tools/schemas.ts +0 -520
  335. package/src/utils/adminEntitySettings.ts +0 -40
  336. package/src/utils/createApiKeyFields.ts +0 -72
  337. package/src/utils/getEnabledSlugs.ts +0 -42
  338. package/src/utils/schemaConversion/convertCollectionSchemaToZod.ts +0 -52
  339. package/src/utils/schemaConversion/sanitizeJsonSchema.ts +0 -62
  340. package/src/utils/schemaConversion/simplifyRelationshipFields.ts +0 -65
  341. package/src/utils/schemaConversion/transformPointFields.ts +0 -55
@@ -0,0 +1,529 @@
1
+ import type { JsonSchemaType } from '../../types.js'
2
+
3
+ /**
4
+ * Turns the JSON Schema that Payload generates for a collection or global into the input schema for
5
+ * an MCP create/update tool. In short, it:
6
+ *
7
+ * - drops fields a client can't set (`id`, `createdAt`, the draft `_status`, …),
8
+ * - rewrites Payload-specific field shapes (points, relationships) into plain JSON the model can fill,
9
+ * - and shrinks the result so it's cheaper for the model to read,
10
+ *
11
+ * while keeping every node valid JSON Schema draft 2020-12. Each step below is tagged with why it runs -
12
+ * **Correctness** (valid input the API accepts), **Size** (equivalence-preserving shrink), or **LLM
13
+ * ergonomics** (easier for the model to read/fill) - and carries a before/after example on its definition.
14
+ */
15
+ export const sanitizeEntitySchema = (schema: JsonSchemaType): JsonSchemaType => {
16
+ // Work on a copy — the caller reuses the original schema elsewhere (e.g. when listing tools).
17
+ let result = structuredClone(schema)
18
+
19
+ // Correctness — drop the fields a client can't set (id, createdAt, updatedAt, draft _status) + collapse nullable types.
20
+ result = removeManagedFields(result)
21
+
22
+ // LLM ergonomics — rewrite point fields from a `[number, number]` tuple into a `{ longitude, latitude }` object.
23
+ result = pointFieldsToObjects(result)
24
+
25
+ // Correctness — a relationship value can be an ID or a populated doc; on input only the ID is valid, so keep that.
26
+ result = relationshipsToIds(result)
27
+
28
+ // Size — strip inert type-gen leftovers that only bloat the schema (`tsType`, block-collision notes).
29
+ result = removeTypeGenArtifacts(result)
30
+
31
+ // Size — where a `const` already pins a value, the sibling `type` is redundant; remove it.
32
+ result = dropRedundantConstType(result)
33
+
34
+ // Size — fold per-collection relationship/upload variants (identical but for `relationTo`) into one `enum`.
35
+ result = mergeConstDiscriminatedUnions(result)
36
+
37
+ // Size — pull any subschema that appears more than once into a single shared `$defs` entry.
38
+ result = deduplicateIntoDefinitions(result)
39
+
40
+ // LLM ergonomics — give `$defs` short, readable names (`Code`, `paragraph`, `node`) so the `$ref`s read nicely.
41
+ result = shortenDefinitionNames(result)
42
+
43
+ return result
44
+ }
45
+
46
+ /**
47
+ * Rebuilds a schema bottom-up, calling `visit` on each node after its children. Shared by the
48
+ * transforms that need to touch every node in the tree.
49
+ */
50
+ const mapNodes = (node: unknown, visit: (node: JsonSchemaType) => JsonSchemaType): unknown => {
51
+ if (Array.isArray(node)) {
52
+ return node.map((child) => mapNodes(child, visit))
53
+ }
54
+ if (!node || typeof node !== 'object') {
55
+ return node
56
+ }
57
+ const out: Record<string, unknown> = {}
58
+ for (const [key, value] of Object.entries(node)) {
59
+ out[key] = mapNodes(value, visit)
60
+ }
61
+ return visit(out as JsonSchemaType)
62
+ }
63
+
64
+ // Payload sets these on every document, so an MCP client never provides them when creating/updating.
65
+ const PAYLOAD_MANAGED_FIELDS = new Set(['_status', 'createdAt', 'id', 'updatedAt'])
66
+
67
+ /**
68
+ * **Correctness.** Removes the fields a client can't set on create/update - `id`, `createdAt`, `updatedAt`, and the draft
69
+ * `_status` - from every field object's `properties` and `required` (recursing into nested objects and
70
+ * array items). Along the way it also collapses optional array/object types via {@link collapseNullableType}.
71
+ *
72
+ * @example
73
+ * { properties: { id: { type: 'string' }, tags: { type: ['array', 'null'], items: {} } }, required: ['id', 'tags'] }
74
+ * → { properties: { tags: { type: 'array', items: {} } }, required: ['tags'] }
75
+ */
76
+ const removeManagedFields = (schema: JsonSchemaType): JsonSchemaType => {
77
+ if (schema.properties && typeof schema.properties === 'object') {
78
+ for (const field of PAYLOAD_MANAGED_FIELDS) {
79
+ delete schema.properties[field]
80
+ }
81
+ for (const key of Object.keys(schema.properties)) {
82
+ const prop = schema.properties[key] as JsonSchemaType
83
+ if (!prop || typeof prop !== 'object') {
84
+ continue
85
+ }
86
+ const isRequired = Array.isArray(schema.required) && schema.required.includes(key)
87
+ collapseNullableType(prop, isRequired)
88
+ if (prop.properties) {
89
+ removeManagedFields(prop)
90
+ }
91
+ if (prop.items && typeof prop.items === 'object' && !Array.isArray(prop.items)) {
92
+ removeManagedFields(prop.items)
93
+ }
94
+ }
95
+ }
96
+
97
+ if (Array.isArray(schema.required)) {
98
+ schema.required = schema.required.filter((name) => !PAYLOAD_MANAGED_FIELDS.has(name))
99
+ if (schema.required.length === 0) {
100
+ delete schema.required
101
+ }
102
+ }
103
+
104
+ return schema
105
+ }
106
+
107
+ /**
108
+ * Drops the `'null'` from an optional array/object type (`['array', 'null']` → `'array'`, likewise
109
+ * `'object'`). Payload marks a field optional by unioning its type with `'null'`, but a create/update
110
+ * tool already conveys "optional" through the `required` list - the client just omits the field - so the
111
+ * `'null'` is redundant here. Dropping it shows the model a plain `type: 'array'` instead of implying it
112
+ * should send a literal `null`.
113
+ *
114
+ * We never touch the `required` list, so this can't change whether a field is required. And we skip fields
115
+ * that ARE required (`isRequired`): there a `'null'` is a value the field genuinely accepts, not optionality
116
+ * encoding. Nullable scalars (`['string', 'null']`) are also left alone - they read fine as `string | null`.
117
+ *
118
+ * @example
119
+ * optional { type: ['array', 'null'] } → { type: 'array' } (still optional, just no longer null-valued)
120
+ * required { type: ['array', 'null'] } → unchanged
121
+ * { type: ['string', 'null'] } → unchanged
122
+ */
123
+ const collapseNullableType = (schema: JsonSchemaType, isRequired: boolean): void => {
124
+ if (isRequired || !Array.isArray(schema.type)) {
125
+ return
126
+ }
127
+ const nonNullTypes = schema.type.filter((t) => t !== 'null')
128
+ if (nonNullTypes.length === 1 && (nonNullTypes[0] === 'array' || nonNullTypes[0] === 'object')) {
129
+ schema.type = nonNullTypes[0]
130
+ }
131
+ }
132
+
133
+ /**
134
+ * **LLM ergonomics.** Rewrites a point field (stored as a two-number tuple) into a `{ longitude, latitude }` object, which
135
+ * is far easier for the model to fill in than a positional array. This is input-only and lossless: the
136
+ * create/update handler converts the object back to the `[longitude, latitude]` tuple Payload stores,
137
+ * via `transformPointDataToPayload`.
138
+ *
139
+ * @example
140
+ * { type: 'array', items: [{ type: 'number' }, { type: 'number' }] }
141
+ * → { type: 'object', properties: { longitude: { type: 'number' }, latitude: { type: 'number' } }, required: ['longitude', 'latitude'] }
142
+ */
143
+ const pointFieldsToObjects = (schema: JsonSchemaType): JsonSchemaType => {
144
+ if (!schema || typeof schema !== 'object') {
145
+ return schema
146
+ }
147
+
148
+ const transformed = { ...schema }
149
+
150
+ if (transformed.properties && typeof transformed.properties === 'object') {
151
+ transformed.properties = Object.fromEntries(
152
+ Object.entries(transformed.properties).map(([key, value]) => {
153
+ if (!value || typeof value !== 'object') {
154
+ return [key, value]
155
+ }
156
+ const isArrayType =
157
+ value.type === 'array' || (Array.isArray(value.type) && value.type.includes('array'))
158
+ const isPointField =
159
+ isArrayType &&
160
+ Array.isArray(value.items) &&
161
+ value.items.length === 2 &&
162
+ value.items.every((item) => item && typeof item === 'object' && item.type === 'number')
163
+
164
+ if (isPointField) {
165
+ const isNullable = Array.isArray(value.type) && value.type.includes('null')
166
+ return [
167
+ key,
168
+ {
169
+ type: isNullable ? ['object', 'null'] : 'object',
170
+ description: value.description || 'Geographic coordinates (longitude, latitude)',
171
+ properties: {
172
+ latitude: { type: 'number', description: 'Latitude coordinate' },
173
+ longitude: { type: 'number', description: 'Longitude coordinate' },
174
+ },
175
+ required: ['longitude', 'latitude'],
176
+ },
177
+ ]
178
+ }
179
+
180
+ return [key, pointFieldsToObjects(value)]
181
+ }),
182
+ )
183
+ }
184
+
185
+ if (
186
+ transformed.items &&
187
+ typeof transformed.items === 'object' &&
188
+ !Array.isArray(transformed.items)
189
+ ) {
190
+ transformed.items = pointFieldsToObjects(transformed.items)
191
+ }
192
+
193
+ return transformed
194
+ }
195
+
196
+ /**
197
+ * **Correctness.** Reduces relationship/upload fields to the IDs a client actually sends. Payload types the value as
198
+ * "an ID or the full related document" - but the populated-document form only appears in read responses;
199
+ * on create/update you always reference a relationship by its ID. So we drop that `$ref` option, leaving
200
+ * the bare ID. A single remaining target collapses inline (with a description naming the target
201
+ * collection); several targets become an `anyOf` of IDs.
202
+ *
203
+ * @example
204
+ * { oneOf: [{ type: 'string' }, { $ref: '#/$defs/posts' }] }
205
+ * → { type: 'string', description: 'The ID of the related "posts" document.' }
206
+ */
207
+ const relationshipsToIds = (schema: JsonSchemaType): JsonSchemaType => {
208
+ if (!schema || typeof schema !== 'object') {
209
+ return schema
210
+ }
211
+
212
+ const processed = { ...schema }
213
+
214
+ if (Array.isArray(processed.oneOf)) {
215
+ const isRelatedDocRef = (option: unknown): option is { $ref: string } =>
216
+ !!option && typeof option === 'object' && '$ref' in option
217
+
218
+ if (processed.oneOf.some(isRelatedDocRef)) {
219
+ // A relationship value is "an ID, or the populated related document". Keep the ID option(s) and
220
+ // drop the `$ref`s to the related collections, since a client only ever sends the ID.
221
+ const idOptions = processed.oneOf
222
+ .filter((option) => !isRelatedDocRef(option))
223
+ .map((option) => (typeof option === 'object' ? relationshipsToIds(option) : option))
224
+ const targetCollections = processed.oneOf
225
+ .filter(isRelatedDocRef)
226
+ .map((option) => option.$ref.replace('#/$defs/', ''))
227
+
228
+ if (idOptions.length === 1) {
229
+ delete processed.oneOf
230
+ Object.assign(processed, idOptions[0])
231
+ if (targetCollections.length > 0 && !processed.description) {
232
+ processed.description = `The ID of the related "${targetCollections.join('" or "')}" document.`
233
+ }
234
+ } else if (idOptions.length > 1) {
235
+ delete processed.oneOf
236
+ processed.anyOf = idOptions
237
+ }
238
+ } else {
239
+ processed.oneOf = processed.oneOf.map((option) =>
240
+ typeof option === 'object' ? relationshipsToIds(option) : option,
241
+ )
242
+ }
243
+ }
244
+
245
+ if (processed.properties && typeof processed.properties === 'object') {
246
+ processed.properties = Object.fromEntries(
247
+ Object.entries(processed.properties).map(([key, value]) => [
248
+ key,
249
+ typeof value === 'object' ? relationshipsToIds(value) : value,
250
+ ]),
251
+ )
252
+ }
253
+
254
+ if (processed.items && typeof processed.items === 'object' && !Array.isArray(processed.items)) {
255
+ processed.items = relationshipsToIds(processed.items)
256
+ }
257
+
258
+ // Lexical node unions and blocks live under `$defs` and have their own relationship fields, so walk
259
+ // those too — otherwise their `$ref`s would dangle once we don't bundle the related collections.
260
+ if (processed.$defs && typeof processed.$defs === 'object') {
261
+ processed.$defs = Object.fromEntries(
262
+ Object.entries(processed.$defs).map(([key, value]) => [
263
+ key,
264
+ typeof value === 'object' ? relationshipsToIds(value) : value,
265
+ ]),
266
+ )
267
+ }
268
+
269
+ return processed
270
+ }
271
+
272
+ /**
273
+ * **Size.** Strips type-generation leftovers that bloat the schema without helping the model: the `tsType`
274
+ * hint (a `json-schema-to-typescript` extension; JSON Schema validators just ignore it, they don't reject it)
275
+ * and the block-interface-collision note Payload adds to some block descriptions (the
276
+ * `block-interface-name-collisions` docs link set in `registerBlockInterface`, see configToJSONSchema.ts).
277
+ * Both are inert here - removing them only shrinks the schema (and spares the model irrelevant noise).
278
+ *
279
+ * @example
280
+ * { type: 'object', tsType: 'SerializedBlockNode', description: 'see …#block-interface-name-collisions' }
281
+ * → { type: 'object' }
282
+ */
283
+ const removeTypeGenArtifacts = (schema: JsonSchemaType): JsonSchemaType =>
284
+ mapNodes(schema, (node) => {
285
+ delete (node as { tsType?: unknown }).tsType
286
+ const { description } = node as { description?: string }
287
+ if (
288
+ typeof description === 'string' &&
289
+ description.includes('block-interface-name-collisions')
290
+ ) {
291
+ delete (node as { description?: unknown }).description
292
+ }
293
+ return node
294
+ }) as JsonSchemaType
295
+
296
+ /**
297
+ * **Size.** Removes `type` whenever a `const` sits next to it — the constant already fixes the value.
298
+ *
299
+ * @example
300
+ * { type: 'string', const: 'paragraph' } → { const: 'paragraph' }
301
+ */
302
+ const dropRedundantConstType = (schema: JsonSchemaType): JsonSchemaType =>
303
+ mapNodes(schema, (node) => {
304
+ if ('const' in node && 'type' in node) {
305
+ delete (node as { type?: unknown }).type
306
+ }
307
+ return node
308
+ }) as JsonSchemaType
309
+
310
+ /**
311
+ * **Size.** Merges the members of a `oneOf`/`anyOf` that are identical except for one `const`-valued property
312
+ * into a single member with that property as an `enum`. Since the members differ only by that one
313
+ * constant, the `enum` form accepts exactly the same values - it's just smaller. This folds the
314
+ * per-collection relationship and upload variants, which differ only in their `relationTo` constant.
315
+ *
316
+ * @example
317
+ * { oneOf: [
318
+ * { properties: { relationTo: { const: 'posts' }, value: { type: 'string' } } },
319
+ * { properties: { relationTo: { const: 'pages' }, value: { type: 'string' } } },
320
+ * ] }
321
+ * → { properties: { relationTo: { enum: ['posts', 'pages'] }, value: { type: 'string' } } }
322
+ */
323
+ const mergeConstDiscriminatedUnions = (schema: JsonSchemaType): JsonSchemaType =>
324
+ mapNodes(schema, (node) => {
325
+ for (const keyword of ['oneOf', 'anyOf'] as const) {
326
+ const members = node[keyword]
327
+ if (Array.isArray(members) && members.length > 1) {
328
+ const merged = mergeMembersByConst(members)
329
+ if (merged) {
330
+ delete node[keyword]
331
+ Object.assign(node, merged)
332
+ }
333
+ }
334
+ }
335
+ return node
336
+ }) as JsonSchemaType
337
+
338
+ /** Returns the merged member for {@link mergeConstDiscriminatedUnions}, or `null` if they can't merge. */
339
+ const mergeMembersByConst = (members: Array<boolean | JsonSchemaType>): JsonSchemaType | null => {
340
+ const objects = members.filter(
341
+ (member): member is JsonSchemaType =>
342
+ typeof member === 'object' && member !== null && typeof member.properties === 'object',
343
+ )
344
+ if (objects.length < 2 || objects.length !== members.length) {
345
+ return null
346
+ }
347
+
348
+ for (const discriminator of Object.keys(objects[0]!.properties!)) {
349
+ // Each member must pin this property to a `const`...
350
+ const constValues: unknown[] = []
351
+ const everyMemberPinsConst = objects.every((member) => {
352
+ const prop = member.properties![discriminator]
353
+ if (prop && typeof prop === 'object' && 'const' in prop) {
354
+ constValues.push(prop.const)
355
+ return true
356
+ }
357
+ return false
358
+ })
359
+ if (!everyMemberPinsConst) {
360
+ continue
361
+ }
362
+
363
+ // ...and be otherwise identical (compare each member with the discriminator removed).
364
+ const fingerprintWithoutDiscriminator = (member: JsonSchemaType): string => {
365
+ const { [discriminator]: _discriminator, ...otherProperties } = member.properties!
366
+ return JSON.stringify({ ...member, properties: otherProperties })
367
+ }
368
+ if (new Set(objects.map(fingerprintWithoutDiscriminator)).size !== 1) {
369
+ continue
370
+ }
371
+
372
+ const uniqueConstValues = [...new Set(constValues)]
373
+ if (uniqueConstValues.length < 2) {
374
+ continue
375
+ }
376
+
377
+ // Replace the per-member `const` with a single `enum` of every value.
378
+ const merged = structuredClone(objects[0]!)
379
+ const discriminatorProp = merged.properties![discriminator]
380
+ if (discriminatorProp && typeof discriminatorProp === 'object') {
381
+ delete discriminatorProp.const
382
+ discriminatorProp.enum = uniqueConstValues as NonNullable<typeof discriminatorProp.enum>
383
+ }
384
+ return merged
385
+ }
386
+ return null
387
+ }
388
+
389
+ // A `$ref` costs ~30 characters once names are shortened, so sharing a subschema only pays off when
390
+ // it's larger than that and appears more than once.
391
+ const MIN_SHARED_SIZE = 64
392
+
393
+ /** A subschema worth sharing: a standalone object/union/described schema, not a `$ref` or a primitive. */
394
+ const isShareable = (node: unknown): node is Record<string, unknown> => {
395
+ if (!node || typeof node !== 'object' || Array.isArray(node) || '$ref' in node) {
396
+ return false
397
+ }
398
+ const schema = node as JsonSchemaType
399
+ return (
400
+ Array.isArray(schema.oneOf) ||
401
+ Array.isArray(schema.anyOf) ||
402
+ Boolean(schema.properties) ||
403
+ Boolean(schema.items) ||
404
+ typeof schema.description === 'string'
405
+ )
406
+ }
407
+
408
+ /**
409
+ * **Size.** Replaces any subschema that appears more than once with a single shared `$defs` entry referenced by
410
+ * `$ref`. Lossless — only the serialized size shrinks. A collection with several rich-text fields, for
411
+ * example, inlines the same large lexical node schema once per field; this collapses them into one.
412
+ *
413
+ * @example
414
+ * { properties: { billing: address, shipping: address } }
415
+ * → { properties: { billing: { $ref: '#/$defs/shared_0' }, shipping: { $ref: '#/$defs/shared_0' } }, $defs: { shared_0: address } }
416
+ */
417
+ const deduplicateIntoDefinitions = (schema: JsonSchemaType): JsonSchemaType => {
418
+ // Count how often each shareable subschema appears, keyed by its serialized form.
419
+ const counts = new Map<string, number>()
420
+ const count = (node: unknown): void => {
421
+ if (isShareable(node)) {
422
+ const key = JSON.stringify(node)
423
+ if (key.length >= MIN_SHARED_SIZE) {
424
+ counts.set(key, (counts.get(key) ?? 0) + 1)
425
+ }
426
+ }
427
+ if (Array.isArray(node)) {
428
+ node.forEach(count)
429
+ } else if (node && typeof node === 'object') {
430
+ Object.values(node).forEach(count)
431
+ }
432
+ }
433
+ count(schema)
434
+
435
+ if (![...counts.values()].some((n) => n >= 2)) {
436
+ return schema
437
+ }
438
+
439
+ // Replace each subschema seen 2+ times with a `$ref`. The first time we meet one it becomes a shared
440
+ // entry; we never descend into a stored entry, so shared entries never reference one another.
441
+ const sharedEntries: Record<string, JsonSchemaType> = {}
442
+ const nameByKey = new Map<string, string>()
443
+ const share = (node: unknown): unknown => {
444
+ if (isShareable(node)) {
445
+ const key = JSON.stringify(node)
446
+ if ((counts.get(key) ?? 0) >= 2) {
447
+ let name = nameByKey.get(key)
448
+ if (!name) {
449
+ name = `shared_${nameByKey.size}`
450
+ nameByKey.set(key, name)
451
+ sharedEntries[name] = node as JsonSchemaType
452
+ }
453
+ return { $ref: `#/$defs/${name}` }
454
+ }
455
+ }
456
+ if (Array.isArray(node)) {
457
+ return node.map(share)
458
+ }
459
+ if (node && typeof node === 'object') {
460
+ return Object.fromEntries(
461
+ Object.entries(node).map(([childKey, value]) => [childKey, share(value)]),
462
+ )
463
+ }
464
+ return node
465
+ }
466
+
467
+ const result = share(schema) as JsonSchemaType
468
+ result.$defs = { ...result.$defs, ...sharedEntries }
469
+ return result
470
+ }
471
+
472
+ /**
473
+ * **LLM ergonomics.** Renames `$defs` entries to short, readable names so the `$ref`s stay legible to the model: a block's
474
+ * `blockType` (`Code`), a node's `type` (`paragraph`), `node` for a rich-text node union, otherwise the
475
+ * generated name with its disambiguating hash dropped. A numeric suffix keeps collisions unique.
476
+ *
477
+ * @example
478
+ * { properties: { body: { $ref: '#/$defs/LexicalNodes_9FBEC708' } }, $defs: { LexicalNodes_9FBEC708: {} } }
479
+ * → { properties: { body: { $ref: '#/$defs/node' } }, $defs: { node: {} } }
480
+ */
481
+ const shortenDefinitionNames = (schema: JsonSchemaType): JsonSchemaType => {
482
+ const definitions = schema.$defs
483
+ if (!definitions || Object.keys(definitions).length === 0) {
484
+ return schema
485
+ }
486
+
487
+ const shortNameFor = (name: string, definition: boolean | JsonSchemaType): string => {
488
+ const properties = (typeof definition === 'object' && definition.properties) || {}
489
+ const constString = (key: string): string | undefined => {
490
+ const prop = properties[key]
491
+ return prop && typeof prop === 'object' && typeof prop.const === 'string'
492
+ ? prop.const
493
+ : undefined
494
+ }
495
+ const members =
496
+ typeof definition === 'object' ? (definition.anyOf ?? definition.oneOf) : undefined
497
+ const isNodeUnion =
498
+ Array.isArray(members) &&
499
+ members.some((m) => typeof m === 'object' && Boolean(m.$ref || m.properties?.type))
500
+ return (
501
+ constString('blockType') ??
502
+ constString('type') ??
503
+ (isNodeUnion ? 'node' : undefined) ??
504
+ name.replace(/_[0-9A-F]{6,}$/i, '')
505
+ )
506
+ }
507
+
508
+ const prefix = '#/$defs/'
509
+ const usedNames = new Map<string, number>()
510
+ const rename = new Map<string, string>()
511
+ for (const [name, definition] of Object.entries(definitions)) {
512
+ const shortName = shortNameFor(name, definition)
513
+ const used = usedNames.get(shortName) ?? 0
514
+ usedNames.set(shortName, used + 1)
515
+ rename.set(name, used === 0 ? shortName : `${shortName}${used + 1}`)
516
+ }
517
+
518
+ const result = mapNodes(schema, (node) => {
519
+ if (typeof node.$ref === 'string' && node.$ref.startsWith(prefix)) {
520
+ const name = node.$ref.slice(prefix.length)
521
+ node.$ref = `${prefix}${rename.get(name) ?? name}`
522
+ }
523
+ return node
524
+ }) as JsonSchemaType
525
+ result.$defs = Object.fromEntries(
526
+ Object.entries(result.$defs!).map(([name, body]) => [rename.get(name) ?? name, body]),
527
+ )
528
+ return result
529
+ }
@@ -0,0 +1,9 @@
1
+ import { fromJsonSchema, type StandardSchemaWithJSON } from '@modelcontextprotocol/server'
2
+
3
+ import type { ToolInputSchema } from '../types.js'
4
+
5
+ /** Normalize a tool/prompt input to a Standard Schema. Raw JSON Schema gets wrapped; Standard Schema instances pass through. */
6
+ export const toStandardSchema = (schema: ToolInputSchema): StandardSchemaWithJSON =>
7
+ typeof schema === 'object' && schema !== null && '~standard' in schema
8
+ ? (schema as StandardSchemaWithJSON)
9
+ : fromJsonSchema(schema)
@@ -1,7 +0,0 @@
1
- import type { CollectionConfig } from 'payload';
2
- import type { MCPPluginConfig } from '../types.js';
3
- export declare const createAPIKeysCollection: (collections: MCPPluginConfig["collections"], globals: MCPPluginConfig["globals"], customTools: Array<{
4
- description: string;
5
- name: string;
6
- }> | undefined, experimentalTools: NonNullable<MCPPluginConfig["experimental"]>["tools"] | undefined, pluginOptions: MCPPluginConfig) => CollectionConfig;
7
- //# sourceMappingURL=createApiKeysCollection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createApiKeysCollection.d.ts","sourceRoot":"","sources":["../../src/collections/createApiKeysCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,SAAS,CAAA;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAKlD,eAAO,MAAM,uBAAuB,gBACrB,eAAe,CAAC,aAAa,CAAC,WAClC,eAAe,CAAC,SAAS,CAAC,eACtB,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,iCACtC,WAAW,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,6BACzD,eAAe,KAC7B,gBAuWF,CAAA"}