v3.61.0 (2025-10-23)
🚀 Features
- @payloadcms/plugin-mcp Released (BETA) - New plugin that enables Payload to function as an MCP server, allowing AI models to interact with your collections through a standardized protocol. The plugin provides built-in tools for CRUD operations on collections and supports custom tools. #13674
🐛 Bug Fixes
- user updatedAt modified during session operations (#14269) (a1671ec)
- document header text clipping (#14291) (db973e9)
- typescript requires fields when draft: true despite passing
draft: true(#14271) (1016cd0) - blocks access control not respecting update access whether on collection or on a per field basis (#14226) (88cb687)
- allow slugField to accept localized argument and fixed slug generation with custom field names (#14234) (2ced43d)
- db-postgres: limit index and foreign key names length (#14236) (a63b4d9)
- drizzle: folders with trash enabled don't display documents in polymorphic joins (#14223) (6d3aaaf)
- plugin-form-builder: display full textarea content in form submissions (#14161) (24dad01)
- plugin-multi-tenant: block references issue (#14320) (4f8b7d2)
- plugin-search: exclude skipped drafts in reindex handler (#14224) (0dc782c)
- richtext-lexical: ensure block node form displays up-to-date value when editor remounts (#14295) (f8e6b65)
- richtext-lexical: node replacements ignored for block, inline block, upload, unknown and relationship nodes (#14249) (1561853)
- richtext-lexical, ui: ui errors with Slash Menu in Lexical and SearchBar component in RTL (#14231) (fed3bba)
- ui: document locked modal blocks interaction after clicking Go Back (#14287) (5782a41)
- ui: change password button being hidden and unlock button being shown incorrectly on account page (#14220) (bcb4d8e)
⚡ Performance
- richtext-lexical: decrease size of field schema, minor perf optimizations (#14248) (e25ce1c)
- richtext-lexical: do not return i18n from editor adapter (#14228) (54224c3)
🛠 Refactors
📚 Documentation
- improve slate to lexical migration docs (#14309) (6838c56)
- db indexes - code example missing const (#14171) (3b37f4a)
- add explanation about re-renders in
useFormFields(#14288) (8cdb5dc) - add jsdocs to RichText adapter (#14246) (8b0ac01)
- clarify
admin.timezoneslist configuration with example (#14238) (de5f3db) - fix link to slug-overrides in text.mdx (#14211) (8136a84)
- add mention of the useUploadHandlers error and steps to remedy it with a mention to monorepos (#14233) (8663024)
🔨 Build
- add plugin-mcp to publishList (#14319) (894cf0c)
- add README sync for top-level -> packages/payload (#14316) (2aba827)
🏡 Chores
- extract snapshot logic, correct types in version ops (#14290) (c2dcd12)
- bump pino to v9.14.0 and pino-pretty (#14283) (b252658)
- refresh CLAUDE.md (#14268) (05a869d)
- cleanup, short-circuit .split calls (#14245) (d57be12)
🤝 Contributors
- Jarrod Flesch (@JarrodMFlesch)
- Elliot DeNolf (@denolfe)
- Kendell (@kendelljoseph)
- Alessio Gravili (@AlessioGr)
- Patrik (@PatrikKozak)
- Boyan Bratvanov (@bratvanov)
- Paul (@paulpopus)
- German Jablonski (@GermanJablo)
- Bogdan Covrig (@bogdaaamn)
- Romain Pironneau (@romainpi)
- Sasha (@r1tsuu)
- Ahmed Abdellahi Abdat (@ahmed-abdat)
- Said Akhrarov (@akhrarovsaid)