@payloadcms/plugin-mcp 4.0.0-internal.d28e9fb → 4.0.0-internal.d927017

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 (432) hide show
  1. package/LICENSE.md +1 -1
  2. package/bin.js +48 -0
  3. package/dist/bin/index.d.ts +2 -0
  4. package/dist/bin/index.d.ts.map +1 -0
  5. package/dist/bin/index.js +12 -0
  6. package/dist/bin/index.js.map +1 -0
  7. package/dist/bin/initializeViteHMR.d.ts +8 -0
  8. package/dist/bin/initializeViteHMR.d.ts.map +1 -0
  9. package/dist/bin/initializeViteHMR.js +63 -0
  10. package/dist/bin/initializeViteHMR.js.map +1 -0
  11. package/dist/bin/viteConfigBoundary.d.ts +6 -0
  12. package/dist/bin/viteConfigBoundary.d.ts.map +1 -0
  13. package/dist/bin/viteConfigBoundary.js +25 -0
  14. package/dist/bin/viteConfigBoundary.js.map +1 -0
  15. package/dist/defaultAccess.d.ts +3 -0
  16. package/dist/defaultAccess.d.ts.map +1 -0
  17. package/dist/defaultAccess.js +3 -0
  18. package/dist/defaultAccess.js.map +1 -0
  19. package/dist/defineTool.d.ts +26 -0
  20. package/dist/defineTool.d.ts.map +1 -0
  21. package/dist/defineTool.js +37 -0
  22. package/dist/defineTool.js.map +1 -0
  23. package/dist/endpoint/access.d.ts +17 -0
  24. package/dist/endpoint/access.d.ts.map +1 -0
  25. package/dist/endpoint/access.js +93 -0
  26. package/dist/endpoint/access.js.map +1 -0
  27. package/dist/endpoint/index.d.ts +3 -0
  28. package/dist/endpoint/index.d.ts.map +1 -0
  29. package/dist/endpoint/index.js +87 -0
  30. package/dist/endpoint/index.js.map +1 -0
  31. package/dist/exports/client.d.ts +2 -0
  32. package/dist/exports/client.d.ts.map +1 -0
  33. package/dist/exports/client.js +4 -0
  34. package/dist/exports/client.js.map +1 -0
  35. package/dist/exports/internal.d.ts +2 -0
  36. package/dist/exports/internal.d.ts.map +1 -0
  37. package/dist/exports/internal.js +3 -0
  38. package/dist/exports/internal.js.map +1 -0
  39. package/dist/index.d.ts +6 -9
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +39 -67
  42. package/dist/index.js.map +1 -1
  43. package/dist/mcp/buildMcpServer.d.ts +19 -0
  44. package/dist/mcp/buildMcpServer.d.ts.map +1 -0
  45. package/dist/mcp/buildMcpServer.js +223 -0
  46. package/dist/mcp/buildMcpServer.js.map +1 -0
  47. package/dist/mcp/builtin/collections/authTools.d.ts +7 -0
  48. package/dist/mcp/builtin/collections/authTools.d.ts.map +1 -0
  49. package/dist/mcp/builtin/collections/authTools.js +288 -0
  50. package/dist/mcp/builtin/collections/authTools.js.map +1 -0
  51. package/dist/mcp/builtin/collections/countTool.d.ts +2 -0
  52. package/dist/mcp/builtin/collections/countTool.d.ts.map +1 -0
  53. package/dist/mcp/builtin/collections/countTool.js +68 -0
  54. package/dist/mcp/builtin/collections/countTool.js.map +1 -0
  55. package/dist/mcp/builtin/collections/countVersionsTool.d.ts +2 -0
  56. package/dist/mcp/builtin/collections/countVersionsTool.d.ts.map +1 -0
  57. package/dist/mcp/builtin/collections/countVersionsTool.js +64 -0
  58. package/dist/mcp/builtin/collections/countVersionsTool.js.map +1 -0
  59. package/dist/mcp/builtin/collections/createTool.d.ts +2 -0
  60. package/dist/mcp/builtin/collections/createTool.d.ts.map +1 -0
  61. package/dist/mcp/builtin/collections/createTool.js +86 -0
  62. package/dist/mcp/builtin/collections/createTool.js.map +1 -0
  63. package/dist/mcp/builtin/collections/deleteTool.d.ts +2 -0
  64. package/dist/mcp/builtin/collections/deleteTool.d.ts.map +1 -0
  65. package/dist/mcp/builtin/collections/deleteTool.js +110 -0
  66. package/dist/mcp/builtin/collections/deleteTool.js.map +1 -0
  67. package/dist/mcp/builtin/collections/duplicateTool.d.ts +2 -0
  68. package/dist/mcp/builtin/collections/duplicateTool.d.ts.map +1 -0
  69. package/dist/mcp/builtin/collections/duplicateTool.js +96 -0
  70. package/dist/mcp/builtin/collections/duplicateTool.js.map +1 -0
  71. package/dist/mcp/builtin/collections/findDistinctTool.d.ts +2 -0
  72. package/dist/mcp/builtin/collections/findDistinctTool.d.ts.map +1 -0
  73. package/dist/mcp/builtin/collections/findDistinctTool.js +92 -0
  74. package/dist/mcp/builtin/collections/findDistinctTool.js.map +1 -0
  75. package/dist/mcp/builtin/collections/findTool.d.ts +2 -0
  76. package/dist/mcp/builtin/collections/findTool.d.ts.map +1 -0
  77. package/dist/mcp/builtin/collections/findTool.js +164 -0
  78. package/dist/mcp/builtin/collections/findTool.js.map +1 -0
  79. package/dist/mcp/builtin/collections/findVersionByIDTool.d.ts +2 -0
  80. package/dist/mcp/builtin/collections/findVersionByIDTool.d.ts.map +1 -0
  81. package/dist/mcp/builtin/collections/findVersionByIDTool.js +83 -0
  82. package/dist/mcp/builtin/collections/findVersionByIDTool.js.map +1 -0
  83. package/dist/mcp/builtin/collections/findVersionsTool.d.ts +2 -0
  84. package/dist/mcp/builtin/collections/findVersionsTool.d.ts.map +1 -0
  85. package/dist/mcp/builtin/collections/findVersionsTool.js +98 -0
  86. package/dist/mcp/builtin/collections/findVersionsTool.js.map +1 -0
  87. package/dist/mcp/builtin/collections/formatCollectionError.d.ts +9 -0
  88. package/dist/mcp/builtin/collections/formatCollectionError.d.ts.map +1 -0
  89. package/dist/mcp/builtin/collections/formatCollectionError.js +60 -0
  90. package/dist/mcp/builtin/collections/formatCollectionError.js.map +1 -0
  91. package/dist/mcp/builtin/collections/getCollectionSchemaTool.d.ts +2 -0
  92. package/dist/mcp/builtin/collections/getCollectionSchemaTool.d.ts.map +1 -0
  93. package/dist/mcp/builtin/collections/getCollectionSchemaTool.js +65 -0
  94. package/dist/mcp/builtin/collections/getCollectionSchemaTool.js.map +1 -0
  95. package/dist/mcp/builtin/collections/restoreVersionTool.d.ts +2 -0
  96. package/dist/mcp/builtin/collections/restoreVersionTool.d.ts.map +1 -0
  97. package/dist/mcp/builtin/collections/restoreVersionTool.js +81 -0
  98. package/dist/mcp/builtin/collections/restoreVersionTool.js.map +1 -0
  99. package/dist/mcp/builtin/collections/updateTool.d.ts +2 -0
  100. package/dist/mcp/builtin/collections/updateTool.d.ts.map +1 -0
  101. package/dist/mcp/builtin/collections/updateTool.js +198 -0
  102. package/dist/mcp/builtin/collections/updateTool.js.map +1 -0
  103. package/dist/mcp/builtin/getConfigInfoTool.d.ts +2 -0
  104. package/dist/mcp/builtin/getConfigInfoTool.d.ts.map +1 -0
  105. package/dist/mcp/builtin/getConfigInfoTool.js +68 -0
  106. package/dist/mcp/builtin/getConfigInfoTool.js.map +1 -0
  107. package/dist/mcp/builtin/globals/countVersionsTool.d.ts +2 -0
  108. package/dist/mcp/builtin/globals/countVersionsTool.d.ts.map +1 -0
  109. package/dist/mcp/builtin/globals/countVersionsTool.js +64 -0
  110. package/dist/mcp/builtin/globals/countVersionsTool.js.map +1 -0
  111. package/dist/mcp/builtin/globals/findTool.d.ts +2 -0
  112. package/dist/mcp/builtin/globals/findTool.d.ts.map +1 -0
  113. package/dist/mcp/builtin/globals/findTool.js +73 -0
  114. package/dist/mcp/builtin/globals/findTool.js.map +1 -0
  115. package/dist/mcp/builtin/globals/findVersionByIDTool.d.ts +2 -0
  116. package/dist/mcp/builtin/globals/findVersionByIDTool.d.ts.map +1 -0
  117. package/dist/mcp/builtin/globals/findVersionByIDTool.js +79 -0
  118. package/dist/mcp/builtin/globals/findVersionByIDTool.js.map +1 -0
  119. package/dist/mcp/builtin/globals/findVersionsTool.d.ts +2 -0
  120. package/dist/mcp/builtin/globals/findVersionsTool.d.ts.map +1 -0
  121. package/dist/mcp/builtin/globals/findVersionsTool.js +94 -0
  122. package/dist/mcp/builtin/globals/findVersionsTool.js.map +1 -0
  123. package/dist/mcp/builtin/globals/getGlobalSchemaTool.d.ts +2 -0
  124. package/dist/mcp/builtin/globals/getGlobalSchemaTool.d.ts.map +1 -0
  125. package/dist/mcp/builtin/globals/getGlobalSchemaTool.js +65 -0
  126. package/dist/mcp/builtin/globals/getGlobalSchemaTool.js.map +1 -0
  127. package/dist/mcp/builtin/globals/restoreVersionTool.d.ts +2 -0
  128. package/dist/mcp/builtin/globals/restoreVersionTool.d.ts.map +1 -0
  129. package/dist/mcp/builtin/globals/restoreVersionTool.js +77 -0
  130. package/dist/mcp/builtin/globals/restoreVersionTool.js.map +1 -0
  131. package/dist/mcp/builtin/globals/updateTool.d.ts +2 -0
  132. package/dist/mcp/builtin/globals/updateTool.d.ts.map +1 -0
  133. package/dist/mcp/builtin/globals/updateTool.js +87 -0
  134. package/dist/mcp/builtin/globals/updateTool.js.map +1 -0
  135. package/dist/mcp/builtin/validateEntityData.d.ts +14 -0
  136. package/dist/mcp/builtin/validateEntityData.d.ts.map +1 -0
  137. package/dist/mcp/builtin/validateEntityData.js +82 -0
  138. package/dist/mcp/builtin/validateEntityData.js.map +1 -0
  139. package/dist/mcp/builtinTools.d.ts +162 -0
  140. package/dist/mcp/builtinTools.d.ts.map +1 -0
  141. package/dist/mcp/builtinTools.js +163 -0
  142. package/dist/mcp/builtinTools.js.map +1 -0
  143. package/dist/mcp/sanitizeMCPConfig.d.ts +16 -0
  144. package/dist/mcp/sanitizeMCPConfig.d.ts.map +1 -0
  145. package/dist/mcp/sanitizeMCPConfig.js +230 -0
  146. package/dist/mcp/sanitizeMCPConfig.js.map +1 -0
  147. package/dist/stdio.d.ts +9 -0
  148. package/dist/stdio.d.ts.map +1 -0
  149. package/dist/stdio.js +127 -0
  150. package/dist/stdio.js.map +1 -0
  151. package/dist/types.d.ts +256 -447
  152. package/dist/types.d.ts.map +1 -1
  153. package/dist/types.js +4 -1
  154. package/dist/types.js.map +1 -1
  155. package/dist/utils/camelCase.d.ts.map +1 -1
  156. package/dist/utils/getLogger.d.ts +10 -0
  157. package/dist/utils/getLogger.d.ts.map +1 -0
  158. package/dist/utils/getLogger.js +22 -0
  159. package/dist/utils/getLogger.js.map +1 -0
  160. package/dist/utils/getPluginConfig.d.ts +12 -0
  161. package/dist/utils/getPluginConfig.d.ts.map +1 -0
  162. package/dist/utils/getPluginConfig.js +15 -0
  163. package/dist/utils/getPluginConfig.js.map +1 -0
  164. package/dist/utils/resolveProjectRoot.d.ts +7 -0
  165. package/dist/utils/resolveProjectRoot.d.ts.map +1 -0
  166. package/dist/utils/resolveProjectRoot.js +15 -0
  167. package/dist/utils/resolveProjectRoot.js.map +1 -0
  168. package/dist/utils/schemaConversion/filterFieldsByAccess.d.ts +28 -0
  169. package/dist/utils/schemaConversion/filterFieldsByAccess.d.ts.map +1 -0
  170. package/dist/utils/schemaConversion/filterFieldsByAccess.js +71 -0
  171. package/dist/utils/schemaConversion/filterFieldsByAccess.js.map +1 -0
  172. package/dist/utils/schemaConversion/getEntityInputSchema.d.ts +13 -0
  173. package/dist/utils/schemaConversion/getEntityInputSchema.d.ts.map +1 -0
  174. package/dist/utils/schemaConversion/getEntityInputSchema.js +66 -0
  175. package/dist/utils/schemaConversion/getEntityInputSchema.js.map +1 -0
  176. package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts +10 -0
  177. package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts.map +1 -0
  178. package/dist/utils/schemaConversion/sanitizeEntitySchema.js +384 -0
  179. package/dist/utils/schemaConversion/sanitizeEntitySchema.js.map +1 -0
  180. package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js +133 -0
  181. package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js.map +1 -0
  182. package/dist/utils/toStandardSchema.d.ts +5 -0
  183. package/dist/utils/toStandardSchema.d.ts.map +1 -0
  184. package/dist/utils/toStandardSchema.js +4 -0
  185. package/dist/utils/toStandardSchema.js.map +1 -0
  186. package/dist/utils/whereSchema.d.ts +9 -0
  187. package/dist/utils/whereSchema.d.ts.map +1 -0
  188. package/dist/utils/whereSchema.js +13 -0
  189. package/dist/utils/whereSchema.js.map +1 -0
  190. package/package.json +43 -10
  191. package/src/bin/index.ts +16 -0
  192. package/src/bin/initializeViteHMR.ts +60 -0
  193. package/src/bin/viteConfigBoundary.ts +39 -0
  194. package/src/defaultAccess.ts +3 -0
  195. package/src/defineTool.ts +44 -0
  196. package/src/endpoint/access.ts +112 -0
  197. package/src/endpoint/index.ts +77 -0
  198. package/src/exports/client.ts +3 -0
  199. package/src/exports/internal.ts +1 -0
  200. package/src/index.ts +31 -89
  201. package/src/mcp/buildMcpServer.ts +284 -0
  202. package/src/mcp/builtin/collections/authTools.ts +269 -0
  203. package/src/mcp/builtin/collections/countTool.ts +73 -0
  204. package/src/mcp/builtin/collections/countVersionsTool.ts +69 -0
  205. package/src/mcp/builtin/collections/createTool.ts +117 -0
  206. package/src/mcp/builtin/collections/deleteTool.ts +125 -0
  207. package/src/mcp/builtin/collections/duplicateTool.ts +134 -0
  208. package/src/mcp/builtin/collections/findDistinctTool.ts +119 -0
  209. package/src/mcp/builtin/collections/findTool.ts +216 -0
  210. package/src/mcp/builtin/collections/findVersionByIDTool.ts +109 -0
  211. package/src/mcp/builtin/collections/findVersionsTool.ts +154 -0
  212. package/src/mcp/builtin/collections/formatCollectionError.ts +84 -0
  213. package/src/mcp/builtin/collections/getCollectionSchemaTool.ts +63 -0
  214. package/src/mcp/builtin/collections/restoreVersionTool.ts +107 -0
  215. package/src/mcp/builtin/collections/updateTool.ts +225 -0
  216. package/src/mcp/builtin/getConfigInfoTool.ts +67 -0
  217. package/src/mcp/builtin/globals/countVersionsTool.ts +68 -0
  218. package/src/mcp/builtin/globals/findTool.ts +105 -0
  219. package/src/mcp/builtin/globals/findVersionByIDTool.ts +103 -0
  220. package/src/mcp/builtin/globals/findVersionsTool.ts +147 -0
  221. package/src/mcp/builtin/globals/getGlobalSchemaTool.ts +63 -0
  222. package/src/mcp/builtin/globals/restoreVersionTool.ts +99 -0
  223. package/src/mcp/builtin/globals/updateTool.ts +115 -0
  224. package/src/mcp/builtin/validateEntityData.ts +132 -0
  225. package/src/mcp/builtinTools.ts +154 -0
  226. package/src/mcp/sanitizeMCPConfig.ts +278 -0
  227. package/src/stdio.ts +131 -0
  228. package/src/types.ts +304 -486
  229. package/src/utils/getLogger.ts +22 -0
  230. package/src/utils/getPluginConfig.ts +24 -0
  231. package/src/utils/resolveProjectRoot.ts +17 -0
  232. package/src/utils/schemaConversion/filterFieldsByAccess.ts +123 -0
  233. package/src/utils/schemaConversion/getEntityInputSchema.ts +96 -0
  234. package/src/utils/schemaConversion/sanitizeEntitySchema.spec.ts +96 -0
  235. package/src/utils/schemaConversion/sanitizeEntitySchema.ts +432 -0
  236. package/src/utils/toStandardSchema.ts +9 -0
  237. package/src/utils/whereSchema.ts +24 -0
  238. package/dist/collections/createApiKeysCollection.d.ts +0 -7
  239. package/dist/collections/createApiKeysCollection.d.ts.map +0 -1
  240. package/dist/collections/createApiKeysCollection.js +0 -317
  241. package/dist/collections/createApiKeysCollection.js.map +0 -1
  242. package/dist/defaults.d.ts +0 -4
  243. package/dist/defaults.d.ts.map +0 -1
  244. package/dist/defaults.js +0 -5
  245. package/dist/defaults.js.map +0 -1
  246. package/dist/endpoints/mcp.d.ts +0 -4
  247. package/dist/endpoints/mcp.d.ts.map +0 -1
  248. package/dist/endpoints/mcp.js +0 -71
  249. package/dist/endpoints/mcp.js.map +0 -1
  250. package/dist/mcp/createRequest.d.ts +0 -3
  251. package/dist/mcp/createRequest.d.ts.map +0 -1
  252. package/dist/mcp/createRequest.js +0 -14
  253. package/dist/mcp/createRequest.js.map +0 -1
  254. package/dist/mcp/getMcpHandler.d.ts +0 -4
  255. package/dist/mcp/getMcpHandler.d.ts.map +0 -1
  256. package/dist/mcp/getMcpHandler.js +0 -231
  257. package/dist/mcp/getMcpHandler.js.map +0 -1
  258. package/dist/mcp/helpers/config.d.ts +0 -22
  259. package/dist/mcp/helpers/config.d.ts.map +0 -1
  260. package/dist/mcp/helpers/config.js +0 -153
  261. package/dist/mcp/helpers/config.js.map +0 -1
  262. package/dist/mcp/helpers/fields.d.ts +0 -19
  263. package/dist/mcp/helpers/fields.d.ts.map +0 -1
  264. package/dist/mcp/helpers/fields.js +0 -102
  265. package/dist/mcp/helpers/fields.js.map +0 -1
  266. package/dist/mcp/helpers/fileValidation.d.ts +0 -67
  267. package/dist/mcp/helpers/fileValidation.d.ts.map +0 -1
  268. package/dist/mcp/helpers/fileValidation.js +0 -267
  269. package/dist/mcp/helpers/fileValidation.js.map +0 -1
  270. package/dist/mcp/registerTool.d.ts +0 -6
  271. package/dist/mcp/registerTool.d.ts.map +0 -1
  272. package/dist/mcp/registerTool.js +0 -18
  273. package/dist/mcp/registerTool.js.map +0 -1
  274. package/dist/mcp/tools/auth/auth.d.ts +0 -4
  275. package/dist/mcp/tools/auth/auth.d.ts.map +0 -1
  276. package/dist/mcp/tools/auth/auth.js +0 -57
  277. package/dist/mcp/tools/auth/auth.js.map +0 -1
  278. package/dist/mcp/tools/auth/forgotPassword.d.ts +0 -4
  279. package/dist/mcp/tools/auth/forgotPassword.d.ts.map +0 -1
  280. package/dist/mcp/tools/auth/forgotPassword.js +0 -48
  281. package/dist/mcp/tools/auth/forgotPassword.js.map +0 -1
  282. package/dist/mcp/tools/auth/login.d.ts +0 -4
  283. package/dist/mcp/tools/auth/login.d.ts.map +0 -1
  284. package/dist/mcp/tools/auth/login.js +0 -51
  285. package/dist/mcp/tools/auth/login.js.map +0 -1
  286. package/dist/mcp/tools/auth/resetPassword.d.ts +0 -4
  287. package/dist/mcp/tools/auth/resetPassword.d.ts.map +0 -1
  288. package/dist/mcp/tools/auth/resetPassword.js +0 -49
  289. package/dist/mcp/tools/auth/resetPassword.js.map +0 -1
  290. package/dist/mcp/tools/auth/unlock.d.ts +0 -4
  291. package/dist/mcp/tools/auth/unlock.d.ts.map +0 -1
  292. package/dist/mcp/tools/auth/unlock.js +0 -48
  293. package/dist/mcp/tools/auth/unlock.js.map +0 -1
  294. package/dist/mcp/tools/auth/verify.d.ts +0 -4
  295. package/dist/mcp/tools/auth/verify.d.ts.map +0 -1
  296. package/dist/mcp/tools/auth/verify.js +0 -45
  297. package/dist/mcp/tools/auth/verify.js.map +0 -1
  298. package/dist/mcp/tools/collection/create.d.ts +0 -10
  299. package/dist/mcp/tools/collection/create.d.ts.map +0 -1
  300. package/dist/mcp/tools/collection/create.js +0 -139
  301. package/dist/mcp/tools/collection/create.js.map +0 -1
  302. package/dist/mcp/tools/collection/delete.d.ts +0 -10
  303. package/dist/mcp/tools/collection/delete.d.ts.map +0 -1
  304. package/dist/mcp/tools/collection/delete.js +0 -154
  305. package/dist/mcp/tools/collection/delete.js.map +0 -1
  306. package/dist/mcp/tools/collection/find.d.ts +0 -10
  307. package/dist/mcp/tools/collection/find.d.ts.map +0 -1
  308. package/dist/mcp/tools/collection/find.js +0 -165
  309. package/dist/mcp/tools/collection/find.js.map +0 -1
  310. package/dist/mcp/tools/collection/update.d.ts +0 -10
  311. package/dist/mcp/tools/collection/update.d.ts.map +0 -1
  312. package/dist/mcp/tools/collection/update.js +0 -209
  313. package/dist/mcp/tools/collection/update.js.map +0 -1
  314. package/dist/mcp/tools/config/find.d.ts +0 -10
  315. package/dist/mcp/tools/config/find.d.ts.map +0 -1
  316. package/dist/mcp/tools/config/find.js +0 -97
  317. package/dist/mcp/tools/config/find.js.map +0 -1
  318. package/dist/mcp/tools/config/update.d.ts +0 -10
  319. package/dist/mcp/tools/config/update.d.ts.map +0 -1
  320. package/dist/mcp/tools/config/update.js +0 -215
  321. package/dist/mcp/tools/config/update.js.map +0 -1
  322. package/dist/mcp/tools/global/find.d.ts +0 -5
  323. package/dist/mcp/tools/global/find.d.ts.map +0 -1
  324. package/dist/mcp/tools/global/find.js +0 -82
  325. package/dist/mcp/tools/global/find.js.map +0 -1
  326. package/dist/mcp/tools/global/update.d.ts +0 -6
  327. package/dist/mcp/tools/global/update.d.ts.map +0 -1
  328. package/dist/mcp/tools/global/update.js +0 -124
  329. package/dist/mcp/tools/global/update.js.map +0 -1
  330. package/dist/mcp/tools/job/create.d.ts +0 -10
  331. package/dist/mcp/tools/job/create.d.ts.map +0 -1
  332. package/dist/mcp/tools/job/create.js +0 -293
  333. package/dist/mcp/tools/job/create.js.map +0 -1
  334. package/dist/mcp/tools/job/run.d.ts +0 -10
  335. package/dist/mcp/tools/job/run.d.ts.map +0 -1
  336. package/dist/mcp/tools/job/run.js +0 -129
  337. package/dist/mcp/tools/job/run.js.map +0 -1
  338. package/dist/mcp/tools/job/update.d.ts +0 -11
  339. package/dist/mcp/tools/job/update.d.ts.map +0 -1
  340. package/dist/mcp/tools/job/update.js +0 -186
  341. package/dist/mcp/tools/job/update.js.map +0 -1
  342. package/dist/mcp/tools/resource/create.d.ts +0 -6
  343. package/dist/mcp/tools/resource/create.d.ts.map +0 -1
  344. package/dist/mcp/tools/resource/create.js +0 -124
  345. package/dist/mcp/tools/resource/create.js.map +0 -1
  346. package/dist/mcp/tools/resource/delete.d.ts +0 -5
  347. package/dist/mcp/tools/resource/delete.d.ts.map +0 -1
  348. package/dist/mcp/tools/resource/delete.js +0 -151
  349. package/dist/mcp/tools/resource/delete.js.map +0 -1
  350. package/dist/mcp/tools/resource/find.d.ts +0 -5
  351. package/dist/mcp/tools/resource/find.d.ts.map +0 -1
  352. package/dist/mcp/tools/resource/find.js +0 -170
  353. package/dist/mcp/tools/resource/find.js.map +0 -1
  354. package/dist/mcp/tools/resource/update.d.ts +0 -6
  355. package/dist/mcp/tools/resource/update.d.ts.map +0 -1
  356. package/dist/mcp/tools/resource/update.js +0 -256
  357. package/dist/mcp/tools/resource/update.js.map +0 -1
  358. package/dist/mcp/tools/schemas.d.ts +0 -457
  359. package/dist/mcp/tools/schemas.d.ts.map +0 -1
  360. package/dist/mcp/tools/schemas.js +0 -243
  361. package/dist/mcp/tools/schemas.js.map +0 -1
  362. package/dist/utils/adminEntitySettings.d.ts +0 -17
  363. package/dist/utils/adminEntitySettings.d.ts.map +0 -1
  364. package/dist/utils/adminEntitySettings.js +0 -41
  365. package/dist/utils/adminEntitySettings.js.map +0 -1
  366. package/dist/utils/createApiKeyFields.d.ts +0 -15
  367. package/dist/utils/createApiKeyFields.d.ts.map +0 -1
  368. package/dist/utils/createApiKeyFields.js +0 -57
  369. package/dist/utils/createApiKeyFields.js.map +0 -1
  370. package/dist/utils/getEnabledSlugs.d.ts +0 -13
  371. package/dist/utils/getEnabledSlugs.d.ts.map +0 -1
  372. package/dist/utils/getEnabledSlugs.js +0 -32
  373. package/dist/utils/getEnabledSlugs.js.map +0 -1
  374. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts +0 -3
  375. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts.map +0 -1
  376. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js +0 -43
  377. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js.map +0 -1
  378. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts +0 -7
  379. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts.map +0 -1
  380. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js +0 -20
  381. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js.map +0 -1
  382. package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts +0 -13
  383. package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts.map +0 -1
  384. package/dist/utils/schemaConversion/sanitizeJsonSchema.js +0 -56
  385. package/dist/utils/schemaConversion/sanitizeJsonSchema.js.map +0 -1
  386. package/dist/utils/schemaConversion/simplifyRelationshipFields.d.ts +0 -20
  387. package/dist/utils/schemaConversion/simplifyRelationshipFields.d.ts.map +0 -1
  388. package/dist/utils/schemaConversion/simplifyRelationshipFields.js +0 -53
  389. package/dist/utils/schemaConversion/simplifyRelationshipFields.js.map +0 -1
  390. package/dist/utils/schemaConversion/transformPointFields.d.ts +0 -3
  391. package/dist/utils/schemaConversion/transformPointFields.d.ts.map +0 -1
  392. package/dist/utils/schemaConversion/transformPointFields.js +0 -51
  393. package/dist/utils/schemaConversion/transformPointFields.js.map +0 -1
  394. package/src/collections/createApiKeysCollection.ts +0 -373
  395. package/src/defaults.ts +0 -3
  396. package/src/endpoints/mcp.ts +0 -91
  397. package/src/mcp/createRequest.ts +0 -13
  398. package/src/mcp/getMcpHandler.ts +0 -545
  399. package/src/mcp/helpers/config.ts +0 -213
  400. package/src/mcp/helpers/fields.ts +0 -154
  401. package/src/mcp/helpers/fileValidation.ts +0 -362
  402. package/src/mcp/registerTool.ts +0 -22
  403. package/src/mcp/tools/auth/auth.ts +0 -71
  404. package/src/mcp/tools/auth/forgotPassword.ts +0 -70
  405. package/src/mcp/tools/auth/login.ts +0 -72
  406. package/src/mcp/tools/auth/resetPassword.ts +0 -61
  407. package/src/mcp/tools/auth/unlock.ts +0 -64
  408. package/src/mcp/tools/auth/verify.ts +0 -57
  409. package/src/mcp/tools/collection/create.ts +0 -210
  410. package/src/mcp/tools/collection/delete.ts +0 -211
  411. package/src/mcp/tools/collection/find.ts +0 -224
  412. package/src/mcp/tools/collection/update.ts +0 -290
  413. package/src/mcp/tools/config/find.ts +0 -128
  414. package/src/mcp/tools/config/update.ts +0 -280
  415. package/src/mcp/tools/global/find.ts +0 -128
  416. package/src/mcp/tools/global/update.ts +0 -207
  417. package/src/mcp/tools/job/create.ts +0 -416
  418. package/src/mcp/tools/job/run.ts +0 -167
  419. package/src/mcp/tools/job/update.ts +0 -274
  420. package/src/mcp/tools/resource/create.ts +0 -211
  421. package/src/mcp/tools/resource/delete.ts +0 -218
  422. package/src/mcp/tools/resource/find.ts +0 -246
  423. package/src/mcp/tools/resource/update.ts +0 -383
  424. package/src/mcp/tools/schemas.ts +0 -520
  425. package/src/utils/adminEntitySettings.ts +0 -40
  426. package/src/utils/createApiKeyFields.ts +0 -72
  427. package/src/utils/getEnabledSlugs.ts +0 -42
  428. package/src/utils/schemaConversion/convertCollectionSchemaToZod.ts +0 -52
  429. package/src/utils/schemaConversion/removeVirtualFieldsFromSchema.ts +0 -27
  430. package/src/utils/schemaConversion/sanitizeJsonSchema.ts +0 -62
  431. package/src/utils/schemaConversion/simplifyRelationshipFields.ts +0 -65
  432. package/src/utils/schemaConversion/transformPointFields.ts +0 -55
package/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2018-2024 Payload CMS, Inc. <info@payloadcms.com>
3
+ Copyright (c) 2018-2026 Payload CMS, LLC <info@payloadcms.com>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
package/bin.js ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * stdio MCP server for Payload.
4
+ *
5
+ * Loads the project's `payload.config.{ts,js}` (via `findConfig`), boots Payload,
6
+ * and serves MCP over stdin/stdout. Intended for local-dev MCP clients (Claude
7
+ * Desktop, IDEs) that spawn stdio MCP servers - no running Next.js dev server required.
8
+ *
9
+ * Mirrors `payload/bin.js`: by default, transpiles TS on the fly via `tsx`. Pass
10
+ * `--disable-transpile` if your config is already JS (or you've registered your
11
+ * own loader).
12
+ */
13
+ import path from 'path'
14
+ import { fileURLToPath, pathToFileURL } from 'url'
15
+
16
+ const disableTranspile = process.argv.includes('--disable-transpile')
17
+
18
+ const filename = fileURLToPath(import.meta.url)
19
+ const dirname = path.dirname(filename)
20
+ const baseURL = pathToFileURL(dirname).toString() + '/'
21
+
22
+ const loadBin = async () => {
23
+ if (disableTranspile) {
24
+ process.argv = process.argv.filter((arg) => arg !== '--disable-transpile')
25
+ return import('./dist/bin/index.js')
26
+ }
27
+
28
+ // tsx 4.22.4's synchronous loader leaks its namespace query onto Node built-ins on Node 23.5+.
29
+ // Force the stable asynchronous loader path, matching payload/bin.js.
30
+ const nodeModule = await import('node:module')
31
+ if (typeof nodeModule.default.registerHooks === 'function') {
32
+ nodeModule.default.registerHooks = undefined
33
+ }
34
+
35
+ const { tsImport } = await import('tsx/esm/api')
36
+ return tsImport('@payloadcms/plugin-mcp/bin', baseURL)
37
+ }
38
+
39
+ const start = async () => {
40
+ const { bin } = await loadBin()
41
+ await bin()
42
+ }
43
+
44
+ start().catch((err) => {
45
+ // eslint-disable-next-line no-console
46
+ console.error('[payload-mcp] error:', err)
47
+ process.exit(1)
48
+ })
@@ -0,0 +1,2 @@
1
+ export declare const bin: () => Promise<void>;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,GAAG,QAAa,OAAO,CAAC,IAAI,CAaxC,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { runMcpStdio } from '../stdio.js';
2
+ export const bin = async ()=>{
3
+ let viteHMR;
4
+ if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test' && process.env.DISABLE_PAYLOAD_HMR !== 'true') {
5
+ const { initializeViteHMR } = await import('./initializeViteHMR.js');
6
+ viteHMR = await initializeViteHMR();
7
+ }
8
+ await runMcpStdio(viteHMR?.config);
9
+ await viteHMR?.connect();
10
+ };
11
+
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/bin/index.ts"],"sourcesContent":["import { runMcpStdio } from '../stdio.js'\n\nexport const bin = async (): Promise<void> => {\n let viteHMR\n if (\n process.env.NODE_ENV !== 'production' &&\n process.env.NODE_ENV !== 'test' &&\n process.env.DISABLE_PAYLOAD_HMR !== 'true'\n ) {\n const { initializeViteHMR } = await import('./initializeViteHMR.js')\n viteHMR = await initializeViteHMR()\n }\n\n await runMcpStdio(viteHMR?.config)\n await viteHMR?.connect()\n}\n"],"names":["runMcpStdio","bin","viteHMR","process","env","NODE_ENV","DISABLE_PAYLOAD_HMR","initializeViteHMR","config","connect"],"mappings":"AAAA,SAASA,WAAW,QAAQ,cAAa;AAEzC,OAAO,MAAMC,MAAM;IACjB,IAAIC;IACJ,IACEC,QAAQC,GAAG,CAACC,QAAQ,KAAK,gBACzBF,QAAQC,GAAG,CAACC,QAAQ,KAAK,UACzBF,QAAQC,GAAG,CAACE,mBAAmB,KAAK,QACpC;QACA,MAAM,EAAEC,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC;QAC3CL,UAAU,MAAMK;IAClB;IAEA,MAAMP,YAAYE,SAASM;IAC3B,MAAMN,SAASO;AACjB,EAAC"}
@@ -0,0 +1,8 @@
1
+ import type { SanitizedConfig } from 'payload';
2
+ type ViteHMR = {
3
+ config: SanitizedConfig;
4
+ connect: () => Promise<void>;
5
+ };
6
+ export declare const initializeViteHMR: () => Promise<ViteHMR>;
7
+ export {};
8
+ //# sourceMappingURL=initializeViteHMR.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializeViteHMR.d.ts","sourceRoot":"","sources":["../../src/bin/initializeViteHMR.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAY9C,KAAK,OAAO,GAAG;IACb,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,OAAO,CA0CzD,CAAA"}
@@ -0,0 +1,63 @@
1
+ /* eslint-disable no-console */ import { fileURLToPath } from 'node:url';
2
+ import { getPayload, reload } from 'payload';
3
+ import { findConfig } from 'payload/node';
4
+ import { createServer, createServerModuleRunner, normalizePath } from 'vite';
5
+ import { resolveProjectRoot } from '../utils/resolveProjectRoot.js';
6
+ export const initializeViteHMR = async ()=>{
7
+ const projectRoot = resolveProjectRoot(fileURLToPath(import.meta.url));
8
+ if (projectRoot) {
9
+ process.chdir(projectRoot);
10
+ }
11
+ const vite = await createServer({
12
+ clearScreen: false,
13
+ configFile: false,
14
+ envDir: false,
15
+ logLevel: 'error',
16
+ optimizeDeps: {
17
+ noDiscovery: true
18
+ },
19
+ publicDir: false,
20
+ resolve: {
21
+ alias: {
22
+ 'payload-mcp:config': normalizePath(findConfig())
23
+ },
24
+ tsconfigPaths: true
25
+ },
26
+ server: {
27
+ middlewareMode: true,
28
+ ws: false
29
+ },
30
+ ssr: {
31
+ noExternal: [
32
+ /^@payloadcms\//,
33
+ /^payload$/
34
+ ]
35
+ }
36
+ });
37
+ const runner = createServerModuleRunner(vite.environments.ssr);
38
+ const boundaryPath = fileURLToPath(new URL('./viteConfigBoundary.js', import.meta.url));
39
+ const boundary = await runner.import(boundaryPath);
40
+ const config = boundary.getConfig();
41
+ return {
42
+ config,
43
+ connect: async ()=>{
44
+ const payload = await getPayload({
45
+ config,
46
+ cron: false,
47
+ disableOnInit: true
48
+ });
49
+ let payloadReloadQueue = Promise.resolve();
50
+ const reloadPayload = (nextConfig)=>{
51
+ payloadReloadQueue = payloadReloadQueue.then(()=>reload(nextConfig, payload, false)).catch((error)=>console.error('[payload-mcp] config reload failed:', error));
52
+ return payloadReloadQueue;
53
+ };
54
+ boundary.subscribe(reloadPayload);
55
+ const latestConfig = boundary.getConfig();
56
+ if (config !== latestConfig) {
57
+ await reloadPayload(latestConfig);
58
+ }
59
+ }
60
+ };
61
+ };
62
+
63
+ //# sourceMappingURL=initializeViteHMR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/bin/initializeViteHMR.ts"],"sourcesContent":["import type { SanitizedConfig } from 'payload'\n\n/* eslint-disable no-console */\nimport { fileURLToPath } from 'node:url'\nimport { getPayload, reload } from 'payload'\nimport { findConfig } from 'payload/node'\nimport { createServer, createServerModuleRunner, normalizePath } from 'vite'\n\nimport type * as ConfigBoundary from './viteConfigBoundary.js'\n\nimport { resolveProjectRoot } from '../utils/resolveProjectRoot.js'\n\ntype ViteHMR = {\n config: SanitizedConfig\n connect: () => Promise<void>\n}\n\nexport const initializeViteHMR = async (): Promise<ViteHMR> => {\n const projectRoot = resolveProjectRoot(fileURLToPath(import.meta.url))\n if (projectRoot) {\n process.chdir(projectRoot)\n }\n\n const vite = await createServer({\n clearScreen: false,\n configFile: false,\n envDir: false,\n logLevel: 'error',\n optimizeDeps: { noDiscovery: true },\n publicDir: false,\n resolve: { alias: { 'payload-mcp:config': normalizePath(findConfig()) }, tsconfigPaths: true },\n server: { middlewareMode: true, ws: false },\n ssr: { noExternal: [/^@payloadcms\\//, /^payload$/] },\n })\n const runner = createServerModuleRunner(vite.environments.ssr)\n const boundaryPath = fileURLToPath(new URL('./viteConfigBoundary.js', import.meta.url))\n const boundary = await runner.import<typeof ConfigBoundary>(boundaryPath)\n const config = boundary.getConfig()\n\n return {\n config,\n connect: async () => {\n const payload = await getPayload({ config, cron: false, disableOnInit: true })\n let payloadReloadQueue = Promise.resolve()\n const reloadPayload = (nextConfig: SanitizedConfig): Promise<void> => {\n payloadReloadQueue = payloadReloadQueue\n .then(() => reload(nextConfig, payload, false))\n .catch((error) => console.error('[payload-mcp] config reload failed:', error))\n return payloadReloadQueue\n }\n\n boundary.subscribe(reloadPayload)\n\n const latestConfig = boundary.getConfig()\n if (config !== latestConfig) {\n await reloadPayload(latestConfig)\n }\n },\n }\n}\n"],"names":["fileURLToPath","getPayload","reload","findConfig","createServer","createServerModuleRunner","normalizePath","resolveProjectRoot","initializeViteHMR","projectRoot","url","process","chdir","vite","clearScreen","configFile","envDir","logLevel","optimizeDeps","noDiscovery","publicDir","resolve","alias","tsconfigPaths","server","middlewareMode","ws","ssr","noExternal","runner","environments","boundaryPath","URL","boundary","import","config","getConfig","connect","payload","cron","disableOnInit","payloadReloadQueue","Promise","reloadPayload","nextConfig","then","catch","error","console","subscribe","latestConfig"],"mappings":"AAEA,6BAA6B,GAC7B,SAASA,aAAa,QAAQ,WAAU;AACxC,SAASC,UAAU,EAAEC,MAAM,QAAQ,UAAS;AAC5C,SAASC,UAAU,QAAQ,eAAc;AACzC,SAASC,YAAY,EAAEC,wBAAwB,EAAEC,aAAa,QAAQ,OAAM;AAI5E,SAASC,kBAAkB,QAAQ,iCAAgC;AAOnE,OAAO,MAAMC,oBAAoB;IAC/B,MAAMC,cAAcF,mBAAmBP,cAAc,YAAYU,GAAG;IACpE,IAAID,aAAa;QACfE,QAAQC,KAAK,CAACH;IAChB;IAEA,MAAMI,OAAO,MAAMT,aAAa;QAC9BU,aAAa;QACbC,YAAY;QACZC,QAAQ;QACRC,UAAU;QACVC,cAAc;YAAEC,aAAa;QAAK;QAClCC,WAAW;QACXC,SAAS;YAAEC,OAAO;gBAAE,sBAAsBhB,cAAcH;YAAc;YAAGoB,eAAe;QAAK;QAC7FC,QAAQ;YAAEC,gBAAgB;YAAMC,IAAI;QAAM;QAC1CC,KAAK;YAAEC,YAAY;gBAAC;gBAAkB;aAAY;QAAC;IACrD;IACA,MAAMC,SAASxB,yBAAyBQ,KAAKiB,YAAY,CAACH,GAAG;IAC7D,MAAMI,eAAe/B,cAAc,IAAIgC,IAAI,2BAA2B,YAAYtB,GAAG;IACrF,MAAMuB,WAAW,MAAMJ,OAAOK,MAAM,CAAwBH;IAC5D,MAAMI,SAASF,SAASG,SAAS;IAEjC,OAAO;QACLD;QACAE,SAAS;YACP,MAAMC,UAAU,MAAMrC,WAAW;gBAAEkC;gBAAQI,MAAM;gBAAOC,eAAe;YAAK;YAC5E,IAAIC,qBAAqBC,QAAQrB,OAAO;YACxC,MAAMsB,gBAAgB,CAACC;gBACrBH,qBAAqBA,mBAClBI,IAAI,CAAC,IAAM3C,OAAO0C,YAAYN,SAAS,QACvCQ,KAAK,CAAC,CAACC,QAAUC,QAAQD,KAAK,CAAC,uCAAuCA;gBACzE,OAAON;YACT;YAEAR,SAASgB,SAAS,CAACN;YAEnB,MAAMO,eAAejB,SAASG,SAAS;YACvC,IAAID,WAAWe,cAAc;gBAC3B,MAAMP,cAAcO;YACtB;QACF;IACF;AACF,EAAC"}
@@ -0,0 +1,6 @@
1
+ import type { SanitizedConfig } from 'payload';
2
+ type ConfigListener = (config: SanitizedConfig) => Promise<void> | void;
3
+ export declare const getConfig: () => SanitizedConfig;
4
+ export declare const subscribe: (nextListener: ConfigListener) => void;
5
+ export {};
6
+ //# sourceMappingURL=viteConfigBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viteConfigBoundary.d.ts","sourceRoot":"","sources":["../../src/bin/viteConfigBoundary.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAM9C,KAAK,cAAc,GAAG,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAavE,eAAO,MAAM,SAAS,QAAO,eAAyB,CAAA;AAEtD,eAAO,MAAM,SAAS,GAAI,cAAc,cAAc,KAAG,IAExD,CAAA"}
@@ -0,0 +1,25 @@
1
+ /// <reference types="vite/client" />
2
+ /* eslint-disable no-console */ // @ts-expect-error - The Vite initializer resolves this ID to the Payload config.
3
+ import * as configModule from 'payload-mcp:config';
4
+ let listener;
5
+ let configQueue = Promise.resolve();
6
+ const resolveConfig = async (module)=>{
7
+ const config = module;
8
+ return await (config.default ?? module);
9
+ };
10
+ let config = await resolveConfig(configModule);
11
+ export const getConfig = ()=>config;
12
+ export const subscribe = (nextListener)=>{
13
+ listener = nextListener;
14
+ };
15
+ import.meta.hot?.accept('payload-mcp:config', (nextModule)=>{
16
+ if (!nextModule) {
17
+ return;
18
+ }
19
+ configQueue = configQueue.then(async ()=>{
20
+ config = await resolveConfig(nextModule);
21
+ await listener?.(config);
22
+ }).catch((error)=>console.error('[payload-mcp] config reload failed:', error));
23
+ });
24
+
25
+ //# sourceMappingURL=viteConfigBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/bin/viteConfigBoundary.ts"],"sourcesContent":["/// <reference types=\"vite/client\" />\n\nimport type { SanitizedConfig } from 'payload'\n\n/* eslint-disable no-console */\n// @ts-expect-error - The Vite initializer resolves this ID to the Payload config.\nimport * as configModule from 'payload-mcp:config'\n\ntype ConfigListener = (config: SanitizedConfig) => Promise<void> | void\n\nlet listener: ConfigListener | undefined\nlet configQueue = Promise.resolve()\n\nconst resolveConfig = async (module: unknown): Promise<SanitizedConfig> => {\n const config = module as { default?: unknown }\n\n return (await (config.default ?? module)) as SanitizedConfig\n}\n\nlet config = await resolveConfig(configModule)\n\nexport const getConfig = (): SanitizedConfig => config\n\nexport const subscribe = (nextListener: ConfigListener): void => {\n listener = nextListener\n}\n\nimport.meta.hot?.accept('payload-mcp:config', (nextModule) => {\n if (!nextModule) {\n return\n }\n\n configQueue = configQueue\n .then(async () => {\n config = await resolveConfig(nextModule)\n await listener?.(config)\n })\n .catch((error) => console.error('[payload-mcp] config reload failed:', error))\n})\n"],"names":["configModule","listener","configQueue","Promise","resolve","resolveConfig","module","config","default","getConfig","subscribe","nextListener","hot","accept","nextModule","then","catch","error","console"],"mappings":"AAAA,qCAAqC;AAIrC,6BAA6B,GAC7B,kFAAkF;AAClF,YAAYA,kBAAkB,qBAAoB;AAIlD,IAAIC;AACJ,IAAIC,cAAcC,QAAQC,OAAO;AAEjC,MAAMC,gBAAgB,OAAOC;IAC3B,MAAMC,SAASD;IAEf,OAAQ,MAAOC,CAAAA,OAAOC,OAAO,IAAIF,MAAK;AACxC;AAEA,IAAIC,SAAS,MAAMF,cAAcL;AAEjC,OAAO,MAAMS,YAAY,IAAuBF,OAAM;AAEtD,OAAO,MAAMG,YAAY,CAACC;IACxBV,WAAWU;AACb,EAAC;AAED,YAAYC,GAAG,EAAEC,OAAO,sBAAsB,CAACC;IAC7C,IAAI,CAACA,YAAY;QACf;IACF;IAEAZ,cAAcA,YACXa,IAAI,CAAC;QACJR,SAAS,MAAMF,cAAcS;QAC7B,MAAMb,WAAWM;IACnB,GACCS,KAAK,CAAC,CAACC,QAAUC,QAAQD,KAAK,CAAC,uCAAuCA;AAC3E"}
@@ -0,0 +1,3 @@
1
+ import type { MCPAccessArgs } from './types.js';
2
+ export declare const defaultAccess: ({ req }: MCPAccessArgs) => boolean;
3
+ //# sourceMappingURL=defaultAccess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultAccess.d.ts","sourceRoot":"","sources":["../src/defaultAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,eAAO,MAAM,aAAa,GAAI,SAAS,aAAa,KAAG,OAA4B,CAAA"}
@@ -0,0 +1,3 @@
1
+ export const defaultAccess = ({ req })=>Boolean(req.user);
2
+
3
+ //# sourceMappingURL=defaultAccess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/defaultAccess.ts"],"sourcesContent":["import type { MCPAccessArgs } from './types.js'\n\nexport const defaultAccess = ({ req }: MCPAccessArgs): boolean => Boolean(req.user)\n"],"names":["defaultAccess","req","Boolean","user"],"mappings":"AAEA,OAAO,MAAMA,gBAAgB,CAAC,EAAEC,GAAG,EAAiB,GAAcC,QAAQD,IAAIE,IAAI,EAAC"}
@@ -0,0 +1,26 @@
1
+ import type { CollectionTool, GlobalTool, Prompt, Tool, ToolInputSchema } from './types.js';
2
+ /**
3
+ * Two-stage builder: pass the schema/metadata first, then chain `.handler(fn)`. Splitting the
4
+ * call lets TypeScript resolve `TSchema` from `input` (call 1) before contextually typing the
5
+ * handler (call 2). A single-call API hit a TS limitation where property order in the literal
6
+ * decided whether `TSchema` was inferred or pinned to its default.
7
+ *
8
+ * defineCollectionTool({ description, input })
9
+ * .handler(({ input }) => …) // ← input is fully typed here regardless of order
10
+ *
11
+ * Config and handler signatures are derived from `Tool` / `CollectionTool` / `GlobalTool` /
12
+ * `Prompt` via `Omit` + indexed access so there's no duplication with `types.ts`.
13
+ */
14
+ export declare const defineTool: <TSchema extends ToolInputSchema | undefined = ToolInputSchema | undefined>(args: Omit<Tool<TSchema>, "handler">) => {
15
+ handler: (fn: Tool<TSchema>["handler"]) => Tool;
16
+ };
17
+ export declare const defineCollectionTool: <TSchema extends ToolInputSchema | undefined = ToolInputSchema | undefined>(args: Omit<CollectionTool<TSchema>, "handler">) => {
18
+ handler: (fn: CollectionTool<TSchema>["handler"]) => CollectionTool;
19
+ };
20
+ export declare const defineGlobalTool: <TSchema extends ToolInputSchema | undefined = ToolInputSchema | undefined>(args: Omit<GlobalTool<TSchema>, "handler">) => {
21
+ handler: (fn: GlobalTool<TSchema>["handler"]) => GlobalTool;
22
+ };
23
+ export declare const definePrompt: <TSchema extends ToolInputSchema = ToolInputSchema>(args: Omit<Prompt<TSchema>, "handler">) => {
24
+ handler: (fn: Prompt<TSchema>["handler"]) => Prompt;
25
+ };
26
+ //# sourceMappingURL=defineTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineTool.d.ts","sourceRoot":"","sources":["../src/defineTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE3F;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,UAAU,GACrB,OAAO,SAAS,eAAe,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,EAEzE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,KACnC;IAAE,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAA;CAElD,CAAA;AAEF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,SAAS,eAAe,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,EAEzE,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,KAC7C;IAAE,OAAO,EAAE,CAAC,EAAE,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,cAAc,CAAA;CAEtE,CAAA;AAEF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,SAAS,eAAe,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,EAEzE,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,KACzC;IAAE,OAAO,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,UAAU,CAAA;CAE9D,CAAA;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,SAAS,eAAe,GAAG,eAAe,EAC5E,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,KACrC;IAAE,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,MAAM,CAAA;CAEtD,CAAA"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Two-stage builder: pass the schema/metadata first, then chain `.handler(fn)`. Splitting the
3
+ * call lets TypeScript resolve `TSchema` from `input` (call 1) before contextually typing the
4
+ * handler (call 2). A single-call API hit a TS limitation where property order in the literal
5
+ * decided whether `TSchema` was inferred or pinned to its default.
6
+ *
7
+ * defineCollectionTool({ description, input })
8
+ * .handler(({ input }) => …) // ← input is fully typed here regardless of order
9
+ *
10
+ * Config and handler signatures are derived from `Tool` / `CollectionTool` / `GlobalTool` /
11
+ * `Prompt` via `Omit` + indexed access so there's no duplication with `types.ts`.
12
+ */ export const defineTool = (args)=>({
13
+ handler: (fn)=>({
14
+ ...args,
15
+ handler: fn
16
+ })
17
+ });
18
+ export const defineCollectionTool = (args)=>({
19
+ handler: (fn)=>({
20
+ ...args,
21
+ handler: fn
22
+ })
23
+ });
24
+ export const defineGlobalTool = (args)=>({
25
+ handler: (fn)=>({
26
+ ...args,
27
+ handler: fn
28
+ })
29
+ });
30
+ export const definePrompt = (args)=>({
31
+ handler: (fn)=>({
32
+ ...args,
33
+ handler: fn
34
+ })
35
+ });
36
+
37
+ //# sourceMappingURL=defineTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/defineTool.ts"],"sourcesContent":["import type { CollectionTool, GlobalTool, Prompt, Tool, ToolInputSchema } from './types.js'\n\n/**\n * Two-stage builder: pass the schema/metadata first, then chain `.handler(fn)`. Splitting the\n * call lets TypeScript resolve `TSchema` from `input` (call 1) before contextually typing the\n * handler (call 2). A single-call API hit a TS limitation where property order in the literal\n * decided whether `TSchema` was inferred or pinned to its default.\n *\n * defineCollectionTool({ description, input })\n * .handler(({ input }) => …) // ← input is fully typed here regardless of order\n *\n * Config and handler signatures are derived from `Tool` / `CollectionTool` / `GlobalTool` /\n * `Prompt` via `Omit` + indexed access so there's no duplication with `types.ts`.\n */\n\nexport const defineTool = <\n TSchema extends ToolInputSchema | undefined = ToolInputSchema | undefined,\n>(\n args: Omit<Tool<TSchema>, 'handler'>,\n): { handler: (fn: Tool<TSchema>['handler']) => Tool } => ({\n handler: (fn) => ({ ...args, handler: fn }) as unknown as Tool,\n})\n\nexport const defineCollectionTool = <\n TSchema extends ToolInputSchema | undefined = ToolInputSchema | undefined,\n>(\n args: Omit<CollectionTool<TSchema>, 'handler'>,\n): { handler: (fn: CollectionTool<TSchema>['handler']) => CollectionTool } => ({\n handler: (fn) => ({ ...args, handler: fn }) as unknown as CollectionTool,\n})\n\nexport const defineGlobalTool = <\n TSchema extends ToolInputSchema | undefined = ToolInputSchema | undefined,\n>(\n args: Omit<GlobalTool<TSchema>, 'handler'>,\n): { handler: (fn: GlobalTool<TSchema>['handler']) => GlobalTool } => ({\n handler: (fn) => ({ ...args, handler: fn }) as unknown as GlobalTool,\n})\n\nexport const definePrompt = <TSchema extends ToolInputSchema = ToolInputSchema>(\n args: Omit<Prompt<TSchema>, 'handler'>,\n): { handler: (fn: Prompt<TSchema>['handler']) => Prompt } => ({\n handler: (fn) => ({ ...args, handler: fn }) as unknown as Prompt,\n})\n"],"names":["defineTool","args","handler","fn","defineCollectionTool","defineGlobalTool","definePrompt"],"mappings":"AAEA;;;;;;;;;;;CAWC,GAED,OAAO,MAAMA,aAAa,CAGxBC,OACyD,CAAA;QACzDC,SAAS,CAACC,KAAQ,CAAA;gBAAE,GAAGF,IAAI;gBAAEC,SAASC;YAAG,CAAA;IAC3C,CAAA,EAAE;AAEF,OAAO,MAAMC,uBAAuB,CAGlCH,OAC6E,CAAA;QAC7EC,SAAS,CAACC,KAAQ,CAAA;gBAAE,GAAGF,IAAI;gBAAEC,SAASC;YAAG,CAAA;IAC3C,CAAA,EAAE;AAEF,OAAO,MAAME,mBAAmB,CAG9BJ,OACqE,CAAA;QACrEC,SAAS,CAACC,KAAQ,CAAA;gBAAE,GAAGF,IAAI;gBAAEC,SAASC;YAAG,CAAA;IAC3C,CAAA,EAAE;AAEF,OAAO,MAAMG,eAAe,CAC1BL,OAC6D,CAAA;QAC7DC,SAAS,CAACC,KAAQ,CAAA;gBAAE,GAAGF,IAAI;gBAAEC,SAASC;YAAG,CAAA;IAC3C,CAAA,EAAE"}
@@ -0,0 +1,17 @@
1
+ import type { PayloadRequest } from 'payload';
2
+ import type { AuthorizedMCP, MCPItem } from '../types.js';
3
+ export type GetAuthorizedMCPArgs = {
4
+ overrideAccess: boolean;
5
+ req: PayloadRequest;
6
+ };
7
+ /**
8
+ * Authenticates an MCP request and removes items the user cannot access.
9
+ * `overrideAccess` skips Payload and MCP item access checks.
10
+ */
11
+ export declare const getAuthorizedMCP: (args: GetAuthorizedMCPArgs) => Promise<AuthorizedMCP>;
12
+ export declare const filterMCPItems: ({ items, overrideAccess, req, }: {
13
+ items: MCPItem[];
14
+ overrideAccess: boolean;
15
+ req: PayloadRequest;
16
+ }) => Promise<MCPItem[]>;
17
+ //# sourceMappingURL=access.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/endpoint/access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,SAAS,CAAA;AAInE,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAIzD,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,OAAO,CAAC,aAAa,CAkCnF,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,iCAIlC;IACD,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;CACpB,KAAG,OAAO,CAAC,OAAO,EAAE,CAkBpB,CAAA"}
@@ -0,0 +1,93 @@
1
+ import { getAccessResults, UnauthorizedError } from 'payload';
2
+ import { getPluginConfig } from '../utils/getPluginConfig.js';
3
+ /**
4
+ * Authenticates an MCP request and removes items the user cannot access.
5
+ * `overrideAccess` skips Payload and MCP item access checks.
6
+ */ export const getAuthorizedMCP = async ({ overrideAccess, req })=>{
7
+ const pluginConfig = getPluginConfig({
8
+ config: req.payload.config
9
+ });
10
+ if (pluginConfig.overrideGetAuthorizedMCP) {
11
+ return await pluginConfig.overrideGetAuthorizedMCP({
12
+ overrideAccess,
13
+ pluginConfig,
14
+ req
15
+ });
16
+ }
17
+ if (req.headers) {
18
+ const headers = new Headers(req.headers);
19
+ const hasAuthorization = headers.has('Authorization');
20
+ headers.set('DisableAutologin', 'true');
21
+ req.user = (await req.payload.auth({
22
+ headers,
23
+ req
24
+ })).user;
25
+ if (hasAuthorization && !req.user) {
26
+ throw new UnauthorizedError(req.t);
27
+ }
28
+ }
29
+ return {
30
+ items: await filterMCPItems({
31
+ items: pluginConfig.items,
32
+ overrideAccess,
33
+ req
34
+ }),
35
+ overrideAccess
36
+ };
37
+ };
38
+ export const filterMCPItems = async ({ items, overrideAccess, req })=>{
39
+ // Match Payload core: overrideAccess bypasses access evaluation
40
+ if (overrideAccess) {
41
+ return items;
42
+ }
43
+ const authorizedItems = [];
44
+ const permissions = await getAccessResults({
45
+ req
46
+ });
47
+ for (const item of items){
48
+ if (!await checkItemAccess({
49
+ item,
50
+ permissions,
51
+ req
52
+ })) {
53
+ continue;
54
+ }
55
+ authorizedItems.push(item);
56
+ }
57
+ return authorizedItems;
58
+ };
59
+ /**
60
+ * Runs MCP item access callbacks
61
+ */ const checkItemAccess = async ({ item, permissions, req })=>{
62
+ switch(item.type){
63
+ case 'collectionTool':
64
+ return !item.tool.access || await item.tool.access({
65
+ collectionSlug: item.collectionSlug,
66
+ permissions,
67
+ req
68
+ });
69
+ case 'globalTool':
70
+ return !item.tool.access || await item.tool.access({
71
+ globalSlug: item.globalSlug,
72
+ permissions,
73
+ req
74
+ });
75
+ case 'prompt':
76
+ return !item.prompt.access || await item.prompt.access({
77
+ permissions,
78
+ req
79
+ });
80
+ case 'resource':
81
+ return !item.resource.access || await item.resource.access({
82
+ permissions,
83
+ req
84
+ });
85
+ case 'tool':
86
+ return !item.tool.access || await item.tool.access({
87
+ permissions,
88
+ req
89
+ });
90
+ }
91
+ };
92
+
93
+ //# sourceMappingURL=access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/endpoint/access.ts"],"sourcesContent":["import type { PayloadRequest, SanitizedPermissions } from 'payload'\n\nimport { getAccessResults, UnauthorizedError } from 'payload'\n\nimport type { AuthorizedMCP, MCPItem } from '../types.js'\n\nimport { getPluginConfig } from '../utils/getPluginConfig.js'\n\nexport type GetAuthorizedMCPArgs = {\n overrideAccess: boolean\n req: PayloadRequest\n}\n\n/**\n * Authenticates an MCP request and removes items the user cannot access.\n * `overrideAccess` skips Payload and MCP item access checks.\n */\nexport const getAuthorizedMCP: (args: GetAuthorizedMCPArgs) => Promise<AuthorizedMCP> = async ({\n overrideAccess,\n req,\n}) => {\n const pluginConfig = getPluginConfig({ config: req.payload.config })\n\n if (pluginConfig.overrideGetAuthorizedMCP) {\n return await pluginConfig.overrideGetAuthorizedMCP({\n overrideAccess,\n pluginConfig,\n req,\n })\n }\n\n if (req.headers) {\n const headers = new Headers(req.headers)\n const hasAuthorization = headers.has('Authorization')\n\n headers.set('DisableAutologin', 'true')\n req.user = (await req.payload.auth({ headers, req })).user\n\n if (hasAuthorization && !req.user) {\n throw new UnauthorizedError(req.t)\n }\n }\n\n return {\n items: await filterMCPItems({\n items: pluginConfig.items,\n overrideAccess,\n req,\n }),\n overrideAccess,\n }\n}\n\nexport const filterMCPItems = async ({\n items,\n overrideAccess,\n req,\n}: {\n items: MCPItem[]\n overrideAccess: boolean\n req: PayloadRequest\n}): Promise<MCPItem[]> => {\n // Match Payload core: overrideAccess bypasses access evaluation\n if (overrideAccess) {\n return items\n }\n\n const authorizedItems: MCPItem[] = []\n\n const permissions = await getAccessResults({ req })\n\n for (const item of items) {\n if (!(await checkItemAccess({ item, permissions, req }))) {\n continue\n }\n authorizedItems.push(item)\n }\n\n return authorizedItems\n}\n\n/**\n * Runs MCP item access callbacks\n */\nconst checkItemAccess = async ({\n item,\n permissions,\n req,\n}: {\n item: MCPItem\n permissions?: SanitizedPermissions\n req: PayloadRequest\n}): Promise<boolean> => {\n switch (item.type) {\n case 'collectionTool':\n return (\n !item.tool.access ||\n (await item.tool.access({ collectionSlug: item.collectionSlug, permissions, req }))\n )\n case 'globalTool':\n return (\n !item.tool.access ||\n (await item.tool.access({ globalSlug: item.globalSlug, permissions, req }))\n )\n case 'prompt':\n return !item.prompt.access || (await item.prompt.access({ permissions, req }))\n case 'resource':\n return !item.resource.access || (await item.resource.access({ permissions, req }))\n case 'tool':\n return !item.tool.access || (await item.tool.access({ permissions, req }))\n }\n}\n"],"names":["getAccessResults","UnauthorizedError","getPluginConfig","getAuthorizedMCP","overrideAccess","req","pluginConfig","config","payload","overrideGetAuthorizedMCP","headers","Headers","hasAuthorization","has","set","user","auth","t","items","filterMCPItems","authorizedItems","permissions","item","checkItemAccess","push","type","tool","access","collectionSlug","globalSlug","prompt","resource"],"mappings":"AAEA,SAASA,gBAAgB,EAAEC,iBAAiB,QAAQ,UAAS;AAI7D,SAASC,eAAe,QAAQ,8BAA6B;AAO7D;;;CAGC,GACD,OAAO,MAAMC,mBAA2E,OAAO,EAC7FC,cAAc,EACdC,GAAG,EACJ;IACC,MAAMC,eAAeJ,gBAAgB;QAAEK,QAAQF,IAAIG,OAAO,CAACD,MAAM;IAAC;IAElE,IAAID,aAAaG,wBAAwB,EAAE;QACzC,OAAO,MAAMH,aAAaG,wBAAwB,CAAC;YACjDL;YACAE;YACAD;QACF;IACF;IAEA,IAAIA,IAAIK,OAAO,EAAE;QACf,MAAMA,UAAU,IAAIC,QAAQN,IAAIK,OAAO;QACvC,MAAME,mBAAmBF,QAAQG,GAAG,CAAC;QAErCH,QAAQI,GAAG,CAAC,oBAAoB;QAChCT,IAAIU,IAAI,GAAG,AAAC,CAAA,MAAMV,IAAIG,OAAO,CAACQ,IAAI,CAAC;YAAEN;YAASL;QAAI,EAAC,EAAGU,IAAI;QAE1D,IAAIH,oBAAoB,CAACP,IAAIU,IAAI,EAAE;YACjC,MAAM,IAAId,kBAAkBI,IAAIY,CAAC;QACnC;IACF;IAEA,OAAO;QACLC,OAAO,MAAMC,eAAe;YAC1BD,OAAOZ,aAAaY,KAAK;YACzBd;YACAC;QACF;QACAD;IACF;AACF,EAAC;AAED,OAAO,MAAMe,iBAAiB,OAAO,EACnCD,KAAK,EACLd,cAAc,EACdC,GAAG,EAKJ;IACC,gEAAgE;IAChE,IAAID,gBAAgB;QAClB,OAAOc;IACT;IAEA,MAAME,kBAA6B,EAAE;IAErC,MAAMC,cAAc,MAAMrB,iBAAiB;QAAEK;IAAI;IAEjD,KAAK,MAAMiB,QAAQJ,MAAO;QACxB,IAAI,CAAE,MAAMK,gBAAgB;YAAED;YAAMD;YAAahB;QAAI,IAAK;YACxD;QACF;QACAe,gBAAgBI,IAAI,CAACF;IACvB;IAEA,OAAOF;AACT,EAAC;AAED;;CAEC,GACD,MAAMG,kBAAkB,OAAO,EAC7BD,IAAI,EACJD,WAAW,EACXhB,GAAG,EAKJ;IACC,OAAQiB,KAAKG,IAAI;QACf,KAAK;YACH,OACE,CAACH,KAAKI,IAAI,CAACC,MAAM,IAChB,MAAML,KAAKI,IAAI,CAACC,MAAM,CAAC;gBAAEC,gBAAgBN,KAAKM,cAAc;gBAAEP;gBAAahB;YAAI;QAEpF,KAAK;YACH,OACE,CAACiB,KAAKI,IAAI,CAACC,MAAM,IAChB,MAAML,KAAKI,IAAI,CAACC,MAAM,CAAC;gBAAEE,YAAYP,KAAKO,UAAU;gBAAER;gBAAahB;YAAI;QAE5E,KAAK;YACH,OAAO,CAACiB,KAAKQ,MAAM,CAACH,MAAM,IAAK,MAAML,KAAKQ,MAAM,CAACH,MAAM,CAAC;gBAAEN;gBAAahB;YAAI;QAC7E,KAAK;YACH,OAAO,CAACiB,KAAKS,QAAQ,CAACJ,MAAM,IAAK,MAAML,KAAKS,QAAQ,CAACJ,MAAM,CAAC;gBAAEN;gBAAahB;YAAI;QACjF,KAAK;YACH,OAAO,CAACiB,KAAKI,IAAI,CAACC,MAAM,IAAK,MAAML,KAAKI,IAAI,CAACC,MAAM,CAAC;gBAAEN;gBAAahB;YAAI;IAC3E;AACF"}
@@ -0,0 +1,3 @@
1
+ import type { PayloadHandler } from 'payload';
2
+ export declare const mcpEndpoint: PayloadHandler;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/endpoint/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,SAAS,CAAA;AAa7D,eAAO,MAAM,WAAW,EAAE,cA+DzB,CAAA"}
@@ -0,0 +1,87 @@
1
+ import { createMcpHandler, isLegacyRequest, WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/server';
2
+ import { APIError } from 'payload';
3
+ import { buildMcpServer } from '../mcp/buildMcpServer.js';
4
+ import { getPluginConfig } from '../utils/getPluginConfig.js';
5
+ import { getAuthorizedMCP } from './access.js';
6
+ export const mcpEndpoint = async (req)=>{
7
+ if (!req.url) {
8
+ throw new APIError('Missing request URL', 400);
9
+ }
10
+ req.payloadAPI = 'MCP';
11
+ const pluginConfig = getPluginConfig({
12
+ config: req.payload.config
13
+ });
14
+ const overrideAccessParam = new URL(req.url).searchParams.get('overrideAccess');
15
+ if (overrideAccessParam !== null && process.env.NODE_ENV !== 'development') {
16
+ throw new APIError('MCP overrideAccess is only available in development.', 400);
17
+ }
18
+ let overrideAccess = false;
19
+ if (overrideAccessParam === 'true') {
20
+ overrideAccess = true;
21
+ } else if (overrideAccessParam !== null && overrideAccessParam !== 'false') {
22
+ throw new APIError('MCP overrideAccess must be "true" or "false".', 400);
23
+ }
24
+ const authorizedMCP = await getAuthorizedMCP({
25
+ overrideAccess,
26
+ req
27
+ });
28
+ // Payload augments the original web-standard Request in place.
29
+ const mcpRequest = req;
30
+ // Keep the old JSON-only, stateless behavior because the SDK's 2025 fallback uses SSE.
31
+ if (await isLegacyRequest(mcpRequest)) {
32
+ const server = buildMcpServer({
33
+ authorizedMCP,
34
+ pluginConfig,
35
+ req
36
+ });
37
+ const transport = new WebStandardStreamableHTTPServerTransport({
38
+ enableJsonResponse: true,
39
+ sessionIdGenerator: undefined
40
+ });
41
+ transport.onerror = (err)=>{
42
+ req.payload.logger.error({
43
+ err,
44
+ msg: 'Error serving legacy MCP request'
45
+ });
46
+ };
47
+ try {
48
+ await server.connect(transport);
49
+ return await transport.handleRequest(mcpRequest);
50
+ } finally{
51
+ await server.close().catch((err)=>{
52
+ req.payload.logger.error({
53
+ err,
54
+ msg: 'Error closing MCP server'
55
+ });
56
+ });
57
+ }
58
+ }
59
+ const handler = createMcpHandler(()=>buildMcpServer({
60
+ authorizedMCP,
61
+ pluginConfig,
62
+ req
63
+ }), {
64
+ legacy: 'reject',
65
+ // SDK subscriptions always use SSE, so disable them to keep every response JSON-only.
66
+ maxSubscriptions: 0,
67
+ onerror: (err)=>{
68
+ req.payload.logger.error({
69
+ err,
70
+ msg: 'Error serving modern MCP request'
71
+ });
72
+ },
73
+ responseMode: 'json'
74
+ });
75
+ try {
76
+ return await handler.fetch(mcpRequest);
77
+ } finally{
78
+ await handler.close().catch((err)=>{
79
+ req.payload.logger.error({
80
+ err,
81
+ msg: 'Error closing modern MCP handler'
82
+ });
83
+ });
84
+ }
85
+ };
86
+
87
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/endpoint/index.ts"],"sourcesContent":["import type { PayloadHandler, PayloadRequest } from 'payload'\n\nimport {\n createMcpHandler,\n isLegacyRequest,\n WebStandardStreamableHTTPServerTransport,\n} from '@modelcontextprotocol/server'\nimport { APIError } from 'payload'\n\nimport { buildMcpServer } from '../mcp/buildMcpServer.js'\nimport { getPluginConfig } from '../utils/getPluginConfig.js'\nimport { getAuthorizedMCP } from './access.js'\n\nexport const mcpEndpoint: PayloadHandler = async (req) => {\n if (!req.url) {\n throw new APIError('Missing request URL', 400)\n }\n\n req.payloadAPI = 'MCP' as const\n\n const pluginConfig = getPluginConfig({ config: req.payload.config })\n const overrideAccessParam = new URL(req.url).searchParams.get('overrideAccess')\n\n if (overrideAccessParam !== null && process.env.NODE_ENV !== 'development') {\n throw new APIError('MCP overrideAccess is only available in development.', 400)\n }\n\n let overrideAccess = false\n if (overrideAccessParam === 'true') {\n overrideAccess = true\n } else if (overrideAccessParam !== null && overrideAccessParam !== 'false') {\n throw new APIError('MCP overrideAccess must be \"true\" or \"false\".', 400)\n }\n\n const authorizedMCP = await getAuthorizedMCP({ overrideAccess, req })\n // Payload augments the original web-standard Request in place.\n const mcpRequest = req as PayloadRequest & Request\n\n // Keep the old JSON-only, stateless behavior because the SDK's 2025 fallback uses SSE.\n if (await isLegacyRequest(mcpRequest)) {\n const server = buildMcpServer({ authorizedMCP, pluginConfig, req })\n const transport = new WebStandardStreamableHTTPServerTransport({\n enableJsonResponse: true,\n sessionIdGenerator: undefined, // stateless mode\n })\n transport.onerror = (err) => {\n req.payload.logger.error({ err, msg: 'Error serving legacy MCP request' })\n }\n\n try {\n await server.connect(transport)\n return await transport.handleRequest(mcpRequest)\n } finally {\n await server.close().catch((err) => {\n req.payload.logger.error({ err, msg: 'Error closing MCP server' })\n })\n }\n }\n\n const handler = createMcpHandler(() => buildMcpServer({ authorizedMCP, pluginConfig, req }), {\n legacy: 'reject',\n // SDK subscriptions always use SSE, so disable them to keep every response JSON-only.\n maxSubscriptions: 0,\n onerror: (err) => {\n req.payload.logger.error({ err, msg: 'Error serving modern MCP request' })\n },\n responseMode: 'json',\n })\n\n try {\n return await handler.fetch(mcpRequest)\n } finally {\n await handler.close().catch((err) => {\n req.payload.logger.error({ err, msg: 'Error closing modern MCP handler' })\n })\n }\n}\n"],"names":["createMcpHandler","isLegacyRequest","WebStandardStreamableHTTPServerTransport","APIError","buildMcpServer","getPluginConfig","getAuthorizedMCP","mcpEndpoint","req","url","payloadAPI","pluginConfig","config","payload","overrideAccessParam","URL","searchParams","get","process","env","NODE_ENV","overrideAccess","authorizedMCP","mcpRequest","server","transport","enableJsonResponse","sessionIdGenerator","undefined","onerror","err","logger","error","msg","connect","handleRequest","close","catch","handler","legacy","maxSubscriptions","responseMode","fetch"],"mappings":"AAEA,SACEA,gBAAgB,EAChBC,eAAe,EACfC,wCAAwC,QACnC,+BAA8B;AACrC,SAASC,QAAQ,QAAQ,UAAS;AAElC,SAASC,cAAc,QAAQ,2BAA0B;AACzD,SAASC,eAAe,QAAQ,8BAA6B;AAC7D,SAASC,gBAAgB,QAAQ,cAAa;AAE9C,OAAO,MAAMC,cAA8B,OAAOC;IAChD,IAAI,CAACA,IAAIC,GAAG,EAAE;QACZ,MAAM,IAAIN,SAAS,uBAAuB;IAC5C;IAEAK,IAAIE,UAAU,GAAG;IAEjB,MAAMC,eAAeN,gBAAgB;QAAEO,QAAQJ,IAAIK,OAAO,CAACD,MAAM;IAAC;IAClE,MAAME,sBAAsB,IAAIC,IAAIP,IAAIC,GAAG,EAAEO,YAAY,CAACC,GAAG,CAAC;IAE9D,IAAIH,wBAAwB,QAAQI,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1E,MAAM,IAAIjB,SAAS,wDAAwD;IAC7E;IAEA,IAAIkB,iBAAiB;IACrB,IAAIP,wBAAwB,QAAQ;QAClCO,iBAAiB;IACnB,OAAO,IAAIP,wBAAwB,QAAQA,wBAAwB,SAAS;QAC1E,MAAM,IAAIX,SAAS,iDAAiD;IACtE;IAEA,MAAMmB,gBAAgB,MAAMhB,iBAAiB;QAAEe;QAAgBb;IAAI;IACnE,+DAA+D;IAC/D,MAAMe,aAAaf;IAEnB,uFAAuF;IACvF,IAAI,MAAMP,gBAAgBsB,aAAa;QACrC,MAAMC,SAASpB,eAAe;YAAEkB;YAAeX;YAAcH;QAAI;QACjE,MAAMiB,YAAY,IAAIvB,yCAAyC;YAC7DwB,oBAAoB;YACpBC,oBAAoBC;QACtB;QACAH,UAAUI,OAAO,GAAG,CAACC;YACnBtB,IAAIK,OAAO,CAACkB,MAAM,CAACC,KAAK,CAAC;gBAAEF;gBAAKG,KAAK;YAAmC;QAC1E;QAEA,IAAI;YACF,MAAMT,OAAOU,OAAO,CAACT;YACrB,OAAO,MAAMA,UAAUU,aAAa,CAACZ;QACvC,SAAU;YACR,MAAMC,OAAOY,KAAK,GAAGC,KAAK,CAAC,CAACP;gBAC1BtB,IAAIK,OAAO,CAACkB,MAAM,CAACC,KAAK,CAAC;oBAAEF;oBAAKG,KAAK;gBAA2B;YAClE;QACF;IACF;IAEA,MAAMK,UAAUtC,iBAAiB,IAAMI,eAAe;YAAEkB;YAAeX;YAAcH;QAAI,IAAI;QAC3F+B,QAAQ;QACR,sFAAsF;QACtFC,kBAAkB;QAClBX,SAAS,CAACC;YACRtB,IAAIK,OAAO,CAACkB,MAAM,CAACC,KAAK,CAAC;gBAAEF;gBAAKG,KAAK;YAAmC;QAC1E;QACAQ,cAAc;IAChB;IAEA,IAAI;QACF,OAAO,MAAMH,QAAQI,KAAK,CAACnB;IAC7B,SAAU;QACR,MAAMe,QAAQF,KAAK,GAAGC,KAAK,CAAC,CAACP;YAC3BtB,IAAIK,OAAO,CAACkB,MAAM,CAACC,KAAK,CAAC;gBAAEF;gBAAKG,KAAK;YAAmC;QAC1E;IACF;AACF,EAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAA"}
@@ -0,0 +1,4 @@
1
+ 'use client';
2
+ export { };
3
+
4
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["'use client'\n\nexport {}\n"],"names":[],"mappings":"AAAA;AAEA,WAAS"}
@@ -0,0 +1,2 @@
1
+ export { filterMCPItems, getAuthorizedMCP } from '../endpoint/access.js';
2
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/exports/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { filterMCPItems, getAuthorizedMCP } from '../endpoint/access.js';
2
+
3
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/exports/internal.ts"],"sourcesContent":["export { filterMCPItems, getAuthorizedMCP } from '../endpoint/access.js'\n"],"names":["filterMCPItems","getAuthorizedMCP"],"mappings":"AAAA,SAASA,cAAc,EAAEC,gBAAgB,QAAQ,wBAAuB"}
package/dist/index.d.ts CHANGED
@@ -1,17 +1,14 @@
1
- import type { MCPAccessSettings, MCPPluginConfig } from './types.js';
1
+ import type { AuthorizedMCP, MCPPluginConfig, SanitizedMCPPluginConfig } from './types.js';
2
2
  declare module 'payload' {
3
- interface PayloadRequest {
4
- payloadAPI: 'GraphQL' | 'local' | 'MCP' | 'REST';
3
+ interface PayloadRequestAPI {
4
+ MCP: true;
5
5
  }
6
6
  interface RegisteredPlugins {
7
+ /** After the plugin's `plugin` callback runs, `options` holds the sanitized config. */
7
8
  '@payloadcms/plugin-mcp': MCPPluginConfig;
8
9
  }
9
10
  }
10
- export type { MCPAccessSettings, MCPPluginConfig };
11
- /**
12
- * The MCP Plugin for Payload. This plugin allows you to add MCP capabilities to your Payload project.
13
- *
14
- * @param pluginOptions - The options for the MCP plugin.
15
- */
11
+ export type { AuthorizedMCP, MCPPluginConfig, SanitizedMCPPluginConfig };
12
+ export { defineCollectionTool, defineGlobalTool, definePrompt, defineTool } from './defineTool.js';
16
13
  export declare const mcpPlugin: (options: MCPPluginConfig) => import("payload").Plugin;
17
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAKpE,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAiB,cAAc;QAC7B,UAAU,EAAE,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;KACjD;IACD,UAAU,iBAAiB;QACzB,wBAAwB,EAAE,eAAe,CAAA;KAC1C;CACF;AAID,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAA;AAElD;;;;GAIG;AACH,eAAO,MAAM,SAAS,wDAuFpB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAK1F,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAiB,iBAAiB;QAChC,GAAG,EAAE,IAAI,CAAA;KACV;IACD,UAAU,iBAAiB;QACzB,uFAAuF;QACvF,wBAAwB,EAAE,eAAe,CAAA;KAC1C;CACF;AAED,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,CAAA;AAExE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAElG,eAAO,MAAM,SAAS,wDAiCpB,CAAA"}