Block-aware editing for the WordPress Block Editor. Read, write, and snapshot every core block without flattening structure.
Respira gives AI coding agents a structure-aware way to read and write Gutenberg content through a duplicate-first workflow. Page and element writes are snapshotted, and changes can be reviewed before going live.
Everything below is read from this repo at build time: tool registrations come from the MCP server adapter files; changelog entries are filtered from the same source the /releases timeline uses.
New Gutenberg blocks injected with mode:append could be invisible in the block editor even though they were saved. complexify_blocks() used an agent-supplied simplified content field verbatim as a block's innerHTML, so a
Nested Gutenberg blocks were dropped when updating or appending. A group, columns/column, or any container block round-tripped through the block simplifier came back as an empty wrapper, silently discarding every nested
Gutenberg update_element with {content: "..."} now persists to post_content. The universal interface wrapped any flat patch missing a "structural" key into the adapter's attrs bucket. For Gutenberg that meant {content: "
Gutenberg is_builder_used() disqualifier checks values, not just key presence. Each "other-builder" meta key now carries a predicate matching the source builder's own activity convention:
Verified the failure mode against M.P.'s exact scenario: a post duplicated from an original that has _et_pb_use_builder=off will, pre-v7.0.54, fall through Gutenberg's claim check despite Gutenberg being the only sensibl
Gutenberg inject_content now guards the write against third-party save_post reverts AND verifies persistence. The customer report: 9 successive duplicates (340148, 340151, 340153, 340155, 340157, 340159, 340161, 340163,
The Gutenberg silent-revert family also lives in the Divi adapter's update path for posts (Divi was enabled-then-disabled mid-session on the customer site, so duplicate detection may still route through Divi while Gutenb
Concrete features in the current MCP server release. Tool names link directly to the adapter.
Block tree reads with respira_read_page return the actual block structure, not just rendered HTML.
Per-element writes via respira_find_element + respira_update_element preserve block attributes and innerBlocks.
Full-page replacement via respira_update_page works 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.
Known limits
Where you still need a human pass
Honest list of edges. If you hit one of these, the snapshot workflow gives you a clean rollback path.
Block validation errors in the editor still need a human round-trip. Respira writes the markup; if the block schema rejects it on next edit, the user sees a validation prompt.
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.
Tools
Gutenberg uses the universal toolset
Gutenberg edits run through Respira's universal tools: respira_find_element, respira_update_element, respira_update_page (for full-page replacement only), respira_get_snapshot, and respira_create_page_duplicate. See the complete tool catalog.
Example prompts
Three prompts you can paste right now
Each one assumes Respira is connected to your WordPress site through the MCP server below. Copy a prompt, paste into your MCP client, 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.
Setup
Connect Respira's MCP server
Drop this into your MCP client config (Claude Desktop, Cursor, Codex, Windsurf — any MCP-compatible client). Generate an API key from your Respira dashboard first.
cookies. the legal kind. one click and i'll get out of your way.
what you'd actually be saying yes to
tune your cookie preferences
essentials stay on regardless. the rest is opt-in. nothing fires until you tap save.
essentials
the cookies that make logging in work and remember which partner sent you. switching these off would just break the site, so the law does not let me make you opt out.
first-touch source on a /respira_acq cookie, plus a flag if an ai chatbot referred you. helps me figure out what is working without turning you into a tracking pixel statue.
messaging
customer.io for in-app notes, chatwoot when you click the support bubble. off by default. on means i can actually answer you in the app.