{"id":317234,"date":"2026-06-17T17:29:50","date_gmt":"2026-06-17T17:29:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/wds-mcp-content-manager\/"},"modified":"2026-06-17T17:29:25","modified_gmt":"2026-06-17T17:29:25","slug":"wds-mcp-content-manager","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/wds-mcp-content-manager\/","author":23504642,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.9.18","stable_tag":"3.9.18","tested":"7.0","requires":"6.9","requires_php":"7.4","requires_plugins":null,"header_name":"WDS MCP Content Manager","header_author":"Wallstrdev","header_description":"Give your AI agent control of your WordPress site via MCP. Read, create, and edit posts, pages, categories, and tags. Upgrade to Pro for WooCommerce, Elementor, Media & Multilingual abilities.","assets_banners_color":"006e9e","last_updated":"2026-06-17 17:29:25","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/wallstrdev-mcp-content-manager\/","header_author_uri":"https:\/\/wallstrdev.de","rating":0,"author_block_rating":0,"active_installs":0,"downloads":37,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.9.18":{"tag":"3.9.18","author":"wallstrdev","date":"2026-06-17 17:29:25"}},"upgrade_notice":{"3.8.4":"<p>Adds deterministic Yoast score override inputs (<code>seo_score<\/code>, <code>seo_content_score<\/code>) for one-by-one SEO operations where metabox JS is not available.<\/p>","3.8.3":"<p>Adds <code>wds\/reindex-yoast-seo<\/code>, allowing MCP clients to trigger Yoast SEO data optimization after bulk SEO\/meta updates.<\/p>","3.8.2":"<p>Adds <code>wds\/get-elementor-data<\/code> so AI clients can read raw Elementor structure before making targeted edits.<\/p>","3.8.1":"<p>Adds <code>wds\/get-post-translations<\/code> so translation coverage checks can be done directly via MCP.<\/p>","3.8.0":"<p>Adds taxonomy edit\/delete abilities, WooCommerce product read + product taxonomy CRUD, and Polylang term translation abilities.<\/p>","3.6.5":"<p>Fixes non-switching client tabs in Setup Wizard Step 4.<\/p>","3.6.4":"<p>Adds page management abilities and permission toggles.<\/p>","3.6.2":"<p>Exclude .gitignore from ZIP and revert Text Domain to WP.org-assigned slug. No functional changes.<\/p>","3.5.1":"<p>Minor UX improvement for Free plan users. No action required.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3576199,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3576199,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3576199,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3576199,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["3.9.18"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The Setup Wizard guides you through connecting your AI client.","2":"The Permissions screen shows all available abilities and lets you control access.","3":"The License tab shows your current plan and lets you activate a Pro key.","4":"An AI agent creating a blog post directly from a chat prompt."}},"plugin_section":[],"plugin_tags":[2353,5739,229563,4917,242115],"plugin_category":[],"plugin_contributors":[267604],"plugin_business_model":[],"class_list":["post-317234","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-artificial-intelligence","plugin_tags-claude","plugin_tags-content-management","plugin_tags-mcp","plugin_contributors-wallstrdev","plugin_committers-wallstrdev"],"banners":{"banner":"https:\/\/ps.w.org\/wds-mcp-content-manager\/assets\/banner-772x250.png?rev=3576199","banner_2x":"https:\/\/ps.w.org\/wds-mcp-content-manager\/assets\/banner-1544x500.png?rev=3576199","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wds-mcp-content-manager\/assets\/icon-128x128.png?rev=3576199","icon_2x":"https:\/\/ps.w.org\/wds-mcp-content-manager\/assets\/icon-256x256.png?rev=3576199","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>WDS MCP Content Manager<\/strong> connects your WordPress site to AI agents (Claude, Cursor, and other MCP-compatible clients) so they can read, create, and manage your content through natural language prompts.<\/p>\n\n<h4>How it works<\/h4>\n\n<p>The plugin registers a set of abilities on top of the <a href=\"https:\/\/github.com\/WordPress\/mcp-adapter\">WordPress MCP Adapter<\/a>. Once installed, your AI agent can list posts, create content, manage categories and tags, upload images, and more \u2014 all without leaving your AI client.<\/p>\n\n<h4>Free abilities (no license required)<\/h4>\n\n<ul>\n<li><strong>wds\/get-posts<\/strong> \u2014 List published posts with title, URL, date, and excerpt<\/li>\n<li><strong>wds\/get-post<\/strong> \u2014 Fetch full post content, categories, tags, and SEO meta<\/li>\n<li><strong>wds\/create-post<\/strong> \u2014 Create a post with categories, tags, and featured image<\/li>\n<li><strong>wds\/update-post<\/strong> \u2014 Update any field of an existing post<\/li>\n<li><strong>wds\/reindex-yoast-seo<\/strong> \u2014 Run Yoast SEO data optimization (indexables reindex) after bulk SEO updates<\/li>\n<li><strong>wds\/get-pages<\/strong> \u2014 List pages with URL, status, parent, and template<\/li>\n<li><strong>wds\/create-page<\/strong> \u2014 Create a page with slug, parent, template, and featured image<\/li>\n<li><strong>wds\/update-page<\/strong> \u2014 Update page content, status, slug, hierarchy, and template<\/li>\n<li><strong>wds\/get-categories<\/strong> \u2014 List all post categories<\/li>\n<li><strong>wds\/create-category<\/strong> \u2014 Create a new post category<\/li>\n<li><strong>wds\/update-category<\/strong> \u2014 Update an existing post category<\/li>\n<li><strong>wds\/delete-category<\/strong> \u2014 Delete an existing post category<\/li>\n<li><strong>wds\/get-tags<\/strong> \u2014 List all post tags<\/li>\n<li><strong>wds\/create-tag<\/strong> \u2014 Create a new post tag<\/li>\n<li><strong>wds\/update-tag<\/strong> \u2014 Update an existing post tag<\/li>\n<li><strong>wds\/delete-tag<\/strong> \u2014 Delete an existing post tag<\/li>\n<\/ul>\n\n<h4>Pro abilities (requires a Pro license)<\/h4>\n\n<ul>\n<li><strong>wds\/get-products<\/strong> \u2014 List WooCommerce products with pricing and status<\/li>\n<li><strong>wds\/get-product<\/strong> \u2014 Fetch full WooCommerce product details and taxonomy terms<\/li>\n<li><strong>wds\/create-product<\/strong> \u2014 Create a WooCommerce product with pricing and downloads<\/li>\n<li><strong>wds\/update-product<\/strong> \u2014 Update any field of an existing WooCommerce product<\/li>\n<li><strong>wds\/get-product-categories<\/strong> \u2014 List WooCommerce product categories<\/li>\n<li><strong>wds\/create-product-category<\/strong> \u2014 Create a WooCommerce product category<\/li>\n<li><strong>wds\/update-product-category<\/strong> \u2014 Update a WooCommerce product category<\/li>\n<li><strong>wds\/delete-product-category<\/strong> \u2014 Delete a WooCommerce product category<\/li>\n<li><strong>wds\/get-product-tags<\/strong> \u2014 List WooCommerce product tags<\/li>\n<li><strong>wds\/create-product-tag<\/strong> \u2014 Create a WooCommerce product tag<\/li>\n<li><strong>wds\/update-product-tag<\/strong> \u2014 Update a WooCommerce product tag<\/li>\n<li><strong>wds\/delete-product-tag<\/strong> \u2014 Delete a WooCommerce product tag<\/li>\n<li><strong>wds\/set-product-schema<\/strong> \u2014 Inject JSON-LD structured data into the page head<\/li>\n<li><strong>wds\/set-elementor-page<\/strong> \u2014 Inject a full HTML design via Elementor Canvas<\/li>\n<li><strong>wds\/inject-elementor-json<\/strong> \u2014 Inject native Elementor sections JSON<\/li>\n<li><strong>wds\/upload-image<\/strong> \u2014 Sideload an image from URL into the Media Library<\/li>\n<li><strong>wds\/set-featured-image<\/strong> \u2014 Set or remove the featured image on a post<\/li>\n<li><strong>wds\/set-post-language<\/strong> \u2014 Set Polylang language on a post<\/li>\n<li><strong>wds\/link-translations<\/strong> \u2014 Link posts as Polylang translation pairs<\/li>\n<li><strong>wds\/set-term-language<\/strong> \u2014 Set Polylang language for taxonomy terms<\/li>\n<li><strong>wds\/link-term-translations<\/strong> \u2014 Link taxonomy terms as Polylang translation pairs<\/li>\n<li><strong>wds\/get-term-translations<\/strong> \u2014 Get Polylang translation map for a taxonomy term<\/li>\n<li><strong>site-kit\/get-top-queries<\/strong> \u2014 Returns top Google Search Console queries for the site (requires Google Site Kit plugin)<\/li>\n<li><strong>site-kit\/get-top-pages<\/strong> \u2014 Returns top pages by traffic from Google Analytics 4 (requires Google Site Kit plugin)<\/li>\n<li><strong>site-kit\/get-page-performance<\/strong> \u2014 Returns combined Search Console + GA4 metrics for a single URL (requires Google Site Kit plugin)<\/li>\n<li><strong>site-kit\/get-traffic-overview<\/strong> \u2014 Returns site-wide traffic summary by channel from GA4 (requires Google Site Kit plugin)<\/li>\n<\/ul>\n\n<p>Pro licenses are available at <a href=\"https:\/\/wallstrdev.de\/product\/wds-mcp-content-manager-pro\/\">wallstrdev.de<\/a>.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.3 or later<\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/mcp-adapter\">WordPress MCP Adapter<\/a> plugin (free, required)<\/li>\n<li>WooCommerce \u2014 optional, needed for product abilities<\/li>\n<li>Elementor \u2014 optional, needed for Elementor abilities<\/li>\n<li>Polylang \u2014 optional, needed for multilingual abilities<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<h4>WordPress MCP Adapter<\/h4>\n\n<p>If the WordPress MCP Adapter plugin is not installed, an admin notice offers a one-click install button. Clicking it downloads the adapter from:<\/p>\n\n<pre><code>https:\/\/github.com\/WordPress\/mcp-adapter\/releases\/latest\/download\/mcp-adapter.zip\n<\/code><\/pre>\n\n<p>This is the official plugin from the WordPress GitHub organisation. The download is triggered only by an explicit admin click \u2014 nothing is downloaded automatically.<\/p>\n\n<h4>WDS License Server<\/h4>\n\n<p>This plugin connects to an external license validation service <strong>only when a Pro license key is entered<\/strong>.<\/p>\n\n<p><strong>Service:<\/strong> WDS License Server, operated by Wallstrdev (https:\/\/wallstrdev.de)<\/p>\n\n<p><strong>When it is called:<\/strong>\n- When you save a Pro license key under Settings \u2192 WDS MCP Setup \u2192 License\n- Once per day (in the background on admin_init) to revalidate the key<\/p>\n\n<p><strong>What is sent:<\/strong>\n- Your license key\n- Your site domain (e.g. example.com)<\/p>\n\n<p><strong>What is NOT sent:<\/strong> post content, user data, personally identifiable information, or site configuration.<\/p>\n\n<p><strong>Why:<\/strong> To confirm the license key is valid for your domain and determine your plan tier (free vs. pro).<\/p>\n\n<p><strong>Data policy:<\/strong> <a href=\"https:\/\/wallstrdev.de\/privacy-policy\/\">wallstrdev.de\/privacy-policy\/<\/a><\/p>\n\n<p>Free users (no license key entered) never trigger any external HTTP request.<\/p>\n\n<h4>Google Search Console API<\/h4>\n\n<p>The Pro abilities <code>site-kit\/get-top-queries<\/code> and <code>site-kit\/get-page-performance<\/code> call the Google Search Console API directly on behalf of the site owner.<\/p>\n\n<p><strong>Service:<\/strong> Google Search Console API, provided by Google LLC (<code>https:\/\/searchconsole.googleapis.com<\/code>)<\/p>\n\n<p><strong>When it is called:<\/strong> Only when an AI agent explicitly invokes the <code>site-kit\/get-top-queries<\/code> or <code>site-kit\/get-page-performance<\/code> Pro ability. Requires the Google Site Kit plugin to be installed, activated, and connected to Search Console.<\/p>\n\n<p><strong>What is sent:<\/strong>\n- Your Search Console property URL (your site's domain)\n- Query parameters: date range, dimensions (query\/page), row limit\n- An OAuth 2.0 Bearer token retrieved from the Site Kit plugin's stored credentials \u2014 no token is stored or transmitted by this plugin<\/p>\n\n<p><strong>What is NOT sent:<\/strong> post content, user data, passwords, or any personally identifiable information beyond the site URL.<\/p>\n\n<p><strong>Why:<\/strong> To retrieve search query and page performance data from Google Search Console so the AI agent can analyse your organic search traffic.<\/p>\n\n<p><strong>Google Terms of Service:<\/strong> https:\/\/developers.google.com\/terms\n<strong>Google Privacy Policy:<\/strong> https:\/\/policies.google.com\/privacy<\/p>\n\n<h4>Google Analytics Data API<\/h4>\n\n<p>The Pro abilities <code>site-kit\/get-top-pages<\/code>, <code>site-kit\/get-page-performance<\/code>, and <code>site-kit\/get-traffic-overview<\/code> call the Google Analytics Data API directly on behalf of the site owner.<\/p>\n\n<p><strong>Service:<\/strong> Google Analytics Data API, provided by Google LLC (<code>https:\/\/analyticsdata.googleapis.com<\/code>)<\/p>\n\n<p><strong>When it is called:<\/strong> Only when an AI agent explicitly invokes one of the above Pro abilities. Requires the Google Site Kit plugin to be installed, activated, and connected to a Google Analytics 4 property.<\/p>\n\n<p><strong>What is sent:<\/strong>\n- Your GA4 numeric property ID\n- Query parameters: date range, metrics (sessions, pageviews, etc.), dimensions (pagePath, sessionDefaultChannelGroup, etc.), row limit\n- An OAuth 2.0 Bearer token retrieved from the Site Kit plugin's stored credentials \u2014 no token is stored or transmitted by this plugin<\/p>\n\n<p><strong>What is NOT sent:<\/strong> post content, visitor PII, passwords, or any data beyond the analytics query parameters listed above.<\/p>\n\n<p><strong>Why:<\/strong> To retrieve traffic and engagement metrics from Google Analytics 4 so the AI agent can summarise your site's performance.<\/p>\n\n<p><strong>Google Terms of Service:<\/strong> https:\/\/developers.google.com\/terms\n<strong>Google Privacy Policy:<\/strong> https:\/\/policies.google.com\/privacy<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the <a href=\"https:\/\/github.com\/WordPress\/mcp-adapter\">WordPress MCP Adapter<\/a> plugin first.<\/li>\n<li>Upload the <code>wds-mcp-content-manager<\/code> folder to <code>\/wp-content\/plugins\/<\/code> or install via the WordPress plugin screen.<\/li>\n<li>Activate the plugin in <strong>WP Admin \u2192 Plugins<\/strong>.<\/li>\n<li>Go to <strong>Settings \u2192 WDS MCP Setup<\/strong> and copy your MCP endpoint URL.<\/li>\n<li>Add the endpoint to your AI client (Claude Desktop, Claude Code, Cursor, etc.).<\/li>\n<\/ol>\n\n<h4>Connect with Claude Code<\/h4>\n\n<pre><code>claude mcp add wordpress --url https:\/\/your-site.com\/wp-json\/mcp\/v1\n<\/code><\/pre>\n\n<p>Replace <code>https:\/\/your-site.com<\/code> with your WordPress site URL.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20paid%20license%20to%20use%20this%20plugin%3F\"><h3>Do I need a paid license to use this plugin?<\/h3><\/dt>\n<dd><p>No. All core content abilities (posts, pages, categories, tags) work without a license. A Pro license unlocks WooCommerce, Elementor, Media Library, and Polylang abilities.<\/p><\/dd>\n<dt id=\"which%20ai%20clients%20are%20supported%3F\"><h3>Which AI clients are supported?<\/h3><\/dt>\n<dd><p>Any MCP-compatible client: Claude Desktop, Claude Code, Cursor, and others. The plugin uses the standard Model Context Protocol so it works with any compliant client.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20require%20woocommerce%20or%20elementor%3F\"><h3>Does this plugin require WooCommerce or Elementor?<\/h3><\/dt>\n<dd><p>No. Those plugins are optional. Their abilities only appear when the corresponding plugin is installed and active.<\/p><\/dd>\n<dt id=\"is%20my%20data%20sent%20to%20any%20external%20server%3F\"><h3>Is my data sent to any external server?<\/h3><\/dt>\n<dd><p>Only if you activate a Pro license key. See the \"External Services\" section below for details. Free users make no external calls.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20a%20pro%20license%3F\"><h3>Where do I get a Pro license?<\/h3><\/dt>\n<dd><p>At <a href=\"https:\/\/wallstrdev.de\/product\/wds-mcp-content-manager-pro\/\">wallstrdev.de\/product\/wds-mcp-content-manager-pro\/<\/a>. During checkout you enter the domain where the plugin is installed; a license key is emailed to you after payment.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.9.18<\/h4>\n\n<ul>\n<li>Fix: WP.org compliance \u2014 added full External Services disclosure for Google Search Console API and Google Analytics Data API used by Site Kit Pro abilities, including data description and links to Google terms\/privacy policy.<\/li>\n<li>Fix: WP.org compliance \u2014 added Site Kit Pro abilities (get-top-queries, get-top-pages, get-page-performance, get-traffic-overview) to the Pro abilities list in the readme.<\/li>\n<\/ul>\n\n<h4>3.9.17<\/h4>\n\n<ul>\n<li>Add: Quick Setup prompt card in wizard Step 4 \u2014 paste one line into any AI agent to configure MCP automatically.<\/li>\n<li>Add: Security plugin warning in wizard Step 3 \u2014 detects Wordfence, AIOS, iThemes Security, and Shield Security and shows plugin-specific fix instructions.<\/li>\n<\/ul>\n\n<h4>3.9.16<\/h4>\n\n<ul>\n<li>Fix: License server URL updated from wallstrdev.de to wallstrdev.com.<\/li>\n<\/ul>\n\n<h4>3.9.15<\/h4>\n\n<ul>\n<li>Add: Google Site Kit Analytics group added to Permissions tab (Pro, requires Site Kit plugin).<\/li>\n<li>Add: Site Kit status card in Setup Wizard under \"Pro Integrations\" \u2014 shows install \/ activate \/ connect steps for Search Console and GA4.<\/li>\n<li>Add: Admin notice on WDS settings page guiding Pro users to install or connect Site Kit when not fully set up.<\/li>\n<\/ul>\n\n<h4>3.9.14<\/h4>\n\n<ul>\n<li>Fix: Search Console site URL now reads from the correct settings key (propertyID, not siteURL), fixing get-top-queries and Search Console half of get-page-performance.<\/li>\n<\/ul>\n\n<h4>3.9.13<\/h4>\n\n<ul>\n<li>Fix: Site Kit abilities now bypass Site Kit's REST layer entirely and call Google APIs directly. Uses User_Options(context, owner_id) with an explicit user ID so the correct OAuth token is found regardless of who the current WordPress user is at plugin boot time, resolving the persistent missing_required_scopes 403 that the Application Password approach could not fix.<\/li>\n<\/ul>\n\n<h4>3.9.12<\/h4>\n\n<ul>\n<li>Debug: richer error output \u2014 owner user, login, and raw Site Kit response body surfaced in warnings.<\/li>\n<\/ul>\n\n<h4>3.9.11<\/h4>\n\n<ul>\n<li>Fix: Corrected Site Kit option key format \u2014 hyphens are preserved (googlesitekit_search-console_settings, not search_console), so ownerID is now read correctly and the right user context is used for API requests.<\/li>\n<\/ul>\n\n<h4>3.9.10<\/h4>\n\n<ul>\n<li>Fix: Site Kit abilities now use WordPress Application Passwords + wp_remote_get() instead of rest_do_request(), bypassing Site Kit's user-context caching issue that caused 403 errors even when OAuth was connected.<\/li>\n<\/ul>\n\n<h4>3.9.9<\/h4>\n\n<ul>\n<li>Fix: Added wds_sitekit_find_owner() helper that locates the correct WordPress user for Site Kit requests \u2014 tries module ownerID first, then any admin with googlesitekit_manage_options capability, then user ID 1 as fallback.<\/li>\n<\/ul>\n\n<h4>3.9.8<\/h4>\n\n<ul>\n<li>Debug: Added owner_id and user context to Site Kit error messages to diagnose OAuth token lookup failures.<\/li>\n<\/ul>\n\n<h4>3.9.7<\/h4>\n\n<ul>\n<li>Fix: Site Kit abilities now temporarily switch to the module owner's WordPress user context before making internal REST requests, so Site Kit finds the correct OAuth tokens and returns real data instead of a permissions error.<\/li>\n<\/ul>\n\n<h4>3.9.6<\/h4>\n\n<ul>\n<li>Fix: Site Kit connection check now relies on Site Kit's own REST endpoints instead of internal option keys, fixing false \"not connected\" errors when Search Console or GA4 modules are active.<\/li>\n<\/ul>\n\n<h4>3.9.5<\/h4>\n\n<ul>\n<li>New: Pro ability <code>site-kit\/get-top-queries<\/code> \u2014 returns top search queries from Google Search Console.<\/li>\n<li>New: Pro ability <code>site-kit\/get-top-pages<\/code> \u2014 returns top pages by traffic from Google Analytics 4.<\/li>\n<li>New: Pro ability <code>site-kit\/get-page-performance<\/code> \u2014 returns combined Search Console + GA4 metrics for a single URL.<\/li>\n<li>New: Pro ability <code>site-kit\/get-traffic-overview<\/code> \u2014 returns site-wide traffic summary by channel from GA4.<\/li>\n<\/ul>\n\n<h4>3.9.4<\/h4>\n\n<ul>\n<li>Fix: WP.org compliance \u2014 corrected <code>Text Domain<\/code> header in free plugin to <code>wds-mcp-content-manager<\/code> to match the plugin slug.<\/li>\n<li>Fix: Permission \u2014 <code>wds\/get-pages<\/code> now restricts non-publish status queries (draft, private, etc.) to users with <code>edit_pages<\/code> capability.<\/li>\n<li>Fix: Permission \u2014 <code>wds\/create-post<\/code> and <code>wds\/update-post<\/code> now require <code>upload_files<\/code> when a <code>featured_image_url<\/code> is provided.<\/li>\n<li>Fix: Permission \u2014 <code>wds\/create-page<\/code> and <code>wds\/update-page<\/code> now use page-specific <code>edit_pages<\/code> capability instead of <code>edit_posts<\/code>, and require <code>upload_files<\/code> when a <code>featured_image_url<\/code> is provided.<\/li>\n<\/ul>\n\n<h4>3.9.3<\/h4>\n\n<ul>\n<li>Fix: WP.org compliance \u2014 removed GitHub-based one-click adapter install from admin notice; directs users to Plugins &gt; Add New instead.<\/li>\n<li>Fix: WP.org compliance \u2014 MCP endpoint URL now uses <code>rest_url()<\/code> instead of hardcoded <code>home_url('\/wp-json\/...')<\/code> in wizard steps 2 and 4.<\/li>\n<li>Fix: Permission \u2014 <code>wds\/get-post<\/code> now rejects posts of non-viewable post types for unauthenticated callers.<\/li>\n<li>Fix: Permission \u2014 <code>wds\/create-post<\/code> requires <code>publish_posts<\/code> capability before setting publish or private status.<\/li>\n<li>Fix: Permission \u2014 <code>wds\/upload-image<\/code> verifies <code>edit_post<\/code> capability when a <code>post_id<\/code> is provided.<\/li>\n<li>Fix: Permission \u2014 category and product-category auto-creation now gated on the appropriate manage-terms capability.<\/li>\n<\/ul>\n\n<h4>3.9.2<\/h4>\n\n<ul>\n<li>Fix: Plugin Check \u2014 corrected <code>Text Domain<\/code> header from <code>wds-mcp-content-manager<\/code> to <code>wallstrdev-mcp-content-manager<\/code> in both plugin files to match the plugin slug.<\/li>\n<li>Fix: Plugin Check \u2014 updated text domain string in <code>settings.php<\/code> i18n calls to match.<\/li>\n<\/ul>\n\n<h4>3.9.1<\/h4>\n\n<ul>\n<li>Fix: Plugin Check \u2014 added phpcs:ignore for <code>wp_json_encode<\/code> output inside JSON-LD script tag in <code>helpers.php<\/code>.<\/li>\n<li>Fix: Plugin Check \u2014 replaced variable-in-printf with explicit if\/else in locked permissions card to satisfy output escaping rules.<\/li>\n<li>Fix: Plugin Check \u2014 bumped <code>Requires at least<\/code> to 6.9 to match <code>wp_register_ability()<\/code> \/ <code>wp_register_ability_category()<\/code> minimum WordPress version.<\/li>\n<\/ul>\n\n<h4>3.9.0<\/h4>\n\n<ul>\n<li>Add: Free\/Pro split \u2014 plugin now ships as two separate ZIPs. Free edition (WP.org) contains content, pages, and taxonomy abilities only. Pro edition (wallstrdev.de) contains all abilities including WooCommerce, Elementor, Media, and Multilingual.<\/li>\n<li>Fix: WP.org compliance \u2014 removed GitHub-based one-click adapter install; adapter install now directs users to Plugins &gt; Add New.<\/li>\n<li>Fix: WP.org compliance \u2014 MCP endpoint URL now uses <code>rest_url()<\/code> instead of hardcoded <code>home_url('\/wp-json\/...')<\/code>.<\/li>\n<li>Fix: Permission checks \u2014 <code>wds\/get-post<\/code> now rejects non-viewable post types for unauthenticated requests.<\/li>\n<li>Fix: Permission checks \u2014 <code>wds\/create-post<\/code> requires <code>publish_posts<\/code> capability before setting publish\/private status.<\/li>\n<li>Fix: Permission checks \u2014 <code>wds\/upload-image<\/code> verifies <code>edit_post<\/code> permission when a <code>post_id<\/code> is supplied.<\/li>\n<li>Fix: Permission checks \u2014 category and product-category creation now gated on <code>manage_categories<\/code> \/ taxonomy manage capability.<\/li>\n<\/ul>\n\n<h4>3.8.4<\/h4>\n\n<ul>\n<li>Add: New optional Yoast score inputs on content abilities: <code>seo_score<\/code> and <code>seo_content_score<\/code> (0-100).<\/li>\n<li>Improvement: <code>wds\/update-post<\/code> can now deterministically set Yoast traffic-light score metadata for one-by-one editorial workflows.<\/li>\n<li>Improvement: Focus keyphrase writes now also sync <code>_yoast_wpseo_focuskw_text_input<\/code> to match the Yoast metabox field.<\/li>\n<\/ul>\n\n<h4>3.8.3<\/h4>\n\n<ul>\n<li>Add: New free ability <code>wds\/reindex-yoast-seo<\/code> to run Yoast SEO data optimization (indexables reindex) via Yoast indexing REST routes.<\/li>\n<li>Add: New helper permission callback <code>wds_can_manage_options<\/code> and enforce admin-level access for Yoast reindex execution.<\/li>\n<li>Improvement: Permissions screen now includes a toggle for <code>wds\/reindex-yoast-seo<\/code>.<\/li>\n<\/ul>\n\n<h4>3.8.2<\/h4>\n\n<ul>\n<li>Add: New read ability <code>wds\/get-elementor-data<\/code> \u2014 returns the raw <code>_elementor_data<\/code> JSON for any post, page, or Elementor Library template, so an AI client can read the current structure, make a targeted edit, and write it back via <code>wds\/inject-elementor-json<\/code> or <code>wds\/update-elementor-template<\/code>.<\/li>\n<\/ul>\n\n<h4>3.8.1<\/h4>\n\n<ul>\n<li>Add: New Polylang read ability <code>wds\/get-post-translations<\/code> for checking post\/page translation mappings.<\/li>\n<li>Improvement: Multilingual Permissions group now includes <code>wds\/get-post-translations<\/code>.<\/li>\n<\/ul>\n\n<h4>3.8.0<\/h4>\n\n<ul>\n<li>Add: Free taxonomy write abilities \u2014 wds\/update-category, wds\/delete-category, wds\/update-tag, wds\/delete-tag.<\/li>\n<li>Add: Pro WooCommerce read abilities \u2014 wds\/get-products and wds\/get-product.<\/li>\n<li>Add: Pro product taxonomy CRUD for categories and tags.<\/li>\n<li>Add: Pro Polylang term translation abilities \u2014 wds\/set-term-language, wds\/link-term-translations, wds\/get-term-translations.<\/li>\n<li>Improvement: Permissions screen now includes all registered abilities.<\/li>\n<\/ul>\n\n<h4>3.6.5<\/h4>\n\n<ul>\n<li>Fix: Connect Client tabs now reliably switch in Setup Wizard Step 4 by binding tab click handlers after <code>DOMContentLoaded<\/code>.<\/li>\n<li>Fix: Add a defensive panel lookup guard in tab switch logic to avoid JS errors if a tab target is missing.<\/li>\n<li>Fix: Set Connect Client tab buttons to <code>type=\"button\"<\/code> to prevent accidental form-submit behavior.<\/li>\n<\/ul>\n\n<h4>3.6.4<\/h4>\n\n<ul>\n<li>Add: Register page abilities <code>wds\/get-pages<\/code>, <code>wds\/create-page<\/code>, and <code>wds\/update-page<\/code>.<\/li>\n<li>Add: Include page abilities in the Permissions screen.<\/li>\n<\/ul>\n\n<h4>3.6.3<\/h4>\n\n<ul>\n<li>Fix: Replace inline  blocks with wp_add_inline_script() (WP.org enqueue requirement).<\/li>\n<li>Fix: Re-encode JSON-LD schema via wp_json_encode before output (WP.org escaping requirement).<\/li>\n<li>Fix: Add post-status guard in wds\/get-post to prevent non-public posts being exposed to unauthenticated callers.<\/li>\n<li>Fix: Add per-post current_user_can('edit_post') checks in all write executors (update-post, update-product, set-product-schema, set-elementor-page, inject-elementor-json, set-featured-image, set-post-language, link-translations).<\/li>\n<\/ul>\n\n<h4>3.6.2<\/h4>\n\n<ul>\n<li>Fix: Revert Text Domain to wds-mcp-content-manager (WP.org-assigned slug).<\/li>\n<li>Fix: Exclude .gitignore from plugin ZIP (hidden files not permitted on WP.org).<\/li>\n<\/ul>\n\n<h4>3.6.1<\/h4>\n\n<ul>\n<li>Fix: Resolve remaining Plugin Check errors \u2014 nonce suppression on read-only nav params, $license_url escaping, sanitized license key input.<\/li>\n<\/ul>\n\n<h4>3.6.0<\/h4>\n\n<ul>\n<li>Fix: Resolve all WordPress Plugin Check errors for WP.org submission (ABSPATH guards, escaping, wp_unslash, wp_parse_url, wp_delete_file).<\/li>\n<li>Add: One-click WordPress MCP Adapter install \u2014 user-initiated, fully disclosed, uses Plugin_Upgrader.<\/li>\n<\/ul>\n\n<h4>3.5.1<\/h4>\n\n<ul>\n<li>Fix: Pro abilities now show as locked (with upgrade prompt) on Free plan instead of being hidden entirely \u2014 better AI agent UX.<\/li>\n<li>Improvement: License tab includes direct link to purchase Pro.<\/li>\n<\/ul>\n\n<h4>3.5.0<\/h4>\n\n<ul>\n<li>Add: Freemium model \u2014 Free plan includes core post\/category\/tag abilities; Pro unlocks WooCommerce, Elementor, Media, and Multilingual abilities.<\/li>\n<li>Add: License activation UI under Settings \u2192 WDS MCP Setup \u2192 License.<\/li>\n<li>Add: 7-day offline grace period so sites with temporary connectivity issues do not lose Pro access.<\/li>\n<\/ul>\n\n<h4>3.4.0<\/h4>\n\n<ul>\n<li>Add: wds\/set-featured-image ability.<\/li>\n<li>Add: wds\/inject-elementor-json ability for native Elementor sections.<\/li>\n<li>Improvement: Ability permission checks use WordPress capabilities.<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Initial public release with 13 core abilities.<\/li>\n<\/ul>","raw_excerpt":"Give your AI agent full control of your WordPress site via the Model Context Protocol (MCP).","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/317234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=317234"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wallstrdev"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=317234"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=317234"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=317234"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=317234"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=317234"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=317234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}