@payloadcms/plugin-mcp 4.0.0-internal.38b7f1d → 4.0.0-internal.4c792ad

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 (418) 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/defaultAccess.d.ts +3 -0
  5. package/dist/defaultAccess.d.ts.map +1 -0
  6. package/dist/defaultAccess.js +3 -0
  7. package/dist/defaultAccess.js.map +1 -0
  8. package/dist/defineTool.d.ts +26 -0
  9. package/dist/defineTool.d.ts.map +1 -0
  10. package/dist/defineTool.js +37 -0
  11. package/dist/defineTool.js.map +1 -0
  12. package/dist/endpoint/access.d.ts +22 -0
  13. package/dist/endpoint/access.d.ts.map +1 -0
  14. package/dist/endpoint/access.js +100 -0
  15. package/dist/endpoint/access.js.map +1 -0
  16. package/dist/endpoint/index.d.ts +3 -0
  17. package/dist/endpoint/index.d.ts.map +1 -0
  18. package/dist/endpoint/index.js +47 -0
  19. package/dist/endpoint/index.js.map +1 -0
  20. package/dist/exports/client.d.ts +2 -0
  21. package/dist/exports/client.d.ts.map +1 -0
  22. package/dist/exports/client.js +4 -0
  23. package/dist/exports/client.js.map +1 -0
  24. package/dist/exports/internal.d.ts +2 -0
  25. package/dist/exports/internal.d.ts.map +1 -0
  26. package/dist/exports/internal.js +3 -0
  27. package/dist/exports/internal.js.map +1 -0
  28. package/dist/index.d.ts +4 -7
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +39 -67
  31. package/dist/index.js.map +1 -1
  32. package/dist/mcp/buildMcpServer.d.ts +19 -0
  33. package/dist/mcp/buildMcpServer.d.ts.map +1 -0
  34. package/dist/mcp/buildMcpServer.js +201 -0
  35. package/dist/mcp/buildMcpServer.js.map +1 -0
  36. package/dist/mcp/builtin/collections/authTools.d.ts +7 -0
  37. package/dist/mcp/builtin/collections/authTools.d.ts.map +1 -0
  38. package/dist/mcp/builtin/collections/authTools.js +288 -0
  39. package/dist/mcp/builtin/collections/authTools.js.map +1 -0
  40. package/dist/mcp/builtin/collections/countTool.d.ts +2 -0
  41. package/dist/mcp/builtin/collections/countTool.d.ts.map +1 -0
  42. package/dist/mcp/builtin/collections/countTool.js +69 -0
  43. package/dist/mcp/builtin/collections/countTool.js.map +1 -0
  44. package/dist/mcp/builtin/collections/countVersionsTool.d.ts +2 -0
  45. package/dist/mcp/builtin/collections/countVersionsTool.d.ts.map +1 -0
  46. package/dist/mcp/builtin/collections/countVersionsTool.js +65 -0
  47. package/dist/mcp/builtin/collections/countVersionsTool.js.map +1 -0
  48. package/dist/mcp/builtin/collections/createTool.d.ts +2 -0
  49. package/dist/mcp/builtin/collections/createTool.d.ts.map +1 -0
  50. package/dist/mcp/builtin/collections/createTool.js +87 -0
  51. package/dist/mcp/builtin/collections/createTool.js.map +1 -0
  52. package/dist/mcp/builtin/collections/deleteTool.d.ts +2 -0
  53. package/dist/mcp/builtin/collections/deleteTool.d.ts.map +1 -0
  54. package/dist/mcp/builtin/collections/deleteTool.js +111 -0
  55. package/dist/mcp/builtin/collections/deleteTool.js.map +1 -0
  56. package/dist/mcp/builtin/collections/duplicateTool.d.ts +2 -0
  57. package/dist/mcp/builtin/collections/duplicateTool.d.ts.map +1 -0
  58. package/dist/mcp/builtin/collections/duplicateTool.js +97 -0
  59. package/dist/mcp/builtin/collections/duplicateTool.js.map +1 -0
  60. package/dist/mcp/builtin/collections/findDistinctTool.d.ts +2 -0
  61. package/dist/mcp/builtin/collections/findDistinctTool.d.ts.map +1 -0
  62. package/dist/mcp/builtin/collections/findDistinctTool.js +93 -0
  63. package/dist/mcp/builtin/collections/findDistinctTool.js.map +1 -0
  64. package/dist/mcp/builtin/collections/findTool.d.ts +2 -0
  65. package/dist/mcp/builtin/collections/findTool.d.ts.map +1 -0
  66. package/dist/mcp/builtin/collections/findTool.js +165 -0
  67. package/dist/mcp/builtin/collections/findTool.js.map +1 -0
  68. package/dist/mcp/builtin/collections/findVersionByIDTool.d.ts +2 -0
  69. package/dist/mcp/builtin/collections/findVersionByIDTool.d.ts.map +1 -0
  70. package/dist/mcp/builtin/collections/findVersionByIDTool.js +84 -0
  71. package/dist/mcp/builtin/collections/findVersionByIDTool.js.map +1 -0
  72. package/dist/mcp/builtin/collections/findVersionsTool.d.ts +2 -0
  73. package/dist/mcp/builtin/collections/findVersionsTool.d.ts.map +1 -0
  74. package/dist/mcp/builtin/collections/findVersionsTool.js +99 -0
  75. package/dist/mcp/builtin/collections/findVersionsTool.js.map +1 -0
  76. package/dist/mcp/builtin/collections/formatCollectionError.d.ts +9 -0
  77. package/dist/mcp/builtin/collections/formatCollectionError.d.ts.map +1 -0
  78. package/dist/mcp/builtin/collections/formatCollectionError.js +60 -0
  79. package/dist/mcp/builtin/collections/formatCollectionError.js.map +1 -0
  80. package/dist/mcp/builtin/collections/getCollectionSchemaTool.d.ts +2 -0
  81. package/dist/mcp/builtin/collections/getCollectionSchemaTool.d.ts.map +1 -0
  82. package/dist/mcp/builtin/collections/getCollectionSchemaTool.js +47 -0
  83. package/dist/mcp/builtin/collections/getCollectionSchemaTool.js.map +1 -0
  84. package/dist/mcp/builtin/collections/restoreVersionTool.d.ts +2 -0
  85. package/dist/mcp/builtin/collections/restoreVersionTool.d.ts.map +1 -0
  86. package/dist/mcp/builtin/collections/restoreVersionTool.js +82 -0
  87. package/dist/mcp/builtin/collections/restoreVersionTool.js.map +1 -0
  88. package/dist/mcp/builtin/collections/updateTool.d.ts +2 -0
  89. package/dist/mcp/builtin/collections/updateTool.d.ts.map +1 -0
  90. package/dist/mcp/builtin/collections/updateTool.js +192 -0
  91. package/dist/mcp/builtin/collections/updateTool.js.map +1 -0
  92. package/dist/mcp/builtin/getConfigInfoTool.d.ts +2 -0
  93. package/dist/mcp/builtin/getConfigInfoTool.d.ts.map +1 -0
  94. package/dist/mcp/builtin/getConfigInfoTool.js +71 -0
  95. package/dist/mcp/builtin/getConfigInfoTool.js.map +1 -0
  96. package/dist/mcp/builtin/globals/countVersionsTool.d.ts +2 -0
  97. package/dist/mcp/builtin/globals/countVersionsTool.d.ts.map +1 -0
  98. package/dist/mcp/builtin/globals/countVersionsTool.js +65 -0
  99. package/dist/mcp/builtin/globals/countVersionsTool.js.map +1 -0
  100. package/dist/mcp/builtin/globals/findTool.d.ts +2 -0
  101. package/dist/mcp/builtin/globals/findTool.d.ts.map +1 -0
  102. package/dist/mcp/builtin/globals/findTool.js +73 -0
  103. package/dist/mcp/builtin/globals/findTool.js.map +1 -0
  104. package/dist/mcp/builtin/globals/findVersionByIDTool.d.ts +2 -0
  105. package/dist/mcp/builtin/globals/findVersionByIDTool.d.ts.map +1 -0
  106. package/dist/mcp/builtin/globals/findVersionByIDTool.js +80 -0
  107. package/dist/mcp/builtin/globals/findVersionByIDTool.js.map +1 -0
  108. package/dist/mcp/builtin/globals/findVersionsTool.d.ts +2 -0
  109. package/dist/mcp/builtin/globals/findVersionsTool.d.ts.map +1 -0
  110. package/dist/mcp/builtin/globals/findVersionsTool.js +95 -0
  111. package/dist/mcp/builtin/globals/findVersionsTool.js.map +1 -0
  112. package/dist/mcp/builtin/globals/getGlobalSchemaTool.d.ts +2 -0
  113. package/dist/mcp/builtin/globals/getGlobalSchemaTool.d.ts.map +1 -0
  114. package/dist/mcp/builtin/globals/getGlobalSchemaTool.js +47 -0
  115. package/dist/mcp/builtin/globals/getGlobalSchemaTool.js.map +1 -0
  116. package/dist/mcp/builtin/globals/restoreVersionTool.d.ts +2 -0
  117. package/dist/mcp/builtin/globals/restoreVersionTool.d.ts.map +1 -0
  118. package/dist/mcp/builtin/globals/restoreVersionTool.js +78 -0
  119. package/dist/mcp/builtin/globals/restoreVersionTool.js.map +1 -0
  120. package/dist/mcp/builtin/globals/updateTool.d.ts +2 -0
  121. package/dist/mcp/builtin/globals/updateTool.d.ts.map +1 -0
  122. package/dist/mcp/builtin/globals/updateTool.js +87 -0
  123. package/dist/mcp/builtin/globals/updateTool.js.map +1 -0
  124. package/dist/mcp/builtin/validateEntityData.d.ts +14 -0
  125. package/dist/mcp/builtin/validateEntityData.d.ts.map +1 -0
  126. package/dist/mcp/builtin/validateEntityData.js +82 -0
  127. package/dist/mcp/builtin/validateEntityData.js.map +1 -0
  128. package/dist/mcp/builtinTools.d.ts +162 -0
  129. package/dist/mcp/builtinTools.d.ts.map +1 -0
  130. package/dist/mcp/builtinTools.js +163 -0
  131. package/dist/mcp/builtinTools.js.map +1 -0
  132. package/dist/mcp/sanitizeMCPConfig.d.ts +16 -0
  133. package/dist/mcp/sanitizeMCPConfig.d.ts.map +1 -0
  134. package/dist/mcp/sanitizeMCPConfig.js +229 -0
  135. package/dist/mcp/sanitizeMCPConfig.js.map +1 -0
  136. package/dist/stdio.d.ts +9 -0
  137. package/dist/stdio.d.ts.map +1 -0
  138. package/dist/stdio.js +108 -0
  139. package/dist/stdio.js.map +1 -0
  140. package/dist/types.d.ts +222 -461
  141. package/dist/types.d.ts.map +1 -1
  142. package/dist/types.js +6 -1
  143. package/dist/types.js.map +1 -1
  144. package/dist/utils/camelCase.d.ts.map +1 -1
  145. package/dist/utils/getLogger.d.ts +10 -0
  146. package/dist/utils/getLogger.d.ts.map +1 -0
  147. package/dist/utils/getLogger.js +22 -0
  148. package/dist/utils/getLogger.js.map +1 -0
  149. package/dist/utils/getPluginConfig.d.ts +12 -0
  150. package/dist/utils/getPluginConfig.d.ts.map +1 -0
  151. package/dist/utils/getPluginConfig.js +15 -0
  152. package/dist/utils/getPluginConfig.js.map +1 -0
  153. package/dist/utils/localAPIDefaults.d.ts +20 -0
  154. package/dist/utils/localAPIDefaults.d.ts.map +1 -0
  155. package/dist/utils/localAPIDefaults.js +19 -0
  156. package/dist/utils/localAPIDefaults.js.map +1 -0
  157. package/dist/utils/resolveProjectRoot.d.ts +7 -0
  158. package/dist/utils/resolveProjectRoot.d.ts.map +1 -0
  159. package/dist/utils/resolveProjectRoot.js +15 -0
  160. package/dist/utils/resolveProjectRoot.js.map +1 -0
  161. package/dist/utils/schemaConversion/getEntityInputSchema.d.ts +11 -0
  162. package/dist/utils/schemaConversion/getEntityInputSchema.d.ts.map +1 -0
  163. package/dist/utils/schemaConversion/getEntityInputSchema.js +34 -0
  164. package/dist/utils/schemaConversion/getEntityInputSchema.js.map +1 -0
  165. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts +2 -2
  166. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts.map +1 -1
  167. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js.map +1 -1
  168. package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts +15 -0
  169. package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts.map +1 -0
  170. package/dist/utils/schemaConversion/sanitizeEntitySchema.js +464 -0
  171. package/dist/utils/schemaConversion/sanitizeEntitySchema.js.map +1 -0
  172. package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js +158 -0
  173. package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js.map +1 -0
  174. package/dist/utils/toStandardSchema.d.ts +5 -0
  175. package/dist/utils/toStandardSchema.d.ts.map +1 -0
  176. package/dist/utils/toStandardSchema.js +4 -0
  177. package/dist/utils/toStandardSchema.js.map +1 -0
  178. package/dist/utils/whereSchema.d.ts +9 -0
  179. package/dist/utils/whereSchema.d.ts.map +1 -0
  180. package/dist/utils/whereSchema.js +13 -0
  181. package/dist/utils/whereSchema.js.map +1 -0
  182. package/package.json +32 -10
  183. package/src/@types/assets.d.ts +3 -0
  184. package/src/defaultAccess.ts +3 -0
  185. package/src/defineTool.ts +44 -0
  186. package/src/endpoint/access.ts +119 -0
  187. package/src/endpoint/index.ts +48 -0
  188. package/src/exports/client.ts +3 -0
  189. package/src/exports/internal.ts +1 -0
  190. package/src/index.ts +29 -87
  191. package/src/mcp/buildMcpServer.ts +264 -0
  192. package/src/mcp/builtin/collections/authTools.ts +269 -0
  193. package/src/mcp/builtin/collections/countTool.ts +74 -0
  194. package/src/mcp/builtin/collections/countVersionsTool.ts +70 -0
  195. package/src/mcp/builtin/collections/createTool.ts +112 -0
  196. package/src/mcp/builtin/collections/deleteTool.ts +126 -0
  197. package/src/mcp/builtin/collections/duplicateTool.ts +135 -0
  198. package/src/mcp/builtin/collections/findDistinctTool.ts +120 -0
  199. package/src/mcp/builtin/collections/findTool.ts +217 -0
  200. package/src/mcp/builtin/collections/findVersionByIDTool.ts +110 -0
  201. package/src/mcp/builtin/collections/findVersionsTool.ts +155 -0
  202. package/src/mcp/builtin/collections/formatCollectionError.ts +84 -0
  203. package/src/mcp/builtin/collections/getCollectionSchemaTool.ts +46 -0
  204. package/src/mcp/builtin/collections/restoreVersionTool.ts +108 -0
  205. package/src/mcp/builtin/collections/updateTool.ts +211 -0
  206. package/src/mcp/builtin/getConfigInfoTool.ts +69 -0
  207. package/src/mcp/builtin/globals/countVersionsTool.ts +69 -0
  208. package/src/mcp/builtin/globals/findTool.ts +105 -0
  209. package/src/mcp/builtin/globals/findVersionByIDTool.ts +104 -0
  210. package/src/mcp/builtin/globals/findVersionsTool.ts +148 -0
  211. package/src/mcp/builtin/globals/getGlobalSchemaTool.ts +41 -0
  212. package/src/mcp/builtin/globals/restoreVersionTool.ts +100 -0
  213. package/src/mcp/builtin/globals/updateTool.ts +115 -0
  214. package/src/mcp/builtin/validateEntityData.ts +132 -0
  215. package/src/mcp/builtinTools.ts +154 -0
  216. package/src/mcp/sanitizeMCPConfig.ts +277 -0
  217. package/src/stdio.ts +113 -0
  218. package/src/types.ts +263 -493
  219. package/src/utils/getLogger.ts +22 -0
  220. package/src/utils/getPluginConfig.ts +24 -0
  221. package/src/utils/localAPIDefaults.ts +22 -0
  222. package/src/utils/resolveProjectRoot.ts +17 -0
  223. package/src/utils/schemaConversion/getEntityInputSchema.ts +78 -0
  224. package/src/utils/schemaConversion/removeVirtualFieldsFromSchema.ts +3 -3
  225. package/src/utils/schemaConversion/sanitizeEntitySchema.spec.ts +103 -0
  226. package/src/utils/schemaConversion/sanitizeEntitySchema.ts +529 -0
  227. package/src/utils/toStandardSchema.ts +9 -0
  228. package/src/utils/whereSchema.ts +24 -0
  229. package/dist/collections/createApiKeysCollection.d.ts +0 -7
  230. package/dist/collections/createApiKeysCollection.d.ts.map +0 -1
  231. package/dist/collections/createApiKeysCollection.js +0 -317
  232. package/dist/collections/createApiKeysCollection.js.map +0 -1
  233. package/dist/defaults.d.ts +0 -4
  234. package/dist/defaults.d.ts.map +0 -1
  235. package/dist/defaults.js +0 -5
  236. package/dist/defaults.js.map +0 -1
  237. package/dist/endpoints/mcp.d.ts +0 -4
  238. package/dist/endpoints/mcp.d.ts.map +0 -1
  239. package/dist/endpoints/mcp.js +0 -71
  240. package/dist/endpoints/mcp.js.map +0 -1
  241. package/dist/mcp/createRequest.d.ts +0 -3
  242. package/dist/mcp/createRequest.d.ts.map +0 -1
  243. package/dist/mcp/createRequest.js +0 -14
  244. package/dist/mcp/createRequest.js.map +0 -1
  245. package/dist/mcp/getMcpHandler.d.ts +0 -4
  246. package/dist/mcp/getMcpHandler.d.ts.map +0 -1
  247. package/dist/mcp/getMcpHandler.js +0 -231
  248. package/dist/mcp/getMcpHandler.js.map +0 -1
  249. package/dist/mcp/helpers/config.d.ts +0 -22
  250. package/dist/mcp/helpers/config.d.ts.map +0 -1
  251. package/dist/mcp/helpers/config.js +0 -153
  252. package/dist/mcp/helpers/config.js.map +0 -1
  253. package/dist/mcp/helpers/fields.d.ts +0 -19
  254. package/dist/mcp/helpers/fields.d.ts.map +0 -1
  255. package/dist/mcp/helpers/fields.js +0 -102
  256. package/dist/mcp/helpers/fields.js.map +0 -1
  257. package/dist/mcp/helpers/fileValidation.d.ts +0 -67
  258. package/dist/mcp/helpers/fileValidation.d.ts.map +0 -1
  259. package/dist/mcp/helpers/fileValidation.js +0 -267
  260. package/dist/mcp/helpers/fileValidation.js.map +0 -1
  261. package/dist/mcp/registerTool.d.ts +0 -6
  262. package/dist/mcp/registerTool.d.ts.map +0 -1
  263. package/dist/mcp/registerTool.js +0 -18
  264. package/dist/mcp/registerTool.js.map +0 -1
  265. package/dist/mcp/tools/auth/auth.d.ts +0 -4
  266. package/dist/mcp/tools/auth/auth.d.ts.map +0 -1
  267. package/dist/mcp/tools/auth/auth.js +0 -57
  268. package/dist/mcp/tools/auth/auth.js.map +0 -1
  269. package/dist/mcp/tools/auth/forgotPassword.d.ts +0 -4
  270. package/dist/mcp/tools/auth/forgotPassword.d.ts.map +0 -1
  271. package/dist/mcp/tools/auth/forgotPassword.js +0 -48
  272. package/dist/mcp/tools/auth/forgotPassword.js.map +0 -1
  273. package/dist/mcp/tools/auth/login.d.ts +0 -4
  274. package/dist/mcp/tools/auth/login.d.ts.map +0 -1
  275. package/dist/mcp/tools/auth/login.js +0 -51
  276. package/dist/mcp/tools/auth/login.js.map +0 -1
  277. package/dist/mcp/tools/auth/resetPassword.d.ts +0 -4
  278. package/dist/mcp/tools/auth/resetPassword.d.ts.map +0 -1
  279. package/dist/mcp/tools/auth/resetPassword.js +0 -49
  280. package/dist/mcp/tools/auth/resetPassword.js.map +0 -1
  281. package/dist/mcp/tools/auth/unlock.d.ts +0 -4
  282. package/dist/mcp/tools/auth/unlock.d.ts.map +0 -1
  283. package/dist/mcp/tools/auth/unlock.js +0 -48
  284. package/dist/mcp/tools/auth/unlock.js.map +0 -1
  285. package/dist/mcp/tools/auth/verify.d.ts +0 -4
  286. package/dist/mcp/tools/auth/verify.d.ts.map +0 -1
  287. package/dist/mcp/tools/auth/verify.js +0 -45
  288. package/dist/mcp/tools/auth/verify.js.map +0 -1
  289. package/dist/mcp/tools/collection/create.d.ts +0 -10
  290. package/dist/mcp/tools/collection/create.d.ts.map +0 -1
  291. package/dist/mcp/tools/collection/create.js +0 -139
  292. package/dist/mcp/tools/collection/create.js.map +0 -1
  293. package/dist/mcp/tools/collection/delete.d.ts +0 -10
  294. package/dist/mcp/tools/collection/delete.d.ts.map +0 -1
  295. package/dist/mcp/tools/collection/delete.js +0 -154
  296. package/dist/mcp/tools/collection/delete.js.map +0 -1
  297. package/dist/mcp/tools/collection/find.d.ts +0 -10
  298. package/dist/mcp/tools/collection/find.d.ts.map +0 -1
  299. package/dist/mcp/tools/collection/find.js +0 -165
  300. package/dist/mcp/tools/collection/find.js.map +0 -1
  301. package/dist/mcp/tools/collection/update.d.ts +0 -10
  302. package/dist/mcp/tools/collection/update.d.ts.map +0 -1
  303. package/dist/mcp/tools/collection/update.js +0 -209
  304. package/dist/mcp/tools/collection/update.js.map +0 -1
  305. package/dist/mcp/tools/config/find.d.ts +0 -10
  306. package/dist/mcp/tools/config/find.d.ts.map +0 -1
  307. package/dist/mcp/tools/config/find.js +0 -97
  308. package/dist/mcp/tools/config/find.js.map +0 -1
  309. package/dist/mcp/tools/config/update.d.ts +0 -10
  310. package/dist/mcp/tools/config/update.d.ts.map +0 -1
  311. package/dist/mcp/tools/config/update.js +0 -215
  312. package/dist/mcp/tools/config/update.js.map +0 -1
  313. package/dist/mcp/tools/global/find.d.ts +0 -5
  314. package/dist/mcp/tools/global/find.d.ts.map +0 -1
  315. package/dist/mcp/tools/global/find.js +0 -82
  316. package/dist/mcp/tools/global/find.js.map +0 -1
  317. package/dist/mcp/tools/global/update.d.ts +0 -6
  318. package/dist/mcp/tools/global/update.d.ts.map +0 -1
  319. package/dist/mcp/tools/global/update.js +0 -124
  320. package/dist/mcp/tools/global/update.js.map +0 -1
  321. package/dist/mcp/tools/job/create.d.ts +0 -10
  322. package/dist/mcp/tools/job/create.d.ts.map +0 -1
  323. package/dist/mcp/tools/job/create.js +0 -293
  324. package/dist/mcp/tools/job/create.js.map +0 -1
  325. package/dist/mcp/tools/job/run.d.ts +0 -10
  326. package/dist/mcp/tools/job/run.d.ts.map +0 -1
  327. package/dist/mcp/tools/job/run.js +0 -129
  328. package/dist/mcp/tools/job/run.js.map +0 -1
  329. package/dist/mcp/tools/job/update.d.ts +0 -11
  330. package/dist/mcp/tools/job/update.d.ts.map +0 -1
  331. package/dist/mcp/tools/job/update.js +0 -186
  332. package/dist/mcp/tools/job/update.js.map +0 -1
  333. package/dist/mcp/tools/resource/create.d.ts +0 -6
  334. package/dist/mcp/tools/resource/create.d.ts.map +0 -1
  335. package/dist/mcp/tools/resource/create.js +0 -124
  336. package/dist/mcp/tools/resource/create.js.map +0 -1
  337. package/dist/mcp/tools/resource/delete.d.ts +0 -5
  338. package/dist/mcp/tools/resource/delete.d.ts.map +0 -1
  339. package/dist/mcp/tools/resource/delete.js +0 -151
  340. package/dist/mcp/tools/resource/delete.js.map +0 -1
  341. package/dist/mcp/tools/resource/find.d.ts +0 -5
  342. package/dist/mcp/tools/resource/find.d.ts.map +0 -1
  343. package/dist/mcp/tools/resource/find.js +0 -170
  344. package/dist/mcp/tools/resource/find.js.map +0 -1
  345. package/dist/mcp/tools/resource/update.d.ts +0 -6
  346. package/dist/mcp/tools/resource/update.d.ts.map +0 -1
  347. package/dist/mcp/tools/resource/update.js +0 -256
  348. package/dist/mcp/tools/resource/update.js.map +0 -1
  349. package/dist/mcp/tools/schemas.d.ts +0 -457
  350. package/dist/mcp/tools/schemas.d.ts.map +0 -1
  351. package/dist/mcp/tools/schemas.js +0 -243
  352. package/dist/mcp/tools/schemas.js.map +0 -1
  353. package/dist/utils/adminEntitySettings.d.ts +0 -17
  354. package/dist/utils/adminEntitySettings.d.ts.map +0 -1
  355. package/dist/utils/adminEntitySettings.js +0 -41
  356. package/dist/utils/adminEntitySettings.js.map +0 -1
  357. package/dist/utils/createApiKeyFields.d.ts +0 -15
  358. package/dist/utils/createApiKeyFields.d.ts.map +0 -1
  359. package/dist/utils/createApiKeyFields.js +0 -57
  360. package/dist/utils/createApiKeyFields.js.map +0 -1
  361. package/dist/utils/getEnabledSlugs.d.ts +0 -13
  362. package/dist/utils/getEnabledSlugs.d.ts.map +0 -1
  363. package/dist/utils/getEnabledSlugs.js +0 -32
  364. package/dist/utils/getEnabledSlugs.js.map +0 -1
  365. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts +0 -3
  366. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts.map +0 -1
  367. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js +0 -43
  368. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js.map +0 -1
  369. package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts +0 -13
  370. package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts.map +0 -1
  371. package/dist/utils/schemaConversion/sanitizeJsonSchema.js +0 -56
  372. package/dist/utils/schemaConversion/sanitizeJsonSchema.js.map +0 -1
  373. package/dist/utils/schemaConversion/simplifyRelationshipFields.d.ts +0 -20
  374. package/dist/utils/schemaConversion/simplifyRelationshipFields.d.ts.map +0 -1
  375. package/dist/utils/schemaConversion/simplifyRelationshipFields.js +0 -53
  376. package/dist/utils/schemaConversion/simplifyRelationshipFields.js.map +0 -1
  377. package/dist/utils/schemaConversion/transformPointFields.d.ts +0 -3
  378. package/dist/utils/schemaConversion/transformPointFields.d.ts.map +0 -1
  379. package/dist/utils/schemaConversion/transformPointFields.js +0 -51
  380. package/dist/utils/schemaConversion/transformPointFields.js.map +0 -1
  381. package/src/collections/createApiKeysCollection.ts +0 -373
  382. package/src/defaults.ts +0 -3
  383. package/src/endpoints/mcp.ts +0 -91
  384. package/src/mcp/createRequest.ts +0 -13
  385. package/src/mcp/getMcpHandler.ts +0 -545
  386. package/src/mcp/helpers/config.ts +0 -213
  387. package/src/mcp/helpers/fields.ts +0 -154
  388. package/src/mcp/helpers/fileValidation.ts +0 -362
  389. package/src/mcp/registerTool.ts +0 -22
  390. package/src/mcp/tools/auth/auth.ts +0 -71
  391. package/src/mcp/tools/auth/forgotPassword.ts +0 -70
  392. package/src/mcp/tools/auth/login.ts +0 -72
  393. package/src/mcp/tools/auth/resetPassword.ts +0 -61
  394. package/src/mcp/tools/auth/unlock.ts +0 -64
  395. package/src/mcp/tools/auth/verify.ts +0 -57
  396. package/src/mcp/tools/collection/create.ts +0 -210
  397. package/src/mcp/tools/collection/delete.ts +0 -211
  398. package/src/mcp/tools/collection/find.ts +0 -224
  399. package/src/mcp/tools/collection/update.ts +0 -290
  400. package/src/mcp/tools/config/find.ts +0 -128
  401. package/src/mcp/tools/config/update.ts +0 -280
  402. package/src/mcp/tools/global/find.ts +0 -128
  403. package/src/mcp/tools/global/update.ts +0 -207
  404. package/src/mcp/tools/job/create.ts +0 -416
  405. package/src/mcp/tools/job/run.ts +0 -167
  406. package/src/mcp/tools/job/update.ts +0 -274
  407. package/src/mcp/tools/resource/create.ts +0 -211
  408. package/src/mcp/tools/resource/delete.ts +0 -218
  409. package/src/mcp/tools/resource/find.ts +0 -246
  410. package/src/mcp/tools/resource/update.ts +0 -383
  411. package/src/mcp/tools/schemas.ts +0 -520
  412. package/src/utils/adminEntitySettings.ts +0 -40
  413. package/src/utils/createApiKeyFields.ts +0 -72
  414. package/src/utils/getEnabledSlugs.ts +0 -42
  415. package/src/utils/schemaConversion/convertCollectionSchemaToZod.ts +0 -52
  416. package/src/utils/schemaConversion/sanitizeJsonSchema.ts +0 -62
  417. package/src/utils/schemaConversion/simplifyRelationshipFields.ts +0 -65
  418. 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"}
@@ -0,0 +1,9 @@
1
+ import type { Where } from 'payload';
2
+ import { z } from 'zod';
3
+ /**
4
+ * - Validates the `where` input of collection tools against Payload's `Where` shape
5
+ * - Field keys map to operator objects restricted to `validOperators`
6
+ * - `and` / `or` nest recursively
7
+ */
8
+ export declare const whereSchema: z.ZodType<Where>;
9
+ //# sourceMappingURL=whereSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whereSchema.d.ts","sourceRoot":"","sources":["../../src/utils/whereSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAGpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CASqD,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { validOperators } from 'payload/shared';
2
+ import { z } from 'zod';
3
+ const whereFieldSchema = z.partialRecord(z.enum(validOperators), z.unknown()).describe('Field query operators');
4
+ /**
5
+ * - Validates the `where` input of collection tools against Payload's `Where` shape
6
+ * - Field keys map to operator objects restricted to `validOperators`
7
+ * - `and` / `or` nest recursively
8
+ */ export const whereSchema = z.lazy(()=>z.object({
9
+ and: z.array(whereSchema).optional(),
10
+ or: z.array(whereSchema).optional()
11
+ }).catchall(whereFieldSchema)).describe('Where clause using field names with Payload query operators, plus and/or groups');
12
+
13
+ //# sourceMappingURL=whereSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/whereSchema.ts"],"sourcesContent":["import type { Where } from 'payload'\n\nimport { validOperators } from 'payload/shared'\nimport { z } from 'zod'\n\nconst whereFieldSchema = z\n .partialRecord(z.enum(validOperators), z.unknown())\n .describe('Field query operators')\n\n/**\n * - Validates the `where` input of collection tools against Payload's `Where` shape\n * - Field keys map to operator objects restricted to `validOperators`\n * - `and` / `or` nest recursively\n */\nexport const whereSchema: z.ZodType<Where> = z\n .lazy(() =>\n z\n .object({\n and: z.array(whereSchema).optional(),\n or: z.array(whereSchema).optional(),\n })\n .catchall(whereFieldSchema),\n )\n .describe('Where clause using field names with Payload query operators, plus and/or groups')\n"],"names":["validOperators","z","whereFieldSchema","partialRecord","enum","unknown","describe","whereSchema","lazy","object","and","array","optional","or","catchall"],"mappings":"AAEA,SAASA,cAAc,QAAQ,iBAAgB;AAC/C,SAASC,CAAC,QAAQ,MAAK;AAEvB,MAAMC,mBAAmBD,EACtBE,aAAa,CAACF,EAAEG,IAAI,CAACJ,iBAAiBC,EAAEI,OAAO,IAC/CC,QAAQ,CAAC;AAEZ;;;;CAIC,GACD,OAAO,MAAMC,cAAgCN,EAC1CO,IAAI,CAAC,IACJP,EACGQ,MAAM,CAAC;QACNC,KAAKT,EAAEU,KAAK,CAACJ,aAAaK,QAAQ;QAClCC,IAAIZ,EAAEU,KAAK,CAACJ,aAAaK,QAAQ;IACnC,GACCE,QAAQ,CAACZ,mBAEbI,QAAQ,CAAC,mFAAkF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/plugin-mcp",
3
- "version": "4.0.0-internal.38b7f1d",
3
+ "version": "4.0.0-internal.4c792ad",
4
4
  "description": "MCP (Model Context Protocol) capabilities with Payload",
5
5
  "keywords": [
6
6
  "plugin",
@@ -21,34 +21,56 @@
21
21
  "url": "https://payloadcms.com"
22
22
  }
23
23
  ],
24
- "sideEffects": false,
25
24
  "type": "module",
26
25
  "exports": {
27
26
  ".": {
28
27
  "import": "./dist/index.js",
29
28
  "types": "./dist/index.d.ts",
30
29
  "default": "./dist/index.js"
30
+ },
31
+ "./client": {
32
+ "import": "./dist/exports/client.js",
33
+ "types": "./dist/exports/client.d.ts",
34
+ "default": "./dist/exports/client.js"
35
+ },
36
+ "./stdio": {
37
+ "import": "./dist/stdio.js",
38
+ "types": "./dist/stdio.d.ts",
39
+ "default": "./dist/stdio.js"
40
+ },
41
+ "./internal": {
42
+ "import": "./dist/internal.js",
43
+ "types": "./dist/internal.d.ts",
44
+ "default": "./dist/internal.js"
31
45
  }
32
46
  },
33
47
  "main": "./dist/index.js",
34
48
  "types": "./dist/index.d.ts",
49
+ "bin": {
50
+ "payload-mcp": "./bin.js"
51
+ },
35
52
  "files": [
36
53
  "src",
37
- "dist"
54
+ "dist",
55
+ "bin.js"
38
56
  ],
39
57
  "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"
58
+ "@cfworker/json-schema": "^4.1.1",
59
+ "@modelcontextprotocol/server": "2.0.0-alpha.2",
60
+ "tsx": "4.22.4",
61
+ "zod": "^4.0.0"
45
62
  },
46
63
  "devDependencies": {
47
64
  "@payloadcms/eslint-config": "3.28.0",
48
- "payload": "4.0.0-internal.38b7f1d"
65
+ "payload": "4.0.0-internal.4c792ad"
49
66
  },
50
67
  "peerDependencies": {
51
- "payload": "4.0.0-internal.38b7f1d"
68
+ "payload": "4.0.0-internal.4c792ad"
69
+ },
70
+ "//deps_notes": {
71
+ "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.",
72
+ "@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",
73
+ "tsx": "Required by the `bin.js` stdio mcp. Keep the version pinned to whatever `payload` ships to avoid duplicate installs."
52
74
  },
53
75
  "homepage:": "https://payloadcms.com",
54
76
  "scripts": {
@@ -0,0 +1,3 @@
1
+ declare module '*.css'
2
+
3
+ declare module '*.scss'
@@ -0,0 +1,3 @@
1
+ import type { MCPAccessArgs } from './types.js'
2
+
3
+ export const defaultAccess = ({ req }: MCPAccessArgs): boolean => Boolean(req.user)
@@ -0,0 +1,44 @@
1
+ import type { CollectionTool, GlobalTool, Prompt, Tool, ToolInputSchema } from './types.js'
2
+
3
+ /**
4
+ * Two-stage builder: pass the schema/metadata first, then chain `.handler(fn)`. Splitting the
5
+ * call lets TypeScript resolve `TSchema` from `input` (call 1) before contextually typing the
6
+ * handler (call 2). A single-call API hit a TS limitation where property order in the literal
7
+ * decided whether `TSchema` was inferred or pinned to its default.
8
+ *
9
+ * defineCollectionTool({ description, input })
10
+ * .handler(({ input }) => …) // ← input is fully typed here regardless of order
11
+ *
12
+ * Config and handler signatures are derived from `Tool` / `CollectionTool` / `GlobalTool` /
13
+ * `Prompt` via `Omit` + indexed access so there's no duplication with `types.ts`.
14
+ */
15
+
16
+ export const defineTool = <
17
+ TSchema extends ToolInputSchema | undefined = ToolInputSchema | undefined,
18
+ >(
19
+ args: Omit<Tool<TSchema>, 'handler'>,
20
+ ): { handler: (fn: Tool<TSchema>['handler']) => Tool } => ({
21
+ handler: (fn) => ({ ...args, handler: fn }) as unknown as Tool,
22
+ })
23
+
24
+ export const defineCollectionTool = <
25
+ TSchema extends ToolInputSchema | undefined = ToolInputSchema | undefined,
26
+ >(
27
+ args: Omit<CollectionTool<TSchema>, 'handler'>,
28
+ ): { handler: (fn: CollectionTool<TSchema>['handler']) => CollectionTool } => ({
29
+ handler: (fn) => ({ ...args, handler: fn }) as unknown as CollectionTool,
30
+ })
31
+
32
+ export const defineGlobalTool = <
33
+ TSchema extends ToolInputSchema | undefined = ToolInputSchema | undefined,
34
+ >(
35
+ args: Omit<GlobalTool<TSchema>, 'handler'>,
36
+ ): { handler: (fn: GlobalTool<TSchema>['handler']) => GlobalTool } => ({
37
+ handler: (fn) => ({ ...args, handler: fn }) as unknown as GlobalTool,
38
+ })
39
+
40
+ export const definePrompt = <TSchema extends ToolInputSchema = ToolInputSchema>(
41
+ args: Omit<Prompt<TSchema>, 'handler'>,
42
+ ): { handler: (fn: Prompt<TSchema>['handler']) => Prompt } => ({
43
+ handler: (fn) => ({ ...args, handler: fn }) as unknown as Prompt,
44
+ })
@@ -0,0 +1,119 @@
1
+ import type { PayloadRequest, SanitizedPermissions } from 'payload'
2
+
3
+ import { getAccessResults, UnauthorizedError } from 'payload'
4
+
5
+ import type { AuthorizedMCP, MCPItem } from '../types.js'
6
+
7
+ import { getPluginConfig } from '../utils/getPluginConfig.js'
8
+
9
+ export type GetAuthorizedMCPArgs = {
10
+ overrideAccess: boolean
11
+ req: PayloadRequest
12
+ }
13
+
14
+ /**
15
+ * Resolves the MCP caller and returns the MCP surface authorized for that request.
16
+ *
17
+ * Authorization has two layers:
18
+ * 1. Payload collection/global permissions determine whether built-in operation tools are shown.
19
+ * 2. MCP `access` callbacks can further hide any configured tool, prompt, or resource.
20
+ *
21
+ * Like Payload core operations, `overrideAccess` skips both layers.
22
+ */
23
+ export const getAuthorizedMCP: (args: GetAuthorizedMCPArgs) => Promise<AuthorizedMCP> = async ({
24
+ overrideAccess,
25
+ req,
26
+ }) => {
27
+ const pluginConfig = getPluginConfig({ config: req.payload.config })
28
+
29
+ if (pluginConfig.overrideGetAuthorizedMCP) {
30
+ return await pluginConfig.overrideGetAuthorizedMCP({
31
+ overrideAccess,
32
+ pluginConfig,
33
+ req,
34
+ })
35
+ }
36
+
37
+ if (req.headers) {
38
+ const headers = new Headers(req.headers)
39
+ const hasAuthorization = headers.has('Authorization')
40
+
41
+ headers.set('DisableAutologin', 'true')
42
+ req.user = (await req.payload.auth({ headers, req })).user
43
+
44
+ if (hasAuthorization && !req.user) {
45
+ throw new UnauthorizedError(req.t)
46
+ }
47
+ }
48
+
49
+ return {
50
+ items: await filterMCPItems({
51
+ items: pluginConfig.items,
52
+ overrideAccess,
53
+ req,
54
+ }),
55
+ overrideAccess,
56
+ user: req.user,
57
+ }
58
+ }
59
+
60
+ export const filterMCPItems = async ({
61
+ items,
62
+ overrideAccess,
63
+ req,
64
+ }: {
65
+ items: MCPItem[]
66
+ overrideAccess: boolean
67
+ req: PayloadRequest
68
+ }): Promise<MCPItem[]> => {
69
+ // Match Payload core: overrideAccess bypasses access evaluation instead of
70
+ // forcing each access function to return true.
71
+ if (overrideAccess) {
72
+ return items
73
+ }
74
+
75
+ const authorizedItems: MCPItem[] = []
76
+
77
+ const permissions = await getAccessResults({ req })
78
+
79
+ for (const item of items) {
80
+ if (!(await checkItemAccess({ item, permissions, req }))) {
81
+ continue
82
+ }
83
+ authorizedItems.push(item)
84
+ }
85
+
86
+ return authorizedItems
87
+ }
88
+
89
+ /**
90
+ * Runs MCP item access callbacks
91
+ */
92
+ const checkItemAccess = async ({
93
+ item,
94
+ permissions,
95
+ req,
96
+ }: {
97
+ item: MCPItem
98
+ permissions?: SanitizedPermissions
99
+ req: PayloadRequest
100
+ }): Promise<boolean> => {
101
+ switch (item.type) {
102
+ case 'collectionTool':
103
+ return (
104
+ !item.tool.access ||
105
+ (await item.tool.access({ collectionSlug: item.collectionSlug, permissions, req }))
106
+ )
107
+ case 'globalTool':
108
+ return (
109
+ !item.tool.access ||
110
+ (await item.tool.access({ globalSlug: item.globalSlug, permissions, req }))
111
+ )
112
+ case 'prompt':
113
+ return !item.prompt.access || (await item.prompt.access({ permissions, req }))
114
+ case 'resource':
115
+ return !item.resource.access || (await item.resource.access({ permissions, req }))
116
+ case 'tool':
117
+ return !item.tool.access || (await item.tool.access({ permissions, req }))
118
+ }
119
+ }
@@ -0,0 +1,48 @@
1
+ import { WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/server'
2
+ import { APIError, type PayloadHandler } from 'payload'
3
+
4
+ import { buildMcpServer } from '../mcp/buildMcpServer.js'
5
+ import { getPluginConfig } from '../utils/getPluginConfig.js'
6
+ import { getAuthorizedMCP } from './access.js'
7
+
8
+ export const mcpEndpoint: PayloadHandler = async (req) => {
9
+ if (!req.url) {
10
+ throw new APIError('Missing request URL', 400)
11
+ }
12
+
13
+ req.payloadAPI = 'MCP' as const
14
+
15
+ const pluginConfig = getPluginConfig({ config: req.payload.config })
16
+ const overrideAccessParam = new URL(req.url).searchParams.get('overrideAccess')
17
+
18
+ if (overrideAccessParam !== null && process.env.NODE_ENV !== 'development') {
19
+ throw new APIError('MCP overrideAccess is only available in development.', 400)
20
+ }
21
+
22
+ let overrideAccess = false
23
+ if (overrideAccessParam === 'true') {
24
+ overrideAccess = true
25
+ } else if (overrideAccessParam !== null && overrideAccessParam !== 'false') {
26
+ throw new APIError('MCP overrideAccess must be "true" or "false".', 400)
27
+ }
28
+
29
+ const authorizedMCP = await getAuthorizedMCP({ overrideAccess, req })
30
+
31
+ const server = buildMcpServer({ authorizedMCP, pluginConfig, req })
32
+
33
+ const transport = new WebStandardStreamableHTTPServerTransport({
34
+ enableJsonResponse: true,
35
+ sessionIdGenerator: undefined, // stateless mode
36
+ })
37
+
38
+ await server.connect(transport)
39
+
40
+ const mcpRequest = new Request(req.url, {
41
+ body: req.body,
42
+ duplex: 'half',
43
+ headers: req.headers,
44
+ method: req.method,
45
+ } as { duplex: 'half' } & RequestInit)
46
+
47
+ return await transport.handleRequest(mcpRequest)
48
+ }
@@ -0,0 +1,3 @@
1
+ 'use client'
2
+
3
+ export {}
@@ -0,0 +1 @@
1
+ export { filterMCPItems, getAuthorizedMCP } from '../endpoint/access.js'