{"id":312719,"date":"2026-06-17T16:50:22","date_gmt":"2026-06-17T16:50:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/agentic-commerce-ai-readiness-toolkit\/"},"modified":"2026-06-17T16:49:55","modified_gmt":"2026-06-17T16:49:55","slug":"sdx-ai-readiness-toolkit","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/sdx-ai-readiness-toolkit\/","author":23356298,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.3.0","stable_tag":"0.3.0","tested":"7.0","requires":"7.0","requires_php":"7.4","requires_plugins":null,"header_name":"SDX AI Readiness Toolkit for WooCommerce","header_author":"Suhan Duman","header_description":"UCP, MCP, and ACP protocol support for WooCommerce with AI-readiness audit dashboard.","assets_banners_color":"5459d1","last_updated":"2026-06-17 16:49:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":32,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.3.0":{"tag":"0.3.0","author":"suhanduman","date":"2026-06-17 16:49:55"}},"upgrade_notice":{"0.3.0":"<p>WordPress 7.0 is now required. Security hardening, native WP 7.0 MCP integration, and selectable MCP\/ACP exposure modes.<\/p>","0.2.0":"<p>Major new ACP checkout module. Backwards compatible.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3576151,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3576151,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3576151,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3576151,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.3.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[267600,2353,242115,254710,286],"plugin_category":[45],"plugin_contributors":[247430],"plugin_business_model":[],"class_list":["post-312719","plugin","type-plugin","status-publish","hentry","plugin_tags-acp","plugin_tags-ai","plugin_tags-mcp","plugin_tags-ucp","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-suhanduman","plugin_committers-suhanduman"],"banners":{"banner":"https:\/\/ps.w.org\/sdx-ai-readiness-toolkit\/assets\/banner-772x250.png?rev=3576151","banner_2x":"https:\/\/ps.w.org\/sdx-ai-readiness-toolkit\/assets\/banner-1544x500.png?rev=3576151","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sdx-ai-readiness-toolkit\/assets\/icon-128x128.png?rev=3576151","icon_2x":"https:\/\/ps.w.org\/sdx-ai-readiness-toolkit\/assets\/icon-256x256.png?rev=3576151","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>SDX AI Readiness Toolkit<\/strong> makes any WooCommerce store auto-discoverable, readable, and purchasable by AI shopping agents \u2014 ChatGPT plugins, Perplexity Shopping, Google's commerce AI, custom Claude tools, and any agent that speaks the open protocols of the agentic commerce ecosystem.<\/p>\n\n<h4>Why this matters<\/h4>\n\n<p>In 2026 Google launched the <strong>Universal Commerce Protocol (UCP)<\/strong> with Shopify, Walmart, Target, Wayfair, and Etsy. WooCommerce was absent. This plugin closes that gap.<\/p>\n\n<h4>What this plugin does<\/h4>\n\n<ul>\n<li><strong>UCP discovery<\/strong> at <code>\/.well-known\/ucp<\/code> \u2014 agents auto-find your store<\/li>\n<li><strong>MCP server<\/strong> at <code>\/wp-json\/agtc\/v1\/mcp<\/code> \u2014 JWT-authenticated tools for product listing, search, and order lookup<\/li>\n<li><strong>ACP checkout<\/strong> at <code>\/wp-json\/agtc\/v1\/acp\/checkouts<\/code> \u2014 agentic checkout sessions with Stripe <code>payment_intent<\/code> support<\/li>\n<li><strong>OAuth 2.0 server<\/strong> \u2014 dynamic client registration + <code>client_credentials<\/code> grant<\/li>\n<li><strong>WC native ACP coexistence<\/strong> \u2014 auto-detects WooCommerce 10.7+ native ACP and defers when active<\/li>\n<li><strong>Web discovery<\/strong> \u2014 HTML <code>&lt;link&gt;<\/code> tags, HTTP Link headers, <code>robots.txt<\/code> advisory, <code>\/llms.txt<\/code><\/li>\n<li><strong>Google Merchant Center feed<\/strong> at <code>\/merchant-feed\/google.xml<\/code> \u2014 a self-hosted, Google-spec product feed you register as a scheduled fetch<\/li>\n<li><strong>AI readiness dashboard<\/strong> \u2014 scores your store, shows what's missing, offers one-click fixes<\/li>\n<li><strong>Production-grade engineering<\/strong> \u2014 260+ unit tests, integration-tested on live WordPress 7.0 + WooCommerce, WordPress Coding Standards compliant, PHP 7.4+ compatible<\/li>\n<\/ul>\n\n<h4>How agents use your store<\/h4>\n\n<ol>\n<li>Agent fetches <code>\/.well-known\/ucp<\/code><\/li>\n<li>Agent registers via <code>\/oauth\/register<\/code> \u2192 receives client ID + secret<\/li>\n<li>Agent exchanges credentials for JWT at <code>\/oauth\/token<\/code><\/li>\n<li>Agent calls MCP tools under <code>\/mcp<\/code> (search, list)<\/li>\n<li>Agent creates an ACP checkout session at <code>\/acp\/checkouts<\/code><\/li>\n<li>Agent completes the session \u2192 real WooCommerce order in your admin<\/li>\n<\/ol>\n\n<p>All standard payment gateways work. UCP creates standard WC orders.<\/p>\n\n<h4>How this actually helps your store<\/h4>\n\n<p>AI shopping assistants \u2014 ChatGPT, Perplexity, Gemini, Claude \u2014 now help millions of people find products every day. When a shopper asks \"find me a waterproof backpack under $80\", the assistant doesn't open Google and click around. It queries machine-readable storefronts directly. The way it finds those storefronts is by fetching <code>\/.well-known\/ucp<\/code> on each domain it knows about. If that file doesn't exist, your store is invisible to the agent \u2014 not low-ranked, <em>invisible<\/em>.<\/p>\n\n<p>This plugin publishes that file automatically, along with the MCP tools the agent uses to actually browse your catalog. You don't have to write a single line of integration code; activating the plugin is enough to put your store on the map for every agent that speaks UCP, MCP, or ACP.<\/p>\n\n<p>A few complementary moves we recommend alongside this plugin: register your products in <strong>Google Merchant Center<\/strong> so the Google Shopping feed picks them up, keep product titles and descriptions clear and well-structured (the same SEO discipline that helps humans also helps AI parsing), and make sure your site runs on HTTPS end-to-end so agents trust the responses.<\/p>\n\n<p>Once your store is published, agents can do three things that previously required a human: discover that you exist, browse your catalog in real time, and \u2014 with ACP enabled \u2014 create a real WooCommerce order on behalf of their user, with the same checkout, tax, shipping, and fulfillment plumbing your human customers go through today.<\/p>\n\n<h4>Google Merchant Center<\/h4>\n\n<p>The plugin publishes a Google-spec product feed at <code>https:\/\/yourstore.com\/merchant-feed\/google.xml<\/code>. It is fully self-hosted \u2014 the plugin contacts no external service. Instead, you register that URL in <strong>Google Merchant Center \u2192 Products \u2192 Feeds<\/strong> as a scheduled fetch, and Google pulls the feed on its own schedule. Once Google has the feed, your products become eligible for Google Shopping and Google's shopping AI.<\/p>\n\n<p>The feed is built from your published, catalog-visible WooCommerce products and includes each product's title, description, price, availability, image, and \u2014 when set \u2014 brand and GTIN. Filling in <strong>brand<\/strong> and <strong>GTIN<\/strong> (Products \u2192 product \u2192 Inventory \u2192 Global Unique ID, on WooCommerce 9.2+) materially improves listing quality and how often Google can match your products. Variable products are expanded to their purchasable variations. The generated XML is cached for one hour to keep the endpoint fast.<\/p>\n\n<h4>Privacy &amp; Data Handling<\/h4>\n\n<p>This plugin is built to be conservative about data:<\/p>\n\n<ul>\n<li>The plugin only exposes publicly available product data \u2014 name, price, image, description \u2014 through its UCP and MCP discovery endpoints. Anything you already display on a public product page is fair game; nothing else is.<\/li>\n<li>Order data is gated behind a valid OAuth 2.0 access token AND is scoped to the agent's own orders. An agent (OAuth client) can only read orders it created itself through the ACP checkout flow; it can never read other agents' orders or orders placed by human customers through normal checkout. An agent without the <code>read:orders<\/code> scope cannot read any orders at all, and <code>read:orders<\/code> is never granted by open client registration unless it is explicitly requested.<\/li>\n<li>No customer personally identifiable information (PII) is collected, transmitted to third parties, or stored beyond standard WooCommerce order records that WooCommerce itself already manages.<\/li>\n<li>All admin actions \u2014 including the audit dashboard and one-click auto-fix buttons \u2014 require the <code>manage_woocommerce<\/code> capability and a verified WordPress CSRF nonce.<\/li>\n<li>No outbound telemetry. No analytics calls. No external \"phone home\" requests. The plugin does not contact the author, an analytics vendor, or any third party at install time, on activation, or during normal operation.<\/li>\n<\/ul>\n\n<h4>External Services<\/h4>\n\n<p>WordPress.org guideline #6 requires that we disclose any external services this plugin contacts. The list is short:<\/p>\n\n<ul>\n<li><strong>Stripe (optional, opt-in):<\/strong> Stripe is only contacted when the ACP module's <code>payment_intent<\/code> flow is explicitly enabled by defining the <code>AGTC_STRIPE_SECRET_KEY<\/code> constant in <code>wp-config.php<\/code>. When an agent completes a checkout session under that flow, the plugin makes a server-to-server POST to <code>https:\/\/api.stripe.com\/v1\/payment_intents<\/code> to authorize the payment. No data is sent to Stripe unless this flow is activated. Stripe service terms: https:\/\/stripe.com\/legal \u2014 Stripe privacy policy: https:\/\/stripe.com\/privacy.<\/li>\n<li><strong>No other external services are contacted by default.<\/strong> UCP, MCP, and ACP discovery endpoints are served from your own WordPress installation. The agent pulls data <em>from<\/em> you; you do not push data <em>to<\/em> the agent or to any intermediary.<\/li>\n<\/ul>\n\n<h4>Disclaimer<\/h4>\n\n<p>This plugin is an independent, community-driven implementation of open commerce protocols. It is not affiliated with, endorsed by, or sponsored by Stripe, Inc., OpenAI, Google, Anthropic, Automattic, or the WooCommerce trademark holders. \"WooCommerce\" is a trademark of Automattic Inc. and is referenced solely for descriptive interoperability purposes.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload to <code>\/wp-content\/plugins\/agtc-commerce<\/code> (or install via WP admin \u2192 Plugins \u2192 Add New)<\/li>\n<li>Activate via Plugins menu<\/li>\n<li>Visit <strong>SDX AI Readiness<\/strong> in the admin sidebar to see the AI Readiness dashboard<\/li>\n<li>(Optional) Define <code>AGTC_STRIPE_SECRET_KEY<\/code> in <code>wp-config.php<\/code> to enable ACP payment intents<\/li>\n<\/ol>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 7.0 or higher<\/li>\n<li>WooCommerce 8.0 or higher<\/li>\n<li>PHP 7.4 or higher (PHP 8.x recommended)<\/li>\n<li>OpenSSL and libsodium PHP extensions<\/li>\n<li>Pretty Permalinks enabled<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20this%20conflict%20with%20woocommerce%27s%20built-in%20acp%20support%3F\"><h3>Will this conflict with WooCommerce's built-in ACP support?<\/h3><\/dt>\n<dd><p>No. WooCommerce 10.7+ ships internal ACP infrastructure with the <code>agentic_checkout<\/code> feature flag (default off). Our <code>Coexistence<\/code> detector activates our endpoints only when the WC native flag is off, and defers (410 + Location header) when on.<\/p><\/dd>\n<dt id=\"do%20i%20need%20stripe%3F\"><h3>Do I need Stripe?<\/h3><\/dt>\n<dd><p>Only for ACP payment_intent flow. Without Stripe, agents can still discover, browse, and create checkout sessions \u2014 they just can't authorize payment through ACP directly.<\/p>\n\n<p>There are two flow models to choose from, and most stores can start without Stripe entirely:<\/p>\n\n<ul>\n<li><strong>Model A \u2014 Agent pays directly (ACP <code>payment_intent<\/code>):<\/strong> Requires Stripe. The ACP protocol uses Stripe's PaymentIntent under the hood, so you must define <code>AGTC_STRIPE_SECRET_KEY<\/code> in <code>wp-config.php<\/code>. The agent never sees the customer's card; payment is captured server-side at session completion. This is the fully autonomous flow.<\/li>\n<li><strong>Model B \u2014 Agent creates order, customer pays later:<\/strong> Works with <strong>any<\/strong> WooCommerce payment gateway \u2014 PayPal, Square, Stripe via WooCommerce Payments, bank transfer, cash on delivery, anything you already have configured. The agent creates an ACP session, which the plugin converts into a standard pending WooCommerce order. The customer receives an order link and completes payment using whatever gateway your store already uses.<\/li>\n<li><strong>Recommendation:<\/strong> Most stores should start with Model B (no Stripe required) and add Model A later if and when they want fully autonomous agent purchases without a human checkout step.<\/li>\n<\/ul><\/dd>\n<dt id=\"what%20data%20does%20this%20expose%20to%20agents%3F\"><h3>What data does this expose to agents?<\/h3><\/dt>\n<dd><p>By default, public product data only (name, price, description, images). An agent can additionally read its <strong>own<\/strong> orders if it holds the <code>read:orders<\/code> scope \u2014 but only orders it created itself through the ACP checkout flow. Agents never see other agents' orders or orders placed by human customers through normal checkout.<\/p><\/dd>\n<dt id=\"how%20do%20i%20let%20agents%20read%20orders%3F\"><h3>How do I let agents read orders?<\/h3><\/dt>\n<dd><p>Order access is scoped to ownership and safe by default: an agent (OAuth client) can only ever read orders it created itself via the ACP checkout flow. It can never read another agent's orders or orders placed by human customers through normal checkout.<\/p>\n\n<p>To read its own orders, an agent must request the <code>read:orders<\/code> scope at registration; dynamic client registration only ever grants <code>read:products<\/code> by default, so <code>read:orders<\/code> must always be requested explicitly. No server-side opt-in or <code>wp-config.php<\/code> constant is required.<\/p><\/dd>\n<dt id=\"is%20the%20oauth%20flow%20secure%3F\"><h3>Is the OAuth flow secure?<\/h3><\/dt>\n<dd><p>Yes. Client secrets are hashed with <code>password_hash()<\/code>. Access tokens are RS256-signed JWTs with <code>iat<\/code>, <code>exp<\/code> (max 2h), <code>aud<\/code>, <code>iss<\/code>, and <code>jti<\/code> claims. Admin endpoints require WP nonce + <code>manage_woocommerce<\/code>.<\/p><\/dd>\n<dt id=\"how%20do%20i%20rotate%20the%20jwks%20keypair%3F\"><h3>How do I rotate the JWKS keypair?<\/h3><\/dt>\n<dd><p>Open the AI Readiness dashboard. If JWKS rotation is needed, click the \"Rotate JWKS keypair now\" button. Old key remains valid for a 24h grace period.<\/p><\/dd>\n<dt id=\"wordpress%207.0%20native%20mcp\"><h3>WordPress 7.0 native MCP<\/h3><\/dt>\n<dd><p>On WordPress 7.0 this plugin registers its tools as WordPress Abilities, making them available through the core MCP Adapter to clients such as Claude Desktop, Claude Code, Cursor, and VS Code. Those clients authenticate with standard WordPress application passwords \u2014 no OAuth setup is required on their side. The plugin's own OAuth MCP server remains active alongside the core adapter and continues to serve headless or autonomous agents that manage their own credentials.<\/p>\n\n<p>The AI Readiness dashboard shows a \"Protocol exposure\" card with two settings:<\/p>\n\n<p>MCP exposure controls which MCP path is active: \"both\" (default \u2014 core adapter and plugin server run side by side), \"core\" (plugin's own MCP server is disabled, traffic goes to the WP core adapter only), or \"plugin\" (core adapter integration is disabled, plugin MCP server only).<\/p>\n\n<p>ACP exposure controls ACP checkout availability: \"auto\" (default \u2014 plugin ACP is active when WooCommerce native ACP is off, deferred when on), \"plugin\" (plugin ACP is always active regardless of WC native state), or \"off\" (ACP checkout is fully disabled).<\/p>\n\n<p>Both settings can be overridden programmatically with the filters agtc_mcp_exposure_mode and agtc_acp_exposure_mode, which receive the stored option value and should return one of the accepted mode strings.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20my%20products%20into%20google%20shopping%3F\"><h3>How do I get my products into Google Shopping?<\/h3><\/dt>\n<dd><p>The plugin publishes a Google-spec product feed at <code>https:\/\/yourstore.com\/merchant-feed\/google.xml<\/code>. In Google Merchant Center, go to <strong>Products \u2192 Feeds<\/strong>, add a new feed, and choose the <strong>scheduled fetch<\/strong> option pointing at that URL. Google then fetches the feed on its own schedule \u2014 the plugin never contacts Google. The feed carries title, description, price, availability, image, and brand\/GTIN when set; adding a brand and GTIN to each product improves listing quality and match rate. The dashboard's FEED-001 check flags products missing those attributes.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Security: plugin-owned key derivation (MasterKey) replacing reuse of WordPress auth salts<\/li>\n<li>Security: AES-256-GCM at-rest encryption for sensitive stored data<\/li>\n<li>Security: MCP tool scope enforcement; order tools scoped to the agent's own orders<\/li>\n<li>New: Google Merchant Center product feed at <code>\/merchant-feed\/google.xml<\/code> + dashboard feed-readiness audit<\/li>\n<li>New: WordPress 7.0 native MCP integration \u2014 tools registered as Abilities for the core MCP Adapter<\/li>\n<li>New: selectable MCP exposure (both\/core\/plugin) and ACP exposure (auto\/plugin\/off) with dashboard controls and filters<\/li>\n<li>Changed: minimum WordPress raised to 7.0<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>New: ACP checkout module with Stripe payment_intent + WC native coexistence<\/li>\n<li>New: Outbound webhook dispatcher with Ed25519 signing<\/li>\n<li>New: Severity-grouped dashboard with remediation cards and one-click auto-fix buttons<\/li>\n<li>New: <code>\/admin\/fix<\/code> REST endpoint with nonce + capability check<\/li>\n<li>Fix: PHP 8.5 deprecation warnings (<code>setAccessible<\/code>, <code>curl_close<\/code>)<\/li>\n<li>Fix: JwtVerifier enforces <code>iat<\/code> claim and 2h max token lifetime<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release: Core, MCP, UCP, Discovery hints<\/li>\n<\/ul>","raw_excerpt":"Make your WooCommerce store first-class compatible with AI shopping agents: UCP discovery, MCP tools, OAuth 2.0, ACP checkout, audit dashboard.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/312719","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=312719"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/suhanduman"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=312719"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=312719"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=312719"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=312719"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=312719"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=312719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}