MCP Tool Reference

ToolDescriptionParameters
describe_collectionsList every collection this server has (blog, docs, tokens) and its shape — extra frontmatter fields (with real current defaults) for entry-style collections, the known token names for tokens. Discover what a collection accepts before calling create_entry/edit_entry/edit_tokens against it.(none)
describe_componentsList purpose-built components available beyond plain HTML (e.g. video-embed) — the tag to write, its required attributes, and a real usage example. Discover these instead of guessing at a raw <iframe> or similar, which will be rejected.(none)
list_entriesList entries from a collection, each with its editorial status (drafting / in review / changes requested / published / archived) derived from git/PR statecollection?
read_entryRead an entry's content and frontmatterslug, collection?
create_entryCreate a new entry (allowlist-validated), commit it to the content reposlug, html, title, date, draft?, tags?, collection?, pillar?, order?, section?
edit_entryUpdate content/frontmatter of an existing entry (allowlist-validated), commit the changeslug, html?, title?, date?, draft?, tags?, collection?, pillar?, order?, section?
delete_entryRemove an entry, commit the deletionslug, collection?
read_tokensRead the site's current design tokens (colors, lengths) — the effective values, already merged over the built-in defaults for anything not explicitly overridden.(none)
edit_tokensChange design tokens (the site palette + a few lengths) — no CSS file editing needed, generates site/styles/globals.css's custom properties at build time. Only known token names are accepted (see read_tokens for the current set); each color needs a "light" and/or "dark" value. Like any other collection, create_branch/publish_content/submit_for_review/discard_draft all work here too — pass slug: "tokens", collection: "tokens".colors?, lengths?
upload_imageUpload an image (base64-encoded) into an existing entry's image directory and commit it to the content repo. Reference it in the entry's HTML as <img src="<filename>" alt="...">, a bare filename — do not write <picture>/srcset/width/height, those are generated automatically at build time.slug, filename, data, collection?
create_branchStart (or resume) the draft branch for an entry. Fails if another draft is already checked out for this slug — see spec §5.4 "Per-entry draft locking".slug, collection?
discard_draftDiscard an entry's draft without publishing, releasing the lock on itslug, collection?
diffShow an entry's draft-branch changes against main (or another ref)slug, against?, collection?
publish_contentPublish an entry's draft — makes it live. Mode (direct git merge, or open+merge a real GitHub PR) is set by the PUBLISH_MODE env var, not per-call; either way this one call results in live content.slug, collection?
submit_for_reviewOpen a real GitHub PR for an entry's draft and stop there — for when a human review before it goes live is actually wanted, regardless of what PUBLISH_MODE defaults to. Needs MCP_PUSH_TOKEN with "Pull requests: Write" scope.slug, collection?
previewPush an entry's draft branch to the content repo and get back a hosted preview URL a reviewer can open, if PREVIEW_WORKER_URL is configured — omitted otherwise (the branch still pushes either way).slug, collection?
revalidateTrigger a Cloudflare Pages rebuild via its deploy hook(none)
deploy_statusRead the most recent Cloudflare Pages deployment's real state — closes the loop publish/revalidate open, since a deploy hook accepting a POST doesn't prove the build actually succeeded(none)
rollbackRevert to a previous commit — pass slug to revert just that entry, omit it to revert a whole commit repo-widecommitHash, slug?, collection?