Apps on the agent doors
How what a merchant's installed apps add reaches AI agents buying over MCP, UCP and ACP.
A merchant's installed apps add to what an AI agent sees and gets at their shop. Three kinds of contribution reach the agent doors, each from the release that shop approved.
Checkout functions
Checkout functions run wherever a basket is priced: the shop's own checkout, ACP, UCP, MCP checkout, x402 and MPP. A function runs when a basket is created and each time it changes. Its answer is kept on the basket, so placing the order charges what the agent was shown.
| What the app does | UCP | ACP |
|---|---|---|
| Takes an amount off | Each discount is its own entry in discounts.applied, titled with the app's name | Inside the one discount total |
| Changes delivery | The changed options in the fulfilment choices | The changed options in fulfillment_options |
| Hides a payment method | Left out of the session's payment_handlers, and refused at complete | Left out of the payment handlers, and refused at complete |
| Refuses the basket | A basket_refused message on the line, with the app's name and reason | An invalid message that requires_buyer_input |
A refused basket is needs_details until it changes; x402 answers 409 basket_refused. A function that fails or answers late is set aside, so a basket never fails because an app did. A function is told the channel, web or agent, so an app that answers by channel gives agents a different price.
Knowledge
An app with [knowledge] adds product attributes and links between products, merged into the shop's catalogue. What it adds reaches an agent through:
- search on every door: MCP
search_products, UCP catalogue search andsearch_catalogover UCP's MCP binding, with what each product matched; - Ask, over REST, MCP and UCP;
- MCP
get_product, inattributes, andrelated_products, with the app named inasserted_by.
It is not in the ACP product feed or in a UCP product record, which carry the shop's own fields.
Tools
An app's [[mcp.tools]] are offered on the shop's MCP server, named plugin_<app>_<tool>, with the app named in each description. They are not on UCP's MCP binding, whose tools are the protocol's own.
Tools an app gives the merchant's own assistant are a separate list: see Tools for the merchant's assistant.