NewThe tragent CLI is on npm: npx @tragent/cli scan your-store.com

Issue reference

No shared-catalogue profile published

Issue code
UCP_PROFILE_MISSING
Stage
Find products
Protocol
—
Severity
Medium

What it means

tragent reports this at the “Find products” stage. The question there is “Can an agent find your products at all?” An agent has to reach your site and locate products by searching or browsing before anything else can happen.

What it does to an agent

Agents can usually carry on, but more slowly or less sure of what they found, and an unsure agent is likelier to recommend another store.

The Universal Commerce Protocol gives an agent a structured way to read a catalogue, build a basket and check out without scraping pages. A store announces what it supports with a profile at /.well-known/ucp: the protocol version, the capabilities it offers, and the service endpoints an agent calls.

Without a profile, an agent that speaks UCP has to fall back to driving your pages like a person, which is slower, costs more and fails more often. tragent treats a missing profile as a medium finding: it does not stop a browser agent, but it removes the most reliable path.

How to fix it

Publish a UCP profile so agents can discover your commerce capabilities instead of guessing them.

/.well-known/ucp (shape)
{
  "ucp": {
    "version": "2026-08-25",
    "services": {
      "dev.ucp.shopping": [
        { "version": "2026-08-25", "transport": "mcp", "endpoint": "https://shop.example/api/ucp/mcp" }
      ]
    },
    "capabilities": {
      "dev.ucp.shopping.checkout": [{ "version": "2026-08-25" }]
    }
  }
}

On your platform

Shopify

Shopify publishes the profile for stores on its platform, so a Shopify store should already answer at /.well-known/ucp. If it does not, check that the request is not blocked by an app proxy or a custom domain setup, and compare with your myshopify.com address.

WooCommerce

WooCommerce does not publish a UCP profile on its own. If you adopt UCP through a payments or commerce extension, it should serve the profile; confirm the address answers JSON with a 200 and that the endpoints it names resolve.

Headless or custom

Serve the profile as application/json from the origin root. Declare only capabilities you actually implement: an agent that trusts a capability and finds it missing stops negotiating.

In practice

Publishing a profile is a commitment to keep it true. Every capability you declare is one an agent will try, and every endpoint you name is one it will call. Start with the capabilities you already run in production, usually catalogue reads and checkout, and add others as you ship them, with the version of the specification each one follows.

The profile is read before anything else, often on every new conversation, so serve it from the edge with a short cache lifetime and make sure it answers quickly. It should be identical on every hostname a shopper might be given, the bare domain and www, and on the platform's own address if you have one, or agents get a different answer depending on which link they followed.

Check the fix

  1. curl -s https://your-store/.well-known/ucp and confirm it parses as JSON.
  2. Check it declares a version and at least one capability.
  3. Run the scan; the profile check should list the version and capabilities it read.

Run the check that reported UCP_PROFILE_MISSING again after the change. The scan needs no account; an issue found during an AI shopping test needs that test run again.

Terminal
npx @tragent/cli scan https://your-store.com

Common mistakes

  • Serving the storefront's HTML at /.well-known/ucp because the app answers every path.
  • Copying an example profile with endpoints that do not exist on your domain.
  • Publishing the profile on www but not on the bare domain an agent was given.