{"id":274400,"date":"2026-01-14T10:33:58","date_gmt":"2026-01-14T10:33:58","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/royal-mcp\/"},"modified":"2026-04-26T08:12:43","modified_gmt":"2026-04-26T08:12:43","slug":"royal-mcp","status":"publish","type":"plugin","link":"https:\/\/so.wordpress.org\/plugins\/royal-mcp\/","author":23435753,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.4.7","stable_tag":"1.4.7","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Royal MCP","header_author":"Royal Plugins","header_description":"Integrate Model Context Protocol (MCP) servers with WordPress to enable LLM interactions with your site","assets_banners_color":"999588","last_updated":"2026-04-26 08:12:43","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.royalplugins.com","header_plugin_uri":"https:\/\/royalplugins.com\/support\/royal-mcp\/","header_author_uri":"https:\/\/www.royalplugins.com","rating":5,"author_block_rating":0,"active_installs":800,"downloads":4431,"num_ratings":2,"support_threads":4,"support_threads_resolved":3,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.2":{"tag":"1.2.2","author":"royalpluginsteam","date":"2026-01-14 10:36:47"},"1.2.3":{"tag":"1.2.3","author":"royalpluginsteam","date":"2026-03-11 08:49:50"},"1.3.0":{"tag":"1.3.0","author":"royalpluginsteam","date":"2026-03-31 06:11:11"},"1.4.0":{"tag":"1.4.0","author":"royalpluginsteam","date":"2026-04-03 03:43:28"},"1.4.1":{"tag":"1.4.1","author":"royalpluginsteam","date":"2026-04-06 00:14:51"},"1.4.4":{"tag":"1.4.4","author":"royalpluginsteam","date":"2026-04-17 00:15:13"},"1.4.5":{"tag":"1.4.5","author":"royalpluginsteam","date":"2026-04-18 09:16:26"},"1.4.6":{"tag":"1.4.6","author":"royalpluginsteam","date":"2026-04-23 06:24:31"},"1.4.7":{"tag":"1.4.7","author":"royalpluginsteam","date":"2026-04-26 08:12:43"}},"upgrade_notice":{"1.4.7":"<p>New: AI assistants can now read plugin settings (sensitive keys redacted) and write to allowlisted WordPress options when enabled. New &quot;Allow AI to write WordPress options&quot; toggle is OFF by default; turn it on under Royal MCP &gt; Settings to opt in.<\/p>","1.3.0":"<p>Major security and feature update. MCP endpoint now requires API key authentication. Added WooCommerce, GuardPress, and SiteVault integrations (22 new tools). Rate limiting added. Recommended update for all users.<\/p>","1.2.3":"<p>Security: SSRF protection for outbound requests. WordPress.org compliance fixes.<\/p>","1.2.0":"<p>Security hardening and MCP spec compliance improvements. Recommended update for all users.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3448287,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3448287,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3515644,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3515644,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3515659,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"meta\":{\"title\":\"Royal MCP \\u2014 Live Demo\",\"description\":\"Try the Royal MCP security-first Model Context Protocol server live in your browser. API key auth, rate limiting, activity log, and platform config all pre-seeded.\",\"author\":\"royalplugins\",\"categories\":[\"AI & Integration\"]},\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=royal-mcp\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"login\":{\"username\":\"admin\",\"password\":\"password\"},\"steps\":[{\"step\":\"setSiteOptions\",\"options\":{\"blogname\":\"Royal MCP Demo\",\"blogdescription\":\"Security-first MCP server for WordPress \\u2014 live preview.\"}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"royal-mcp\"},\"options\":{\"activate\":true}},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n\\n\\\/\\\/ Turn the MCP server on and set a stable demo API key so the Settings UI renders meaningfully.\\nupdate_option( 'royal_mcp_settings', [\\n  'enabled'     => true,\\n  'api_key'     => 'rmcp_demo_' . wp_generate_password( 24, false ),\\n  'platforms'   => [\\n    'claude'  => [ 'enabled' => true ],\\n    'chatgpt' => [ 'enabled' => true ],\\n    'gemini'  => [ 'enabled' => false ],\\n  ],\\n  'mcp_servers' => [],\\n] );\\n\\nglobal $wpdb;\\n$table = $wpdb->prefix . 'royal_mcp_logs';\\nif ( $wpdb->get_var( \\\"SHOW TABLES LIKE '{$table}'\\\" ) !== $table ) {\\n  return;\\n}\\n\\n\\\/\\\/ Seed representative activity log entries so the Activity Log page isn't empty in the demo.\\n$samples = [\\n  [ '-4 hours',  'claude',  'tools\\\/list',        'success', '{\\\"jsonrpc\\\":\\\"2.0\\\",\\\"method\\\":\\\"tools\\\/list\\\",\\\"id\\\":1}',           '{\\\"tools\\\":[{\\\"name\\\":\\\"search_posts\\\"},{\\\"name\\\":\\\"get_post\\\"},{\\\"name\\\":\\\"list_products\\\"}]}' ],\\n  [ '-3 hours',  'claude',  'tools\\\/call',        'success', '{\\\"method\\\":\\\"tools\\\/call\\\",\\\"params\\\":{\\\"name\\\":\\\"search_posts\\\",\\\"arguments\\\":{\\\"query\\\":\\\"backup\\\"}}}','{\\\"content\\\":[{\\\"type\\\":\\\"text\\\",\\\"text\\\":\\\"Found 12 posts\\\"}]}' ],\\n  [ '-2 hours',  'chatgpt', 'resources\\\/list',    'success', '{\\\"method\\\":\\\"resources\\\/list\\\"}',                               '{\\\"resources\\\":[{\\\"uri\\\":\\\"wp:\\\/\\\/posts\\\"},{\\\"uri\\\":\\\"wp:\\\/\\\/pages\\\"}]}' ],\\n  [ '-90 minutes','claude', 'tools\\\/call',        'rate_limited', '{\\\"method\\\":\\\"tools\\\/call\\\",\\\"params\\\":{\\\"name\\\":\\\"get_post\\\",\\\"arguments\\\":{\\\"id\\\":42}}}','{\\\"error\\\":\\\"rate_limit_exceeded\\\",\\\"retry_after\\\":60}' ],\\n  [ '-45 minutes','unknown','tools\\\/list',        'unauthorized', '{\\\"method\\\":\\\"tools\\\/list\\\"}',                                   '{\\\"error\\\":\\\"invalid_api_key\\\"}' ],\\n  [ '-15 minutes','chatgpt','tools\\\/call',        'success',     '{\\\"method\\\":\\\"tools\\\/call\\\",\\\"params\\\":{\\\"name\\\":\\\"list_products\\\"}}','{\\\"content\\\":[{\\\"type\\\":\\\"text\\\",\\\"text\\\":\\\"WooCommerce not installed in demo.\\\"}]}' ],\\n];\\n\\nforeach ( $samples as $row ) {\\n  list( $ago, $server, $action, $status, $req, $res ) = $row;\\n  $wpdb->insert( $table, [\\n    'timestamp'     => gmdate( 'Y-m-d H:i:s', strtotime( $ago ) ),\\n    'mcp_server'    => $server,\\n    'action'        => $action,\\n    'request_data'  => $req,\\n    'response_data' => $res,\\n    'status'        => $status,\\n  ] );\\n}\\n\"}]}"}},"all_blocks":[],"tagged_versions":["1.2.2","1.2.3","1.3.0","1.4.0","1.4.1","1.4.4","1.4.5","1.4.6","1.4.7"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3439404,"resolution":"1","location":"assets","locale":""},"screenshot-1.png":{"filename":"screenshot-1.png","revision":3515644,"resolution":"1","location":"assets","locale":""},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3439404,"resolution":"2","location":"assets","locale":""},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3439404,"resolution":"3","location":"assets","locale":""},"screenshot-4.jpg":{"filename":"screenshot-4.jpg","revision":3439404,"resolution":"4","location":"assets","locale":""},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3439404,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3497937,"resolution":"6","location":"assets","locale":""}},"screenshots":{"1":"Main settings page with API key and platform overview","2":"AI platform configuration with connection testing","3":"Activity log showing authenticated MCP requests","4":"Claude Desktop MCP connector setup","5":"WooCommerce product management via Claude","6":"OAuth consent screen for Claude Desktop connector"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2353,216196,229563,242115,260626],"plugin_category":[],"plugin_contributors":[253970],"plugin_business_model":[],"class_list":["post-274400","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-chatgpt","plugin_tags-claude","plugin_tags-mcp","plugin_tags-mcp-server","plugin_contributors-royalpluginsteam","plugin_committers-royalpluginsteam"],"banners":{"banner":"https:\/\/ps.w.org\/royal-mcp\/assets\/banner-772x250.png?rev=3515644","banner_2x":"https:\/\/ps.w.org\/royal-mcp\/assets\/banner-1544x500.png?rev=3515644","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/royal-mcp\/assets\/icon-128x128.png?rev=3448287","icon_2x":"https:\/\/ps.w.org\/royal-mcp\/assets\/icon-256x256.png?rev=3448287","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/royal-mcp\/assets\/screenshot-1.png?rev=3515644","caption":"Main settings page with API key and platform overview"},{"src":"https:\/\/ps.w.org\/royal-mcp\/assets\/screenshot-2.jpg?rev=3439404","caption":"AI platform configuration with connection testing"},{"src":"https:\/\/ps.w.org\/royal-mcp\/assets\/screenshot-3.jpg?rev=3439404","caption":"Activity log showing authenticated MCP requests"},{"src":"https:\/\/ps.w.org\/royal-mcp\/assets\/screenshot-4.jpg?rev=3439404","caption":"Claude Desktop MCP connector setup"},{"src":"https:\/\/ps.w.org\/royal-mcp\/assets\/screenshot-5.jpg?rev=3439404","caption":"WooCommerce product management via Claude"},{"src":"https:\/\/ps.w.org\/royal-mcp\/assets\/screenshot-6.png?rev=3497937","caption":"OAuth consent screen for Claude Desktop connector"}],"raw_content":"<!--section=description-->\n<p>https:\/\/youtu.be\/8Wbr0ReLpok<\/p>\n\n<p>Royal MCP is a security-first Model Context Protocol (MCP) server for WordPress. It gives AI platforms like Claude, ChatGPT, and Google Gemini structured access to your WordPress content \u2014 with authentication, rate limiting, and audit logging that most MCP implementations skip entirely.<\/p>\n\n<p>According to <a href=\"https:\/\/mcpplaygroundonline.com\/blog\/mcp-server-security-complete-guide-2026\">recent security research<\/a>, 41% of public MCP servers have no authentication and respond to tool calls without any credentials. Royal MCP takes the opposite approach: every MCP session requires an API key, every request is rate-limited, and every interaction is logged.<\/p>\n\n<h4>Why Security Matters for MCP<\/h4>\n\n<p>MCP gives AI agents the ability to read, create, update, and delete your WordPress content. Without proper authentication, anyone who discovers your MCP endpoint can:<\/p>\n\n<ul>\n<li>Read all your posts, pages, and media<\/li>\n<li>Create or delete content<\/li>\n<li>Access user data and plugin information<\/li>\n<li>Overwhelm your server with rapid-fire requests<\/li>\n<\/ul>\n\n<p>Royal MCP prevents all of this with API key authentication on session initialization, timing-safe key comparison, per-IP rate limiting (60 requests\/minute), and a full activity log of every MCP interaction.<\/p>\n\n<h4>41+ MCP Tools Built In<\/h4>\n\n<p><strong>WordPress Core (41 tools):<\/strong><\/p>\n\n<ul>\n<li>Posts \u2014 create, read, update, delete, search, count (featured images supported)<\/li>\n<li>Pages \u2014 full CRUD with parent page support<\/li>\n<li>Media \u2014 browse, upload from URL or base64, update alt text and metadata, set as featured image, delete<\/li>\n<li>Comments \u2014 create (respects moderation settings), read, delete<\/li>\n<li>Users \u2014 display names and roles (emails and usernames are not exposed)<\/li>\n<li>Categories &amp; Tags \u2014 create, assign, delete, count<\/li>\n<li>Menus \u2014 list menus and menu items<\/li>\n<li>Post Meta \u2014 read, update, delete custom fields<\/li>\n<li>Site Info \u2014 site name, description, WordPress version, timezone<\/li>\n<li>Plugins &amp; Themes \u2014 list installed plugins and themes with active status<\/li>\n<li>Search \u2014 full-text content search across post types<\/li>\n<li>Options \u2014 read allowlisted core options, read full plugin settings by slug (sensitive keys redacted), and write to allowlisted options when an admin enables it<\/li>\n<\/ul>\n\n<h4>Plugin Integrations (Conditional)<\/h4>\n\n<p>Royal MCP automatically detects compatible plugins and adds specialized MCP tools. No configuration needed \u2014 if the plugin is active, the tools appear.<\/p>\n\n<p><strong>WooCommerce Integration (9 tools):<\/strong>\nWhen WooCommerce is active, AI agents can manage your store:<\/p>\n\n<ul>\n<li>Browse and search products by category, status, or type<\/li>\n<li>Create and update products with prices, SKUs, stock levels<\/li>\n<li>View orders, order details, and update order status<\/li>\n<li>List customers with order count and total spent<\/li>\n<li>Get store statistics \u2014 revenue, order count, average order value by period<\/li>\n<\/ul>\n\n<p><strong>GuardPress Integration (7 tools):<\/strong>\nWhen GuardPress is active, AI agents can monitor your site security:<\/p>\n\n<ul>\n<li>Get current security score and grade with factor breakdown<\/li>\n<li>View security statistics \u2014 failed logins, blocked IPs, alerts<\/li>\n<li>Run vulnerability scans and review results<\/li>\n<li>List blocked IP addresses and failed login attempts<\/li>\n<li>Browse the security audit log filtered by severity<\/li>\n<\/ul>\n\n<p><strong>SiteVault Integration (6 tools):<\/strong>\nWhen SiteVault is active, AI agents can manage your backups:<\/p>\n\n<ul>\n<li>List available backups filtered by status or type<\/li>\n<li>Trigger new backups (full, database, files, plugins, themes)<\/li>\n<li>Check backup progress in real time<\/li>\n<li>View backup statistics \u2014 total size, last backup, counts<\/li>\n<li>List and review backup schedules<\/li>\n<\/ul>\n\n<h4>Royal MCP and the WordPress Core Abilities API<\/h4>\n\n<p>WordPress 6.9 shipped the Abilities API in November 2025 \u2014 a primitive that lets plugins register typed capabilities AI agents can call. Core ships three default abilities (site info, user info, environment info) and the <code>wordpress\/mcp-adapter<\/code> package bridges abilities to the MCP protocol.<\/p>\n\n<p>Royal MCP is a complete, production-ready MCP server that predates the official adapter. It runs the full Streamable HTTP transport, enforces API key authentication on every request, ships OAuth 2.0 for Claude Desktop's native connector flow, rate-limits per-IP, redacts sensitive data, and logs every interaction. Out of the box it includes 41+ tools for WordPress core operations plus integrations for WooCommerce, GuardPress, and SiteVault.<\/p>\n\n<h4>Supported AI Platforms<\/h4>\n\n<ul>\n<li><strong>Claude (Anthropic)<\/strong> \u2014 Full MCP support via Claude Desktop, Claude Code, and VS Code<\/li>\n<li><strong>OpenAI \/ ChatGPT<\/strong> \u2014 GPT-4o, GPT-4 Turbo, GPT-3.5 Turbo<\/li>\n<li><strong>Google Gemini<\/strong> \u2014 Gemini 1.5 Pro, 1.5 Flash<\/li>\n<li><strong>Groq<\/strong> \u2014 Llama 3.3, Mixtral, Gemma 2<\/li>\n<li><strong>Azure OpenAI<\/strong> \u2014 Azure-hosted OpenAI deployments<\/li>\n<li><strong>AWS Bedrock<\/strong> \u2014 Claude, Llama, Titan models<\/li>\n<li><strong>Ollama \/ LM Studio<\/strong> \u2014 Local self-hosted models (no external data transmission)<\/li>\n<li><strong>Custom MCP Servers<\/strong> \u2014 Connect to any MCP-compatible endpoint<\/li>\n<\/ul>\n\n<h4>MCP Spec Compliance<\/h4>\n\n<p>Royal MCP implements the <a href=\"https:\/\/modelcontextprotocol.io\/specification\/2025-03-26\/basic\/transports#streamable-http\">MCP 2025-03-26 Streamable HTTP transport specification<\/a>:<\/p>\n\n<ul>\n<li>Single <code>\/mcp<\/code> endpoint for all JSON-RPC communication<\/li>\n<li>POST for client messages, GET for server-sent events, DELETE for session termination<\/li>\n<li>Cryptographically secure session IDs with transient-based storage<\/li>\n<li>Origin header validation to prevent DNS rebinding attacks<\/li>\n<li>Proper CORS handling for browser-based MCP clients<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to third-party AI services to enable AI platforms to interact with your WordPress content. <strong>No data is transmitted until you explicitly configure and enable a platform connection.<\/strong><\/p>\n\n<p><strong>What data is sent:<\/strong> Your WordPress content (posts, pages, media metadata) as requested by the connected AI platform through authenticated MCP tool calls.<\/p>\n\n<p><strong>When data is sent:<\/strong> Only when you have configured a platform with API credentials AND enabled that platform connection AND the AI platform makes an authenticated request.<\/p>\n\n<p><strong>Supported services and their policies:<\/strong><\/p>\n\n<ul>\n<li><p><strong>Anthropic Claude<\/strong> \u2014 Used for Claude AI integration\n<a href=\"https:\/\/www.anthropic.com\/legal\/consumer-terms\">Terms of Service<\/a> | <a href=\"https:\/\/www.anthropic.com\/legal\/privacy\">Privacy Policy<\/a><\/p><\/li>\n<li><p><strong>OpenAI<\/strong> \u2014 Used for ChatGPT\/GPT-4 integration\n<a href=\"https:\/\/openai.com\/policies\/terms-of-use\">Terms of Use<\/a> | <a href=\"https:\/\/openai.com\/policies\/privacy-policy\">Privacy Policy<\/a><\/p><\/li>\n<li><p><strong>Google Gemini<\/strong> \u2014 Used for Gemini AI integration\n<a href=\"https:\/\/ai.google.dev\/terms\">Terms of Service<\/a> | <a href=\"https:\/\/policies.google.com\/privacy\">Privacy Policy<\/a><\/p><\/li>\n<li><p><strong>Groq<\/strong> \u2014 Used for Groq LPU inference\n<a href=\"https:\/\/groq.com\/terms-of-use\/\">Terms of Service<\/a> | <a href=\"https:\/\/groq.com\/privacy-policy\/\">Privacy Policy<\/a><\/p><\/li>\n<li><p><strong>Microsoft Azure OpenAI<\/strong> \u2014 Used for Azure-hosted OpenAI models\n<a href=\"https:\/\/azure.microsoft.com\/en-us\/support\/legal\/\">Terms of Service<\/a> | <a href=\"https:\/\/privacy.microsoft.com\/en-us\/privacystatement\">Privacy Policy<\/a><\/p><\/li>\n<li><p><strong>AWS Bedrock<\/strong> \u2014 Used for AWS-hosted AI models\n<a href=\"https:\/\/aws.amazon.com\/service-terms\/\">Terms of Service<\/a> | <a href=\"https:\/\/aws.amazon.com\/privacy\/\">Privacy Policy<\/a><\/p><\/li>\n<li><p><strong>Ollama \/ LM Studio<\/strong> \u2014 Local self-hosted models (no external data transmission)<\/p><\/li>\n<li><p><strong>Custom MCP Servers<\/strong> \u2014 User-configured servers (data sent to user-specified endpoints only)<\/p><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>royal-mcp<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Go to Royal MCP \u2192 Settings to configure<\/li>\n<li>Copy your API key \u2014 you will need this to authenticate MCP connections<\/li>\n<li>Add your AI platform(s) and enter their API keys<\/li>\n<li>In your AI client (Claude Desktop, VS Code, etc.), configure the MCP server URL and API key<\/li>\n<\/ol>\n\n<p>Full setup guides for each platform are available at <a href=\"https:\/\/royalplugins.com\/support\/royal-mcp\/\">royalplugins.com\/support\/royal-mcp\/<\/a>.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20is%20mcp%20and%20why%20does%20my%20wordpress%20site%20need%20it%3F\"><h3>What is MCP and why does my WordPress site need it?<\/h3><\/dt>\n<dd><p>Model Context Protocol (MCP) is an open standard created by Anthropic that lets AI assistants interact with external data sources. Without MCP, AI tools like Claude or ChatGPT can only work with content you copy and paste into them. With Royal MCP installed, these AI platforms can directly read your WordPress posts, create new content, manage your WooCommerce products, check your security status, and trigger backups \u2014 all through a structured, authenticated protocol.<\/p><\/dd>\n<dt id=\"how%20is%20royal%20mcp%20different%20from%20other%20wordpress%20mcp%20plugins%3F\"><h3>How is Royal MCP different from other WordPress MCP plugins?<\/h3><\/dt>\n<dd><p>Security. Most MCP plugins \u2014 and 41% of all public MCP servers \u2014 have no authentication at all. Royal MCP requires an API key for every session, rate-limits requests to prevent abuse, logs every interaction for audit purposes, and filters sensitive data (emails, PHP version, admin credentials) from responses. We built this plugin with the same security standards we apply to GuardPress, our WordPress security plugin used on thousands of sites.<\/p><\/dd>\n<dt id=\"does%20royal%20mcp%20duplicate%20what%20wordpress%20core%20now%20does%3F\"><h3>Does Royal MCP duplicate what WordPress core now does?<\/h3><\/dt>\n<dd><p>No. WordPress 6.9 added the Abilities API \u2014 a primitive for registering AI-callable functions \u2014 and the <code>wordpress\/mcp-adapter<\/code> package bridges abilities to the MCP protocol. Royal MCP is a full MCP server with the security layer, connector flows, and plugin integrations that the bare primitive does not include: enforced API key auth, OAuth 2.0 for Claude Desktop, per-IP rate limiting, audit logging, sensitive-data redaction, and 41+ ready-to-use tools spanning posts, pages, media, comments, users, options, and WooCommerce\/GuardPress\/SiteVault.<\/p><\/dd>\n<dt id=\"does%20royal%20mcp%20work%20with%20woocommerce%3F\"><h3>Does Royal MCP work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. When WooCommerce is active, Royal MCP automatically adds 9 additional MCP tools for product management (create, update, search), order management (view, update status), customer data, and store statistics. No additional configuration is needed \u2014 the tools appear automatically in the MCP tools list.<\/p><\/dd>\n<dt id=\"can%20ai%20assistants%20configure%20my%20plugins%20for%20me%3F\"><h3>Can AI assistants configure my plugins for me?<\/h3><\/dt>\n<dd><p>Yes, with safety controls. Royal MCP exposes two tools for plugin configuration:<\/p>\n\n<ul>\n<li><p><code>wp_get_plugin_settings<\/code> lets AI read any plugin's stored settings by slug. Sensitive values (API keys, secrets, tokens, passwords, license keys, OAuth credentials) are automatically replaced with <code>[REDACTED]<\/code> before they leave your server, so AI assistants can understand a plugin's configuration without ever seeing stored credentials.<\/p><\/li>\n<li><p><code>wp_update_option<\/code> lets AI write to WordPress options, but only after passing three security gates:<\/p>\n\n<ol>\n<li>The site admin must enable the \"Allow AI to write WordPress options\" toggle on the Royal MCP settings page (off by default)<\/li>\n<li>The option name must be in a runtime allowlist. The default allowlist is intentionally tiny \u2014 <code>blogname<\/code>, <code>blogdescription<\/code>, <code>posts_per_page<\/code>, <code>date_format<\/code>, <code>time_format<\/code>. Plugin authors opt their own settings in via the <code>royal_mcp_writable_options<\/code> filter.<\/li>\n<li>A hard denylist permanently blocks writes to sensitive option names (siteurl, home, license keys, secrets, salts, etc.) regardless of the allowlist or the toggle.<\/li>\n<\/ol><\/li>\n<\/ul>\n\n<p>Plugin authors can opt in their settings with one line: <code>add_filter('royal_mcp_writable_options', fn($opts) =&gt; array_merge($opts, ['my_plugin_settings']));<\/code><\/p><\/dd>\n<dt id=\"how%20do%20i%20connect%20claude%20desktop%20to%20wordpress%3F\"><h3>How do I connect Claude Desktop to WordPress?<\/h3><\/dt>\n<dd><p>Install Royal MCP, go to Royal MCP \u2192 Settings, and copy your API key and MCP server URL. In Claude Desktop, add a new MCP server configuration with the URL and include the <code>X-Royal-MCP-API-Key<\/code> header with your API key. Full step-by-step guide at <a href=\"https:\/\/royalplugins.com\/support\/royal-mcp\/\">royalplugins.com\/support\/royal-mcp\/<\/a>.<\/p><\/dd>\n<dt id=\"is%20my%20content%20safe%3F\"><h3>Is my content safe?<\/h3><\/dt>\n<dd><p>Royal MCP is designed with defense in depth. API key authentication is required for all MCP sessions. Rate limiting prevents abuse (60 requests per minute per IP). Activity logging records every tool call. Sensitive data is filtered \u2014 user emails, usernames, admin email, PHP version, and stored credentials inside plugin settings (api keys, secrets, tokens, passwords) are never exposed through MCP. Comment creation respects your WordPress moderation settings. Post meta values are sanitized before storage. Option writes are disabled by default and gated by three independent checks (admin toggle, allowlist, hard denylist) when enabled. The plugin itself starts disabled by default \u2014 nothing is accessible until you explicitly enable it.<\/p><\/dd>\n<dt id=\"can%20i%20use%20local%20ai%20models%20instead%20of%20cloud%20services%3F\"><h3>Can I use local AI models instead of cloud services?<\/h3><\/dt>\n<dd><p>Yes. Royal MCP supports Ollama and LM Studio for fully local AI inference. When using local models, no data leaves your server \u2014 the AI model runs on your own hardware and communicates with WordPress through the MCP protocol on localhost.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20uninstall%20royal%20mcp%3F\"><h3>What happens if I uninstall Royal MCP?<\/h3><\/dt>\n<dd><p>Royal MCP performs a clean uninstall. All plugin options, database tables (activity logs), transients, and user meta are removed. No orphaned data is left behind.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.7<\/h4>\n\n<ul>\n<li>Tags: refreshed readme tags for better WordPress.org discoverability \u2014 replaced low-usage multi-word phrases with <code>mcp<\/code>, <code>ai<\/code>, <code>claude<\/code>, <code>chatgpt<\/code>, <code>mcp-server<\/code>.<\/li>\n<li>New: Royal Plugins Founders Bundle banner on the Royal MCP Settings and Activity Log screens. Banner is per-user dismissable and only renders on Royal MCP admin pages.<\/li>\n<li>New: wp_get_plugin_settings tool \u2014 returns all wp_options that match a plugin slug, with sensitive keys (api_key, secret, token, password, salt, license_key, etc.) replaced with [REDACTED] before return. Lets AI agents read plugin configuration without ever seeing stored credentials.<\/li>\n<li>New: wp_update_option tool \u2014 writes a WordPress option, gated by three security checks: (1) a new admin toggle \"Allow AI to write WordPress options\" (off by default), (2) a runtime allowlist extensible via the royal_mcp_writable_options filter, and (3) a hard denylist for sensitive option names that overrides the allowlist. Default writable list is intentionally tiny (blogname, blogdescription, posts_per_page, date_format, time_format) \u2014 plugin authors opt their settings in via filter.<\/li>\n<li>New: Filter <code>royal_mcp_writable_options<\/code> for plugin authors to declare which of their settings AI agents may write. Receives an array of option names; return the merged array.<\/li>\n<li>Security: wp_get_option now redacts sensitive keys from returned values for parity with wp_get_plugin_settings.<\/li>\n<li>Security: Reduced outbound HTTP timeouts in the MCP client (30s \u2192 10s) and platform connection tester (15s \u2192 10s) to align with Royal Plugins HTTP guidelines and avoid blocking the request thread on slow upstream services.<\/li>\n<li>Listing: Refreshed the WordPress.org plugin directory banners. Subtitle and feature line are larger and more legible, the brand icon (crown + connected nodes) replaces the placeholder atom, and the wordmark spacing is tightened. SVG sources are now versioned for future updates.<\/li>\n<\/ul>\n\n<h4>1.4.6<\/h4>\n\n<ul>\n<li>New: wp_upload_media_from_url \u2014 download an image from a public HTTPS URL and add it to the media library (SSRF-hardened: private IP ranges blocked, HTTPS required, 20 MB cap, scriptable formats rejected).<\/li>\n<li>New: wp_upload_media \u2014 upload an image from base64-encoded bytes for AI-generated or pasted images.<\/li>\n<li>New: wp_set_featured_image \u2014 set or replace a post's featured image by attachment ID or by image URL in a single call (pass media_id=0 to remove).<\/li>\n<li>New: wp_update_media \u2014 update alt text, caption, title, and description on existing attachments for better SEO and accessibility.<\/li>\n<li>Enhancement: wp_create_post and wp_update_post now accept a featured_media attachment ID in their schemas.<\/li>\n<li>Enhancement: API-key authenticated requests now run as a site administrator so capability checks (upload_files, edit_post, etc.) succeed. The API key is stored in admin-only settings, so this matches the trust level of the key itself.<\/li>\n<\/ul>\n\n<h4>1.4.5<\/h4>\n\n<ul>\n<li>New: WordPress Playground live preview \u2014 click \"Live Preview\" on the plugin listing to try the Royal MCP settings page and activity log in a browser sandbox with demo API key and sample log entries pre-seeded.<\/li>\n<li>New: Video walkthrough embedded on the plugin listing page.<\/li>\n<\/ul>\n\n<h4>1.4.4<\/h4>\n\n<ul>\n<li>Feature: Custom post type support \u2014 wp_get_posts and wp_create_post now accept a post_type parameter<\/li>\n<li>Feature: New wp_get_post_types tool discovers all registered public post types on the site<\/li>\n<li>Enhancement: wp_get_post and wp_get_posts responses now include the post type field<\/li>\n<li>Enhancement: Post type validation ensures only public post types can be queried or created<\/li>\n<\/ul>\n\n<h4>1.4.3<\/h4>\n\n<ul>\n<li>Security: Fixed broken access control on MCP REST API endpoints (reported by Alexis Lafontaine via Patchstack)<\/li>\n<li>Security: All MCP tool calls now require authenticated API key or OAuth Bearer token<\/li>\n<li>Security: Removed reliance on Origin header as a security control<\/li>\n<\/ul>\n\n<h4>1.4.2<\/h4>\n\n<ul>\n<li>Security: Enforce authentication on every MCP request, not just session initialization<\/li>\n<li>Security: Bind MCP sessions to authenticated credentials to prevent session hijacking<\/li>\n<li>Security: Add authentication to GET stream and DELETE session endpoints<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Fix: Resolved fatal error during activation on WordPress 7.0 RC (\"Class Token_Store not found\")<\/li>\n<li>Fix: Fully qualified namespace references for WP 7.0 compatibility<\/li>\n<li>Tested: WordPress 7.0 RC2 compatibility verified<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>New: OAuth 2.0 authorization server \u2014 Claude Desktop's \"Add Connector\" flow now works natively<\/li>\n<li>New: Dynamic Client Registration (RFC 7591) for seamless MCP client onboarding<\/li>\n<li>New: PKCE-secured authorization code flow per MCP spec (2025-03-26)<\/li>\n<li>New: Token refresh with automatic rotation for long-lived sessions<\/li>\n<li>New: WordPress login integration \u2014 consent screen after authentication<\/li>\n<li>New: Metadata discovery endpoint at \/.well-known\/oauth-authorization-server<\/li>\n<li>New: Daily cleanup of expired OAuth tokens via scheduled event<\/li>\n<li>Improved: MCP endpoint now accepts both Bearer tokens and API key authentication<\/li>\n<li>Improved: CORS headers include Authorization for OAuth-based clients<\/li>\n<li>Security: Access tokens stored as SHA-256 hashes (never stored in plain text)<\/li>\n<li>Security: Authorization codes are single-use with 10-minute expiry<\/li>\n<li>Security: PKCE (S256) required for all authorization requests<\/li>\n<li>Security: Redirect URI validation enforces localhost or HTTPS only<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New: WooCommerce integration \u2014 9 MCP tools for products, orders, customers, and store stats (auto-detected)<\/li>\n<li>New: GuardPress integration \u2014 7 MCP tools for security score, scans, firewall logs, and audit trail (auto-detected)<\/li>\n<li>New: SiteVault integration \u2014 6 MCP tools for backup management, scheduling, and progress tracking (auto-detected)<\/li>\n<li>Security: MCP endpoint now requires API key authentication via X-Royal-MCP-API-Key header<\/li>\n<li>Security: Added rate limiting (60 requests\/minute per IP) to prevent abuse and accidental DoS<\/li>\n<li>Security: API key comparison uses timing-safe hash_equals() to prevent timing attacks<\/li>\n<li>Security: Sanitized wp_update_post_meta values before storage<\/li>\n<li>Security: Comments created via MCP now respect WordPress moderation settings<\/li>\n<li>Security: Removed admin_email and php_version from wp_get_site_info response<\/li>\n<li>Security: Removed user_login and user_email from wp_get_users\/wp_get_user responses<\/li>\n<li>Improved: CORS headers include X-Royal-MCP-API-Key for cross-origin MCP clients<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Security: Added SSRF protection \u2014 validates all outbound URLs against private\/reserved IP ranges<\/li>\n<li>Fixed: Text domain changed from 'wp-royal-mcp' to 'royal-mcp' to match plugin slug<\/li>\n<li>Fixed: Menu slugs updated for WP.org compliance<\/li>\n<li>Improved: REST API permission callbacks include explanatory comments for reviewers<\/li>\n<li>Compatibility: Tested up to WordPress 7.0<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Added: Documentation link on Plugins page (Settings | Documentation)<\/li>\n<li>Added: Documentation banner on settings page<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fixed: Claude Connector setup guide link displaying raw HTML<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Security: Origin header validation to prevent DNS rebinding attacks<\/li>\n<li>Security: Session ID format validation (ASCII visible characters only)<\/li>\n<li>Improved: MCP 2025-03-26 Streamable HTTP spec compliance<\/li>\n<li>Added: Filter hook <code>royal_mcp_allowed_origins<\/code> for custom origin allowlist<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added multi-platform AI support (Claude, OpenAI, Gemini, Groq, Azure, Bedrock)<\/li>\n<li>Added Claude Desktop MCP connector<\/li>\n<li>Added activity logging<\/li>\n<li>Added connection testing<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"The security-first MCP server for WordPress. Connect Claude, ChatGPT, and Gemini with API key auth, rate limiting, and activity logging.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/274400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=274400"}],"author":[{"embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/royalpluginsteam"}],"wp:attachment":[{"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=274400"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=274400"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=274400"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=274400"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=274400"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=274400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}