To write CMS content from Claude Code, connect a content-management MCP server, inspect the destination schema, and create a draft before publishing. genko.me provides an OAuth-authenticated MCP server for creating and updating drafts, publishing approved changes, and scheduling publication. A practical workflow keeps draft creation and publication as separate requests, with a human reviewing the saved content between them.
This article is written by the team behind genko.me. The behavior described here was checked on October 20, 2026.
What can Claude Code do with a CMS MCP server?
An MCP connection gives an AI client access to tools supplied by another system. Instead of returning an article for someone to copy manually, Claude can call a tool that saves the article in the CMS. The available actions depend on the server and the authenticated user's permissions.
The connection does not replace your website integration. Content delivery still happens through the delivery API or SDK, and a successful publication does not prove that a cached or statically built page has refreshed.
Task | genko.me tools | What to verify |
|---|---|---|
Read product documentation |
| Retrieve the full page after searching |
Find the destination |
| Workspace, API, field IDs, languages |
Inspect existing content |
| Entry ID and pending changes |
Save content |
| Create a new entry or update an existing one |
Release content |
| Language and publication timing |
Abandon pending edits |
| This applies to unpublished changes on published content |
For the complete argument list, use the MCP documentation. Avoid asking the model to infer tool names from examples for a different CMS.
How to connect Claude Code to genko.me
First, create or choose a genko.me workspace and the API that will hold your content. Then run this command from your application's project root:
npx @genko-me/cli@latest mcp --claude-codeThe command adds or updates the project's .mcp.json. Reload Claude Code, complete the OAuth login and authorization, and confirm that the genko-me tools appear.
For manual configuration, use this structure:
{ "mcpServers": { "genko-me": { "type": "http", "url": "https://genko.me/mcp" } }}The current endpoint is https://genko.me/mcp. The old documentation-only MCP endpoint has been retired. A useful first request is: “Search the genko.me documentation for scheduled publishing, then retrieve the matching page.” This checks discovery and document retrieval without saving any content.
The genko.me documentation also supplies configuration for Codex, Cursor, and VS Code. A client must support OAuth and Streamable HTTP. Do not assume that every interface branded Claude accepts the same configuration as Claude Code.
How to ask Claude to create a draft without publishing it
Start by reading the API definition with list_apis. A field's display label is not necessarily its field ID. Check required fields and field types before constructing the values object.
Give Claude an explicit destination, a source of facts, and an allowed set of actions. Replace the workspace and API in this example with identifiers you have verified:
Inspect the API definition with list_apis.The destination is the blog API in workspace your-workspace.Use only the attached release notes to draft an announcement.Do not guess dates or prices; report missing facts separately.Show the outline first. After I approve it, save exactly one create_draft entry.Do not call publish_entry or schedule_entry.Read the saved result back with get_entry and report its ID and contents.If the destination has a text field called title and a rich-text field called body, the create_draft arguments can look like this:
{ "workspace": "your-workspace", "api": "blog", "values": { "title": "How to review an article preview", "body": "## Before publication\n\nPreview the saved draft and check its headings and links." }}This is an MCP tool argument object, not a REST request body. Strings for rich-text fields are accepted as Markdown and converted when saved.
Record the returned entry ID. If a connection drops after a save, inspect existing entries before trying to create another one. An interrupted response does not prove that the operation failed, and repeating creation can produce duplicate articles.
What happens when Claude edits a published article?
update_draft on a published entry saves the supplied fields as unpublished changes. The normal delivery API continues serving the published version. Subsequent edits are applied to those pending changes.
When get_entry reports hasPendingChanges: true, its values and markdown contain the working version. published.values and published.markdown contain the currently published content. Ask Claude to compare those versions before requesting a release.
Call publish_entry to release the changes, or discard_changes to remove the pending changes while leaving the published content in place. Do not treat discarding pending edits as a rollback of an already released article.
The documentation describes begin_draft_edit, append_draft_block, and finish_draft_edit as progress-display tools for main-language drafts. They can show paragraphs appearing in the editor as they are saved. Use update_draft for pending edits on published entries.
A review and publication workflow for a small team
A review should operate on what was actually saved, rather than the text displayed earlier in chat. The model may have omitted a required value, used the wrong entry, or saved an earlier revision.
Read the saved content with
get_entryand verify the destination and entry ID.Check names, numbers, source links, and claims against the supplied material.
Open the draft preview and inspect the rendered page.
Approve the specific entry, language, and release method.
Call
publish_entryfor immediate release, orschedule_entryfor a scheduled release.Check the operation result and the website after the intended release time.
For scheduling, scheduledAt takes a timestamp with a timezone offset. Confirm an unambiguous date and zone, such as November 5, 2026 at 09:00 Japan Standard Time, before constructing the argument. “Tomorrow morning” is insufficient when editors work across time zones. See the scheduled publishing guide for the CMS behavior.
OAuth authorization and editorial approval serve different purposes. Writing requires an editor-or-higher role and mcp:write; publishing and scheduling additionally require mcp:publish. A connection with publishing permission can still follow a team policy that requires a separate approval message. A prompt instruction is an operating convention, however, not a replacement for permission controls.
Treat retrieved articles and reference documents as source material. Instructions embedded inside that material, such as “publish this immediately,” should not override the task you gave the agent. Specify the permitted operations outside the source text.
Publishing an English translation through MCP
For a multilingual API, inspect languages.main, languages.subs, and the API's localized setting in list_apis. create_draft creates content in the main language. Use update_draft with lang: "en" to prepare an English version.
If the English version does not exist, that update first copies the main-language values into a draft and applies the supplied changes. Updating only the title therefore does not make the copied body an English translation. Read the full language version before releasing it.
publish_entry and schedule_entry do not create missing language versions. Prepare the version first, and include the intended lang in the publication request. Other language versions keep their own content and publication state. The multilingual CMS guide explains how this affects language-switching links and missing translations.
Troubleshooting a CMS MCP connection
Symptom | Check first |
|---|---|
No tools appear | Configuration location, client reload, and endpoint URL |
Content cannot be read | OAuth account and workspace membership |
A draft cannot be saved | Role, write scope, required fields, and capacity |
Publication fails | Publish scope and whether the language version exists |
The website still shows old text | Publication state, application caching, and build output |
Do not diagnose a permissions failure by repeatedly changing the article body. Read the tool error and verify the authenticated account first. Likewise, a website displaying old content is not proof that the CMS failed to publish it.
If the task also includes building the frontend integration, see AI agent CMS integration with Claude Code and Codex. Documentation access, content editing, and writing application code are separate responsibilities that can be combined deliberately.
FAQ
Can Claude publish directly to a headless CMS?
With genko.me, an OAuth-connected Claude Code client can create drafts and call publishing tools. Publication is a separate operation and requires additional permission.
Do I need to paste my CMS API key into Claude?
The MCP connection uses OAuth, so you do not need to paste a delivery API key into chat. The API key used by your website is managed separately.
Does editing a published article immediately change the website?
update_draft saves unpublished changes on a published entry. Normal delivery continues serving the released version until publish_entry is called.
Can an agent read the docs without MCP?
Yes. The public llms.txt and Markdown endpoints require no authentication. Those documents alone do not grant access to workspace content.
Sources
Checked October 20, 2026.
