@payloadcms/plugin-mcp 4.0.0-internal.5b1e7cd → 4.0.0-internal.a0ef1b8

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 (340) hide show
  1. package/bin.js +39 -0
  2. package/dist/@types/assets.d.js +2 -0
  3. package/dist/@types/assets.d.js.map +1 -0
  4. package/dist/collection/getAccessField.d.ts +12 -0
  5. package/dist/collection/getAccessField.d.ts.map +1 -0
  6. package/dist/collection/getAccessField.js +57 -0
  7. package/dist/collection/getAccessField.js.map +1 -0
  8. package/dist/collection/index.d.ts +6 -0
  9. package/dist/collection/index.d.ts.map +1 -0
  10. package/dist/collection/index.js +60 -0
  11. package/dist/collection/index.js.map +1 -0
  12. package/dist/components/AccessField/index.client.d.ts +10 -0
  13. package/dist/components/AccessField/index.client.d.ts.map +1 -0
  14. package/dist/components/AccessField/index.client.js +305 -0
  15. package/dist/components/AccessField/index.client.js.map +1 -0
  16. package/dist/components/AccessField/index.css +93 -0
  17. package/dist/defineTool.d.ts +26 -0
  18. package/dist/defineTool.d.ts.map +1 -0
  19. package/dist/defineTool.js +37 -0
  20. package/dist/defineTool.js.map +1 -0
  21. package/dist/endpoint/access.d.ts +10 -0
  22. package/dist/endpoint/access.d.ts.map +1 -0
  23. package/dist/endpoint/access.js +106 -0
  24. package/dist/endpoint/access.js.map +1 -0
  25. package/dist/endpoint/index.d.ts +3 -0
  26. package/dist/endpoint/index.d.ts.map +1 -0
  27. package/dist/endpoint/index.js +36 -0
  28. package/dist/endpoint/index.js.map +1 -0
  29. package/dist/exports/client.d.ts +2 -0
  30. package/dist/exports/client.d.ts.map +1 -0
  31. package/dist/exports/client.js +4 -0
  32. package/dist/exports/client.js.map +1 -0
  33. package/dist/index.d.ts +4 -7
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +44 -67
  36. package/dist/index.js.map +1 -1
  37. package/dist/mcp/buildMcpServer.d.ts +19 -0
  38. package/dist/mcp/buildMcpServer.d.ts.map +1 -0
  39. package/dist/mcp/buildMcpServer.js +170 -0
  40. package/dist/mcp/buildMcpServer.js.map +1 -0
  41. package/dist/mcp/builtin/collections/authTools.d.ts +7 -0
  42. package/dist/mcp/builtin/collections/authTools.d.ts.map +1 -0
  43. package/dist/mcp/builtin/collections/authTools.js +250 -0
  44. package/dist/mcp/builtin/collections/authTools.js.map +1 -0
  45. package/dist/mcp/builtin/collections/createTool.d.ts +2 -0
  46. package/dist/mcp/builtin/collections/createTool.d.ts.map +1 -0
  47. package/dist/mcp/builtin/collections/createTool.js +91 -0
  48. package/dist/mcp/builtin/collections/createTool.js.map +1 -0
  49. package/dist/mcp/builtin/collections/deleteTool.d.ts +2 -0
  50. package/dist/mcp/builtin/collections/deleteTool.d.ts.map +1 -0
  51. package/dist/mcp/builtin/collections/deleteTool.js +117 -0
  52. package/dist/mcp/builtin/collections/deleteTool.js.map +1 -0
  53. package/dist/mcp/builtin/collections/findTool.d.ts +2 -0
  54. package/dist/mcp/builtin/collections/findTool.d.ts.map +1 -0
  55. package/dist/mcp/builtin/collections/findTool.js +159 -0
  56. package/dist/mcp/builtin/collections/findTool.js.map +1 -0
  57. package/dist/mcp/builtin/collections/updateTool.d.ts +2 -0
  58. package/dist/mcp/builtin/collections/updateTool.d.ts.map +1 -0
  59. package/dist/mcp/builtin/collections/updateTool.js +191 -0
  60. package/dist/mcp/builtin/collections/updateTool.js.map +1 -0
  61. package/dist/mcp/builtin/globals/findTool.d.ts +2 -0
  62. package/dist/mcp/builtin/globals/findTool.d.ts.map +1 -0
  63. package/dist/mcp/builtin/globals/findTool.js +76 -0
  64. package/dist/mcp/builtin/globals/findTool.js.map +1 -0
  65. package/dist/mcp/builtin/globals/updateTool.d.ts +2 -0
  66. package/dist/mcp/builtin/globals/updateTool.d.ts.map +1 -0
  67. package/dist/mcp/builtin/globals/updateTool.js +96 -0
  68. package/dist/mcp/builtin/globals/updateTool.js.map +1 -0
  69. package/dist/mcp/builtinTools.d.ts +37 -0
  70. package/dist/mcp/builtinTools.d.ts.map +1 -0
  71. package/dist/mcp/builtinTools.js +64 -0
  72. package/dist/mcp/builtinTools.js.map +1 -0
  73. package/dist/mcp/sanitizeMCPConfig.d.ts +17 -0
  74. package/dist/mcp/sanitizeMCPConfig.d.ts.map +1 -0
  75. package/dist/mcp/sanitizeMCPConfig.js +167 -0
  76. package/dist/mcp/sanitizeMCPConfig.js.map +1 -0
  77. package/dist/stdio.d.ts +8 -0
  78. package/dist/stdio.d.ts.map +1 -0
  79. package/dist/stdio.js +89 -0
  80. package/dist/stdio.js.map +1 -0
  81. package/dist/types.d.ts +262 -455
  82. package/dist/types.d.ts.map +1 -1
  83. package/dist/types.js +6 -1
  84. package/dist/types.js.map +1 -1
  85. package/dist/utils/camelCase.d.ts.map +1 -1
  86. package/dist/utils/getLogger.d.ts +10 -0
  87. package/dist/utils/getLogger.d.ts.map +1 -0
  88. package/dist/utils/getLogger.js +22 -0
  89. package/dist/utils/getLogger.js.map +1 -0
  90. package/dist/utils/getPluginConfig.d.ts +12 -0
  91. package/dist/utils/getPluginConfig.d.ts.map +1 -0
  92. package/dist/utils/getPluginConfig.js +15 -0
  93. package/dist/utils/getPluginConfig.js.map +1 -0
  94. package/dist/utils/localAPIDefaults.d.ts +20 -0
  95. package/dist/utils/localAPIDefaults.d.ts.map +1 -0
  96. package/dist/utils/localAPIDefaults.js +19 -0
  97. package/dist/utils/localAPIDefaults.js.map +1 -0
  98. package/dist/utils/resolveProjectRoot.d.ts +7 -0
  99. package/dist/utils/resolveProjectRoot.d.ts.map +1 -0
  100. package/dist/utils/resolveProjectRoot.js +15 -0
  101. package/dist/utils/resolveProjectRoot.js.map +1 -0
  102. package/dist/utils/schemaConversion/buildToolInput.d.ts +29 -0
  103. package/dist/utils/schemaConversion/buildToolInput.d.ts.map +1 -0
  104. package/dist/utils/schemaConversion/buildToolInput.js +51 -0
  105. package/dist/utils/schemaConversion/buildToolInput.js.map +1 -0
  106. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts +2 -2
  107. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts.map +1 -1
  108. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js.map +1 -1
  109. package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts +15 -0
  110. package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts.map +1 -0
  111. package/dist/utils/schemaConversion/sanitizeEntitySchema.js +464 -0
  112. package/dist/utils/schemaConversion/sanitizeEntitySchema.js.map +1 -0
  113. package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js +158 -0
  114. package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js.map +1 -0
  115. package/dist/utils/toStandardSchema.d.ts +5 -0
  116. package/dist/utils/toStandardSchema.d.ts.map +1 -0
  117. package/dist/utils/toStandardSchema.js +4 -0
  118. package/dist/utils/toStandardSchema.js.map +1 -0
  119. package/package.json +35 -10
  120. package/src/@types/assets.d.ts +3 -0
  121. package/src/collection/getAccessField.ts +64 -0
  122. package/src/collection/index.ts +64 -0
  123. package/src/components/AccessField/index.client.tsx +344 -0
  124. package/src/components/AccessField/index.css +93 -0
  125. package/src/defineTool.ts +44 -0
  126. package/src/endpoint/access.ts +132 -0
  127. package/src/endpoint/index.ts +35 -0
  128. package/src/exports/client.ts +2 -0
  129. package/src/index.ts +35 -85
  130. package/src/mcp/buildMcpServer.ts +229 -0
  131. package/src/mcp/builtin/collections/authTools.ts +233 -0
  132. package/src/mcp/builtin/collections/createTool.ts +116 -0
  133. package/src/mcp/builtin/collections/deleteTool.ts +123 -0
  134. package/src/mcp/builtin/collections/findTool.ts +187 -0
  135. package/src/mcp/builtin/collections/updateTool.ts +210 -0
  136. package/src/mcp/builtin/globals/findTool.ts +96 -0
  137. package/src/mcp/builtin/globals/updateTool.ts +120 -0
  138. package/src/mcp/builtinTools.ts +84 -0
  139. package/src/mcp/sanitizeMCPConfig.ts +239 -0
  140. package/src/stdio.ts +98 -0
  141. package/src/types.ts +295 -490
  142. package/src/utils/getLogger.ts +22 -0
  143. package/src/utils/getPluginConfig.ts +24 -0
  144. package/src/utils/localAPIDefaults.ts +22 -0
  145. package/src/utils/resolveProjectRoot.ts +17 -0
  146. package/src/utils/schemaConversion/buildToolInput.ts +68 -0
  147. package/src/utils/schemaConversion/removeVirtualFieldsFromSchema.ts +3 -3
  148. package/src/utils/schemaConversion/sanitizeEntitySchema.spec.ts +103 -0
  149. package/src/utils/schemaConversion/sanitizeEntitySchema.ts +529 -0
  150. package/src/utils/toStandardSchema.ts +9 -0
  151. package/dist/collections/createApiKeysCollection.d.ts +0 -7
  152. package/dist/collections/createApiKeysCollection.d.ts.map +0 -1
  153. package/dist/collections/createApiKeysCollection.js +0 -317
  154. package/dist/collections/createApiKeysCollection.js.map +0 -1
  155. package/dist/defaults.d.ts +0 -4
  156. package/dist/defaults.d.ts.map +0 -1
  157. package/dist/defaults.js +0 -5
  158. package/dist/defaults.js.map +0 -1
  159. package/dist/endpoints/mcp.d.ts +0 -4
  160. package/dist/endpoints/mcp.d.ts.map +0 -1
  161. package/dist/endpoints/mcp.js +0 -71
  162. package/dist/endpoints/mcp.js.map +0 -1
  163. package/dist/mcp/createRequest.d.ts +0 -3
  164. package/dist/mcp/createRequest.d.ts.map +0 -1
  165. package/dist/mcp/createRequest.js +0 -14
  166. package/dist/mcp/createRequest.js.map +0 -1
  167. package/dist/mcp/getMcpHandler.d.ts +0 -4
  168. package/dist/mcp/getMcpHandler.d.ts.map +0 -1
  169. package/dist/mcp/getMcpHandler.js +0 -231
  170. package/dist/mcp/getMcpHandler.js.map +0 -1
  171. package/dist/mcp/helpers/config.d.ts +0 -22
  172. package/dist/mcp/helpers/config.d.ts.map +0 -1
  173. package/dist/mcp/helpers/config.js +0 -153
  174. package/dist/mcp/helpers/config.js.map +0 -1
  175. package/dist/mcp/helpers/fields.d.ts +0 -19
  176. package/dist/mcp/helpers/fields.d.ts.map +0 -1
  177. package/dist/mcp/helpers/fields.js +0 -102
  178. package/dist/mcp/helpers/fields.js.map +0 -1
  179. package/dist/mcp/helpers/fileValidation.d.ts +0 -67
  180. package/dist/mcp/helpers/fileValidation.d.ts.map +0 -1
  181. package/dist/mcp/helpers/fileValidation.js +0 -267
  182. package/dist/mcp/helpers/fileValidation.js.map +0 -1
  183. package/dist/mcp/registerTool.d.ts +0 -6
  184. package/dist/mcp/registerTool.d.ts.map +0 -1
  185. package/dist/mcp/registerTool.js +0 -18
  186. package/dist/mcp/registerTool.js.map +0 -1
  187. package/dist/mcp/tools/auth/auth.d.ts +0 -4
  188. package/dist/mcp/tools/auth/auth.d.ts.map +0 -1
  189. package/dist/mcp/tools/auth/auth.js +0 -57
  190. package/dist/mcp/tools/auth/auth.js.map +0 -1
  191. package/dist/mcp/tools/auth/forgotPassword.d.ts +0 -4
  192. package/dist/mcp/tools/auth/forgotPassword.d.ts.map +0 -1
  193. package/dist/mcp/tools/auth/forgotPassword.js +0 -48
  194. package/dist/mcp/tools/auth/forgotPassword.js.map +0 -1
  195. package/dist/mcp/tools/auth/login.d.ts +0 -4
  196. package/dist/mcp/tools/auth/login.d.ts.map +0 -1
  197. package/dist/mcp/tools/auth/login.js +0 -51
  198. package/dist/mcp/tools/auth/login.js.map +0 -1
  199. package/dist/mcp/tools/auth/resetPassword.d.ts +0 -4
  200. package/dist/mcp/tools/auth/resetPassword.d.ts.map +0 -1
  201. package/dist/mcp/tools/auth/resetPassword.js +0 -49
  202. package/dist/mcp/tools/auth/resetPassword.js.map +0 -1
  203. package/dist/mcp/tools/auth/unlock.d.ts +0 -4
  204. package/dist/mcp/tools/auth/unlock.d.ts.map +0 -1
  205. package/dist/mcp/tools/auth/unlock.js +0 -48
  206. package/dist/mcp/tools/auth/unlock.js.map +0 -1
  207. package/dist/mcp/tools/auth/verify.d.ts +0 -4
  208. package/dist/mcp/tools/auth/verify.d.ts.map +0 -1
  209. package/dist/mcp/tools/auth/verify.js +0 -45
  210. package/dist/mcp/tools/auth/verify.js.map +0 -1
  211. package/dist/mcp/tools/collection/create.d.ts +0 -10
  212. package/dist/mcp/tools/collection/create.d.ts.map +0 -1
  213. package/dist/mcp/tools/collection/create.js +0 -139
  214. package/dist/mcp/tools/collection/create.js.map +0 -1
  215. package/dist/mcp/tools/collection/delete.d.ts +0 -10
  216. package/dist/mcp/tools/collection/delete.d.ts.map +0 -1
  217. package/dist/mcp/tools/collection/delete.js +0 -154
  218. package/dist/mcp/tools/collection/delete.js.map +0 -1
  219. package/dist/mcp/tools/collection/find.d.ts +0 -10
  220. package/dist/mcp/tools/collection/find.d.ts.map +0 -1
  221. package/dist/mcp/tools/collection/find.js +0 -165
  222. package/dist/mcp/tools/collection/find.js.map +0 -1
  223. package/dist/mcp/tools/collection/update.d.ts +0 -10
  224. package/dist/mcp/tools/collection/update.d.ts.map +0 -1
  225. package/dist/mcp/tools/collection/update.js +0 -209
  226. package/dist/mcp/tools/collection/update.js.map +0 -1
  227. package/dist/mcp/tools/config/find.d.ts +0 -10
  228. package/dist/mcp/tools/config/find.d.ts.map +0 -1
  229. package/dist/mcp/tools/config/find.js +0 -97
  230. package/dist/mcp/tools/config/find.js.map +0 -1
  231. package/dist/mcp/tools/config/update.d.ts +0 -10
  232. package/dist/mcp/tools/config/update.d.ts.map +0 -1
  233. package/dist/mcp/tools/config/update.js +0 -215
  234. package/dist/mcp/tools/config/update.js.map +0 -1
  235. package/dist/mcp/tools/global/find.d.ts +0 -5
  236. package/dist/mcp/tools/global/find.d.ts.map +0 -1
  237. package/dist/mcp/tools/global/find.js +0 -82
  238. package/dist/mcp/tools/global/find.js.map +0 -1
  239. package/dist/mcp/tools/global/update.d.ts +0 -6
  240. package/dist/mcp/tools/global/update.d.ts.map +0 -1
  241. package/dist/mcp/tools/global/update.js +0 -124
  242. package/dist/mcp/tools/global/update.js.map +0 -1
  243. package/dist/mcp/tools/job/create.d.ts +0 -10
  244. package/dist/mcp/tools/job/create.d.ts.map +0 -1
  245. package/dist/mcp/tools/job/create.js +0 -293
  246. package/dist/mcp/tools/job/create.js.map +0 -1
  247. package/dist/mcp/tools/job/run.d.ts +0 -10
  248. package/dist/mcp/tools/job/run.d.ts.map +0 -1
  249. package/dist/mcp/tools/job/run.js +0 -129
  250. package/dist/mcp/tools/job/run.js.map +0 -1
  251. package/dist/mcp/tools/job/update.d.ts +0 -11
  252. package/dist/mcp/tools/job/update.d.ts.map +0 -1
  253. package/dist/mcp/tools/job/update.js +0 -186
  254. package/dist/mcp/tools/job/update.js.map +0 -1
  255. package/dist/mcp/tools/resource/create.d.ts +0 -6
  256. package/dist/mcp/tools/resource/create.d.ts.map +0 -1
  257. package/dist/mcp/tools/resource/create.js +0 -124
  258. package/dist/mcp/tools/resource/create.js.map +0 -1
  259. package/dist/mcp/tools/resource/delete.d.ts +0 -5
  260. package/dist/mcp/tools/resource/delete.d.ts.map +0 -1
  261. package/dist/mcp/tools/resource/delete.js +0 -151
  262. package/dist/mcp/tools/resource/delete.js.map +0 -1
  263. package/dist/mcp/tools/resource/find.d.ts +0 -5
  264. package/dist/mcp/tools/resource/find.d.ts.map +0 -1
  265. package/dist/mcp/tools/resource/find.js +0 -170
  266. package/dist/mcp/tools/resource/find.js.map +0 -1
  267. package/dist/mcp/tools/resource/update.d.ts +0 -6
  268. package/dist/mcp/tools/resource/update.d.ts.map +0 -1
  269. package/dist/mcp/tools/resource/update.js +0 -256
  270. package/dist/mcp/tools/resource/update.js.map +0 -1
  271. package/dist/mcp/tools/schemas.d.ts +0 -457
  272. package/dist/mcp/tools/schemas.d.ts.map +0 -1
  273. package/dist/mcp/tools/schemas.js +0 -243
  274. package/dist/mcp/tools/schemas.js.map +0 -1
  275. package/dist/utils/adminEntitySettings.d.ts +0 -17
  276. package/dist/utils/adminEntitySettings.d.ts.map +0 -1
  277. package/dist/utils/adminEntitySettings.js +0 -41
  278. package/dist/utils/adminEntitySettings.js.map +0 -1
  279. package/dist/utils/createApiKeyFields.d.ts +0 -15
  280. package/dist/utils/createApiKeyFields.d.ts.map +0 -1
  281. package/dist/utils/createApiKeyFields.js +0 -57
  282. package/dist/utils/createApiKeyFields.js.map +0 -1
  283. package/dist/utils/getEnabledSlugs.d.ts +0 -13
  284. package/dist/utils/getEnabledSlugs.d.ts.map +0 -1
  285. package/dist/utils/getEnabledSlugs.js +0 -32
  286. package/dist/utils/getEnabledSlugs.js.map +0 -1
  287. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts +0 -3
  288. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts.map +0 -1
  289. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js +0 -43
  290. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js.map +0 -1
  291. package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts +0 -13
  292. package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts.map +0 -1
  293. package/dist/utils/schemaConversion/sanitizeJsonSchema.js +0 -56
  294. package/dist/utils/schemaConversion/sanitizeJsonSchema.js.map +0 -1
  295. package/dist/utils/schemaConversion/simplifyRelationshipFields.d.ts +0 -20
  296. package/dist/utils/schemaConversion/simplifyRelationshipFields.d.ts.map +0 -1
  297. package/dist/utils/schemaConversion/simplifyRelationshipFields.js +0 -53
  298. package/dist/utils/schemaConversion/simplifyRelationshipFields.js.map +0 -1
  299. package/dist/utils/schemaConversion/transformPointFields.d.ts +0 -3
  300. package/dist/utils/schemaConversion/transformPointFields.d.ts.map +0 -1
  301. package/dist/utils/schemaConversion/transformPointFields.js +0 -51
  302. package/dist/utils/schemaConversion/transformPointFields.js.map +0 -1
  303. package/src/collections/createApiKeysCollection.ts +0 -373
  304. package/src/defaults.ts +0 -3
  305. package/src/endpoints/mcp.ts +0 -91
  306. package/src/mcp/createRequest.ts +0 -13
  307. package/src/mcp/getMcpHandler.ts +0 -545
  308. package/src/mcp/helpers/config.ts +0 -213
  309. package/src/mcp/helpers/fields.ts +0 -154
  310. package/src/mcp/helpers/fileValidation.ts +0 -362
  311. package/src/mcp/registerTool.ts +0 -22
  312. package/src/mcp/tools/auth/auth.ts +0 -71
  313. package/src/mcp/tools/auth/forgotPassword.ts +0 -70
  314. package/src/mcp/tools/auth/login.ts +0 -72
  315. package/src/mcp/tools/auth/resetPassword.ts +0 -61
  316. package/src/mcp/tools/auth/unlock.ts +0 -64
  317. package/src/mcp/tools/auth/verify.ts +0 -57
  318. package/src/mcp/tools/collection/create.ts +0 -210
  319. package/src/mcp/tools/collection/delete.ts +0 -211
  320. package/src/mcp/tools/collection/find.ts +0 -224
  321. package/src/mcp/tools/collection/update.ts +0 -290
  322. package/src/mcp/tools/config/find.ts +0 -128
  323. package/src/mcp/tools/config/update.ts +0 -280
  324. package/src/mcp/tools/global/find.ts +0 -128
  325. package/src/mcp/tools/global/update.ts +0 -207
  326. package/src/mcp/tools/job/create.ts +0 -416
  327. package/src/mcp/tools/job/run.ts +0 -167
  328. package/src/mcp/tools/job/update.ts +0 -274
  329. package/src/mcp/tools/resource/create.ts +0 -211
  330. package/src/mcp/tools/resource/delete.ts +0 -218
  331. package/src/mcp/tools/resource/find.ts +0 -246
  332. package/src/mcp/tools/resource/update.ts +0 -383
  333. package/src/mcp/tools/schemas.ts +0 -520
  334. package/src/utils/adminEntitySettings.ts +0 -40
  335. package/src/utils/createApiKeyFields.ts +0 -72
  336. package/src/utils/getEnabledSlugs.ts +0 -42
  337. package/src/utils/schemaConversion/convertCollectionSchemaToZod.ts +0 -52
  338. package/src/utils/schemaConversion/sanitizeJsonSchema.ts +0 -62
  339. package/src/utils/schemaConversion/simplifyRelationshipFields.ts +0 -65
  340. 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
- }