ruggable.com
Work at ruggable.com?Verify your @ruggable.com email to rescan on demand.
Agents can reach the site, but product data is thin or inconsistent.
Higher than 86% of 192 scanned stores
Pillars
- Access32/35
- Catalog legibility22/25
- Transactability0/25
- Trust & policy15/15
Capped at 79: No agent-native transaction surface was found (UCP, Storefront MCP, or attested ACP)
Checks
15 of 27 scored checks passed. Expand a row for the evidence behind it.
Access
32/35Catalog legibility
22/25Transactability
0/25Trust & policy
15/15How to fix it
12 fixes for ruggable.com, ready to paste into a ticket or hand to a coding agent.
Add a Content-Signal directive
access.content-signal · partial
Your robots.txt has no Content-Signal directive. Content Signals (contentsignals.org) is a robots.txt extension that states, separately, whether your content may be used for search, as real-time AI input (which is what shopping agents do), and for training. An explicit signal scores fully; silence scores half.
You can welcome shopping agents while still declining training. Add to the
*group (or to each group you care about):User-agent: * Content-Signal: search=yes, ai-input=yes, ai-train=no Allow: /Keep
ai-input=yes; setai-trainhowever you like. If Cloudflare manages your robots.txt, the equivalent setting lives in AI Crawl Control → Content Signals.On Shopify, robots.txt is generated from the theme. In Online Store → Themes → Edit code, add a
robots.txt.liquidtemplate (Add a new template → robots.txt) if you do not have one, keep the default groups, and append your rules after the loop. SEO apps that "manage" robots.txt for you are a common source of AI-bot blocks; check their settings too.Publish a Web Bot Auth key directory
access.web-bot-auth · fail
Nothing usable was found at
/.well-known/http-message-signatures-directory(HTTP 404). Web Bot Auth is the IETF draft that lets agents sign requests with HTTP Message Signatures; parties that sign publish their Ed25519 public keys in this directory, and verifiers fetch it to check theSignatureandSignature-Inputheaders. Visa's Trusted Agent Protocol, Mastercard's Agent Pay, and Cloudflare's signed-agent verification are all built on it.Two steps matter for a storefront:
- Verify signatures at your edge so signed agents are let through bot management instead of challenged. On Cloudflare this is the Verified Bots / signed agents setting; other WAFs are adding the same.
- Publish your own directory for any requests you sign (your own agent, service-to-service calls, or a verifier that expects one to exist). Serve it with
Content-Type: application/http-message-signatures-directory+json:
{ "keys": [ { "kty": "OKP", "crv": "Ed25519", "kid": "2026-01", "x": "<base64url-encoded public key>", "nbf": 1767225600, "exp": 1798761600 } ] }On Shopify, themes cannot serve files under
/.well-known/, so treat this as out of scope unless you run a proxy (Shopify Plus with Cloudflare) that can answer the path. It is worth 2 points.Add BreadcrumbList and ItemList markup
catalog.list-markup · partial
You have
BreadcrumbListon the product page but noItemListon a category or search page. Breadcrumbs tell an agent where a product sits in the catalog; anItemListlets it read a whole category or result set in one pass.On category and search result pages:
{ "@context": "https://schema.org", "@type": "ItemList", "itemListElement": [ { "@type": "ListItem", "position": 1, "url": "https://www.example.com/products/trail-runner-2" }, { "@type": "ListItem", "position": 2, "url": "https://www.example.com/products/ridge-hiker" } ] }On Shopify, Dawn does not emit either by default. Add the
BreadcrumbListto the product section usingcollectionandproduct, and loopcollection.productsinsections/main-collection-product-grid.liquid(andsearch.resultsin the search section) for theItemList. Several SEO apps add both.Offer a Markdown version of product pages
catalog.markdown-negotiation · fail
Requesting https://ruggable.com/products/spot-cleaner with
Accept: text/markdownreturned HTML. Agents that support content negotiation get a page that is a tenth of the size and needs no parsing. This is worth one point and is a nice-to-have.When the
Acceptheader preferstext/markdown, respond with a Markdown body andVary: Accept:GET /products/trail-runner-2 HTTP/1.1 Accept: text/markdown HTTP/1.1 200 OK Content-Type: text/markdown; charset=utf-8 Vary: Accept # Trail Runner 2 **$129.00** · In stock · SKU TR2-BLK-10 Lightweight waterproof trail shoe. Sizes 6–13. Free shipping over $75, 30-day returns.The simplest place to do this is edge middleware (a Cloudflare Worker, Vercel or Netlify middleware, or a Next.js route) that converts the rendered HTML or renders a dedicated template. If you are on Cloudflare, the "Markdown for Agents" option in AI Crawl Control does the conversion for you.
On Shopify, themes cannot vary the response on
Accept, so this is only possible behind a proxy (Shopify Plus). Skip it otherwise.Publish /llms.txt
catalog.llms-txt · fail
No
/llms.txtwas found (HTTP 404).llms.txt (llmstxt.org) is a short Markdown file at the site root that tells language models what the site is and where the important pages are. For a store, point at the catalog, the policies, and any agent endpoints. Serve it as
text/plainortext/markdownwith a 200 status:# Example Outdoor > Example sells trail-running shoes and apparel, shipping to the US and Canada. Free 30-day returns. ## Shop - [All products](https://www.example.com/collections/all): the full catalog - [Product sitemap](https://www.example.com/sitemap_products_1.xml) ## Policies - [Shipping](https://www.example.com/policies/shipping-policy) - [Returns](https://www.example.com/policies/refund-policy) ## For agents - [UCP profile](https://www.example.com/.well-known/ucp) - [Storefront MCP](https://www.example.com/api/mcp)On Shopify, themes cannot serve root text files. Upload
llms.txtunder Content → Files, then add a URL redirect from/llms.txtto the file's CDN URL (Online Store → Navigation → URL redirects); we follow the redirect. Some SEO apps also generate one.Publish a UCP business profile
tx.ucp-profile · fail
No profile was found at
/.well-known/ucp. The Universal Commerce Protocol (ucp.dev) is how an agent discovers, in one request, that your store can be shopped programmatically: which services you expose, over which transports (REST and MCP), and whether checkout is supported. It is the largest single item in the transactability pillar, and without it (or an attested ACP integration) your AUR is capped at 79.A complete profile declares a shopping service with an endpoint and a checkout capability:
{ "ucp": { "version": "2026-01-11", "services": { "dev.ucp.shopping": { "version": "2026-01-11", "spec": "https://ucp.dev/specification/overview", "rest": { "schema": "https://ucp.dev/services/shopping/openapi.json", "endpoint": "https://www.example.com/api/ucp" }, "mcp": { "schema": "https://ucp.dev/services/shopping/mcp.json", "endpoint": "https://www.example.com/api/ucp/mcp" } } }, "capabilities": [ { "name": "dev.ucp.shopping.checkout", "version": "2026-01-11", "spec": "https://ucp.dev/specification/checkout", "schema": "https://ucp.dev/schemas/shopping/checkout.json" }, { "name": "dev.ucp.shopping.order", "version": "2026-01-11", "spec": "https://ucp.dev/specification/order", "schema": "https://ucp.dev/schemas/shopping/order.json" } ], "payment_handlers": [] } }Serve it as
application/jsonfrom the storefront origin. The endpoints must exist and speak the protocol; the MCP one is tested by the next check. Check ucp.dev for the currentversionstring and schema URLs.On Shopify, you do not build this yourself: Shopify publishes the UCP profile, the UCP MCP endpoint, and the Storefront MCP server for stores with the agentic storefront enabled. In the admin, turn on the agentic storefront and catalog syndication (Settings → Apps and sales channels, or the agentic commerce / "Sell with AI agents" settings depending on your admin version), confirm the online store is not password-protected, and keep the store on a plan that includes agentic commerce features. Allow a little time to propagate, then re-scan.
Answer tools/list on your UCP MCP endpoint
tx.ucp-mcp-endpoint · fail
https://ruggable.com/api/ucp/mcpdid not return a tool list (HTTP 404). The endpoint must speak MCP over Streamable HTTP: accept a JSON-RPC POST and answer with JSON or an SSE stream.Test it the way we do:
curl -sS -X POST https://ruggable.com/api/ucp/mcp \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'tools/listmust work without authentication; require auth on the tool calls that need it, and advertise it through OAuth discovery (see that fix).- Return
200withContent-Type: application/json(ortext/event-stream), never a 405 for POST or an HTML page. - Make sure the URL in the UCP profile (
services → dev.ucp.shopping → mcp.endpoint) points at this endpoint exactly.
On Shopify, you do not build this yourself: Shopify publishes the UCP profile, the UCP MCP endpoint, and the Storefront MCP server for stores with the agentic storefront enabled. In the admin, turn on the agentic storefront and catalog syndication (Settings → Apps and sales channels, or the agentic commerce / "Sell with AI agents" settings depending on your admin version), confirm the online store is not password-protected, and keep the store on a plan that includes agentic commerce features. Allow a little time to propagate, then re-scan.
Serve a Storefront MCP server at /api/mcp
tx.storefront-mcp · fail
No MCP server answered
tools/listat/api/mcp(HTTP 404). This is the conventional storefront endpoint (Shopify's Storefront MCP lives here) where an agent can search the catalog, read policies, and manage a cart without scraping.Expose an MCP server over Streamable HTTP at that path with tools such as
search_shop_catalog,get_product_details,search_shop_policies_and_faqs,get_cart, andupdate_cart.tools/listmust be callable without authentication.On Shopify, you do not build this yourself: Shopify publishes the UCP profile, the UCP MCP endpoint, and the Storefront MCP server for stores with the agentic storefront enabled. In the admin, turn on the agentic storefront and catalog syndication (Settings → Apps and sales channels, or the agentic commerce / "Sell with AI agents" settings depending on your admin version), confirm the online store is not password-protected, and keep the store on a plan that includes agentic commerce features. Allow a little time to propagate, then re-scan.
Publish an MCP server card
tx.mcp-server-card · fail
Nothing was found at
/.well-known/mcp/server-card.json. The server card is the MCP discovery document that lets an agent find your server, its transport endpoint, and how to authenticate, without reading documentation.Publish a JSON document describing the server (field names follow the current MCP server-card draft; adjust to the version you target):
{ "serverInfo": { "name": "example-storefront", "title": "Example Storefront", "version": "1.0.0" }, "description": "Search the Example catalog, read policies, and manage a cart.", "transport": { "type": "streamable-http", "endpoint": "https://www.example.com/api/mcp" }, "capabilities": { "tools": {} }, "authentication": { "required": false } }Serve it as
application/jsonwith CORS enabled, and keep the endpoint in sync with the one your UCP profile names.Publish an API catalog (RFC 9727)
tx.api-catalog · fail
No API catalog was found. RFC 9727 defines
/.well-known/api-catalog, a linkset that points agents at your APIs and their descriptions (OpenAPI, MCP, UCP) in one place.Serve this as
application/linkset+json:{ "linkset": [ { "anchor": "https://www.example.com/", "service-desc": [ { "href": "https://www.example.com/api/openapi.json", "type": "application/vnd.oai.openapi+json" } ], "service-doc": [ { "href": "https://www.example.com/developers", "type": "text/html" } ], "service-meta": [ { "href": "https://www.example.com/.well-known/ucp", "type": "application/json" }, { "href": "https://www.example.com/.well-known/mcp/server-card.json", "type": "application/json" } ] } ] }Also advertise it from the homepage with a
Linkheader, which we accept on its own:Link: </.well-known/api-catalog>; rel="api-catalog"Publish OAuth discovery metadata
tx.oauth-discovery · fail
None of
/.well-known/oauth-authorization-server,/.well-known/openid-configuration, and/.well-known/oauth-protected-resourcereturned a JSON document. Agents that need to act on a customer's account (order status, saved addresses, loyalty) look for OAuth 2.0 discovery before they will attempt authenticated calls; it is also what MCP clients use to authorise against your MCP server.If you run an authorization server on this origin, publish RFC 8414 metadata at
/.well-known/oauth-authorization-server:{ "issuer": "https://www.example.com", "authorization_endpoint": "https://www.example.com/oauth/authorize", "token_endpoint": "https://www.example.com/oauth/token", "registration_endpoint": "https://www.example.com/oauth/register", "scopes_supported": ["cart:write", "orders:read"], "response_types_supported": ["code"], "grant_types_supported": ["authorization_code", "refresh_token"], "code_challenge_methods_supported": ["S256"] }If authentication is handled by a separate identity provider, publish RFC 9728 protected-resource metadata at
/.well-known/oauth-protected-resourcepointing at it:{ "resource": "https://www.example.com/api/mcp", "authorization_servers": ["https://auth.example.com"], "scopes_supported": ["cart:write", "orders:read"], "bearer_methods_supported": ["header"] }Support PKCE and dynamic client registration (RFC 7591) so agents can onboard without a manual app review.
On Shopify, customer accounts expose OpenID configuration on
shopify.com, not on your storefront domain, and themes cannot add/.well-known/files, so this check is informational for most Shopify stores. It is worth 2 points.Publish an agent card or skills index
tx.agent-cards · fail
None of
/.well-known/agent-card.json,/.well-known/agent.json, and/.well-known/agent-skills/index.jsonwas found. An A2A agent card tells other agents that your store has an agent of its own and what it can do; an Agent Skills index lists reusable skill files. Either satisfies this one-point check.A minimal A2A agent card at
/.well-known/agent-card.json:{ "name": "Example Shopping Assistant", "description": "Find, compare, and buy Example products.", "url": "https://www.example.com/a2a", "version": "1.0.0", "protocolVersion": "0.3.0", "capabilities": { "streaming": true }, "defaultInputModes": ["text/plain"], "defaultOutputModes": ["text/plain", "application/json"], "skills": [ { "id": "find-products", "name": "Find products", "description": "Search the catalog by query, size, colour, and price.", "tags": ["shopping", "search"] } ] }Or, if you publish skills rather than an agent, serve
/.well-known/agent-skills/index.jsonlisting each skill's name, description, and the URL of itsSKILL.md. Only publish a card for an endpoint that actually answers.
History
| Date | AUR | Level | Engine |
|---|---|---|---|
| Oct 20, 2026 | 57 | Visible | v1.0.1 |
| Oct 20, 2026 | 57 | Visible | v1.0.1 |