Cross-plugin Composers
Complete reference for the 4 cross-plugin composer tools in Royal MCP Pro. These orchestrate multiple plugins (SiteVault, ForgeCache, SEO plugins, GuardPress) plus core WordPress in a single MCP call — publishing with backup + cache purge in one shot, site launch readiness rollups, monthly maintenance reports, and site-wide theme asset URL migration.
The compose_mode framework
Every composer accepts a compose_mode argument controlling how multi-step operations behave when one step fails. Three modes:
| Mode | What happens on step failure | Best for |
|---|---|---|
strict | Abort the composer immediately. If reversible steps ran successfully before the failure, they get rolled back. | Destructive workflows where partial completion is worse than nothing (e.g., publish-and-promote). |
best_effort | Log the failure, continue with remaining steps. Response's steps array reports per-step status. | Read-only rollups where partial data is still useful (e.g., launch readiness, monthly reports). |
report_only | Run every step in dry-run / read-only fashion. Never writes; returns what WOULD happen. | Previewing what a composer would do before committing. |
Defaults per tool:
wp_publish_and_promote_pro→ defaultstrictwp_prepare_for_launch→ defaultbest_effortwp_monthly_maintenance_report→ defaultbest_effortwp_migrate_theme_assets→ defaultbest_effort
Graceful degradation on missing plugin deps
Composers orchestrate multiple plugins — but they don't refuse when a plugin isn't installed. Instead, individual steps skip with a note in the response's per-step status. Examples:
wp_publish_and_promote_protries to fire a SiteVault pre-backup. If SiteVault isn't active, the step is skipped-with-note and the composer continues to the next step.- Same tool tries to purge ForgeCache after publish. If ForgeCache isn't active, skipped-with-note.
- Same tool routes SEO meta to whichever SEO plugin is active (Yoast / Rank Math / AIOSEO / SEObolt) — auto-detects. If none is active, SEO meta step is skipped-with-note.
wp_prepare_for_launchtries to use SEObolt for the SEO audit step, falls back to native basic checks if SEObolt isn't installed.wp_prepare_for_launchtries to use GuardPress for the security status step, falls back to native basic checks.
The composer response's per-step details always tell you which plugin was used (or which fallback was used, or which step was skipped entirely).
The 4 tools
wp_publish_and_promote_pro
Full publish workflow with rollback: SiteVault pre-backup (when available) → featured image sideload → create post → set featured → categories/tags → SEO meta (Yoast/Rank Math/AIOSEO/SEObolt auto-detect) → ForgeCache purge (when available).
Arguments
| Name | Type | Description |
|---|---|---|
title required | string | Post title. |
content required | string | Post body content (HTML / blocks). |
status | string | Publish state. One of publish (default) / draft / pending / private / future. |
publish_date | string | MySQL datetime (YYYY-MM-DD HH:MM:SS). If in the future + status=publish, WP auto-schedules it. |
featured_image_url | string | Optional. Public URL to sideload as the post's featured image. Rolled back on strict-mode failure. |
category | string | Category name — created if it doesn't exist. |
tags | array<string> | Tag names to attach. WP creates any that don't exist. |
seo_title | string | SEO title tag (routed to Yoast / Rank Math / AIOSEO / SEObolt, whichever is active). |
seo_description | string | Meta description (routed to detected SEO plugin). |
seo_focus_keyword | string | Focus keyword for the detected SEO plugin. |
compose_mode | string | strict (default) / best_effort / report_only. |
pre_backup | boolean | Trigger SiteVault snapshot before writing. Default true when SiteVault is active; skipped-with-note when absent. |
post_purge_cache | boolean | Purge ForgeCache after publishing. Default true when ForgeCache is active; skipped-with-note when absent. |
Undo: 72h token — deletes the created post + attached media (sideloaded featured image).
wp_prepare_for_launch
Read-only site-readiness rollup: backup snapshot (SiteVault), SEO audit (SEObolt or native), broken-link scan of home-page same-origin refs, TTFB perf check, security status (GuardPress or native).
Arguments
| Name | Type | Description |
|---|---|---|
compose_mode | string | strict / best_effort (default) / report_only. |
skip_backup | boolean | If true, skip the SiteVault backup step. Useful when a backup was just taken or when SiteVault isn't installed. |
No undo (read-only tool).
wp_monthly_maintenance_report
Read-only monthly rollup: pending plugin updates, WP_DEBUG_LOG tail, SiteVault last-backup status, Royal MCP Pro audit-log tool-call summary for the window, home-page perf snapshot.
Arguments
| Name | Type | Description |
|---|---|---|
compose_mode | string | strict / best_effort (default) / report_only. |
window_days | integer | How many days back to summarize (audit-log rollup, backup recency, etc.). Range 1–365. Default 30. |
By default the response contains only the summary + an admin-view URL. The full report attachment (which can contain more sensitive data like error log contents) is gated behind the royal_mcp_pro_maintenance_report_include_attachment filter. Admins who want the full attachment inline in the MCP response can opt in via a small mu-plugin:
add_filter( 'royal_mcp_pro_maintenance_report_include_attachment', '__return_true' );Without the filter, the attachment lives only at the admin-view URL (protected by admin authentication), not in the AI's chat log.
No undo (read-only tool).
wp_migrate_theme_assets
Rewrite theme-scoped asset URLs (/wp-content/themes/{from}/ → /wp-content/themes/{to}/) across post_content on the specified post types. Handles both raw and JSON-escaped slash variants. Snapshots every touched post.
Arguments
| Name | Type | Description |
|---|---|---|
from_theme_slug required | string | Source theme slug being replaced (as it appears in the /wp-content/themes/<slug>/ URL path). |
to_theme_slug required | string | Destination theme slug to substitute in. |
dry_run | boolean | If true, report matches without writing. No undo token issued in dry_run. |
compose_mode | string | strict / best_effort (default) / report_only. |
post_types | array<string> | Which post types to scan. Default [post, page]. Add custom types (e.g. product, elementor_library) to broaden the sweep. |
Example
Do a dry run of wp_migrate_theme_assets from theme "twentytwentythree" to theme "custom-child" across post, page, and product post types.
If the dry run looks clean, commit with dry_run=false.Undo: 72h token — restores prior post_content per touched post.
Still Stuck? Two-Step Support Path
If a composer isn't running the steps you expected, work through these two steps in order.
Step 1: Start with the Royal MCP Troubleshooting Guide
Royal MCP Troubleshooting — Start Here covers MCP-layer issues. If Claude can't reach your site, the composer never fires.
For Pro-specific patterns:
- Undo token errors — expired, consumed, or handler missing
- Pro tool returned upgrade prompt with valid license
Step 2: Email priority support
If you've worked through Start Here and the relevant Pro-specific doc and the issue still isn't resolved, email priority support from your purchase email address at support@royalplugins.com. Priority email support is included with your license — typical response within 24 hours. Never include your license key in email; we look it up from your purchase address.
- Your hosting provider (SiteGround, Cloudways, Hostinger, Kinsta, WP Engine, Liquid Web, self-hosted VPS, etc.)
- Royal MCP Pro version from WP Admin → Plugins
- Which composer you called and the full args you passed (including
compose_mode) - Which sibling Royal Plugins are active — SiteVault, ForgeCache, GuardPress, SEObolt, RAIF, Royal SMTP, etc. + version numbers
- Which third-party plugins are active that a composer might touch — Yoast SEO, Rank Math, AIOSEO, WooCommerce, etc.
- Active caching plugins (LiteSpeed Cache, WP Rocket, W3 Total Cache, SpeedyCache, Hummingbird, none)
- Active security plugins (Wordfence, Defender Pro, Solid Security, NinjaFirewall, none)
- Which MCP client — claude.ai web custom connector, Claude Desktop with
mcp-remote, ChatGPT MCP, Cursor, or another MCP-compatible client - The composer's per-step response (the
stepsarray showing which succeeded, which errored, which skipped) - Screenshot of the most recent
oauth:row in Activity Log AND the most recent Pro tool row in Audit Log with View Details expanded (or confirmation that the logs are empty after a reproduced failure)