WordPress Plugins
Free Tools
Pricing Blog Case Studies Switch to Royal Plugin Graveyard Support My Account Cart
Support / Royal MCP / Troubleshooting — Start Here

Royal MCP Troubleshooting — Start Here

Connector won’t connect, OAuth failing, tools missing, or Claude returning “Couldn’t reach the MCP server”? About 90% of Royal MCP issues resolve in the four basic steps below. Run through them in order before applying any host-specific or advanced fix — it’s the fastest path to a working connector and it gives our support team the diagnostic baseline we need if you do end up writing in.

Why these four steps first

Caching, plugin conflicts, stale OAuth state, and theme interference cause roughly nine of every ten connection failures. Cloudflare AI Bots, SiteGround nginx quirks, and edge-cache poisoning are real issues, but they’re the long tail — not the place to start. The 4-step pass below takes about 5–10 minutes and rules out the common causes before you spend an hour on advanced fixes.

Before You Start

Have these on hand:

What this page is, and isn’t

This is the basic checklist. It assumes Royal MCP is already installed and you’ve tried at least once to connect Claude (or any other MCP client) and it failed. If you’re looking for first-time setup, see the Royal MCP Support hub. If you’re looking for a host-specific advanced fix (SiteGround static files, Cloudflare Transform Rules, cache exclusions), the links at the bottom of this page route you there — but only after the steps below.

The 4-Step Basic Checklist

Update Royal MCP to the latest version

In wp-admin go to Plugins → Installed Plugins, locate “Royal MCP”, and click Update if a newer version is available. Why first: every recent release has shipped meaningful OAuth diagnostics and edge-case fixes that change what you’ll see in later steps.

  • 1.4.13+ — OAuth endpoints send no-cache headers so edge caches stop poisoning them with stale responses
  • 1.4.14+ — OAuth discovery (claude.ai web / ChatGPT) probes get the correct 401 + WWW-Authenticate response instead of a 405
  • 1.4.15+ — API key Regenerate button actually works; MCP sessions use a 24-hour sliding TTL instead of expiring at exactly 1 hour
  • 1.4.16+every OAuth failure writes a structured row to the Activity Log, which is what Step 4 below relies on

Most pre-1.4.16 issues that look like host problems are actually fixed by the update alone.

Run a conflict test (plugin / theme / cache)

This single step resolves the majority of remaining tickets. Don’t skip it — even if you’re certain it isn’t a conflict. We see “I already tried that” very often, and “tried similar” isn’t the same as “ran these exact steps in order.”

(a) Deactivate ALL other plugins except Royal MCP. WordPress → Plugins → check the box at the top of the list, choose Deactivate from the bulk action menu, but uncheck Royal MCP first.

(b) Switch to a default theme. Appearance → Themes → activate Twenty Twenty-Five (or any unmodified default theme). Custom themes sometimes register their own URL rewrites or rewrite filters that interfere with our OAuth endpoints.

(c) Purge every cache. Three layers, all of them:

  • WordPress-side — if you use a cache plugin (LiteSpeed Cache, WP Rocket, W3 Total Cache, SpeedyCache, Hummingbird, etc.), purge it. If LiteSpeed is active, also flush the object cache.
  • Server-level — SiteGround Optimizer, Kinsta cache, WP Engine cache, Liquid Web cache, Cloudways Varnish — purge in your hosting control panel. Many managed hosts have their own cache layer separate from any plugin.
  • Cloudflare / CDN — if you use Cloudflare, purge everything. While you’re there, check whether “Block AI Bots” is enabled in Security → Settings — if it is, turn it off (this single setting breaks MCP for many users; see Step 5 below if disabling it isn’t enough). Also check “Bot Fight Mode” — same issue.
  • Browser cache — Cmd/Ctrl+Shift+R to hard-reload the relevant Claude page.

(d) Retry the connection. If it now works, the conflict was one of the deactivated plugins or the theme. Reactivate plugins one at a time, retrying after each, until it breaks — that’s your culprit. The most common offenders we see, in rough order:

  • Security plugins — Wordfence, Defender Pro, Solid Security (formerly iThemes Security), All In One WP Security & Firewall, NinjaFirewall. These intercept and sometimes block POST requests to the MCP endpoint and OAuth paths. Allowlist /wp-json/royal-mcp/*, /register, /token, and /authorize in the plugin’s firewall rules to unblock.
  • Caching plugins — LiteSpeed Cache and SpeedyCache running together is a confirmed reproducer of OAuth auth-code eviction. Add cache exclusions for the same paths.
  • Login/registration plugins — MemberPress, Paid Memberships Pro, Restrict Content Pro, Ultimate Member, Profile Builder. These can register a page with slug register that wins URL routing over our OAuth endpoint.
  • Custom theme functions — rare, but custom themes that filter rewrite_rules_array can deregister our endpoints.

Wipe stale OAuth state

Prior connection attempts leave behind client registrations, tokens, and authorization codes that can interfere with a fresh test. Wipe them.

On Royal MCP 1.4.17 or newer (one click):

Go to Royal MCP → Settings and click the Reset OAuth State button near the bottom of the page. Confirm in the modal. Done.

On Royal MCP 1.4.16 or older (database queries):

The Reset OAuth State button doesn’t exist yet. Run these queries via phpMyAdmin, your host’s database manager, or SSH (wp db query if you have WP-CLI):

DELETE FROM wp_royal_mcp_oauth_clients;
DELETE FROM wp_royal_mcp_oauth_tokens;
DELETE FROM wp_options WHERE option_name LIKE '_transient_royal_mcp_authcode_%';
DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_royal_mcp_authcode_%';
Custom table prefix?

Some hosts (managed-WordPress, hardened installs) randomize the wp_ prefix. Open wp-config.php and check the $table_prefix line — if it’s anything other than wp_, substitute it in all four queries above before running them.

Then on the Claude side:
  • In Claude (web or Desktop), delete the existing Royal MCP connector.
  • Wait 30 seconds. Claude.ai caches its own discovery state for a short window.
  • Re-add the connector from scratch. This forces a full OAuth flow rather than reusing the cached (and now invalid) client credentials Claude was holding.

If the connection works after this step, the issue was stale OAuth state. You’re done.

Check the Activity Log

If steps 1–3 didn’t resolve it, this step tells us (and you) exactly which validation rule is firing — or whether the request is reaching your WordPress install at all.

In wp-admin go to Royal MCP → Activity Logs. Reproduce the failed connection attempt — click Connect in Claude, watch it fail, then come back to the Activity Log page and refresh.

If there’s a recent row whose action starts with oauth:

Click View Details. The panel shows the OAuth error code and error_description — for example:

  • invalid_grant: Authorization code is invalid, expired, or already used. — usually means object cache (LiteSpeed + SpeedyCache) is evicting the auth code between /authorize and /token. Fix in Royal MCP 1.4.17.
  • invalid_grant: PKCE verification failed. — usually means a security plugin is URL-decoding the POST body. Disable security plugins per Step 2.
  • invalid_grant: redirect_uri mismatch. — Claude’s stored redirect URI doesn’t match what was registered. Wipe OAuth state per Step 3 and try again.
  • invalid_client — client_id Claude is sending isn’t in our database. Wipe OAuth state per Step 3.
  • invalid_request: Missing required parameters — something is stripping POST fields between Claude and your WordPress. Almost always a security plugin or WAF.
If the Activity Log is empty after a reproduced failure

That’s diagnostic on its own. It means the request never reached your WordPress PHP code — the failure is happening at the host edge, in a cache layer, or inside a security plugin’s firewall (before our code runs). Step 5 below lists the most common stack-specific culprits.

Step 5 (Only If Needed) — Stack-Specific Checks

You only need this section if you’ve completed Steps 1–4 above and the connection still fails. If you skipped any of those, go back and complete them first. We’re serious about this — the advanced fixes below assume the basics are already ruled out, and applying them without the baseline usually creates new problems rather than fixing the original one.

Pick the article below that matches your specific stack and symptoms. If you’re not sure which applies, the symptom column on the right is the fastest way to narrow it down.

Cloudflare “Block AI Bots” breaks MCP
Symptom: OAuth completes in the browser, then claude.ai shows “Authorization failed” with an ofid_ code. Cause: Cloudflare blocking Anthropic’s backend IPs at the edge.
OAuth fails on managed hosts (edge cache poisoning)
Symptom: OAuth endpoints return stale 4xx responses. Activity Log empty. Hosts: o2switch PowerBoost, SiteGround Dynamic Cache, LiteSpeed Cache, Cloudflare APO.
SiteGround /.well-known/ returns 404
Symptom: /.well-known/oauth-authorization-server 404s. Cause: SiteGround nginx reserves the .well-known/ path prefix for ACME and blocks everything else. Also affects some Hostinger and o2switch configurations.
SiteGround serves .well-known/ as text/plain
Symptom: You’ve placed static .well-known/ files and they return 200, but strict MCP clients still reject because the Content-Type is wrong. Fix via a Cloudflare Transform Rule.
Bypass OAuth entirely (Claude Desktop)
If your host stack is genuinely incompatible with OAuth, Claude Desktop can connect via a static API key header instead of OAuth. Two-line config change, no /.well-known/ discovery required.

Still Stuck? Contact Support

If you’ve worked through all four basic steps and the relevant stack-specific article and the connector still fails, write in at support@royalplugins.com. Please include the items below — this is exactly what we need to triage your ticket without a second round-trip:

Information We’ll Need

  • Your hosting provider (SiteGround, Cloudways, Hostinger, Kinsta, WP Engine, Liquid Web, self-hosted VPS, etc.)
  • Royal MCP version from WP Admin → Plugins (please be on 1.4.16 or newer — older versions don’t produce the Activity Log entries we need)
  • Active caching plugins (LiteSpeed Cache, WP Rocket, W3 Total Cache, SpeedyCache, Hummingbird, none)
  • Active security plugins (Wordfence, Defender Pro, Solid Security, NinjaFirewall, none)
  • Cloudflare or CDN in front of the site? If yes, is “Manage AI Bots” or “Bot Fight Mode” on?
  • Which Claude client — claude.ai web custom connector, Claude Desktop with mcp-remote, ChatGPT MCP, or another MCP-compatible client
  • The exact error message you see, plus any ofid_xxxxx reference code if claude.ai shows one
  • Screenshot of the most recent oauth: row in your Activity Log with View Details expanded (or confirmation that the log is empty after a reproduced failure)
  • Which of Steps 1–4 you ran, and what changed at each step (“Step 2 conflict test — deactivated all plugins, switched to TT-25, retried, still failed”)

Replies typically within one business day. If you’ve done the four-step pass and included the diagnostics above, we usually resolve in one email exchange — sometimes zero, because the Activity Log entry tells us exactly which fix to apply.