@payloadcms/plugin-mcp 4.0.0-internal.e16cf59 → 4.0.0-internal.e387174

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 (417) hide show
  1. package/LICENSE.md +1 -1
  2. package/bin.js +46 -0
  3. package/dist/defaultAccess.d.ts +3 -0
  4. package/dist/defaultAccess.d.ts.map +1 -0
  5. package/dist/defaultAccess.js +3 -0
  6. package/dist/defaultAccess.js.map +1 -0
  7. package/dist/defineTool.d.ts +26 -0
  8. package/dist/defineTool.d.ts.map +1 -0
  9. package/dist/defineTool.js +37 -0
  10. package/dist/defineTool.js.map +1 -0
  11. package/dist/endpoint/access.d.ts +17 -0
  12. package/dist/endpoint/access.d.ts.map +1 -0
  13. package/dist/endpoint/access.js +93 -0
  14. package/dist/endpoint/access.js.map +1 -0
  15. package/dist/endpoint/index.d.ts +3 -0
  16. package/dist/endpoint/index.d.ts.map +1 -0
  17. package/dist/endpoint/index.js +87 -0
  18. package/dist/endpoint/index.js.map +1 -0
  19. package/dist/exports/client.d.ts +2 -0
  20. package/dist/exports/client.d.ts.map +1 -0
  21. package/dist/exports/client.js +4 -0
  22. package/dist/exports/client.js.map +1 -0
  23. package/dist/exports/internal.d.ts +2 -0
  24. package/dist/exports/internal.d.ts.map +1 -0
  25. package/dist/exports/internal.js +3 -0
  26. package/dist/exports/internal.js.map +1 -0
  27. package/dist/index.d.ts +6 -9
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +39 -67
  30. package/dist/index.js.map +1 -1
  31. package/dist/mcp/buildMcpServer.d.ts +19 -0
  32. package/dist/mcp/buildMcpServer.d.ts.map +1 -0
  33. package/dist/mcp/buildMcpServer.js +223 -0
  34. package/dist/mcp/buildMcpServer.js.map +1 -0
  35. package/dist/mcp/builtin/collections/authTools.d.ts +7 -0
  36. package/dist/mcp/builtin/collections/authTools.d.ts.map +1 -0
  37. package/dist/mcp/builtin/collections/authTools.js +288 -0
  38. package/dist/mcp/builtin/collections/authTools.js.map +1 -0
  39. package/dist/mcp/builtin/collections/countTool.d.ts +2 -0
  40. package/dist/mcp/builtin/collections/countTool.d.ts.map +1 -0
  41. package/dist/mcp/builtin/collections/countTool.js +68 -0
  42. package/dist/mcp/builtin/collections/countTool.js.map +1 -0
  43. package/dist/mcp/builtin/collections/countVersionsTool.d.ts +2 -0
  44. package/dist/mcp/builtin/collections/countVersionsTool.d.ts.map +1 -0
  45. package/dist/mcp/builtin/collections/countVersionsTool.js +64 -0
  46. package/dist/mcp/builtin/collections/countVersionsTool.js.map +1 -0
  47. package/dist/mcp/builtin/collections/createTool.d.ts +2 -0
  48. package/dist/mcp/builtin/collections/createTool.d.ts.map +1 -0
  49. package/dist/mcp/builtin/collections/createTool.js +86 -0
  50. package/dist/mcp/builtin/collections/createTool.js.map +1 -0
  51. package/dist/mcp/builtin/collections/deleteTool.d.ts +2 -0
  52. package/dist/mcp/builtin/collections/deleteTool.d.ts.map +1 -0
  53. package/dist/mcp/builtin/collections/deleteTool.js +110 -0
  54. package/dist/mcp/builtin/collections/deleteTool.js.map +1 -0
  55. package/dist/mcp/builtin/collections/duplicateTool.d.ts +2 -0
  56. package/dist/mcp/builtin/collections/duplicateTool.d.ts.map +1 -0
  57. package/dist/mcp/builtin/collections/duplicateTool.js +96 -0
  58. package/dist/mcp/builtin/collections/duplicateTool.js.map +1 -0
  59. package/dist/mcp/builtin/collections/findDistinctTool.d.ts +2 -0
  60. package/dist/mcp/builtin/collections/findDistinctTool.d.ts.map +1 -0
  61. package/dist/mcp/builtin/collections/findDistinctTool.js +92 -0
  62. package/dist/mcp/builtin/collections/findDistinctTool.js.map +1 -0
  63. package/dist/mcp/builtin/collections/findTool.d.ts +2 -0
  64. package/dist/mcp/builtin/collections/findTool.d.ts.map +1 -0
  65. package/dist/mcp/builtin/collections/findTool.js +164 -0
  66. package/dist/mcp/builtin/collections/findTool.js.map +1 -0
  67. package/dist/mcp/builtin/collections/findVersionByIDTool.d.ts +2 -0
  68. package/dist/mcp/builtin/collections/findVersionByIDTool.d.ts.map +1 -0
  69. package/dist/mcp/builtin/collections/findVersionByIDTool.js +83 -0
  70. package/dist/mcp/builtin/collections/findVersionByIDTool.js.map +1 -0
  71. package/dist/mcp/builtin/collections/findVersionsTool.d.ts +2 -0
  72. package/dist/mcp/builtin/collections/findVersionsTool.d.ts.map +1 -0
  73. package/dist/mcp/builtin/collections/findVersionsTool.js +98 -0
  74. package/dist/mcp/builtin/collections/findVersionsTool.js.map +1 -0
  75. package/dist/mcp/builtin/collections/formatCollectionError.d.ts +9 -0
  76. package/dist/mcp/builtin/collections/formatCollectionError.d.ts.map +1 -0
  77. package/dist/mcp/builtin/collections/formatCollectionError.js +60 -0
  78. package/dist/mcp/builtin/collections/formatCollectionError.js.map +1 -0
  79. package/dist/mcp/builtin/collections/getCollectionSchemaTool.d.ts +2 -0
  80. package/dist/mcp/builtin/collections/getCollectionSchemaTool.d.ts.map +1 -0
  81. package/dist/mcp/builtin/collections/getCollectionSchemaTool.js +65 -0
  82. package/dist/mcp/builtin/collections/getCollectionSchemaTool.js.map +1 -0
  83. package/dist/mcp/builtin/collections/restoreVersionTool.d.ts +2 -0
  84. package/dist/mcp/builtin/collections/restoreVersionTool.d.ts.map +1 -0
  85. package/dist/mcp/builtin/collections/restoreVersionTool.js +81 -0
  86. package/dist/mcp/builtin/collections/restoreVersionTool.js.map +1 -0
  87. package/dist/mcp/builtin/collections/updateTool.d.ts +2 -0
  88. package/dist/mcp/builtin/collections/updateTool.d.ts.map +1 -0
  89. package/dist/mcp/builtin/collections/updateTool.js +198 -0
  90. package/dist/mcp/builtin/collections/updateTool.js.map +1 -0
  91. package/dist/mcp/builtin/getConfigInfoTool.d.ts +2 -0
  92. package/dist/mcp/builtin/getConfigInfoTool.d.ts.map +1 -0
  93. package/dist/mcp/builtin/getConfigInfoTool.js +68 -0
  94. package/dist/mcp/builtin/getConfigInfoTool.js.map +1 -0
  95. package/dist/mcp/builtin/globals/countVersionsTool.d.ts +2 -0
  96. package/dist/mcp/builtin/globals/countVersionsTool.d.ts.map +1 -0
  97. package/dist/mcp/builtin/globals/countVersionsTool.js +64 -0
  98. package/dist/mcp/builtin/globals/countVersionsTool.js.map +1 -0
  99. package/dist/mcp/builtin/globals/findTool.d.ts +2 -0
  100. package/dist/mcp/builtin/globals/findTool.d.ts.map +1 -0
  101. package/dist/mcp/builtin/globals/findTool.js +73 -0
  102. package/dist/mcp/builtin/globals/findTool.js.map +1 -0
  103. package/dist/mcp/builtin/globals/findVersionByIDTool.d.ts +2 -0
  104. package/dist/mcp/builtin/globals/findVersionByIDTool.d.ts.map +1 -0
  105. package/dist/mcp/builtin/globals/findVersionByIDTool.js +79 -0
  106. package/dist/mcp/builtin/globals/findVersionByIDTool.js.map +1 -0
  107. package/dist/mcp/builtin/globals/findVersionsTool.d.ts +2 -0
  108. package/dist/mcp/builtin/globals/findVersionsTool.d.ts.map +1 -0
  109. package/dist/mcp/builtin/globals/findVersionsTool.js +94 -0
  110. package/dist/mcp/builtin/globals/findVersionsTool.js.map +1 -0
  111. package/dist/mcp/builtin/globals/getGlobalSchemaTool.d.ts +2 -0
  112. package/dist/mcp/builtin/globals/getGlobalSchemaTool.d.ts.map +1 -0
  113. package/dist/mcp/builtin/globals/getGlobalSchemaTool.js +65 -0
  114. package/dist/mcp/builtin/globals/getGlobalSchemaTool.js.map +1 -0
  115. package/dist/mcp/builtin/globals/restoreVersionTool.d.ts +2 -0
  116. package/dist/mcp/builtin/globals/restoreVersionTool.d.ts.map +1 -0
  117. package/dist/mcp/builtin/globals/restoreVersionTool.js +77 -0
  118. package/dist/mcp/builtin/globals/restoreVersionTool.js.map +1 -0
  119. package/dist/mcp/builtin/globals/updateTool.d.ts +2 -0
  120. package/dist/mcp/builtin/globals/updateTool.d.ts.map +1 -0
  121. package/dist/mcp/builtin/globals/updateTool.js +87 -0
  122. package/dist/mcp/builtin/globals/updateTool.js.map +1 -0
  123. package/dist/mcp/builtin/validateEntityData.d.ts +14 -0
  124. package/dist/mcp/builtin/validateEntityData.d.ts.map +1 -0
  125. package/dist/mcp/builtin/validateEntityData.js +82 -0
  126. package/dist/mcp/builtin/validateEntityData.js.map +1 -0
  127. package/dist/mcp/builtinTools.d.ts +162 -0
  128. package/dist/mcp/builtinTools.d.ts.map +1 -0
  129. package/dist/mcp/builtinTools.js +163 -0
  130. package/dist/mcp/builtinTools.js.map +1 -0
  131. package/dist/mcp/sanitizeMCPConfig.d.ts +16 -0
  132. package/dist/mcp/sanitizeMCPConfig.d.ts.map +1 -0
  133. package/dist/mcp/sanitizeMCPConfig.js +230 -0
  134. package/dist/mcp/sanitizeMCPConfig.js.map +1 -0
  135. package/dist/stdio.d.ts +8 -0
  136. package/dist/stdio.d.ts.map +1 -0
  137. package/dist/stdio.js +126 -0
  138. package/dist/stdio.js.map +1 -0
  139. package/dist/types.d.ts +256 -447
  140. package/dist/types.d.ts.map +1 -1
  141. package/dist/types.js +4 -1
  142. package/dist/types.js.map +1 -1
  143. package/dist/utils/camelCase.d.ts.map +1 -1
  144. package/dist/utils/getLogger.d.ts +10 -0
  145. package/dist/utils/getLogger.d.ts.map +1 -0
  146. package/dist/utils/getLogger.js +22 -0
  147. package/dist/utils/getLogger.js.map +1 -0
  148. package/dist/utils/getPluginConfig.d.ts +12 -0
  149. package/dist/utils/getPluginConfig.d.ts.map +1 -0
  150. package/dist/utils/getPluginConfig.js +15 -0
  151. package/dist/utils/getPluginConfig.js.map +1 -0
  152. package/dist/utils/resolveProjectRoot.d.ts +7 -0
  153. package/dist/utils/resolveProjectRoot.d.ts.map +1 -0
  154. package/dist/utils/resolveProjectRoot.js +15 -0
  155. package/dist/utils/resolveProjectRoot.js.map +1 -0
  156. package/dist/utils/schemaConversion/filterFieldsByAccess.d.ts +28 -0
  157. package/dist/utils/schemaConversion/filterFieldsByAccess.d.ts.map +1 -0
  158. package/dist/utils/schemaConversion/filterFieldsByAccess.js +71 -0
  159. package/dist/utils/schemaConversion/filterFieldsByAccess.js.map +1 -0
  160. package/dist/utils/schemaConversion/getEntityInputSchema.d.ts +13 -0
  161. package/dist/utils/schemaConversion/getEntityInputSchema.d.ts.map +1 -0
  162. package/dist/utils/schemaConversion/getEntityInputSchema.js +66 -0
  163. package/dist/utils/schemaConversion/getEntityInputSchema.js.map +1 -0
  164. package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts +10 -0
  165. package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts.map +1 -0
  166. package/dist/utils/schemaConversion/sanitizeEntitySchema.js +384 -0
  167. package/dist/utils/schemaConversion/sanitizeEntitySchema.js.map +1 -0
  168. package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js +133 -0
  169. package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js.map +1 -0
  170. package/dist/utils/toStandardSchema.d.ts +5 -0
  171. package/dist/utils/toStandardSchema.d.ts.map +1 -0
  172. package/dist/utils/toStandardSchema.js +4 -0
  173. package/dist/utils/toStandardSchema.js.map +1 -0
  174. package/dist/utils/whereSchema.d.ts +9 -0
  175. package/dist/utils/whereSchema.d.ts.map +1 -0
  176. package/dist/utils/whereSchema.js +13 -0
  177. package/dist/utils/whereSchema.js.map +1 -0
  178. package/package.json +30 -10
  179. package/src/defaultAccess.ts +3 -0
  180. package/src/defineTool.ts +44 -0
  181. package/src/endpoint/access.ts +112 -0
  182. package/src/endpoint/index.ts +77 -0
  183. package/src/exports/client.ts +3 -0
  184. package/src/exports/internal.ts +1 -0
  185. package/src/index.ts +31 -89
  186. package/src/mcp/buildMcpServer.ts +284 -0
  187. package/src/mcp/builtin/collections/authTools.ts +269 -0
  188. package/src/mcp/builtin/collections/countTool.ts +73 -0
  189. package/src/mcp/builtin/collections/countVersionsTool.ts +69 -0
  190. package/src/mcp/builtin/collections/createTool.ts +117 -0
  191. package/src/mcp/builtin/collections/deleteTool.ts +125 -0
  192. package/src/mcp/builtin/collections/duplicateTool.ts +134 -0
  193. package/src/mcp/builtin/collections/findDistinctTool.ts +119 -0
  194. package/src/mcp/builtin/collections/findTool.ts +216 -0
  195. package/src/mcp/builtin/collections/findVersionByIDTool.ts +109 -0
  196. package/src/mcp/builtin/collections/findVersionsTool.ts +154 -0
  197. package/src/mcp/builtin/collections/formatCollectionError.ts +84 -0
  198. package/src/mcp/builtin/collections/getCollectionSchemaTool.ts +63 -0
  199. package/src/mcp/builtin/collections/restoreVersionTool.ts +107 -0
  200. package/src/mcp/builtin/collections/updateTool.ts +225 -0
  201. package/src/mcp/builtin/getConfigInfoTool.ts +67 -0
  202. package/src/mcp/builtin/globals/countVersionsTool.ts +68 -0
  203. package/src/mcp/builtin/globals/findTool.ts +105 -0
  204. package/src/mcp/builtin/globals/findVersionByIDTool.ts +103 -0
  205. package/src/mcp/builtin/globals/findVersionsTool.ts +147 -0
  206. package/src/mcp/builtin/globals/getGlobalSchemaTool.ts +63 -0
  207. package/src/mcp/builtin/globals/restoreVersionTool.ts +99 -0
  208. package/src/mcp/builtin/globals/updateTool.ts +115 -0
  209. package/src/mcp/builtin/validateEntityData.ts +132 -0
  210. package/src/mcp/builtinTools.ts +154 -0
  211. package/src/mcp/sanitizeMCPConfig.ts +278 -0
  212. package/src/stdio.ts +130 -0
  213. package/src/types.ts +304 -486
  214. package/src/utils/getLogger.ts +22 -0
  215. package/src/utils/getPluginConfig.ts +24 -0
  216. package/src/utils/resolveProjectRoot.ts +17 -0
  217. package/src/utils/schemaConversion/filterFieldsByAccess.ts +123 -0
  218. package/src/utils/schemaConversion/getEntityInputSchema.ts +96 -0
  219. package/src/utils/schemaConversion/sanitizeEntitySchema.spec.ts +96 -0
  220. package/src/utils/schemaConversion/sanitizeEntitySchema.ts +432 -0
  221. package/src/utils/toStandardSchema.ts +9 -0
  222. package/src/utils/whereSchema.ts +24 -0
  223. package/dist/collections/createApiKeysCollection.d.ts +0 -7
  224. package/dist/collections/createApiKeysCollection.d.ts.map +0 -1
  225. package/dist/collections/createApiKeysCollection.js +0 -317
  226. package/dist/collections/createApiKeysCollection.js.map +0 -1
  227. package/dist/defaults.d.ts +0 -4
  228. package/dist/defaults.d.ts.map +0 -1
  229. package/dist/defaults.js +0 -5
  230. package/dist/defaults.js.map +0 -1
  231. package/dist/endpoints/mcp.d.ts +0 -4
  232. package/dist/endpoints/mcp.d.ts.map +0 -1
  233. package/dist/endpoints/mcp.js +0 -71
  234. package/dist/endpoints/mcp.js.map +0 -1
  235. package/dist/mcp/createRequest.d.ts +0 -3
  236. package/dist/mcp/createRequest.d.ts.map +0 -1
  237. package/dist/mcp/createRequest.js +0 -14
  238. package/dist/mcp/createRequest.js.map +0 -1
  239. package/dist/mcp/getMcpHandler.d.ts +0 -4
  240. package/dist/mcp/getMcpHandler.d.ts.map +0 -1
  241. package/dist/mcp/getMcpHandler.js +0 -231
  242. package/dist/mcp/getMcpHandler.js.map +0 -1
  243. package/dist/mcp/helpers/config.d.ts +0 -22
  244. package/dist/mcp/helpers/config.d.ts.map +0 -1
  245. package/dist/mcp/helpers/config.js +0 -153
  246. package/dist/mcp/helpers/config.js.map +0 -1
  247. package/dist/mcp/helpers/fields.d.ts +0 -19
  248. package/dist/mcp/helpers/fields.d.ts.map +0 -1
  249. package/dist/mcp/helpers/fields.js +0 -102
  250. package/dist/mcp/helpers/fields.js.map +0 -1
  251. package/dist/mcp/helpers/fileValidation.d.ts +0 -67
  252. package/dist/mcp/helpers/fileValidation.d.ts.map +0 -1
  253. package/dist/mcp/helpers/fileValidation.js +0 -267
  254. package/dist/mcp/helpers/fileValidation.js.map +0 -1
  255. package/dist/mcp/registerTool.d.ts +0 -6
  256. package/dist/mcp/registerTool.d.ts.map +0 -1
  257. package/dist/mcp/registerTool.js +0 -18
  258. package/dist/mcp/registerTool.js.map +0 -1
  259. package/dist/mcp/tools/auth/auth.d.ts +0 -4
  260. package/dist/mcp/tools/auth/auth.d.ts.map +0 -1
  261. package/dist/mcp/tools/auth/auth.js +0 -57
  262. package/dist/mcp/tools/auth/auth.js.map +0 -1
  263. package/dist/mcp/tools/auth/forgotPassword.d.ts +0 -4
  264. package/dist/mcp/tools/auth/forgotPassword.d.ts.map +0 -1
  265. package/dist/mcp/tools/auth/forgotPassword.js +0 -48
  266. package/dist/mcp/tools/auth/forgotPassword.js.map +0 -1
  267. package/dist/mcp/tools/auth/login.d.ts +0 -4
  268. package/dist/mcp/tools/auth/login.d.ts.map +0 -1
  269. package/dist/mcp/tools/auth/login.js +0 -51
  270. package/dist/mcp/tools/auth/login.js.map +0 -1
  271. package/dist/mcp/tools/auth/resetPassword.d.ts +0 -4
  272. package/dist/mcp/tools/auth/resetPassword.d.ts.map +0 -1
  273. package/dist/mcp/tools/auth/resetPassword.js +0 -49
  274. package/dist/mcp/tools/auth/resetPassword.js.map +0 -1
  275. package/dist/mcp/tools/auth/unlock.d.ts +0 -4
  276. package/dist/mcp/tools/auth/unlock.d.ts.map +0 -1
  277. package/dist/mcp/tools/auth/unlock.js +0 -48
  278. package/dist/mcp/tools/auth/unlock.js.map +0 -1
  279. package/dist/mcp/tools/auth/verify.d.ts +0 -4
  280. package/dist/mcp/tools/auth/verify.d.ts.map +0 -1
  281. package/dist/mcp/tools/auth/verify.js +0 -45
  282. package/dist/mcp/tools/auth/verify.js.map +0 -1
  283. package/dist/mcp/tools/collection/create.d.ts +0 -10
  284. package/dist/mcp/tools/collection/create.d.ts.map +0 -1
  285. package/dist/mcp/tools/collection/create.js +0 -139
  286. package/dist/mcp/tools/collection/create.js.map +0 -1
  287. package/dist/mcp/tools/collection/delete.d.ts +0 -10
  288. package/dist/mcp/tools/collection/delete.d.ts.map +0 -1
  289. package/dist/mcp/tools/collection/delete.js +0 -154
  290. package/dist/mcp/tools/collection/delete.js.map +0 -1
  291. package/dist/mcp/tools/collection/find.d.ts +0 -10
  292. package/dist/mcp/tools/collection/find.d.ts.map +0 -1
  293. package/dist/mcp/tools/collection/find.js +0 -165
  294. package/dist/mcp/tools/collection/find.js.map +0 -1
  295. package/dist/mcp/tools/collection/update.d.ts +0 -10
  296. package/dist/mcp/tools/collection/update.d.ts.map +0 -1
  297. package/dist/mcp/tools/collection/update.js +0 -209
  298. package/dist/mcp/tools/collection/update.js.map +0 -1
  299. package/dist/mcp/tools/config/find.d.ts +0 -10
  300. package/dist/mcp/tools/config/find.d.ts.map +0 -1
  301. package/dist/mcp/tools/config/find.js +0 -97
  302. package/dist/mcp/tools/config/find.js.map +0 -1
  303. package/dist/mcp/tools/config/update.d.ts +0 -10
  304. package/dist/mcp/tools/config/update.d.ts.map +0 -1
  305. package/dist/mcp/tools/config/update.js +0 -215
  306. package/dist/mcp/tools/config/update.js.map +0 -1
  307. package/dist/mcp/tools/global/find.d.ts +0 -5
  308. package/dist/mcp/tools/global/find.d.ts.map +0 -1
  309. package/dist/mcp/tools/global/find.js +0 -82
  310. package/dist/mcp/tools/global/find.js.map +0 -1
  311. package/dist/mcp/tools/global/update.d.ts +0 -6
  312. package/dist/mcp/tools/global/update.d.ts.map +0 -1
  313. package/dist/mcp/tools/global/update.js +0 -124
  314. package/dist/mcp/tools/global/update.js.map +0 -1
  315. package/dist/mcp/tools/job/create.d.ts +0 -10
  316. package/dist/mcp/tools/job/create.d.ts.map +0 -1
  317. package/dist/mcp/tools/job/create.js +0 -293
  318. package/dist/mcp/tools/job/create.js.map +0 -1
  319. package/dist/mcp/tools/job/run.d.ts +0 -10
  320. package/dist/mcp/tools/job/run.d.ts.map +0 -1
  321. package/dist/mcp/tools/job/run.js +0 -129
  322. package/dist/mcp/tools/job/run.js.map +0 -1
  323. package/dist/mcp/tools/job/update.d.ts +0 -11
  324. package/dist/mcp/tools/job/update.d.ts.map +0 -1
  325. package/dist/mcp/tools/job/update.js +0 -186
  326. package/dist/mcp/tools/job/update.js.map +0 -1
  327. package/dist/mcp/tools/resource/create.d.ts +0 -6
  328. package/dist/mcp/tools/resource/create.d.ts.map +0 -1
  329. package/dist/mcp/tools/resource/create.js +0 -124
  330. package/dist/mcp/tools/resource/create.js.map +0 -1
  331. package/dist/mcp/tools/resource/delete.d.ts +0 -5
  332. package/dist/mcp/tools/resource/delete.d.ts.map +0 -1
  333. package/dist/mcp/tools/resource/delete.js +0 -151
  334. package/dist/mcp/tools/resource/delete.js.map +0 -1
  335. package/dist/mcp/tools/resource/find.d.ts +0 -5
  336. package/dist/mcp/tools/resource/find.d.ts.map +0 -1
  337. package/dist/mcp/tools/resource/find.js +0 -170
  338. package/dist/mcp/tools/resource/find.js.map +0 -1
  339. package/dist/mcp/tools/resource/update.d.ts +0 -6
  340. package/dist/mcp/tools/resource/update.d.ts.map +0 -1
  341. package/dist/mcp/tools/resource/update.js +0 -256
  342. package/dist/mcp/tools/resource/update.js.map +0 -1
  343. package/dist/mcp/tools/schemas.d.ts +0 -457
  344. package/dist/mcp/tools/schemas.d.ts.map +0 -1
  345. package/dist/mcp/tools/schemas.js +0 -243
  346. package/dist/mcp/tools/schemas.js.map +0 -1
  347. package/dist/utils/adminEntitySettings.d.ts +0 -17
  348. package/dist/utils/adminEntitySettings.d.ts.map +0 -1
  349. package/dist/utils/adminEntitySettings.js +0 -41
  350. package/dist/utils/adminEntitySettings.js.map +0 -1
  351. package/dist/utils/createApiKeyFields.d.ts +0 -15
  352. package/dist/utils/createApiKeyFields.d.ts.map +0 -1
  353. package/dist/utils/createApiKeyFields.js +0 -57
  354. package/dist/utils/createApiKeyFields.js.map +0 -1
  355. package/dist/utils/getEnabledSlugs.d.ts +0 -13
  356. package/dist/utils/getEnabledSlugs.d.ts.map +0 -1
  357. package/dist/utils/getEnabledSlugs.js +0 -32
  358. package/dist/utils/getEnabledSlugs.js.map +0 -1
  359. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts +0 -3
  360. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts.map +0 -1
  361. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js +0 -43
  362. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js.map +0 -1
  363. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts +0 -7
  364. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts.map +0 -1
  365. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js +0 -20
  366. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js.map +0 -1
  367. package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts +0 -13
  368. package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts.map +0 -1
  369. package/dist/utils/schemaConversion/sanitizeJsonSchema.js +0 -56
  370. package/dist/utils/schemaConversion/sanitizeJsonSchema.js.map +0 -1
  371. package/dist/utils/schemaConversion/simplifyRelationshipFields.d.ts +0 -20
  372. package/dist/utils/schemaConversion/simplifyRelationshipFields.d.ts.map +0 -1
  373. package/dist/utils/schemaConversion/simplifyRelationshipFields.js +0 -53
  374. package/dist/utils/schemaConversion/simplifyRelationshipFields.js.map +0 -1
  375. package/dist/utils/schemaConversion/transformPointFields.d.ts +0 -3
  376. package/dist/utils/schemaConversion/transformPointFields.d.ts.map +0 -1
  377. package/dist/utils/schemaConversion/transformPointFields.js +0 -51
  378. package/dist/utils/schemaConversion/transformPointFields.js.map +0 -1
  379. package/src/collections/createApiKeysCollection.ts +0 -373
  380. package/src/defaults.ts +0 -3
  381. package/src/endpoints/mcp.ts +0 -91
  382. package/src/mcp/createRequest.ts +0 -13
  383. package/src/mcp/getMcpHandler.ts +0 -545
  384. package/src/mcp/helpers/config.ts +0 -213
  385. package/src/mcp/helpers/fields.ts +0 -154
  386. package/src/mcp/helpers/fileValidation.ts +0 -362
  387. package/src/mcp/registerTool.ts +0 -22
  388. package/src/mcp/tools/auth/auth.ts +0 -71
  389. package/src/mcp/tools/auth/forgotPassword.ts +0 -70
  390. package/src/mcp/tools/auth/login.ts +0 -72
  391. package/src/mcp/tools/auth/resetPassword.ts +0 -61
  392. package/src/mcp/tools/auth/unlock.ts +0 -64
  393. package/src/mcp/tools/auth/verify.ts +0 -57
  394. package/src/mcp/tools/collection/create.ts +0 -210
  395. package/src/mcp/tools/collection/delete.ts +0 -211
  396. package/src/mcp/tools/collection/find.ts +0 -224
  397. package/src/mcp/tools/collection/update.ts +0 -290
  398. package/src/mcp/tools/config/find.ts +0 -128
  399. package/src/mcp/tools/config/update.ts +0 -280
  400. package/src/mcp/tools/global/find.ts +0 -128
  401. package/src/mcp/tools/global/update.ts +0 -207
  402. package/src/mcp/tools/job/create.ts +0 -416
  403. package/src/mcp/tools/job/run.ts +0 -167
  404. package/src/mcp/tools/job/update.ts +0 -274
  405. package/src/mcp/tools/resource/create.ts +0 -211
  406. package/src/mcp/tools/resource/delete.ts +0 -218
  407. package/src/mcp/tools/resource/find.ts +0 -246
  408. package/src/mcp/tools/resource/update.ts +0 -383
  409. package/src/mcp/tools/schemas.ts +0 -520
  410. package/src/utils/adminEntitySettings.ts +0 -40
  411. package/src/utils/createApiKeyFields.ts +0 -72
  412. package/src/utils/getEnabledSlugs.ts +0 -42
  413. package/src/utils/schemaConversion/convertCollectionSchemaToZod.ts +0 -52
  414. package/src/utils/schemaConversion/removeVirtualFieldsFromSchema.ts +0 -27
  415. package/src/utils/schemaConversion/sanitizeJsonSchema.ts +0 -62
  416. package/src/utils/schemaConversion/simplifyRelationshipFields.ts +0 -65
  417. package/src/utils/schemaConversion/transformPointFields.ts +0 -55
@@ -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.e16cf59",
3
+ "version": "4.0.0-internal.e387174",
4
4
  "description": "MCP (Model Context Protocol) capabilities with Payload",
5
5
  "keywords": [
6
6
  "plugin",
@@ -21,34 +21,54 @@
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/exports/internal.js",
43
+ "types": "./dist/exports/internal.d.ts",
44
+ "default": "./dist/exports/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
+ "@modelcontextprotocol/server": "2.0.0-beta.3",
59
+ "tsx": "4.22.4",
60
+ "zod": "^4.2.0"
45
61
  },
46
62
  "devDependencies": {
47
63
  "@payloadcms/eslint-config": "3.28.0",
48
- "payload": "4.0.0-internal.e16cf59"
64
+ "payload": "4.0.0-internal.e387174"
49
65
  },
50
66
  "peerDependencies": {
51
- "payload": "4.0.0-internal.e16cf59"
67
+ "payload": "4.0.0-internal.e387174"
68
+ },
69
+ "//deps_notes": {
70
+ "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.",
71
+ "tsx": "Required by the `bin.js` stdio mcp. Keep the version pinned to whatever `payload` ships to avoid duplicate installs."
52
72
  },
53
73
  "homepage:": "https://payloadcms.com",
54
74
  "scripts": {
@@ -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,112 @@
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
+ * Authenticates an MCP request and removes items the user cannot access.
16
+ * `overrideAccess` skips Payload and MCP item access checks.
17
+ */
18
+ export const getAuthorizedMCP: (args: GetAuthorizedMCPArgs) => Promise<AuthorizedMCP> = async ({
19
+ overrideAccess,
20
+ req,
21
+ }) => {
22
+ const pluginConfig = getPluginConfig({ config: req.payload.config })
23
+
24
+ if (pluginConfig.overrideGetAuthorizedMCP) {
25
+ return await pluginConfig.overrideGetAuthorizedMCP({
26
+ overrideAccess,
27
+ pluginConfig,
28
+ req,
29
+ })
30
+ }
31
+
32
+ if (req.headers) {
33
+ const headers = new Headers(req.headers)
34
+ const hasAuthorization = headers.has('Authorization')
35
+
36
+ headers.set('DisableAutologin', 'true')
37
+ req.user = (await req.payload.auth({ headers, req })).user
38
+
39
+ if (hasAuthorization && !req.user) {
40
+ throw new UnauthorizedError(req.t)
41
+ }
42
+ }
43
+
44
+ return {
45
+ items: await filterMCPItems({
46
+ items: pluginConfig.items,
47
+ overrideAccess,
48
+ req,
49
+ }),
50
+ overrideAccess,
51
+ }
52
+ }
53
+
54
+ export const filterMCPItems = async ({
55
+ items,
56
+ overrideAccess,
57
+ req,
58
+ }: {
59
+ items: MCPItem[]
60
+ overrideAccess: boolean
61
+ req: PayloadRequest
62
+ }): Promise<MCPItem[]> => {
63
+ // Match Payload core: overrideAccess bypasses access evaluation
64
+ if (overrideAccess) {
65
+ return items
66
+ }
67
+
68
+ const authorizedItems: MCPItem[] = []
69
+
70
+ const permissions = await getAccessResults({ req })
71
+
72
+ for (const item of items) {
73
+ if (!(await checkItemAccess({ item, permissions, req }))) {
74
+ continue
75
+ }
76
+ authorizedItems.push(item)
77
+ }
78
+
79
+ return authorizedItems
80
+ }
81
+
82
+ /**
83
+ * Runs MCP item access callbacks
84
+ */
85
+ const checkItemAccess = async ({
86
+ item,
87
+ permissions,
88
+ req,
89
+ }: {
90
+ item: MCPItem
91
+ permissions?: SanitizedPermissions
92
+ req: PayloadRequest
93
+ }): Promise<boolean> => {
94
+ switch (item.type) {
95
+ case 'collectionTool':
96
+ return (
97
+ !item.tool.access ||
98
+ (await item.tool.access({ collectionSlug: item.collectionSlug, permissions, req }))
99
+ )
100
+ case 'globalTool':
101
+ return (
102
+ !item.tool.access ||
103
+ (await item.tool.access({ globalSlug: item.globalSlug, permissions, req }))
104
+ )
105
+ case 'prompt':
106
+ return !item.prompt.access || (await item.prompt.access({ permissions, req }))
107
+ case 'resource':
108
+ return !item.resource.access || (await item.resource.access({ permissions, req }))
109
+ case 'tool':
110
+ return !item.tool.access || (await item.tool.access({ permissions, req }))
111
+ }
112
+ }
@@ -0,0 +1,77 @@
1
+ import type { PayloadHandler, PayloadRequest } from 'payload'
2
+
3
+ import {
4
+ createMcpHandler,
5
+ isLegacyRequest,
6
+ WebStandardStreamableHTTPServerTransport,
7
+ } from '@modelcontextprotocol/server'
8
+ import { APIError } from 'payload'
9
+
10
+ import { buildMcpServer } from '../mcp/buildMcpServer.js'
11
+ import { getPluginConfig } from '../utils/getPluginConfig.js'
12
+ import { getAuthorizedMCP } from './access.js'
13
+
14
+ export const mcpEndpoint: PayloadHandler = async (req) => {
15
+ if (!req.url) {
16
+ throw new APIError('Missing request URL', 400)
17
+ }
18
+
19
+ req.payloadAPI = 'MCP' as const
20
+
21
+ const pluginConfig = getPluginConfig({ config: req.payload.config })
22
+ const overrideAccessParam = new URL(req.url).searchParams.get('overrideAccess')
23
+
24
+ if (overrideAccessParam !== null && process.env.NODE_ENV !== 'development') {
25
+ throw new APIError('MCP overrideAccess is only available in development.', 400)
26
+ }
27
+
28
+ let overrideAccess = false
29
+ if (overrideAccessParam === 'true') {
30
+ overrideAccess = true
31
+ } else if (overrideAccessParam !== null && overrideAccessParam !== 'false') {
32
+ throw new APIError('MCP overrideAccess must be "true" or "false".', 400)
33
+ }
34
+
35
+ const authorizedMCP = await getAuthorizedMCP({ overrideAccess, req })
36
+ // Payload augments the original web-standard Request in place.
37
+ const mcpRequest = req as PayloadRequest & Request
38
+
39
+ // Keep the old JSON-only, stateless behavior because the SDK's 2025 fallback uses SSE.
40
+ if (await isLegacyRequest(mcpRequest)) {
41
+ const server = buildMcpServer({ authorizedMCP, pluginConfig, req })
42
+ const transport = new WebStandardStreamableHTTPServerTransport({
43
+ enableJsonResponse: true,
44
+ sessionIdGenerator: undefined, // stateless mode
45
+ })
46
+ transport.onerror = (err) => {
47
+ req.payload.logger.error({ err, msg: 'Error serving legacy MCP request' })
48
+ }
49
+
50
+ try {
51
+ await server.connect(transport)
52
+ return await transport.handleRequest(mcpRequest)
53
+ } finally {
54
+ await server.close().catch((err) => {
55
+ req.payload.logger.error({ err, msg: 'Error closing MCP server' })
56
+ })
57
+ }
58
+ }
59
+
60
+ const handler = createMcpHandler(() => buildMcpServer({ authorizedMCP, pluginConfig, req }), {
61
+ legacy: 'reject',
62
+ // SDK subscriptions always use SSE, so disable them to keep every response JSON-only.
63
+ maxSubscriptions: 0,
64
+ onerror: (err) => {
65
+ req.payload.logger.error({ err, msg: 'Error serving modern MCP request' })
66
+ },
67
+ responseMode: 'json',
68
+ })
69
+
70
+ try {
71
+ return await handler.fetch(mcpRequest)
72
+ } finally {
73
+ await handler.close().catch((err) => {
74
+ req.payload.logger.error({ err, msg: 'Error closing modern MCP handler' })
75
+ })
76
+ }
77
+ }
@@ -0,0 +1,3 @@
1
+ 'use client'
2
+
3
+ export {}
@@ -0,0 +1 @@
1
+ export { filterMCPItems, getAuthorizedMCP } from '../endpoint/access.js'
package/src/index.ts CHANGED
@@ -1,113 +1,55 @@
1
1
  import { definePlugin } from 'payload'
2
2
 
3
- import type { MCPAccessSettings, MCPPluginConfig } from './types.js'
3
+ import type { AuthorizedMCP, MCPPluginConfig, SanitizedMCPPluginConfig } from './types.js'
4
4
 
5
- import { createAPIKeysCollection } from './collections/createApiKeysCollection.js'
6
- import { initializeMCPHandler } from './endpoints/mcp.js'
5
+ import { mcpEndpoint } from './endpoint/index.js'
6
+ import { sanitizeMCPConfig } from './mcp/sanitizeMCPConfig.js'
7
7
 
8
8
  declare module 'payload' {
9
- export interface PayloadRequest {
10
- payloadAPI: 'GraphQL' | 'local' | 'MCP' | 'REST'
9
+ export interface PayloadRequestAPI {
10
+ MCP: true
11
11
  }
12
12
  interface RegisteredPlugins {
13
+ /** After the plugin's `plugin` callback runs, `options` holds the sanitized config. */
13
14
  '@payloadcms/plugin-mcp': MCPPluginConfig
14
15
  }
15
16
  }
16
17
 
17
- import { defaults } from './defaults.js'
18
+ export type { AuthorizedMCP, MCPPluginConfig, SanitizedMCPPluginConfig }
18
19
 
19
- export type { MCPAccessSettings, MCPPluginConfig }
20
+ export { defineCollectionTool, defineGlobalTool, definePrompt, defineTool } from './defineTool.js'
20
21
 
21
- /**
22
- * The MCP Plugin for Payload. This plugin allows you to add MCP capabilities to your Payload project.
23
- *
24
- * @param pluginOptions - The options for the MCP plugin.
25
- */
26
22
  export const mcpPlugin = definePlugin<MCPPluginConfig>({
27
23
  slug: '@payloadcms/plugin-mcp',
28
24
  order: 10,
29
- plugin: ({ config, plugins: _plugins, ...pluginOptions }) => {
30
- if (!config.collections) {
31
- config.collections = []
25
+ plugin: ({ config, options, plugins }) => {
26
+ const pluginConfig = sanitizeMCPConfig({ config, pluginConfig: options })
27
+
28
+ // Stash the sanitized config on plugin options so `getPluginConfig()` reads it.
29
+ const registered = plugins['@payloadcms/plugin-mcp']
30
+ if (registered) {
31
+ // @ts-expect-error
32
+ registered.sanitizedOptions = pluginConfig as unknown as typeof registered.options
32
33
  }
33
34
 
34
- // Collections
35
- const collections = pluginOptions.collections || {}
36
- // Globals
37
- const globals = pluginOptions.globals || {}
38
- // Extract custom tools for the global config
39
- const customTools =
40
- pluginOptions.mcp?.tools?.map((tool) => ({
41
- name: tool.name,
42
- description: tool.description,
43
- })) || []
44
-
45
- // User Collection
46
- pluginOptions.userCollection =
47
- pluginOptions.userCollection ?? config?.admin?.user ?? defaults.userCollection
48
-
49
- const experimentalTools = pluginOptions?.experimental?.tools || {}
50
-
51
- /**
52
- * API Keys
53
- * --------
54
- * High resolution control over MCP capabilities is crucial when using Payload with LLMs.
55
- *
56
- * This API Keys collection has ways for admins to create API keys and allow or disallow the MCP capabilities.
57
- * This is useful when Admins want to allow or disallow the use of the MCP capabilities in real time.
58
- * For example:
59
- * - If a collection has all of its capabilities enabled, admins can allow or disallow the create, update, delete, and find capabilities on that collection.
60
- * - If a collection only has the find capability enabled, admins can only allow or disallow the find capability on that collection.
61
- * - If a global has all of its capabilities enabled, admins can allow or disallow the find and update capabilities on that global.
62
- * - If a custom tool has gone haywire, admins can disallow that tool.
63
- *
64
- */
65
- const apiKeyCollection = createAPIKeysCollection(
66
- collections,
67
- globals,
68
- customTools,
69
- experimentalTools,
70
- pluginOptions,
71
- )
72
- if (pluginOptions.overrideApiKeyCollection) {
73
- config.collections.push(pluginOptions.overrideApiKeyCollection(apiKeyCollection))
74
- } else {
75
- config.collections.push(apiKeyCollection)
76
- }
77
-
78
- /**
79
- * If the plugin is disabled, we still want to keep added collections/fields so the database schema is consistent which is important for migrations.
80
- * If your plugin heavily modifies the database schema, you may want to remove this property.
81
- */
82
- if (pluginOptions.disabled) {
35
+ if (pluginConfig.disabled) {
83
36
  return config
84
37
  }
85
38
 
86
- if (!config.endpoints) {
87
- config.endpoints = []
39
+ return {
40
+ ...config,
41
+ endpoints: [
42
+ ...(config.endpoints ?? []),
43
+ // Payload prefixes /api, so the full path is /api/mcp.
44
+ { handler: mcpEndpoint, method: 'post', path: '/mcp' },
45
+ // Streamable HTTP's optional server=>client GET stream. We don't offer
46
+ // one, so answer 405 per spec-— clients then skip it cleanly
47
+ {
48
+ handler: () => new Response(null, { headers: { Allow: 'POST' }, status: 405 }),
49
+ method: 'get',
50
+ path: '/mcp',
51
+ },
52
+ ],
88
53
  }
89
-
90
- /**
91
- * This is the primary MCP Server Endpoint.
92
- * Payload will automatically add the /api prefix to the path, so the full path is `/api/mcp`
93
- * NOTE: This is only transport method until we add full support for SSE which will be another endpoint at `/api/sse`
94
- */
95
- config.endpoints.push({
96
- handler: initializeMCPHandler(pluginOptions),
97
- method: 'post',
98
- path: '/mcp',
99
- })
100
-
101
- /**
102
- * The GET response is always: {"jsonrpc":"2.0","error":{"code":-32000,"message":"Method not allowed."},"id":null} -- even with an API key
103
- * This is expected behavior and MCP clients should always use the POST endpoint.
104
- */
105
- config.endpoints.push({
106
- handler: initializeMCPHandler(pluginOptions),
107
- method: 'get',
108
- path: '/mcp',
109
- })
110
-
111
- return config
112
54
  },
113
55
  })