Gutenberg MCP server, with undo on every edit.
A Gutenberg MCP server lets Claude, ChatGPT or Cursor read and edit block editor pages on a live WordPress site, block by block. With Respira every edit lands on a copy first, and you can undo it for 90 days.
7 days free. No card. Runs on the AI subscription you already have.
- Support
- Full
- Gutenberg tools
- Core set
- Latest release touching it
- 9.2.7
- Releases touching it
- 55
Respira is an independent MCP server. Not affiliated with, endorsed by, or sponsored by the WordPress Foundation. WordPress is a registered trademark of the WordPress Foundation.
What works today. What still needs you.
Read from the current MCP server release, first-class reads and writes across the builder structure.
Works now
- Block tree reads with
respira_read_pagereturn the actual block structure, not just rendered HTML. - Per-element writes via
respira_find_element+respira_update_elementpreserve block attributes and innerBlocks. - Full-page replacement via
respira_update_pageworks for raw HTML imports (Word doc → blocks), with snapshot rollback on every write. - Pattern, reusable block, and template-part awareness through standard WP REST endpoints.
- Custom blocks register via the same path as core blocks. If the block exposes a REST shape, Respira can edit it.
- A generic accordion, tabs, icon, video, spacer, divider or list sent to
respira_build_pageis saved as the core block WordPress itself saves: the WordPress 7.1 accordion and tabs blocks with their items and panels (details blocks on versions without them), the core icon block, a video embed, and spacer, separator and list blocks with their markup (plugin 9.2.7). - On a page that already holds Kadence Blocks, Spectra, GenerateBlocks or GreenShift blocks, new elements follow the page's library even when the agent names builder "gutenberg", and the answer says so in
library_blocks_hint. Core block names such ascore/headingstill write core blocks. - Every block editor write is render-checked, the same as the other builders: Respira reads the saved markup the way WordPress's block parser does and renders every block in process, on a draft or a duplicate too. The result carries
render_validator_pass,validator_warningsnaming each problem with its block and path, and thesnapshot_uuidthat undoes the write. A closing comment with no opener, a block never closed, attribute JSON that does not parse, a heading whose text sits only in its attributes, or a block whose render throws is named; an unregistered block type or an attribute WordPress will drop is a warning. Kadence, Spectra, GenerateBlocks and GreenShift pages take the same check.
Where a human still steps in
- The block editor's own save-time validation is a separate check from Respira's render check. Respira names a broken block, an attribute that does not parse or an unregistered type in the write result; a block whose markup WordPress renders but whose editor schema disagrees with it still shows a validation prompt the next time a person opens the page.
- Some block-locking patterns (locked templates, restricted block transforms) are honored at write time but not surfaced as a tool-level error yet.
- Synced patterns inserted as references update on the next page render, no live preview from the MCP side.
Hit one of these and the snapshot gives you a clean way back.
Gutenberg runs on the universal tools.
Find, update, move and remove elements, build whole pages, snapshot and roll back. Reads return the builder structure and writes keep it intact.
Three prompts you can paste right now.
Each one assumes Respira is connected to a Gutenberg site. Paste it into your AI tool and run.
-
Update a hero headline across 20 posts
For every post in the "campaign-q3" category, find the first heading block and replace its content with "Ship faster, ship calmer." Snapshot each one before the change. -
Convert a Word doc into native blocks
Read the HTML at https://drive.example.com/post.html and convert it to native Gutenberg blocks (paragraph, heading, list, image). Create a new draft post titled "Q3 product update". -
Audit image alt text across the site
List every image block on every published post or page where the alt attribute is empty. Group by post title.
More recipes, per builder, in the Prompt Book.
Connect a Gutenberg site in two minutes.
Pick your client and paste. The site URL and key come from your setup page, or from Respira › Setup in wp-admin. Node.js 20 or newer for the local server.
Claude Code
claude mcp add respira-wordpress --env WORDPRESS_URL=https://yoursite.com --env WORDPRESS_API_KEY=respira_your_api_key_here -- npx -y @respira/wordpress-mcp-server@latest Put in your own site URL and key, run it, then check with /mcp. Every site at once: pass --env RESPIRA_CONFIG_B64=… from your setup page instead of the two values. The full Claude Code guide covers the first edit and undo.
Claude Desktop and Cursor
{
"mcpServers": {
"respira-wordpress": {
"command": "npx",
"args": ["-y", "@respira/wordpress-mcp-server@latest"],
"env": {
"WORDPRESS_URL": "https://yoursite.com",
"WORDPRESS_API_KEY": "respira_your_api_key_here"
}
}
}
} - Claude Desktop, macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Claude Desktop, Windows:
%APPDATA%\Claude\claude_desktop_config.json - Cursor:
.cursor/mcp.jsonin your project
The file is claude_desktop_config.json, not config.json. Every site at once: replace the two env values with RESPIRA_CONFIG_B64 from your setup page.
Codex
codex mcp add respira-my-site --url https://yoursite.com/wp-json/respira/v1/mcp
codex mcp login respira-my-site Run them one at a time. The second opens your browser to sign in to Respira; no key goes in the config. By hand, in ~/.codex/config.toml, then run the login command:
[mcp_servers.respira-my-site]
url = "https://yoursite.com/wp-json/respira/v1/mcp" Browser sign-in, no key
https://yoursite.com/wp-json/respira/v1/mcp Claude Desktop, claude.ai, ChatGPT and Cursor: add a custom connector, paste your site's MCP URL, leave Client ID and Client Secret blank, and approve the sign-in on respira.press. One connector per site.
Any other client
npx add-mcp "npx -y @respira/wordpress-mcp-server@latest" Detects Claude Code, Cursor, Codex, Windsurf and more, and writes the config. Set WORDPRESS_URL and WORDPRESS_API_KEY afterwards.
Common errors
- The server does not show up in /mcp, or the client says it failed to start.
- Cause Node.js is older than 20, or the site URL and key are missing.
- Fix Run
npx @respira/wordpress-mcp-server --doctorin the same shell. It names the missing setting, a bad URL or a refused key.node -vmust print 20 or newer. - ENOENT errors that mention
/_npx/ornode_modules. - Cause The npx cache is damaged, often by an interrupted install.
- Fix Run
rm -rf ~/.npm/_npxand restart the client. Or install once withnpm install -g @respira/wordpress-mcp-serverand userespira-wordpress-mcpas the command. - The browser sign-in opens a "Page not found" on
yoursite.com/authorize. - Cause A Client ID was filled in on the connector, usually the
respira_site_key. - Fix Remove the connector and add it again with the MCP URL only. Leave Client ID and Client Secret blank. Sign-in happens on respira.press, never on your site.
- The MCP address returns 404.
- Cause WordPress is on plain permalinks, so
/wp-json/addresses do not resolve. - Fix In wp-admin open Settings › Permalinks, choose Post name and save once.
- Calls fail with 401, 403, or HTML where JSON belongs.
- Cause A firewall, a bot filter or a challenge page answers before WordPress does, or the host strips the Authorization header.
- Fix Open Respira › Troubleshoot in wp-admin. It runs the checks from the site's own server, names what is in the way and writes a report for your host.
- The agent says it saved, and the live Gutenberg page looks the same.
- Cause The edit is on a draft duplicate, waiting for your approval. That is the default on a published page.
- Fix Approve the duplicate in wp-admin under Respira, or from its preview page. Until then the live page stays as it was.
Still stuck? Troubleshooting in the docs, or write to word@respira.press with the first error line.
What changed for Gutenberg lately.
The last 5 releases that mention Gutenberg, filtered from the same changelog the releases page reads.
-
- WordPress 7.1 accordions, tabs and icons in the block editor. A generic accordion, tabs, icon, video, spacer, divider or list sent to build_page on a block editor page used to be saved as an empty block.
- A generic section on a Beaver Builder page shows its content. The shape agents send to every builder, a section holding a heading and text, was saved on Beaver with "section" and "text" as module names. Beaver has neither, so the page showed nothing but its title while the write said success.
- Two block editor slips that showed as invalid content. A heading sent with a tag setting (h1) saved an h1 while the block said level 2, and a section with an anchor saved its wrapper without the id. Both now save the way the block editor does.
-
- Edit links open the page in its own builder. The link Respira gave for editing a page was WordPress's edit link, which opens the block editor. A Divi 5 page there shows every section as an unsupported block, and a customer reasonably took the page for broken.
-
- The block library guidance matches inject_builder_content. It now says that builder "gutenberg" on a page that already has a library's blocks writes that library's blocks (with library_blocks_hint saying so), that inject reports library_blocks like build_page, and that core block names write core blocks on a library page.
-
- WPBakery pages with many addon elements can be read and edited again. On a WPBakery site running The7 with Ultimate VC Addons, Revolution Slider, Go Pricing and WooCommerce, every builder tool failed: finding an element, reading the page's structure, duplicating it, and every edit, even a one word change on a small draft.
-
- Every builder says what it can write. get_builder_info now carries write_capabilities for every builder: whether it builds pages, adds elements or only edits text, and whether a new element is native, written as core blocks, or partial.
Questions people ask about Gutenberg and MCP.
Is there an MCP server for Gutenberg?
Yes. Respira is an independent MCP server that reads and writes Gutenberg in its own format, with first-class reads and writes across the builder structure. It is not made by the Gutenberg team.
Which tools does it use for Gutenberg?
Gutenberg runs through the universal tools: find, update, move and remove elements, build pages, snapshot and roll back. Reads return the builder structure, and writes keep it.
What happens when the agent gets an edit wrong?
Nothing on the live page. The agent edits a copy first, you approve it inside WordPress, and every write is snapshotted with 90 days of undo.
Do I need a developer or a terminal?
No. Sign in with your browser from Claude, ChatGPT or Cursor and approve the connection once. Coding tools get a one-line command.
Does it work with a Gutenberg site that also runs WooCommerce?
Yes. The WooCommerce add-on adds 104 store tools on the same connection, with the same duplicate-first approval flow.
The other builders, same server.
Start with one site. Free for 7 days.
Maker is €9 a month after the trial. No card for the trial, and it runs on the AI plan you already have, so there is no extra AI bill.