<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Benji Fisher</title>
    <description>The latest articles on DEV Community by Benji Fisher (@benjifisher).</description>
    <link>https://dev.to/benjifisher</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3787687%2F0c8176d8-b238-43f2-b0af-71689e955123.jpg</url>
      <title>DEV Community: Benji Fisher</title>
      <link>https://dev.to/benjifisher</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/benjifisher"/>
    <language>en</language>
    <item>
      <title>The First Fully Autonomous AI Agent Purchase Through UCP</title>
      <dc:creator>Benji Fisher</dc:creator>
      <pubDate>Sat, 04 Apr 2026 10:47:23 +0000</pubDate>
      <link>https://dev.to/benjifisher/the-first-fully-autonomous-ai-agent-purchase-through-ucp-blj</link>
      <guid>https://dev.to/benjifisher/the-first-fully-autonomous-ai-agent-purchase-through-ucp-blj</guid>
      <description>&lt;p&gt;An AI agent searched a store, picked a product, linked a customer identity, selected wallet payment, set shipping, and completed checkout — creating a real WooCommerce order. No browser. No card network. No human after “proceed.”&lt;/p&gt;

&lt;p&gt;On March 25, 2026, session &lt;code&gt;01KMJ26KVH7ZZ78DWMHZ5BRK32&lt;/code&gt; on &lt;a href="https://ucpplayground.com" rel="noopener noreferrer"&gt;UCP Playground&lt;/a&gt; became the first fully autonomous AI agent purchase completed through the Universal Commerce Protocol. Here’s what happened, what broke along the way, and why it matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you’re looking at
&lt;/h2&gt;

&lt;p&gt;The session replay shows Claude Sonnet 4.5 shopping at &lt;a href="https://ucpchecker.com/status/houseofparfum.nl" rel="noopener noreferrer"&gt;houseofparfum.nl&lt;/a&gt; — a real Dutch perfume store running WooCommerce with the &lt;a href="https://zologic.nl/ucpready/" rel="noopener noreferrer"&gt;UCPReady plugin by Zologic&lt;/a&gt;. The user said:&lt;/p&gt;

&lt;p&gt;“Buy me a perfume under 30 euro, pay with my wallet”&lt;/p&gt;

&lt;p&gt;Eight turns and 43 seconds later, WooCommerce order #82251 was created. €30.13 debited from the customer’s store wallet. Confirmation email sent. No redirect. No payment form. No human touched it after the initial confirmation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://ucpplayground.com/s/01KMJ26KVH7ZZ78DWMHZ5BRK32" rel="noopener noreferrer"&gt;Replay the full session →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The full tool call sequence
&lt;/h2&gt;

&lt;p&gt;Every step of the purchase is visible in the session recording. Here’s what the agent executed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ucp_list_products&lt;/code&gt; — searched perfumes under €30, found Emanuel Ungaro Intense For Him (€18.95)&lt;/li&gt;
&lt;li&gt;User confirms: “yes”&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;create_checkout&lt;/code&gt; — line items added, buyer pre-populated from linked identity (resolved to WooCommerce customer #1), status: &lt;code&gt;requires_escalation&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;update_checkout&lt;/code&gt; — &lt;code&gt;selected_instrument_id: terrawallet-1&lt;/code&gt; rejected (missing fulfillment)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;update_checkout&lt;/code&gt; — shipping method &lt;code&gt;flat_rate1&lt;/code&gt; set, payment still missing&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;update_checkout&lt;/code&gt; — wallet instrument with &lt;code&gt;handler_id: com.terrawallet.store_credit&lt;/code&gt; accepted, status: &lt;code&gt;ready_for_complete&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;complete_checkout&lt;/code&gt; — status: &lt;code&gt;completed&lt;/code&gt;, order #82251, wallet balance: €467.32&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every call carried an OAuth bearer token from the &lt;a href="https://ucpchecker.com/blog/ucp-identity-linking-agentic-commerce" rel="noopener noreferrer"&gt;linked identity&lt;/a&gt;. The merchant resolved it to WooCommerce customer #1, pre-populated name, email, phone, and address. The &lt;code&gt;com.terrawallet.store_credit&lt;/code&gt; payment handler surfaced a €490.25 wallet balance with &lt;code&gt;coverage: full&lt;/code&gt; — enough to cover the order without any card network involvement.&lt;/p&gt;

&lt;h2&gt;
  
  
  What had to work
&lt;/h2&gt;

&lt;p&gt;This wasn’t a demo against a mock API. It was a real store with a real product catalogue, real pricing, real tax calculation, and a real wallet debit. For it to complete, every layer of the stack had to function.&lt;/p&gt;

&lt;h3&gt;
  
  
  Protocol layer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.well-known/ucp&lt;/code&gt; manifest with MCP endpoint, capabilities, and payment handlers&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tools/list&lt;/code&gt; returning all 11 tools (search, product details, cart CRUD, checkout lifecycle, complete, cancel)&lt;/li&gt;
&lt;li&gt;Structured validation messages (&lt;code&gt;requires_buyer_input&lt;/code&gt;) that the agent could read and act on&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Identity linking
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;OIDC discovery from issuer URL (RFC 8414 — UCPReady uses &lt;code&gt;/.well-known/oauth-authorization-server&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Dynamic client registration via the discovered &lt;code&gt;registration_endpoint&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;OAuth consent flow with PKCE&lt;/li&gt;
&lt;li&gt;Bearer token injected on every MCP request&lt;/li&gt;
&lt;li&gt;Merchant resolving the token to &lt;code&gt;identity_customer_id: 1&lt;/code&gt; with pre-populated buyer data&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agent orchestration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;System prompt with checkout completion instructions&lt;/li&gt;
&lt;li&gt;Auto-nudge when the model stopped after seeing validation errors&lt;/li&gt;
&lt;li&gt;Auto-injection of &lt;code&gt;meta.idempotency-key&lt;/code&gt; (UUID) on &lt;code&gt;complete_checkout&lt;/code&gt; — models consistently fail to format this correctly&lt;/li&gt;
&lt;li&gt;Payment handler IDs passed from manifest to system prompt&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Payment processing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;TerraWallet store credit — entirely server-side, no browser interaction needed&lt;/li&gt;
&lt;li&gt;Wallet debit atomic with order creation on &lt;code&gt;complete_checkout&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Balance surfaced in checkout response so the agent knows coverage&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What broke along the way
&lt;/h2&gt;

&lt;p&gt;We’d love to say this worked first try. It didn’t. Over 24hrs of debugging with Almin from &lt;a href="https://zologic.nl/ucpready/" rel="noopener noreferrer"&gt;Zologic&lt;/a&gt;, we hit and fixed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wrong MCP endpoint&lt;/strong&gt; — our Shopify storefront probe was overriding the manifest endpoint, so OAuth tokens were stored against &lt;code&gt;/api/mcp&lt;/code&gt; but MCP calls went to &lt;code&gt;/wp-json/ucpready/v1/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stale OAuth sessions&lt;/strong&gt; — merchant-side revocation wasn’t detected; we had to add token validation on connect and auto-clear on 401&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model stringifying meta&lt;/strong&gt; — Claude kept sending &lt;code&gt;meta: "{\\"idempotency-key\\": \\"...\\"}"&lt;/code&gt; instead of a proper object. We fixed it by auto-injecting the key at the orchestrator level&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wallet instrument format&lt;/strong&gt; — the merchant’s validator checked for dots in handler names; &lt;code&gt;terrawallet-1&lt;/code&gt; (the instrument ID) failed the check while &lt;code&gt;com.terrawallet.store_credit&lt;/code&gt; (the handler name) passed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these was a real bug that blocked a real purchase attempt. The session data captured every failure, which is exactly what &lt;a href="https://ucpchecker.com/blog/why-we-built-ucp-playground" rel="noopener noreferrer"&gt;UCP Playground is built for&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why protocol matters
&lt;/h2&gt;

&lt;p&gt;Everything we built is protocol-level, not store-specific:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OIDC discovery works for any merchant declaring an issuer&lt;/li&gt;
&lt;li&gt;Bearer token injection works for any MCP endpoint with OAuth tokens&lt;/li&gt;
&lt;li&gt;Checkout nudge fires for any store returning &lt;code&gt;requires_buyer_input&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Payment handler passthrough works for any instrument the merchant advertises&lt;/li&gt;
&lt;li&gt;Idempotency key injection works for any &lt;code&gt;complete_checkout&lt;/code&gt; / &lt;code&gt;cancel_checkout&lt;/code&gt; call&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same Playground code that completed this WooCommerce wallet checkout handles Shopify’s &lt;code&gt;update_cart&lt;/code&gt;, classified listings, and B2B procurement flows. The protocol is the abstraction — the store plugs in whatever it supports.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;This was a single-item purchase with a pre-funded wallet and a known merchant. The conditions were controlled — one product, one payment method, one confirmation. The next milestone is multi-item cart in fully autonomous mode: multiple products, multiple decisions, no human in the loop.&lt;/p&gt;

&lt;p&gt;That’s where orchestration, spend limits, and merchant trust become non-optional. An agent selecting three items across two stores, choosing between wallet and saved card, applying a shipping preference — every one of those decisions needs a policy layer that doesn’t exist yet.&lt;/p&gt;

&lt;p&gt;The protocol works. Now it needs guardrails.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Replay the session:&lt;/strong&gt; &lt;a href="https://ucpplayground.com/s/01KMJ26KVH7ZZ78DWMHZ5BRK32" rel="noopener noreferrer"&gt;ucpplayground.com/s/01KMJ26KVH7ZZ78DWMHZ5BRK32&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run your own:&lt;/strong&gt; &lt;a href="https://ucpplayground.com/agent" rel="noopener noreferrer"&gt;ucpplayground.com/agent&lt;/a&gt; — connect to any UCP-compatible store&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check your store:&lt;/strong&gt; &lt;a href="https://ucpchecker.com/check" rel="noopener noreferrer"&gt;ucpchecker.com/check&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate your manifest:&lt;/strong&gt; &lt;a href="https://ucpchecker.com/ucp-validator" rel="noopener noreferrer"&gt;UCP Validator&lt;/a&gt; — paste your JSON and check spec compliance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor your store:&lt;/strong&gt; &lt;a href="https://ucpchecker.com/alerts" rel="noopener noreferrer"&gt;UCP Alerts&lt;/a&gt; — get notified when your manifest changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browse verified merchants:&lt;/strong&gt; &lt;a href="https://ucpchecker.com/directory" rel="noopener noreferrer"&gt;Directory&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read Almin’s perspective:&lt;/strong&gt; &lt;a href="https://dev.to/zologic/woocommerce-just-did-what-shopify-did-hours-later-open-protocol-full-autonomous-purchase-58ef"&gt;WooCommerce Just Did What Shopify Did — Hours Later&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://ucpplayground.com/s/01KMJ26KVH7ZZ78DWMHZ5BRK32" rel="noopener noreferrer"&gt;Session replay: 01KMJ26KVH7ZZ78DWMHZ5BRK32&lt;/a&gt; — UCP Playground&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://zologic.nl/ucpready/" rel="noopener noreferrer"&gt;UCPReady Plugin for WooCommerce&lt;/a&gt; — Zologic&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/ucp-identity-linking-agentic-commerce" rel="noopener noreferrer"&gt;UCP Now Supports Identity Linking&lt;/a&gt; — UCP Checker Blog&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/why-we-built-ucp-playground" rel="noopener noreferrer"&gt;Why We Built UCP Playground&lt;/a&gt; — UCP Checker Blog&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/state-of-agentic-commerce-march-2026" rel="noopener noreferrer"&gt;State of Agentic Commerce — March 2026&lt;/a&gt; — UCP Checker Blog&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucp.dev/" rel="noopener noreferrer"&gt;UCP Specification&lt;/a&gt; — ucp.dev&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/zologic/woocommerce-just-did-what-shopify-did-hours-later-open-protocol-full-autonomous-purchase-58ef"&gt;WooCommerce Just Did What Shopify Did — Hours Later&lt;/a&gt; — Almin Zolotic, dev.to&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ucpplayground.com/changelog" rel="noopener noreferrer"&gt;UCP Playground Changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built with &lt;a href="https://ucpplayground.com" rel="noopener noreferrer"&gt;UCP Playground&lt;/a&gt;. Session data captured, replayed, and shared — because observability is the foundation of trust in agent commerce.&lt;/p&gt;

</description>
      <category>ecommerce</category>
      <category>webdev</category>
      <category>ai</category>
      <category>ucp</category>
    </item>
    <item>
      <title>3,000 UCP Stores, Open Data: Why We're Publishing Our Dataset on Hugging Face</title>
      <dc:creator>Benji Fisher</dc:creator>
      <pubDate>Fri, 03 Apr 2026 12:54:26 +0000</pubDate>
      <link>https://dev.to/benjifisher/3000-ucp-stores-open-data-why-were-publishing-our-dataset-on-hugging-face-45gl</link>
      <guid>https://dev.to/benjifisher/3000-ucp-stores-open-data-why-were-publishing-our-dataset-on-hugging-face-45gl</guid>
      <description>&lt;p&gt;We've been crawling UCP manifests since January. For the first few months, the data lived in our own database — feeding the directory, powering the grades, tracking adoption week by week. We published summaries in our monthly state-of-the-ecosystem posts, but the raw dataset stayed internal. There wasn't much to share when the corpus was a few hundred stores.&lt;br&gt;
That changed. We crossed 3,000 verified UCP merchants this week. And when you're sitting on a dataset that didn't exist six months ago, that no one else has, and that the people building agentic commerce tools would genuinely benefit from — it's time to share it.&lt;br&gt;
Today we're publishing the &lt;a href="https://huggingface.co/datasets/UCPChecker/ucp-merchants" rel="noopener noreferrer"&gt;UCPChecker merchant dataset on Hugging Face&lt;/a&gt;. Monthly snapshots, CC-BY 4.0 licensed, free to download, free to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in the dataset
&lt;/h2&gt;

&lt;p&gt;Every row is a verified UCP merchant — a domain where we've confirmed a valid UCP manifest exists at &lt;code&gt;/.well-known/ucp&lt;/code&gt;, the manifest passes spec validation, and the store has at minimum a working search capability.&lt;br&gt;
For each merchant you get the domain, verification status, UCP endpoint URL, HTTP status, the spec version the store is advertising, five boolean capability flags (checkout, cart management, identity linking, order, payment token), a capability count, the AI bot policies the store declares, the transports it supports (MCP, REST, embedded), and two timestamps: when we last checked it and when we last got a successful response.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fucpchecker.s3.eu-west-1.amazonaws.com%2Fblog%2Fhugging-face%2F01-dataset-columns.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fucpchecker.s3.eu-west-1.amazonaws.com%2Fblog%2Fhugging-face%2F01-dataset-columns.webp" alt="UCPChecker Dataset Schema — 15 columns grouped by category: Identity, Protocol, Capabilities, Ecosystem, and Timestamps" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;span&gt;Dataset Schema — 15 columns — &lt;a href="https://ucpchecker.com/blog/3000-ucp-stores-open-data-hugging-face-dataset" rel="noopener noreferrer"&gt;UCP Checker&lt;/a&gt;&lt;/span&gt;
&lt;span&gt;
&lt;a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fucpchecker.com%2Fblog%2F3000-ucp-stores-open-data-hugging-face-dataset&amp;amp;text=Dataset+Schema+%E2%80%94+15+columns+via+%40ucpchecker" rel="noopener noreferrer"&gt;Share&lt;/a&gt;
&lt;a&gt;Embed&lt;/a&gt;
&lt;/span&gt;




&lt;p&gt;That last column matters more than it looks. &lt;strong&gt;"First seen" is when this store became agent-ready.&lt;/strong&gt; It's a timestamp on a real industry transition.&lt;br&gt;
The snapshot releasing alongside this post covers the full corpus — 3,000+ stores across every platform we've indexed, from the Shopify majority to the handful of independent WooCommerce and Magento implementations that have been painstakingly hand-configured.&lt;/p&gt;

&lt;p&gt;This is the directory layer — the foundation. &lt;strong&gt;If you need more&lt;/strong&gt; — deeper analytics, operational data, or enterprise-level insight — &lt;a href="https://ucpchecker.com/contact" rel="noopener noreferrer"&gt;get in touch&lt;/a&gt;. We work with teams building on top of the ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're a merchant&lt;/strong&gt; and your store isn't in the dataset, check whether your &lt;code&gt;/.well-known/ucp&lt;/code&gt; manifest is live and valid at &lt;a href="https://ucpchecker.com" rel="noopener noreferrer"&gt;ucpchecker.com&lt;/a&gt;. Once you're verified, you'll appear in the next monthly snapshot automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can build with it
&lt;/h2&gt;

&lt;p&gt;The obvious use case is research. If you're writing about agentic commerce — for a conference talk, an analyst report, a blog post — you now have a citable, versioned dataset instead of a hand-waved "thousands of stores." Download the CSV, run your own analysis, publish your own findings. We'll keep releasing monthly snapshots so your comparisons have a time axis.&lt;br&gt;
The less obvious use case is tooling. If you're building a commerce agent, an MCP client, or anything that needs to discover agent-ready stores, this dataset is your starting index. You don't need to crawl from scratch. Every domain in the file has a working UCP manifest right now. Point your agent at any of them and it will find something to buy.&lt;br&gt;
There's also benchmark utility. We've built our own benchmark tooling on top of this corpus — the &lt;a href="https://ucpchecker.com/leaderboard" rel="noopener noreferrer"&gt;leaderboard&lt;/a&gt; compares how AI models perform across real stores — but the underlying merchant list is the same one we're publishing. If you want to run your own evals against a representative cross-section of real UCP commerce, this is the store list to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in the open dataset
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fucpchecker.s3.eu-west-1.amazonaws.com%2Fblog%2Fhugging-face%2F03-open-vs-proprietary.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fucpchecker.s3.eu-west-1.amazonaws.com%2Fblog%2Fhugging-face%2F03-open-vs-proprietary.webp" alt="UCPChecker Open UCP Merchant Dataset — fields included in the free CC-BY 4.0 dataset: domain, status, capabilities, version, transports, ai_bot_policies, and timestamps" width="800" height="725"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;span&gt;Open Dataset — CC-BY 4.0 — &lt;a href="https://ucpchecker.com/blog/3000-ucp-stores-open-data-hugging-face-dataset" rel="noopener noreferrer"&gt;UCP Checker&lt;/a&gt;&lt;/span&gt;
&lt;span&gt;
&lt;a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fucpchecker.com%2Fblog%2F3000-ucp-stores-open-data-hugging-face-dataset&amp;amp;text=Open+UCP+Merchant+Dataset+via+%40ucpchecker" rel="noopener noreferrer"&gt;Share&lt;/a&gt;
&lt;a&gt;Embed&lt;/a&gt;
&lt;/span&gt;




&lt;h2&gt;
  
  
  Why publish it
&lt;/h2&gt;

&lt;p&gt;The ecosystem needs a shared baseline. Right now the people building agentic commerce tools — developers, agent frameworks, platforms — are all working from anecdotal evidence about which stores support what. That slows everyone down.&lt;br&gt;
A public, versioned dataset fixes that. Researchers can cite real numbers instead of guessing. Developers can seed their agents with verified stores instead of crawling from scratch. Platforms can benchmark themselves against the field. The whole ecosystem moves faster when there's a common reference point, and we're in the best position to provide one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the data shows
&lt;/h2&gt;

&lt;p&gt;Since we're talking about a dataset, it's worth saying what we actually see in it. The corpus grew fast — from a standing start in January to over 3,000 verified merchants by mid-March.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fucpchecker.s3.eu-west-1.amazonaws.com%2Fblog%2Fhugging-face%2F04-growth-timeline.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fucpchecker.s3.eu-west-1.amazonaws.com%2Fblog%2Fhugging-face%2F04-growth-timeline.webp" alt="UCPChecker Dataset Growth Timeline — January 2026 crawling begins (445 domains), February 1000+ stores, March 3000+ stores and first Hugging Face release, April+ monthly snapshots" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;span&gt;Dataset Growth — January to March 2026 — &lt;a href="https://ucpchecker.com/blog/3000-ucp-stores-open-data-hugging-face-dataset" rel="noopener noreferrer"&gt;UCP Checker&lt;/a&gt;&lt;/span&gt;
&lt;span&gt;
&lt;a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fucpchecker.com%2Fblog%2F3000-ucp-stores-open-data-hugging-face-dataset&amp;amp;text=Dataset+Growth+%E2%80%94+January+to+March+2026+via+%40ucpchecker" rel="noopener noreferrer"&gt;Share&lt;/a&gt;
&lt;a&gt;Embed&lt;/a&gt;
&lt;/span&gt;




&lt;p&gt;&lt;strong&gt;Version convergence is essentially complete.&lt;/strong&gt; 99.8% of stores in the dataset are advertising spec version &lt;code&gt;2026-01-23&lt;/code&gt;. The ecosystem standardized on this version fast — faster than most protocol adoptions we've observed. That's partly Shopify's influence (when Shopify ships a version, 898 stores update in lockstep) but it also reflects that UCP adopters are, by selection, developers who care about spec compliance.&lt;br&gt;
&lt;strong&gt;The capability gap is stark.&lt;/strong&gt; Checkout is nearly universal — 99.96% of verified merchants declare it. But look one capability past that and the numbers collapse. Cart operations drop to 0.07%. Identity linking is at 0.07%. Payment token support is at 0%. The protocol has the capability definitions. The stores mostly haven't implemented them yet.&lt;br&gt;
This is the part of the dataset we expect to move the most over the coming months. As Playground and other agent testing tools give developers concrete evidence that capability depth improves conversion, those numbers will shift. The baseline we're publishing now is a before picture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fucpchecker.s3.eu-west-1.amazonaws.com%2Fblog%2Fhugging-face%2F02-capability-cliff.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fucpchecker.s3.eu-west-1.amazonaws.com%2Fblog%2Fhugging-face%2F02-capability-cliff.webp" alt="UCPChecker Capability Adoption Cliff — bar chart showing Checkout at 99.96% and Order at 99.7% versus Cart Management at 0.07%, Identity Linking at 0.07%, and Payment Token at 0%" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;span&gt;Capability Adoption Cliff — 3,000+ UCP stores — &lt;a href="https://ucpchecker.com/blog/3000-ucp-stores-open-data-hugging-face-dataset" rel="noopener noreferrer"&gt;UCP Checker&lt;/a&gt;&lt;/span&gt;
&lt;span&gt;
&lt;a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fucpchecker.com%2Fblog%2F3000-ucp-stores-open-data-hugging-face-dataset&amp;amp;text=Capability+Adoption+Cliff+%E2%80%94+3%2C000%2B+UCP+stores+via+%40ucpchecker" rel="noopener noreferrer"&gt;Share&lt;/a&gt;
&lt;a&gt;Embed&lt;/a&gt;
&lt;/span&gt;




&lt;p&gt;&lt;strong&gt;The platform breakdown tells a familiar story.&lt;/strong&gt; Shopify accounts for 898 of the identified stores. Generic (unidentified platform) accounts for 285. The long tail of WooCommerce, Magento, BigCommerce, and custom implementations is real but small compared to the Shopify bloc. This is consistent with what we've &lt;a href="https://ucpchecker.com/blog/state-of-agentic-commerce-march-2026" rel="noopener noreferrer"&gt;written about before&lt;/a&gt; — Shopify's platform-level default made UCP table-stakes for their merchants overnight. Everyone else is still climbing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Go use it
&lt;/h2&gt;

&lt;p&gt;The dataset is at &lt;a href="https://huggingface.co/datasets/UCPChecker/ucp-merchants" rel="noopener noreferrer"&gt;huggingface.co/datasets/UCPChecker/ucp-merchants&lt;/a&gt;. Download the CSV, run a notebook, build a tool, write a paper. The license is CC-BY 4.0 — use it for anything, just say where it came from.&lt;br&gt;
We'll cut a new snapshot on the first of each month. If you're tracking adoption over time, watch the Hugging Face page for updates.&lt;br&gt;
If you build something with it — an agent, an analysis, a visualization, a benchmark — we'd genuinely like to know. If you find gaps in the data or coverage you'd expect that isn't there, tell us. And if the base layer isn't enough and you need deeper data for your team, &lt;a href="https://ucpchecker.com/contact" rel="noopener noreferrer"&gt;reach out&lt;/a&gt;. That conversation is one we want to have.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Download the dataset:&lt;/strong&gt; &lt;a href="https://huggingface.co/datasets/UCPChecker/ucp-merchants" rel="noopener noreferrer"&gt;huggingface.co/datasets/UCPChecker/ucp-merchants&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check your store:&lt;/strong&gt; &lt;a href="https://ucpchecker.com" rel="noopener noreferrer"&gt;ucpchecker.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browse the full directory:&lt;/strong&gt; &lt;a href="https://ucpchecker.com/directory" rel="noopener noreferrer"&gt;ucpchecker.com/directory&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Track adoption live:&lt;/strong&gt; &lt;a href="https://ucpchecker.com/stats" rel="noopener noreferrer"&gt;ucpchecker.com/stats&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ecommerce</category>
      <category>webdev</category>
      <category>ai</category>
      <category>ucp</category>
    </item>
    <item>
      <title>The BigCommerce UCP Guide: The Sleeping Giant of API-First Agent Commerce</title>
      <dc:creator>Benji Fisher</dc:creator>
      <pubDate>Thu, 02 Apr 2026 09:07:14 +0000</pubDate>
      <link>https://dev.to/benjifisher/the-bigcommerce-ucp-guide-the-sleeping-giant-of-api-first-agent-commerce-nf3</link>
      <guid>https://dev.to/benjifisher/the-bigcommerce-ucp-guide-the-sleeping-giant-of-api-first-agent-commerce-nf3</guid>
      <description>&lt;p&gt;BigCommerce has very limited UCP adoption in our monitoring dataset — we’ve verified just 2 BigCommerce stores with live UCP implementations, representing under 0.1% of the 2,826 verified UCP merchants we track. The platform’s API-first architecture suggests it should produce clean UCP implementations, and the stores we’ve validated bear that out. With such a small sample, this guide is as much an analysis of what BigCommerce’s architecture makes possible as it is a report on observed data.&lt;/p&gt;

&lt;p&gt;That's not accidental. BigCommerce has invested heavily in its API layer and headless commerce capabilities for years. When UCP arrived, the plumbing was already there. Merchants and developers who understand BigCommerce's architecture tend to implement UCP correctly because they're already thinking in terms of APIs, channels, and structured data.&lt;/p&gt;

&lt;p&gt;The failure patterns in BigCommerce UCP implementations aren’t random. They cluster tightly around three areas: GraphQL token lifecycle management, channel routing misconfiguration, and headless deployments where the manifest is served from the wrong origin. Know those three failure modes and you’ve covered the most likely production issues.&lt;/p&gt;

&lt;p&gt;This guide covers what BigCommerce provides natively, what the manifests actually look like across our monitored stores, where things break, and what it takes to configure your store for reliable AI agent commerce.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frfpn7xoh0cc1h7hzbfrd.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frfpn7xoh0cc1h7hzbfrd.webp" alt="BigCommerce UCP Architecture — channel-aware platform with GraphQL/REST API and multi-storefront support" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What BigCommerce Provides
&lt;/h2&gt;

&lt;p&gt;BigCommerce does not ship native UCP support the way Shopify does. There is no first-party UCP toggle in the control panel. Instead, UCP is delivered through BigCommerce's App Marketplace — merchants install a UCP connector app that integrates with the platform's existing API surface.&lt;/p&gt;

&lt;p&gt;This is architecturally different from Shopify's approach, and the difference matters. Because BigCommerce's REST and GraphQL APIs are already well-documented and production-ready, the connector app has a solid foundation to build on. The Storefront GraphQL API handles product discovery and variant resolution. The Management REST API handles order data and store configuration. The MCP transport layer sits on top of both.&lt;/p&gt;

&lt;p&gt;Out of the box, a properly installed BigCommerce UCP connector exposes the same core MCP capabilities as Shopify: &lt;strong&gt;Checkout&lt;/strong&gt; (cart management using the Server-to-Server Cart API) and &lt;strong&gt;Orders&lt;/strong&gt; (order status via the V2 and V3 Management APIs). Catalog browsing is part of the UCP spec but is currently in draft status. The quality of each capability depends on which API version the connector uses and whether the relevant API scopes were granted during installation.&lt;/p&gt;

&lt;p&gt;BigCommerce's &lt;strong&gt;channel-aware architecture&lt;/strong&gt; is the defining structural characteristic for UCP. Every sales surface in BigCommerce — storefronts, POS, marketplaces, headless frontends — is a channel. Agent commerce is treated as its own channel, which is the correct abstraction. This means a well-configured BigCommerce store can route agent requests to a dedicated channel with its own pricing, catalog visibility, and checkout configuration, completely separate from the standard storefront.&lt;/p&gt;

&lt;p&gt;The manifest at &lt;code&gt;/.well-known/ucp&lt;/code&gt; is served through BigCommerce's custom pages feature or injected via the Script Manager, depending on how the connector app was configured. Both approaches work. The Script Manager approach is more common in practice and generally more reliable across theme updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Manifest: What We See Across Monitored BigCommerce Stores
&lt;/h2&gt;

&lt;p&gt;BigCommerce manifests are among the more consistently structured in our dataset. The connector app handles manifest generation, and its output is predictable — which makes deviations easier to spot when they occur.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;protocol version&lt;/strong&gt; declaration is generally current on BigCommerce stores that installed the connector recently. The risk window is stores that have been running UCP for more than a few months without updating the connector app. BigCommerce's App Marketplace doesn't enforce automatic updates, so stores on older connector versions can fall behind the current protocol specification.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;capabilities array&lt;/strong&gt; on a well-configured BigCommerce manifest should include &lt;code&gt;dev.ucp.shopping.checkout&lt;/code&gt;, &lt;code&gt;dev.ucp.shopping.discount&lt;/code&gt;, and &lt;code&gt;dev.ucp.shopping.fulfillment&lt;/code&gt; at minimum. Stores using BigCommerce's B2B Edition — which adds company accounts, price lists, and purchase orders — should also declare B2B capabilities, but many don't. B2B Edition stores often have manifests that undersell their capabilities, causing agents to fall back to simpler B2C workflows on stores that could support negotiated pricing and purchase order flows.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;transport configuration&lt;/strong&gt; is where BigCommerce manifests diverge most from Shopify. Shopify manifests reliably declare a single MCP endpoint. BigCommerce manifests can declare multiple transport paths depending on how the connector app routes different request types — some using the REST API, some using the GraphQL Storefront API. This is fine when it's intentional and correctly declared. It becomes a problem when the GraphQL transport endpoint carries an access token that's embedded in the manifest and subject to expiration.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;payment handlers&lt;/strong&gt; section reflects BigCommerce's broad payment ecosystem. Native support for PayPal, Stripe, Braintree, Square, Adyen, Amazon Pay, and dozens of regional gateways means a well-configured manifest has a rich payment section. When merchants add or remove payment providers without triggering a manifest re-sync, the payment section silently drifts from reality — one of the most common issues we flag on BigCommerce stores.&lt;/p&gt;

&lt;p&gt;For stores using &lt;strong&gt;Multi-Storefront (MSF)&lt;/strong&gt;, each storefront can and should have its own manifest. A BigCommerce instance running three storefronts — say, a retail brand, a B2B portal, and a regional market — needs three distinct UCP configurations. A common MSF mistake is having only the primary storefront with a current manifest, while secondary storefronts are either missing UCP entirely or serving a manifest copied from the primary with incorrect endpoint URLs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Common Manifest Issues We Flag
&lt;/h3&gt;

&lt;p&gt;The most common issues we’ve identified in BigCommerce UCP configurations are: &lt;strong&gt;expired GraphQL Storefront API tokens&lt;/strong&gt; embedded in manifest transport declarations (the token was valid at install time but rotates on a schedule the connector app doesn't handle automatically), &lt;strong&gt;stale payment declarations&lt;/strong&gt; after provider changes, &lt;strong&gt;MSF storefronts with missing or misrouted manifests&lt;/strong&gt;, &lt;strong&gt;headless deployments where the manifest origin doesn't match the storefront domain&lt;/strong&gt;, and &lt;strong&gt;undersized capabilities arrays on B2B Edition stores&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The GraphQL token issue deserves special mention because it's the failure mode most likely to affect you without warning. The token appears valid when the manifest is fetched — the JSON is well-formed, the endpoint URL resolves — but when an agent attempts a product search using the declared GraphQL transport, the 401 response is silent from the manifest's perspective. Monitoring tools that only check the manifest structure won't catch it. UCP Checker's runtime checks do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Runtime Performance: Competitive With Shopify, Architecture-Dependent
&lt;/h2&gt;

&lt;p&gt;BigCommerce is a managed SaaS platform, which means its baseline performance profile is comparable to Shopify — and significantly more consistent than self-hosted platforms like Magento or WooCommerce on variable hosting.&lt;/p&gt;

&lt;p&gt;Across the 2 BigCommerce stores in our dataset, MCP tool call response times were 729ms and 894ms — significantly slower than Shopify’s median of 146ms. Our sample is too small to draw strong conclusions about the platform’s typical performance range, but both stores run on managed SaaS infrastructure, so the 729–894ms range likely reflects the overhead of BigCommerce’s API routing architecture. The GraphQL Storefront API is generally faster for product discovery, while REST-backed operations like checkout and order management tend to add additional latency.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5u20i8bani3j74fd2212.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5u20i8bani3j74fd2212.webp" alt="BigCommerce MCP response times — GraphQL vs REST API comparison across operations" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Headless BigCommerce deployments — those using Next.js, Gatsby, or other frontend frameworks decoupled from the Stencil theme engine — add a layer of variability. The performance of the decoupled frontend itself doesn't affect MCP response times directly, but it can affect manifest availability and origin resolution. Headless stores that serve the manifest from the frontend origin rather than the BigCommerce-managed origin sometimes get different caching behavior than expected.&lt;/p&gt;

&lt;p&gt;Tool availability on well-configured BigCommerce stores is high. When we run &lt;code&gt;tools/list&lt;/code&gt; against stores with current connector versions and valid API tokens, the core tools are available. The failure mode is specifically those stores with expired GraphQL tokens — they pass manifest validation but fail tool availability checks at runtime.&lt;/p&gt;

&lt;p&gt;Checkout completion rates on BigCommerce are competitive, with one important caveat: stores using BigCommerce's Optimized One-Page Checkout (OPC) with custom modifications introduce the same class of problems we see on WooCommerce stores with heavily-modified checkout pages. Standard OPC configurations work correctly with agent checkouts. Custom fields added via checkout scripts can break the automated flow if they're configured as required inputs with JavaScript validation that the MCP checkout tool can't satisfy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration Checklist
&lt;/h2&gt;

&lt;p&gt;Based on our monitoring data, here are the five steps that separate BigCommerce stores that perform reliably in agent sessions from stores that pass the basic check but fail in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First, install the UCP connector app and complete the full API scope grant.&lt;/strong&gt; Partial installations — where the connector was authorized with a reduced API scope to limit access — are a consistent source of checkout and order tool failures. The connector needs read/write access to carts, checkouts, and orders. Restrictive scope grants will produce a valid manifest with tools that silently fail on specific operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second, check your GraphQL Storefront API token lifecycle.&lt;/strong&gt; If your UCP connector uses an embedded GraphQL token in the manifest transport declaration, find out how that token is rotated and whether the connector handles rotation automatically. If it doesn't, set a calendar reminder to re-authorize the connector before the token expires. Then run a check at &lt;a href="https://ucpchecker.com/check" rel="noopener noreferrer"&gt;ucpchecker.com/check&lt;/a&gt; immediately after rotation to confirm the new token is correctly propagated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third, if you're running Multi-Storefront, configure UCP on each storefront independently.&lt;/strong&gt; Don't copy the primary manifest to secondary storefronts and assume it will work. Each storefront has its own channel ID, its own API endpoints, and potentially its own payment configuration. The manifest for each storefront needs to reflect its specific channel context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fourth, test checkout completion on your specific configuration.&lt;/strong&gt; Run a real agent session from product discovery through to order confirmation. If you have custom checkout scripts, loyalty integrations, or B2B pricing logic, test explicitly with those active. The standard manifest check won't catch checkout-layer failures — only a real session will.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fifth, set up &lt;a href="https://ucpchecker.com/alerts" rel="noopener noreferrer"&gt;UCP Alerts&lt;/a&gt;.&lt;/strong&gt; BigCommerce connector app updates, payment provider changes, and API credential rotations can all silently modify your manifest or break your transport. Alerts give you visibility when something changes so you can investigate before agents encounter the failure in a live session.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-Storefront and Channel Considerations
&lt;/h2&gt;

&lt;p&gt;BigCommerce's Multi-Storefront feature is architecturally similar to Magento's multi-store capability in its complexity, but delivered in a managed SaaS context that removes most of the infrastructure headaches. What remains is the configuration challenge: each storefront is an independent UCP surface that needs its own manifest, its own API scope grants, and its own channel routing configuration.&lt;/p&gt;

&lt;p&gt;Channel routing is the core concept to understand. In BigCommerce's architecture, every request is associated with a channel. The UCP connector needs to map agent requests to the correct channel — typically the storefront channel the merchant wants agent commerce to flow through. When this mapping is misconfigured, agents may receive responses scoped to the wrong storefront: incorrect catalog, incorrect pricing, incorrect currency, potentially even a test store environment.&lt;/p&gt;

&lt;p&gt;Three common channel routing failure patterns can appear in MSF deployments. The first is agents hitting the default channel rather than a configured agent commerce channel, resulting in catalog responses that include items not intended for agent-driven sales. The second is currency mismatch: a storefront configured for EUR pricing routing agent requests through a USD channel, producing pricing responses that agents accept but buyers see differently. The third is the B2B channel problem — agents authenticated as guest users being routed to a B2C channel when the merchant intended them to access B2B pricing.&lt;/p&gt;

&lt;p&gt;If you're running MSF, the right approach is to create a dedicated channel for agent commerce and configure the UCP connector to route all MCP requests through it. This gives you explicit control over what agents can see, buy, and pay — and isolates agent traffic from your standard storefront analytics so you can measure it separately.&lt;/p&gt;

&lt;p&gt;For headless BigCommerce deployments, the manifest origin question requires explicit attention. If your frontend is served from &lt;code&gt;shop.yourbrand.com&lt;/code&gt; but your BigCommerce-managed origin is &lt;code&gt;yourbrand.mybigcommerce.com&lt;/code&gt;, agents discovering your store need to find the manifest at the right domain. Typically this means the manifest should be served from the customer-facing domain, not the BigCommerce subdomain. The connector app can usually be configured to support this, but it needs to be set up deliberately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Failure Modes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxfjlswjyvk5lepfmlz0s.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxfjlswjyvk5lepfmlz0s.webp" alt="Common BigCommerce UCP failure modes — token expiry, channel misrouting, OPC conflicts, headless origin mismatch" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Four failure patterns come up repeatedly in our BigCommerce monitoring data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GraphQL Storefront API token expiration.&lt;/strong&gt; This is the most common and the most invisible. The UCP connector embeds a GraphQL access token in the manifest transport declaration at installation time. When that token expires — and all Storefront API tokens eventually expire — the manifest continues to look valid from the outside. Agents fetch it, parse the transport configuration, and attempt product queries using the embedded token. The 401 response is returned at the API layer, not the manifest layer. Manifest-only validation tools report no problem. Your store silently fails every product discovery request. The fix is to rotate the token and update the connector configuration, then verify the manifest reflects the new token. If your connector doesn't handle this automatically, you need a process to catch it before agents do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Channel routing sending agent requests to the wrong storefront.&lt;/strong&gt; This produces some of the hardest-to-diagnose failures we encounter in monitoring. The manifest is valid. The API endpoints respond correctly. Agents complete sessions and produce what look like successful checkouts. But the orders land on a different storefront than expected — a test channel, a marketplace channel, or a secondary storefront — and the fulfillment team never sees them. If your BigCommerce instance has multiple channels, explicitly configure and test the channel your UCP connector routes to. Don't assume it defaults to the right one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimized One-Page Checkout conflicts with custom scripts.&lt;/strong&gt; BigCommerce's OPC is well-suited to agent checkouts in its standard configuration. The problems arise with custom checkout scripts that add required fields — loyalty membership IDs, company account selectors for B2B stores, custom gift options — that the MCP checkout tool can't populate because they require JavaScript interaction or aren't exposed in the Server-to-Server Cart API. Agents that reach the final checkout step and encounter an unresolvable required field will abort the transaction. Audit your checkout scripts for required fields before going live with UCP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Headless deployments serving the manifest from the wrong origin.&lt;/strong&gt; Headless BigCommerce stores — those using Next.js or similar frameworks decoupled from Stencil — sometimes misconfigure which domain serves the UCP manifest. If the manifest is served from the BigCommerce-managed subdomain but agents discover the store at the custom domain, the manifest origin doesn't match the store's public identity. Some agents treat this as a trust failure and won't proceed. Ensure your manifest is served from your primary customer-facing domain and that the transport endpoint URLs in the manifest use the same domain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Product Feed Best Practices
&lt;/h2&gt;

&lt;p&gt;BigCommerce's product data model is one of the more capable in the market — native support for variants, custom fields, metafields, and the Catalog API's structured product hierarchy means there's no shortage of data to work with. The challenge is exposing it correctly through the UCP layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use metafields for agent-relevant product attributes.&lt;/strong&gt; BigCommerce's metafields API lets you attach structured key-value data to products, variants, and categories. For agent commerce, this is the right place to put attributes that matter for agent decision-making but don't fit neatly into standard product fields: care instructions, compatibility information, sizing notes, assembly requirements. Agents that can access metafield data make better recommendations and have lower clarification rates. Ensure your UCP connector is configured to expose product metafields in its Discovery tool responses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep variant complexity manageable.&lt;/strong&gt; BigCommerce supports up to 600 variants per product, which is a product management feature that becomes an agent commerce liability when used carelessly. An agent attempting to resolve a specific variant from a product with dozens of option combinations across three dimensions is doing significantly more work than one navigating a product with a clean, well-structured option set. For your highest-traffic products, audit the variant matrix for clarity — agents and humans alike navigate them better when options are logically structured.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Set accurate stock levels and availability signals.&lt;/strong&gt; BigCommerce's inventory tracking is granular and reliable when maintained. UCP agents rely on the availability signals returned by the Catalog API to make add-to-cart decisions. Products shown as in-stock that fail at checkout — because the inventory wasn't updated after a bulk sale, or because stock tracking was disabled for a product category — produce failed agent sessions and degraded trust in your store as a reliable agent commerce destination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configure multi-currency correctly per channel.&lt;/strong&gt; Unlike WooCommerce, which requires plugins for multi-currency, BigCommerce has native multi-currency support built into its channel architecture. But it requires explicit configuration per channel. If your agent commerce channel isn't configured with the correct transactional currency — the one you actually want agent purchases denominated in — you'll get currency mismatch issues at checkout. Verify this in your channel settings before enabling UCP agent traffic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured data on storefront pages.&lt;/strong&gt; For stores using Stencil themes, ensure your product pages include Schema.org Product markup. This creates a secondary discovery path for agents that discover products through web crawling before connecting via MCP. The markup should include product name, description, price with currency, availability, brand, SKU, and image URLs. BigCommerce's Stencil framework makes this straightforward to implement — and it serves double duty as structured data for traditional search engines.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Coming
&lt;/h2&gt;

&lt;p&gt;BigCommerce's API-first philosophy positions it well for the next generation of UCP capabilities. Two developments are particularly relevant to BigCommerce merchants planning their agent commerce roadmap.&lt;/p&gt;

&lt;p&gt;The first is &lt;strong&gt;B2B Edition integration with UCP&lt;/strong&gt;. BigCommerce's B2B Edition — with its company accounts, price lists, and purchase order workflows — is an underdeveloped UCP surface. Most B2B Edition stores we monitor aren't exposing their B2B capabilities through UCP at all, which means agents are interacting with them as generic B2C stores. As UCP's B2B capability declarations mature and connector apps update to support them, BigCommerce B2B Edition stores have significant upside from exposing negotiated pricing and account-aware purchasing to AI buyers.&lt;/p&gt;

&lt;p&gt;The second is &lt;strong&gt;webhook-driven manifest updates&lt;/strong&gt;. BigCommerce's webhook infrastructure is robust enough to trigger automatic manifest refreshes when catalog, pricing, or payment configuration changes. Some advanced implementations already take this approach — manifest changes propagate within minutes of a store update rather than waiting for a manual re-sync or scheduled job. This will likely become standard practice as the connector app ecosystem matures and best practices solidify.&lt;/p&gt;

&lt;p&gt;We track emerging capability adoption across all platforms through our &lt;a href="https://ucpchecker.com/stats" rel="noopener noreferrer"&gt;stats dashboard&lt;/a&gt;. The BigCommerce segment is smaller than Shopify's but its quality distribution is a useful leading indicator of what well-implemented UCP looks like in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check Your Store
&lt;/h2&gt;

&lt;p&gt;If you're running a BigCommerce store and haven't verified your UCP configuration, &lt;a href="https://ucpchecker.com/check" rel="noopener noreferrer"&gt;run a check at ucpchecker.com&lt;/a&gt;. The check validates your manifest structure, protocol version, and capabilities declaration — and our runtime checks will surface GraphQL token issues that manifest-only validators miss.&lt;/p&gt;

&lt;p&gt;If you're running Multi-Storefront, run the check against each storefront domain separately. A passing result on your primary storefront doesn't tell you anything about the configuration state of your secondary storefronts.&lt;/p&gt;

&lt;p&gt;Once you're in our directory, set up &lt;a href="https://ucpchecker.com/alerts" rel="noopener noreferrer"&gt;UCP Alerts&lt;/a&gt; so you're notified when we detect a change in your manifest. Token rotations, connector updates, and payment configuration changes can all silently modify your manifest. Catching those changes before agents encounter them is the difference between managed UCP health and discovering problems through failed sessions.&lt;/p&gt;

&lt;p&gt;And if you want to see how real AI agents experience your BigCommerce store — including whether that GraphQL token is actually working end-to-end — &lt;a href="https://ucpplayground.com/?utm_source=ucpchecker&amp;amp;utm_medium=blog&amp;amp;utm_campaign=bigcommerce-guide" rel="noopener noreferrer"&gt;UCP Playground&lt;/a&gt; lets you run live agent sessions against your store. It's the fastest way to validate that your channel routing is correct and your checkout flow completes without interruption.&lt;/p&gt;

&lt;h2&gt;
  
  
  References &amp;amp; Official Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.commerce.com/press/press-release-google-ucp/" rel="noopener noreferrer"&gt;Commerce Supports Universal Commerce Protocol&lt;/a&gt; — BigCommerce’s parent company endorses UCP at NRF (January 2026)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bigcommerce.com/blog/universal-commerce-protocol/" rel="noopener noreferrer"&gt;Universal Commerce Protocol (UCP) Explained — BigCommerce Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://investors.commerce.com/news-releases/news-release-details/commerce-supports-universal-commerce-protocol-plans-offer-buying" rel="noopener noreferrer"&gt;Commerce Investor Relations: UCP Announcement&lt;/a&gt; — Plans to offer buying directly across Google AI surfaces&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/" rel="noopener noreferrer"&gt;Google: New Tech and Tools for Retailers in an Agentic Shopping Era&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ucp.dev/" rel="noopener noreferrer"&gt;UCP Specification — ucp.dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/first-autonomous-ai-agent-purchase-ucp" rel="noopener noreferrer"&gt;The First Fully Autonomous AI Agent Purchase Through UCP&lt;/a&gt; — what an end-to-end autonomous transaction looks like in practice&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/ucp-identity-linking-agentic-commerce" rel="noopener noreferrer"&gt;UCP Now Supports Identity Linking&lt;/a&gt; — especially relevant for B2B Edition stores with company accounts and price lists&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/state-of-agentic-commerce-march-2026" rel="noopener noreferrer"&gt;The State of Agentic Commerce — March 2026&lt;/a&gt; — BigCommerce adoption data in context with the broader ecosystem&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/why-we-built-ucp-playground" rel="noopener noreferrer"&gt;Why We Built UCP Playground&lt;/a&gt; — test your BigCommerce store with real agent sessions across five models&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related Platform Guides
&lt;/h2&gt;

&lt;p&gt;Exploring UCP across other platforms? These guides cover what we’ve learned about each platform’s implementation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ucpchecker.com/blog/shopify-ucp-guide-ai-agent-commerce" rel="noopener noreferrer"&gt;The Shopify UCP Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ucpchecker.com/blog/woocommerce-ucp-guide-ai-agent-commerce" rel="noopener noreferrer"&gt;The WooCommerce UCP Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ucpchecker.com/blog/magento-adobe-commerce-ucp-guide-ai-agent-commerce" rel="noopener noreferrer"&gt;The Magento / Adobe Commerce UCP Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ecommerce</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>ucp</category>
    </item>
    <item>
      <title>The Magento UCP Guide: What Enterprise Monitoring Data Tells Us About Adobe Commerce Agent Readiness</title>
      <dc:creator>Benji Fisher</dc:creator>
      <pubDate>Wed, 01 Apr 2026 09:12:30 +0000</pubDate>
      <link>https://dev.to/benjifisher/the-magento-ucp-guide-what-enterprise-monitoring-data-tells-us-about-adobe-commerce-agent-readiness-1k6</link>
      <guid>https://dev.to/benjifisher/the-magento-ucp-guide-what-enterprise-monitoring-data-tells-us-about-adobe-commerce-agent-readiness-1k6</guid>
      <description>&lt;p&gt;As of our most recent scan across 3,235 domains, we have not verified a single Magento or Adobe Commerce store with a live UCP implementation. Magento UCP adoption is effectively zero today. That doesn’t mean it’s impossible — the platform has the technical foundation for it — but this guide is written based on technical analysis of the platform’s architecture, rather than observed monitoring data from live stores.&lt;/p&gt;

&lt;p&gt;The gap between configuration and runtime reality is what we expect will be the defining challenge of Magento UCP deployments. A Shopify store either has UCP working or it doesn’t. A Magento store — given the platform’s infrastructure complexity — can appear to have a valid manifest, pass a surface-level check, and still deliver broken agent sessions at runtime because of Varnish caching, REST API restrictions, or module interceptors modifying response payloads. This guide is written in anticipation of these deployments.&lt;/p&gt;

&lt;p&gt;This guide covers what we've learned monitoring Magento and Adobe Commerce stores: what the platform requires, what the manifests actually look like at enterprise scale, where things break, and what it takes to run reliably for AI agents. The audience here isn't a solo merchant toggling a plugin — it's the dev team that owns the platform and needs to understand what UCP compliance means in a heavily customized environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ndy1xdp75hclb11tn25.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ndy1xdp75hclb11tn25.webp" alt="Magento UCP Architecture — enterprise infrastructure stack with Varnish, REST API, and multi-store support" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Magento Requires
&lt;/h2&gt;

&lt;p&gt;Magento has no native UCP support. Unlike Shopify, which ships the Universal Commerce Agent capability as a first-party app, Magento requires a Composer-installable module that integrates with the platform's service layer. There is no admin panel toggle, no app store install, no one-click activation.&lt;/p&gt;

&lt;p&gt;The module handles three things: registering a custom controller route that serves the &lt;code&gt;/.well-known/ucp&lt;/code&gt; manifest, wiring up an MCP transport endpoint through Magento's REST API layer, and exposing catalog, cart, and checkout operations as structured MCP tools. Installing it requires Composer access, a code deployment pipeline, and a developer who understands Magento's dependency injection framework.&lt;/p&gt;

&lt;p&gt;Minimum requirement for stable compatibility is &lt;strong&gt;Magento 2.4.7&lt;/strong&gt;. Earlier versions of the 2.4.x line have known issues with the REST API authentication flow that the UCP module depends on, and anything pre-2.4 is not supported. Adobe Commerce Cloud deployments on the current managed stack are generally compatible out of the box.&lt;/p&gt;

&lt;p&gt;Beyond the module itself, your infrastructure stack determines how hard UCP implementation actually is. The full Magento production stack — PHP-FPM, MySQL or MariaDB, Elasticsearch or OpenSearch, Redis, Varnish, and optionally RabbitMQ for async processing — has multiple layers that can interfere with how the manifest is served and how MCP requests are handled. Each component needs to be explicitly configured to let UCP traffic through correctly. This is not a concern on Shopify or a basic WooCommerce stack. On Magento, it is the central implementation challenge.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Manifest: What We See Across Enterprise Monitoring
&lt;/h2&gt;

&lt;p&gt;Your UCP manifest at &lt;code&gt;/.well-known/ucp&lt;/code&gt; is the entry point for every AI agent that discovers your store. On Magento, the manifest is generated by the module and served via the custom controller route. What agents actually receive, however, depends heavily on what your infrastructure does with that request before it hits the controller — and on Magento stores, the infrastructure layer is rarely neutral.&lt;/p&gt;

&lt;p&gt;The first thing we check is whether the manifest is actually being served dynamically. In a correctly configured Magento stack, &lt;code&gt;/.well-known/ucp&lt;/code&gt; bypasses Varnish and is served directly from the application. In incorrectly configured stacks — the most common misconfiguration on this type of infrastructure — Varnish is likely to cache the response. We'll cover this in detail in the failure modes section, but the practical consequence is that manifest updates (new capabilities, key rotations, payment provider changes) don't propagate to agents until the cache expires or is manually purged.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;protocol version&lt;/strong&gt; field is likely to be more variable on Magento than on any other platform. Because there is no platform-managed update cycle, stores running the UCP module must manually update it to stay current with the specification. We’d expect a wider spread of protocol versions on Magento than on Shopify — stores that install the module and don’t maintain it will fall behind the current spec, which well-implemented agents may reject during version negotiation.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;capabilities array&lt;/strong&gt; on Magento manifests requires explicit configuration. The module does not infer capabilities from your store's installed feature set the way Shopify's app does. A store with B2B shared catalogs enabled will not automatically declare a B2B capability unless the module is configured to do so. This creates a predictable pattern: Magento manifests that are technically valid but undersell the store’s actual capabilities, causing agents to attempt simpler workflows than the store could support.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;payment handlers&lt;/strong&gt; section requires manual maintenance. When you add Adobe Payment Services, Braintree, Adyen, or any other payment extension, the UCP module does not automatically detect the change. Someone needs to update the manifest configuration. Stale payment declarations are likely to be the second most common issue after Varnish caching problems.&lt;/p&gt;

&lt;p&gt;Finally, for stores using &lt;strong&gt;multi-website or multi-store architecture&lt;/strong&gt;, each storefront needs to declare its own manifest correctly. A single Magento instance running three storefronts with different product catalogs, currencies, and payment methods has three distinct UCP configurations to maintain. We frequently see stores where the default website has a current manifest but secondary store views are serving outdated or incorrectly scoped declarations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Common Manifest Issues We Flag
&lt;/h3&gt;

&lt;p&gt;Based on the platform’s architecture, the most likely issues to encounter in a Magento UCP deployment are: &lt;strong&gt;Varnish-cached manifests&lt;/strong&gt; (the manifest was correct when deployed but changes haven't propagated because the cache was never purged), &lt;strong&gt;stale payment declarations&lt;/strong&gt; (payment methods added or removed after initial module setup without a manifest update), &lt;strong&gt;missing or expired signing keys&lt;/strong&gt; (particularly on stores that had a security audit requiring key rotation but didn't update the UCP configuration), &lt;strong&gt;undersized capabilities arrays&lt;/strong&gt; (the manifest declares fewer capabilities than the store actually supports), and &lt;strong&gt;incorrect transport URLs&lt;/strong&gt; (the MCP endpoint URL in the manifest points to a path that's been modified by a third-party security extension or WAF rewrite rule).&lt;/p&gt;

&lt;p&gt;None of these produce a hard manifest validation error. An agent will fetch the manifest, parse it, and attempt to start a session — only to encounter failures that trace back to the manifest not accurately describing the store's current state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Runtime Performance: Infrastructure-Dependent
&lt;/h2&gt;

&lt;p&gt;Magento's performance profile is fundamentally different from Shopify's. Shopify stores the infrastructure and its performance profile is relatively consistent across merchants. Magento performance is as variable as the hardware it runs on — which ranges from shared hosting running a decade-old stack to Adobe Commerce Cloud backed by managed Fastly CDN.&lt;/p&gt;

&lt;p&gt;Based on Magento’s infrastructure characteristics, we’d expect MCP tool call response times between 600ms and 1,500ms on self-hosted infrastructure — significantly slower than Shopify’s median of 146ms. For agent workflows that execute multiple sequential tool calls, this compounds: a product search → variant resolution → cart add → checkout sequence that takes well under a second on Shopify could take 8–12 seconds on a heavily customized Magento store without full-page cache warming.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgf3yxkyn0g09tiv1zy5s.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgf3yxkyn0g09tiv1zy5s.webp" alt="Magento MCP response times — self-hosted vs Adobe Commerce Cloud comparison" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adobe Commerce Cloud deployments should perform substantially better. The managed Fastly CDN layer, optimized PHP-FPM configuration, and managed Elasticsearch should reduce median response times to the 350–600ms range — considerably closer to Shopify territory. If you have the option to migrate to Commerce Cloud and runtime performance for agent sessions is a concern, the infrastructure improvements are well-established.&lt;/p&gt;

&lt;p&gt;On self-hosted Magento, the configuration decisions that most affect agent session performance are: Redis for session and full-page cache (dramatically reduces PHP processing per request), Elasticsearch or OpenSearch properly indexed and warmed (product search latency drops from 800ms+ to under 100ms), and PHP OPcache enabled and sized correctly (eliminates per-request compilation overhead). These aren't UCP-specific recommendations — they're standard Magento performance practices — but their absence is directly visible in agent session benchmarks.&lt;/p&gt;

&lt;p&gt;Tool availability is likely to vary significantly on Magento. On stores with incomplete ACL permission configurations, agents attempting to call the catalog or checkout MCP tools receive authorization errors even for unauthenticated browsing operations. On stores where a third-party security extension has rewritten API routes, the tool endpoints declared in the manifest don't respond. &lt;code&gt;tools/list&lt;/code&gt; returning a complete tool set doesn't mean those tools work — we validate this separately in our benchmark checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration Checklist
&lt;/h2&gt;

&lt;p&gt;Based on our monitoring data, here are five configuration steps that separate Magento stores that perform reliably for agent sessions from those that pass manifest validation but break at runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First, exclude &lt;code&gt;/.well-known/ucp&lt;/code&gt; from Varnish caching.&lt;/strong&gt; This is the single most impactful configuration change you can make. Add the path to your Varnish VCL exclusion list and verify the exclusion is active. The check is simple: deploy a manifest change, wait 30 seconds, and fetch the URL directly from an IP that isn't cached — if you see the old manifest, Varnish is still serving it. Our monitoring catches this automatically: if we detect a manifest change lag of more than 5 minutes between deployment and propagation, we flag the store.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second, audit your REST API ACL permissions.&lt;/strong&gt; Magento's ACL system controls which API resources are accessible to which user roles. The UCP module requires specific REST API routes to be available for anonymous or token-authenticated access depending on your configuration. After installation, explicitly verify that the MCP endpoint routes are accessible without triggering a 401 or 403. Test from an IP with no prior Magento session — stores frequently work in testing because the tester is authenticated as an admin, but fail for agents that arrive unauthenticated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third, verify your manifest at &lt;a href="https://ucpchecker.com/check" rel="noopener noreferrer"&gt;ucpchecker.com/check&lt;/a&gt;.&lt;/strong&gt; Run the check immediately after initial setup and after every deployment that touches payment configuration, API routes, or security settings. Review the capabilities and transport sections specifically. If you're running multi-website architecture, check each storefront URL independently — manifests are per-website, not per-instance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fourth, test your MCP endpoints through your WAF and CDN, not just locally.&lt;/strong&gt; The most common source of "works in staging, broken in production" issues on Magento is a WAF or CDN rule that blocks or modifies the MCP traffic. Agent requests look different from browser requests — different headers, different user-agent strings, different request patterns. Run a validation check from outside your network before declaring the implementation complete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fifth, set up &lt;a href="https://ucpchecker.com/alerts" rel="noopener noreferrer"&gt;UCP Alerts&lt;/a&gt;.&lt;/strong&gt; Magento deployments involve many moving parts — module updates, security patches, payment gateway updates, infrastructure changes. Any of these can silently alter your manifest or break your MCP endpoints. Alerts catch regressions before they compound into sustained agent session failures that affect real transactions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-Store and B2B Considerations
&lt;/h2&gt;

&lt;p&gt;Magento's multi-website and multi-store architecture is one of its defining enterprise capabilities — and one of the most significant sources of UCP complexity we see in our monitoring data. A single Magento instance can serve multiple storefronts, each with its own domain, product catalog, pricing, currency, and payment configuration. Each of those storefronts is a distinct UCP entity that requires its own manifest.&lt;/p&gt;

&lt;p&gt;The practical challenge is that Magento's multi-store architecture was designed for human shoppers navigating a browser. AI agents don't have sessions. They don't follow store-switcher UI. They access a domain, fetch the manifest, and connect via MCP. If your secondary storefronts don't have correctly configured manifests at their respective &lt;code&gt;/.well-known/ucp&lt;/code&gt; paths, agents reaching those storefronts get nothing — or get the wrong manifest if Magento defaults to the primary website's response.&lt;/p&gt;

&lt;p&gt;A common pattern to watch for: the flagship storefront has a current, valid manifest while the B2B portal on a subdomain serves a stale manifest because the dev team configured the primary instance and assumed it propagated. It doesn’t. Each store view with a distinct domain requires explicit manifest configuration and independent monitoring.&lt;/p&gt;

&lt;p&gt;B2B features add further complexity. Adobe Commerce's B2B module supports shared catalogs (different product visibility and pricing per company account), company accounts and approval workflows, and requisition lists that function as persistent carts. These capabilities aren't part of the base UCP specification — agents that encounter them need the manifest to correctly declare what B2B features are available and what they require in terms of authentication. A B2B buyer whose agent tries to add an item to a requisition list that requires company account authentication will get an authorization error with no clear indication of why.&lt;/p&gt;

&lt;p&gt;The current best practice for B2B Magento UCP implementations is to declare B2B capabilities explicitly in your manifest if they're enabled, provide clear authentication scope requirements, and test agent sessions with both unauthenticated and authenticated company account contexts. The authenticated path is often where the enterprise GMV lives — if agents can't reliably complete approved purchases through the company account flow, the UCP implementation has limited value for your actual buyer population.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Failure Modes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozl2wg2tu1m1j3shwm32.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozl2wg2tu1m1j3shwm32.webp" alt="Common Magento UCP failure modes — Varnish cache, REST ACL, DI interceptors, Elasticsearch lag" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Four failure patterns are likely to appear in Magento UCP deployments, based on the platform’s architecture and infrastructure complexity. Each is distinct from what we observe on other platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Varnish serving stale manifests.&lt;/strong&gt; This is the most predictable failure mode on Magento infrastructure and the one most likely to catch merchants off-guard. Varnish's default behavior is to cache everything it can, including responses from paths that look like static files. &lt;code&gt;/.well-known/ucp&lt;/code&gt; looks like a static resource to Varnish. Without an explicit exclusion in your VCL, every manifest update you deploy will be invisible to agents until the cached response expires — which, depending on your TTL configuration, could be hours or days. It’s entirely possible for a key rotation deployed on Monday to go unnoticed by agents until Wednesday if Varnish TTLs are measured in days. Agents encountering an expired key receive authentication failures with no indication that the manifest itself is the problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;REST API routes disabled or restricted.&lt;/strong&gt; Magento's REST API can be restricted at the module level, at the ACL level, and at the server level (by a WAF or reverse proxy rule). The UCP module uses REST as its MCP transport layer. When any of these restrictions unexpectedly blocks MCP traffic, agents receive errors that look like authentication or authorization failures — not like "the endpoint doesn't exist." Diagnosing this requires tracing the request from the agent through your full infrastructure stack, which on a heavily customized Magento deployment can involve six or more layers. The shortest path to a diagnosis is running a raw REST API call to your MCP endpoint from an external IP with no cached credentials and checking the actual HTTP response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DI interceptors silently modifying response payloads.&lt;/strong&gt; Magento's dependency injection and plugin/interceptor system allows any installed module to modify the inputs or outputs of any service class without touching the original code. This is a powerful extension mechanism for human-facing commerce features — and a significant source of unpredictable behavior for AI agents. A payment module’s interceptor can add a custom field to the checkout response payload that breaks the MCP tool’s JSON schema validation. The checkout would work fine for human shoppers because browser-side JavaScript would ignore the extra field — but the agent, expecting a strict schema, would fail. Identifying these interceptors requires code-level investigation: run &lt;code&gt;bin/magento dev:di:info&lt;/code&gt; for the service classes your MCP module uses and audit every registered plugin for potential payload modifications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elasticsearch index lag causing catalog discrepancies.&lt;/strong&gt; Magento's product search runs through Elasticsearch or OpenSearch. When you update product data — price changes, availability updates, new variants — those changes don't immediately appear in search results. They propagate through an indexing queue, which on a busy store with a large catalog can lag 15–60 minutes behind the source of truth in MySQL. An agent running product discovery through the MCP search tool may find a product at yesterday's price, add it to a cart, and then receive a different total at checkout because the MySQL price was updated in the interim. This isn't a UCP-specific problem — it's a fundamental characteristic of Magento's search architecture. The mitigation is ensuring your indexer is running on a tight schedule (&lt;code&gt;bin/magento indexer:set-mode schedule&lt;/code&gt;) and configuring realtime reindex triggers for high-velocity data like price and inventory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Product Feed Best Practices
&lt;/h2&gt;

&lt;p&gt;Magento's Extended Attribute Value (EAV) data model gives merchants fine-grained control over product attributes — more flexibility than Shopify or WooCommerce. It also means product data quality varies more widely across Magento stores than on any other platform we monitor. Custom attributes are easy to add and easy to leave half-configured. When agents try to navigate that data, the gaps show up immediately.&lt;/p&gt;

&lt;p&gt;Here's what matters for agent-readable product feeds on Magento:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configurable products need complete variant trees.&lt;/strong&gt; Magento's configurable product type is how most stores handle size/color/material combinations. Each configuration attribute needs to be properly linked to child simple products, with every variant having an explicit SKU, price, and stock status. Agents resolving a "blue size L" request need to follow the configurable → simple product tree cleanly. We see stores where variants were deleted from the admin but not delinked from the parent, leaving the MCP tool returning variant options that point to nonexistent products.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep custom attributes typed correctly.&lt;/strong&gt; EAV's flexibility means merchants add custom attributes without thinking carefully about data type. A numeric attribute stored as a varchar, a boolean attribute that contains "Yes"/"No" strings instead of 1/0, a multiselect attribute whose option values are internal IDs instead of human-readable labels — all of these create parsing problems for agents that expect structured, typed data. Audit your product attribute configuration and ensure the attributes exposed via MCP have predictable, correctly typed values.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Set &lt;code&gt;priceCurrency&lt;/code&gt; on every offer.&lt;/strong&gt; On multi-website Magento setups with multiple base currencies, this is especially important. Each store view may have its own currency and pricing tier. Agents that receive product data without explicit currency context can't reliably present pricing to buyers or compare across session contexts. Every product offer exposed through the MCP catalog tool should declare its currency explicitly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filter your MCP-facing catalog to match the public storefront.&lt;/strong&gt; Magento's attribute set and product visibility settings control what appears on the storefront. The MCP module needs to apply the same visibility filters. Disabled products, products assigned to inactive websites, and products with “Not Visible Individually” visibility settings can surface in MCP catalog responses if the module doesn’t correctly apply visibility filters. An agent that finds a product, adds it to a cart, and receives an error at checkout because the product isn't purchasable is delivering a broken session — and that store is the one the agent won't recommend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ensure Elasticsearch index freshness matches your commerce velocity.&lt;/strong&gt; If you run flash sales, daily pricing changes, or frequent inventory updates, your search index needs to reflect those changes on a timeline compatible with agent session behavior. Agents don't tolerate stale data the way human shoppers do — a shopper who sees a sale price and gets a different total at checkout might complete the purchase anyway. An agent validating totals before confirmation will abort. Run your indexers on schedule mode and monitor for queue backlog during high-traffic periods.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Images need descriptive alt text.&lt;/strong&gt; This is standard accessibility practice and equally important for agent sessions. "product-image-1.jpg" gives an agent nothing to work with. "Adobe Indigo slim-fit chino — front view — ink blue" gives it everything. On Magento, images are often managed through a bulk import process where alt text is omitted. Review your image metadata, particularly for high-velocity product categories where agents are most likely to be doing visual confirmation before adding to cart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured data on product pages matters for discovery.&lt;/strong&gt; Agents that discover products through web crawling before connecting via MCP rely on Schema.org Product markup on your storefront pages. Magento's default themes include some structured data but it's often incomplete or misconfigured, especially on heavily customized storefronts. Ensure your product pages include: name, description, price with currency, availability, brand, SKU, image URLs, and if you're running B2B, appropriate organization-level restrictions. This creates a discovery path that doesn't depend on the MCP module being correctly configured before an agent can find your store.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Coming
&lt;/h2&gt;

&lt;p&gt;Two developments in the UCP specification are particularly relevant for enterprise Magento deployments. The first is &lt;strong&gt;persistent cart and session handoff&lt;/strong&gt; — the ability for an agent to build a cart that a human buyer can then complete in a browser. For B2B scenarios where purchase approval is required, this is the capability that makes agentic commerce actually practical: an agent qualifies the order and builds the cart, a purchasing manager reviews and approves it, checkout completes with human authorization. Magento's existing quote management system maps well to this model.&lt;/p&gt;

&lt;p&gt;The second is &lt;strong&gt;identity linking&lt;/strong&gt; — agents authenticating as known customers and accessing account history, loyalty tiers, saved addresses, and company account context. On Adobe Commerce's B2B module, this is where the real enterprise value is. An agent that can access a company's purchase history, check requisition list contents, and complete a reorder against a negotiated catalog price is dramatically more useful than one that can only browse the public catalog. The infrastructure for this exists in Commerce today — the UCP specification is catching up to it.&lt;/p&gt;

&lt;p&gt;We track adoption of emerging capabilities through our &lt;a href="https://ucpchecker.com/stats" rel="noopener noreferrer"&gt;stats dashboard&lt;/a&gt; and publish deeper analysis in the &lt;a href="https://ucpchecker.com/blog/state-of-agentic-commerce-2026" rel="noopener noreferrer"&gt;State of Agentic Commerce&lt;/a&gt; reports. Enterprise adoption tends to lag consumer platforms by 12–18 months on new protocol features — but the GMV concentration in enterprise Magento accounts means when adoption does happen, it moves markets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check Your Store
&lt;/h2&gt;

&lt;p&gt;If you're running Magento or Adobe Commerce and haven't run a UCP check yet, &lt;a href="https://ucpchecker.com/check" rel="noopener noreferrer"&gt;start there&lt;/a&gt;. The check validates your manifest, verifies your MCP endpoints are reachable from outside your network, and surfaces the most common configuration issues. It will tell you things your internal staging environment won't, because it tests from the perspective of an agent arriving at your store cold — no cached credentials, no prior session, no whitelisted IP.&lt;/p&gt;

&lt;p&gt;If you're already in our directory, set up &lt;a href="https://ucpchecker.com/alerts" rel="noopener noreferrer"&gt;UCP Alerts&lt;/a&gt;. The failure modes that matter most on Magento — Varnish cache serving stale manifests, REST API routes unexpectedly going offline after a deployment, signing keys expiring — are invisible unless you're monitoring continuously. A valid manifest at launch doesn't stay valid indefinitely on a platform that gets as many security patches and third-party module updates as Magento does.&lt;/p&gt;

&lt;p&gt;And if you want to see how AI agents actually experience your store end-to-end — not just whether the manifest validates, but whether agents can complete product discovery, variant resolution, and checkout on your specific implementation — &lt;a href="https://ucpplayground.com/?utm_source=ucpchecker&amp;amp;utm_medium=blog&amp;amp;utm_campaign=magento-guide" rel="noopener noreferrer"&gt;UCP Playground&lt;/a&gt; runs real agent sessions against live stores. Enterprise Magento customizations create edge cases that manifest validation can't surface. Real session benchmarks find them before your buyers' agents do.&lt;/p&gt;

&lt;h2&gt;
  
  
  References &amp;amp; Official Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://business.adobe.com/blog/adobe-commerce-commits-to-agentic-commerce-standards" rel="noopener noreferrer"&gt;Adobe Commerce Commits to Agentic Commerce Standards&lt;/a&gt; — Adobe’s official commitment to UCP, ACP, and AP2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.creatuity.com/insights/adobe-commerce-catalog-optimization-ai-agent-discoverability-2026/" rel="noopener noreferrer"&gt;Adobe Commerce Catalog Optimization for AI Agent Discoverability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/" rel="noopener noreferrer"&gt;Google: New Tech and Tools for Retailers in an Agentic Shopping Era&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.googleblog.com/under-the-hood-universal-commerce-protocol-ucp/" rel="noopener noreferrer"&gt;Under the Hood: Universal Commerce Protocol — Google Developers Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ucp.dev/" rel="noopener noreferrer"&gt;UCP Specification — ucp.dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/first-autonomous-ai-agent-purchase-ucp" rel="noopener noreferrer"&gt;The First Fully Autonomous AI Agent Purchase Through UCP&lt;/a&gt; — end-to-end autonomous checkout using identity linking and wallet payment&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/ucp-identity-linking-agentic-commerce" rel="noopener noreferrer"&gt;UCP Now Supports Identity Linking&lt;/a&gt; — particularly relevant for B2B Magento deployments with company accounts and negotiated pricing&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/state-of-agentic-commerce-march-2026" rel="noopener noreferrer"&gt;The State of Agentic Commerce — March 2026&lt;/a&gt; — latest ecosystem data including enterprise adoption trends&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/how-a-browser-extension-became-our-biggest-discovery-engine" rel="noopener noreferrer"&gt;How a Browser Extension Became Our Biggest Discovery Engine&lt;/a&gt; — how we discover and monitor stores across platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related Platform Guides
&lt;/h2&gt;

&lt;p&gt;Exploring UCP across other platforms? These guides cover what we’ve learned about each platform’s implementation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ucpchecker.com/blog/shopify-ucp-guide-ai-agent-commerce" rel="noopener noreferrer"&gt;The Shopify UCP Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ucpchecker.com/blog/woocommerce-ucp-guide-ai-agent-commerce" rel="noopener noreferrer"&gt;The WooCommerce UCP Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ucpchecker.com/blog/bigcommerce-ucp-guide-ai-agent-commerce" rel="noopener noreferrer"&gt;The BigCommerce UCP Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ecommerce</category>
      <category>api</category>
      <category>tutorial</category>
      <category>ucp</category>
    </item>
    <item>
      <title>The WooCommerce UCP Guide: What Our Monitoring Data Reveals About WordPress Agent Commerce</title>
      <dc:creator>Benji Fisher</dc:creator>
      <pubDate>Tue, 31 Mar 2026 12:11:35 +0000</pubDate>
      <link>https://dev.to/benjifisher/the-woocommerce-ucp-guide-what-our-monitoring-data-reveals-about-wordpress-agent-commerce-2439</link>
      <guid>https://dev.to/benjifisher/the-woocommerce-ucp-guide-what-our-monitoring-data-reveals-about-wordpress-agent-commerce-2439</guid>
      <description>&lt;p&gt;WooCommerce UCP adoption is in its very early stages. Our current monitoring dataset includes just 3 verified WooCommerce stores — a small fraction of the broader UCP ecosystem, where Shopify accounts for over 99% of verified merchants. Even with a limited dataset, the patterns we see are consistent with what you’d expect from WordPress-based infrastructure: more configuration complexity, more hosting variability, and more ways for things to silently break.&lt;/p&gt;

&lt;p&gt;WooCommerce powers somewhere between 25% and 30% of all e-commerce stores globally, and WordPress’s plugin ecosystem means a UCP implementation can ship as a drop-in extension without Automattic needing to build it into core. That’s exactly the path adoption has started to take — but it’s early, and the infrastructure complexity means getting it right requires more deliberate effort than on managed platforms.&lt;/p&gt;

&lt;p&gt;The picture is more complicated than Shopify. WooCommerce gives merchants complete control over their UCP implementation, which means more configuration flexibility — and far more ways to misconfigure it. This guide covers what we've learned monitoring WordPress-based stores: what you need to install and configure, what the manifests actually look like across our dataset, and what breaks in production agent sessions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdfp6htpnepvzg9d96usf.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdfp6htpnepvzg9d96usf.webp" alt="WooCommerce UCP Architecture — how AI agents connect through the WordPress plugin layer" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What WooCommerce Requires (vs. What Shopify Provides Natively)
&lt;/h2&gt;

&lt;p&gt;The first thing to understand about WooCommerce UCP is that nothing is automatic. Where Shopify generates and serves a UCP manifest the moment you install the Universal Commerce Agent app, WooCommerce requires a dedicated WordPress plugin that you install, configure, and maintain separately from your store.&lt;/p&gt;

&lt;p&gt;The plugin handles three things: serving the &lt;code&gt;/.well-known/ucp&lt;/code&gt; manifest file, registering a REST API endpoint that acts as your MCP transport, and exposing your WooCommerce product catalog, cart, and checkout flows as MCP tools.&lt;/p&gt;

&lt;p&gt;The most established option we've validated in our testing is &lt;a href="https://zologic.nl/ucpready/" rel="noopener noreferrer"&gt;UCPReady by Zologic&lt;/a&gt;, which handles manifest generation, MCP transport, and automatic capability detection.&lt;/p&gt;

&lt;p&gt;The installation process is straightforward — activate the plugin, generate your manifest keys, configure your capabilities. What catches merchants is everything after that: cache invalidation, security plugin whitelisting, PHP memory allocation, and making sure your REST API is actually accessible to external agents. Each of these is a WordPress infrastructure concern, not a WooCommerce one, which means the troubleshooting surface is larger than on managed platforms.&lt;/p&gt;

&lt;p&gt;There is also no equivalent to Shopify's automatic manifest updates when your payment stack changes. On WooCommerce, if you add a new payment gateway — WooCommerce supports over 100 via extensions — your manifest doesn't automatically reflect the change. You need to resync it manually or configure the plugin to auto-regenerate on gateway change. We flag stale payment handler declarations in our monitoring data, and WooCommerce stores — given the manual update requirement — are more prone to this issue than Shopify stores.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Manifest: What We See Across Our WooCommerce Dataset
&lt;/h2&gt;

&lt;p&gt;Your UCP manifest is the JSON document at &lt;code&gt;/.well-known/ucp&lt;/code&gt; that tells AI agents what your store supports and how to connect to it. On WooCommerce, this file is generated by the plugin and cached — how it is cached, and when that cache is invalidated, is one of the most consequential decisions in your setup.&lt;/p&gt;

&lt;p&gt;The first thing we check is whether the manifest is reachable at all. A common issue on WooCommerce stores is the manifest returning a 404 or a cached HTML error page instead of valid JSON. This almost always traces to a caching plugin that has cached the &lt;code&gt;/.well-known/&lt;/code&gt; path as a static HTML page, or a security plugin that blocks direct file access to that path. Both are fixable but require explicit configuration.&lt;/p&gt;

&lt;p&gt;The second is the &lt;strong&gt;protocol version&lt;/strong&gt;. WooCommerce UCP deployments show more version fragmentation than Shopify, because plugin updates are not as seamless as platform updates. We see a meaningful share of WooCommerce stores still on &lt;code&gt;2026-01-11&lt;/code&gt;, and a small number on pre-release configurations that declare non-standard version strings. Agents with strict version negotiation will refuse to interact with these stores entirely.&lt;/p&gt;

&lt;p&gt;Third is the &lt;strong&gt;capabilities array&lt;/strong&gt;. A properly configured WooCommerce store should declare &lt;code&gt;dev.ucp.shopping.checkout&lt;/code&gt;, &lt;code&gt;dev.ucp.shopping.discovery&lt;/code&gt;, and — if configured — &lt;code&gt;dev.ucp.shopping.discount&lt;/code&gt;. The discount capability is the most variable: WooCommerce handles discounts through a combination of coupon codes, cart rules, and extension-specific logic that doesn't always map cleanly to the UCP discount model. Many stores declare it in the manifest but the actual MCP tool implementation is incomplete.&lt;/p&gt;

&lt;p&gt;Fourth is the &lt;strong&gt;transports block&lt;/strong&gt;. WooCommerce stores declare MCP over the WordPress REST API, typically at a path like &lt;code&gt;/wp-json/ucp/v1/mcp&lt;/code&gt;. This is correct, but the REST API endpoint must be explicitly whitelisted in your security configuration. We see a significant share of WooCommerce stores where the manifest correctly declares the MCP transport but the endpoint itself returns a 401 or 403 for unauthenticated requests — which is what most agent clients send for initial tool discovery.&lt;/p&gt;

&lt;h3&gt;
  
  
  Common Manifest Issues We Flag
&lt;/h3&gt;

&lt;p&gt;The most frequently flagged issues across our WooCommerce monitoring dataset: &lt;strong&gt;cached manifest serving stale content&lt;/strong&gt; (the manifest was generated before a configuration change and the cache has not been busted), &lt;strong&gt;payment handlers out of sync&lt;/strong&gt; (a gateway was added or removed without a manifest resync), &lt;strong&gt;REST API endpoint blocked&lt;/strong&gt; (a security plugin or WAF rule is returning a non-JSON response to agent requests), and &lt;strong&gt;capabilities declared but not implemented&lt;/strong&gt; (the discount tool is listed in the manifest but the endpoint returns an error when an agent calls it).&lt;/p&gt;

&lt;p&gt;None of these cause a hard failure on a basic manifest fetch. A checker that only validates whether the JSON is well-formed will pass these stores. Our checks simulate what an agent actually does — fetch the manifest, enumerate the tools, call the endpoint — which is why we catch issues that a simple validation pass misses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Runtime Performance: Hosting Matters Enormously
&lt;/h2&gt;

&lt;p&gt;This is the biggest difference between WooCommerce and Shopify from a performance standpoint: on Shopify, your store runs on Shopify's global infrastructure. On WooCommerce, your store runs on whatever you chose to host it on — and the performance range is enormous.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fze7xs0dz5xxbslp1j2mk.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fze7xs0dz5xxbslp1j2mk.webp" alt="WooCommerce MCP response times by hosting type — shared hosting vs VPS vs managed WordPress" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Across the WooCommerce stores in our dataset, MCP tool call response times ranged from 510ms to 1,593ms, with an average around 980ms — significantly slower than Shopify’s median of 146ms. Our sample is small, but this is consistent with what you’d expect from PHP-based self-hosted infrastructure. The spread in practice is likely much wider: well-configured managed WordPress hosts (WP Engine, Kinsta, Flywheel) can achieve sub-500ms response times, while stores on shared hosting with cold PHP processes can see latency well above 3 seconds.&lt;/p&gt;

&lt;p&gt;Most agent frameworks have configurable timeouts, typically defaulting between 5 and 10 seconds. A store that responds in 4 seconds most of the time will occasionally spike to 8+ seconds when the PHP process is cold or the server is under load — and those spikes cause agent session failures that look like UCP implementation errors rather than hosting issues. The manifest validates fine, but the store cannot complete a real session reliably.&lt;/p&gt;

&lt;p&gt;Specific hosting-related issues we flag frequently: &lt;strong&gt;PHP-FPM cold start latency&lt;/strong&gt; on servers where PHP processes idle between requests (common on lower-tier shared hosting); &lt;strong&gt;object cache not configured&lt;/strong&gt; (WooCommerce makes a large number of database queries per request — without Redis or Memcached, product catalog responses will be slow); and &lt;strong&gt;opcode cache absent&lt;/strong&gt; (WooCommerce's PHP footprint is substantial — OPcache is essential for acceptable performance and is missing on a surprising share of self-managed servers we monitor).&lt;/p&gt;

&lt;p&gt;If you are on shared hosting and considering WooCommerce UCP, the performance characteristics alone are likely to produce poor agent experiences. Managed WordPress hosting starts at around $25–35/month and typically delivers 5–10× better MCP response times than budget shared hosting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration Checklist
&lt;/h2&gt;

&lt;p&gt;Based on our monitoring data, here are the five configuration steps that separate WooCommerce stores that perform well in agent sessions from those that pass a manifest check but fail in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First, install and fully configure the WooCommerce UCP plugin.&lt;/strong&gt; Do not stop at activation — complete the key generation step, review the capabilities configuration, and use the plugin's built-in test to verify the manifest and MCP endpoint are both returning valid responses. Partial configurations are the most common source of manifest issues we see in WooCommerce stores.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second, whitelist the UCP manifest and MCP endpoint in your caching and security plugins.&lt;/strong&gt; Add &lt;code&gt;/.well-known/ucp&lt;/code&gt; to your caching plugin's exclusion list — agents need the current version on every request, not a cached copy. Add your MCP REST API path to your security plugin's whitelist so it returns JSON, not a block page. This step is specific to WordPress and has no equivalent in managed platform setups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third, verify your store at &lt;a href="https://ucpchecker.com/check" rel="noopener noreferrer"&gt;ucpchecker.com/check&lt;/a&gt;.&lt;/strong&gt; Run the check, but specifically look at whether the MCP endpoint is reachable and returning valid responses — not just whether the manifest JSON is well-formed. We check both, and MCP endpoint reachability failure is far more common on WooCommerce than on any other platform we monitor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fourth, configure a persistent object cache.&lt;/strong&gt; WooCommerce's database query load under agent traffic is significant — agents make tool calls in rapid succession, and without Redis or Memcached, each call triggers a full set of database queries. Most managed WordPress hosts include Redis as a one-click option; on self-managed servers, the Redis Object Cache plugin plus a running Redis server is the standard configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fifth, set up &lt;a href="https://ucpchecker.com/alerts" rel="noopener noreferrer"&gt;UCP Alerts&lt;/a&gt;.&lt;/strong&gt; Plugin updates, security plugin config changes, and WordPress core updates can all affect your UCP configuration without any explicit notification. We have seen stores where a security plugin update changed the response format on the MCP endpoint and the merchant did not know for days. Alerts catch these changes the next time we check your store.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plugin Compatibility: The WordPress Ecosystem Challenge
&lt;/h2&gt;

&lt;p&gt;WooCommerce's power comes from its plugin ecosystem — there are over 900 extensions on the WooCommerce Marketplace alone, plus thousands more on WordPress.org and third-party marketplaces. That ecosystem is also the primary source of UCP compatibility issues we see.&lt;/p&gt;

&lt;p&gt;The highest-risk category is &lt;strong&gt;security and firewall plugins&lt;/strong&gt;. Wordfence, iThemes Security, Sucuri, and similar plugins use aggressive bot-blocking rules that frequently misclassify AI agent requests. UCP agents typically identify themselves with specific user-agent strings; if your security plugin is configured to block non-browser user agents, it will block agent traffic before it ever reaches your UCP implementation. We see this as a 403 response on the MCP endpoint — the manifest is reachable, but actual agent sessions are blocked.&lt;/p&gt;

&lt;p&gt;The second category is &lt;strong&gt;caching plugins&lt;/strong&gt;. WP Super Cache, W3 Total Cache, WP Rocket, and LiteSpeed Cache all have different approaches to caching REST API responses. By default, some of them cache the MCP endpoint — which means agents receive a cached response from a previous session, including potentially stale cart or product data. Your MCP endpoint must return fresh responses on every request, which means explicitly excluding it from caching at both the plugin and server levels.&lt;/p&gt;

&lt;p&gt;Third is &lt;strong&gt;checkout customization plugins&lt;/strong&gt;. WooCommerce Checkout Field Editor, WooCommerce One Page Checkout, and similar plugins modify the checkout flow in ways the MCP checkout tool does not know about. A mandatory custom field that requires input before checkout can proceed will silently fail agent checkout attempts — the agent calls the checkout tool, server-side validation rejects it because the custom field is empty, and the response is an error the agent typically cannot resolve.&lt;/p&gt;

&lt;p&gt;Fourth, for merchants using &lt;strong&gt;multi-currency or multi-language plugins&lt;/strong&gt; (WPML, WooCommerce Multilingual, Currency Switcher), these add complexity with no equivalent on Shopify Markets. There is no standard way for a WooCommerce store to declare multi-currency support in its UCP manifest, which means agents accessing your store from different geographic contexts may get different pricing without the manifest indicating that variation exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Failure Modes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjx3cwmbxq05zwm373yxt.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjx3cwmbxq05zwm373yxt.webp" alt="Common WooCommerce UCP failure modes — cache conflicts, security blocks, PHP limits, REST API disabled" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Five failure patterns come up repeatedly across our WooCommerce monitoring data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Caching plugin serving stale MCP responses.&lt;/strong&gt; An agent requests the tools list and receives a cached response from a previous session — one that might include products now out of stock, prices that have been updated, or a cart session belonging to a different user. This is the most WooCommerce-specific failure mode we see and it is entirely a configuration issue, not a UCP implementation problem. The fix is always the same: explicitly exclude your MCP endpoint path from caching at every level (plugin, server, CDN).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security plugin blocking agent user agents.&lt;/strong&gt; The agent makes a request to the MCP endpoint and receives a 403 or a redirect to a CAPTCHA page. From the manifest perspective, everything looks fine. From the agent's perspective, the store is inaccessible. We detect this during our endpoint reachability checks. The fix requires explicitly whitelisting UCP agent user-agent strings in your security plugin's bot management configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PHP memory exhaustion on large catalogs.&lt;/strong&gt; WooCommerce stores with large catalogs (10,000+ SKUs) frequently hit PHP memory limits when the MCP discovery tool attempts to enumerate products. The default PHP memory limit on many hosts is 256MB — inadequate for large WooCommerce queries under agent access patterns. We see this as timeouts or 500 errors on the discovery tool while other tools work fine. Setting &lt;code&gt;WP_MEMORY_LIMIT&lt;/code&gt; to 512M or higher and ensuring your PHP-FPM pool has sufficient memory allocation resolves it in most cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Payment gateway plugin conflicts at checkout.&lt;/strong&gt; WooCommerce's checkout flow is highly extensible — and that extensibility means payment plugins can add hooks that interfere with the MCP checkout tool's assumptions about what happens at payment initiation. We have seen stores where a payment gateway plugin redirects to an external payment page the agent cannot follow, causing the session to terminate after cart completion but before payment. Test your specific gateway configuration explicitly with agent sessions before going live.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Variable product variant ID instability.&lt;/strong&gt; On WooCommerce, variation IDs can change when products are edited, reimported, or synced from an external system like an ERP or inventory platform. Agents that cache a variation ID for a specific product configuration may find that ID invalid the next time they try to add it to a cart, because the variation was recreated with a new ID. For stores that use bulk product management or external sync tools, this is a persistent issue. SKU-based addressing where possible, and avoiding unnecessary variation recreation, significantly improve agent session reliability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Product Feed Best Practices for WooCommerce
&lt;/h2&gt;

&lt;p&gt;WooCommerce product data quality is more variable than Shopify's because it is entirely merchant-managed. There is no platform-level enforcement of required fields, no structured data template, and no automatic format normalization. What agents see when they call the discovery tool depends entirely on how well your product catalog is maintained.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Variable products need complete, consistent attribute sets.&lt;/strong&gt; WooCommerce's variable product model lets you define any attributes you want as variation axes. But it does not enforce completeness. If some variations are missing attribute values — a color variation without a size, or a size variation with no price set — agents may discover the product but fail to add a specific variant to cart. Audit your variable products for incomplete variations before enabling UCP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom fields require explicit plugin support.&lt;/strong&gt; Many WooCommerce stores use Advanced Custom Fields (ACF), Meta Box, or WooCommerce's own custom product tabs to store additional product data. By default, none of this data is exposed through the MCP discovery tool — the UCP plugin has to explicitly include it in the MCP product response. If your products have custom fields essential for purchasing decisions (technical specifications, compatibility matrices, bulk pricing tiers), verify your UCP plugin is configured to include them in discovery responses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Set explicit currency on all prices.&lt;/strong&gt; WooCommerce's default product data model stores prices as raw numbers without currency. The currency is typically declared at the store level, but stores using multi-currency plugins may serve prices in different currencies for different contexts. Ensure your UCP plugin serializes prices with explicit currency codes — not just numeric values — in every product response. Agents guessing currency from context produce wrong price displays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stock status must be accurate and real-time.&lt;/strong&gt; WooCommerce stock management is excellent when configured correctly, but many stores have products set to "In Stock" without managing actual inventory quantities. When an agent discovers a product, adds it to cart, and then hits an out-of-stock error at checkout, the session fails. Enable proper stock quantity management and ensure your stock sync — especially if you use a third-party inventory system — is near-real-time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SKUs should be present, stable, and unique.&lt;/strong&gt; WooCommerce SKUs are optional. Many stores, especially smaller ones, do not set them. But SKUs are the most reliable way for agents to reference specific products and variations across sessions — they are more stable than variation IDs and more portable than internal WooCommerce post IDs. Setting SKUs on all products and variations, and keeping them stable across product updates, is one of the highest-leverage improvements for agent session reliability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product descriptions should be agent-parseable.&lt;/strong&gt; WooCommerce product descriptions are free-form HTML — great for human-readable storefront pages, but problematic for agents. The short description field (the excerpt) is typically what MCP discovery tools expose as the primary product description. Keep it clean, text-based, and specific to what an agent needs to understand about the product. Avoid shortcodes, embedded tables, or JavaScript-dependent content in the short description.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured data for web-crawling agents.&lt;/strong&gt; Some agents discover products through web crawling before connecting via MCP. WooCommerce stores using Yoast WooCommerce SEO or Rank Math get reasonable &lt;code&gt;schema.org/Product&lt;/code&gt; markup automatically. Verify your storefront product pages include at minimum: name, description, price with currency, availability, brand, SKU, and image. This creates a secondary discovery path for agents that do not connect via MCP directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Coming
&lt;/h2&gt;

&lt;p&gt;Two developments in the WooCommerce UCP ecosystem are worth watching in 2026.&lt;/p&gt;

&lt;p&gt;The first is &lt;strong&gt;first-party plugin support from Automattic&lt;/strong&gt;. The current WooCommerce UCP implementation is third-party. As WooCommerce's UCP install base grows, there is meaningful pressure on Automattic to build UCP support directly into WooCommerce core or develop an official first-party plugin with automatic manifest updates on gateway and catalog changes. A first-party implementation would dramatically reduce the configuration burden and plugin compatibility surface we currently see across our monitoring dataset.&lt;/p&gt;

&lt;p&gt;The second is &lt;strong&gt;better persistent identity support&lt;/strong&gt; for logged-in WooCommerce customers. The current MCP authentication model does not leverage WordPress's native user session infrastructure well — most agent sessions are unauthenticated, which means agents cannot access customer-specific pricing, loyalty balances, or saved addresses. As the UCP spec's identity linking capability matures, WooCommerce stores with rich customer profiles stand to gain significantly from authenticated agent sessions that can personalize the shopping experience.&lt;/p&gt;

&lt;p&gt;We track WooCommerce adoption trends through our &lt;a href="https://ucpchecker.com/stats" rel="noopener noreferrer"&gt;stats dashboard&lt;/a&gt; and break down platform-by-platform analysis in the &lt;a href="https://ucpchecker.com/blog/state-of-agentic-commerce-2026" rel="noopener noreferrer"&gt;State of Agentic Commerce&lt;/a&gt; reports.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check Your Store
&lt;/h2&gt;

&lt;p&gt;If you are running a WooCommerce store and have not run a UCP check yet, &lt;a href="https://ucpchecker.com/check" rel="noopener noreferrer"&gt;start here&lt;/a&gt;. The check takes about 30 seconds and covers both manifest validity and MCP endpoint reachability — the two most common failure points on WordPress-based stores.&lt;/p&gt;

&lt;p&gt;If you are already listed in our &lt;a href="https://ucpchecker.com/directory" rel="noopener noreferrer"&gt;directory&lt;/a&gt;, set up &lt;a href="https://ucpchecker.com/alerts" rel="noopener noreferrer"&gt;UCP Alerts&lt;/a&gt; so you are notified when your configuration changes. A WordPress plugin update, security plugin tweak, or caching config change can silently break your UCP implementation. Alerts catch it before an agent session fails.&lt;/p&gt;

&lt;p&gt;And if you want to see exactly how AI agents experience your WooCommerce store — variant resolution, cart building, checkout completion — &lt;a href="https://ucpplayground.com/?utm_source=ucpchecker&amp;amp;utm_medium=blog&amp;amp;utm_campaign=woocommerce-guide" rel="noopener noreferrer"&gt;UCP Playground&lt;/a&gt; runs real agent sessions against live stores. It is the fastest way to find the configuration issues that do not show up in manifest validation but break real transactions.&lt;/p&gt;

&lt;h2&gt;
  
  
  References &amp;amp; Official Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.woocommerce.com/2025/10/03/ai-agentic-commerce-in-woocommerce/" rel="noopener noreferrer"&gt;AI &amp;amp; Agentic Commerce in WooCommerce — Roadmap Insights&lt;/a&gt; — WooCommerce’s official agentic commerce vision&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.woocommerce.com/2025/10/22/woocommerce-10-3-cogs-comes-to-core-and-mcp-beta/" rel="noopener noreferrer"&gt;WooCommerce 10.3: MCP Beta Release&lt;/a&gt; — First official MCP integration for WooCommerce&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://woocommerce.com/feature-request/native-support-for-googles-universal-commerce-protocol-ucp-for-ai-agents/" rel="noopener noreferrer"&gt;Native UCP Support — WooCommerce Feature Request&lt;/a&gt; — Community request for built-in UCP&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/" rel="noopener noreferrer"&gt;Google: New Tech and Tools for Retailers in an Agentic Shopping Era&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ucp.dev/" rel="noopener noreferrer"&gt;UCP Specification — ucp.dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/first-autonomous-ai-agent-purchase-ucp" rel="noopener noreferrer"&gt;The First Fully Autonomous AI Agent Purchase Through UCP&lt;/a&gt; — completed on a WooCommerce store running the UCPReady plugin&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/ucp-identity-linking-agentic-commerce" rel="noopener noreferrer"&gt;UCP Now Supports Identity Linking&lt;/a&gt; — how authenticated agent sessions unlock customer-specific pricing and saved addresses&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/state-of-agentic-commerce-march-2026" rel="noopener noreferrer"&gt;The State of Agentic Commerce — March 2026&lt;/a&gt; — latest ecosystem data including WooCommerce adoption trends&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/why-we-built-ucp-playground" rel="noopener noreferrer"&gt;Why We Built UCP Playground&lt;/a&gt; — how we test WooCommerce stores end-to-end with real agent sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related Platform Guides
&lt;/h2&gt;

&lt;p&gt;Exploring UCP across other platforms? These guides cover what we’ve learned about each platform’s implementation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ucpchecker.com/blog/shopify-ucp-guide-ai-agent-commerce" rel="noopener noreferrer"&gt;The Shopify UCP Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ucpchecker.com/blog/magento-adobe-commerce-ucp-guide-ai-agent-commerce" rel="noopener noreferrer"&gt;The Magento / Adobe Commerce UCP Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ucpchecker.com/blog/bigcommerce-ucp-guide-ai-agent-commerce" rel="noopener noreferrer"&gt;The BigCommerce UCP Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ecommerce</category>
      <category>api</category>
      <category>tutorial</category>
      <category>ucp</category>
    </item>
    <item>
      <title>The Shopify UCP Guide: What 3,200 Monitored Domains Taught Us About AI Agent Commerce</title>
      <dc:creator>Benji Fisher</dc:creator>
      <pubDate>Mon, 30 Mar 2026 21:56:59 +0000</pubDate>
      <link>https://dev.to/benjifisher/the-shopify-ucp-guide-what-3200-monitored-domains-taught-us-about-ai-agent-commerce-l5g</link>
      <guid>https://dev.to/benjifisher/the-shopify-ucp-guide-what-3200-monitored-domains-taught-us-about-ai-agent-commerce-l5g</guid>
      <description>&lt;p&gt;Shopify accounts for the overwhelming majority of UCP adoption. Of the 2,826 verified UCP merchants in our monitoring dataset, 2,812 — over 99.5% — are on Shopify.&lt;/p&gt;

&lt;p&gt;That's not a coincidence — Shopify co-developed the Universal Commerce Protocol with Google and shipped native UCP support before most platforms had even published a roadmap. But what surprised us as we grew our monitoring dataset past 3,200 domains was how significant the gap is between "technically passes" and "performs well for AI agents in production."&lt;/p&gt;

&lt;p&gt;This guide covers everything we've learned: what Shopify gives you out of the box, what you need to configure, what breaks under real agent traffic, and how to optimize your store for the agentic commerce era.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fse3qcoi8frlsp9wovrm2.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fse3qcoi8frlsp9wovrm2.webp" alt="Shopify UCP Architecture — how AI agents connect to your store via manifest discovery, MCP server, and Shopify infrastructure" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Shopify Provides Natively
&lt;/h2&gt;

&lt;p&gt;Shopify's UCP implementation is the most complete we've seen across any platform. When you enable UCP through the Universal Commerce Agent app in the Shopify App Store, the platform automatically generates and serves your &lt;code&gt;/.well-known/ucp&lt;/code&gt; manifest without any manual configuration required.&lt;/p&gt;

&lt;p&gt;Out of the box, a properly activated Shopify store exposes two stable UCP capabilities to AI agents: &lt;strong&gt;Checkout&lt;/strong&gt; (cart management and purchase completion) and &lt;strong&gt;Orders&lt;/strong&gt; (order status and history). Every verified Shopify store in our dataset exposes both. Catalog browsing is part of the UCP spec but is currently in draft status and not yet widely deployed.&lt;/p&gt;

&lt;p&gt;The platform also exposes your store catalog through the Agentic plan, which opens Shopify Catalog as a structured data source for agents that support it. This is separate from the MCP tool layer but increasingly relevant as agent frameworks develop richer product understanding capabilities.&lt;/p&gt;

&lt;p&gt;What this means practically: if you install the Universal Commerce Agent app and your store is otherwise functional, you'll likely pass a basic UCP check within minutes. The harder work is everything that comes after.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Manifest: What We See Across 3,200 Domains
&lt;/h2&gt;

&lt;p&gt;Your UCP manifest is a structured JSON document that tells AI agents what your store supports, how to communicate with it, and what constraints to respect. Shopify generates this automatically, but the contents vary significantly across stores — and the differences matter.&lt;/p&gt;

&lt;p&gt;The first thing we look at is the &lt;strong&gt;protocol version&lt;/strong&gt;. The current specification is &lt;code&gt;2026-01-23&lt;/code&gt;, and across our dataset, the vast majority of Shopify stores are already on this version. Shopify's app update mechanism keeps active stores current — though stores that have not updated the Universal Commerce Agent app in many months may occasionally fall behind. Agents implementing strict version negotiation may refuse to interact with outdated manifests.&lt;/p&gt;

&lt;p&gt;The second is the &lt;strong&gt;capabilities array&lt;/strong&gt;. A well-configured Shopify manifest should declare at minimum &lt;code&gt;dev.ucp.shopping.checkout&lt;/code&gt; and &lt;code&gt;dev.ucp.shopping.order&lt;/code&gt; — the two capabilities present on every verified Shopify store in our dataset. Stores that have partially configured their UCP setup sometimes declare fewer capabilities than they actually support, which causes agents to skip features the store is perfectly capable of handling.&lt;/p&gt;

&lt;p&gt;Third is the &lt;strong&gt;payment handlers&lt;/strong&gt; section, which reflects your actual payment stack. Shopify populates this automatically based on your enabled payment providers, but it can become stale if you add or remove payment methods without a full UCP re-sync. We see this most often on stores that recently switched from Shopify Payments to a third-party provider, or vice versa.&lt;/p&gt;

&lt;p&gt;Finally, the &lt;strong&gt;transports&lt;/strong&gt; declaration. Shopify stores declare MCP as the primary transport, which is correct. Problems arise when stores have custom middleware or proxy configurations that intercept requests before they reach the MCP handler — the manifest says MCP is available but the actual endpoint doesn't behave as expected.&lt;/p&gt;

&lt;h3&gt;
  
  
  Common Manifest Issues We Flag
&lt;/h3&gt;

&lt;p&gt;Across our monitoring dataset, the most frequently flagged issues are: missing &lt;strong&gt;signing keys&lt;/strong&gt; (stores that enabled UCP before key rotation was standard and haven't re-synced), &lt;strong&gt;currency not declared&lt;/strong&gt; on stores using Shopify Markets (agents trying to price-compare across sessions can get inconsistent results), and &lt;strong&gt;stale capabilities&lt;/strong&gt; after payment provider changes (the manifest still lists a payment method that's no longer active).&lt;/p&gt;

&lt;p&gt;None of these will cause a hard failure on a basic UCP check — the manifest is technically valid. But they create subtle errors in production agent sessions that are difficult to diagnose without a monitor that tracks changes over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Runtime Performance: What Agents Actually Experience
&lt;/h2&gt;

&lt;p&gt;A manifest check tells you whether your store is configured correctly. What it can't tell you is how your store actually performs when an agent runs a real session — product discovery, cart building, variant resolution, checkout completion.&lt;/p&gt;

&lt;p&gt;Across our benchmark dataset, Shopify stores show response times between 102ms and 1,316ms for MCP tool calls, with a median of 146ms and a p95 of 205ms — fast enough for virtually any agent workflow. The rare outliers above 500ms are almost always explained by one of three things: geographic distance from the nearest Shopify edge node, heavy app stack adding middleware latency, or Shopify Markets adding an additional 200–400ms for cross-region requests.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvvm2qd5uylwnwpmhhr7m.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvvm2qd5uylwnwpmhhr7m.webp" alt="Shopify MCP Response Time Distribution — bar chart showing standard stores vs Markets proxy latency across 3,200 domains" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tool availability is generally excellent on Shopify. When we run &lt;code&gt;tools/list&lt;/code&gt; against a properly configured store, we consistently see both core tools available. Compare that to custom UCP implementations on other platforms, where tool availability is frequently incomplete or inconsistently declared.&lt;/p&gt;

&lt;p&gt;Checkout completion rates are the highest we see on any platform — but they drop meaningfully on stores that have mandatory custom fields on the checkout page. Agents can handle standard Shopify checkout flows natively, but custom fields that require JavaScript interaction or are injected by third-party apps often break the automated flow. If your store has a mandatory gift message field or a custom loyalty ID input, test it explicitly with agent sessions.&lt;/p&gt;

&lt;p&gt;In our &lt;a href="https://ucpchecker.com/blog/state-of-agentic-commerce-2026" rel="noopener noreferrer"&gt;180-session benchmark&lt;/a&gt;, we ran sessions against Shopify stores using multiple agent models. Variant resolution was the most variable capability — the Llama 3.3 70B variant had notably lower success rates on stores with complex product option configurations (more than 3 option dimensions, or options that affect availability rather than just presentation).&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration Checklist
&lt;/h2&gt;

&lt;p&gt;Based on our monitoring data, here are the five steps that separate stores that perform well in agent sessions from stores that pass the basic check but struggle in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First, enable UCP properly.&lt;/strong&gt; Install the Universal Commerce Agent app from the Shopify App Store and complete the full setup flow, including the key generation step. Partial installations are the single most common source of manifest issues we see.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second, verify your manifest at &lt;a href="https://ucpchecker.com/check" rel="noopener noreferrer"&gt;ucpchecker.com/check&lt;/a&gt;.&lt;/strong&gt; Run the check, review the capabilities and payment sections specifically, and confirm the protocol version matches the current specification. If you're on an older version, an app update is usually all it takes to fix it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third, review your &lt;code&gt;robots.txt&lt;/code&gt; and bot access configuration.&lt;/strong&gt; Shopify's default &lt;code&gt;robots.txt&lt;/code&gt; allows UCP agent traffic, but custom modifications can block it. If you've used a third-party SEO app to customize your &lt;code&gt;robots.txt&lt;/code&gt;, verify it isn't inadvertently blocking the user agents that UCP-compliant AI clients use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fourth, test with multiple agent models.&lt;/strong&gt; Don't assume that passing validation means all agents can complete transactions. Run sessions with at least two different agent implementations and specifically test variant-heavy products. Variant resolution failure is the most common production issue we see on otherwise well-configured stores.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fifth, set up &lt;a href="https://ucpchecker.com/alerts" rel="noopener noreferrer"&gt;UCP Alerts&lt;/a&gt;.&lt;/strong&gt; Your manifest can change silently — app updates, payment provider changes, and Shopify platform changes can all alter what your manifest declares. Alerts notify you when we detect a change in your manifest so you can investigate before agents encounter the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shopify Markets and Multi-Region Considerations
&lt;/h2&gt;

&lt;p&gt;Shopify Markets is the platform's native multi-currency, multi-region selling feature. It's excellent for human shoppers and increasingly common on the stores we monitor. It also introduces UCP-specific complexity that many merchants don't account for.&lt;/p&gt;

&lt;p&gt;The proxy layer that Markets uses to serve region-appropriate content adds 200–400ms of latency to MCP tool calls. For most agent workflows, this is acceptable. For agents running product discovery across dozens of stores in a single session, it compounds.&lt;/p&gt;

&lt;p&gt;More importantly, your manifest can vary by geographic context when Markets is active. An agent accessing your store from a US IP may see a different payment handlers section than one accessing from the EU, because your available payment methods differ by region. This isn't inherently wrong — it's expected behavior — but it means agents can't cache your manifest reliably across sessions from different origins.&lt;/p&gt;

&lt;p&gt;If you're using Markets, declare your primary currency explicitly in your UCP configuration even if Shopify auto-detects it. And ensure your store correctly handles the &lt;code&gt;country&lt;/code&gt; parameter in product and checkout requests — agents that pass explicit country context should get deterministic pricing, not a redirect to a region-detection flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Failure Modes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwis7zsd6t7cqg7fzefuz.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwis7zsd6t7cqg7fzefuz.webp" alt="Common Shopify UCP Failure Modes — app conflicts, variant resolution, draft product leaks, and redirect loops" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Four failure patterns come up repeatedly in our monitoring data, and they're all worth knowing before you go into production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App conflicts causing cart total mismatches.&lt;/strong&gt; Some Shopify apps modify cart calculations through hooks that don't propagate correctly to the MCP checkout tool. The most common manifestation: an agent successfully adds items to a cart and receives a subtotal, but when it initiates checkout, the total has changed because a discount or surcharge app modified it after the initial cart response. Agents that validate cart totals before confirming checkout will abort the transaction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Variant complexity exceeding agent resolution capability.&lt;/strong&gt; Products with more than three option dimensions, or options that combine to affect availability (a size that's only available in certain colors), frequently cause agents to fail at variant selection. The MCP tool returns the product correctly, but the agent can't determine which variant ID to use without rendering the full option matrix. Simplifying your product option structure — or providing explicit variant recommendations for your most common configurations — significantly improves agent success rates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Draft products appearing in MCP responses.&lt;/strong&gt; Shopify's catalog API and the MCP Discovery tool don't always apply the same product visibility filters. We've seen stores where draft products (not published to the storefront) appear in MCP product listings. Agents attempting to add these to a cart receive an error. Audit your product visibility settings if you maintain a large draft catalog.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Redirect loops for agents without location headers.&lt;/strong&gt; Some stores have geographic redirect logic that sends visitors without a detected location to a region-selection page. Agents that don't send standard location headers get caught in this loop — they follow the redirect, hit the same logic again, and either fail or get stuck. If you use geographic redirects, configure them to pass through to the default storefront for requests that carry a UCP agent identifier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Product feed best practices
&lt;/h2&gt;

&lt;p&gt;When Shopify generates your UCP manifest and exposes your catalog through MCP tools, the quality of what agents see depends entirely on your product data. A clean manifest with dirty product data is worse than no UCP at all — agents will discover your store, attempt to shop, and fail.&lt;/p&gt;

&lt;p&gt;Here's what matters for agent-readable product feeds:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Titles must be variant-specific.&lt;/strong&gt; An agent searching for "blue cotton t-shirt size L" needs to match against a title that contains those attributes. If your product title is just "Classic Tee" with variants buried in option fields, agents have to make extra calls to resolve what they're looking at. Stores with descriptive, variant-aware titles see higher search-to-cart conversion in our agent sessions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Set priceCurrency on every offer.&lt;/strong&gt; This is the single most common data quality issue we flag. Without explicit currency declarations, agents may display wrong currency symbols or attempt incorrect conversions. On multi-market Shopify stores, the product price changes by region — but if the feed doesn't declare which currency applies, the agent is guessing. Always set &lt;code&gt;priceCurrency&lt;/code&gt; in your product structured data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Images must have descriptive alt text.&lt;/strong&gt; Agents that support multimodal input use alt text to understand product images. "IMG_4521.jpg" tells an agent nothing. "Navy blue merino wool crew neck sweater — front view" tells it everything. This is standard accessibility practice that doubles as agent optimization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep variant data clean and consistent.&lt;/strong&gt; If your store has products with multiple option axes (color × size × material), each variant needs a unique, resolvable ID. We've seen stores where variant IDs change after inventory syncs, breaking any agent that cached a previous variant reference. Stable variant IDs are essential for reliable add-to-cart flows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't expose draft or out-of-stock products.&lt;/strong&gt; Your MCP-facing catalog should match your public storefront. If an agent finds a product through search, adds it to cart, and then gets an "unavailable" error at checkout, that's a failed session. Check that your product visibility settings apply consistently to both the storefront and the MCP server. In our monitoring, we've flagged stores where the MCP endpoint returns 10-15% more products than the public catalog — those are ghost products that agents can discover but buyers can't purchase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured data matters beyond the manifest.&lt;/strong&gt; Shopify merchants using Schema.org Product markup on their storefront pages help agents that discover products through web crawling (not just MCP). The markup should include: product name, description, price with currency, availability status, brand, SKU, and image URLs. This creates a second discovery path for agents that crawl the web before connecting via MCP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update frequency.&lt;/strong&gt; Stale feeds cause stale agent experiences. If you run flash sales, seasonal pricing, or frequent inventory changes, your product feed needs to reflect those changes in near-real-time. Shopify's native UCP integration handles most of this automatically, but custom feeds or third-party sync tools can introduce lag. Our daily monitoring catches when a manifest's product data drifts from what's actually available on the storefront.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Coming
&lt;/h2&gt;

&lt;p&gt;Two capabilities currently in draft status will be significant for Shopify merchants when they ship: &lt;strong&gt;Cart&lt;/strong&gt; as a persistent, shareable construct (enabling agents to hand off a pre-filled cart to a human for completion), and &lt;strong&gt;Catalog&lt;/strong&gt; as a richer product data access layer (giving agents structured access to inventory, pricing tiers, and product relationships without relying on search).&lt;/p&gt;

&lt;p&gt;Shopify's existing OAuth infrastructure puts it in a strong position for &lt;strong&gt;identity linking&lt;/strong&gt; — the ability for agents to authenticate as a known customer and access loyalty points, saved addresses, and purchase history. This is the capability most likely to drive meaningful conversion improvements for returning customers.&lt;/p&gt;

&lt;p&gt;We track adoption of emerging capabilities through our &lt;a href="https://ucpchecker.com/stats" rel="noopener noreferrer"&gt;stats dashboard&lt;/a&gt; and publish deeper analysis in the &lt;a href="https://ucpchecker.com/blog/state-of-agentic-commerce-2026" rel="noopener noreferrer"&gt;State of Agentic Commerce&lt;/a&gt; reports. If you want to understand where the ecosystem is heading, those are the places to watch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check Your Store
&lt;/h2&gt;

&lt;p&gt;If you're running a Shopify store and haven't run a UCP check yet, &lt;a href="https://ucpchecker.com/check" rel="noopener noreferrer"&gt;start there&lt;/a&gt;. The check takes about 30 seconds and will tell you whether your manifest is correctly configured and up to date.&lt;/p&gt;

&lt;p&gt;If you're already in our directory, set up &lt;a href="https://ucpchecker.com/alerts" rel="noopener noreferrer"&gt;UCP Alerts&lt;/a&gt; so you're notified when your manifest changes. Silent regressions — the kind that only show up when an agent fails to complete a transaction — are the hardest to catch without monitoring.&lt;/p&gt;

&lt;p&gt;And if you want to see how AI agents actually experience your store, &lt;a href="https://ucpplayground.com/?utm_source=ucpchecker&amp;amp;utm_medium=blog&amp;amp;utm_campaign=shopify-guide" rel="noopener noreferrer"&gt;UCP Playground&lt;/a&gt; lets you run real agent sessions against live stores. It's the fastest way to find the variant resolution and checkout completion issues that don't show up in manifest validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  References &amp;amp; Official Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.shopify.com/news/ai-commerce-at-scale" rel="noopener noreferrer"&gt;Shopify: The Agentic Commerce Platform&lt;/a&gt; — Shopify’s announcement connecting merchants to every AI conversation&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://shopify.engineering/ucp" rel="noopener noreferrer"&gt;Building the Universal Commerce Protocol — Shopify Engineering&lt;/a&gt; — Technical deep-dive into how UCP was built&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.shopify.com/news/winter-26-edition-agentic-storefronts" rel="noopener noreferrer"&gt;Introducing Shopify Agentic Storefronts&lt;/a&gt; — Sell products everywhere AI conversations happen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/" rel="noopener noreferrer"&gt;Google: New Tech and Tools for Retailers in an Agentic Shopping Era&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.googleblog.com/under-the-hood-universal-commerce-protocol-ucp/" rel="noopener noreferrer"&gt;Under the Hood: Universal Commerce Protocol — Google Developers Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ucp.dev/" rel="noopener noreferrer"&gt;UCP Specification — ucp.dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/first-autonomous-ai-agent-purchase-ucp" rel="noopener noreferrer"&gt;The First Fully Autonomous AI Agent Purchase Through UCP&lt;/a&gt; — an AI agent completed an end-to-end purchase on a live store, from identity linking to wallet payment&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/ucp-identity-linking-agentic-commerce" rel="noopener noreferrer"&gt;UCP Now Supports Identity Linking&lt;/a&gt; — how OAuth-based identity changes the checkout experience for returning customers&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/state-of-agentic-commerce-march-2026" rel="noopener noreferrer"&gt;The State of Agentic Commerce — March 2026&lt;/a&gt; — latest ecosystem data across 3,000+ monitored domains&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ucpchecker.com/blog/how-a-browser-extension-became-our-biggest-discovery-engine" rel="noopener noreferrer"&gt;How a Browser Extension Became Our Biggest Discovery Engine&lt;/a&gt; — how we discover and monitor Shopify stores at scale&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related Platform Guides
&lt;/h2&gt;

&lt;p&gt;Exploring UCP across other platforms? These guides cover what we’ve learned about each platform’s implementation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ucpchecker.com/blog/woocommerce-ucp-guide-ai-agent-commerce" rel="noopener noreferrer"&gt;The WooCommerce UCP Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ucpchecker.com/blog/magento-adobe-commerce-ucp-guide-ai-agent-commerce" rel="noopener noreferrer"&gt;The Magento / Adobe Commerce UCP Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ucpchecker.com/blog/bigcommerce-ucp-guide-ai-agent-commerce" rel="noopener noreferrer"&gt;The BigCommerce UCP Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ecommerce</category>
      <category>webdev</category>
      <category>api</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>We Built OAuth Identity Linking Into Our AI Agent Commerce Playground — Here's How the Protocol Actually Works</title>
      <dc:creator>Benji Fisher</dc:creator>
      <pubDate>Sat, 21 Mar 2026 13:12:59 +0000</pubDate>
      <link>https://dev.to/benjifisher/we-built-oauth-identity-linking-into-our-ai-agent-commerce-playground-heres-how-the-protocol-10k7</link>
      <guid>https://dev.to/benjifisher/we-built-oauth-identity-linking-into-our-ai-agent-commerce-playground-heres-how-the-protocol-10k7</guid>
      <description>&lt;p&gt;In our &lt;a href="https://dev.to/benjifisher/we-ran-180-ai-agent-shopping-sessions-across-11-models-and-20-stores-heres-what-we-found-2884"&gt;last post&lt;/a&gt;, we ran 180 AI agent shopping sessions across 11 models and 20 live stores. Every single session was anonymous. The agent connected, searched the catalog, built a cart, reached checkout — and the merchant had no idea who the buyer was.&lt;/p&gt;

&lt;p&gt;That's fine for product discovery. It's a dead end for real commerce.&lt;/p&gt;

&lt;p&gt;Without identity, there's no loyalty pricing. No saved addresses. No order history. No way to say "ship it to the same place as last time." The agent collects buyer info from scratch every session — name, email, phone, shipping address — adding 4-5 messages before checkout can even start. In our 180-session dataset, that friction was consistent across every model and every store.&lt;/p&gt;

&lt;p&gt;So we built identity linking into &lt;a href="https://ucpplayground.com/" rel="noopener noreferrer"&gt;UCP Playground&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What changed in the spec&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On March 18, a breaking change landed in the &lt;a href="https://github.com/Universal-Commerce-Protocol/ucp" rel="noopener noreferrer"&gt;UCP repository&lt;/a&gt;: &lt;code&gt;feat!: redesign identity linking with mechanism registry and capability-driven scopes&lt;/code&gt;. Identity linking — &lt;code&gt;dev.ucp.common.identity_linking&lt;/code&gt; — is now one of four core capabilities in the UCP spec, alongside Checkout, Order, and Payment Token Exchange.&lt;/p&gt;

&lt;p&gt;Two concepts from this redesign matter for anyone building against UCP:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mechanism registry&lt;/strong&gt;. Merchants declare which authentication mechanisms they support in a structured registry within their UCP manifest. The registry pattern supports multiple mechanisms and can evolve without breaking existing implementations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Capability-driven scopes&lt;/strong&gt;. OAuth scopes are no longer static. A merchant might require one set of scopes for catalog access and a different set for checkout. The agent negotiates what it needs based on the capabilities it wants to use. An agent that only browses the catalog doesn't get checkout permissions. Least-privilege, applied to commerce.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What we built&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We implemented the full OAuth 2.0 Authorization Code flow with PKCE in UCP Playground. Here's what the architecture looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffsb5zgq5htyevb7saaw1.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffsb5zgq5htyevb7saaw1.webp" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;UCP Identity Linking — OAuth 2.0 PKCE Flow&lt;br&gt;
Five steps, three actors. The agent never sees user credentials. The human stays in the loop at the consent step. Here's how each piece works in practice:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Discovery&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you point the playground at a merchant domain, we read the UCP manifest. If it declares &lt;code&gt;dev.ucp.common.identity_linking&lt;/code&gt; and includes OAuth endpoints — authorization URL, token URL, and optionally a client registration URL — we light up the identity flow.&lt;/p&gt;

&lt;p&gt;This is the same manifest we're already parsing for checkout and catalog capabilities. Identity linking is just another capability declaration, which means the discovery infrastructure we built for our &lt;a href="https://dev.to/benjifisher/we-monitored-2000-ucp-manifests-every-day-for-a-month-heres-what-breaks-4cj9"&gt;2,000-manifest monitoring&lt;/a&gt; works here too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Dynamic client registration (RFC 7591)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This was the first surprise. The spec supports &lt;a href="https://datatracker.ietf.org/doc/html/rfc7591" rel="noopener noreferrer"&gt;RFC 7591&lt;/a&gt; dynamic client registration. Instead of manually registering an OAuth app at every merchant — which doesn't scale when you're testing against 20+ stores — the agent sends a registration request and gets client credentials back automatically.&lt;/p&gt;

&lt;p&gt;In our &lt;code&gt;IdentityLinkingService&lt;/code&gt;, this is a single POST:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Http&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$registrationUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s1"&gt;'client_name'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'UCP Playground'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'redirect_uris'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$callbackUrl&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="s1"&gt;'grant_types'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'authorization_code'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="s1"&gt;'response_types'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'code'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="s1"&gt;'token_endpoint_auth_method'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'none'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// public client&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We cache the registration per merchant so subsequent sessions reuse the same client credentials. No developer portal visits. No API key management. The protocol handles it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. PKCE authorization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PKCE (Proof Key for Code Exchange) prevents authorization code interception. We generate a random code verifier, hash it to create a challenge, and send the challenge with the authorization request. When we exchange the code for tokens later, we prove we're the same client by presenting the original verifier.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$verifier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Str&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$challenge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;rtrim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;strtr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nb"&gt;base64_encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'sha256'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$verifier&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
    &lt;span class="s1"&gt;'+/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'-_'&lt;/span&gt;
&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s1"&gt;'='&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The user sees the merchant's consent screen — what permissions are being requested, what data will be shared. The agent can't bypass this. This is the critical trust boundary: the human explicitly approves what the agent can do on their behalf.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Token exchange&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After consent, the merchant redirects back with an authorization code. We exchange it server-side with the PKCE verifier to prove the code belongs to us. Back comes an access token and a refresh token.&lt;/p&gt;

&lt;p&gt;We built an &lt;code&gt;OAuthTokenManager&lt;/code&gt; that handles refresh automatically. When a token expires mid-session, the manager swaps it transparently so the agent flow doesn't break. In practice, this means a user can link their identity once and the agent maintains the connection across multiple interactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Profile resolution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With a valid token, we call the merchant's profile endpoint. Back comes the buyer's identity — name, email, phone, shipping address. This is what flows into checkout instead of the manual 4-5 message collection.&lt;/p&gt;

&lt;p&gt;One thing we learned building this: profile response formats vary across merchants. Some return flat JSON, some nest address fields, some use different key names for the same data. Our &lt;code&gt;IdentityLinkingService&lt;/code&gt; normalizes across formats so the agent always gets a consistent buyer profile regardless of the merchant's implementation.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What we learned&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building this end-to-end surfaced a few things that aren't obvious from reading the spec:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamic client registration is the unlock&lt;/strong&gt;. Without RFC 7591, every platform building agent commerce would need to manually register OAuth apps at every merchant. That's the same integration bottleneck UCP was designed to eliminate. Dynamic registration makes the whole flow self-bootstrapping.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PKCE is non-negotiable&lt;/strong&gt;. The spec requires it, and rightly so. Agents are effectively public clients — they can't securely store a client secret. PKCE ensures the authorization code can only be exchanged by the client that initiated the flow. Standard security practice, but it's good to see it baked into the spec rather than left as optional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Capability-driven scopes add real complexity&lt;/strong&gt;. Static scopes are straightforward — you request a list and you're done. Capability-driven scopes mean the agent needs to understand what capabilities it wants to use before requesting authorization. We built scope negotiation into the authorization step, but this is an area where fragmentation could emerge as different merchants define different scope mappings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Profile normalization is unglamorous but essential&lt;/strong&gt;. Every merchant returns buyer data slightly differently. If you don't normalize at the protocol layer, every agent has to handle format differences. We centralized this in one service, but the spec could benefit from stricter response format requirements.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The impact on agent sessions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's the practical difference. In our anonymous shopping sessions, the checkout flow looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent: I'd like to check out. What information do you need?
[Merchant requests: email, name, shipping address, phone]
Agent: What's your email?
User: user@example.com
Agent: Shipping address?
User: 123 Main St...
Agent: Phone number?
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Four to five back-and-forth messages before the cart even moves toward payment. With identity linking:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent: [resolves buyer profile via OAuth token]
Agent: Ready to check out with your saved details. Proceed?
User: Yes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Zero friction. The agent already knows who you are and where to ship. It's the difference between an agent shopping for you and an agent shopping as you.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Where adoption stands&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We monitor 3,000+ domains through &lt;a href="https://ucpchecker.com/" rel="noopener noreferrer"&gt;UCP Checker&lt;/a&gt;. Identity linking is starting to appear in merchant manifests, but most implementations are still at the declaration stage — merchants list the capability without fully wiring up the OAuth flow behind it.&lt;/p&gt;

&lt;p&gt;In our audit system, identity linking earns 2 points in the manifest capability score. If a merchant declares it but their runtime tools don't support buyer identity fields, we flag it as a gap. We're scoring declaration today; runtime probing of OAuth endpoints is on our roadmap.&lt;/p&gt;

&lt;p&gt;The infrastructure is ready on the platform side. We're waiting for merchants to plug in.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What to watch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merchant adoption&lt;/strong&gt;. Platforms like Shopify already run extensive OAuth infrastructure for their app ecosystem. Extending it to UCP identity linking is a natural step. Custom platform developers building against the spec will likely move faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scope standardization&lt;/strong&gt;. The capability-driven scopes model is powerful but new. As more merchants implement it, patterns will emerge. Early standardization prevents fragmentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The mechanism registry evolving&lt;/strong&gt;. OAuth 2.0 is the starting point, but the registry is designed for more. Passkeys, verifiable credentials, federated identity — the architecture is there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check your domain:&lt;/strong&gt; &lt;a href="https://ucpchecker.com/check" rel="noopener noreferrer"&gt;ucpchecker.com/check&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Test the full flow:&lt;/strong&gt; &lt;a href="https://ucpplayground.com" rel="noopener noreferrer"&gt;ucpplayground.com&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Read the spec:&lt;/strong&gt; &lt;a href="https://github.com/Universal-Commerce-Protocol/ucp" rel="noopener noreferrer"&gt;github.com/Universal-Commerce-Protocol/ucp&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Follow the data:&lt;/strong&gt; &lt;a href="https://ucpchecker.com/blog" rel="noopener noreferrer"&gt;ucpchecker.com/blog&lt;/a&gt;&lt;/p&gt;

</description>
      <category>oauth</category>
      <category>ai</category>
      <category>webdev</category>
      <category>ucp</category>
    </item>
    <item>
      <title>We Built a Chrome Extension That Discovered 1,480 Agent-Ready Stores. Here's Exactly How It Works.</title>
      <dc:creator>Benji Fisher</dc:creator>
      <pubDate>Tue, 10 Mar 2026 15:25:50 +0000</pubDate>
      <link>https://dev.to/benjifisher/we-built-a-chrome-extension-that-discovered-1480-agent-ready-stores-heres-exactly-how-it-works-2bo8</link>
      <guid>https://dev.to/benjifisher/we-built-a-chrome-extension-that-discovered-1480-agent-ready-stores-heres-exactly-how-it-works-2bo8</guid>
      <description>&lt;p&gt;Wappalyzer didn't become a 3-million-user tool by being clever. It became essential by answering one question passively: what is this site built with?&lt;/p&gt;

&lt;p&gt;We built something similar for a different question: &lt;strong&gt;is this store agent-ready?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://ucpchecker.com/extension" rel="noopener noreferrer"&gt;UCP Checker Chrome extension&lt;/a&gt; probes &lt;code&gt;/.well-known/ucp&lt;/code&gt; on every storefront you visit and shows you the result in your toolbar. Green dot = valid UCP manifest. Gray dot = not detected. Zero clicks required.&lt;/p&gt;

&lt;p&gt;Six weeks after shipping it, the extension has fed &lt;strong&gt;1,480 unique domains&lt;/strong&gt; into our monitoring pool — making it our single largest discovery source, ahead of our crawler, web submissions, and bulk checks combined. With a &lt;strong&gt;98.4% verified rate&lt;/strong&gt; — meaning almost every store it finds has a live, valid manifest.&lt;/p&gt;

&lt;p&gt;This post is the full technical breakdown: how the detection works, what the permission model looks like compared to other ecommerce extensions, what the extension discovered, and what we're building next.&lt;/p&gt;

&lt;p&gt;If you read &lt;a href="https://dev.to/benjifisher/we-ran-180-ai-agent-shopping-sessions-across-11-models-and-20-stores-heres-what-we-found-2884"&gt;our first post&lt;/a&gt; on running 180 agent shopping sessions across 11 models, this is the prequel — the detection layer that feeds the stores into the system those agents shop on.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The architecture: four components, one HTTP request&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Compare this to how Wappalyzer works: it injects content scripts into every page, reads meta tags, checks JavaScript globals, and matches against a database of 1,000+ technology fingerprints. Or Shopify Theme Inspector, which hooks into Chrome DevTools, intercepts the &lt;code&gt;Server-Timing&lt;/code&gt; header, and renders Liquid flame graphs.&lt;/p&gt;

&lt;p&gt;UCP Checker does none of that. The entire detection mechanism is a single HTTP request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Navigation listener&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;javascript&lt;/span&gt;&lt;span class="c1"&gt;// webNavigation.onCompleted fires on new domain&lt;/span&gt;
&lt;span class="c1"&gt;// No content scripts. No DOM injection. No page content access.&lt;/span&gt;
&lt;span class="c1"&gt;// Only completed navigations — not iframes, AJAX, or redirects.&lt;/span&gt;
&lt;span class="nx"&gt;chrome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;webNavigation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onCompleted&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;handleNavigation&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Manifest probe&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;javascript&lt;/span&gt;&lt;span class="c1"&gt;// One fetch() per domain visit. That's it.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="s2"&gt;`https://&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.well-known/ucp`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;omit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;// No cookies, no session tokens, no auth headers&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Parse: HTTP status, response time, manifest structure&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is architecturally closer to how a browser checks &lt;code&gt;/.well-known/security.txt&lt;/code&gt; or &lt;code&gt;/.well-known/openid-configuration&lt;/code&gt; than how Wappalyzer fingerprints a stack. No heuristic matching, no DOM analysis, no pattern library to maintain. Either the endpoint exists and returns a valid manifest, or it doesn't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Badge system&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Green dot  → valid UCP manifest found (store is agent-ready)
Gray dot   → no manifest detected (404/redirect)
No change  → error states (timeouts, network failures — stay silent)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. Optional telemetry&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A toggle — on by default — labelled "Share anonymous uptime stats." When enabled, the extension sends the public manifest data to our monitoring pool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;json&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"domain"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"example-store.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"verified"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"http_status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"response_time_ms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;142&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"manifest_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-01-23"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"embedded"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-02T14:23:01Z"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No user ID. No session ID. No IP forwarding. No referrer. The &lt;code&gt;credentials: "omit"&lt;/code&gt;flag ensures no cookies leave the browser. The domain enters the monitoring pool. The connection to the individual browse event is not retained.&lt;br&gt;
That's the entire technical surface. Four components, one HTTP request per domain, zero page content access.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;The permission model: why it's the narrowest in the category&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where it gets interesting for anyone who's built or evaluated Chrome extensions.&lt;/p&gt;

&lt;p&gt;Wappalyzer requires &lt;code&gt;&amp;lt;all_urls&amp;gt;&lt;/code&gt; and content script injection — broad access in exchange for broad detection. Koala Inspector (250K+ users, Shopify competitive intelligence) needs similar DOM access to extract product data and sales estimates. Shopify Theme Inspector hooks into the network layer to read server timing headers.&lt;/p&gt;

&lt;p&gt;Here's ours:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;json&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"permissions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"activeTab"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"webNavigation"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"storage"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"host_permissions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://*/.well-known/ucp*"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Permission breakdown:
──────────────────────────────────────────────────────────────────
activeTab        → read current tab's URL (domain only)
                   Most restrictive tab permission Chrome offers
webNavigation    → detect domain navigations for auto-probe
storage          → save badge state locally (no cloud sync)
host_permissions → ONLY https://*/.well-known/ucp*
                   Cannot access any other path on any domain
──────────────────────────────────────────────────────────────────

What we DON'T request:
──────────────────────────────────────────────────────────────────
tabs             → would give access to all tab URLs
cookies          → would give access to session data
history          → would give access to browsing history
&amp;lt;all_urls&amp;gt;       → would give access to every page
content scripts  → would give access to page DOM
──────────────────────────────────────────────────────────────────

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The extension literally cannot read what's on the page you're viewing. It can only check whether a specific well-known URL exists. Auditable in Chrome's extension management page in seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manifest V3 and why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The extension ships on Manifest V3 — Chrome's current platform with a stricter security model than V2. Service workers replace persistent background pages, &lt;code&gt;host_permissions&lt;/code&gt; are declared explicitly, and CSP blocks inline script execution.&lt;/p&gt;

&lt;p&gt;This matters because the December 2024 Chrome extension supply chain attack — which compromised extensions affecting 2.6 million users — exploited V2-era permission patterns that V3 structurally prevents. Our V3 architecture, combined with path-scoped host permissions, means even a compromised build couldn't read page content or access arbitrary URLs. The worst case is a bad probe to&lt;code&gt;/.well-known/ucp&lt;/code&gt; — a public endpoint that returns public data.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What the extension discovered&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's where the modest debugging tool turned into something bigger.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Discovery source        Domains    % of pool    Verified rate
─────────────────────────────────────────────────────────────
Browser extension         1,480      73.7%          98.4%
Crawler                     407      20.3%          87.2%
Web submissions             120       6.0%          64.2%
Bulk check                    1       0.0%            —
─────────────────────────────────────────────────────────────
Total                     2,008     100.0%          83.1%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;*&lt;em&gt;98.4% verified *&lt;/em&gt;— nearly every store the extension finds has a live UCP manifest. Compare that to web submissions (64.2%), where people are testing domains that don't have UCP yet. The extension finds real merchants because it only fires on storefronts people are actually visiting.&lt;/p&gt;

&lt;p&gt;The profile is distinctive: niche DTC brands that don't appear in any Shopify directory. Regional retailers in markets our crawler doesn't cover — Southeast Asia, Scandinavia, South America. The extension's geographic reach follows wherever our users browse.&lt;/p&gt;

&lt;p&gt;This is the pattern Wappalyzer pioneered — crowdsourced technology detection at scale. But where Wappalyzer's telemetry feeds a commercial intelligence database (API pricing starts at $250/month for 5,000 lookups), ours feeds a &lt;strong&gt;public&lt;/strong&gt; monitoring pool. The domain data powers our free benchmarks at &lt;a href="https://ucpchecker.com/" rel="noopener noreferrer"&gt;UCP Checker&lt;/a&gt;, the &lt;a href="https://ucpchecker.com/alerts" rel="noopener noreferrer"&gt;UCP Alerts&lt;/a&gt; system, and the weekly adoption stats newsletter.&lt;/p&gt;

&lt;p&gt;The extension users are building the map. And the map is open.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Extension-discovered domains are attributed only as "browser extension" in our data. We don't track which user discovered which domain, we don't store browsing sessions, and we don't build user profiles.&lt;/p&gt;

&lt;p&gt;This is a fundamentally different approach to extension telemetry than the competitive intelligence tools. Koala Inspector and Commerce Inspector are designed to extract data from stores you visit — product listings, pricing, sales estimates. Our extension extracts nothing from the store's page. It checks a single public endpoint and reports the result.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Hacker News thread: static vs. runtime&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When we &lt;a href="https://news.ycombinator.com/item?id=46889957" rel="noopener noreferrer"&gt;posted the extension to HN&lt;/a&gt;, the most substantive feedback wasn't about the extension itself. It was about what happens after validation.&lt;/p&gt;

&lt;p&gt;The argument: a static manifest check tells you the endpoint exists and conforms to the spec. But it doesn't tell you what happens when an agent actually fetches content. A valid manifest can serve tool responses containing prompt injection, credential exfiltration patterns, or behavioural steering in product descriptions.&lt;/p&gt;

&lt;p&gt;The commenter framed it as pairing manifest validation with runtime guardrails — classify and strip instructions in fetched content, detect exfiltration patterns, enforce policies before tool responses reach the LLM.&lt;/p&gt;

&lt;p&gt;The timing was interesting. When we read that feedback, we were already building &lt;a href="https://ucpchecker.com/blog/why-we-built-ucp-playground" rel="noopener noreferrer"&gt;UCP Playground&lt;/a&gt; — which does exactly this from the observation side. Playground connects to a store's MCP server, runs live agent sessions, and shows you every JSON-RPC message flowing between the agent and the store.&lt;/p&gt;

&lt;p&gt;The HN feedback didn't change our direction. It confirmed we were on the right track.&lt;/p&gt;

&lt;p&gt;But it sharpened a distinction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Static layer (UCP Checker + extension)
────────────────────────────────────────────────────────
Schema validation, capability declarations,
reachability, access policies.
Question: "Is this a valid, accessible UCP endpoint?"

Runtime layer (Playground — observes, doesn't enforce)
────────────────────────────────────────────────────────
Tool response content, instruction injection patterns,
checkout flow completeness, schema quality per tool.
Question: "What happens when an agent shops here?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The open question: should the runtime layer move from observation to enforcement? And who owns that — merchants sanitising their MCP responses, model providers extending safety layers to tool responses, or the UCP spec itself defining content security policies like CSP headers in browsers?&lt;/p&gt;

&lt;p&gt;We think observability comes first (Playground), enforcement will follow as the ecosystem matures.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What we're building next&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The extension currently does one thing. Here's what's on the table — and we'd genuinely like feedback on which of these matter to you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local discovery history&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your personal log of every domain you've visited and its UCP status — stored entirely in storage.local, never transmitted. A personal UCP audit trail. Browse stores all week, review which ones are agent-ready. No new permissions, no API calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Richer popup with grading&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We already grade tool schemas A through F in UCP Playground. Surfacing that grade in the extension popup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────┐
│  ● allbirds.com          VERIFIED   │
│                                     │
│  Grade: B+    Response: 142ms       │
│  Transports: MCP, Embedded          │
│  Bot access: All allowed            │
│                                     │
│  [Open in Playground]  [Run Audit]  │
└─────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One glance: green dot, B+ grade, 142ms, MCP + Embedded. Useful density for an agency evaluating agent readiness. Trade-off: additional API call per domain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One-click Playground link&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Visit allbirds.com → see green dot → click "Open in Playground" → watching Claude shop for running shoes. The detection-to-testing flow should be one click.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One-click alert setup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"I noticed this store has UCP" → "I want to know if it breaks" should be seamless. Deep-link from the popup to the alerts page with the domain pre-filled. Requires a logged-in account on ucpchecker.com — the extension just handles the link.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick audit run&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A one-click "audit this domain" — the full scoring pipeline: schema quality, capability coverage, response times, bot access. Think of it as Lighthouse for UCP: right-click, audit, see the score.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What we're deliberately not building&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DOM inspection or content analysis.&lt;/strong&gt; Would require content script injection and broader permissions — a fundamentally different trust model. The extension stays manifest-only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automated testing or agent execution.&lt;/strong&gt; That's what Playground is for. The extension detects. Playground tests.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Where the extension fits&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Detection          Analysis            Testing             Monitoring
─────────          ────────            ───────             ──────────
Extension    →     UCP Checker    →    Playground     →    Alerts
"Is it ready?"     "How ready?"        "Does it work?"     "Did it change?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The extension sits at the top of the funnel — the lightest-touch interaction. A passive signal in your toolbar.&lt;/p&gt;

&lt;p&gt;Compare to how Wappalyzer evolved: the extension was the entry point, but the value migrated to the API and intelligence platform. The extension stayed free and lightweight; the business built on the data it generated. Same pattern here — the extension generates discovery data, the platform turns it into developer tools.&lt;/p&gt;

&lt;p&gt;1,480 domains later, the community is building the map by browsing.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What I'd love to hear&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We're at a decision point with the extension. It's stable, lightweight, and trusted. The question is what to add — and what to leave out.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What would make you open the extension popup more often?&lt;/strong&gt; A grade? Response time? Transport info?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quick audit from the toolbar&lt;/strong&gt; — would you use it, or just go to ucpchecker.com?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime enforcement:&lt;/strong&gt; who should own it? Merchant-side gateway, agent-provider responsibility, or protocol-level spec?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The permission model&lt;/strong&gt; — does the narrow scope matter to you when evaluating extensions?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop a comment below or reach out at &lt;a href="https://ucpchecker.com/contact" rel="noopener noreferrer"&gt;ucpchecker.com/contact&lt;/a&gt;. I read everything.&lt;/p&gt;

&lt;p&gt;Try it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ucpchecker.com/extension" rel="noopener noreferrer"&gt;Install the extension&lt;/a&gt; — free, no account, Manifest V3&lt;br&gt;
&lt;a href="https://ucpchecker.com/" rel="noopener noreferrer"&gt;UCP Checker&lt;/a&gt; — full domain analysis and benchmarking&lt;br&gt;
&lt;a href="https://ucpplayground.com/" rel="noopener noreferrer"&gt;UCP Playground &lt;/a&gt;— watch agents shop in real time&lt;br&gt;
&lt;a href="https://ucpchecker.com/alerts" rel="noopener noreferrer"&gt;UCP Alerts&lt;/a&gt; — get notified when manifests change&lt;/p&gt;

</description>
      <category>ucp</category>
      <category>webdev</category>
      <category>ai</category>
      <category>extensions</category>
    </item>
    <item>
      <title>We Monitored 2,000 UCP Manifests Every Day for a Month. Here's What Breaks</title>
      <dc:creator>Benji Fisher</dc:creator>
      <pubDate>Tue, 03 Mar 2026 15:33:08 +0000</pubDate>
      <link>https://dev.to/benjifisher/we-monitored-2000-ucp-manifests-every-day-for-a-month-heres-what-breaks-4cj9</link>
      <guid>https://dev.to/benjifisher/we-monitored-2000-ucp-manifests-every-day-for-a-month-heres-what-breaks-4cj9</guid>
      <description>&lt;p&gt;In our &lt;a href="https://dev.to/benjifisher/we-ran-180-ai-agent-shopping-sessions-across-11-models-and-20-stores-heres-what-we-found-2884"&gt;last post&lt;/a&gt;, we ran 180 AI agent shopping sessions and showed what happens when models actually try to buy things. That data told us which models reach checkout and which fall off the funnel.&lt;/p&gt;

&lt;p&gt;But it left a bigger question unanswered: &lt;strong&gt;what about the stores themselves?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A session failing because Claude guessed a variant ID wrong is a model problem. A session failing because the store's manifest disappeared overnight is an infrastructure problem. And you can't tell the difference from a single scan.&lt;/p&gt;

&lt;p&gt;So ten days after UCP launched on January 11th, we started monitoring. Not a one-time crawl — a continuous, automated check of every domain in our pool, every 24 hours. A month later, our crawler has run over &lt;strong&gt;24,000 checks across 2,008 domains&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's what the data shows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgp62g6q9ybsk0rt8g6qe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgp62g6q9ybsk0rt8g6qe.png" alt=" " width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The monitoring pool&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our crawler tracks 2,008 domains, discovered through four channels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser extension: 1,480 domains&lt;/strong&gt; — our Chrome extension probes /.well-known/ucp on every storefront visited and feeds new domains into the pool automatically. 98.4% verified rate — the stores it finds are overwhelmingly real merchants with live manifests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crawler: 407 domains&lt;/strong&gt; — a proprietary engine that continuously discovers new UCP-enabled stores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web: 120 domains&lt;/strong&gt; — manual checks submitted through ucpchecker.com by developers and store owners testing their implementations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bulk check: 1 unique domain&lt;/strong&gt; — batch submissions, mostly domains we're already tracking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No single source covers the full picture. The crawler finds known stores systematically. The extension picks up storefronts that don't appear in any directory — niche brands, regional retailers, development endpoints. Together they give broader coverage than any one approach alone.&lt;/p&gt;

&lt;p&gt;As of February 27th:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyw16u0yr7y3xkh6leund.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyw16u0yr7y3xkh6leund.png" alt=" " width="672" height="184"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;83% of domains have a working UCP manifest. That's a strong baseline — but the interesting story is in the other 17%, and in what happens to manifests that were verified yesterday.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manifests break. More often than you'd think.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Over the monitoring period, we detected &lt;strong&gt;457 status changes&lt;/strong&gt; across the pool. 95 of those were breakages: a domain that was verified on one check came back invalid, unreachable, or blocked on the next.&lt;br&gt;
The breakdown:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;68 verified → invalid&lt;/strong&gt; — manifest still exists but fails validation. Most common failure mode. A deployment pushes bad JSON, a field goes missing, or a version string gets malformed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;14 verified → unreachable&lt;/strong&gt; — endpoint times out entirely. Infrastructure issue, DNS change, or CDN misconfiguration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;7 verified → blocked&lt;/strong&gt; — domain starts rejecting the crawler. Usually a WAF rule change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;6 verified → not detected&lt;/strong&gt; — manifest disappears. Endpoint returns 404 or redirects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;88 unique domains experienced at least one breakage during the month.&lt;/strong&gt; That's roughly 5% of verified stores going down at some point — and then, in many cases, coming back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The recovery cycle&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The good news: most breakages are temporary.&lt;/p&gt;

&lt;p&gt;We observed &lt;strong&gt;96 recoveries&lt;/strong&gt; — domains that were broken or missing and then came back:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;69 invalid → verified (bad deployment rolled back)&lt;/li&gt;
&lt;li&gt;13 unreachable → verified (infrastructure recovers)&lt;/li&gt;
&lt;li&gt;10 not detected → verified (new manifest published)&lt;/li&gt;
&lt;li&gt;4 blocked → verified (bot rules relaxed)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a pattern we're calling the &lt;strong&gt;"manifest recovery cycle."&lt;/strong&gt; A store's UCP endpoint breaks — usually through an invalid manifest — and typically recovers within 24–48 hours.&lt;/p&gt;

&lt;p&gt;A caveat: we're running a 24-hour crawl cycle, so actual recovery time could be shorter. A store that breaks and fixes within a few hours between checks wouldn't show up as a transition at all — meaning the true breakage rate is likely &lt;em&gt;higher&lt;/em&gt; than what we're reporting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The implication for agent developers:&lt;/strong&gt; just because a store worked yesterday doesn't mean it works today. And just because it's broken now doesn't mean it's gone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The flappers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;32 domains showed signs of persistent instability — oscillating between working and broken states multiple times over the month. We're calling these &lt;strong&gt;"flappers."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most unstable endpoint flipped status &lt;strong&gt;22 times in a month&lt;/strong&gt;. Others in the top 10 include major retailers and well-known tech companies — names you'd expect to have stable infrastructure. Some are running custom UCP implementations outside Shopify, which may explain the instability. Others appear to be testing or iterating in production.&lt;/p&gt;

&lt;p&gt;Flapping is a signal. It tells you the endpoint exists and someone is actively working on it — but it's not yet reliable enough for an agent to depend on.&lt;/p&gt;

&lt;p&gt;For agent developers building production flows against specific stores, flapping domains need a different strategy: retry logic, fallback handling, or simply waiting until the implementation stabilises.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who's blocking agents — and the paradox&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;95 domains are actively blocking our crawler:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Firewall blocks (1,179 check instances)&lt;/strong&gt; — the domain's WAF rejects the request before it reaches the UCP endpoint. This includes major retailers like Kohl's, Macy's, Sears, REI, Neiman Marcus, and Tiffany.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Robots.txt blocks (108 instances)&lt;/strong&gt; — explicit crawler disallowance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's the paradox we flagged in our first audit and it persists: &lt;strong&gt;some of these blocked domains have fully deployed UCP manifests&lt;/strong&gt;. They've built the infrastructure for agentic commerce and then locked the front door.&lt;/p&gt;

&lt;p&gt;This is almost certainly an operational gap — the security team updating firewall rules without coordinating with the product team that shipped UCP. But for agents, the result is a hard bounce.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Robots.txt: the access picture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Among verified domains, we check robots.txt for six major AI bot user agents. The picture is overwhelmingly permissive:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2iieumpun6hvipfvlrn5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2iieumpun6hvipfvlrn5.png" alt=" " width="391" height="201"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;18 verified domains block at least one AI bot while maintaining a live UCP manifest. The pattern splits into two groups: stores that block everything and stores that selectively block one or two.&lt;/p&gt;

&lt;p&gt;The selective blockers are the more interesting case — a store that blocks GPTBot but allows ClaudeBot is making a deliberate choice about which agents can discover them. Some stores appear to be conflating AI training crawlers with AI shopping agents in their robots.txt rules.&lt;/p&gt;

&lt;p&gt;The broader signal: &lt;strong&gt;stores that have committed to UCP have also committed to being discoverable by agents&lt;/strong&gt;. The 1% that block specific bots are edge cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Response times: fast, but with a long tail&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Across 19,035 verified checks:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2909bxrd2ep4kjwm50m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2909bxrd2ep4kjwm50m.png" alt=" " width="260" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;130ms median is fast — well within what real-time agent interactions need. But that tail matters. 1.5% of verified checks returned in over 500ms.&lt;/p&gt;

&lt;p&gt;For agents making multiple tool calls per session — search, details, cart, checkout — a slow manifest compounds. A 130ms response adds barely any latency. A 750ms response hit three or four times adds 2–3 seconds of dead time the user feels.&lt;/p&gt;

&lt;p&gt;If you read our Playground data, you know the difference between a 5-second session and an 11-minute one can come down to infrastructure like this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transports: MCP dominates, REST is where it gets interesting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UCP is transport-agnostic by design. Across 1,669 verified domains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MCP: 99.9% (1,668 domains)&lt;/strong&gt; — the default Shopify transport. JSON-RPC, tool discovery via schema introspection, real-time tool calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embedded: 99.8% (1,665 domains)&lt;/strong&gt; — declared alongside MCP on nearly every Shopify store. Designed to solve the payment wall: agent builds the cart, merchant's checkout UI handles payment in a secure iframe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;REST: 0.5% (8 domains)&lt;/strong&gt; — found exclusively on non-Shopify implementations: WooCommerce via UCPReady, custom builds, development endpoints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A2A: 1 domain&lt;/strong&gt; — Google's Agent-to-Agent protocol. The first A2A declaration we've seen in a UCP manifest in the wild.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The dominant combo is &lt;code&gt;["mcp", "embedded"]&lt;/code&gt; — what Shopify ships by default. But those 8 REST-declaring stores are where the transport diversity lives. These include WooCommerce implementations that expose REST alongside MCP and Embedded — giving agents three paths to the same store.&lt;/p&gt;

&lt;p&gt;In our &lt;a href="https://dev.to/benjifisher/we-ran-180-ai-agent-shopping-sessions-across-11-models-and-20-stores-heres-what-we-found-2884"&gt;180-session deep dive&lt;/a&gt;, we showed the schema fragmentation across these stacks — same "add to cart" intent, three completely different tool signatures. The transport data here shows why: 99.9% of stores speak one dialect (Shopify MCP), and the remaining 0.1% is where all the interoperability challenges live.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For agent developers:&lt;/strong&gt; an agent that only speaks MCP reaches 99.9% of the current ecosystem. But as non-Shopify platforms ship UCP with REST-first architectures, that percentage will shift. The agents that handle multiple transports will have the widest reach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The benchmark picture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We've benchmarked 1,183 domains on our scoring system:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwx8tapoaeurqqscxdfuf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwx8tapoaeurqqscxdfuf.png" alt=" " width="568" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The A-grade stores — Allbirds, Emma Bridgewater, Bodybuilding.com, and six others — represent the current ceiling. 188ms average TTFB, total scores of 90+, full capability coverage. In our Playground testing, Allbirds was also a standout: one store, five models, 100% checkout rate, zero errors.&lt;/p&gt;

&lt;p&gt;The F-grades are almost entirely non-Shopify domains (285 of 289). Most don't have a manifest at all — domains submitted for checking that haven't deployed UCP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The capability gap that matters most&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Among 741 stores with verified manifests and benchmarked capabilities, coverage is near-universal: search, cart, product details, policies, shipping, discounts — all at 100%.&lt;/p&gt;

&lt;p&gt;But &lt;strong&gt;OAuth: effectively 0%.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Without OAuth, every agent interaction is anonymous. No saved addresses, no order history, no loyalty discounts. The spec acknowledges it. The ecosystem hasn't addressed it yet.&lt;/p&gt;

&lt;p&gt;The interesting divergence comes from non-Shopify implementations — WooCommerce stores exposing &lt;code&gt;dev.ucp.shopping.checkout&lt;/code&gt; and &lt;code&gt;dev.ucp.shopping.fulfillment&lt;/code&gt; capabilities that Shopify stores don't declare. As the ecosystem diversifies beyond Shopify, capability coverage becomes a real differentiator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this means if you're building on UCP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're building agents: &lt;strong&gt;manifests are not static.&lt;/strong&gt; They break, recover, and flap. Your agent framework needs retry logic, health checking, and fallback handling. Don't cache manifest state for more than a few hours.&lt;/p&gt;

&lt;p&gt;If you're running an MCP server: &lt;strong&gt;the reliability gap between Shopify and everyone else is significant&lt;/strong&gt;. Shopify stores are consistently stable. Non-Shopify implementations are where the instability lives — and where the most interesting development is happening. If you're in the second group, monitoring your own endpoint is table stakes.&lt;/p&gt;

&lt;p&gt;If you're a store owner: &lt;strong&gt;check whether your security team knows about UCP&lt;/strong&gt;. The stores blocking AI crawlers aren't rejecting agentic commerce — they're running standard bot protection that wasn't updated when UCP went live. A WAF rule change could be the difference between your store being agent-shoppable and invisible.&lt;/p&gt;

&lt;p&gt;If you care about speed: &lt;strong&gt;manifest response time is infrastructure-level optimisation&lt;/strong&gt;. The best stores respond in under 200ms. The worst take over 2 seconds. This is fixable independently of your UCP implementation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why we turned this into alerts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Continuous monitoring generates signals. But signals are only useful if they reach the right person at the right time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdwc602gguo6px8bszxbm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdwc602gguo6px8bszxbm.png" alt=" " width="800" height="686"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's why we shipped &lt;a href="https://ucpchecker.com/alerts" rel="noopener noreferrer"&gt;UCP Alerts&lt;/a&gt; — track any domain and get emailed the moment its UCP status changes. A store goes live with a manifest, you know immediately. A verified endpoint breaks, you know before your agents hit the error. A blocked domain recovers, you know when to retry.&lt;/p&gt;

&lt;p&gt;Same crawl cycle powering all the data in this post. Sign in, add domains, and you're covered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Methodology:&lt;/strong&gt; Our crawler checks each domain every 24 hours. A check hits &lt;code&gt;/.well-known/ucp&lt;/code&gt;, validates against the UCP spec, and evaluates HTTP status, response time, manifest structure, AI bot policies, and errors. All data is from real automated checks recorded between January 21 and February 27, 2026.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ucpchecker.com/" rel="noopener noreferrer"&gt;UCP Checker&lt;/a&gt; — Check any store's UCP manifest and agent-readiness&lt;br&gt;
&lt;a href="https://ucpplayground.com/" rel="noopener noreferrer"&gt;UCP Playground&lt;/a&gt; — Watch an AI agent shop any UCP-ready store in real time&lt;/p&gt;

&lt;p&gt;If you're building on UCP — MCP server, Shopify app, WooCommerce plugin, agent framework — I'd love to hear what you're seeing. What's working? What's broken? What should we monitor next?&lt;/p&gt;

</description>
      <category>ucp</category>
      <category>webdev</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>We Ran 180 AI Agent Shopping Sessions Across 11 Models and 20 Stores. Here's What We Found</title>
      <dc:creator>Benji Fisher</dc:creator>
      <pubDate>Mon, 23 Feb 2026 23:11:18 +0000</pubDate>
      <link>https://dev.to/benjifisher/we-ran-180-ai-agent-shopping-sessions-across-11-models-and-20-stores-heres-what-we-found-2884</link>
      <guid>https://dev.to/benjifisher/we-ran-180-ai-agent-shopping-sessions-across-11-models-and-20-stores-heres-what-we-found-2884</guid>
      <description>&lt;p&gt;Postman didn't become essential by testing APIs. It became essential by showing developers what was &lt;em&gt;actually happening&lt;/em&gt; between their code and the world.&lt;/p&gt;

&lt;p&gt;We've been building something similar for agentic commerce.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ucpplayground.com/" rel="noopener noreferrer"&gt;UCP Playground&lt;/a&gt; lets you point an AI agent at any UCP-ready store that supports the &lt;a href="https://ucp.dev/" rel="noopener noreferrer"&gt;Universal Commerce Protocol&lt;/a&gt;, and watch it shop — search products, build a cart, reach checkout — across &lt;strong&gt;MCP&lt;/strong&gt;, &lt;strong&gt;REST&lt;/strong&gt;, and &lt;strong&gt;Embedded&lt;/strong&gt; transports. Every tool call is logged. Every JSON-RPC message is traceable. Every session is replayable.&lt;/p&gt;

&lt;p&gt;We've now recorded 180 sessions across 11 LLMs and 20 live stores. Not synthetic benchmarks — real agent-to-store conversations over real MCP connections, hitting real catalogs, with real checkout URLs coming back.&lt;/p&gt;

&lt;p&gt;The data tells a story about where agentic commerce actually is, and what developers building on UCP need to know right now.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Why "Postman for UCP" isn't just an analogy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before Postman, you'd write a &lt;code&gt;curl&lt;/code&gt; command, squint at the response, and hope for the best. Postman gave you the full request/response lifecycle in one view — headers, body, status code, timing — with the ability to save, share, and replay.&lt;/p&gt;

&lt;p&gt;UCP Playground does the same thing for the agent-to-store interface. Point it at a domain. It reads the store's &lt;code&gt;/.well-known/ucp&lt;/code&gt; manifest, connects to the MCP server, and opens a chat interface where an AI agent shops for real.&lt;/p&gt;

&lt;p&gt;Type "find me running shoes in black, size 10" and watch the agent call &lt;code&gt;search_shop_catalog&lt;/code&gt;, parse structured product data, render product cards, and ask which one you want. Say "add the first one" and it resolves the variant ID, calls &lt;code&gt;update_cart&lt;/code&gt;, and hands back a checkout URL.&lt;/p&gt;

&lt;p&gt;The sidebar gives you the Postman-style observability layer: MCP endpoint status, schema quality grades (A through F per tool), funnel progress, token usage, and full JSON-RPC message traces.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fipiaybyuatnyh9j61vwi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fipiaybyuatnyh9j61vwi.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And just like Postman lets you test the same endpoint with different parameters, UCP Playground lets you run the same prompt against up to five models simultaneously — Claude, Gemini, GPT-4o, Llama, side by side, same store, same query — and compare the results.&lt;/p&gt;

&lt;p&gt;That comparison capability is where things get interesting.&lt;/p&gt;




&lt;p&gt;Three transports, one protocol UCP is transport-agnostic by design. The &lt;a href="https://ucp.dev/2026-01-23/specification/overview/" rel="noopener noreferrer"&gt;spec&lt;/a&gt; defines how stores advertise capabilities through service discovery at &lt;code&gt;/.well-known/ucp&lt;/code&gt;, and a single store can declare multiple transports — each with its own endpoint and schema.&lt;/p&gt;

&lt;p&gt;Across the 20 stores we tested, we found three distinct stacks in the wild:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP (JSON-RPC)&lt;/strong&gt; — What Shopify ships. The agent connects to a JSON-RPC server, discovers available tools via schema introspection, and makes real-time tool calls. Five tools: &lt;code&gt;search_shop_catalog&lt;/code&gt;, &lt;code&gt;get_product_details&lt;/code&gt;, &lt;code&gt;update_cart&lt;/code&gt;, &lt;code&gt;get_cart&lt;/code&gt;, &lt;code&gt;search_shop_policies_and_faqs&lt;/code&gt;. Product IDs are Shopify GIDs like &lt;code&gt;gid://shopify/Product/6881317257296&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;REST&lt;/strong&gt; — The familiar HTTP API pattern. Some merchants expose a REST API alongside or instead of MCP. Simpler ID schemes (integers like &lt;code&gt;"54068"&lt;/code&gt;), but often a richer tool surface. The WooCommerce stores we tested via UCPReady exposed 9 tools — full checkout lifecycle management (&lt;code&gt;ucp_create_checkout&lt;/code&gt;, &lt;code&gt;ucp_update_checkout&lt;/code&gt;, &lt;code&gt;ucp_complete_checkout&lt;/code&gt;, &lt;code&gt;ucp_cancel_checkout&lt;/code&gt;), plus order management and webhook registration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embedded&lt;/strong&gt; — The newest transport and the one that solves the payment wall. When an agent reaches checkout but can't produce a payment credential (because it's an LLM, not a browser), the merchant declares an embedded transport. The Playground opens the merchant's checkout UI in a secure iframe, handles the &lt;a href="https://ucp.dev/specification/embedded-checkout/" rel="noopener noreferrer"&gt;ECP handshake&lt;/a&gt; over &lt;code&gt;postMessage&lt;/code&gt;, and lets the human complete payment while the agent orchestrates the cart.&lt;/p&gt;

&lt;p&gt;The schema fragmentation across these stacks is real. Same operation, three different tool signatures:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Searching products
Shopify MCP:  search_shop_catalog({query: "shoes", context: "..."})
UCPReady:     ucp_list_products({search: "shoes", in_stock: true})
Custom:       list_products({query: "shoes"})

// Adding to cart
Shopify MCP:  update_cart({add_items: [{product_variant_id: "gid://shopify/ProductVariant/123", quantity: 1}]})
UCPReady:     ucp_create_checkout({line_items: [{item: {id: "54068"}, quantity: 1}]})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the interoperability testing problem that UCP was designed to solve. UCP Playground makes it visible — run the same agent flow against all three stacks and see where it breaks.&lt;/p&gt;

&lt;p&gt;Almin Zolotic, creator of &lt;a href="https://zologic.nl/the-next-evolution-of-conversion-why-your-store-needs-to-be-agent-ready/" rel="noopener noreferrer"&gt;UCPReady&lt;/a&gt; — the first WooCommerce UCP plugin — put it well after shipping his integration:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Building for the agentic web without a tool like UCP Playground is similar to building for the visual web without a browser. It provided the high-fidelity feedback loop needed to move UCPReady from a spec-compliant implementation to a production-ready, agent-shoppable WooCommerce store. Seeing the first autonomous purchase appear in WooCommerce was a defining milestone."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;What 180 sessions reveal about model performance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We tested 11 models. Five had enough volume (20+ sessions) to draw real conclusions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The checkout leaderboard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzg664m8loywpx3kro4fy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzg664m8loywpx3kro4fy.png" alt="The checkout leaderboard" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Llama 3.3 70B reached checkout at &lt;strong&gt;3x the rate&lt;/strong&gt; of GPT-4o — with the lowest failure rate of any high-volume model.&lt;/p&gt;

&lt;p&gt;But speed tells a different story. Gemini 2.5 Flash completes a turn in 1.3 seconds. Llama takes 5.8 seconds. The fastest model converts at half the rate of the most accurate one.&lt;/p&gt;

&lt;p&gt;Three models with smaller sample sizes — DeepSeek V3-2 (3 sessions), Gemini 3 Flash (4), and Grok 4 (3) — all hit &lt;strong&gt;100% checkout&lt;/strong&gt;. Small samples, but they're next on the testing roadmap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Llama wins: the &lt;code&gt;details&lt;/code&gt; step&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The funnel data explains the gap:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F02a91u4qfh2763vkitbs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F02a91u4qfh2763vkitbs.png" alt="The funnel data explains the gap" width="800" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Llama calls &lt;code&gt;get_product_details&lt;/code&gt; to resolve variant IDs &lt;strong&gt;2x more often&lt;/strong&gt; than the other models before attempting to add to cart. It doesn't guess at variant IDs — it looks them up. And its cart-to-checkout conversion is essentially 100%.&lt;/p&gt;

&lt;p&gt;The models that skip the details step are guessing at variant structures, hitting type errors, and falling off the funnel. This is something you'd never catch from a single test run — you only see it when you compare flows across models against the same store. The Postman Collections equivalent: run the same sequence, vary the environment, diff the results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The cost question&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a session does reach checkout, how many tokens does it take?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kl74onx6ojarrbrjg2a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kl74onx6ojarrbrjg2a.png" alt="The cost in tokens" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Llama converts more often, but at the highest token cost per success. Claude burns the most tokens overall. DeepSeek reaches checkout at less than half the token cost of any other model — but with only 3 sessions, that needs validation at scale.&lt;/p&gt;

&lt;p&gt;For developers choosing a model for production agentic commerce: it's not just about &lt;em&gt;if&lt;/em&gt; it reaches checkout — it's about how much each checkout costs.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;5 seconds vs 11 minutes: same store, same protocol&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most telling comparison in the dataset came from a single store running all three UCP transports.&lt;/p&gt;

&lt;p&gt;The fast session: Gemini 2.5 Flash, a simple prompt — "Buy me a vichy cream." The agent searched, found 5 results, the user picked one, the agent created a checkout. &lt;strong&gt;4 turns. 5 seconds. 12,877 tokens.&lt;/strong&gt; Clean, fast, done.&lt;/p&gt;

&lt;p&gt;The slow session: Claude Sonnet 4.5, same store, a more exploratory conversation. Over the course of the session, the agent hit four distinct issues that a developer would want to catch:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A timeout on first request&lt;/strong&gt; — &lt;code&gt;cURL error 28&lt;/code&gt;, 15 seconds with 0 bytes received. The agent recovered by retrying with a smaller query, but the first impression was a dead endpoint.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A pagination blind spot&lt;/strong&gt; — the agent searched for the most expensive product but never paginated past the first 100 results, missing higher-priced items entirely. The &lt;code&gt;limit&lt;/code&gt; parameter in the tool schema was set to 100 max — and the agent treated the first page as the full catalog.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A missing route&lt;/strong&gt; — when the agent tried to update an existing checkout session, the MCP server returned a 404. The &lt;code&gt;ucp_update_checkout&lt;/code&gt; endpoint hadn't been registered. The agent worked around it by creating a fresh checkout.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;An OOS business logic gap&lt;/strong&gt; — the server accepted an out-of-stock item into a checkout, then returned a warning after the fact rather than rejecting it upfront.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That session ran for &lt;strong&gt;41 turns, 681 seconds, and 1.6 million tokens&lt;/strong&gt; — a 130x token difference from the fast session on the same endpoint.&lt;/p&gt;

&lt;p&gt;None of these issues would show up in a manifest scan. They only surface when an agent actually tries to shop. And with session replay, a developer can pinpoint each one in the trace instead of reading server logs — the same way you'd debug a failing Postman request by inspecting the response body and timing.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Store instructions: the hidden prompt engineering layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the most interesting patterns we found isn't in the agent — it's in the store's MCP responses.&lt;/p&gt;

&lt;p&gt;When Shopify's MCP server returns tool results, it injects &lt;code&gt;instructions&lt;/code&gt; fields — stage-specific prompts embedded in the response payload. There are three, one per shopping stage:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Search instructions&lt;/strong&gt; tell the agent how to present results — render markdown links, mention available filters, paginate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Details instructions&lt;/strong&gt; are minimal — render the title as a link, pay attention to the selected variant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cart instructions&lt;/strong&gt; are where it gets fascinating:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ask if the customer has found everything they need... help them complete their cart with any additional items they might need... check if they have any discount codes or gift cards...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the store coaching the agent through a structured checkout funnel. In one test session, Claude asked &lt;em&gt;"would you like to add anything else, like running socks for example?"&lt;/em&gt; — a cross-sell that wasn't in any system prompt. It came from the store's &lt;code&gt;update_cart&lt;/code&gt; response instructions.&lt;/p&gt;

&lt;p&gt;We tested compliance on Claude Sonnet 4.5 against Allbirds: &lt;strong&gt;8 out of 9 instructions followed&lt;/strong&gt;. It rendered markdown links, resolved variants correctly, suggested additional items, and provided the checkout URL as a clickable link. The only misses: it didn't mention available filters during search and skipped the "special instructions" prompt at checkout.&lt;/p&gt;

&lt;p&gt;The takeaway for anyone building an MCP server for commerce: &lt;strong&gt;ship behavioral instructions with your tool responses&lt;/strong&gt;. The store isn't just serving data — it's doing per-tool prompt engineering at the response level. And it works.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The error taxonomy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;37 tool call errors across 168 calls. Here's the pattern:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Timeout&lt;/strong&gt; — &lt;code&gt;cURL 28&lt;/code&gt; — shopify merchant policy search, 15s with 0 bytes received. Slow or unresponsive endpoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Internal Error&lt;/strong&gt; — &lt;code&gt;MCP -32603&lt;/code&gt; — shopify merchant. Server-side exception, no error body returned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auth Failed&lt;/strong&gt; — &lt;code&gt;MCP -32000&lt;/code&gt; — 2x merchant sites. Endpoint requires auth the agent doesn't have.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Method Not Found&lt;/strong&gt; — &lt;code&gt;MCP -32601&lt;/code&gt; — dev site tools/call. Deployment or routing issue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Invalid Type&lt;/strong&gt; — &lt;code&gt;MCP -32602&lt;/code&gt; — line_items: "22" instead of array. LLM passed wrong type to tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Route Not Found&lt;/strong&gt; — &lt;code&gt;REST 404&lt;/code&gt; — merchant site ucp_update_checkout. Endpoint not registered.&lt;/p&gt;

&lt;p&gt;The most common: &lt;code&gt;_search_shop_catalog_&lt;/code&gt; fails &lt;strong&gt;23% of the time&lt;/strong&gt;. Policy search fails &lt;strong&gt;40%&lt;/strong&gt;. Cart operations are the most reliable at 7%.&lt;/p&gt;

&lt;p&gt;The type validation error (&lt;code&gt;-32602&lt;/code&gt;) is the only one that's the model's fault rather than the store's. The LLM passed a string &lt;code&gt;"22"&lt;/code&gt; where the schema expected an array of line item objects. Better schema descriptions and proper &lt;code&gt;required&lt;/code&gt; field annotations in the tool definition would prevent it.&lt;/p&gt;

&lt;p&gt;Every one of these errors shows up in the Playground's session trace — the MCP error code, the request payload, the response (or lack thereof), and the timing. The same debug workflow you'd use in Postman when an API returns something unexpected.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;One store, five models, 100% checkout&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Everlane is the gold standard in this dataset. Seven sessions across five models. Every one reached checkout. Zero errors.&lt;br&gt;
Same prompt — "what mens backpacks do you have?" — across all five:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6uev6hf3dnjwny8pohou.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6uev6hf3dnjwny8pohou.png" alt="Everlane is the gold standard in this dataset" width="784" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Same store. Same prompt. Same outcome. Same turn count. 5x latency difference between fastest and slowest. The MCP implementation is clean, fast (452ms average endpoint response), and returns consistent schemas. Every model just works.&lt;/p&gt;

&lt;p&gt;This is the controlled test that matters — one variable at a time. It's the Postman equivalent of saving a collection, switching environments, and running it against each one. If your store doesn't perform like this across models, the Playground will show you why.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What to build on&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Based on 180 sessions, here's where the leverage is for different audiences:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're building agents&lt;/strong&gt;: The &lt;code&gt;get_product_details&lt;/code&gt; → &lt;code&gt;update_cart&lt;/code&gt; sequence is the critical path. Models that resolve variant IDs before carting convert at 2-3x the rate of those that don't. If your agent skips the details step, that's your optimization target.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're building an MCP server&lt;/strong&gt;: Schema quality is the biggest predictor of agent success. Tools with clear descriptions, proper &lt;code&gt;required&lt;/code&gt; fields, and well-defined &lt;code&gt;items&lt;/code&gt; schemas succeed. Tools with &lt;code&gt;properties: []&lt;/code&gt; or missing descriptions fail. We built a schema quality scorer (A through F) because this pattern was so consistent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're a store owner&lt;/strong&gt;: Store instructions in tool responses are an underrated superpower. Stores that inject behavioral hints — how to present products, when to use which tool, how to handle variants — get dramatically better agent behavior. The best-performing stores in our dataset all do this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you care about checkout&lt;/strong&gt;: The payment wall is real. Google's UCP-powered checkout is live but limited to select US stores. Outside of that, independent developers like &lt;a href="https://zologic.nl/the-next-evolution-of-conversion-why-your-store-needs-to-be-agent-ready/" rel="noopener noreferrer"&gt;Zologic&lt;/a&gt; are delivering the most complete end-to-end flows — implementing embedded checkout where the merchant's UI handles payment in an iframe while the agent orchestrates the cart.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Try it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ucpplayground.com/" rel="noopener noreferrer"&gt;UCP Playground&lt;/a&gt; — Point it at any UCP ready domain. Watch an agent shop. Replay any session.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ucpchecker.com/" rel="noopener noreferrer"&gt;UCP Checker&lt;/a&gt; — Check any store's UCP manifest and agent-readiness.&lt;/p&gt;

&lt;p&gt;All session data in this post is from real agent interactions recorded between February 14–23, 2026. No sessions were staged or simulated.&lt;/p&gt;

&lt;p&gt;I built UCP Checker because I wanted to understand how ready the open web actually was for agentic commerce. Scanning manifests answered part of that question. But the real answer only comes when you watch an agent try to shop — and see where it succeeds, where it breaks, and why.&lt;/p&gt;

&lt;p&gt;That's what UCP Playground does. It's the observability layer between AI agents and store APIs — the same way Postman became the observability layer between developers and REST endpoints. Except instead of testing GET /users, you're testing whether Claude can buy someone a pair of shoes.&lt;/p&gt;

&lt;p&gt;If you're building on UCP — whether that's an MCP server, a Shopify app, a WooCommerce plugin, or an agent framework — I'd genuinely love to hear what you're seeing. What's working? What's broken? What should we test next?&lt;/p&gt;

&lt;p&gt;Drop a question in the comments or reach out at &lt;a href="https://ucpchecker.com/" rel="noopener noreferrer"&gt;ucpchecker.com&lt;/a&gt;. I read everything.&lt;/p&gt;

</description>
      <category>ucp</category>
      <category>postman</category>
      <category>playground</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
