Agentic commerce
AI assistants now shop for people. Google AI Mode and Gemini can put a product in a basket and pay with Google Pay without the buyer ever opening your site. ChatGPT recommends products from the feeds merchants send it. And any MCP client (Claude, Cursor, a ChatGPT connector) can search a store that runs an MCP server. This page explains how KahunaCart takes part, what an agent can and cannot do, and how to set up each platform.
This is the shopper's side. To run your own store from an AI assistant, see Run the store from an AI assistant.
Important
Everything here is off until you turn it on. One master switch, agentic.enabled, sits above every part and ships off, on a new install and on upgrade. While it is off the store behaves exactly as it did in 1.2.14: every agent URL answers 404 and the product markup is unchanged, whatever the other switches say.
Before you begin
- KahunaCart 1.3.0 or later.
- The store served over HTTPS. For Google's native checkout, Grav must also sit at the root of its domain, because
/.well-known/ucphas to answer at the host root. - The job worker running, because feeds are built and order webhooks are sent in the background.
bin/plugin kahunacart statussays whether it is. - For native Google Pay checkout, the Stripe provider 1.2.4 or later.
The four parts
| Part | What it does | Switch | Page |
|---|---|---|---|
| Structured data | Product pages state the brand, GTIN and MPN, the condition, who sells, per-country shipping, the return policy and, optionally, one Product per variant in a ProductGroup. The shop's front page names the store as an OnlineStore. ?variant= links open a product on one variant. |
on with agentic.enabled, inert until the seller and policy settings are filled in |
Storefront → Search engines |
| Product feeds | A Google Merchant Center feed with a supplemental checkout feed, and an OpenAI feed you push by SFTP. How products get into Google Shopping, AI Mode, Gemini and ChatGPT. | feeds.enabled |
Product feeds |
| Storefront MCP | A public MCP server at {base}/mcp with thirteen tools: search the catalog, look up products, answer policy questions, build a cart, and create and complete a checkout. It needs no login, because it can do nothing a shopper on the storefront cannot. |
storefront_mcp.enabled |
Storefront MCP |
| UCP checkout | The Universal Commerce Protocol that Google's agent checkout speaks: a business profile at /.well-known/ucp, checkout and cart sessions, the continue_url handoff, Google Pay through Stripe, signed order webhooks and Mark delivered. |
ucp.enabled |
UCP checkout |
The parts build on each other. Structured data and feeds let agents find products. The MCP endpoint and UCP let them buy. You can run the first two on their own, and a store that only wants to be found in ChatGPT needs nothing but the OpenAI feed.
What an agent can do
- Search the catalog and read products, variants, prices, pictures, options and availability, exactly as a guest sees them.
- Read your policies: terms, privacy, returns, shipping and the FAQ, from the pages you link.
- Build a cart and hand the buyer to your own checkout through a
continue_url, where every payment provider you run works as usual. - Create a checkout, set the buyer's address and a shipping method, apply a coupon code, and see your real totals, with tax and shipping worked out by the same calculator the storefront uses.
- Complete the checkout with Google Pay, when your store has a provider that takes agent payments. The order is placed and paid, and gets the same confirmation email, stock movement and history as any other order.
- Read back an order it placed, and hear about shipping, delivery, cancellations and refunds through signed order webhooks.
- Choose click and collect through UCP when eligible collection points are offered. Free collection is free in every currency. A charged point needs an amount in the checkout’s currency. See UCP checkout.
What an agent cannot do
- See anything a logged-out visitor cannot. Drafts, scheduled products, unlisted products and anything held back for a customer group are invisible, lookup by id included. A guest is placed in the store's default group, so a product restricted to groups that include the default group is open to agents. A members-only product restricted to other groups is never offered: not in the feeds, the MCP and UCP catalog tools, carts or checkouts. Stock quantities, costs, internal custom fields and admin data are never sent.
- Sign in. There is no identity linking, so an agent never acts as one of your customer accounts. Anything that depends on who is signed in (a group's price list or discount, store credit, a saved address) does not apply to agent checkouts.
- Set a price. Prices, tax, shipping and totals come from the store. Anything the agent sends as a price is ignored.
- Pay natively for everything. Some products are never checked out by an agent, whatever you set: a required add-on option or buy-button field, pay what you want, a deposit, a prerequisite, a members-only product, a subscription, a service, a backorder and a final sale. Digital products and used or refurbished ones are left out automatically, and you can allow them per product. Those carts still work: the buyer finishes on your checkout through the
continue_url. See Agent checkout. - Pay any other way. Google Pay through a provider with the
agent_paymentscapability is the only native payment. Everything else is thecontinue_urlhandoff. - Touch a shopper's own cart. The MCP and UCP endpoints never read or write the browser session, so an agent's cart and a shopper's cart never meet until the buyer follows a
continue_url. - Send card numbers. A card number anywhere in a request is refused, as on every other KahunaCart route. The Google Pay token reaches the provider and is never stored, logged or echoed.
No customer record is created for an agent session until the checkout completes. Browsing, carts and abandoned checkouts leave no customer behind, and an agent's basket is never sent a cart-recovery email.
Agent orders carry the agent attribution, with the platform as the source and the protocol as the medium, so they show up in reports and the order list like any other traffic source. A basket an agent started and a person finished through the continue_url still counts as an agent sale. See Analytics → Where an order came from.
Set up the basics
Whatever platform you are setting up for, start under Settings → Agentic Commerce in the store admin. Every part reads these settings; each key is in Configuration → Agentic commerce.
- Turn agentic commerce on. Switch on the Agentic Commerce toggle at the top of the tab (
agentic.enabled: true). Nothing else on this page takes effect until it is on. - Fill in Seller. The store name (empty uses the invoice store name, then the site title), a default brand for products that set none, a logo, and a support email and phone.
- Fill in Store policies. Links to your terms, privacy, returns, shipping and FAQ pages. Site-relative links such as
/termsare fine. UCP will not start without terms and privacy, and no return policy is published anywhere untilpolicies.refund_urlis set. - Set Returns. Whether you accept returns, the window, the countries, the method and who pays.
- Write the Shipping summary. One row per country with a rate, an optional free-over threshold, and handling and transit days. Structured data and feeds need a price with no address to quote it for, which your shipping zones cannot give, so this is written by hand. Leave it empty to publish no shipping details.
- Add product data. Give products a brand, GTIN or MPN, a condition and a Google product category where you have them, in the product editor's Product Data fieldset or through the CSV importer. Nothing is required, and a product with none is still listed.
- Click Save.
Product pages now carry the extra structured data. The feeds, the MCP endpoint and UCP each still need their own switch.
Set up Google AI Mode and Gemini
Google finds products through Merchant Center and buys them through UCP.
- Serve the store over HTTPS at the root of its domain. A Grav installed in a subdirectory cannot take part in UCP. Set
system.custom_base_urlwhen the site sits behind a proxy. - Switch the feeds on (
feeds.enabled) and registerhttps://your-store.example/shop/feeds/google.tsvin Merchant Center as a scheduled fetch. See Product feeds → Set up Google Merchant Center. - Install and configure the Stripe provider, if you want native checkout rather than the handoff. Stripe is the first provider with the
agent_paymentscapability. - Switch UCP on (
ucp.enabled). The worker makes a signing key on its next tick, or runbin/plugin kahunacart agentic:keys. - Set up Google Pay. Put your Google Pay and Wallet Console merchant id in
ucp.google_pay.merchant_id, and leaveucp.google_pay.environmentonTESTwhile you try it. See UCP checkout → Google Pay with Stripe. - Check readiness. The Agentic commerce screen in the store admin and
bin/plugin kahunacart checkboth list everything still standing between the store and a working profile./.well-known/ucpanswers404until the list is empty. - Onboard in Merchant Center. Give Google your profile URL. When Google issues an API key and an order webhook URL, put them in
ucp.google.api_keyanducp.google.order_webhook_url. Both are stored encrypted. - Go live. Once Google approves the integration, set
ucp.google_pay.environmenttoPRODUCTIONand put Stripe in live mode. The doctor warns while Google Pay is inTESTbeside a live Stripe account.
Important
KahunaCart sends the order webhook's Webhook-Timestamp header as unix seconds, which is what the UCP OpenAPI declares. Google's order-lifecycle guide shows an ISO 8601 string in its prose. Check which form Google accepts during Merchant Center onboarding.
While UCP is on, the Google feeds carry the native_commerce column: TRUE for each variant an agent may check out and FALSE for the rest. Switch UCP off and the supplemental google-checkout.tsv writes FALSE on every row from its next build, which tells Google to stop offering checkout. Press Rebuild feeds after switching UCP either way, so Google hears about it before the files reach feeds.max_age.
PayPal and other providers. Only Stripe charges Google Pay tokens today. PayPal's Google Pay support is planned for a later phase. A store on any other provider still sells to Google's agents: the buyer finishes on your own checkout through the continue_url.
Set up ChatGPT
ChatGPT finds products through the OpenAI product feed. OpenAI takes the file by SFTP. KahunaCart builds it, and a cron line pushes it.
- Register as a merchant with OpenAI and get the SFTP host, user and key.
- Fill in Seller and Store policies first. The OpenAI feed carries the seller name, the privacy and terms links and the return policy, and requires a brand on every row, so the seller name stands in for a product with none.
- Add a nightly cron line that runs
bin/plugin kahunacart feeds:build --feed=openai --out=/var/feedsand pushesopenai.jsonl.gzwithsftp. See Product feeds → Set up ChatGPT.
Named with --feed, the file is built even while feeds.enabled or agentic.enabled is off, so a store that only pushes to OpenAI serves nothing under {base}/feeds.
Note
ChatGPT's in-chat checkout (ACP) is not built, on purpose. OpenAI dropped in-chat checkout in March 2026, so there is nothing for it to talk to. A buyer ChatGPT sends to your store buys on the product page, like any other visitor. The ACP product feed, which is what ChatGPT still reads, is built. A ChatGPT connector pointed at the storefront MCP endpoint is an MCP client, below.
Set up an MCP client
- Switch the endpoint on:
storefront_mcp.enabled: true. - Give the client
https://your-store.example/shop/mcp(your storefront route plus/mcp) as a Streamable HTTP server. There is nothing to authenticate. - A web app calling the endpoint from a browser page needs its origin in
storefront_mcp.allowed_origins. Server-to-server clients send noOriginand need nothing.
A plain MCP client, one that sends no UCP profile, may browse, build carts and create checkouts while storefront_mcp.allow_anonymous is on (the default). It has no payment handler, so its checkouts end at the continue_url and the buyer pays on your checkout. Turn allow_anonymous off to serve UCP platforms only. See Storefront MCP.
Switch a part off
| To stop | Do this | What happens |
|---|---|---|
| Product feeds | feeds.enabled: false, or feeds: false |
Every URL under {base}/feeds answers 404 and nothing is built. Files already built stay on disk, unserved. |
| One feed | feeds.google: false or feeds.openai: false |
That feed's URLs answer 404, and the next full build deletes its files. |
| The MCP endpoint | storefront_mcp.enabled: false, or storefront_mcp: false |
{base}/mcp answers 404 and the UCP profile stops listing the MCP transport. |
| Anonymous MCP clients | storefront_mcp.allow_anonymous: false |
Only calls carrying a UCP profile are served. |
| UCP | ucp.enabled: false, or ucp: false |
/.well-known/ucp and everything under {base}/ucp answer 404, and the supplemental Google feed writes native_commerce FALSE on its next build. Orders already placed keep their attribution. |
| Unknown UCP platforms | ucp.accept_unknown_platforms: false, and list hosts in ucp.platforms |
Only the listed platforms may transact. Every other platform gets 403. |
| Order webhooks | ucp.order_webhooks: false |
The profile stops listing the order capability and nothing more is sent. |
| Agent checkout for one product | Agent checkout: Never in the product editor | Agents never check the product out and the Google feed says FALSE for it. An agent can still put it in a cart and hand the buyer to your checkout. |
| Part of the new structured data | seo.organization, seo.shipping_details or seo.return_policy set to false |
That block leaves the page. |
| All of it | agentic.enabled: false |
The store behaves as it did in 1.2.14. Every agent URL answers 404, no feed, webhook or signing key work runs, the product JSON-LD is what it was before byte for byte, and the product editor hides Agent checkout. The part settings are kept for when it comes back on. |
Keep an eye on it
- The Agentic commerce screen, under Setup in the store admin, shows whether UCP is ready and what is missing, the profile, REST and MCP addresses, the signing key, each feed file with its build time, and the open agent sessions. It has Rebuild feeds and Rotate signing key buttons. The same data is
get_agentic_status,list_feedsandlist_agent_sessionsover the REST API. - The doctor.
bin/plugin kahunacart checkruns the agentic readiness check while agentic commerce is on. - Mark delivered. Google's order lifecycle expects a delivered event. Press Mark delivered on a shipment when the parcel arrives, or let a carrier add-on do it. See Mark a shipment delivered.
- Your CDN. Keep
/.well-known/ucp,{base}/ucp/*,{base}/mcpand{base}/feeds/*out of "block AI bots" rules and JavaScript challenges. See Hardening → Agent endpoints.