# Payload CMS

Next.js-native headless CMS with an official MCP plugin that exposes every collection to an agent.

Payload is an MIT-licensed CMS and app framework that installs into a Next.js /app folder, with an admin UI, REST and GraphQL APIs, auth, drafts, and localization. Content types are TypeScript in payload.config.ts. The Builder ships @payloadcms/plugin-mcp, which serves an MCP endpoint at /api/mcp with find, create, update, and delete tools per collection and global, gated by API keys.

Alternative to: Contentful, Sanity

- Capabilities: adaptable, operable
- Vertical: content-publishing
- Shape: business-app
- Form factor: web-app
- Execution model: deterministic
- Provenance: human-written (recorded, never ranked)
- Repo: https://github.com/payloadcms/payload (MIT), 44549 stars, last commit 2026-09-03
- Last activity: 2026-09-03
- Page: apps/payloadcms--payload.html
- JSON: apps/payloadcms--payload.json

## Use it when

- I want a CMS inside my Next.js app that my agent can fill and update without me building endpoints
- I need a content backend with auth and drafts that deploys to Vercel or Cloudflare in one click

## Gotchas

- plugin-mcp is versioned 4.0.0-canary.14 in the monorepo; check whether the release you install is stable
- Each collection must be explicitly enabled in the plugin config before an agent can reach it
- MCP requests need a user API key created in the admin panel; keys inherit that user's access control
- Payload runs inside Next.js; there is no standalone server binary

## Editions

- Free: Free, open source
  - source: https://github.com/payloadcms/payload
  - installable: pnpx create-payload-app@latest
  - one-click: https://dub.sh/payload-vercel
  - one-click: https://dub.sh/payload-cloudflare
- Payload Cloud: Free, closed source
  - hosted: https://payloadcms.com/

## Adaptable: make it yours

Effort: light-edit (9 things to edit)

Start from the website template: .env sets database, secret, server URL, cron and preview secrets. Everything you actually adapt is TypeScript: collections and globals in payload.config.ts and src/collections, plus the mcpPlugin block that decides which collections an agent may touch. Expect to edit schema files, not just config.

- Env vars: DATABASE_URL, PAYLOAD_SECRET, NEXT_PUBLIC_SERVER_URL, CRON_SECRET, PREVIEW_SECRET
- Config files: payload.config.ts, src/collections/*.ts, src/globals/*.ts, .env
- Prompt files: none
- Accounts you'll need: database host (MongoDB Atlas, Neon, or self-run); Vercel or Cloudflare (optional one-click)

## Operable: what an agent can drive

Operability: official. Interface: mcp at https://payloadcms.com/docs/plugins/mcp (published by the builder, remote).

### Reach (partial coverage)

- Create, read, update, and delete documents in any collection: reachable. plugin docs: find, create, update, delete tools generated per enabled collection
- Read and update globals such as site settings: reachable. plugin docs: find and update tools per enabled global
- Run custom business logic: reachable. plugin docs: developer-defined custom tools
- Manage users and auth: reachable. users are a collection; enable it in mcpPlugin collections config
- Upload media files: undetermined. uploads are collections but binary upload over MCP is not documented
- Save drafts and publish versions: undetermined. versions and drafts are a core feature; draft status through MCP update not documented
- Localize content per locale: undetermined. localization is core; locale parameter on MCP tools not documented
- Define collections, fields, and blocks: not reachable. content model is code in payload.config.ts
- Configure access control: not reachable. access functions are code in collection configs
- Live preview and on-demand revalidation: not reachable. front-end integration, not an MCP operation

## Code stack

- Languages: TypeScript
- Frameworks: Next.js, React, Lexical
- Package manager: pnpm
- Database: MongoDB, PostgreSQL, SQLite, Cloudflare D1
- Hosting target: Vercel one-click, Cloudflare Workers one-click, Docker, any Node host

## Skills

bundled: Payload ships a payload skill with a large reference set so an agent can build Payload apps; the repo separately carries contributor-only skills under .claude/skills/.
- Paths: packages/payload/skills/payload/SKILL.md
- Install: /plugin marketplace add payloadcms/payload

## Evidence and confidence

- formFactor: README: installs in your existing /app folder; admin UI and API served by Next.js (confidence 0.8)
- executionModel: no model at runtime; OPENAI_KEY in root .env.example is for monorepo tests (confidence 0.9)
- operability: packages/plugin-mcp in the payloadcms/payload monorepo, documented at payloadcms.com/docs/plugins/mcp (confidence 0.95)
- effort: templates/website/.env.example names five vars; collections are TypeScript per docs (confidence 0.85)
- editions: README: completely free and open-source, one-click Vercel and Cloudflare; Payload Cloud is the paid hosted offer (confidence 0.8)
- active: pushedAt 2026-09-03
- provenance: company-built since 2021 with large contributor base; no vibe-coded claim (confidence 0.85)
- reach:  (confidence 0.75)

## Open questions

- Payload Cloud pricing was not fetched
- Does the MCP plugin handle file uploads, draft status, and locale parameters? Reach items left null
- Is plugin-mcp released as stable on npm, or only canary?

## Sources

- https://github.com/payloadcms/payload (sourcing:content-publishing:curated)
- https://payloadcms.com/docs/plugins/mcp (analysis:content-publishing)
- https://github.com/payloadcms/payload/tree/main/templates/website (analysis:content-publishing)
