@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
@@ -1,56 +0,0 @@
1
- /**
2
- * Removes internal Payload properties (id, createdAt, updatedAt) from a
3
- * JSON Schema so they don't appear in the generated Zod validation schema.
4
- * Also strips `id` from the `required` array when present.
5
- *
6
- * Additionally normalizes nullable type arrays (e.g. `['array', 'null']` →
7
- * `'array'`) throughout the schema tree. Without this, `json-schema-to-zod`
8
- * emits a Zod union which the MCP SDK serialises back as `anyOf`, stripping
9
- * the concrete `type` from the output and breaking schema introspection.
10
- */ export function sanitizeJsonSchema(schema) {
11
- delete schema?.properties?.id;
12
- delete schema?.properties?.createdAt;
13
- delete schema?.properties?.updatedAt;
14
- if (Array.isArray(schema.required)) {
15
- schema.required = schema.required.filter((field)=>field !== 'id');
16
- if (schema.required.length === 0) {
17
- delete schema.required;
18
- }
19
- }
20
- if (schema.properties && typeof schema.properties === 'object') {
21
- for (const key of Object.keys(schema.properties)){
22
- const prop = schema.properties[key];
23
- if (!prop || typeof prop !== 'object') {
24
- continue;
25
- }
26
- normalizeNullableType(prop);
27
- if (prop.properties) {
28
- sanitizeJsonSchema(prop);
29
- }
30
- if (prop.items && typeof prop.items === 'object' && !Array.isArray(prop.items)) {
31
- sanitizeJsonSchema(prop.items);
32
- }
33
- }
34
- }
35
- return schema;
36
- }
37
- /**
38
- * Strips `'null'` from a `type` array only when the remaining type is a
39
- * complex structural type (`array` or `object`).
40
- *
41
- * Simple scalar types (`string`, `number`, `boolean`) are intentionally
42
- * preserved as `['string', 'null']` so that the MCP SDK serialises them as a
43
- * compact inline `type` array. Complex types however cause `zodToJsonSchema`
44
- * to emit `anyOf: [{ type: 'array', items: ... }, { type: 'null' }]`, which
45
- * has no top-level `type` property and breaks schema introspection by clients.
46
- */ function normalizeNullableType(schema) {
47
- if (!Array.isArray(schema.type)) {
48
- return;
49
- }
50
- const nonNullTypes = schema.type.filter((t)=>t !== 'null');
51
- if (nonNullTypes.length === 1 && (nonNullTypes[0] === 'array' || nonNullTypes[0] === 'object')) {
52
- schema.type = nonNullTypes[0];
53
- }
54
- }
55
-
56
- //# sourceMappingURL=sanitizeJsonSchema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/utils/schemaConversion/sanitizeJsonSchema.ts"],"sourcesContent":["import type { JSONSchema4 } from 'json-schema'\n\n/**\n * Removes internal Payload properties (id, createdAt, updatedAt) from a\n * JSON Schema so they don't appear in the generated Zod validation schema.\n * Also strips `id` from the `required` array when present.\n *\n * Additionally normalizes nullable type arrays (e.g. `['array', 'null']` →\n * `'array'`) throughout the schema tree. Without this, `json-schema-to-zod`\n * emits a Zod union which the MCP SDK serialises back as `anyOf`, stripping\n * the concrete `type` from the output and breaking schema introspection.\n */\nexport function sanitizeJsonSchema(schema: JSONSchema4): JSONSchema4 {\n delete schema?.properties?.id\n delete schema?.properties?.createdAt\n delete schema?.properties?.updatedAt\n\n if (Array.isArray(schema.required)) {\n schema.required = schema.required.filter((field) => field !== 'id')\n if (schema.required.length === 0) {\n delete schema.required\n }\n }\n\n if (schema.properties && typeof schema.properties === 'object') {\n for (const key of Object.keys(schema.properties)) {\n const prop = schema.properties[key] as JSONSchema4\n if (!prop || typeof prop !== 'object') {\n continue\n }\n normalizeNullableType(prop)\n if (prop.properties) {\n sanitizeJsonSchema(prop)\n }\n if (prop.items && typeof prop.items === 'object' && !Array.isArray(prop.items)) {\n sanitizeJsonSchema(prop.items)\n }\n }\n }\n\n return schema\n}\n\n/**\n * Strips `'null'` from a `type` array only when the remaining type is a\n * complex structural type (`array` or `object`).\n *\n * Simple scalar types (`string`, `number`, `boolean`) are intentionally\n * preserved as `['string', 'null']` so that the MCP SDK serialises them as a\n * compact inline `type` array. Complex types however cause `zodToJsonSchema`\n * to emit `anyOf: [{ type: 'array', items: ... }, { type: 'null' }]`, which\n * has no top-level `type` property and breaks schema introspection by clients.\n */\nfunction normalizeNullableType(schema: JSONSchema4): void {\n if (!Array.isArray(schema.type)) {\n return\n }\n const nonNullTypes = schema.type.filter((t) => t !== 'null')\n if (nonNullTypes.length === 1 && (nonNullTypes[0] === 'array' || nonNullTypes[0] === 'object')) {\n schema.type = nonNullTypes[0]\n }\n}\n"],"names":["sanitizeJsonSchema","schema","properties","id","createdAt","updatedAt","Array","isArray","required","filter","field","length","key","Object","keys","prop","normalizeNullableType","items","type","nonNullTypes","t"],"mappings":"AAEA;;;;;;;;;CASC,GACD,OAAO,SAASA,mBAAmBC,MAAmB;IACpD,OAAOA,QAAQC,YAAYC;IAC3B,OAAOF,QAAQC,YAAYE;IAC3B,OAAOH,QAAQC,YAAYG;IAE3B,IAAIC,MAAMC,OAAO,CAACN,OAAOO,QAAQ,GAAG;QAClCP,OAAOO,QAAQ,GAAGP,OAAOO,QAAQ,CAACC,MAAM,CAAC,CAACC,QAAUA,UAAU;QAC9D,IAAIT,OAAOO,QAAQ,CAACG,MAAM,KAAK,GAAG;YAChC,OAAOV,OAAOO,QAAQ;QACxB;IACF;IAEA,IAAIP,OAAOC,UAAU,IAAI,OAAOD,OAAOC,UAAU,KAAK,UAAU;QAC9D,KAAK,MAAMU,OAAOC,OAAOC,IAAI,CAACb,OAAOC,UAAU,EAAG;YAChD,MAAMa,OAAOd,OAAOC,UAAU,CAACU,IAAI;YACnC,IAAI,CAACG,QAAQ,OAAOA,SAAS,UAAU;gBACrC;YACF;YACAC,sBAAsBD;YACtB,IAAIA,KAAKb,UAAU,EAAE;gBACnBF,mBAAmBe;YACrB;YACA,IAAIA,KAAKE,KAAK,IAAI,OAAOF,KAAKE,KAAK,KAAK,YAAY,CAACX,MAAMC,OAAO,CAACQ,KAAKE,KAAK,GAAG;gBAC9EjB,mBAAmBe,KAAKE,KAAK;YAC/B;QACF;IACF;IAEA,OAAOhB;AACT;AAEA;;;;;;;;;CASC,GACD,SAASe,sBAAsBf,MAAmB;IAChD,IAAI,CAACK,MAAMC,OAAO,CAACN,OAAOiB,IAAI,GAAG;QAC/B;IACF;IACA,MAAMC,eAAelB,OAAOiB,IAAI,CAACT,MAAM,CAAC,CAACW,IAAMA,MAAM;IACrD,IAAID,aAAaR,MAAM,KAAK,KAAMQ,CAAAA,YAAY,CAAC,EAAE,KAAK,WAAWA,YAAY,CAAC,EAAE,KAAK,QAAO,GAAI;QAC9FlB,OAAOiB,IAAI,GAAGC,YAAY,CAAC,EAAE;IAC/B;AACF"}
@@ -1,20 +0,0 @@
1
- import type { JSONSchema4 } from 'json-schema';
2
- /**
3
- * Recursively processes JSON schema properties to simplify relationship fields
4
- * and convert `oneOf` constructs into MCP-friendly schemas.
5
- *
6
- * For create/update validation we only need to accept IDs (string/number),
7
- * not populated objects. `$ref` options pointing to full entity definitions
8
- * are removed entirely from `oneOf` unions. When a single option remains the
9
- * `oneOf` is unwrapped; otherwise it is converted to `anyOf`.
10
- *
11
- * This matters because `json-schema-to-zod` converts `oneOf` into a strict
12
- * `z.any().superRefine(...)` validator whose base type is `z.any()`, causing
13
- * `zodToJsonSchema` to emit `{}` and losing all type information in the MCP
14
- * tool input schema. `anyOf` instead produces a clean `z.union([...])`.
15
- *
16
- * NOTE: This function must operate on a cloned schema to avoid mutating
17
- * the original JSON schema used for tool listing.
18
- */
19
- export declare function simplifyRelationshipFields(schema: JSONSchema4): JSONSchema4;
20
- //# sourceMappingURL=simplifyRelationshipFields.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"simplifyRelationshipFields.d.ts","sourceRoot":"","sources":["../../../src/utils/schemaConversion/simplifyRelationshipFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CA6C3E"}
@@ -1,53 +0,0 @@
1
- /**
2
- * Recursively processes JSON schema properties to simplify relationship fields
3
- * and convert `oneOf` constructs into MCP-friendly schemas.
4
- *
5
- * For create/update validation we only need to accept IDs (string/number),
6
- * not populated objects. `$ref` options pointing to full entity definitions
7
- * are removed entirely from `oneOf` unions. When a single option remains the
8
- * `oneOf` is unwrapped; otherwise it is converted to `anyOf`.
9
- *
10
- * This matters because `json-schema-to-zod` converts `oneOf` into a strict
11
- * `z.any().superRefine(...)` validator whose base type is `z.any()`, causing
12
- * `zodToJsonSchema` to emit `{}` and losing all type information in the MCP
13
- * tool input schema. `anyOf` instead produces a clean `z.union([...])`.
14
- *
15
- * NOTE: This function must operate on a cloned schema to avoid mutating
16
- * the original JSON schema used for tool listing.
17
- */ export function simplifyRelationshipFields(schema) {
18
- if (!schema || typeof schema !== 'object') {
19
- return schema;
20
- }
21
- const processed = {
22
- ...schema
23
- };
24
- if (Array.isArray(processed.oneOf)) {
25
- const hasRef = processed.oneOf.some((option)=>option && typeof option === 'object' && '$ref' in option);
26
- if (hasRef) {
27
- const nonRefOptions = processed.oneOf.filter((option)=>!(option && typeof option === 'object' && '$ref' in option)).map((option)=>simplifyRelationshipFields(option));
28
- if (nonRefOptions.length === 1) {
29
- const single = nonRefOptions[0];
30
- delete processed.oneOf;
31
- Object.assign(processed, single);
32
- } else if (nonRefOptions.length > 1) {
33
- delete processed.oneOf;
34
- processed.anyOf = nonRefOptions;
35
- }
36
- } else {
37
- processed.anyOf = processed.oneOf.map((option)=>simplifyRelationshipFields(option));
38
- delete processed.oneOf;
39
- }
40
- }
41
- if (processed.properties && typeof processed.properties === 'object') {
42
- processed.properties = Object.fromEntries(Object.entries(processed.properties).map(([key, value])=>[
43
- key,
44
- simplifyRelationshipFields(value)
45
- ]));
46
- }
47
- if (processed.items && typeof processed.items === 'object' && !Array.isArray(processed.items)) {
48
- processed.items = simplifyRelationshipFields(processed.items);
49
- }
50
- return processed;
51
- }
52
-
53
- //# sourceMappingURL=simplifyRelationshipFields.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/utils/schemaConversion/simplifyRelationshipFields.ts"],"sourcesContent":["import type { JSONSchema4 } from 'json-schema'\n\n/**\n * Recursively processes JSON schema properties to simplify relationship fields\n * and convert `oneOf` constructs into MCP-friendly schemas.\n *\n * For create/update validation we only need to accept IDs (string/number),\n * not populated objects. `$ref` options pointing to full entity definitions\n * are removed entirely from `oneOf` unions. When a single option remains the\n * `oneOf` is unwrapped; otherwise it is converted to `anyOf`.\n *\n * This matters because `json-schema-to-zod` converts `oneOf` into a strict\n * `z.any().superRefine(...)` validator whose base type is `z.any()`, causing\n * `zodToJsonSchema` to emit `{}` and losing all type information in the MCP\n * tool input schema. `anyOf` instead produces a clean `z.union([...])`.\n *\n * NOTE: This function must operate on a cloned schema to avoid mutating\n * the original JSON schema used for tool listing.\n */\nexport function simplifyRelationshipFields(schema: JSONSchema4): JSONSchema4 {\n if (!schema || typeof schema !== 'object') {\n return schema\n }\n\n const processed = { ...schema }\n\n if (Array.isArray(processed.oneOf)) {\n const hasRef = processed.oneOf.some(\n (option) => option && typeof option === 'object' && '$ref' in option,\n )\n\n if (hasRef) {\n const nonRefOptions = processed.oneOf\n .filter((option) => !(option && typeof option === 'object' && '$ref' in option))\n .map((option) => simplifyRelationshipFields(option))\n\n if (nonRefOptions.length === 1) {\n const single = nonRefOptions[0]!\n delete processed.oneOf\n Object.assign(processed, single)\n } else if (nonRefOptions.length > 1) {\n delete processed.oneOf\n processed.anyOf = nonRefOptions\n }\n } else {\n processed.anyOf = processed.oneOf.map((option) => simplifyRelationshipFields(option))\n delete processed.oneOf\n }\n }\n\n if (processed.properties && typeof processed.properties === 'object') {\n processed.properties = Object.fromEntries(\n Object.entries(processed.properties).map(([key, value]) => [\n key,\n simplifyRelationshipFields(value),\n ]),\n )\n }\n\n if (processed.items && typeof processed.items === 'object' && !Array.isArray(processed.items)) {\n processed.items = simplifyRelationshipFields(processed.items)\n }\n\n return processed\n}\n"],"names":["simplifyRelationshipFields","schema","processed","Array","isArray","oneOf","hasRef","some","option","nonRefOptions","filter","map","length","single","Object","assign","anyOf","properties","fromEntries","entries","key","value","items"],"mappings":"AAEA;;;;;;;;;;;;;;;;CAgBC,GACD,OAAO,SAASA,2BAA2BC,MAAmB;IAC5D,IAAI,CAACA,UAAU,OAAOA,WAAW,UAAU;QACzC,OAAOA;IACT;IAEA,MAAMC,YAAY;QAAE,GAAGD,MAAM;IAAC;IAE9B,IAAIE,MAAMC,OAAO,CAACF,UAAUG,KAAK,GAAG;QAClC,MAAMC,SAASJ,UAAUG,KAAK,CAACE,IAAI,CACjC,CAACC,SAAWA,UAAU,OAAOA,WAAW,YAAY,UAAUA;QAGhE,IAAIF,QAAQ;YACV,MAAMG,gBAAgBP,UAAUG,KAAK,CAClCK,MAAM,CAAC,CAACF,SAAW,CAAEA,CAAAA,UAAU,OAAOA,WAAW,YAAY,UAAUA,MAAK,GAC5EG,GAAG,CAAC,CAACH,SAAWR,2BAA2BQ;YAE9C,IAAIC,cAAcG,MAAM,KAAK,GAAG;gBAC9B,MAAMC,SAASJ,aAAa,CAAC,EAAE;gBAC/B,OAAOP,UAAUG,KAAK;gBACtBS,OAAOC,MAAM,CAACb,WAAWW;YAC3B,OAAO,IAAIJ,cAAcG,MAAM,GAAG,GAAG;gBACnC,OAAOV,UAAUG,KAAK;gBACtBH,UAAUc,KAAK,GAAGP;YACpB;QACF,OAAO;YACLP,UAAUc,KAAK,GAAGd,UAAUG,KAAK,CAACM,GAAG,CAAC,CAACH,SAAWR,2BAA2BQ;YAC7E,OAAON,UAAUG,KAAK;QACxB;IACF;IAEA,IAAIH,UAAUe,UAAU,IAAI,OAAOf,UAAUe,UAAU,KAAK,UAAU;QACpEf,UAAUe,UAAU,GAAGH,OAAOI,WAAW,CACvCJ,OAAOK,OAAO,CAACjB,UAAUe,UAAU,EAAEN,GAAG,CAAC,CAAC,CAACS,KAAKC,MAAM,GAAK;gBACzDD;gBACApB,2BAA2BqB;aAC5B;IAEL;IAEA,IAAInB,UAAUoB,KAAK,IAAI,OAAOpB,UAAUoB,KAAK,KAAK,YAAY,CAACnB,MAAMC,OAAO,CAACF,UAAUoB,KAAK,GAAG;QAC7FpB,UAAUoB,KAAK,GAAGtB,2BAA2BE,UAAUoB,KAAK;IAC9D;IAEA,OAAOpB;AACT"}
@@ -1,3 +0,0 @@
1
- import type { JSONSchema4 } from 'json-schema';
2
- export declare function transformPointFieldsForMCP(schema: JSONSchema4): JSONSchema4;
3
- //# sourceMappingURL=transformPointFields.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transformPointFields.d.ts","sourceRoot":"","sources":["../../../src/utils/schemaConversion/transformPointFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAoD3E"}
@@ -1,51 +0,0 @@
1
- export function transformPointFieldsForMCP(schema) {
2
- if (!schema || typeof schema !== 'object') {
3
- return schema;
4
- }
5
- const transformed = {
6
- ...schema
7
- };
8
- if (transformed.properties && typeof transformed.properties === 'object') {
9
- transformed.properties = Object.fromEntries(Object.entries(transformed.properties).map(([key, value])=>{
10
- const isArrayType = value.type === 'array' || Array.isArray(value.type) && value.type.includes('array');
11
- if (value && typeof value === 'object' && isArrayType && Array.isArray(value.items) && value.items.length === 2 && value.items.every((item)=>item?.type === 'number')) {
12
- // Transform to object format
13
- const isNullable = Array.isArray(value.type) && value.type.includes('null');
14
- return [
15
- key,
16
- {
17
- type: isNullable ? [
18
- 'object',
19
- 'null'
20
- ] : 'object',
21
- description: value.description || 'Geographic coordinates (longitude, latitude)',
22
- properties: {
23
- latitude: {
24
- type: 'number',
25
- description: 'Latitude coordinate'
26
- },
27
- longitude: {
28
- type: 'number',
29
- description: 'Longitude coordinate'
30
- }
31
- },
32
- required: [
33
- 'longitude',
34
- 'latitude'
35
- ]
36
- }
37
- ];
38
- }
39
- return [
40
- key,
41
- transformPointFieldsForMCP(value)
42
- ];
43
- }));
44
- }
45
- if (transformed.items && typeof transformed.items === 'object' && !Array.isArray(transformed.items)) {
46
- transformed.items = transformPointFieldsForMCP(transformed.items);
47
- }
48
- return transformed;
49
- }
50
-
51
- //# sourceMappingURL=transformPointFields.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/utils/schemaConversion/transformPointFields.ts"],"sourcesContent":["import type { JSONSchema4 } from 'json-schema'\n\nexport function transformPointFieldsForMCP(schema: JSONSchema4): JSONSchema4 {\n if (!schema || typeof schema !== 'object') {\n return schema\n }\n\n const transformed = { ...schema }\n\n if (transformed.properties && typeof transformed.properties === 'object') {\n transformed.properties = Object.fromEntries(\n Object.entries(transformed.properties).map(([key, value]) => {\n const isArrayType =\n value.type === 'array' || (Array.isArray(value.type) && value.type.includes('array'))\n\n if (\n value &&\n typeof value === 'object' &&\n isArrayType &&\n Array.isArray(value.items) &&\n value.items.length === 2 &&\n value.items.every((item: JSONSchema4) => item?.type === 'number')\n ) {\n // Transform to object format\n const isNullable = Array.isArray(value.type) && value.type.includes('null')\n\n return [\n key,\n {\n type: isNullable ? ['object', 'null'] : 'object',\n description: value.description || 'Geographic coordinates (longitude, latitude)',\n properties: {\n latitude: { type: 'number', description: 'Latitude coordinate' },\n longitude: { type: 'number', description: 'Longitude coordinate' },\n },\n required: ['longitude', 'latitude'],\n },\n ]\n }\n\n return [key, transformPointFieldsForMCP(value)]\n }),\n )\n }\n\n if (\n transformed.items &&\n typeof transformed.items === 'object' &&\n !Array.isArray(transformed.items)\n ) {\n transformed.items = transformPointFieldsForMCP(transformed.items)\n }\n\n return transformed\n}\n"],"names":["transformPointFieldsForMCP","schema","transformed","properties","Object","fromEntries","entries","map","key","value","isArrayType","type","Array","isArray","includes","items","length","every","item","isNullable","description","latitude","longitude","required"],"mappings":"AAEA,OAAO,SAASA,2BAA2BC,MAAmB;IAC5D,IAAI,CAACA,UAAU,OAAOA,WAAW,UAAU;QACzC,OAAOA;IACT;IAEA,MAAMC,cAAc;QAAE,GAAGD,MAAM;IAAC;IAEhC,IAAIC,YAAYC,UAAU,IAAI,OAAOD,YAAYC,UAAU,KAAK,UAAU;QACxED,YAAYC,UAAU,GAAGC,OAAOC,WAAW,CACzCD,OAAOE,OAAO,CAACJ,YAAYC,UAAU,EAAEI,GAAG,CAAC,CAAC,CAACC,KAAKC,MAAM;YACtD,MAAMC,cACJD,MAAME,IAAI,KAAK,WAAYC,MAAMC,OAAO,CAACJ,MAAME,IAAI,KAAKF,MAAME,IAAI,CAACG,QAAQ,CAAC;YAE9E,IACEL,SACA,OAAOA,UAAU,YACjBC,eACAE,MAAMC,OAAO,CAACJ,MAAMM,KAAK,KACzBN,MAAMM,KAAK,CAACC,MAAM,KAAK,KACvBP,MAAMM,KAAK,CAACE,KAAK,CAAC,CAACC,OAAsBA,MAAMP,SAAS,WACxD;gBACA,6BAA6B;gBAC7B,MAAMQ,aAAaP,MAAMC,OAAO,CAACJ,MAAME,IAAI,KAAKF,MAAME,IAAI,CAACG,QAAQ,CAAC;gBAEpE,OAAO;oBACLN;oBACA;wBACEG,MAAMQ,aAAa;4BAAC;4BAAU;yBAAO,GAAG;wBACxCC,aAAaX,MAAMW,WAAW,IAAI;wBAClCjB,YAAY;4BACVkB,UAAU;gCAAEV,MAAM;gCAAUS,aAAa;4BAAsB;4BAC/DE,WAAW;gCAAEX,MAAM;gCAAUS,aAAa;4BAAuB;wBACnE;wBACAG,UAAU;4BAAC;4BAAa;yBAAW;oBACrC;iBACD;YACH;YAEA,OAAO;gBAACf;gBAAKR,2BAA2BS;aAAO;QACjD;IAEJ;IAEA,IACEP,YAAYa,KAAK,IACjB,OAAOb,YAAYa,KAAK,KAAK,YAC7B,CAACH,MAAMC,OAAO,CAACX,YAAYa,KAAK,GAChC;QACAb,YAAYa,KAAK,GAAGf,2BAA2BE,YAAYa,KAAK;IAClE;IAEA,OAAOb;AACT"}
@@ -1,373 +0,0 @@
1
- import type { CollectionConfig, CollectionSlug } from 'payload'
2
-
3
- import type { MCPPluginConfig } from '../types.js'
4
-
5
- import { toCamelCase } from '../utils/camelCase.js'
6
- import { createApiKeyFields } from '../utils/createApiKeyFields.js'
7
-
8
- export const createAPIKeysCollection = (
9
- collections: MCPPluginConfig['collections'],
10
- globals: MCPPluginConfig['globals'],
11
- customTools: Array<{ description: string; name: string }> = [],
12
- experimentalTools: NonNullable<MCPPluginConfig['experimental']>['tools'] = {},
13
- pluginOptions: MCPPluginConfig,
14
- ): CollectionConfig => {
15
- const customToolsFields = customTools.map((tool) => {
16
- const camelCasedName = toCamelCase(tool.name)
17
- return {
18
- name: camelCasedName,
19
- type: 'checkbox' as const,
20
- admin: {
21
- description: tool.description,
22
- },
23
- defaultValue: true,
24
- label: camelCasedName,
25
- }
26
- })
27
-
28
- const customResourceFields =
29
- pluginOptions.mcp?.resources?.map((resource) => {
30
- const camelCasedName = toCamelCase(resource.name)
31
- return {
32
- name: camelCasedName,
33
- type: 'checkbox' as const,
34
- admin: {
35
- description: resource.description,
36
- },
37
- defaultValue: true,
38
- label: camelCasedName,
39
- }
40
- }) || []
41
-
42
- const customPromptFields =
43
- pluginOptions.mcp?.prompts?.map((prompt) => {
44
- const camelCasedName = toCamelCase(prompt.name)
45
- return {
46
- name: camelCasedName,
47
- type: 'checkbox' as const,
48
- admin: {
49
- description: prompt.description,
50
- },
51
- defaultValue: true,
52
- label: camelCasedName,
53
- }
54
- }) || []
55
-
56
- const userCollection = pluginOptions.userCollection
57
-
58
- return {
59
- slug: 'payload-mcp-api-keys',
60
- admin: {
61
- description:
62
- 'API keys control which collections, resources, tools, and prompts MCP clients can access',
63
- group: 'MCP',
64
- useAsTitle: 'label',
65
- },
66
- auth: {
67
- disableLocalStrategy: true,
68
- useAPIKey: true,
69
- },
70
- fields: [
71
- {
72
- name: 'user',
73
- type: 'relationship',
74
- admin: {
75
- description: 'The user that the API key is associated with.',
76
- },
77
- relationTo: userCollection as CollectionSlug,
78
- required: true,
79
- },
80
- {
81
- name: 'label',
82
- type: 'text',
83
- admin: {
84
- description: 'A useful label for the API key.',
85
- },
86
- },
87
- {
88
- name: 'description',
89
- type: 'text',
90
- admin: {
91
- description: 'The purpose of the API key.',
92
- },
93
- },
94
-
95
- ...createApiKeyFields({
96
- config: collections,
97
- configType: 'collection',
98
- }),
99
-
100
- ...createApiKeyFields({
101
- config: globals,
102
- configType: 'global',
103
- }),
104
-
105
- ...(customTools.length > 0
106
- ? [
107
- {
108
- type: 'collapsible' as const,
109
- admin: {
110
- description: 'Manage client access to tools',
111
- position: 'sidebar' as const,
112
- },
113
- fields: [
114
- {
115
- name: 'payload-mcp-tool',
116
- type: 'group' as const,
117
- fields: customToolsFields,
118
- label: false as const,
119
- },
120
- ],
121
- label: 'Tools',
122
- },
123
- ]
124
- : []),
125
-
126
- ...(pluginOptions.mcp?.resources && pluginOptions.mcp?.resources.length > 0
127
- ? [
128
- {
129
- type: 'collapsible' as const,
130
- admin: {
131
- description: 'Manage client access to resources',
132
- position: 'sidebar' as const,
133
- },
134
- fields: [
135
- {
136
- name: 'payload-mcp-resource',
137
- type: 'group' as const,
138
- fields: customResourceFields,
139
- label: false as const,
140
- },
141
- ],
142
- label: 'Resources',
143
- },
144
- ]
145
- : []),
146
-
147
- ...(pluginOptions.mcp?.prompts && pluginOptions.mcp?.prompts.length > 0
148
- ? [
149
- {
150
- type: 'collapsible' as const,
151
- admin: {
152
- description: 'Manage client access to prompts',
153
- position: 'sidebar' as const,
154
- },
155
- fields: [
156
- {
157
- name: 'payload-mcp-prompt',
158
- type: 'group' as const,
159
- fields: customPromptFields,
160
- label: false as const,
161
- },
162
- ],
163
- label: 'Prompts',
164
- },
165
- ]
166
- : []),
167
-
168
- // Experimental Tools
169
- ...(process.env.NODE_ENV === 'development' &&
170
- (experimentalTools?.collections?.enabled ||
171
- experimentalTools?.jobs?.enabled ||
172
- experimentalTools?.config?.enabled ||
173
- experimentalTools?.auth?.enabled)
174
- ? [
175
- {
176
- type: 'collapsible' as const,
177
- admin: {
178
- description: 'Manage client access to experimental tools',
179
- position: 'sidebar' as const,
180
- },
181
- fields: [
182
- ...(experimentalTools?.collections?.enabled
183
- ? [
184
- {
185
- name: 'collections',
186
- type: 'group' as const,
187
- fields: [
188
- {
189
- name: 'find',
190
- type: 'checkbox' as const,
191
- admin: {
192
- description:
193
- 'Allow LLMs to find and list Payload collections with optional content and document counts.',
194
- },
195
- defaultValue: false,
196
- },
197
- {
198
- name: 'create',
199
- type: 'checkbox' as const,
200
- admin: {
201
- description:
202
- 'Allow LLMs to create new Payload collections with specified fields and configuration.',
203
- },
204
- defaultValue: false,
205
- },
206
- {
207
- name: 'update',
208
- type: 'checkbox' as const,
209
- admin: {
210
- description:
211
- 'Allow LLMs to update existing Payload collections with new fields, modifications, or configuration changes.',
212
- },
213
- defaultValue: false,
214
- },
215
- {
216
- name: 'delete',
217
- type: 'checkbox' as const,
218
- admin: {
219
- description:
220
- 'Allow LLMs to delete Payload collections and optionally update the configuration.',
221
- },
222
- defaultValue: false,
223
- },
224
- ],
225
- },
226
- ]
227
- : []),
228
- ...(experimentalTools?.jobs?.enabled
229
- ? [
230
- {
231
- name: 'jobs',
232
- type: 'group' as const,
233
- fields: [
234
- {
235
- name: 'create',
236
- type: 'checkbox' as const,
237
- admin: {
238
- description:
239
- 'Allow LLMs to create new Payload jobs (tasks and workflows) with custom schemas and configuration.',
240
- },
241
- defaultValue: false,
242
- },
243
- {
244
- name: 'run',
245
- type: 'checkbox' as const,
246
- admin: {
247
- description:
248
- 'Allow LLMs to execute Payload jobs with custom input data and queue options.',
249
- },
250
- defaultValue: false,
251
- },
252
- {
253
- name: 'update',
254
- type: 'checkbox' as const,
255
- admin: {
256
- description:
257
- 'Allow LLMs to update existing Payload jobs with new schemas, configuration, or handler code.',
258
- },
259
- defaultValue: false,
260
- },
261
- ],
262
- },
263
- ]
264
- : []),
265
- ...(experimentalTools?.config?.enabled
266
- ? [
267
- {
268
- name: 'config',
269
- type: 'group' as const,
270
- fields: [
271
- {
272
- name: 'find',
273
- type: 'checkbox' as const,
274
- admin: {
275
- description:
276
- 'Allow LLMs to read and display a Payload configuration file.',
277
- },
278
- defaultValue: false,
279
- },
280
- {
281
- name: 'update',
282
- type: 'checkbox' as const,
283
- admin: {
284
- description:
285
- 'Allow LLMs to update a Payload configuration file with various modifications.',
286
- },
287
- defaultValue: false,
288
- },
289
- ],
290
- },
291
- ]
292
- : []),
293
- ...(experimentalTools?.auth?.enabled
294
- ? [
295
- {
296
- name: 'auth',
297
- type: 'group' as const,
298
- fields: [
299
- {
300
- name: 'auth',
301
- type: 'checkbox' as const,
302
- admin: {
303
- description:
304
- 'Allow LLMs to check authentication status for a user by setting custom headers. (e.g. {"Authorization": "Bearer <token>"})',
305
- },
306
- defaultValue: false,
307
- label: 'Check Auth Status',
308
- },
309
- {
310
- name: 'login',
311
- type: 'checkbox' as const,
312
- admin: {
313
- description:
314
- 'Allow LLMs to authenticate a user with email and password.',
315
- },
316
- defaultValue: false,
317
- label: 'User Login',
318
- },
319
- {
320
- name: 'verify',
321
- type: 'checkbox' as const,
322
- admin: {
323
- description:
324
- 'Allow LLMs to verify a user email with a verification token.',
325
- },
326
- defaultValue: false,
327
- label: 'Email Verification',
328
- },
329
- {
330
- name: 'resetPassword',
331
- type: 'checkbox' as const,
332
- admin: {
333
- description:
334
- 'Allow LLMs to reset a user password with a reset token.',
335
- },
336
- defaultValue: false,
337
- label: 'Reset Password',
338
- },
339
- {
340
- name: 'forgotPassword',
341
- type: 'checkbox' as const,
342
- admin: {
343
- description: 'Allow LLMs to send a password reset email to a user.',
344
- },
345
- defaultValue: false,
346
- label: 'Forgot Password',
347
- },
348
- {
349
- name: 'unlock',
350
- type: 'checkbox' as const,
351
- admin: {
352
- description:
353
- 'Allow LLMs to unlock a user account that has been locked due to failed login attempts.',
354
- },
355
- defaultValue: false,
356
- label: 'Unlock Account',
357
- },
358
- ],
359
- },
360
- ]
361
- : []),
362
- ],
363
- label: 'Experimental Tools',
364
- },
365
- ]
366
- : []),
367
- ],
368
- labels: {
369
- plural: 'API Keys',
370
- singular: 'API Key',
371
- },
372
- }
373
- }
package/src/defaults.ts DELETED
@@ -1,3 +0,0 @@
1
- export const defaults = {
2
- userCollection: 'users',
3
- }