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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (341) hide show
  1. package/README.md +2 -2
  2. package/bin.js +39 -0
  3. package/dist/@types/assets.d.js +2 -0
  4. package/dist/@types/assets.d.js.map +1 -0
  5. package/dist/collection/getAccessField.d.ts +12 -0
  6. package/dist/collection/getAccessField.d.ts.map +1 -0
  7. package/dist/collection/getAccessField.js +57 -0
  8. package/dist/collection/getAccessField.js.map +1 -0
  9. package/dist/collection/index.d.ts +6 -0
  10. package/dist/collection/index.d.ts.map +1 -0
  11. package/dist/collection/index.js +60 -0
  12. package/dist/collection/index.js.map +1 -0
  13. package/dist/components/AccessField/index.client.d.ts +10 -0
  14. package/dist/components/AccessField/index.client.d.ts.map +1 -0
  15. package/dist/components/AccessField/index.client.js +305 -0
  16. package/dist/components/AccessField/index.client.js.map +1 -0
  17. package/dist/components/AccessField/index.css +93 -0
  18. package/dist/defineTool.d.ts +26 -0
  19. package/dist/defineTool.d.ts.map +1 -0
  20. package/dist/defineTool.js +37 -0
  21. package/dist/defineTool.js.map +1 -0
  22. package/dist/endpoint/access.d.ts +10 -0
  23. package/dist/endpoint/access.d.ts.map +1 -0
  24. package/dist/endpoint/access.js +106 -0
  25. package/dist/endpoint/access.js.map +1 -0
  26. package/dist/endpoint/index.d.ts +3 -0
  27. package/dist/endpoint/index.d.ts.map +1 -0
  28. package/dist/endpoint/index.js +36 -0
  29. package/dist/endpoint/index.js.map +1 -0
  30. package/dist/exports/client.d.ts +2 -0
  31. package/dist/exports/client.d.ts.map +1 -0
  32. package/dist/exports/client.js +4 -0
  33. package/dist/exports/client.js.map +1 -0
  34. package/dist/index.d.ts +4 -7
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +44 -67
  37. package/dist/index.js.map +1 -1
  38. package/dist/mcp/buildMcpServer.d.ts +19 -0
  39. package/dist/mcp/buildMcpServer.d.ts.map +1 -0
  40. package/dist/mcp/buildMcpServer.js +170 -0
  41. package/dist/mcp/buildMcpServer.js.map +1 -0
  42. package/dist/mcp/builtin/collections/authTools.d.ts +7 -0
  43. package/dist/mcp/builtin/collections/authTools.d.ts.map +1 -0
  44. package/dist/mcp/builtin/collections/authTools.js +250 -0
  45. package/dist/mcp/builtin/collections/authTools.js.map +1 -0
  46. package/dist/mcp/builtin/collections/createTool.d.ts +2 -0
  47. package/dist/mcp/builtin/collections/createTool.d.ts.map +1 -0
  48. package/dist/mcp/builtin/collections/createTool.js +91 -0
  49. package/dist/mcp/builtin/collections/createTool.js.map +1 -0
  50. package/dist/mcp/builtin/collections/deleteTool.d.ts +2 -0
  51. package/dist/mcp/builtin/collections/deleteTool.d.ts.map +1 -0
  52. package/dist/mcp/builtin/collections/deleteTool.js +117 -0
  53. package/dist/mcp/builtin/collections/deleteTool.js.map +1 -0
  54. package/dist/mcp/builtin/collections/findTool.d.ts +2 -0
  55. package/dist/mcp/builtin/collections/findTool.d.ts.map +1 -0
  56. package/dist/mcp/builtin/collections/findTool.js +159 -0
  57. package/dist/mcp/builtin/collections/findTool.js.map +1 -0
  58. package/dist/mcp/builtin/collections/updateTool.d.ts +2 -0
  59. package/dist/mcp/builtin/collections/updateTool.d.ts.map +1 -0
  60. package/dist/mcp/builtin/collections/updateTool.js +191 -0
  61. package/dist/mcp/builtin/collections/updateTool.js.map +1 -0
  62. package/dist/mcp/builtin/globals/findTool.d.ts +2 -0
  63. package/dist/mcp/builtin/globals/findTool.d.ts.map +1 -0
  64. package/dist/mcp/builtin/globals/findTool.js +76 -0
  65. package/dist/mcp/builtin/globals/findTool.js.map +1 -0
  66. package/dist/mcp/builtin/globals/updateTool.d.ts +2 -0
  67. package/dist/mcp/builtin/globals/updateTool.d.ts.map +1 -0
  68. package/dist/mcp/builtin/globals/updateTool.js +96 -0
  69. package/dist/mcp/builtin/globals/updateTool.js.map +1 -0
  70. package/dist/mcp/builtinTools.d.ts +37 -0
  71. package/dist/mcp/builtinTools.d.ts.map +1 -0
  72. package/dist/mcp/builtinTools.js +64 -0
  73. package/dist/mcp/builtinTools.js.map +1 -0
  74. package/dist/mcp/sanitizeMCPConfig.d.ts +17 -0
  75. package/dist/mcp/sanitizeMCPConfig.d.ts.map +1 -0
  76. package/dist/mcp/sanitizeMCPConfig.js +167 -0
  77. package/dist/mcp/sanitizeMCPConfig.js.map +1 -0
  78. package/dist/stdio.d.ts +8 -0
  79. package/dist/stdio.d.ts.map +1 -0
  80. package/dist/stdio.js +89 -0
  81. package/dist/stdio.js.map +1 -0
  82. package/dist/types.d.ts +262 -455
  83. package/dist/types.d.ts.map +1 -1
  84. package/dist/types.js +6 -1
  85. package/dist/types.js.map +1 -1
  86. package/dist/utils/camelCase.d.ts.map +1 -1
  87. package/dist/utils/getLogger.d.ts +10 -0
  88. package/dist/utils/getLogger.d.ts.map +1 -0
  89. package/dist/utils/getLogger.js +22 -0
  90. package/dist/utils/getLogger.js.map +1 -0
  91. package/dist/utils/getPluginConfig.d.ts +12 -0
  92. package/dist/utils/getPluginConfig.d.ts.map +1 -0
  93. package/dist/utils/getPluginConfig.js +15 -0
  94. package/dist/utils/getPluginConfig.js.map +1 -0
  95. package/dist/utils/localAPIDefaults.d.ts +20 -0
  96. package/dist/utils/localAPIDefaults.d.ts.map +1 -0
  97. package/dist/utils/localAPIDefaults.js +19 -0
  98. package/dist/utils/localAPIDefaults.js.map +1 -0
  99. package/dist/utils/resolveProjectRoot.d.ts +7 -0
  100. package/dist/utils/resolveProjectRoot.d.ts.map +1 -0
  101. package/dist/utils/resolveProjectRoot.js +15 -0
  102. package/dist/utils/resolveProjectRoot.js.map +1 -0
  103. package/dist/utils/schemaConversion/buildToolInput.d.ts +29 -0
  104. package/dist/utils/schemaConversion/buildToolInput.d.ts.map +1 -0
  105. package/dist/utils/schemaConversion/buildToolInput.js +51 -0
  106. package/dist/utils/schemaConversion/buildToolInput.js.map +1 -0
  107. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts +2 -2
  108. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts.map +1 -1
  109. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js.map +1 -1
  110. package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts +15 -0
  111. package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts.map +1 -0
  112. package/dist/utils/schemaConversion/sanitizeEntitySchema.js +464 -0
  113. package/dist/utils/schemaConversion/sanitizeEntitySchema.js.map +1 -0
  114. package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js +158 -0
  115. package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js.map +1 -0
  116. package/dist/utils/toStandardSchema.d.ts +5 -0
  117. package/dist/utils/toStandardSchema.d.ts.map +1 -0
  118. package/dist/utils/toStandardSchema.js +4 -0
  119. package/dist/utils/toStandardSchema.js.map +1 -0
  120. package/package.json +35 -10
  121. package/src/@types/assets.d.ts +3 -0
  122. package/src/collection/getAccessField.ts +64 -0
  123. package/src/collection/index.ts +64 -0
  124. package/src/components/AccessField/index.client.tsx +344 -0
  125. package/src/components/AccessField/index.css +93 -0
  126. package/src/defineTool.ts +44 -0
  127. package/src/endpoint/access.ts +132 -0
  128. package/src/endpoint/index.ts +35 -0
  129. package/src/exports/client.ts +2 -0
  130. package/src/index.ts +35 -85
  131. package/src/mcp/buildMcpServer.ts +229 -0
  132. package/src/mcp/builtin/collections/authTools.ts +233 -0
  133. package/src/mcp/builtin/collections/createTool.ts +116 -0
  134. package/src/mcp/builtin/collections/deleteTool.ts +123 -0
  135. package/src/mcp/builtin/collections/findTool.ts +187 -0
  136. package/src/mcp/builtin/collections/updateTool.ts +210 -0
  137. package/src/mcp/builtin/globals/findTool.ts +96 -0
  138. package/src/mcp/builtin/globals/updateTool.ts +120 -0
  139. package/src/mcp/builtinTools.ts +84 -0
  140. package/src/mcp/sanitizeMCPConfig.ts +239 -0
  141. package/src/stdio.ts +98 -0
  142. package/src/types.ts +295 -490
  143. package/src/utils/getLogger.ts +22 -0
  144. package/src/utils/getPluginConfig.ts +24 -0
  145. package/src/utils/localAPIDefaults.ts +22 -0
  146. package/src/utils/resolveProjectRoot.ts +17 -0
  147. package/src/utils/schemaConversion/buildToolInput.ts +68 -0
  148. package/src/utils/schemaConversion/removeVirtualFieldsFromSchema.ts +3 -3
  149. package/src/utils/schemaConversion/sanitizeEntitySchema.spec.ts +103 -0
  150. package/src/utils/schemaConversion/sanitizeEntitySchema.ts +529 -0
  151. package/src/utils/toStandardSchema.ts +9 -0
  152. package/dist/collections/createApiKeysCollection.d.ts +0 -7
  153. package/dist/collections/createApiKeysCollection.d.ts.map +0 -1
  154. package/dist/collections/createApiKeysCollection.js +0 -317
  155. package/dist/collections/createApiKeysCollection.js.map +0 -1
  156. package/dist/defaults.d.ts +0 -4
  157. package/dist/defaults.d.ts.map +0 -1
  158. package/dist/defaults.js +0 -5
  159. package/dist/defaults.js.map +0 -1
  160. package/dist/endpoints/mcp.d.ts +0 -4
  161. package/dist/endpoints/mcp.d.ts.map +0 -1
  162. package/dist/endpoints/mcp.js +0 -71
  163. package/dist/endpoints/mcp.js.map +0 -1
  164. package/dist/mcp/createRequest.d.ts +0 -3
  165. package/dist/mcp/createRequest.d.ts.map +0 -1
  166. package/dist/mcp/createRequest.js +0 -14
  167. package/dist/mcp/createRequest.js.map +0 -1
  168. package/dist/mcp/getMcpHandler.d.ts +0 -4
  169. package/dist/mcp/getMcpHandler.d.ts.map +0 -1
  170. package/dist/mcp/getMcpHandler.js +0 -231
  171. package/dist/mcp/getMcpHandler.js.map +0 -1
  172. package/dist/mcp/helpers/config.d.ts +0 -22
  173. package/dist/mcp/helpers/config.d.ts.map +0 -1
  174. package/dist/mcp/helpers/config.js +0 -153
  175. package/dist/mcp/helpers/config.js.map +0 -1
  176. package/dist/mcp/helpers/fields.d.ts +0 -19
  177. package/dist/mcp/helpers/fields.d.ts.map +0 -1
  178. package/dist/mcp/helpers/fields.js +0 -102
  179. package/dist/mcp/helpers/fields.js.map +0 -1
  180. package/dist/mcp/helpers/fileValidation.d.ts +0 -67
  181. package/dist/mcp/helpers/fileValidation.d.ts.map +0 -1
  182. package/dist/mcp/helpers/fileValidation.js +0 -267
  183. package/dist/mcp/helpers/fileValidation.js.map +0 -1
  184. package/dist/mcp/registerTool.d.ts +0 -6
  185. package/dist/mcp/registerTool.d.ts.map +0 -1
  186. package/dist/mcp/registerTool.js +0 -18
  187. package/dist/mcp/registerTool.js.map +0 -1
  188. package/dist/mcp/tools/auth/auth.d.ts +0 -4
  189. package/dist/mcp/tools/auth/auth.d.ts.map +0 -1
  190. package/dist/mcp/tools/auth/auth.js +0 -57
  191. package/dist/mcp/tools/auth/auth.js.map +0 -1
  192. package/dist/mcp/tools/auth/forgotPassword.d.ts +0 -4
  193. package/dist/mcp/tools/auth/forgotPassword.d.ts.map +0 -1
  194. package/dist/mcp/tools/auth/forgotPassword.js +0 -48
  195. package/dist/mcp/tools/auth/forgotPassword.js.map +0 -1
  196. package/dist/mcp/tools/auth/login.d.ts +0 -4
  197. package/dist/mcp/tools/auth/login.d.ts.map +0 -1
  198. package/dist/mcp/tools/auth/login.js +0 -51
  199. package/dist/mcp/tools/auth/login.js.map +0 -1
  200. package/dist/mcp/tools/auth/resetPassword.d.ts +0 -4
  201. package/dist/mcp/tools/auth/resetPassword.d.ts.map +0 -1
  202. package/dist/mcp/tools/auth/resetPassword.js +0 -49
  203. package/dist/mcp/tools/auth/resetPassword.js.map +0 -1
  204. package/dist/mcp/tools/auth/unlock.d.ts +0 -4
  205. package/dist/mcp/tools/auth/unlock.d.ts.map +0 -1
  206. package/dist/mcp/tools/auth/unlock.js +0 -48
  207. package/dist/mcp/tools/auth/unlock.js.map +0 -1
  208. package/dist/mcp/tools/auth/verify.d.ts +0 -4
  209. package/dist/mcp/tools/auth/verify.d.ts.map +0 -1
  210. package/dist/mcp/tools/auth/verify.js +0 -45
  211. package/dist/mcp/tools/auth/verify.js.map +0 -1
  212. package/dist/mcp/tools/collection/create.d.ts +0 -10
  213. package/dist/mcp/tools/collection/create.d.ts.map +0 -1
  214. package/dist/mcp/tools/collection/create.js +0 -139
  215. package/dist/mcp/tools/collection/create.js.map +0 -1
  216. package/dist/mcp/tools/collection/delete.d.ts +0 -10
  217. package/dist/mcp/tools/collection/delete.d.ts.map +0 -1
  218. package/dist/mcp/tools/collection/delete.js +0 -154
  219. package/dist/mcp/tools/collection/delete.js.map +0 -1
  220. package/dist/mcp/tools/collection/find.d.ts +0 -10
  221. package/dist/mcp/tools/collection/find.d.ts.map +0 -1
  222. package/dist/mcp/tools/collection/find.js +0 -165
  223. package/dist/mcp/tools/collection/find.js.map +0 -1
  224. package/dist/mcp/tools/collection/update.d.ts +0 -10
  225. package/dist/mcp/tools/collection/update.d.ts.map +0 -1
  226. package/dist/mcp/tools/collection/update.js +0 -209
  227. package/dist/mcp/tools/collection/update.js.map +0 -1
  228. package/dist/mcp/tools/config/find.d.ts +0 -10
  229. package/dist/mcp/tools/config/find.d.ts.map +0 -1
  230. package/dist/mcp/tools/config/find.js +0 -97
  231. package/dist/mcp/tools/config/find.js.map +0 -1
  232. package/dist/mcp/tools/config/update.d.ts +0 -10
  233. package/dist/mcp/tools/config/update.d.ts.map +0 -1
  234. package/dist/mcp/tools/config/update.js +0 -215
  235. package/dist/mcp/tools/config/update.js.map +0 -1
  236. package/dist/mcp/tools/global/find.d.ts +0 -5
  237. package/dist/mcp/tools/global/find.d.ts.map +0 -1
  238. package/dist/mcp/tools/global/find.js +0 -82
  239. package/dist/mcp/tools/global/find.js.map +0 -1
  240. package/dist/mcp/tools/global/update.d.ts +0 -6
  241. package/dist/mcp/tools/global/update.d.ts.map +0 -1
  242. package/dist/mcp/tools/global/update.js +0 -124
  243. package/dist/mcp/tools/global/update.js.map +0 -1
  244. package/dist/mcp/tools/job/create.d.ts +0 -10
  245. package/dist/mcp/tools/job/create.d.ts.map +0 -1
  246. package/dist/mcp/tools/job/create.js +0 -293
  247. package/dist/mcp/tools/job/create.js.map +0 -1
  248. package/dist/mcp/tools/job/run.d.ts +0 -10
  249. package/dist/mcp/tools/job/run.d.ts.map +0 -1
  250. package/dist/mcp/tools/job/run.js +0 -129
  251. package/dist/mcp/tools/job/run.js.map +0 -1
  252. package/dist/mcp/tools/job/update.d.ts +0 -11
  253. package/dist/mcp/tools/job/update.d.ts.map +0 -1
  254. package/dist/mcp/tools/job/update.js +0 -186
  255. package/dist/mcp/tools/job/update.js.map +0 -1
  256. package/dist/mcp/tools/resource/create.d.ts +0 -6
  257. package/dist/mcp/tools/resource/create.d.ts.map +0 -1
  258. package/dist/mcp/tools/resource/create.js +0 -124
  259. package/dist/mcp/tools/resource/create.js.map +0 -1
  260. package/dist/mcp/tools/resource/delete.d.ts +0 -5
  261. package/dist/mcp/tools/resource/delete.d.ts.map +0 -1
  262. package/dist/mcp/tools/resource/delete.js +0 -151
  263. package/dist/mcp/tools/resource/delete.js.map +0 -1
  264. package/dist/mcp/tools/resource/find.d.ts +0 -5
  265. package/dist/mcp/tools/resource/find.d.ts.map +0 -1
  266. package/dist/mcp/tools/resource/find.js +0 -170
  267. package/dist/mcp/tools/resource/find.js.map +0 -1
  268. package/dist/mcp/tools/resource/update.d.ts +0 -6
  269. package/dist/mcp/tools/resource/update.d.ts.map +0 -1
  270. package/dist/mcp/tools/resource/update.js +0 -256
  271. package/dist/mcp/tools/resource/update.js.map +0 -1
  272. package/dist/mcp/tools/schemas.d.ts +0 -457
  273. package/dist/mcp/tools/schemas.d.ts.map +0 -1
  274. package/dist/mcp/tools/schemas.js +0 -243
  275. package/dist/mcp/tools/schemas.js.map +0 -1
  276. package/dist/utils/adminEntitySettings.d.ts +0 -17
  277. package/dist/utils/adminEntitySettings.d.ts.map +0 -1
  278. package/dist/utils/adminEntitySettings.js +0 -41
  279. package/dist/utils/adminEntitySettings.js.map +0 -1
  280. package/dist/utils/createApiKeyFields.d.ts +0 -15
  281. package/dist/utils/createApiKeyFields.d.ts.map +0 -1
  282. package/dist/utils/createApiKeyFields.js +0 -57
  283. package/dist/utils/createApiKeyFields.js.map +0 -1
  284. package/dist/utils/getEnabledSlugs.d.ts +0 -13
  285. package/dist/utils/getEnabledSlugs.d.ts.map +0 -1
  286. package/dist/utils/getEnabledSlugs.js +0 -32
  287. package/dist/utils/getEnabledSlugs.js.map +0 -1
  288. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts +0 -3
  289. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts.map +0 -1
  290. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js +0 -43
  291. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js.map +0 -1
  292. package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts +0 -13
  293. package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts.map +0 -1
  294. package/dist/utils/schemaConversion/sanitizeJsonSchema.js +0 -56
  295. package/dist/utils/schemaConversion/sanitizeJsonSchema.js.map +0 -1
  296. package/dist/utils/schemaConversion/simplifyRelationshipFields.d.ts +0 -20
  297. package/dist/utils/schemaConversion/simplifyRelationshipFields.d.ts.map +0 -1
  298. package/dist/utils/schemaConversion/simplifyRelationshipFields.js +0 -53
  299. package/dist/utils/schemaConversion/simplifyRelationshipFields.js.map +0 -1
  300. package/dist/utils/schemaConversion/transformPointFields.d.ts +0 -3
  301. package/dist/utils/schemaConversion/transformPointFields.d.ts.map +0 -1
  302. package/dist/utils/schemaConversion/transformPointFields.js +0 -51
  303. package/dist/utils/schemaConversion/transformPointFields.js.map +0 -1
  304. package/src/collections/createApiKeysCollection.ts +0 -373
  305. package/src/defaults.ts +0 -3
  306. package/src/endpoints/mcp.ts +0 -91
  307. package/src/mcp/createRequest.ts +0 -13
  308. package/src/mcp/getMcpHandler.ts +0 -545
  309. package/src/mcp/helpers/config.ts +0 -213
  310. package/src/mcp/helpers/fields.ts +0 -154
  311. package/src/mcp/helpers/fileValidation.ts +0 -362
  312. package/src/mcp/registerTool.ts +0 -22
  313. package/src/mcp/tools/auth/auth.ts +0 -71
  314. package/src/mcp/tools/auth/forgotPassword.ts +0 -70
  315. package/src/mcp/tools/auth/login.ts +0 -72
  316. package/src/mcp/tools/auth/resetPassword.ts +0 -61
  317. package/src/mcp/tools/auth/unlock.ts +0 -64
  318. package/src/mcp/tools/auth/verify.ts +0 -57
  319. package/src/mcp/tools/collection/create.ts +0 -210
  320. package/src/mcp/tools/collection/delete.ts +0 -211
  321. package/src/mcp/tools/collection/find.ts +0 -224
  322. package/src/mcp/tools/collection/update.ts +0 -290
  323. package/src/mcp/tools/config/find.ts +0 -128
  324. package/src/mcp/tools/config/update.ts +0 -280
  325. package/src/mcp/tools/global/find.ts +0 -128
  326. package/src/mcp/tools/global/update.ts +0 -207
  327. package/src/mcp/tools/job/create.ts +0 -416
  328. package/src/mcp/tools/job/run.ts +0 -167
  329. package/src/mcp/tools/job/update.ts +0 -274
  330. package/src/mcp/tools/resource/create.ts +0 -211
  331. package/src/mcp/tools/resource/delete.ts +0 -218
  332. package/src/mcp/tools/resource/find.ts +0 -246
  333. package/src/mcp/tools/resource/update.ts +0 -383
  334. package/src/mcp/tools/schemas.ts +0 -520
  335. package/src/utils/adminEntitySettings.ts +0 -40
  336. package/src/utils/createApiKeyFields.ts +0 -72
  337. package/src/utils/getEnabledSlugs.ts +0 -42
  338. package/src/utils/schemaConversion/convertCollectionSchemaToZod.ts +0 -52
  339. package/src/utils/schemaConversion/sanitizeJsonSchema.ts +0 -62
  340. package/src/utils/schemaConversion/simplifyRelationshipFields.ts +0 -65
  341. package/src/utils/schemaConversion/transformPointFields.ts +0 -55
@@ -0,0 +1,158 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { sanitizeEntitySchema } from './sanitizeEntitySchema.js';
3
+ describe('sanitizeEntitySchema', ()=>{
4
+ it('keeps a Lexical node union strict (oneOf) while simplifying relationship values to IDs', ()=>{
5
+ // Shaped like the schema the MCP server prepares for a collection with a Lexical richText field:
6
+ // a `$defs` node union (a `oneOf` of node shapes) where a relationship node's `value` is either
7
+ // an ID or a `$ref` to the populated related collection.
8
+ const standalone = {
9
+ type: 'object',
10
+ $defs: {
11
+ LexicalNodes_ABCDEF12: {
12
+ oneOf: [
13
+ {
14
+ type: 'object',
15
+ additionalProperties: false,
16
+ properties: {
17
+ type: {
18
+ const: 'paragraph'
19
+ }
20
+ },
21
+ required: [
22
+ 'type'
23
+ ]
24
+ },
25
+ {
26
+ type: 'object',
27
+ additionalProperties: false,
28
+ properties: {
29
+ type: {
30
+ const: 'relationship'
31
+ },
32
+ value: {
33
+ oneOf: [
34
+ {
35
+ type: 'string'
36
+ },
37
+ {
38
+ $ref: '#/$defs/posts'
39
+ }
40
+ ]
41
+ }
42
+ },
43
+ required: [
44
+ 'type'
45
+ ]
46
+ }
47
+ ]
48
+ },
49
+ posts: {
50
+ type: 'object',
51
+ additionalProperties: false,
52
+ properties: {
53
+ id: {
54
+ type: 'string'
55
+ },
56
+ title: {
57
+ type: 'string'
58
+ }
59
+ }
60
+ }
61
+ },
62
+ properties: {
63
+ id: {
64
+ type: 'string'
65
+ },
66
+ content: {
67
+ type: 'object',
68
+ properties: {
69
+ root: {
70
+ type: 'object',
71
+ properties: {
72
+ children: {
73
+ type: 'array',
74
+ items: {
75
+ $ref: '#/$defs/LexicalNodes_ABCDEF12'
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
81
+ }
82
+ }
83
+ };
84
+ expect(sanitizeEntitySchema(standalone)).toStrictEqual({
85
+ type: 'object',
86
+ $defs: {
87
+ // The node union is renamed to a short, readable `node`, and stays a strict discriminated
88
+ // `oneOf` - not loosened to `anyOf`...
89
+ node: {
90
+ oneOf: [
91
+ {
92
+ type: 'object',
93
+ additionalProperties: false,
94
+ properties: {
95
+ type: {
96
+ const: 'paragraph'
97
+ }
98
+ },
99
+ required: [
100
+ 'type'
101
+ ]
102
+ },
103
+ {
104
+ type: 'object',
105
+ additionalProperties: false,
106
+ properties: {
107
+ type: {
108
+ const: 'relationship'
109
+ },
110
+ // ...while the relationship `value` is simplified to a bare ID (the populated-doc `$ref` is dropped).
111
+ value: {
112
+ type: 'string',
113
+ description: 'The ID of the related "posts" document.'
114
+ }
115
+ },
116
+ required: [
117
+ 'type'
118
+ ]
119
+ }
120
+ ]
121
+ },
122
+ posts: {
123
+ type: 'object',
124
+ additionalProperties: false,
125
+ properties: {
126
+ id: {
127
+ type: 'string'
128
+ },
129
+ title: {
130
+ type: 'string'
131
+ }
132
+ }
133
+ }
134
+ },
135
+ properties: {
136
+ // `id` is dropped - it's a Payload-managed field MCP clients never set.
137
+ content: {
138
+ type: 'object',
139
+ properties: {
140
+ root: {
141
+ type: 'object',
142
+ properties: {
143
+ children: {
144
+ type: 'array',
145
+ items: {
146
+ $ref: '#/$defs/node'
147
+ }
148
+ }
149
+ }
150
+ }
151
+ }
152
+ }
153
+ }
154
+ });
155
+ });
156
+ });
157
+
158
+ //# sourceMappingURL=sanitizeEntitySchema.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/schemaConversion/sanitizeEntitySchema.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport type { JsonSchemaType } from '../../types.js'\n\nimport { sanitizeEntitySchema } from './sanitizeEntitySchema.js'\n\ndescribe('sanitizeEntitySchema', () => {\n it('keeps a Lexical node union strict (oneOf) while simplifying relationship values to IDs', () => {\n // Shaped like the schema the MCP server prepares for a collection with a Lexical richText field:\n // a `$defs` node union (a `oneOf` of node shapes) where a relationship node's `value` is either\n // an ID or a `$ref` to the populated related collection.\n const standalone: JsonSchemaType = {\n type: 'object',\n $defs: {\n LexicalNodes_ABCDEF12: {\n oneOf: [\n {\n type: 'object',\n additionalProperties: false,\n properties: { type: { const: 'paragraph' } },\n required: ['type'],\n },\n {\n type: 'object',\n additionalProperties: false,\n properties: {\n type: { const: 'relationship' },\n value: { oneOf: [{ type: 'string' }, { $ref: '#/$defs/posts' }] },\n },\n required: ['type'],\n },\n ],\n },\n posts: {\n type: 'object',\n additionalProperties: false,\n properties: { id: { type: 'string' }, title: { type: 'string' } },\n },\n },\n properties: {\n id: { type: 'string' },\n content: {\n type: 'object',\n properties: {\n root: {\n type: 'object',\n properties: {\n children: { type: 'array', items: { $ref: '#/$defs/LexicalNodes_ABCDEF12' } },\n },\n },\n },\n },\n },\n }\n\n expect(sanitizeEntitySchema(standalone)).toStrictEqual({\n type: 'object',\n $defs: {\n // The node union is renamed to a short, readable `node`, and stays a strict discriminated\n // `oneOf` - not loosened to `anyOf`...\n node: {\n oneOf: [\n {\n type: 'object',\n additionalProperties: false,\n properties: { type: { const: 'paragraph' } },\n required: ['type'],\n },\n {\n type: 'object',\n additionalProperties: false,\n properties: {\n type: { const: 'relationship' },\n // ...while the relationship `value` is simplified to a bare ID (the populated-doc `$ref` is dropped).\n value: { type: 'string', description: 'The ID of the related \"posts\" document.' },\n },\n required: ['type'],\n },\n ],\n },\n posts: {\n type: 'object',\n additionalProperties: false,\n properties: { id: { type: 'string' }, title: { type: 'string' } },\n },\n },\n properties: {\n // `id` is dropped - it's a Payload-managed field MCP clients never set.\n content: {\n type: 'object',\n properties: {\n root: {\n type: 'object',\n properties: {\n children: { type: 'array', items: { $ref: '#/$defs/node' } },\n },\n },\n },\n },\n },\n })\n })\n})\n"],"names":["describe","expect","it","sanitizeEntitySchema","standalone","type","$defs","LexicalNodes_ABCDEF12","oneOf","additionalProperties","properties","const","required","value","$ref","posts","id","title","content","root","children","items","toStrictEqual","node","description"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAI7C,SAASC,oBAAoB,QAAQ,4BAA2B;AAEhEH,SAAS,wBAAwB;IAC/BE,GAAG,0FAA0F;QAC3F,iGAAiG;QACjG,gGAAgG;QAChG,yDAAyD;QACzD,MAAME,aAA6B;YACjCC,MAAM;YACNC,OAAO;gBACLC,uBAAuB;oBACrBC,OAAO;wBACL;4BACEH,MAAM;4BACNI,sBAAsB;4BACtBC,YAAY;gCAAEL,MAAM;oCAAEM,OAAO;gCAAY;4BAAE;4BAC3CC,UAAU;gCAAC;6BAAO;wBACpB;wBACA;4BACEP,MAAM;4BACNI,sBAAsB;4BACtBC,YAAY;gCACVL,MAAM;oCAAEM,OAAO;gCAAe;gCAC9BE,OAAO;oCAAEL,OAAO;wCAAC;4CAAEH,MAAM;wCAAS;wCAAG;4CAAES,MAAM;wCAAgB;qCAAE;gCAAC;4BAClE;4BACAF,UAAU;gCAAC;6BAAO;wBACpB;qBACD;gBACH;gBACAG,OAAO;oBACLV,MAAM;oBACNI,sBAAsB;oBACtBC,YAAY;wBAAEM,IAAI;4BAAEX,MAAM;wBAAS;wBAAGY,OAAO;4BAAEZ,MAAM;wBAAS;oBAAE;gBAClE;YACF;YACAK,YAAY;gBACVM,IAAI;oBAAEX,MAAM;gBAAS;gBACrBa,SAAS;oBACPb,MAAM;oBACNK,YAAY;wBACVS,MAAM;4BACJd,MAAM;4BACNK,YAAY;gCACVU,UAAU;oCAAEf,MAAM;oCAASgB,OAAO;wCAAEP,MAAM;oCAAgC;gCAAE;4BAC9E;wBACF;oBACF;gBACF;YACF;QACF;QAEAb,OAAOE,qBAAqBC,aAAakB,aAAa,CAAC;YACrDjB,MAAM;YACNC,OAAO;gBACL,0FAA0F;gBAC1F,uCAAuC;gBACvCiB,MAAM;oBACJf,OAAO;wBACL;4BACEH,MAAM;4BACNI,sBAAsB;4BACtBC,YAAY;gCAAEL,MAAM;oCAAEM,OAAO;gCAAY;4BAAE;4BAC3CC,UAAU;gCAAC;6BAAO;wBACpB;wBACA;4BACEP,MAAM;4BACNI,sBAAsB;4BACtBC,YAAY;gCACVL,MAAM;oCAAEM,OAAO;gCAAe;gCAC9B,sGAAsG;gCACtGE,OAAO;oCAAER,MAAM;oCAAUmB,aAAa;gCAA0C;4BAClF;4BACAZ,UAAU;gCAAC;6BAAO;wBACpB;qBACD;gBACH;gBACAG,OAAO;oBACLV,MAAM;oBACNI,sBAAsB;oBACtBC,YAAY;wBAAEM,IAAI;4BAAEX,MAAM;wBAAS;wBAAGY,OAAO;4BAAEZ,MAAM;wBAAS;oBAAE;gBAClE;YACF;YACAK,YAAY;gBACV,wEAAwE;gBACxEQ,SAAS;oBACPb,MAAM;oBACNK,YAAY;wBACVS,MAAM;4BACJd,MAAM;4BACNK,YAAY;gCACVU,UAAU;oCAAEf,MAAM;oCAASgB,OAAO;wCAAEP,MAAM;oCAAe;gCAAE;4BAC7D;wBACF;oBACF;gBACF;YACF;QACF;IACF;AACF"}
@@ -0,0 +1,5 @@
1
+ import { type StandardSchemaWithJSON } from '@modelcontextprotocol/server';
2
+ import type { ToolInputSchema } from '../types.js';
3
+ /** Normalize a tool/prompt input to a Standard Schema. Raw JSON Schema gets wrapped; Standard Schema instances pass through. */
4
+ export declare const toStandardSchema: (schema: ToolInputSchema) => StandardSchemaWithJSON;
5
+ //# sourceMappingURL=toStandardSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toStandardSchema.d.ts","sourceRoot":"","sources":["../../src/utils/toStandardSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAE1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,gIAAgI;AAChI,eAAO,MAAM,gBAAgB,GAAI,QAAQ,eAAe,KAAG,sBAG/B,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { fromJsonSchema } from '@modelcontextprotocol/server';
2
+ /** Normalize a tool/prompt input to a Standard Schema. Raw JSON Schema gets wrapped; Standard Schema instances pass through. */ export const toStandardSchema = (schema)=>typeof schema === 'object' && schema !== null && '~standard' in schema ? schema : fromJsonSchema(schema);
3
+
4
+ //# sourceMappingURL=toStandardSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/toStandardSchema.ts"],"sourcesContent":["import { fromJsonSchema, type StandardSchemaWithJSON } from '@modelcontextprotocol/server'\n\nimport type { ToolInputSchema } from '../types.js'\n\n/** Normalize a tool/prompt input to a Standard Schema. Raw JSON Schema gets wrapped; Standard Schema instances pass through. */\nexport const toStandardSchema = (schema: ToolInputSchema): StandardSchemaWithJSON =>\n typeof schema === 'object' && schema !== null && '~standard' in schema\n ? (schema as StandardSchemaWithJSON)\n : fromJsonSchema(schema)\n"],"names":["fromJsonSchema","toStandardSchema","schema"],"mappings":"AAAA,SAASA,cAAc,QAAqC,+BAA8B;AAI1F,8HAA8H,GAC9H,OAAO,MAAMC,mBAAmB,CAACC,SAC/B,OAAOA,WAAW,YAAYA,WAAW,QAAQ,eAAeA,SAC3DA,SACDF,eAAeE,QAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/plugin-mcp",
3
- "version": "3.86.0-internal.ac46214",
3
+ "version": "4.0.0-internal.183b315",
4
4
  "description": "MCP (Model Context Protocol) capabilities with Payload",
5
5
  "keywords": [
6
6
  "plugin",
@@ -21,34 +21,59 @@
21
21
  "url": "https://payloadcms.com"
22
22
  }
23
23
  ],
24
- "sideEffects": false,
24
+ "sideEffects": [
25
+ "*.css"
26
+ ],
25
27
  "type": "module",
26
28
  "exports": {
27
29
  ".": {
28
30
  "import": "./dist/index.js",
29
31
  "types": "./dist/index.d.ts",
30
32
  "default": "./dist/index.js"
33
+ },
34
+ "./client": {
35
+ "import": "./dist/exports/client.js",
36
+ "types": "./dist/exports/client.d.ts",
37
+ "default": "./dist/exports/client.js"
38
+ },
39
+ "./stdio": {
40
+ "import": "./dist/stdio.js",
41
+ "types": "./dist/stdio.d.ts",
42
+ "default": "./dist/stdio.js"
31
43
  }
32
44
  },
33
45
  "main": "./dist/index.js",
34
46
  "types": "./dist/index.d.ts",
47
+ "bin": {
48
+ "payload-mcp": "./bin.js"
49
+ },
35
50
  "files": [
36
51
  "src",
37
- "dist"
52
+ "dist",
53
+ "bin.js"
38
54
  ],
39
55
  "dependencies": {
40
- "@modelcontextprotocol/sdk": "1.27.1",
41
- "@types/json-schema": "7.0.15",
42
- "json-schema-to-zod": "2.6.1",
43
- "mcp-handler": "^1.0.7",
44
- "zod": "^3.25.50"
56
+ "@cfworker/json-schema": "^4.1.1",
57
+ "@modelcontextprotocol/server": "2.0.0-alpha.2",
58
+ "tsx": "4.22.4",
59
+ "zod": "^4.0.0"
45
60
  },
46
61
  "devDependencies": {
62
+ "@types/react": "19.2.14",
63
+ "react": "^19.0.1 || ^19.1.2 || ^19.2.1",
47
64
  "@payloadcms/eslint-config": "3.28.0",
48
- "payload": "3.86.0-internal.ac46214"
65
+ "@payloadcms/ui": "4.0.0-internal.183b315",
66
+ "payload": "4.0.0-internal.183b315"
49
67
  },
50
68
  "peerDependencies": {
51
- "payload": "3.86.0-internal.ac46214"
69
+ "react": "^19.0.1 || ^19.1.2 || ^19.2.1",
70
+ "@payloadcms/ui": "4.0.0-internal.183b315",
71
+ "payload": "4.0.0-internal.183b315"
72
+ },
73
+ "//deps_notes": {
74
+ "zod": "zod is a hard dependency of @modelcontextprotocol/server, thus we can safely use it without it impacting bundle size. Make extra sure the zod version here matches exactly what's defined in the dependencies of @modelcontextprotocol/server to avoid duplicate versions being installed.",
75
+ "@cfworker/json-schema": "Should be able to remove in next @modelcontextprotocol/server alpha release. Marked as an optional peer of @modelcontextprotocol/server, but its bundle does an eager top-level `import { Validator } from '@cfworker/json-schema'`, so it must be installed even when only zod-registered tools are used. Drop once upstream lazy-loads the validator. See: https://github.com/modelcontextprotocol/typescript-sdk",
76
+ "tsx": "Required by the `bin.js` stdio mcp. Keep the version pinned to whatever `payload` ships to avoid duplicate installs."
52
77
  },
53
78
  "homepage:": "https://payloadcms.com",
54
79
  "scripts": {
@@ -0,0 +1,3 @@
1
+ declare module '*.css'
2
+
3
+ declare module '*.scss'
@@ -0,0 +1,64 @@
1
+ import type { JSONField } from 'payload'
2
+
3
+ import type { ClientMCPPluginConfig, MCPItem, SanitizedMCPPluginConfig } from '../types.js'
4
+
5
+ /**
6
+ * Returns the API key collection's `access` field — a JSON field whose value
7
+ * is the `MCPAPIKeysDocAccessTree` the endpoint consults. The actual UI is
8
+ * a custom client component (`AccessField`) which renders a permissions
9
+ * matrix; the field's stored shape is just the runtime access tree.
10
+ */
11
+ export const getAccessField = ({
12
+ pluginConfig,
13
+ }: {
14
+ pluginConfig: SanitizedMCPPluginConfig
15
+ }): JSONField => {
16
+ const clientPluginConfig = sanitizeClientPluginConfig(pluginConfig)
17
+
18
+ return {
19
+ name: 'access',
20
+ type: 'json',
21
+ admin: {
22
+ components: {
23
+ Field: {
24
+ clientProps: { pluginConfig: clientPluginConfig },
25
+ path: '@payloadcms/plugin-mcp/client#AccessField',
26
+ },
27
+ },
28
+ // TODO: needs i18n once design is finalized
29
+ description: 'Access for this API key — uncheck to revoke individual tools.',
30
+ position: 'sidebar',
31
+ },
32
+ defaultValue: {},
33
+ // TODO: needs i18n once design is finalized
34
+ label: 'Access',
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Strips the non-serializable parts of `SanitizedMCPPluginConfig` (handlers,
40
+ * input/argsSchema functions, etc.) so the result is safe to thread to a
41
+ * client component via `clientProps`.
42
+ */
43
+ const sanitizeClientPluginConfig = (
44
+ pluginConfig: SanitizedMCPPluginConfig,
45
+ ): ClientMCPPluginConfig => ({
46
+ items: pluginConfig.items.map((item) => ({
47
+ ...(item.type === 'collectionTool' ? { collectionSlug: item.collectionSlug } : {}),
48
+ ...(item.type === 'globalTool' ? { globalSlug: item.globalSlug } : {}),
49
+ type: item.type,
50
+ description: itemDescription(item),
51
+ key: item.key,
52
+ label: item.label,
53
+ })),
54
+ })
55
+
56
+ const itemDescription = (item: MCPItem): string => {
57
+ if (item.type === 'prompt') {
58
+ return item.prompt.description
59
+ }
60
+ if (item.type === 'resource') {
61
+ return item.resource.description
62
+ }
63
+ return item.tool.description
64
+ }
@@ -0,0 +1,64 @@
1
+ import type { CollectionConfig } from 'payload'
2
+
3
+ import type { SanitizedMCPPluginConfig } from '../types.js'
4
+
5
+ import { getAccessField } from './getAccessField.js'
6
+
7
+ export const getAPIKeysCollection = ({
8
+ pluginConfig,
9
+ }: {
10
+ pluginConfig: SanitizedMCPPluginConfig
11
+ }): CollectionConfig => {
12
+ const collection: CollectionConfig = {
13
+ slug: 'payload-mcp-api-keys',
14
+ admin: {
15
+ description:
16
+ 'API keys control which collections, resources, tools, and prompts MCP clients can access',
17
+ group: 'MCP',
18
+ useAsTitle: 'label',
19
+ },
20
+ auth: {
21
+ disableLocalStrategy: true,
22
+ useAPIKey: true,
23
+ },
24
+ fields: [
25
+ {
26
+ name: 'user',
27
+ type: 'relationship',
28
+ admin: { description: 'The user that the API key is associated with.' },
29
+ relationTo: pluginConfig.userCollection,
30
+ required: true,
31
+ },
32
+ {
33
+ name: 'label',
34
+ type: 'text',
35
+ admin: { description: 'A useful label for the API key.' },
36
+ },
37
+ {
38
+ name: 'description',
39
+ type: 'text',
40
+ admin: { description: 'The purpose of the API key.' },
41
+ },
42
+ {
43
+ name: 'overrideAccess',
44
+ type: 'checkbox',
45
+ admin: {
46
+ description:
47
+ 'When checked, this key bypasses Payload access control on every operation it performs. Leave unchecked unless you have a specific reason.',
48
+ },
49
+ defaultValue: false,
50
+ label: 'Override access control',
51
+ },
52
+ getAccessField({ pluginConfig }),
53
+ ],
54
+ labels: {
55
+ plural: 'API Keys',
56
+ singular: 'API Key',
57
+ },
58
+ versions: false,
59
+ }
60
+
61
+ return pluginConfig.overrideApiKeyCollection
62
+ ? pluginConfig.overrideApiKeyCollection(collection)
63
+ : collection
64
+ }