@payloadcms/plugin-mcp 4.0.0-internal.688c4d0 → 4.0.0-internal.77191e5

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 (494) hide show
  1. package/LICENSE.md +1 -1
  2. package/bin.js +7 -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 +8 -8
  8. package/dist/defineTool.d.ts.map +1 -1
  9. package/dist/endpoint/access.d.ts +12 -5
  10. package/dist/endpoint/access.d.ts.map +1 -1
  11. package/dist/endpoint/access.js +74 -103
  12. package/dist/endpoint/access.js.map +1 -1
  13. package/dist/endpoint/index.d.ts +1 -1
  14. package/dist/endpoint/index.d.ts.map +1 -1
  15. package/dist/endpoint/index.js +68 -17
  16. package/dist/endpoint/index.js.map +1 -1
  17. package/dist/exports/client.d.ts +1 -4
  18. package/dist/exports/client.d.ts.map +1 -1
  19. package/dist/exports/client.js +1 -4
  20. package/dist/exports/client.js.map +1 -1
  21. package/dist/exports/internal.d.ts +2 -0
  22. package/dist/exports/internal.d.ts.map +1 -0
  23. package/dist/exports/internal.js +3 -0
  24. package/dist/exports/internal.js.map +1 -0
  25. package/dist/index.d.ts +2 -2
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +3 -51
  28. package/dist/index.js.map +1 -1
  29. package/dist/mcp/buildMcpServer.d.ts +5 -5
  30. package/dist/mcp/buildMcpServer.d.ts.map +1 -1
  31. package/dist/mcp/buildMcpServer.js +69 -33
  32. package/dist/mcp/buildMcpServer.js.map +1 -1
  33. package/dist/mcp/builtin/collections/authTools.d.ts.map +1 -1
  34. package/dist/mcp/builtin/collections/authTools.js +122 -61
  35. package/dist/mcp/builtin/collections/authTools.js.map +1 -1
  36. package/dist/mcp/builtin/collections/countTool.d.ts +2 -0
  37. package/dist/mcp/builtin/collections/countTool.d.ts.map +1 -0
  38. package/dist/mcp/builtin/collections/countTool.js +63 -0
  39. package/dist/mcp/builtin/collections/countTool.js.map +1 -0
  40. package/dist/mcp/builtin/collections/countVersionsTool.d.ts +2 -0
  41. package/dist/mcp/builtin/collections/countVersionsTool.d.ts.map +1 -0
  42. package/dist/mcp/builtin/collections/countVersionsTool.js +60 -0
  43. package/dist/mcp/builtin/collections/countVersionsTool.js.map +1 -0
  44. package/dist/mcp/builtin/collections/createTool.d.ts +1 -1
  45. package/dist/mcp/builtin/collections/createTool.d.ts.map +1 -1
  46. package/dist/mcp/builtin/collections/createTool.js +109 -66
  47. package/dist/mcp/builtin/collections/createTool.js.map +1 -1
  48. package/dist/mcp/builtin/collections/deleteTool.d.ts.map +1 -1
  49. package/dist/mcp/builtin/collections/deleteTool.js +53 -44
  50. package/dist/mcp/builtin/collections/deleteTool.js.map +1 -1
  51. package/dist/mcp/builtin/collections/duplicateTool.d.ts +2 -0
  52. package/dist/mcp/builtin/collections/duplicateTool.d.ts.map +1 -0
  53. package/dist/mcp/builtin/collections/duplicateTool.js +90 -0
  54. package/dist/mcp/builtin/collections/duplicateTool.js.map +1 -0
  55. package/dist/mcp/builtin/collections/fileInput.d.ts +28 -0
  56. package/dist/mcp/builtin/collections/fileInput.d.ts.map +1 -0
  57. package/dist/mcp/builtin/collections/fileInput.js +88 -0
  58. package/dist/mcp/builtin/collections/fileInput.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 +77 -0
  62. package/dist/mcp/builtin/collections/findDistinctTool.js.map +1 -0
  63. package/dist/mcp/builtin/collections/findTool.d.ts.map +1 -1
  64. package/dist/mcp/builtin/collections/findTool.js +57 -55
  65. package/dist/mcp/builtin/collections/findTool.js.map +1 -1
  66. package/dist/mcp/builtin/collections/findVersionByIDTool.d.ts +2 -0
  67. package/dist/mcp/builtin/collections/findVersionByIDTool.d.ts.map +1 -0
  68. package/dist/mcp/builtin/collections/findVersionByIDTool.js +74 -0
  69. package/dist/mcp/builtin/collections/findVersionByIDTool.js.map +1 -0
  70. package/dist/mcp/builtin/collections/findVersionsTool.d.ts +2 -0
  71. package/dist/mcp/builtin/collections/findVersionsTool.d.ts.map +1 -0
  72. package/dist/mcp/builtin/collections/findVersionsTool.js +84 -0
  73. package/dist/mcp/builtin/collections/findVersionsTool.js.map +1 -0
  74. package/dist/mcp/builtin/collections/getCollectionSchemaTool.d.ts.map +1 -1
  75. package/dist/mcp/builtin/collections/getCollectionSchemaTool.js +61 -9
  76. package/dist/mcp/builtin/collections/getCollectionSchemaTool.js.map +1 -1
  77. package/dist/mcp/builtin/collections/restoreVersionTool.d.ts +2 -0
  78. package/dist/mcp/builtin/collections/restoreVersionTool.d.ts.map +1 -0
  79. package/dist/mcp/builtin/collections/restoreVersionTool.js +69 -0
  80. package/dist/mcp/builtin/collections/restoreVersionTool.js.map +1 -0
  81. package/dist/mcp/builtin/collections/updateTool.d.ts.map +1 -1
  82. package/dist/mcp/builtin/collections/updateTool.js +75 -102
  83. package/dist/mcp/builtin/collections/updateTool.js.map +1 -1
  84. package/dist/mcp/builtin/collections/uploadInstructionsTool.d.ts +2 -0
  85. package/dist/mcp/builtin/collections/uploadInstructionsTool.d.ts.map +1 -0
  86. package/dist/mcp/builtin/collections/uploadInstructionsTool.js +55 -0
  87. package/dist/mcp/builtin/collections/uploadInstructionsTool.js.map +1 -0
  88. package/dist/mcp/builtin/formatEntityError.d.ts +16 -0
  89. package/dist/mcp/builtin/formatEntityError.d.ts.map +1 -0
  90. package/dist/mcp/builtin/formatEntityError.js +55 -0
  91. package/dist/mcp/builtin/formatEntityError.js.map +1 -0
  92. package/dist/mcp/builtin/getConfigInfoTool.d.ts.map +1 -1
  93. package/dist/mcp/builtin/getConfigInfoTool.js +30 -10
  94. package/dist/mcp/builtin/getConfigInfoTool.js.map +1 -1
  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 +60 -0
  98. package/dist/mcp/builtin/globals/countVersionsTool.js.map +1 -0
  99. package/dist/mcp/builtin/globals/findTool.d.ts.map +1 -1
  100. package/dist/mcp/builtin/globals/findTool.js +26 -35
  101. package/dist/mcp/builtin/globals/findTool.js.map +1 -1
  102. package/dist/mcp/builtin/globals/findVersionByIDTool.d.ts +2 -0
  103. package/dist/mcp/builtin/globals/findVersionByIDTool.d.ts.map +1 -0
  104. package/dist/mcp/builtin/globals/findVersionByIDTool.js +68 -0
  105. package/dist/mcp/builtin/globals/findVersionByIDTool.js.map +1 -0
  106. package/dist/mcp/builtin/globals/findVersionsTool.d.ts +2 -0
  107. package/dist/mcp/builtin/globals/findVersionsTool.d.ts.map +1 -0
  108. package/dist/mcp/builtin/globals/findVersionsTool.js +78 -0
  109. package/dist/mcp/builtin/globals/findVersionsTool.js.map +1 -0
  110. package/dist/mcp/builtin/globals/getGlobalSchemaTool.d.ts.map +1 -1
  111. package/dist/mcp/builtin/globals/getGlobalSchemaTool.js +38 -8
  112. package/dist/mcp/builtin/globals/getGlobalSchemaTool.js.map +1 -1
  113. package/dist/mcp/builtin/globals/restoreVersionTool.d.ts +2 -0
  114. package/dist/mcp/builtin/globals/restoreVersionTool.d.ts.map +1 -0
  115. package/dist/mcp/builtin/globals/restoreVersionTool.js +70 -0
  116. package/dist/mcp/builtin/globals/restoreVersionTool.js.map +1 -0
  117. package/dist/mcp/builtin/globals/updateTool.d.ts.map +1 -1
  118. package/dist/mcp/builtin/globals/updateTool.js +38 -54
  119. package/dist/mcp/builtin/globals/updateTool.js.map +1 -1
  120. package/dist/mcp/builtinTools.d.ts +75 -12
  121. package/dist/mcp/builtinTools.d.ts.map +1 -1
  122. package/dist/mcp/builtinTools.js +75 -13
  123. package/dist/mcp/builtinTools.js.map +1 -1
  124. package/dist/mcp/sanitizeMCPConfig.d.ts +0 -1
  125. package/dist/mcp/sanitizeMCPConfig.d.ts.map +1 -1
  126. package/dist/mcp/sanitizeMCPConfig.js +72 -27
  127. package/dist/mcp/sanitizeMCPConfig.js.map +1 -1
  128. package/dist/stdio.d.ts +3 -3
  129. package/dist/stdio.d.ts.map +1 -1
  130. package/dist/stdio.js +84 -46
  131. package/dist/stdio.js.map +1 -1
  132. package/dist/types.d.ts +102 -94
  133. package/dist/types.d.ts.map +1 -1
  134. package/dist/types.js +2 -4
  135. package/dist/types.js.map +1 -1
  136. package/dist/utils/camelCase.d.ts.map +1 -1
  137. package/dist/utils/getPluginConfig.d.ts +1 -1
  138. package/dist/utils/getPluginConfig.js +1 -1
  139. package/dist/utils/getPluginConfig.js.map +1 -1
  140. package/dist/utils/resolveProjectRoot.d.ts.map +1 -1
  141. package/dist/utils/toStandardSchema.d.ts.map +1 -1
  142. package/package.json +11 -19
  143. package/src/defaultAccess.ts +3 -0
  144. package/src/endpoint/access.ts +79 -112
  145. package/src/endpoint/index.ts +58 -16
  146. package/src/exports/client.ts +2 -4
  147. package/src/exports/internal.ts +1 -0
  148. package/src/index.ts +5 -59
  149. package/src/mcp/buildMcpServer.ts +87 -50
  150. package/src/mcp/builtin/collections/authTools.ts +119 -75
  151. package/src/mcp/builtin/collections/countTool.ts +61 -0
  152. package/src/mcp/builtin/collections/countVersionsTool.ts +60 -0
  153. package/src/mcp/builtin/collections/createTool.ts +115 -82
  154. package/src/mcp/builtin/collections/deleteTool.ts +45 -64
  155. package/src/mcp/builtin/collections/duplicateTool.ts +84 -0
  156. package/src/mcp/builtin/collections/fileInput.spec.ts +93 -0
  157. package/src/mcp/builtin/collections/fileInput.ts +127 -0
  158. package/src/mcp/builtin/collections/findDistinctTool.ts +67 -0
  159. package/src/mcp/builtin/collections/findTool.ts +53 -96
  160. package/src/mcp/builtin/collections/findVersionByIDTool.ts +66 -0
  161. package/src/mcp/builtin/collections/findVersionsTool.ts +83 -0
  162. package/src/mcp/builtin/collections/getCollectionSchemaTool.ts +58 -6
  163. package/src/mcp/builtin/collections/restoreVersionTool.ts +65 -0
  164. package/src/mcp/builtin/collections/updateTool.ts +72 -110
  165. package/src/mcp/builtin/collections/uploadInstructionsTool.ts +64 -0
  166. package/src/mcp/builtin/formatEntityError.ts +77 -0
  167. package/src/mcp/builtin/getConfigInfoTool.ts +29 -5
  168. package/src/mcp/builtin/globals/countVersionsTool.ts +60 -0
  169. package/src/mcp/builtin/globals/findTool.ts +26 -56
  170. package/src/mcp/builtin/globals/findVersionByIDTool.ts +64 -0
  171. package/src/mcp/builtin/globals/findVersionsTool.ts +69 -0
  172. package/src/mcp/builtin/globals/getGlobalSchemaTool.ts +41 -6
  173. package/src/mcp/builtin/globals/restoreVersionTool.ts +68 -0
  174. package/src/mcp/builtin/globals/updateTool.ts +48 -71
  175. package/src/mcp/builtinTools.ts +81 -18
  176. package/src/mcp/sanitizeMCPConfig.ts +51 -30
  177. package/src/stdio.ts +79 -46
  178. package/src/types.ts +110 -97
  179. package/src/utils/getPluginConfig.ts +1 -1
  180. package/dist/@types/assets.d.js +0 -2
  181. package/dist/@types/assets.d.js.map +0 -1
  182. package/dist/collection/getAccessField.d.ts +0 -12
  183. package/dist/collection/getAccessField.d.ts.map +0 -1
  184. package/dist/collection/getAccessField.js +0 -72
  185. package/dist/collection/getAccessField.js.map +0 -1
  186. package/dist/collection/index.d.ts +0 -6
  187. package/dist/collection/index.d.ts.map +0 -1
  188. package/dist/collection/index.js +0 -105
  189. package/dist/collection/index.js.map +0 -1
  190. package/dist/components/APIKeyField/index.client.d.ts +0 -9
  191. package/dist/components/APIKeyField/index.client.d.ts.map +0 -1
  192. package/dist/components/APIKeyField/index.client.js +0 -85
  193. package/dist/components/APIKeyField/index.client.js.map +0 -1
  194. package/dist/components/APIKeyField/index.css +0 -105
  195. package/dist/components/APIKeysEmptyState/index.client.d.ts +0 -4
  196. package/dist/components/APIKeysEmptyState/index.client.d.ts.map +0 -1
  197. package/dist/components/APIKeysEmptyState/index.client.js +0 -21
  198. package/dist/components/APIKeysEmptyState/index.client.js.map +0 -1
  199. package/dist/components/AccessField/index.client.d.ts +0 -10
  200. package/dist/components/AccessField/index.client.d.ts.map +0 -1
  201. package/dist/components/AccessField/index.client.js +0 -247
  202. package/dist/components/AccessField/index.client.js.map +0 -1
  203. package/dist/components/AccessField/index.css +0 -99
  204. package/dist/components/SettingsMenu/index.client.d.ts +0 -8
  205. package/dist/components/SettingsMenu/index.client.d.ts.map +0 -1
  206. package/dist/components/SettingsMenu/index.client.js +0 -29
  207. package/dist/components/SettingsMenu/index.client.js.map +0 -1
  208. package/dist/mcp/builtin/collections/formatCollectionError.d.ts +0 -9
  209. package/dist/mcp/builtin/collections/formatCollectionError.d.ts.map +0 -1
  210. package/dist/mcp/builtin/collections/formatCollectionError.js +0 -60
  211. package/dist/mcp/builtin/collections/formatCollectionError.js.map +0 -1
  212. package/dist/mcp/builtin/validateEntityData.d.ts +0 -14
  213. package/dist/mcp/builtin/validateEntityData.d.ts.map +0 -1
  214. package/dist/mcp/builtin/validateEntityData.js +0 -82
  215. package/dist/mcp/builtin/validateEntityData.js.map +0 -1
  216. package/dist/translations/index.d.ts +0 -11
  217. package/dist/translations/index.d.ts.map +0 -1
  218. package/dist/translations/index.js +0 -92
  219. package/dist/translations/index.js.map +0 -1
  220. package/dist/translations/languages/ar.d.ts +0 -31
  221. package/dist/translations/languages/ar.d.ts.map +0 -1
  222. package/dist/translations/languages/ar.js +0 -34
  223. package/dist/translations/languages/ar.js.map +0 -1
  224. package/dist/translations/languages/az.d.ts +0 -31
  225. package/dist/translations/languages/az.d.ts.map +0 -1
  226. package/dist/translations/languages/az.js +0 -34
  227. package/dist/translations/languages/az.js.map +0 -1
  228. package/dist/translations/languages/bg.d.ts +0 -31
  229. package/dist/translations/languages/bg.d.ts.map +0 -1
  230. package/dist/translations/languages/bg.js +0 -34
  231. package/dist/translations/languages/bg.js.map +0 -1
  232. package/dist/translations/languages/bnBd.d.ts +0 -31
  233. package/dist/translations/languages/bnBd.d.ts.map +0 -1
  234. package/dist/translations/languages/bnBd.js +0 -34
  235. package/dist/translations/languages/bnBd.js.map +0 -1
  236. package/dist/translations/languages/bnIn.d.ts +0 -31
  237. package/dist/translations/languages/bnIn.d.ts.map +0 -1
  238. package/dist/translations/languages/bnIn.js +0 -34
  239. package/dist/translations/languages/bnIn.js.map +0 -1
  240. package/dist/translations/languages/ca.d.ts +0 -31
  241. package/dist/translations/languages/ca.d.ts.map +0 -1
  242. package/dist/translations/languages/ca.js +0 -34
  243. package/dist/translations/languages/ca.js.map +0 -1
  244. package/dist/translations/languages/cs.d.ts +0 -31
  245. package/dist/translations/languages/cs.d.ts.map +0 -1
  246. package/dist/translations/languages/cs.js +0 -34
  247. package/dist/translations/languages/cs.js.map +0 -1
  248. package/dist/translations/languages/da.d.ts +0 -31
  249. package/dist/translations/languages/da.d.ts.map +0 -1
  250. package/dist/translations/languages/da.js +0 -34
  251. package/dist/translations/languages/da.js.map +0 -1
  252. package/dist/translations/languages/de.d.ts +0 -31
  253. package/dist/translations/languages/de.d.ts.map +0 -1
  254. package/dist/translations/languages/de.js +0 -34
  255. package/dist/translations/languages/de.js.map +0 -1
  256. package/dist/translations/languages/en.d.ts +0 -31
  257. package/dist/translations/languages/en.d.ts.map +0 -1
  258. package/dist/translations/languages/en.js +0 -34
  259. package/dist/translations/languages/en.js.map +0 -1
  260. package/dist/translations/languages/es.d.ts +0 -31
  261. package/dist/translations/languages/es.d.ts.map +0 -1
  262. package/dist/translations/languages/es.js +0 -34
  263. package/dist/translations/languages/es.js.map +0 -1
  264. package/dist/translations/languages/et.d.ts +0 -31
  265. package/dist/translations/languages/et.d.ts.map +0 -1
  266. package/dist/translations/languages/et.js +0 -34
  267. package/dist/translations/languages/et.js.map +0 -1
  268. package/dist/translations/languages/fa.d.ts +0 -31
  269. package/dist/translations/languages/fa.d.ts.map +0 -1
  270. package/dist/translations/languages/fa.js +0 -34
  271. package/dist/translations/languages/fa.js.map +0 -1
  272. package/dist/translations/languages/fr.d.ts +0 -31
  273. package/dist/translations/languages/fr.d.ts.map +0 -1
  274. package/dist/translations/languages/fr.js +0 -34
  275. package/dist/translations/languages/fr.js.map +0 -1
  276. package/dist/translations/languages/he.d.ts +0 -31
  277. package/dist/translations/languages/he.d.ts.map +0 -1
  278. package/dist/translations/languages/he.js +0 -34
  279. package/dist/translations/languages/he.js.map +0 -1
  280. package/dist/translations/languages/hr.d.ts +0 -31
  281. package/dist/translations/languages/hr.d.ts.map +0 -1
  282. package/dist/translations/languages/hr.js +0 -34
  283. package/dist/translations/languages/hr.js.map +0 -1
  284. package/dist/translations/languages/hu.d.ts +0 -31
  285. package/dist/translations/languages/hu.d.ts.map +0 -1
  286. package/dist/translations/languages/hu.js +0 -34
  287. package/dist/translations/languages/hu.js.map +0 -1
  288. package/dist/translations/languages/hy.d.ts +0 -31
  289. package/dist/translations/languages/hy.d.ts.map +0 -1
  290. package/dist/translations/languages/hy.js +0 -34
  291. package/dist/translations/languages/hy.js.map +0 -1
  292. package/dist/translations/languages/id.d.ts +0 -31
  293. package/dist/translations/languages/id.d.ts.map +0 -1
  294. package/dist/translations/languages/id.js +0 -34
  295. package/dist/translations/languages/id.js.map +0 -1
  296. package/dist/translations/languages/is.d.ts +0 -31
  297. package/dist/translations/languages/is.d.ts.map +0 -1
  298. package/dist/translations/languages/is.js +0 -34
  299. package/dist/translations/languages/is.js.map +0 -1
  300. package/dist/translations/languages/it.d.ts +0 -31
  301. package/dist/translations/languages/it.d.ts.map +0 -1
  302. package/dist/translations/languages/it.js +0 -34
  303. package/dist/translations/languages/it.js.map +0 -1
  304. package/dist/translations/languages/ja.d.ts +0 -31
  305. package/dist/translations/languages/ja.d.ts.map +0 -1
  306. package/dist/translations/languages/ja.js +0 -34
  307. package/dist/translations/languages/ja.js.map +0 -1
  308. package/dist/translations/languages/ko.d.ts +0 -31
  309. package/dist/translations/languages/ko.d.ts.map +0 -1
  310. package/dist/translations/languages/ko.js +0 -34
  311. package/dist/translations/languages/ko.js.map +0 -1
  312. package/dist/translations/languages/lt.d.ts +0 -31
  313. package/dist/translations/languages/lt.d.ts.map +0 -1
  314. package/dist/translations/languages/lt.js +0 -34
  315. package/dist/translations/languages/lt.js.map +0 -1
  316. package/dist/translations/languages/lv.d.ts +0 -31
  317. package/dist/translations/languages/lv.d.ts.map +0 -1
  318. package/dist/translations/languages/lv.js +0 -34
  319. package/dist/translations/languages/lv.js.map +0 -1
  320. package/dist/translations/languages/my.d.ts +0 -31
  321. package/dist/translations/languages/my.d.ts.map +0 -1
  322. package/dist/translations/languages/my.js +0 -34
  323. package/dist/translations/languages/my.js.map +0 -1
  324. package/dist/translations/languages/nb.d.ts +0 -31
  325. package/dist/translations/languages/nb.d.ts.map +0 -1
  326. package/dist/translations/languages/nb.js +0 -34
  327. package/dist/translations/languages/nb.js.map +0 -1
  328. package/dist/translations/languages/nl.d.ts +0 -31
  329. package/dist/translations/languages/nl.d.ts.map +0 -1
  330. package/dist/translations/languages/nl.js +0 -34
  331. package/dist/translations/languages/nl.js.map +0 -1
  332. package/dist/translations/languages/pl.d.ts +0 -31
  333. package/dist/translations/languages/pl.d.ts.map +0 -1
  334. package/dist/translations/languages/pl.js +0 -34
  335. package/dist/translations/languages/pl.js.map +0 -1
  336. package/dist/translations/languages/pt.d.ts +0 -31
  337. package/dist/translations/languages/pt.d.ts.map +0 -1
  338. package/dist/translations/languages/pt.js +0 -34
  339. package/dist/translations/languages/pt.js.map +0 -1
  340. package/dist/translations/languages/ro.d.ts +0 -31
  341. package/dist/translations/languages/ro.d.ts.map +0 -1
  342. package/dist/translations/languages/ro.js +0 -34
  343. package/dist/translations/languages/ro.js.map +0 -1
  344. package/dist/translations/languages/rs.d.ts +0 -31
  345. package/dist/translations/languages/rs.d.ts.map +0 -1
  346. package/dist/translations/languages/rs.js +0 -34
  347. package/dist/translations/languages/rs.js.map +0 -1
  348. package/dist/translations/languages/rsLatin.d.ts +0 -31
  349. package/dist/translations/languages/rsLatin.d.ts.map +0 -1
  350. package/dist/translations/languages/rsLatin.js +0 -34
  351. package/dist/translations/languages/rsLatin.js.map +0 -1
  352. package/dist/translations/languages/ru.d.ts +0 -31
  353. package/dist/translations/languages/ru.d.ts.map +0 -1
  354. package/dist/translations/languages/ru.js +0 -34
  355. package/dist/translations/languages/ru.js.map +0 -1
  356. package/dist/translations/languages/sk.d.ts +0 -31
  357. package/dist/translations/languages/sk.d.ts.map +0 -1
  358. package/dist/translations/languages/sk.js +0 -34
  359. package/dist/translations/languages/sk.js.map +0 -1
  360. package/dist/translations/languages/sl.d.ts +0 -31
  361. package/dist/translations/languages/sl.d.ts.map +0 -1
  362. package/dist/translations/languages/sl.js +0 -34
  363. package/dist/translations/languages/sl.js.map +0 -1
  364. package/dist/translations/languages/sv.d.ts +0 -31
  365. package/dist/translations/languages/sv.d.ts.map +0 -1
  366. package/dist/translations/languages/sv.js +0 -34
  367. package/dist/translations/languages/sv.js.map +0 -1
  368. package/dist/translations/languages/ta.d.ts +0 -31
  369. package/dist/translations/languages/ta.d.ts.map +0 -1
  370. package/dist/translations/languages/ta.js +0 -34
  371. package/dist/translations/languages/ta.js.map +0 -1
  372. package/dist/translations/languages/th.d.ts +0 -31
  373. package/dist/translations/languages/th.d.ts.map +0 -1
  374. package/dist/translations/languages/th.js +0 -34
  375. package/dist/translations/languages/th.js.map +0 -1
  376. package/dist/translations/languages/tr.d.ts +0 -31
  377. package/dist/translations/languages/tr.d.ts.map +0 -1
  378. package/dist/translations/languages/tr.js +0 -34
  379. package/dist/translations/languages/tr.js.map +0 -1
  380. package/dist/translations/languages/uk.d.ts +0 -31
  381. package/dist/translations/languages/uk.d.ts.map +0 -1
  382. package/dist/translations/languages/uk.js +0 -34
  383. package/dist/translations/languages/uk.js.map +0 -1
  384. package/dist/translations/languages/vi.d.ts +0 -31
  385. package/dist/translations/languages/vi.d.ts.map +0 -1
  386. package/dist/translations/languages/vi.js +0 -34
  387. package/dist/translations/languages/vi.js.map +0 -1
  388. package/dist/translations/languages/zh.d.ts +0 -31
  389. package/dist/translations/languages/zh.d.ts.map +0 -1
  390. package/dist/translations/languages/zh.js +0 -34
  391. package/dist/translations/languages/zh.js.map +0 -1
  392. package/dist/translations/languages/zhTw.d.ts +0 -31
  393. package/dist/translations/languages/zhTw.d.ts.map +0 -1
  394. package/dist/translations/languages/zhTw.js +0 -34
  395. package/dist/translations/languages/zhTw.js.map +0 -1
  396. package/dist/translations/types.d.ts +0 -32
  397. package/dist/translations/types.d.ts.map +0 -1
  398. package/dist/translations/types.js +0 -3
  399. package/dist/translations/types.js.map +0 -1
  400. package/dist/utils/getVirtualFieldNames.d.ts +0 -14
  401. package/dist/utils/getVirtualFieldNames.d.ts.map +0 -1
  402. package/dist/utils/getVirtualFieldNames.js +0 -35
  403. package/dist/utils/getVirtualFieldNames.js.map +0 -1
  404. package/dist/utils/localAPIDefaults.d.ts +0 -20
  405. package/dist/utils/localAPIDefaults.d.ts.map +0 -1
  406. package/dist/utils/localAPIDefaults.js +0 -19
  407. package/dist/utils/localAPIDefaults.js.map +0 -1
  408. package/dist/utils/schemaConversion/getEntityInputSchema.d.ts +0 -11
  409. package/dist/utils/schemaConversion/getEntityInputSchema.d.ts.map +0 -1
  410. package/dist/utils/schemaConversion/getEntityInputSchema.js +0 -34
  411. package/dist/utils/schemaConversion/getEntityInputSchema.js.map +0 -1
  412. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts +0 -7
  413. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts.map +0 -1
  414. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js +0 -20
  415. package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js.map +0 -1
  416. package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts +0 -15
  417. package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts.map +0 -1
  418. package/dist/utils/schemaConversion/sanitizeEntitySchema.js +0 -464
  419. package/dist/utils/schemaConversion/sanitizeEntitySchema.js.map +0 -1
  420. package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js +0 -158
  421. package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js.map +0 -1
  422. package/dist/utils/transformPointDataToPayload.d.ts +0 -7
  423. package/dist/utils/transformPointDataToPayload.d.ts.map +0 -1
  424. package/dist/utils/transformPointDataToPayload.js +0 -28
  425. package/dist/utils/transformPointDataToPayload.js.map +0 -1
  426. package/dist/utils/whereSchema.d.ts +0 -9
  427. package/dist/utils/whereSchema.d.ts.map +0 -1
  428. package/dist/utils/whereSchema.js +0 -13
  429. package/dist/utils/whereSchema.js.map +0 -1
  430. package/src/@types/assets.d.ts +0 -3
  431. package/src/collection/getAccessField.ts +0 -84
  432. package/src/collection/index.ts +0 -105
  433. package/src/components/APIKeyField/index.client.tsx +0 -73
  434. package/src/components/APIKeyField/index.css +0 -105
  435. package/src/components/APIKeysEmptyState/index.client.tsx +0 -36
  436. package/src/components/AccessField/index.client.tsx +0 -299
  437. package/src/components/AccessField/index.css +0 -99
  438. package/src/components/SettingsMenu/index.client.tsx +0 -34
  439. package/src/mcp/builtin/collections/formatCollectionError.ts +0 -84
  440. package/src/mcp/builtin/validateEntityData.ts +0 -132
  441. package/src/translations/index.ts +0 -108
  442. package/src/translations/languages/ar.ts +0 -35
  443. package/src/translations/languages/az.ts +0 -35
  444. package/src/translations/languages/bg.ts +0 -35
  445. package/src/translations/languages/bnBd.ts +0 -35
  446. package/src/translations/languages/bnIn.ts +0 -35
  447. package/src/translations/languages/ca.ts +0 -35
  448. package/src/translations/languages/cs.ts +0 -35
  449. package/src/translations/languages/da.ts +0 -35
  450. package/src/translations/languages/de.ts +0 -35
  451. package/src/translations/languages/en.ts +0 -35
  452. package/src/translations/languages/es.ts +0 -35
  453. package/src/translations/languages/et.ts +0 -35
  454. package/src/translations/languages/fa.ts +0 -35
  455. package/src/translations/languages/fr.ts +0 -35
  456. package/src/translations/languages/he.ts +0 -35
  457. package/src/translations/languages/hr.ts +0 -35
  458. package/src/translations/languages/hu.ts +0 -35
  459. package/src/translations/languages/hy.ts +0 -35
  460. package/src/translations/languages/id.ts +0 -35
  461. package/src/translations/languages/is.ts +0 -35
  462. package/src/translations/languages/it.ts +0 -35
  463. package/src/translations/languages/ja.ts +0 -35
  464. package/src/translations/languages/ko.ts +0 -35
  465. package/src/translations/languages/lt.ts +0 -35
  466. package/src/translations/languages/lv.ts +0 -35
  467. package/src/translations/languages/my.ts +0 -35
  468. package/src/translations/languages/nb.ts +0 -35
  469. package/src/translations/languages/nl.ts +0 -35
  470. package/src/translations/languages/pl.ts +0 -35
  471. package/src/translations/languages/pt.ts +0 -35
  472. package/src/translations/languages/ro.ts +0 -35
  473. package/src/translations/languages/rs.ts +0 -35
  474. package/src/translations/languages/rsLatin.ts +0 -35
  475. package/src/translations/languages/ru.ts +0 -35
  476. package/src/translations/languages/sk.ts +0 -35
  477. package/src/translations/languages/sl.ts +0 -35
  478. package/src/translations/languages/sv.ts +0 -35
  479. package/src/translations/languages/ta.ts +0 -35
  480. package/src/translations/languages/th.ts +0 -35
  481. package/src/translations/languages/tr.ts +0 -35
  482. package/src/translations/languages/uk.ts +0 -35
  483. package/src/translations/languages/vi.ts +0 -35
  484. package/src/translations/languages/zh.ts +0 -35
  485. package/src/translations/languages/zhTw.ts +0 -35
  486. package/src/translations/types.ts +0 -34
  487. package/src/utils/getVirtualFieldNames.ts +0 -53
  488. package/src/utils/localAPIDefaults.ts +0 -22
  489. package/src/utils/schemaConversion/getEntityInputSchema.ts +0 -78
  490. package/src/utils/schemaConversion/removeVirtualFieldsFromSchema.ts +0 -27
  491. package/src/utils/schemaConversion/sanitizeEntitySchema.spec.ts +0 -103
  492. package/src/utils/schemaConversion/sanitizeEntitySchema.ts +0 -529
  493. package/src/utils/transformPointDataToPayload.ts +0 -40
  494. package/src/utils/whereSchema.ts +0 -24
@@ -0,0 +1,127 @@
1
+ import type { CollectionSlug, File, PayloadRequest } from 'payload'
2
+
3
+ import { APIError, z } from 'payload'
4
+ import {
5
+ externalURLInputSchema,
6
+ getFileFromUploadInstructions,
7
+ resolveURLUploadInput,
8
+ } from 'payload/internal'
9
+ import { sanitizeFilename } from 'payload/shared'
10
+
11
+ const mimeTypeSchema = z
12
+ .string()
13
+ .check(
14
+ z.regex(
15
+ /^[!#$%&'*+.^`|~\w-]+\/[!#$%&'*+.^`|~\w-]+$/,
16
+ 'MIME type must use the type/subtype format',
17
+ ),
18
+ )
19
+
20
+ const uploadFileSchema = z.strictObject({
21
+ filename: z.string(),
22
+ mimeType: z.string(),
23
+ size: z.int().check(z.nonnegative()),
24
+ uploadReference: z.record(z.string(), z.unknown()),
25
+ })
26
+
27
+ export const fileInputSchema = z
28
+ .discriminatedUnion('source', [
29
+ z.strictObject({
30
+ name: z.string().check(z.minLength(1), z.describe('The file name, including its extension.')),
31
+ data: z
32
+ .string()
33
+ .check(z.describe('The base64-encoded file bytes, without a data URL prefix.')),
34
+ mimeType: mimeTypeSchema.check(z.describe('The file MIME type, for example image/png.')),
35
+ source: z.literal('base64'),
36
+ }),
37
+ externalURLInputSchema,
38
+ z.strictObject({
39
+ file: uploadFileSchema.check(z.describe('getUploadInstructions file field post-upload.')),
40
+ source: z.literal('uploadReference'),
41
+ }),
42
+ ])
43
+ .check(
44
+ z.describe(
45
+ 'A file for an upload collection. Prefer uploadReference after its upload succeeds; use base64 only for small local files or externalURL for an online file.',
46
+ ),
47
+ )
48
+
49
+ type FileInput = z.infer<typeof fileInputSchema>
50
+
51
+ export async function resolveFile({
52
+ slug,
53
+ input,
54
+ req,
55
+ }: {
56
+ input?: FileInput
57
+ req: PayloadRequest
58
+ slug: CollectionSlug
59
+ }): Promise<File | undefined> {
60
+ if (!input) {
61
+ return undefined
62
+ }
63
+
64
+ if (input.source === 'uploadReference') {
65
+ try {
66
+ return await getFileFromUploadInstructions({ collectionSlug: slug, file: input.file, req })
67
+ } catch (error) {
68
+ if (error instanceof Error && error.message === 'Staged upload was not found.') {
69
+ throw new APIError(
70
+ 'Staged upload not found. Complete the upload action first, or use base64 for small local files.',
71
+ 400,
72
+ )
73
+ }
74
+ throw error
75
+ }
76
+ }
77
+
78
+ if (input.source === 'externalURL') {
79
+ return resolveURLUploadInput({ slug, input, req })
80
+ }
81
+
82
+ const uploadConfig = req.payload.collections[slug]?.config.upload
83
+
84
+ if (!uploadConfig) {
85
+ throw new APIError(`Collection "${slug}" does not support file uploads.`, 400)
86
+ }
87
+
88
+ const maxFileSize = req.payload.config.upload.limits?.fileSize
89
+ const data = decodeBase64({ maxFileSize, value: input.data })
90
+ const file: File = {
91
+ name: sanitizeFilename(input.name),
92
+ data,
93
+ mimetype: input.mimeType,
94
+ size: data.length,
95
+ }
96
+
97
+ if (maxFileSize !== undefined && Number.isFinite(maxFileSize) && file.size > maxFileSize) {
98
+ throw new APIError(`File exceeds the ${maxFileSize} byte upload limit.`, 400)
99
+ }
100
+
101
+ return file
102
+ }
103
+
104
+ function decodeBase64({ maxFileSize, value }: { maxFileSize?: number; value: string }): Buffer {
105
+ const normalized = value.replace(/\s/g, '')
106
+
107
+ if (!/^[a-z0-9+/]*={0,2}$/i.test(normalized) || normalized.length % 4 === 1) {
108
+ throw new APIError('File data must be valid base64.', 400)
109
+ }
110
+
111
+ if (maxFileSize !== undefined && Number.isFinite(maxFileSize)) {
112
+ const paddingLength = normalized.endsWith('==') ? 2 : normalized.endsWith('=') ? 1 : 0
113
+ const decodedSize = Math.floor((normalized.length * 3) / 4) - paddingLength
114
+
115
+ if (decodedSize > maxFileSize) {
116
+ throw new APIError(`File exceeds the ${maxFileSize} byte upload limit.`, 400)
117
+ }
118
+ }
119
+
120
+ const data = Buffer.from(normalized, 'base64')
121
+
122
+ if (data.toString('base64').replace(/=+$/, '') !== normalized.replace(/=+$/, '')) {
123
+ throw new APIError('File data must be valid base64.', 400)
124
+ }
125
+
126
+ return data
127
+ }
@@ -0,0 +1,67 @@
1
+ import { findDistinctInputSchema } from 'payload'
2
+
3
+ import { defaultAccess } from '../../../defaultAccess.js'
4
+ import { defineCollectionTool } from '../../../defineTool.js'
5
+ import { getLogger } from '../../../utils/getLogger.js'
6
+
7
+ const DEFAULT_DESCRIPTION =
8
+ 'Find distinct values for a field in any collection by passing the collection slug and field path.'
9
+
10
+ export const findDistinctTool = defineCollectionTool({
11
+ access: (args) =>
12
+ defaultAccess(args) && Boolean(args.permissions?.collections?.[args.slug]?.read),
13
+ annotations: {
14
+ destructiveHint: false,
15
+ idempotentHint: true,
16
+ openWorldHint: false,
17
+ readOnlyHint: true,
18
+ title: 'Find Distinct',
19
+ },
20
+ description: DEFAULT_DESCRIPTION,
21
+ input: findDistinctInputSchema,
22
+ }).handler(async ({ slug, authorizedMCP, input, req }) => {
23
+ const payload = req.payload
24
+ const logger = getLogger({ payload })
25
+ const { depth, field, limit, locale, page, populate, sort, trash, where } = input
26
+
27
+ logger.info(`Finding distinct values in collection: ${slug}, field: ${field}`)
28
+
29
+ try {
30
+ const result = await payload.findDistinct({
31
+ collection: slug,
32
+ depth,
33
+ field,
34
+ overrideAccess: authorizedMCP.overrideAccess,
35
+ req,
36
+ ...(limit ? { limit } : {}),
37
+ ...(locale ? { locale } : {}),
38
+ ...(page ? { page } : {}),
39
+ ...(populate ? { populate } : {}),
40
+ ...(sort ? { sort } : {}),
41
+ ...(trash !== undefined ? { trash } : {}),
42
+ ...(where ? { where } : {}),
43
+ })
44
+
45
+ return {
46
+ content: [
47
+ {
48
+ type: 'text',
49
+ text: `Distinct values for "${field}" in collection "${slug}":\n\`\`\`json\n${JSON.stringify(result)}\n\`\`\``,
50
+ },
51
+ ],
52
+ doc: result as unknown as Record<string, unknown>,
53
+ }
54
+ } catch (error) {
55
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error'
56
+ logger.error(`Error finding distinct values in ${slug}: ${errorMessage}`)
57
+ return {
58
+ content: [
59
+ {
60
+ type: 'text',
61
+ text: `❌ **Error finding distinct values in collection "${slug}":** ${errorMessage}`,
62
+ },
63
+ ],
64
+ isError: true,
65
+ }
66
+ }
67
+ })
@@ -1,130 +1,83 @@
1
- import type { SelectType } from 'payload'
2
-
3
- import { z } from 'zod'
1
+ import { findDocumentsInputSchema, parseDocumentID } from 'payload'
4
2
 
3
+ import { defaultAccess } from '../../../defaultAccess.js'
5
4
  import { defineCollectionTool } from '../../../defineTool.js'
6
5
  import { getLogger } from '../../../utils/getLogger.js'
7
- import { localAPIDefaults } from '../../../utils/localAPIDefaults.js'
8
- import { whereSchema } from '../../../utils/whereSchema.js'
9
6
 
10
7
  const DEFAULT_DESCRIPTION =
11
8
  'Find documents in any collection by passing the collection slug and optional ID or where clause.'
12
9
 
13
10
  export const findDocumentsTool = defineCollectionTool({
11
+ access: (args) =>
12
+ defaultAccess(args) && Boolean(args.permissions?.collections?.[args.slug]?.read),
13
+ annotations: {
14
+ destructiveHint: false,
15
+ idempotentHint: true,
16
+ openWorldHint: false,
17
+ readOnlyHint: true,
18
+ title: 'Find Documents',
19
+ },
14
20
  description: DEFAULT_DESCRIPTION,
15
- input: z.object({
16
- id: z
17
- .union([z.string(), z.number()])
18
- .describe(
19
- 'Optional: specific document ID to retrieve. If not provided, returns all documents',
20
- )
21
- .optional(),
22
- depth: z
23
- .number()
24
- .int()
25
- .min(0)
26
- .max(10)
27
- .describe('How many levels deep to populate relationships (default: 0)')
28
- .optional()
29
- .default(0),
30
- draft: z
31
- .boolean()
32
- .describe(
33
- 'Optional: whether the document should be queried from the versions table/collection or not.',
34
- )
35
- .optional(),
36
- fallbackLocale: z
37
- .string()
38
- .describe('Optional: fallback locale code to use when requested locale is not available')
39
- .optional(),
40
- limit: z
41
- .number()
42
- .int()
43
- .min(1)
44
- .max(100)
45
- .describe('Maximum number of documents to return (default: 10, max: 100)')
46
- .optional()
47
- .default(10),
48
- locale: z
49
- .string()
50
- .describe(
51
- 'Optional: locale code to retrieve data in (e.g., "en", "es"). Use "all" to retrieve all locales for localized fields',
52
- )
53
- .optional(),
54
- page: z
55
- .number()
56
- .int()
57
- .min(1)
58
- .describe('Page number for pagination (default: 1)')
59
- .optional()
60
- .default(1),
61
- select: z
62
- .string()
63
- .describe(
64
- "Optional: define exactly which fields you'd like to return in the response (JSON), e.g., '{\"title\": true}'",
65
- )
66
- .optional(),
67
- sort: z
68
- .string()
69
- .describe('Field to sort by (e.g., "createdAt", "-updatedAt" for descending)')
70
- .optional(),
71
- where: whereSchema
72
- .describe(
73
- 'Optional: where clause for filtering. Use field names with Payload operators, and/or arrays for grouping. Example: {"title":{"contains":"test"}}',
74
- )
75
- .optional(),
76
- }),
77
- }).handler(async ({ authorizedMCP, collectionSlug, input, req }) => {
21
+ input: findDocumentsInputSchema,
22
+ }).handler(async ({ slug, authorizedMCP, input, req }) => {
78
23
  const payload = req.payload
79
24
  const logger = getLogger({ payload })
80
25
 
81
- const { id, depth, draft, fallbackLocale, limit, locale, page, select, sort, where } = input
26
+ const {
27
+ id,
28
+ depth,
29
+ draft,
30
+ fallbackLocale,
31
+ joins,
32
+ limit,
33
+ locale,
34
+ page,
35
+ pagination,
36
+ populate,
37
+ select,
38
+ sort,
39
+ trash,
40
+ where,
41
+ } = input
82
42
 
83
43
  logger.info(
84
- `Reading document from collection: ${collectionSlug}${id ? ` with ID: ${id}` : ''}, limit: ${limit}, page: ${page}${locale ? `, locale: ${locale}` : ''}`,
44
+ `Reading document from collection: ${slug}${id ? ` with ID: ${id}` : ''}, limit: ${limit}, page: ${page}${locale ? `, locale: ${locale}` : ''}`,
85
45
  )
86
46
 
87
47
  try {
88
- let selectClause: SelectType | undefined
89
- if (select) {
90
- try {
91
- selectClause = JSON.parse(select) as SelectType
92
- } catch {
93
- logger.warn(`Invalid select clause JSON: ${select}`)
94
- return { content: [{ type: 'text', text: 'Error: Invalid JSON in select clause' }] }
95
- }
96
- }
97
-
98
- if (id) {
48
+ if (id !== undefined) {
99
49
  try {
100
50
  const doc = await payload.findByID({
101
- id,
102
- collection: collectionSlug,
51
+ id: parseDocumentID({ id, collectionSlug: slug, payload }),
52
+ collection: slug,
103
53
  depth,
54
+ overrideAccess: authorizedMCP.overrideAccess,
104
55
  req,
105
- ...localAPIDefaults(authorizedMCP),
106
- ...(selectClause && { select: selectClause }),
56
+ ...(select && { select }),
57
+ ...(populate && { populate }),
58
+ ...(joins !== undefined && { joins }),
107
59
  ...(locale && { locale }),
108
- ...(fallbackLocale && { fallbackLocale }),
60
+ ...(fallbackLocale !== undefined && { fallbackLocale }),
109
61
  ...(draft !== undefined && { draft }),
62
+ ...(trash !== undefined && { trash }),
110
63
  })
111
64
 
112
65
  return {
113
66
  content: [
114
67
  {
115
68
  type: 'text',
116
- text: `Document from collection "${collectionSlug}":\n${JSON.stringify(doc)}`,
69
+ text: `Document from collection "${slug}":\n${JSON.stringify(doc)}`,
117
70
  },
118
71
  ],
119
72
  doc: doc as Record<string, unknown>,
120
73
  }
121
74
  } catch {
122
- logger.warn(`Document not found with ID: ${id} in collection: ${collectionSlug}`)
75
+ logger.warn(`Document not found with ID: ${id} in collection: ${slug}`)
123
76
  return {
124
77
  content: [
125
78
  {
126
79
  type: 'text',
127
- text: `Error: Document with ID "${id}" not found in collection "${collectionSlug}"`,
80
+ text: `Error: Document with ID "${id}" not found in collection "${slug}"`,
128
81
  },
129
82
  ],
130
83
  }
@@ -132,16 +85,20 @@ export const findDocumentsTool = defineCollectionTool({
132
85
  }
133
86
 
134
87
  const findOptions: Parameters<typeof payload.find>[0] = {
135
- collection: collectionSlug,
88
+ collection: slug,
136
89
  depth,
137
90
  limit,
91
+ overrideAccess: authorizedMCP.overrideAccess,
138
92
  page,
139
93
  req,
140
- ...localAPIDefaults(authorizedMCP),
141
- ...(selectClause && { select: selectClause }),
94
+ ...(select && { select }),
95
+ ...(populate && { populate }),
96
+ ...(joins !== undefined && { joins }),
142
97
  ...(locale && { locale }),
143
- ...(fallbackLocale && { fallbackLocale }),
98
+ ...(fallbackLocale !== undefined && { fallbackLocale }),
144
99
  ...(draft !== undefined && { draft }),
100
+ ...(pagination !== undefined && { pagination }),
101
+ ...(trash !== undefined && { trash }),
145
102
  }
146
103
 
147
104
  if (sort) {
@@ -153,7 +110,7 @@ export const findDocumentsTool = defineCollectionTool({
153
110
 
154
111
  const result = await payload.find(findOptions)
155
112
 
156
- let responseText = `Collection: "${collectionSlug}"\nTotal: ${result.totalDocs} documents\nPage: ${result.page} of ${result.totalPages}\n`
113
+ let responseText = `Collection: "${slug}"\nTotal: ${result.totalDocs} documents\nPage: ${result.page} of ${result.totalPages}\n`
157
114
  for (const doc of result.docs) {
158
115
  responseText += `\n\`\`\`json\n${JSON.stringify(doc)}\n\`\`\``
159
116
  }
@@ -164,12 +121,12 @@ export const findDocumentsTool = defineCollectionTool({
164
121
  }
165
122
  } catch (error) {
166
123
  const errorMessage = error instanceof Error ? error.message : 'Unknown error'
167
- logger.error(`Error reading documents from collection ${collectionSlug}: ${errorMessage}`)
124
+ logger.error(`Error reading documents from collection ${slug}: ${errorMessage}`)
168
125
  return {
169
126
  content: [
170
127
  {
171
128
  type: 'text',
172
- text: `❌ **Error reading documents from collection "${collectionSlug}":** ${errorMessage}`,
129
+ text: `❌ **Error reading documents from collection "${slug}":** ${errorMessage}`,
173
130
  },
174
131
  ],
175
132
  }
@@ -0,0 +1,66 @@
1
+ import { findVersionByIDInputSchema } from 'payload'
2
+
3
+ import { defaultAccess } from '../../../defaultAccess.js'
4
+ import { defineCollectionTool } from '../../../defineTool.js'
5
+ import { getLogger } from '../../../utils/getLogger.js'
6
+
7
+ const DEFAULT_DESCRIPTION =
8
+ 'Find a specific document version in any version-enabled collection by passing the collection slug and version ID.'
9
+
10
+ export const findVersionByIDTool = defineCollectionTool({
11
+ access: (args) =>
12
+ defaultAccess(args) && Boolean(args.permissions?.collections?.[args.slug]?.readVersions),
13
+ annotations: {
14
+ destructiveHint: false,
15
+ idempotentHint: true,
16
+ openWorldHint: false,
17
+ readOnlyHint: true,
18
+ title: 'Find Version By ID',
19
+ },
20
+ description: DEFAULT_DESCRIPTION,
21
+ input: findVersionByIDInputSchema,
22
+ }).handler(async ({ slug, authorizedMCP, input, req }) => {
23
+ const payload = req.payload
24
+ const logger = getLogger({ payload })
25
+ const { id, depth, draft, fallbackLocale, locale, populate, select, trash } = input
26
+
27
+ logger.info(`Finding version in collection: ${slug} with ID: ${id}`)
28
+
29
+ try {
30
+ const result = await payload.findVersionByID({
31
+ id: String(id),
32
+ collection: slug,
33
+ depth,
34
+ overrideAccess: authorizedMCP.overrideAccess,
35
+ req,
36
+ ...(draft !== undefined ? { draft } : {}),
37
+ ...(fallbackLocale !== undefined ? { fallbackLocale } : {}),
38
+ ...(locale ? { locale } : {}),
39
+ ...(populate ? { populate } : {}),
40
+ ...(select ? { select } : {}),
41
+ ...(trash !== undefined ? { trash } : {}),
42
+ })
43
+
44
+ return {
45
+ content: [
46
+ {
47
+ type: 'text',
48
+ text: `Version "${id}" from collection "${slug}":\n\`\`\`json\n${JSON.stringify(result)}\n\`\`\``,
49
+ },
50
+ ],
51
+ doc: result as unknown as Record<string, unknown>,
52
+ }
53
+ } catch (error) {
54
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error'
55
+ logger.error(`Error finding version ${id} in ${slug}: ${errorMessage}`)
56
+ return {
57
+ content: [
58
+ {
59
+ type: 'text',
60
+ text: `❌ **Error finding version "${id}" in collection "${slug}":** ${errorMessage}`,
61
+ },
62
+ ],
63
+ isError: true,
64
+ }
65
+ }
66
+ })
@@ -0,0 +1,83 @@
1
+ import { findVersionsInputSchema } from 'payload'
2
+
3
+ import { defaultAccess } from '../../../defaultAccess.js'
4
+ import { defineCollectionTool } from '../../../defineTool.js'
5
+ import { getLogger } from '../../../utils/getLogger.js'
6
+
7
+ const DEFAULT_DESCRIPTION =
8
+ 'Find document versions in any version-enabled collection by passing the collection slug and optional where clause.'
9
+
10
+ export const findVersionsTool = defineCollectionTool({
11
+ access: (args) =>
12
+ defaultAccess(args) && Boolean(args.permissions?.collections?.[args.slug]?.readVersions),
13
+ annotations: {
14
+ destructiveHint: false,
15
+ idempotentHint: true,
16
+ openWorldHint: false,
17
+ readOnlyHint: true,
18
+ title: 'Find Versions',
19
+ },
20
+ description: DEFAULT_DESCRIPTION,
21
+ input: findVersionsInputSchema,
22
+ }).handler(async ({ slug, authorizedMCP, input, req }) => {
23
+ const payload = req.payload
24
+ const logger = getLogger({ payload })
25
+ const {
26
+ depth,
27
+ draft,
28
+ fallbackLocale,
29
+ limit,
30
+ locale,
31
+ page,
32
+ pagination,
33
+ populate,
34
+ select,
35
+ sort,
36
+ trash,
37
+ where,
38
+ } = input
39
+
40
+ logger.info(`Finding versions in collection: ${slug}, limit: ${limit}, page: ${page}`)
41
+
42
+ try {
43
+ const result = await payload.findVersions({
44
+ collection: slug,
45
+ depth,
46
+ limit,
47
+ overrideAccess: authorizedMCP.overrideAccess,
48
+ page,
49
+ req,
50
+ ...(draft !== undefined ? { draft } : {}),
51
+ ...(fallbackLocale !== undefined ? { fallbackLocale } : {}),
52
+ ...(locale ? { locale } : {}),
53
+ ...(pagination !== undefined ? { pagination } : {}),
54
+ ...(populate ? { populate } : {}),
55
+ ...(select ? { select } : {}),
56
+ ...(sort ? { sort } : {}),
57
+ ...(trash !== undefined ? { trash } : {}),
58
+ ...(where ? { where } : {}),
59
+ })
60
+
61
+ return {
62
+ content: [
63
+ {
64
+ type: 'text',
65
+ text: `Versions for collection "${slug}":\n\`\`\`json\n${JSON.stringify(result)}\n\`\`\``,
66
+ },
67
+ ],
68
+ doc: result as unknown as Record<string, unknown>,
69
+ }
70
+ } catch (error) {
71
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error'
72
+ logger.error(`Error finding versions in ${slug}: ${errorMessage}`)
73
+ return {
74
+ content: [
75
+ {
76
+ type: 'text',
77
+ text: `❌ **Error finding versions in collection "${slug}":** ${errorMessage}`,
78
+ },
79
+ ],
80
+ isError: true,
81
+ }
82
+ }
83
+ })
@@ -1,28 +1,80 @@
1
+ import { getAccessResults, getCollectionInputSchema, getCollectionSchemaInputSchema } from 'payload'
2
+
3
+ import { defaultAccess } from '../../../defaultAccess.js'
1
4
  import { defineCollectionTool } from '../../../defineTool.js'
2
- import { getCollectionInputSchema } from '../../../utils/schemaConversion/getEntityInputSchema.js'
3
5
 
4
6
  export const getCollectionSchemaTool = defineCollectionTool({
7
+ access: (args) => {
8
+ const permissions = args.permissions?.collections?.[args.slug]
9
+
10
+ return defaultAccess(args) && Boolean(permissions?.create || permissions?.update)
11
+ },
12
+ annotations: {
13
+ destructiveHint: false,
14
+ idempotentHint: true,
15
+ openWorldHint: false,
16
+ readOnlyHint: true,
17
+ title: 'Get Collection Schema',
18
+ },
5
19
  description: 'Get the input schema for creating or updating documents in a collection.',
6
- }).handler(({ collectionSlug, req }) => {
7
- const inputSchema = getCollectionInputSchema({ collectionSlug, req })
20
+ input: getCollectionSchemaInputSchema,
21
+ }).handler(async ({ slug, authorizedMCP, req }) => {
22
+ const permissions = authorizedMCP.overrideAccess
23
+ ? null
24
+ : (await getAccessResults({ req })).collections?.[slug]
25
+
26
+ if (!authorizedMCP.overrideAccess && !permissions?.create && !permissions?.update) {
27
+ return {
28
+ content: [
29
+ {
30
+ type: 'text',
31
+ text: `Error: MCP access to "getCollectionSchema" is not enabled for collection "${slug}"`,
32
+ },
33
+ ],
34
+ isError: true,
35
+ }
36
+ }
37
+
38
+ const inputSchema = getCollectionInputSchema({
39
+ collectionSlug: slug,
40
+ req,
41
+ ...(permissions ? { permissions } : {}),
42
+ })
8
43
 
9
44
  if (!inputSchema) {
10
45
  return {
11
- content: [{ type: 'text', text: `Error: Collection "${collectionSlug}" not found` }],
46
+ content: [{ type: 'text', text: `Error: Collection "${slug}" not found` }],
12
47
  isError: true,
13
48
  }
14
49
  }
15
50
 
51
+ const uploadConfig = req.payload.collections[slug]?.config.upload
52
+ const maxFileSize = req.payload.config.upload.limits?.fileSize
53
+ const upload = uploadConfig
54
+ ? {
55
+ enabled: true,
56
+ filesRequiredOnCreate: uploadConfig.filesRequiredOnCreate !== false,
57
+ mimeTypes: uploadConfig.mimeTypes ?? ['*/*'],
58
+ sources: [
59
+ ...(uploadConfig.pasteURL !== false ? ['externalURL'] : []),
60
+ 'base64',
61
+ 'uploadReference',
62
+ ],
63
+ ...(typeof maxFileSize === 'number' && Number.isFinite(maxFileSize) ? { maxFileSize } : {}),
64
+ }
65
+ : { enabled: false }
66
+
16
67
  return {
17
68
  content: [
18
69
  {
19
70
  type: 'text',
20
- text: `Schema for collection "${collectionSlug}":\n\`\`\`json\n${JSON.stringify(inputSchema)}\n\`\`\``,
71
+ text: `Schema for collection "${slug}":\n\`\`\`json\n${JSON.stringify(inputSchema)}\n\`\`\`\nUpload configuration:\n\`\`\`json\n${JSON.stringify(upload)}\n\`\`\``,
21
72
  },
22
73
  ],
23
74
  structuredContent: {
24
- collectionSlug,
75
+ slug,
25
76
  schema: inputSchema,
77
+ upload,
26
78
  },
27
79
  }
28
80
  })