Create posts, import markdown, publish, upload media, and manage content on any Payload CMS instance — directly from Claude Code. Full CRUD, versioning, search, globals. Requires pcms-cli (npm install -g pcms-cli). Use when user mentions 'pcms', 'payload', 'create post', 'import article', 'publish post', 'list posts', 'upload media', 'draft', 'blog post', 'export article', 'content pipeline', 'versions', 'globals'.
Manage content on any Payload CMS instance directly from the terminal.
Requires the pcms CLI: npm install -g @mirkobozzetto/pcms-cli
Source and docs: https://github.com/mirkobozzetto/pcms-cli
pcms installed globally (npm install -g @mirkobozzetto/pcms-cli)pcms auth login --domain https://your-site.compcms auth status 2>&1pcms --version 2>&1| User says | Action | Reference |
|---|
init, setup, configure | Setup guide — install + auth | (inline below) |
help, commands, reference | Show quick reference | (inline below) |
create, new post, draft, write article | Create document | references/documents.md |
list, show posts, drafts, published | List/query documents | references/documents.md |
get, show, read post | Get single document | references/documents.md |
update, edit, modify | Update document | references/documents.md |
delete, remove | Delete document | references/documents.md |
publish, unpublish | Change publication status | references/documents.md |
import, import markdown | Import markdown file as document | references/content-workflows.md |
export | Export document to JSON or markdown | references/content-workflows.md |
upload, image, media | Upload media file | references/media.md |
search | Search content | references/documents.md |
versions, restore | Document version history | references/documents.md |
globals | Read/update globals | references/documents.md |
collections, schema, count | Collection metadata | references/documents.md |
batch import, import folder | Batch content import | references/content-workflows.md |
generate, write about | Generate content + import | references/content-workflows.md |
login, logout, auth, profiles | Authentication | references/auth.md |
When the user's intent is ambiguous, ask before executing.
init)npm install -g @mirkobozzetto/pcms-cli
pcms auth login --domain https://your-payload-instance.com
Email and password are prompted interactively. Credentials stored in ~/.config/pcms/credentials.json.
pcms collections
Should list available collections (posts, pages, categories, etc.).
# Auth
pcms auth login --domain <url> --email <email>
pcms auth status
pcms auth me
pcms auth profiles
# Collections
pcms collections
pcms collections schema <collection>
pcms collections count <collection> --where '<query>'
# Documents
pcms documents list <collection> --where '<query>' --sort '-createdAt' --limit 10
pcms documents get <collection> <id>
pcms documents list <collection> --draft # include drafts
pcms documents create <collection> --title "Title" --status draft
pcms documents create <collection> --title "Title" --author 1 --category 3 --tags 5,8
pcms documents create <collection> --title "Title" --image ./photo.jpg # upload + link
pcms documents create <collection> --md --input ./article.md
pcms documents update <collection> <id> --title "New Title" --status published
pcms documents delete <collection> <id> --force
# Publishing
pcms publish <collection> <id>
pcms unpublish <collection> <id>
# Media
pcms media upload ./image.jpg --alt "Description"
# Search
pcms search "query" --limit 10
# Import / Export
pcms import ./article.md --collection posts --status draft
pcms bulk-import ./posts-dir/ --collection posts --status draft
pcms export <collection> <id> -f md -o ./output.md
# Versions
pcms versions <collection> <id>
pcms restore <collection> <versionId>
# Globals
pcms globals
pcms globals <slug>
pcms global:update <slug> --data '{"key": "value"}'
--force explicitly, and confirm with user first--status draft unless the user says otherwisepcms import with a markdown file over --title/--content flagsstatus[equals]=published, title[like]=keywordpcms bulk-import ./directory/ --collection posts instead of shell loopsmarkdownToLexical() generates link nodes that may cause Lexical error #117 on some Payload versions. When creating content with links via --data, use this link node format:
{"type":"link","version":3,"format":"","indent":0,"direction":"ltr","fields":{"url":"https://...","linkType":"custom","newTab":true},"children":[{"mode":"normal","text":"link text","type":"text","format":0}]}
For complex articles with many links, build the Lexical JSON via a Node.js script rather than using --md or --content._status field — Payload uses _status (with underscore) for the draft/publish system, not status. The CLI maps --status to _status automatically since v1.7.0.For detailed commands and workflow patterns: