Royal MCP
Officialby royalplugins
README.md
<div align="center">
# Royal MCP
Royal MCP is an open-source, security-first WordPress plugin that connects Claude, ChatGPT, Perplexity, Gemini, and any other MCP agent to your site.
[](https://wordpress.org/plugins/royal-mcp/)
[](https://www.php.net/)
[](https://www.gnu.org/licenses/gpl-2.0.html)
[](https://wordpress.org/plugins/royal-mcp/)
[Download on WordPress.org](https://wordpress.org/plugins/royal-mcp/) · [Documentation](https://royalplugins.com/support/royal-mcp/) · [Royal Plugins](https://royalplugins.com)
</div>
---
Agents can read and write posts, pages, media, users, menus, WooCommerce orders, and Elementor pages over the [Model Context Protocol](https://modelcontextprotocol.io/). Every call is capability-gated, rate-limited, and audit-logged.
## Capabilities
### WordPress core (85 tools, always available)
- **Content** — Posts, pages, custom post types (full CRUD + revisions + featured images)
- **Taxonomies** — Categories, tags, custom taxonomies, term meta, post-term linking
- **Media** — Browse, upload (URL or base64), update metadata, delete
- **Comments** — Create, moderate (approve / spam / trash)
- **Users** — Read display names + roles (emails and usernames are not exposed)
- **Menus** — Read, create items, reorder, update with destructive-write guardrails
- **Theme** — Custom CSS, theme mods, active theme detection
- **Site** — Permalink structure, options (allowlisted), site info
- **Search** — Cross-content search by query
- **SEO** — Yoast / Rank Math / AIOSEO meta read/write where the plugin is active
- **Diagnostics** — Site status (WP/PHP/MySQL/plugins/themes/cron in one call), PHP error-log tail, WP cron schedule, and MCP `royal_mcp_connection_health` (returns route, auth method, session ID, plugin version, and active page-builder versions for Divi + Elementor + Gutenberg)
### Plugin integrations (124 tools, conditional)
Auto-register only when the integrated plugin is active.
| Plugin | Tools | What's covered |
|---|---|---|
| WooCommerce | 29 | Products, variations, attributes, coupons, orders (create/update/notes), customers, store stats |
| Elementor | 14 | Clone pages, replace text, swap images, get outline (with optional include-styles), read single element, list templates, import templates, add widget, rebuild post_content, widget-schema discovery, widget-list discovery, dynamic-tag discovery |
| Divi | 9 | Format detection (D4 shortcode vs D5 block), page outline, layout validation, library list + get, find/replace with builder-format awareness, clone, image swap, library apply |
| GuardPress | 7 | Security score, failed logins, blocked IPs, vulnerability scans, audit log |
| SiteVault | 6 | Trigger backups, monitor progress, list schedules |
| Royal AI Firewall | 6 | Dashboard stats, recent bot hits, per-bot policies (allow / block / challenge), daily rollups |
| Yoast SEO | 5 | Read/write Yoast meta (raw + resolved), capture JSON-LD schema graph, list indexed internal links, list Premium redirects |
| Redirection | 4 | List redirects with group + URL-substring filters, create + update redirects (301 / 302 / 307 / regex / groups), list redirect groups |
| Royal Ledger | 4 | Software costs, renewal dates, license keys (values never exposed) |
| Advanced Custom Fields | 4 | Read/write ACF fields with each field's Return Format respected (hydrated post objects, parsed repeater rows, image arrays); enumerate field groups |
| UpdraftPlus | 4 | List backup history, read per-backup status, trigger async backups with entity filtering, read schedule |
| WPForms | 4 | List forms, read a single form's parsed field schema, (Pro) list submissions, (Pro) read single submission |
| Solid Security | 4 | Read security status, list currently locked-out IPs, read the security event log, add an IP to the ban list |
| MonsterInsights | 4 | Read the analytics overview, top pages, traffic sources, and top Google Search Console queries |
| BuddyPress | 4 | List community members, read a single member profile, list groups, read the activity feed (same detection covers BuddyBoss Platform) |
| Contact Form 7 | 3 | List forms, read a single form's parsed field schema, list submissions (via Flamingo add-on) |
| W3 Total Cache | 3 | Read cache configuration across every module, purge cache (all / by URL / by post), read usage statistics |
| Duplicator | 3 | List migration packages, read per-package status, get the installer URL for a completed package |
| Royal Links | 3 | Branded short links, click stats |
| ForgeCache | 4 | Cache stats, clear cache, purge URL, real-user Core Web Vitals (INP/LCP/CLS/TTFB) |
## WordPress Abilities API bridge (WP 6.9+)
WordPress 6.9 shipped the [Abilities API](https://developer.wordpress.org/plugins/abilities-api/) — a primitive that lets plugins register typed capabilities AI agents can call. As of 1.4.38, every Royal MCP tool also registers as a WordPress ability, giving you three ways to reach the same handlers:
1. **Native** — Royal MCP's `/wp-json/royal-mcp/v1/mcp` Streamable HTTP endpoint (unchanged, always available).
2. **WP MCP Adapter** — if the [`wordpress/mcp-adapter`](https://github.com/WordPress/mcp-adapter) package is installed, Royal MCP registers a named `royal-mcp-server` on the `mcp_adapter_init` hook alongside adapter's default server.
3. **WP core REST** — direct ability invocation at `/wp-json/wp-abilities/v1/abilities/{name}/run` for callers that prefer the core WP endpoint.
Same handlers, three transports, one set of per-tool capability gates. Bridge can be disabled with the `royal_mcp_abilities_registration_enabled` option (default: on).
## What we don't do
Explicit scope boundaries — the integration model is "narrow tools that work reliably," not "expose every API surface."
- **No widget-level Elementor generation from scratch.** Atomic widgets (Editor V4) pass through opaque; we never decode atomic schemas because Elementor itself may shift them.
- **No Beaver Builder / Bricks page-builder JSON writes.** Standard post content is readable and writable; page-builder-specific JSON storage is opaque unless covered by a dedicated tool. (Elementor and Divi have dedicated tools — see the integration table above.)
- **No theme builder template creation** (Elementor or otherwise).
- **No core file modifications** — Royal MCP never writes to `wp-content/themes`, `wp-includes`, or `wp-admin`.
- **No plugin installation or upgrades via MCP.** Discovery yes; install/activate/deactivate no.
- **No raw SQL.** Queries go through `WP_Query` and `$wpdb->prepare()` only.
## Connect
### Install
1. Install from [WordPress.org](https://wordpress.org/plugins/royal-mcp/) (recommended — auto-updates via WP admin) or upload the GitHub release zip.
2. **Royal MCP → Settings** → click *Generate API Key*.
3. Pick a client below.
### Claude.ai web (OAuth — recommended)
Easiest path — no config file edits, no API key in your client.
1. In Claude.ai → **Settings → Connectors → Add Custom Connector**.
2. URL: `https://yoursite.com/wp-json/royal-mcp/v1/mcp`
3. Approve the OAuth consent screen when prompted. Claude.ai handles dynamic client registration + PKCE flow against your site.
### Claude Desktop (.mcpb one-click bundle — new in 1.4.38)
Easiest Claude Desktop path — no `mcp-remote`, no npx, no config-file editing.
1. Download `royal-mcp-1.4.38.mcpb` from the [latest GitHub release](https://github.com/royalplugins/royal-mcp/releases/latest).
2. Double-click the `.mcpb` file — Claude Desktop opens the install prompt.
3. Enter your site URL + API key when prompted. Connection is live.
The bundle ships a zero-dependency stdio-to-HTTPS bridge in Node ≥18, which Claude Desktop already includes. See [Claude Desktop MCP Bundles](https://modelcontextprotocol.io/) for the .mcpb spec.
### Claude Desktop (OAuth via mcp-remote)
```json
{
"mcpServers": {
"my-wordpress": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://yoursite.com/wp-json/royal-mcp/v1/mcp"]
}
}
}
```
Config path: `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows).
### Claude Desktop (API key)
Skip OAuth and authenticate via header:
```json
{
"mcpServers": {
"my-wordpress": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://yoursite.com/wp-json/royal-mcp/v1/mcp",
"--header", "X-Royal-MCP-API-Key:YOUR_API_KEY"
]
}
}
}
```
### ChatGPT
ChatGPT's custom MCP connector takes the same URL as Claude.ai web. Follow ChatGPT's connector flow and paste `https://yoursite.com/wp-json/royal-mcp/v1/mcp`.
### Raw HTTP (custom clients)
```bash
# 1. Initialize a session. -i prints headers so you can grab Mcp-Session-Id.
curl -i -X POST https://yoursite.com/wp-json/royal-mcp/v1/mcp \
-H "X-Royal-MCP-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"method": "initialize",
"id": 1,
"params": {
"protocolVersion": "2025-11-25",
"capabilities": {},
"clientInfo": {"name": "my-app", "version": "1.0"}
}
}'
# 2. List available tools using the session id from the response header.
curl -X POST https://yoursite.com/wp-json/royal-mcp/v1/mcp \
-H "X-Royal-MCP-API-Key: YOUR_KEY" \
-H "Mcp-Session-Id: <session_id>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "tools/list", "id": 2}'
```
## Security model
| Layer | What it does |
|---|---|
| **API key** | 32-char hex, timing-safe comparison. Sent via `X-Royal-MCP-API-Key` header. Regenerate from admin without server restart. |
| **OAuth 2.1** | RFC 7591 Dynamic Client Registration, RFC 8414 metadata, PKCE S256 required, refresh tokens supported. No implicit grant. No client_credentials grant. |
| **Capability gating** | Every tool checks WordPress capabilities. `edit_posts` for create/update, `manage_options` for site settings, `edit_post` per-post for individual operations. |
| **Rate limiting** | 60 requests/minute per IP, sliding window. |
| **Session model** | Sliding 24h TTL with refresh-on-access. Cryptographically secure 32-byte session IDs. |
| **Activity log** | Every tool call writes a row to a database log. Records: tool name, argument keys, IP, User-Agent, errors. **Never** records argument values (they may contain customer data). |
| **OAuth state recovery** | One-click *Reset OAuth State* admin button wipes all clients + tokens + auth codes, without affecting your API key or settings. |
| **Discovery** | `.well-known/oauth-authorization-server` and `.well-known/oauth-protected-resource` served at site root per RFC 8414 + RFC 9728. |
Full security architecture: [royalplugins.com/support/royal-mcp/](https://royalplugins.com/support/royal-mcp/)
## Royal MCP Pro (paid)
The Free plugin is fully featured for individual site owners. Royal MCP Pro extends it for agencies and multi-site operators:
- **Divi Pro suite** — page clone, image swap, template import, full library CRUD, D4→D5 Migrator, global preset bulk-apply (8 tools)
- **Elementor Pro depth** — additional Elementor tools beyond the Free integration
- **Universal audit log** — every AI operation logged with attribution + export
- **72-hour undo on every write** — every destructive Pro tool returns an undo token; reverse any operation within the window
- **License-gated updates** through the standard WordPress updater — no runtime dependencies on external license servers
[Learn more at royalplugins.com/royal-mcp-pro](https://royalplugins.com/royal-mcp-pro/)
## Further reading
- **[Editing Elementor with Claude: The Four Workflows That Work Today](https://royalplugins.com/blog/editing-elementor-with-claude-four-workflows/)** — the four real architectures for AI-editing Elementor pages and when to reach for which. User-facing version with prompts, examples, and a video demo of the clone-and-customize flow.
- **[Editing Elementor with Claude: 4 MCP Architectures](https://royalplugins.hashnode.dev/editing-elementor-with-claude-mcp-architectures)** — engineer's cut on Hashnode. The PHP under the hood of `elementor_clone_page`, the six tool signatures, and the HTTP-Basic-vs-OAuth-2.1 auth-model tradeoff.
## Related projects
- [GuardPress](https://royalplugins.com/guardpress/) — WordPress security hardening
- [SiteVault](https://royalplugins.com/sitevault/) — WordPress backups and migration
- [ForgeCache](https://royalplugins.com/forgecache/) — Caching and performance
- [FormForge](https://royalplugins.com/formforge/) — Form builder with PDF generation
- [SEObolt](https://royalplugins.com/seobolt/) — SEO toolkit for WordPress
## License
GPLv2 or later — see [LICENSE](LICENSE) or the [GNU site](https://www.gnu.org/licenses/gpl-2.0.html).
Royal MCP is provided as-is. API keys protect your endpoints; guard them like any other credential. You are responsible for the content, commands, and actions any AI platform is allowed to perform on your WordPress site.
---
<p align="center">
<strong>Built by <a href="https://royalplugins.com">Royal Plugins</a></strong><br/>
Lightweight, security-first WordPress plugins.<br/>
© 2026 Royal Plugins.
</p>
This server cannot be deployed
Maintenance
ActivityActive
ResponsivenessWithin a week