{
 "slug": "shopify",
 "name": "Shopify",
 "url": "https://shopify.com",
 "domain": "shopify.com",
 "category": "ecommerce",
 "category_name": "E-commerce",
 "tested_at": "2026-10-06",
 "run": "20261006T034714Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261006T034714Z",
   "date": "2026-10-06",
   "level": 2,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  }
 ],
 "level": 2,
 "level_name": "Gets in",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 1,
  "tries": 1,
  "self_start": true
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: key by API"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "no",
   "text": "Work done: 33% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Nothing to cancel; can't delete what it made",
   "at": "delete",
   "how": "no-account",
   "left": "stuck"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "part",
   "text": "Some docs agents can read: llms.txt and an MCP server",
   "have": [
    "llms_txt",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: key by API",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "no",
   "text": "Work done: 33% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Nothing to cancel; can't delete what it made",
   "at": "delete",
   "how": "no-account",
   "left": "stuck",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "key_by_api",
   "label": "Key by API",
   "routes": [],
   "minutes": 5.7,
   "core": "3/9"
  }
 ],
 "minutes": 5.7,
 "next": {
  "to": 3,
  "text": "Next: do half of the core work (now 33%)"
 },
 "stop": "delete",
 "core": "3/9",
 "scores": {
  "coverage": 27,
  "reliability": 100,
  "resilience": null,
  "setup": 75,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 75,
  "security": null,
  "standards": [
   {
    "standard": "MCP",
    "state": "behind",
    "behind": 1,
    "value": "2025-11-25"
   },
   {
    "standard": "MCP discovery",
    "state": "behind",
    "behind": null,
    "value": "legacy"
   }
  ]
 },
 "reliability_method": "first-try",
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": 33,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": "f3d0adeeb256",
  "kb_version": "2+overlay-9e43028a2c",
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "start"
 },
 "same_level_drives": 1,
 "drives": 1,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "shopify.dev pages as Markdown (.md URL and Accept: text/markdown with Vary: Accept), www.shopify.com/llms.txt and /SKILL.md, setup.shopify.com/agents.md and llms.txt. shopify.dev/llms.txt is 404 (points to shopify.dev/docs.md)."
  },
  "signup": {
   "status": "n/a",
   "note": "Documented no-account route: `shopify store create preview` (Shopify CLI 4.8.4) made a working store with Admin API access, headless, no email. A real Shopify account (needed to keep the store, widen scopes, sell, pick a plan) is behind a Cloudflare 'Verify you are human' challenge on accounts.shopify.com."
  },
  "verify": {
   "status": "n/a",
   "note": "The preview store needs no email; account sign-up stopped at the Cloudflare challenge before any mail."
  },
  "credentials": {
   "status": "headless",
   "note": "The CLI stores a preview-store credential (app 'Shopify CLI Connector App', 37 scopes: products, inventory, themes, content, metaobjects, discounts, shipping, publications, read_orders...). No customer, order-write, markets or locales scopes; `store auth` is unavailable for preview stores.",
   "via": ""
  },
  "first_call": {
   "status": "headless",
   "note": "`shopify store execute` query shop { name plan } -> AgentDrives Test, plan Preview."
  },
  "first_action": {
   "status": "headless",
   "note": "productCreate via `shopify store execute --allow-mutations`, read back by product(id)."
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [],
   "rail_ids": [],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "no-card trial",
   "note": "No 402, x402, MPP, L402 or UCP purchase path on Shopify's own domains (x402./mpp./agents.shopify.com 404, www.shopify.com/.well-known/ucp 404); no Shopify-run listing in x402 Bazaar or mpp.dev. The free-trial page says 'Start for free, keep building for €1/month'; buying a plan happens in the admin after sign-up, and sign-up is behind Cloudflare 'Verify you are human'. No billing API; the preview store cannot be upgraded.",
   "reached": false
  },
  "cancel": {
   "status": "n/a",
   "grade": "n/a",
   "note": "Nothing to cancel: our agent started no paid plan.",
   "docs_note": "No plan was started.",
   "nothing": "no_plan"
  },
  "delete": {
   "status": "blocked",
   "note": "Every resource we created was deleted headless via Admin GraphQL and read back empty. The preview store itself cannot be deleted: `shopify store delete --force` -> 'Could not determine which organization owns [redacted].' The store is described as temporary; its lifetime was not stated where we looked. No account existed to delete.",
   "left": "stuck",
   "account": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": true,
   "card_required": null,
   "free_plan": null
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": false,
  "cli": true,
  "sdk": true,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": true
 },
 "surface_notes": {
  "api": "Admin GraphQL 2026-10, 484 mutations; errors carry extensions.code and requiredAccess; some mutations require an @idempotent(key) directive",
  "cli": "Shopify CLI 4.8.4: store create preview (no account), store execute, theme, app, hydrogen",
  "mcp": "official Setup MCP (30 tools, host integrations only) + Dev MCP (docs) + UCP MCP per storefront",
  "openapi": "none (GraphQL)"
 },
 "can_do": [
  "Create a temporary Shopify store with no account, headless (shopify store create preview)",
  "Create products with options, variants, prices and images, and read them back",
  "Set tracked inventory quantities at a location",
  "Publish products to the Online Store and Shop channels",
  "Edit theme files and create pages on the store's theme",
  "Add metafields, metaobject definitions and entries",
  "Create product bundles",
  "Add shipping rates to a delivery zone",
  "Create percentage discount codes",
  "Delete everything it created through the Admin API",
  "Check domain availability and price, and get business name ideas, through the Setup MCP without auth",
  "Query a demo catalog and build a cart with the Storefront API on mock.shop"
 ],
 "cannot_do": [
  {
   "what": "Sign up for or log in to a Shopify account",
   "why": "accounts.shopify.com shows a Cloudflare 'Verify you are human' challenge (headless: 403 cf-mitigated: challenge)"
  },
  {
   "what": "Create customers, draft orders or orders, fulfill orders",
   "why": "preview-store token lacks write_customers/write_orders/write_draft_orders and store auth cannot add scopes"
  },
  {
   "what": "Use the Setup MCP on its own store",
   "why": "OAuth only for pre-registered hosts (ChatGPT, Claude, Perplexity); no DCR or CIMD"
  },
  {
   "what": "Open the storefront or use the Storefront API on its own store",
   "why": "preview Online Store is password-locked ('Online Store channel is locked.')"
  },
  {
   "what": "Markets, translations, checkout branding, B2B, brand settings",
   "why": "missing scopes (markets, locales), Plus-only (checkout branding, B2B), no brand mutation in Admin API"
  },
  {
   "what": "Buy a plan or keep the store",
   "why": "needs claiming with a Shopify account; sign-up behind Cloudflare challenge"
  },
  {
   "what": "Delete the preview store",
   "why": "store delete only works for dev stores owned by an organization"
  }
 ],
 "blockers": [
  "Cloudflare 'Verify you are human' on accounts.shopify.com (sign-up and login, including dev.shopify.com)",
  "Preview-store scopes exclude customers, orders, markets and locales",
  "Setup MCP OAuth limited to pre-registered host integrations"
 ],
 "tips_for_owner": [
  "Let verified agents through account sign-in",
  "Grant customer and order scopes on preview stores",
  "Let agents claim a preview store by code",
  "Open Setup MCP OAuth to CIMD clients",
  "Let the CLI delete preview stores",
  "Support MCP (the 28 Jul 2026 spec) server/discover"
 ],
 "tips_for_agents": [
  "Start with `npx @shopify/cli store create preview --name ... --json`: a store with Admin API access, no account.",
  "Run Admin GraphQL with `shopify store execute -s <store> -j -q ... -v ...`; writes need --allow-mutations.",
  "Run `shopify store info --store <store> --json` to see the scopes you have before planning work.",
  "inventorySetQuantities on 2026-10 needs an @idempotent(key: \"...\") directive and changeFromQuantity; ignoreCompareQuantity is gone.",
  "`shopify doc search` needs --query; a positional query fails with a confusing 'Failed to prompt' error.",
  "The Setup MCP's no-auth tools (generate-domain-names, generate-business-names, search_docs_chunks, validate_graphql_codeblocks) are usable from any client."
 ],
 "selfhost": null,
 "summary": "Without any account, an agent can create a temporary Shopify store from the CLI and run the Admin GraphQL API on it: products, variants, inventory, theme files, pages, metaobjects, bundles, shipping rates and discounts all worked and read back. A real account is behind a Cloudflare 'Verify you are human' challenge, so orders, customers, payments, plans and keeping the store need a human. The official Setup MCP only accepts OAuth from ChatGPT, Claude and Perplexity.",
 "wall": "Cloudflare challenge on Shopify account sign-up",
 "plan_scope": "no-account preview store (Shopify CLI)",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Shopify lets an AI agent spin up a temporary online store with no human account at all, and run most day-to-day store setup (products, inventory, pages, bundles, discounts) through the command line. It stops being able to go further because creating a real, permanent Shopify account requires passing a Cloudflare 'prove you're human' check that the agent could not get past.",
  "can_do": [
   "Create a free, temporary store without signing up for anything",
   "Add products with options, variants, prices and photos",
   "Track stock levels at the store's location",
   "Publish products so they show in the online store and shop app",
   "Edit the store's theme files and add pages",
   "Attach custom extra information to products",
   "Bundle multiple products together",
   "Set a shipping price for a region",
   "Create a percentage-off discount code",
   "Clean up everything it created when done",
   "Look up business name ideas and check if a domain name is available, without logging in",
   "Browse a demo catalog and add items to a cart"
  ],
  "cannot_do": [
   {
    "what": "Sign up for or log into a real Shopify account",
    "why": "A Cloudflare human-verification check blocks it to pass it"
   },
   {
    "what": "Take orders from real customers, register them, or fulfill shipments",
    "why": "The free temporary store isn't allowed those permissions"
   },
   {
    "what": "Buy a paid plan or close/cancel one",
    "why": "Purchasing a plan requires the account that's blocked by the human-verification check"
   },
   {
    "what": "Delete the temporary store itself",
    "why": "The delete command only works for stores owned by an organization, not this kind of store"
   },
   {
    "what": "Connect its own app to Shopify's AI assistant service",
    "why": "That service only allows three named partner apps to connect"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "Customize checkout with branding",
   "plan": "Plus or development store",
   "evidence": "checkoutBrandingUpsert: 'the shop must be on a Plus plan or a Development store plan'"
  },
  {
   "capability": "B2B storefronts",
   "plan": "plan with B2B access",
   "evidence": "companyCreate: 'The shop must have access to B2B. Some operations may require additional plan capabilities.'"
  },
  {
   "capability": "Shopify Capital",
   "plan": "active paid store with sales",
   "evidence": "not reachable from a preview store"
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Store building",
   "capability": "Build an online store from a theme or AI prompt",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Admin > Online Store > Themes"
   },
   "check": "GET /admin/api/2026-10/themes.json shows a new theme; storefront URL renders it",
   "source": "https://www.shopify.com/online; https://www.shopify.com/"
  },
  {
   "id": "cap-02",
   "group": "Catalog",
   "capability": "Create and manage products (variants, options, media)",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /admin/api/2026-10/products.json (REST, legacy) / GraphQL Admin productCreate",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Products"
   },
   "check": "GET /admin/api/2026-10/products/{product_id}.json returns the created product",
   "source": "https://shopify.dev/docs/api/admin-rest"
  },
  {
   "id": "cap-03",
   "group": "Checkout",
   "capability": "Take customer payment through Shopify Checkout / Shop Pay",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Storefront checkout"
   },
   "check": "GET /admin/api/2026-10/orders/{order_id}.json shows financial_status paid after completing checkout",
   "source": "https://www.shopify.com/checkout; https://www.shopify.com/shop-pay; https://www.shopify.com/pricing"
  },
  {
   "id": "cap-04",
   "group": "Orders",
   "capability": "Fulfill, track, and manage orders",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "GET/POST /admin/api/2026-10/orders.json, /fulfillments.json",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Orders"
   },
   "check": "GET /admin/api/2026-10/orders/{order_id}.json shows fulfillment_status fulfilled",
   "source": "https://www.shopify.com/orders"
  },
  {
   "id": "cap-05",
   "group": "Payments",
   "capability": "Accept and process payments (Shopify Payments, cards, wallets)",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "GraphQL Admin orders/transactions",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Settings > Payments"
   },
   "check": "GET /admin/api/2026-10/orders/{order_id}/transactions.json shows a captured transaction",
   "source": "https://www.shopify.com/payments"
  },
  {
   "id": "cap-06",
   "group": "Point of sale",
   "capability": "Sell in person via POS (phone, card reader, counter)",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Shopify POS app"
   },
   "check": "GET /admin/api/2026-10/orders/{order_id}.json shows source_name pos",
   "source": "https://www.shopify.com/pos; https://www.shopify.com/online"
  },
  {
   "id": "cap-07",
   "group": "Multichannel",
   "capability": "Sell across channels (marketplaces, social, search)",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "GraphQL Admin publications/channel",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Sales channels"
   },
   "check": "GET /admin/api/2026-10/products/{product_id}.json shows product published to an additional channel",
   "source": "https://www.shopify.com/channels"
  },
  {
   "id": "cap-08",
   "group": "Inventory",
   "capability": "Track and manage inventory across locations",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "GET/POST /admin/api/2026-10/inventory_levels.json",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Inventory"
   },
   "check": "GET /admin/api/2026-10/inventory_levels.json?location_ids={id} reflects the updated quantity",
   "source": "https://www.shopify.com/pricing"
  },
  {
   "id": "cap-09",
   "group": "AI assistant",
   "capability": "Use Sidekick AI assistant for store tasks and copy generation",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Admin chat (Sidekick)"
   },
   "check": "Sidekick chat panel returns a generated answer/action confirmation in the admin",
   "source": "https://www.shopify.com/sidekick"
  },
  {
   "id": "cap-10",
   "group": "Customers",
   "capability": "Manage customer profiles and segments",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET/POST /admin/api/2026-10/customers.json",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Customers"
   },
   "check": "GET /admin/api/2026-10/customers/{customer_id}.json returns the saved profile",
   "source": "https://shopify.dev/docs/api/admin-rest"
  },
  {
   "id": "cap-11",
   "group": "Shipping",
   "capability": "Configure shipping rates and print labels",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GraphQL Admin DeliveryProfile",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Settings > Shipping and delivery"
   },
   "check": "GET order fulfillment shows a generated shipping label / tracking number",
   "source": "https://www.shopify.com/shipping"
  },
  {
   "id": "cap-12",
   "group": "International",
   "capability": "Sell internationally with localized pricing/currency (Shopify Markets)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GraphQL Admin Market",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Settings > Markets"
   },
   "check": "Storefront in a configured market shows localized currency/pricing",
   "source": "https://www.shopify.com/international"
  },
  {
   "id": "cap-13",
   "group": "B2B",
   "capability": "Run wholesale/B2B storefronts with custom catalogs",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GraphQL Admin CompanyLocation/CatalogContext",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Settings > B2B"
   },
   "check": "A B2B company location sees its assigned catalog/pricing on storefront",
   "source": "https://www.shopify.com/plus/solutions/b2b-ecommerce; https://www.shopify.com/pricing"
  },
  {
   "id": "cap-14",
   "group": "Checkout customization",
   "capability": "Customize checkout with branding and extensions",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GraphQL Admin checkoutBranding, Checkout UI Extensions",
    "mcp": null,
    "cli": "shopify app generate extension",
    "ui": "Admin > Settings > Checkout"
   },
   "check": "Checkout preview reflects applied branding/extension changes",
   "source": "https://www.shopify.com/pricing; https://shopify.dev/docs/apps/build"
  },
  {
   "id": "cap-15",
   "group": "Staff",
   "capability": "Add staff accounts with role permissions",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Admin > Settings > Users and permissions"
   },
   "check": "Admin > Users shows the added staff member with assigned permissions",
   "source": "https://www.shopify.com/pricing"
  },
  {
   "id": "cap-16",
   "group": "Content",
   "capability": "Add custom structured content (metafields/metaobjects)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GraphQL Admin metafieldsSet/metaobjectCreate",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Content / Settings > Custom data"
   },
   "check": "GET product metafields via GraphQL returns the saved custom field value",
   "source": "https://www.shopify.com/online"
  },
  {
   "id": "cap-17",
   "group": "Search",
   "capability": "Customize storefront search and discovery/filtering",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Admin > Online Store > Search & Discovery app"
   },
   "check": "Storefront search results reflect configured filters/boosts",
   "source": "https://apps.shopify.com/search-and-discovery; https://www.shopify.com/online"
  },
  {
   "id": "cap-18",
   "group": "Translation",
   "capability": "Translate and localize store content for markets",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GraphQL Admin translationsRegister",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Settings > Languages"
   },
   "check": "Storefront in alternate locale shows translated content",
   "source": "https://apps.shopify.com/translate-and-adapt; https://www.shopify.com/international"
  },
  {
   "id": "cap-19",
   "group": "Bundles",
   "capability": "Offer product bundles and multipacks",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GraphQL Admin Bundles API",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Apps > Shopify Bundles"
   },
   "check": "GET /admin/api/2026-10/products/{bundle_id}.json shows bundle components",
   "source": "https://apps.shopify.com/shopify-bundles"
  },
  {
   "id": "cap-20",
   "group": "Capital",
   "capability": "Apply for and receive merchant financing (Shopify Capital)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Admin > Finances > Capital"
   },
   "check": "Admin > Capital shows an active funding offer or loan balance after acceptance",
   "source": "https://www.shopify.com/capital"
  },
  {
   "id": "cap-21",
   "group": "Custom storefronts",
   "capability": "Build a headless/custom storefront (Hydrogen, Storefront API)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "Storefront GraphQL API",
    "mcp": null,
    "cli": "shopify hydrogen init",
    "ui": null
   },
   "check": "A custom Hydrogen storefront queries products via Storefront API and renders them",
   "source": "https://shopify.dev/docs/storefronts; https://hydrogen.shopify.dev"
  },
  {
   "id": "cap-22",
   "group": "Apps",
   "capability": "Build and publish third-party apps for the App Store",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Admin GraphQL/REST",
    "mcp": null,
    "cli": "shopify app build / shopify app deploy",
    "ui": "Partner Dashboard / Dev Dashboard"
   },
   "check": "App appears installed on a dev store via GET /admin/api/2026-10/apps.json or App Store listing",
   "source": "https://shopify.dev/docs/apps/build"
  },
  {
   "id": "cap-23",
   "group": "Agentic commerce",
   "capability": "Expose store to AI shopping agents/chat checkout (Agentic Storefronts, Universal Commerce Protocol)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "UCP (Universal Commerce Protocol)",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "A connected AI channel can retrieve product data and complete checkout per UCP spec",
   "source": "https://www.shopify.com/agentic-storefronts; https://www.shopify.com/ucp"
  },
  {
   "id": "cap-25",
   "group": "Store management via CLI",
   "capability": "Manage store/app resources from the Shopify CLI",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "shopify app/theme/hydrogen commands",
    "ui": null
   },
   "check": "shopify theme push / shopify app deploy exits 0 and resource updates in admin",
   "source": "https://shopify.dev/docs/apps/build/ai-toolkit"
  },
  {
   "id": "cap-26",
   "group": "Account",
   "capability": "Set brand assets (logo, colors) applied across store and checkout",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GraphQL Admin Brand",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Settings > Brand"
   },
   "check": "GraphQL brand query returns updated logo/colors reflected on storefront",
   "source": "https://www.shopify.com/pricing"
  },
  {
   "id": "cap-27",
   "group": "Marketplace",
   "capability": "Install apps from the Shopify App Store to extend functionality",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Admin > Apps"
   },
   "check": "GET /admin/api/2026-10/apps.json lists the newly installed app",
   "source": "https://apps.shopify.com/"
  },
  {
   "id": "cap-28",
   "group": "Domains",
   "capability": "Buy and connect a custom domain",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GraphQL Admin DomainRegister",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Settings > Domains"
   },
   "check": "Admin > Domains shows the connected domain as primary with DNS verified",
   "source": "https://www.shopify.com/pricing"
  },
  {
   "id": "cap-29",
   "group": "Billing",
   "capability": "Choose/change subscription plan and billing cycle",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Admin > Settings > Plan"
   },
   "check": "Admin > Plan shows the newly selected plan tier and billing interval",
   "source": "https://www.shopify.com/pricing"
  },
  {
   "id": "cap-30",
   "group": "Support",
   "capability": "Access 24/7 chat/phone merchant support",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Admin > Help"
   },
   "check": "Admin Help widget opens a live chat session with support",
   "source": "https://www.shopify.com/pricing"
  }
 ],
 "attempts": [
  {
   "t": "01:44",
   "cap": "discovery",
   "capability": "MCP version",
   "task": "server/discover on https://setup.shopify.com/mcp",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "HTTP 400, JSON-RPC -32000 \"Unsupported protocol version: 2026-07-28 (supported versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07)\"; initialize offering 2026-07-28 answered protocolVersion 2025-11-25, serverInfo shopify-mcp-server 1.0.0, Mcp-Session-Id issued",
   "notes": "legacy server (error code -32000, not -32022); 30 tools in tools/list; Streamable HTTP"
  },
  {
   "t": "01:44",
   "cap": "discovery",
   "capability": "MCP auth discovery",
   "task": "PRM + AS metadata for Setup MCP",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "401 WWW-Authenticate: Bearer resource_metadata=\"https://setup.shopify.com/.well-known/oauth-protected-resource\"; PRM lists AS https://setup.shopify.com/auth; AS metadata: grant types authorization_code, refresh_token; PKCE S256; token_endpoint_auth none; no registration_endpoint, no client_id_metadata_document_supported, no device endpoint",
   "notes": "agents.md: Public discoverability does not approve arbitrary new OAuth clients; only ChatGPT, Claude, Perplexity host integrations"
  },
  {
   "t": "01:44",
   "cap": "discovery",
   "capability": "Cards",
   "task": "ai-catalog, agent-card, agent.json, ucp, oauth wk on www.shopify.com; /mcp/server-card",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "www.shopify.com/.well-known/ai-catalog.json, agent-card.json, agent.json, ucp, oauth-protected-resource, oauth-authorization-server: all 404 text/plain Not found",
   "notes": ""
  },
  {
   "t": "01:44",
   "cap": "discovery",
   "capability": "Agent docs",
   "task": "llms.txt, SKILL.md, markdown docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "www.shopify.com/llms.txt 200; www.shopify.com/SKILL.md 200 (shopify-onboarding-merchant bootstrap skill); setup.shopify.com/agents.md + llms.txt 200 text/markdown; shopify.dev/skill.md 200; shopify.dev/docs/api/admin-graphql.md 200 text/markdown; Accept: text/markdown on docs page -> 302 then 200 content-type text/markdown, vary: Accept",
   "notes": "shopify.dev/llms.txt 404 (points to shopify.dev/docs.md as index); robots.txt has no Content-Usage or Content-signal lines; no Content-Usage header on www.shopify.com"
  },
  {
   "t": "01:44",
   "cap": "docs",
   "capability": "find docs",
   "task": "find API docs and agent onboarding headless",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "shopify.dev docs as markdown, SKILL.md routes agents to official host integrations or Shopify AI Toolkit / CLI; skill says dev account at dev.shopify.com no card; merchant store via shopify.com/free-trial no card",
   "notes": ""
  },
  {
   "t": "02:53",
   "cap": "signup",
   "capability": "sign up",
   "task": "Start free trial at shopify.com/free-trial with the agent's inbox",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Email form on www.shopify.com/free-trial submitted; redirect to accounts.shopify.com/session-service/login?...ux=admin_store_signup... shows title Just a moment..., text Your connection needs to be verified before you can proceed, Cloudflare Verify you are human checkbox (screenshot browser/shots/003.png); did not clear after 25 s",
   "notes": "No documented headless sign-up API (admin.shopify.com/signup is a web flow; Setup MCP name tools only return admin.shopify.com/signup links). Signed request (Web Bot Auth) was not let through.",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "no"
   }
  },
  {
   "t": "05:40",
   "cap": "signup",
   "capability": "sign up (no-account route)",
   "task": "shopify store create preview --name \"AgentDrives Test\" --json (Shopify CLI 4.8.4)",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "CLI returned status success, store id 111714074962, subdomain [redacted], message: This store is temporary. Create a free Shopify account to save it and start selling.",
   "notes": "CLI help: Creates a new Shopify store, with no need for an existing account. Claimable via storefrontUrl (app.shopify.com/auth/preview-store/...); claiming needs a Shopify account, whose sign-up is behind Cloudflare Turnstile"
  },
  {
   "t": "05:40",
   "cap": "credentials",
   "capability": "get API credentials",
   "task": "Preview store credential stored by CLI",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "store create preview stored a store credential in the CLI; store execute works without any login",
   "notes": "No raw Admin API token handed out; access goes through shopify store execute"
  },
  {
   "t": "05:41",
   "cap": "first_call",
   "capability": "first API call",
   "task": "shopify store execute query { shop { name plan } }",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "shop.name AgentDrives Test, myshopifyDomain [redacted], plan.displayName Preview, email placeholder-...@previewstore.invalid, currency EUR",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "06:28",
   "cap": "first_action",
   "capability": "first real action",
   "task": "Create product AgentDrives Test Mug",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "productCreate -> gid://shopify/Product/11205760450898, read back via product(id) query",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "06:28",
   "cap": "cap-02",
   "capability": "Create and manage products (variants, options, media)",
   "task": "Create product with Color option, add Black variant at 19.00, set White to 18.00, attach image, read back",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "productCreate (Product/11205760450898), productVariantsBulkCreate (Black 19.00), productVariantsBulkUpdate (White 18.00), productCreateMedia (MediaImage READY); read back: options Color [White, Black], prices 18.00/19.00, 1 image READY",
   "notes": "Admin GraphQL via shopify store execute on a no-account preview store. Empty title -> userErrors field title, Title cant be blank. Mutation without --allow-mutations -> clear CLI error.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "docs_match": "match",
    "recoverable": "yes"
   }
  },
  {
   "t": "07:13",
   "cap": "cap-08",
   "capability": "Track and manage inventory across locations",
   "task": "Track inventory on White variant and set available=25 at Shoplocation, read back",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "inventoryItemUpdate tracked=true; inventorySetQuantities delta available +25, on_hand +25; read back inventoryLevels Shoplocation available 25, on_hand 25",
   "notes": "First try: ignoreCompareQuantity not defined on InventorySetQuantitiesInput (removed in 2026-10, old examples drift); second: The @idempotent directive is required for this mutation. Re-sending the same @idempotent key returned userError CHANGE_FROM_QUANTITY_STALE instead of the original result; no double write. Preview store has one location only, so multi-location not tested.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "idempotent": "yes",
    "docs_match": "match",
    "recoverable": "yes"
   }
  },
  {
   "t": "08:01",
   "cap": "cap-10",
   "capability": "Manage customer profiles and segments",
   "task": "customerCreate AgentDrives Test with tag agentdrives-test",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "ACCESS_DENIED: Access denied for customerCreate field. Required access: write_customers access scope. shopify store auth --scopes write_customers -> `store auth` is unavailable for preview stores. Additional Admin API scopes cant be granted.",
   "notes": "Preview store token lacks customer scopes; more scopes need a claimed store, i.e. a Shopify account (sign-up behind Cloudflare Turnstile)",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "09:04",
   "cap": "cap-01",
   "capability": "Build an online store from a theme or AI prompt",
   "task": "Create a store (CLI preview store comes with Horizon theme as MAIN), add a theme snippet and a page, read back",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "themes: Horizon role MAIN (OnlineStoreTheme/208952131922); themeFilesUpsert snippets/agentdrives-note.liquid, read back via theme.files content matches; pageCreate Page/180162429266 about-agentdrives-test",
   "notes": "Storefront https://[redacted] redirects to /password (preview store), so the rendered storefront could not be checked headless. Setup MCP blocks theme publishing/deletion; CLI store execute allowed themeFilesUpsert.",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "09:04",
   "cap": "cap-07",
   "capability": "Sell across channels (marketplaces, social, search)",
   "task": "Publish the mug to Online Store and Shop channels, read back",
   "route": "cli",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "publications: Online Store, Shop, Point of Sale; publishablePublish to Online Store + Shop -> no userErrors; publishedOnPublication: Online Store true, Shop true, POS false",
   "notes": "Marketplace/social channels (Amazon, TikTok, Google) need channel apps installed in the admin; not reachable without a claimed account",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "09:04",
   "cap": "cap-16",
   "capability": "Add custom structured content (metafields/metaobjects)",
   "task": "Set product metafield custom.capacity_ml=350; create metaobject definition agentdrives_faq and one entry; read back",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "metafieldsSet Metafield/75669260697938; metaobjectDefinitionCreate MetaobjectDefinition/49588273490; metaobjectCreate Metaobject/553820750162; read back metafield value 350 number_integer and metaobject fields question/answer",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "09:30",
   "cap": "cap-11",
   "capability": "Configure shipping rates and print labels",
   "task": "Add rate AgentDrives Express 9.99 EUR to the Deutschland zone of the General profile, read back",
   "route": "cli",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "deliveryProfileUpdate methodDefinitionsToCreate -> no userErrors; read back zone Deutschland methods include AgentDrives Express 9.99",
   "notes": "Labels need an order (write_orders not granted on preview store, no checkout payment) so label printing not tested",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "09:45",
   "cap": "cap-14",
   "capability": "Customize checkout with branding and extensions",
   "task": "checkoutBrandingUpsert accent #1F6FEB, corner radius 6 on the published checkout profile",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "ACCESS_DENIED: Access denied for checkoutBrandingUpsert field. Required access: access to checkout branding settings and the shop must be on a Plus plan or a Development store plan.",
   "notes": "Preview store plan; checkout branding API is Plus or dev store only",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "10:09",
   "cap": "cap-18",
   "capability": "Translate and localize store content for markets",
   "task": "Register a French title for the mug",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "translationsRegister -> userErrors INVALID_LOCALE_FOR_SHOP Locale is not a valid locale for the shop; shopLocaleEnable -> ACCESS_DENIED Required access: write_locales access scope (not grantable on preview store)",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "10:09",
   "cap": "cap-21",
   "capability": "Build a headless/custom storefront (Hydrogen, Storefront API)",
   "task": "Create a Storefront API token for our preview store",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "storefrontAccessTokenCreate -> Access denied for storefrontAccessTokenCreate field.",
   "notes": "Preview store scope set has no unauthenticated_* scopes",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "no"
   }
  },
  {
   "t": "10:39",
   "cap": "cap-19",
   "capability": "Offer product bundles and multipacks",
   "task": "Create bundle AgentDrives Mug Duo = 2x Test Mug (White/Black), poll operation, read back components",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "First call used a wrong componentOptionId -> userError Mapping of components targeting products need to map all of the options...; corrected with ProductOption/13908273824082 -> ProductBundleOperation/77743948114 CREATED; productOperation COMPLETE, Product/11205797609810 bundleComponents quantity 2 AgentDrives Test Mug",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "docs_match": "match",
    "recoverable": "yes"
   }
  },
  {
   "t": "12:02",
   "cap": "cap-04",
   "capability": "Fulfill, track, and manage orders",
   "task": "Create a test draft order / order for the mug, then fulfill it",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "orders(first:5) -> [] (read_orders works); draftOrderCreate -> Access denied ... Required access: write_draft_orders; orderCreate -> Access denied ... Required access: write_orders",
   "notes": "Preview store token is read-only for orders and cannot be widened (store auth unavailable for preview stores); a claimed store needs a Shopify account behind Cloudflare Turnstile",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "12:02",
   "cap": "cap-12",
   "capability": "Sell internationally with localized pricing/currency (Shopify Markets)",
   "task": "marketCreate AgentDrives FR for France",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Access denied for marketCreate field. Required access: read_markets ... write_markets",
   "notes": "scope not grantable on preview store",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "12:02",
   "cap": "cap-13",
   "capability": "Run wholesale/B2B storefronts with custom catalogs",
   "task": "companyCreate AgentDrives",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Access denied for companyCreate field. Required access: write_customers or write_companies. Also: The shop must have access to B2B. Some operations may require additional plan capabilities.",
   "notes": "B2B needs plan access and scopes the preview store lacks",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "12:02",
   "cap": "cap-26",
   "capability": "Set brand assets (logo, colors) applied across store and checkout",
   "task": "Read/set shop brand via Admin GraphQL",
   "route": "cli",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "query shop { brand } -> Field brand doesnt exist on type Shop (Admin 2026-10); 484 mutations introspected, none for brand (only checkoutBrandingUpsert, which is Plus/dev-store only)",
   "notes": "Brand settings appear to be admin-UI only on Admin API 2026-10",
   "quality": {
    "error_legibility": "clear",
    "docs_match": "drift",
    "recoverable": "no"
   }
  },
  {
   "t": "12:03",
   "cap": "cap-28",
   "capability": "Buy and connect a custom domain",
   "task": "Check availability and price of agentdrivestest.com via Setup MCP generate-domain-names (no auth)",
   "route": "mcp",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "generate-domain-names -> agentdrivestest.com available true, price 16.00 USD, with signupUrl admin.shopify.com/signup?extra[selected_domain]=...",
   "notes": "Buying needs payment and an account; not attempted (no payment allowed). No domain mutation in Admin API mutation list."
  },
  {
   "t": "12:03",
   "cap": "cap-25",
   "capability": "Manage store/app resources from the Shopify CLI",
   "task": "Create store, run Admin GraphQL reads and writes with shopify store execute",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "shopify store create preview + store execute (queries, and mutations with --allow-mutations) created and read back products, inventory, metaobjects, bundle, shipping rate; store auth on preview store -> clear error listing the grantable scopes",
   "notes": "shopify doc search needs --query flag; positional text gives a confusing Failed to prompt error",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "docs_match": "match",
    "recoverable": "yes"
   }
  },
  {
   "t": "12:03",
   "cap": "cap-23",
   "capability": "Expose store to AI shopping agents/chat checkout (Agentic Storefronts, UCP)",
   "task": "Check the UCP surface on Shopify demo store mock.shop: /.well-known/ucp and its UCP MCP",
   "route": "mcp",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "mock.shop/.well-known/ucp -> ucp version 2026-08-25, service dev.ucp.shopping over mcp at https://mock.shop/api/ucp/mcp, capabilities cart + catalog.search; tools/list: search_catalog, create_cart, get_cart, update_cart, cancel_cart; search_catalog with profile https://agentdrives.com/ -> -32001 The agent profile must return application/json (profile_malformed)",
   "notes": "We: we publish no UCP agent profile, so the buyer-side call stopped there. Turning agentic storefronts on for our own store not possible: preview storefront is password protected and channel settings are admin-only. MCP endpoint rejected MCP-Protocol-Version 2026-07-28 with -32600 Unsupported MCP-Protocol-Version.",
   "quality": {
    "error_legibility": "clear"
   }
  },
  {
   "t": "12:03",
   "cap": "cap-21",
   "capability": "Build a headless/custom storefront (Hydrogen, Storefront API)",
   "task": "Query catalog and create a cart with the Storefront API on Shopify public demo store mock.shop",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "POST https://mock.shop/api products -> Slides 25.0 CAD; cartCreate 2x Slides -> cart id + checkoutUrl; cart(id) read back totalQuantity 2, total 50.0 CAD",
   "notes": "Works keyless on the demo store only; on our own store storefrontAccessTokenCreate is access denied",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "12:03",
   "cap": "cap-09",
   "capability": "Use Sidekick AI assistant",
   "task": "Reach Sidekick",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Sidekick lives in admin.shopify.com; admin login goes through accounts.shopify.com, which answers 403 cf-mitigated: challenge headless and Cloudflare Verify you are human in the browser",
   "notes": "no API"
  },
  {
   "t": "12:03",
   "cap": "cap-03",
   "capability": "Take customer payment through Shopify Checkout / Shop Pay",
   "task": "Check out on own store",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Preview storefront redirects to /password; accounts sign-in behind Cloudflare challenge; we may not pay",
   "notes": ""
  },
  {
   "t": "12:03",
   "cap": "cap-05",
   "capability": "Accept and process payments",
   "task": "Set up payments / read transactions",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No orders possible (write_orders/draft orders denied); payment setup is admin-only behind the account sign-in (Cloudflare challenge)",
   "notes": ""
  },
  {
   "t": "12:03",
   "cap": "cap-06",
   "capability": "Sell in person via POS",
   "task": "POS sale",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "POS needs the POS app and a logged-in staff account; account sign-in behind Cloudflare challenge",
   "notes": ""
  },
  {
   "t": "12:03",
   "cap": "cap-15",
   "capability": "Add staff accounts with role permissions",
   "task": "Add staff",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No staff mutation exposed to the preview token; Setup MCP states staff management mutations are blocked; admin behind Cloudflare challenge",
   "notes": ""
  },
  {
   "t": "12:03",
   "cap": "cap-17",
   "capability": "Customize storefront search and discovery",
   "task": "Configure Search & Discovery",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Search & Discovery is an admin app; admin behind Cloudflare challenge",
   "notes": ""
  },
  {
   "t": "12:03",
   "cap": "cap-20",
   "capability": "Shopify Capital",
   "task": "check eligibility",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "Capital offers need an active selling store on a paid plan with sales history",
   "notes": "not reachable from a preview store"
  },
  {
   "t": "12:03",
   "cap": "cap-22",
   "capability": "Build and publish third-party apps",
   "task": "shopify app init / Dev Dashboard app",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Needs a developer account; dev.shopify.com/dashboard redirects to accounts.shopify.com which shows Cloudflare Verify you are human",
   "notes": ""
  },
  {
   "t": "12:03",
   "cap": "cap-27",
   "capability": "Install apps from the App Store",
   "task": "install an app",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "App install consent runs in admin.shopify.com; admin login behind Cloudflare challenge",
   "notes": ""
  },
  {
   "t": "12:03",
   "cap": "cap-29",
   "capability": "Choose/change subscription plan",
   "task": "pick a plan",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Preview store plan Preview; plan choice requires claiming the store with a Shopify account (sign-up behind Cloudflare Turnstile); no billing API",
   "notes": ""
  },
  {
   "t": "12:03",
   "cap": "cap-30",
   "capability": "24/7 support",
   "task": "contact support",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "Would mean messaging real people; not allowed by drive rules",
   "notes": ""
  },
  {
   "t": "12:15",
   "cap": "new-01",
   "capability": "Create discount codes",
   "task": "discountCodeBasicCreate AGENTDRIVES10 10% off, read back",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "DiscountCodeNode/1934983987538 created; codeDiscountNodes lists AgentDrives 10 / AGENTDRIVES10",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "13:20",
   "cap": "delete",
   "capability": "delete account and data",
   "task": "Delete everything created, then the preview store",
   "route": "cli",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Deleted via Admin GraphQL: 2 products (productDelete), discount, metaobject + definition, page, theme snippet, shipping rate; read back products [] discounts []. shopify store delete --store [redacted] --force -> Could not determine which organization owns [redacted].",
   "notes": "store delete is for dev stores only; the preview store is described as temporary but its lifetime is not stated where we looked; no Shopify account was created, so no account to delete",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "no"
   }
  },
  {
   "t": "13:20",
   "cap": "pay",
   "capability": "pay step",
   "task": "Probe agent payment rails and self-serve purchase",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "x402./mpp./agents.shopify.com -> 404 Store unavailable; www.shopify.com/.well-known/ucp 404; no openapi.json; x402 Bazaar and mpp.dev list no Shopify-run service (mpp.dev has third-party KicksDB with /v3/shopify/* routes); free-trial page: Start for free, keep building for €1/month; plan purchase happens in the admin after sign-up, which sits behind Cloudflare Verify you are human; preview store plan shows Preview and cannot be upgraded by API",
   "notes": "No 402 challenge anywhere on Shopify domains; Setup MCP has no billing tools"
  },
  {
   "t": "13:20",
   "cap": "cancel",
   "capability": "cancel plan",
   "task": "cancel",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No plan was started",
   "notes": ""
  },
  {
   "t": "13:20",
   "cap": "verify",
   "capability": "verify email",
   "task": "verify",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "Account sign-up stopped at Cloudflare challenge before any mail; preview store needs no email",
   "notes": ""
  },
  {
   "t": "13:35",
   "cap": "cap-21",
   "capability": "Build a headless/custom storefront (Hydrogen, Storefront API)",
   "task": "Tokenless Storefront API query on our preview store",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "POST https://[redacted]/api/2026-10/graphql.json -> HTTP 400 Online Store channel is locked.",
   "notes": "Preview storefront is password-locked until the store is claimed and on a plan",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "13:42",
   "cap": "discovery",
   "capability": "Setup MCP OAuth for our own client",
   "task": "GET setup.shopify.com/oauth/authorize with PKCE, CIMD-style client_id URL, loopback redirect, resource=https://setup.shopify.com/mcp",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "HTTP 400 {\"error\":\"invalid_request\",\"error_description\":\"redirect_uri is not in the allowed origins list\"}",
   "notes": "Only pre-registered host integrations (ChatGPT, Claude, Perplexity) can connect, as agents.md says; no DCR, no CIMD",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "13:58",
   "cap": "discovery",
   "capability": "Dev MCP (stdio)",
   "task": "initialize + tools/list on @shopify/dev-mcp 1.16.0",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "initialize offering 2026-07-28 answered 2025-11-25, serverInfo shopify-dev-mcp 1.16.0; tools: feedback, learn_shopify_api, search_docs_chunks, validate, validate_theme",
   "notes": "docs/schema channel, no store access"
  }
 ],
 "stale": false,
 "icon": "/logos/shopify.png",
 "monitored": false,
 "verdict": "Gets in on its own: L2 · Gets in. Through the documented no-account route, our agent ran the CLI and created a working store with no email. It then used the Admin API for products, inventory, themes, metaobytes, bundles, shipping and discounts, reading each back through GraphQL. Account sign-up stopped at a Cloudflare \"Verify you are human\" challenge, so orders, customers, payments and plans stayed out of reach. Our agent found no purchase path on Shopify's own domains and started no paid plan, so there was nothing to cancel. It deleted every resource it created, but the store itself could not be deleted: the CLI answered that it could not determine which organization owns it.",
 "page": "https://agentdrives.com/tools/shopify?via=api"
}