Shortcode-aware editing for legacy WPBakery (Visual Composer) sites. Reads nested vc_* shortcodes, writes through duplicate-first.
Respira gives AI coding agents a structure-aware way to read and write WPBakery 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.
Visual Composer moved from read to write. Respira now writes in VC's canonical storage format, so the editor loads the page and the front end renders. Labeled with its caveats (VC recompiles on the next editor save)
WPBakery / Bricks / Breakdance extractors are queued for the next ship. Today the dispatcher returns $post->post_content for those builders, which is at worst the same false negative the audit reported before this fix —
Bug #8 — find_element surfaces matches[] + count on multi-match. Pre-fix the API returned a single element and a 200 status even when a page contained 3+ elements satisfying the same identifier (e.g. two vc_btn of the sa
Bug #9 — security validator allows first-party builder shortcodes + names offending pattern. Pre-fix [vc_gmaps link="#E-8_JTNDaWZyYW1lJTIw..."] was getting rejected because the URL-encoded value decodes to <iframe> and t
Bug #11 — vc_message label resolver drops the color attr. Pre-fix derive_wpbakery_label() had 'vc_message' => array( 'message_box_color', 'el_id' ) in its catalog. message_box_color returns the style ("warning" / "info"
Respira_Builder_WPBakery::parse_shortcode_attrs preserves "0" attribute values. Pre-v7.0.35 the three regex-capture branches (double-quoted, single-quoted, unquoted) were guarded by ! empty( $match[N] ). empty("0") retur
Verified end-to-end on cekt.ro itself via SSH'd WP-CLI: duplicate of 119462 + remove_element on the marquee row returns ok from the writer and the resulting URL returns HTTP 200 with 206 KB body and the row 3 vc_row shor
Concrete features in the current MCP server release. Tool names link directly to the adapter.
Shortcode parser walks nested vc_* shortcodes and preserves attribute order on round-trip.
Per-element edits via respira_find_element + respira_update_element work on individual modules without flattening the surrounding structure.
Full-page text and CTA refresh across estates of legacy WPBakery pages.
Standard WordPress REST endpoints for media, menus, and options work as on any other site.
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.
Deeply nested third-party WPBakery shortcodes (4+ levels) can lose attributes on round-trip. Always duplicate first.
Visual Composer Premium add-on shortcodes are read but not all are write-validated. Use a snapshot.
Frontend Editor settings are not exposed through the MCP. Edits go through post_content as the Backend Editor expects.
No design-system or color-palette tooling. WPBakery does not expose one natively, and Respira does not synthesize it.
Tools
WPBakery uses the universal toolset
WPBakery 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.
Refresh a hero CTA across legacy pages
On every page in the "/services/" path, find the first vc_btn shortcode in the page and update its title to "Book a call". Duplicate each page first, then show me a diff.
Audit shortcode usage
List every distinct vc_* shortcode used across the site and how many times each appears. Output as a markdown table sorted by frequency.
Clean up empty rows
Find every vc_row that contains no vc_column children. List them by page so I can decide whether to delete.
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.
WPBakery shortcode round-tripping has known edge cases on deeply nested vc_row + third-party shortcodes. Always duplicate a page before the first AI edit on a critical template.
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.