Ce guide décrit un exemple d'intégration pour une expérience de commande de courses à l'aide de l'UCP (Universal Commerce Protocol). Le protocole MCP (Model Context Protocol) et le REST sont tous deux des liaisons de transport prises en charge, mais le MCP est recommandé afin de mieux s'aligner sur la mission des Applis connectées.
Dans ce scénario, un utilisateur a trouvé une recette en ligne (non détaillée dans ce guide) et souhaite acheter les ingrédients nécessaires :
- 4 cuillères à soupe de beurre salé
- 3 gousses d'ail
- 1 oignon jaune
- 1 boîte de 800 g de tomates pelées entières
- 225 g de pâtes
Transports
Cette section décrit les principales différences entre les deux liaisons de transport.
Protocole MCP (Model Context Protocol)
Le transport MCP permet aux agents IA d'interagir avec vos fonctionnalités à l'aide d'appels d'outils structurés via JSON-RPC 2.0 :
- Protocole de communication : fonctionne sur JSON-RPC 2.0 (stdio, SSE ou Stream).
- Enveloppe de requête : les requêtes appellent
tools/call, oùparams.nameidentifie l'outil (par exemple,search_locations,search_catalog,create_cart,update_cart,get_cart,lookup_locations,cancel_cart). Les métadonnées (telles queucp-agentetidempotency-key) sont transmises dansparams.arguments.meta, tandis que les paramètres de fonctionnalité sont encapsulés dans un objet conteneur spécifique à la fonctionnalité (location,catalogoucart). - Enveloppe de réponse : les réponses renvoient un résultat JSON-RPC 2.0 avec des charges utiles encapsulées dans
result.structuredContent, contenant des métadonnées de fonctionnalitéucpde premier niveau ainsi que des champs de réponse de fonctionnalité.
REST
Le transport REST utilise les modèles de ressources HTTP/1.1+ et RESTful standards :
- Protocole de communication et sécurité : les requêtes et les réponses utilisent
Content-Type: application/jsonvia HTTPS (TLS 1.3 minimum). - Méthodes et chemins d'accès : les verbes HTTP standards sont directement mappés aux fonctionnalités :
POST /locations/search: rechercher des lieux et des adresses enregistréesPOST /locations/lookup: rechercher des lieux par identifiantPOST /catalog/search: rechercher des produits et leur disponibilitéPOST /carts: créer une session de panierPUT /carts/{id}: mettre à jour une session de panierGET /carts/{id}: récupérer une session de panierPOST /carts/{id}/cancel: annuler une session de panier
- En-têtes : les métadonnées sont transmises via des en-têtes HTTP standards :
Host: nom d'hôte du serveur cible, par exemplebusiness.example.comUCP-Agent: URI du profil de plate-forme dans la syntaxe de champ structuré du dictionnaire RFC 8941, par exempleprofile="https://platform.example/profiles/grocery-agent.json"Idempotency-Key: chaîne UUID pour les opérations de modification d'état (comme l'annulation du panier) pour des nouvelles tentatives sécuriséesRequest-Id: identifiant de requête facultatif pour le traçage de bout en bout
- Charges utiles et réponses : les corps de requête et de réponse contiennent directement le schéma JSON de la fonctionnalité brute, sans enveloppes JSON-RPC ni conteneurs de wrapper d'outil. Les réponses réussies renvoient des codes d'état HTTP standards (
200 OK,201 Created).
Présentation du flux
Le tableau suivant décrit la séquence d'appels entre l'agent Google et votre serveur :
| Étape | Opération | Action de l'utilisateur et description | Réponse |
|---|---|---|---|
| 1 | search_locations |
Rechercher des adresses de magasins et des adresses de livraison enregistrées par l'utilisateur | Renvoie les adresses des magasins, les adresses de livraison enregistrées et les messages d'information pour indiquer à l'agent de désambiguïser la localisation |
| 2 | search_catalog |
Rechercher des produits d'après la localisation | Renvoie les produits, les prix et les variantes correspondants à l'aide des requêtes et des indices de localisation transmis dans la requête |
| 3 | create_cart |
Créer un panier avec les variantes sélectionnées | Renvoie les détails du panier et un continue_url pour le paiement |
| 4 | update_cart |
Mettre à jour le panier pour remplacer un produit choisi par une variante | Renvoie les détails du panier et un continue_url pour le paiement |
| 5 | get_cart |
Récupérer un panier créé précédemment pour reprendre une session | Renvoie les détails du panier et un continue_url pour le paiement |
| 6 | lookup_locations |
Rechercher les adresses de magasins et de livraison par identifiant chaque fois que l'UI du panier doit être présentée à l'utilisateur (pour afficher l'adresse sélectionnée dans l'interface) | Renvoie les adresses résolues de magasin et de livraison de l'acheteur |
| 7 | cancel_cart |
Annuler une session de panier lorsque l'utilisateur recommence ou abandonne la commande | Renvoie l'état du panier avant la suppression |
Par défaut, la livraison est considérée comme le mode de traitement de la commande. Les utilisateurs peuvent passer au retrait en magasin via une invite explicite.
Les parcours utilisateur couvrent trois scénarios. Ces scénarios dépendent de l'intention de traitement (livraison ou retrait) ainsi que des adresses de livraison et des lieux de retrait en magasin de l'utilisateur qui sont enregistrés dans votre système :
- Scénario A : livraison, une ou plusieurs adresses
- Scénario B : livraison, aucune adresse
- Scénario C : retrait, pas d'adresse de magasin
Recherche de lieux
Avant de rechercher dans le catalogue ou de créer un panier, l'agent effectue une recherche de lieux à l'aide de search_locations. Cette étape valide à la fois les adresses de magasins physiques et les adresses de livraison enregistrées par l'utilisateur dans son profil sur votre application, afin de les intégrer aux opérations UCP ultérieures (telles que la recherche dans le catalogue localisé et la gestion du panier).
- Opération/Outil :
search_locations - Fonctionnalité :
dev.ucp.common.location.search - Spécifications de transport : spécification MCP et spécification REST
Demande
MCP
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "search_locations", "arguments": { "meta": { "ucp-agent": { "profile": "https://platform.example/profiles/grocery-agent.json" } }, "location": {} } } }
REST
POST /locations/search HTTP/1.1 Host: business.example.com Content-Type: application/json Request-Id: 8ef9b0c2-78d1-4e4b-91c2-3e2ef0d3ab01 UCP-Agent: profile="https://platform.example/profiles/grocery-agent.json" {}
Scénario A : Livraison, une ou plusieurs adresses
Dans ce scénario, l'utilisateur souhaite se faire livrer des courses, et une ou plusieurs adresses de livraison sont associées à son compte dans votre système, qui contient par ailleurs un certain nombre d'adresses de magasins (non utilisées dans le parcours utilisateur de livraison).
- L'agent appelle
search_locations. - Votre serveur UCP renvoie l'adresse de magasin enregistrée par l'utilisateur dans la liste
locations, ainsi que ses adresses de livraison figurant dans la listebuyer_address_locations. - Dans le cas de plusieurs adresses de livraison, le modèle traite la première adresse de la liste ("addr_user_home_01") comme l'adresse sélectionnée ou préférée. Vous devez renvoyer les adresses par ordre de préférence de l'utilisateur. Si aucun mécanisme de préférence n'existe, procédez par ordre d'utilisation, du plus récent au plus ancien.
- Les requêtes d'opération de catalogue et de panier suivantes transmettent l'ID de l'adresse de livraison à titre d'indication dans
context.buyer_address_location. - L'utilisateur peut modifier son adresse de livraison plus loin dans le parcours d'achat, ce qui entraîne la reconstruction du panier pour la nouvelle localisation, avec d'éventuelles mises à jour des articles selon les stocks locaux.
Réponse
Vous renvoyez l'adresse du magasin et les adresses de livraison enregistrées par l'utilisateur. Pour optimiser les performances, limitez la liste à 10 entrées maximum.
MCP
{ "jsonrpc": "2.0", "id": 1, "result": { "structuredContent": { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.common.location.search": [ { "version": "2026-08-25" } ] } }, "locations": [ { "id": "loc_valley_grocers_chicago_clark", "name": "Valley Grocers - Lincoln Park", "address": { "street_address": "2200 N Clark St", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60614" } } ], "buyer_address_locations": [ { "id": "addr_user_home_01", "name": "Home", "address": { "street_address": "2200 N Clark St, Apt 4B", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60614" } }, { "id": "addr_user_work_02", "name": "Work", "address": { "street_address": "100 S State St, Floor 12", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60603" } } ] } } }
REST
HTTP/1.1 200 OK Content-Type: application/json { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.common.location.search": [ { "version": "2026-08-25" } ] } }, "locations": [ { "id": "loc_valley_grocers_chicago_clark", "name": "Valley Grocers - Lincoln Park", "address": { "street_address": "2200 N Clark St", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60614" } } ], "buyer_address_locations": [ { "id": "addr_user_home_01", "name": "Home", "address": { "street_address": "2200 N Clark St, Apt 4B", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60614" } }, { "id": "addr_user_work_02", "name": "Work", "address": { "street_address": "100 S State St, Floor 12", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60603" } } ] }
Réponse (partenaires de livraison uniquement)
Les partenaires qui ne proposent que la livraison doivent renvoyer le message d'information pickup_not_supported dans search_locations. Respectez la formulation exacte du message ci-dessous :
MCP
{ "jsonrpc": "2.0", "id": 1, "result": { "structuredContent": { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.common.location.search": [ { "version": "2026-08-25" } ] } }, "locations": [], "messages": [ { "type": "info", "code": "pickup_not_supported", "content": "In store pickup is not supported. Only delivery is available." } ], "buyer_address_locations": [ { "id": "addr_user_home_01", "name": "Home", "address": { "street_address": "2200 N Clark St, Apt 4B", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60614" } }, { "id": "addr_user_work_02", "name": "Work", "address": { "street_address": "100 S State St, Floor 12", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60603" } } ] } } }
REST
HTTP/1.1 200 OK Content-Type: application/json { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.common.location.search": [ { "version": "2026-08-25" } ] } }, "locations": [], "messages": [ { "type": "info", "code": "pickup_not_supported", "content": "In store pickup is not supported. Only delivery is available." } ], "buyer_address_locations": [ { "id": "addr_user_home_01", "name": "Home", "address": { "street_address": "2200 N Clark St, Apt 4B", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60614" } }, { "id": "addr_user_work_02", "name": "Work", "address": { "street_address": "100 S State St, Floor 12", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60603" } } ] }
Scénario B : Livraison, aucune adresse
Dans ce scénario, l'utilisateur souhaite recevoir sa commande, mais aucune adresse de livraison n'est associée à son compte dans votre système (qui contient par ailleurs un certain nombre d'adresses de retrait en magasin). Le modèle invite l'utilisateur à saisir un code postal, qui est ensuite utilisé à titre d'indication dans les opérations ultérieures sur le catalogue et le panier. L'adresse de livraison finale est validée lors du règlement dans votre application ou sur votre site Web.
- L'agent appelle
search_locations. - Vous renvoyez les adresses de retrait en magasin enregistrées par l'utilisateur, une liste
buyer_address_locationsvide et un message d'information indiquant qu'aucune adresse de livraison n'est stockée dans le compte. - L'agent invite l'utilisateur à saisir son code postal.
- L'utilisateur fournit son code postal (par exemple,
60614). - Lors des requêtes d'opération de catalogue et de panier suivantes, l'agent transmet le code postal à titre d'indication dans
context.postal_code. L'adresse de livraison complète est saisie ultérieurement lors du processus de paiement sur votre site Web (continue_url).
Réponse
MCP
{ "jsonrpc": "2.0", "id": 1, "result": { "structuredContent": { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.common.location.search": [ { "version": "2026-08-25" } ] } }, "locations": [ { "id": "loc_valley_grocers_chicago_clark", "name": "Valley Grocers - Lincoln Park", "address": { "street_address": "2200 N Clark St", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60614" } } ], "buyer_address_locations": [], "messages": [ { "type": "info", "code": "no_delivery_addresses_stored", "content": "No delivery addresses stored on the linked account." } ] } } }
REST
HTTP/1.1 200 OK Content-Type: application/json { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.common.location.search": [ { "version": "2026-08-25" } ] } }, "locations": [ { "id": "loc_valley_grocers_chicago_clark", "name": "Valley Grocers - Lincoln Park", "address": { "street_address": "2200 N Clark St", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60614" } } ], "buyer_address_locations": [], "messages": [ { "type": "info", "code": "no_delivery_addresses_stored", "content": "No delivery addresses stored on the linked account." } ] }
Interaction de l'utilisateur :
- Requête de l'agent : l'agent demande "Quel est votre code postal de livraison ?".
- Réponse de l'utilisateur : l'utilisateur répond par
60614. - Action de l'agent : l'agent transmet ensuite
60614dans l'indication de localisationcontext.postal_codepour la recherche dans le catalogue et les opérations ultérieures sur le panier. - Traitement : la validation de l'adresse de livraison s'effectue au moment du paiement sur votre application ou votre site Web.
Réponse (adresse de livraison enregistrée requise)
Si vous exigez que l'utilisateur ait enregistré une adresse de livraison sur son compte associé pour poursuivre un parcours de livraison (au lieu de revenir à une indication de code postal), vous pouvez renvoyer la réponse d'erreur récupérable suivante à search_locations.
MCP
{ "jsonrpc": "2.0", "id": 1, "result": { "structuredContent": { "ucp": { "version": "2026-08-25", "status": "error", "capabilities": { "dev.ucp.common.location.search": [ { "version": "2026-08-25" } ] } }, "locations": [], "messages": [ { "type": "error", "code": "buyer_address_locations_required", "content": "The partner you are trying to connect with this tool doesn't have any saved delivery address for the linked account. Inform the user they must first add a delivery address for their linked account on partner's app/website, then continue the journey here.", "severity": "recoverable" } ], } } }
REST
HTTP/1.1 200 OK Content-Type: application/json { "ucp": { "version": "2026-08-25", "status": "error", "capabilities": { "dev.ucp.common.location.search": [ { "version": "2026-08-25" } ] } }, "locations": [], "messages": [ { "type": "error", "code": "buyer_address_locations_required", "content": "The partner you are trying to connect with this tool doesn't have any saved delivery address for the linked account. Inform the user they must first add a delivery address for their linked account on partner's app/website, then continue the journey here.", "severity": "recoverable" } ] }
Scénario C : retrait, pas d'adresse
Dans ce scénario, l'utilisateur exprime son intention de retirer une commande, mais n'a enregistré aucune adresse de retrait en magasin dans votre système.
- L'agent appelle
search_locations. - Vous renvoyez une liste vide pour
locationsetbuyer_address_locations, ainsi qu'un message d'information indiquant qu'aucune adresse de retrait en magasin n'a été enregistrée. - L'agent invite l'utilisateur à saisir son code postal.
- L'utilisateur fournit son code postal (par exemple,
60614). - L'agent émet un deuxième appel
search_locationsen spécifiantserves.address.postal_code. - Vous renvoyez une liste d'adresses de magasins susceptibles de couvrir ce code postal.
- S'il y a plusieurs adresses de magasins, le modèle traite la première de la liste comme l'adresse sélectionnée ou préférée. Vous devez renvoyer les adresses de magasins par ordre de préférence de l'utilisateur. Si aucun mécanisme de préférence n'existe, procédez par ordre d'utilisation, du plus récent au plus ancien.
- Les requêtes d'opérations de catalogue et de panier suivantes incluent l'ID du magasin dans
context.locationà titre d'indication (conformément à la demande d'extraction 642).
Réponse 1
MCP
{ "jsonrpc": "2.0", "id": 1, "result": { "structuredContent": { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.common.location.search": [ { "version": "2026-08-25" } ] } }, "locations": [], "buyer_address_locations": [], "messages": [ { "type": "info", "code": "no_pickup_locations_stored", "content": "No stored pickup store locations found for the linked account." }, { "type": "info", "code": "no_delivery_addresses_stored", "content": "No delivery addresses stored on the linked account." } ] } } }
REST
HTTP/1.1 200 OK Content-Type: application/json { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.common.location.search": [ { "version": "2026-08-25" } ] } }, "locations": [], "buyer_address_locations": [], "messages": [ { "type": "info", "code": "no_pickup_locations_stored", "content": "No stored pickup store locations found for the linked account." }, { "type": "info", "code": "no_delivery_addresses_stored", "content": "No delivery addresses stored on the linked account." } ] }
Interaction de l'utilisateur :
- Invite de l'agent : l'agent demande : "Indiquez votre code postal pour trouver des points de retrait en magasin à proximité."
- Réponse de l'utilisateur : l'utilisateur répond par
60614.
Requête 2 (recherche de magasins à proximité par code postal)
MCP
{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "search_locations", "arguments": { "meta": { "ucp-agent": { "profile": "https://platform.example/profiles/grocery-agent.json" } }, "location": { "serves": { "address": { "postal_code": "60614" } } } } } }
REST
POST /locations/search HTTP/1.1 Host: business.example.com Content-Type: application/json Request-Id: 8ef9b0c2-78d1-4e4b-91c2-3e2ef0d3ab02 UCP-Agent: profile="https://platform.example/profiles/grocery-agent.json" { "serves": { "address": { "postal_code": "60614" } } }
Réponse 2
MCP
{ "jsonrpc": "2.0", "id": 2, "result": { "structuredContent": { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.common.location.search": [ { "version": "2026-08-25" } ] } }, "locations": [ { "id": "loc_valley_grocers_chicago_clark", "name": "Valley Grocers - Lincoln Park", "address": { "street_address": "2200 N Clark St", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60614" } }, { "id": "loc_valley_grocers_chicago_halsted", "name": "Valley Grocers - Lakeview", "address": { "street_address": "3200 N Halsted St", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60657" } } ], "buyer_address_locations": [], "messages": [ { "type": "info", "code": "no_delivery_addresses_stored", "content": "No delivery addresses stored on the linked account." } ] } } }
REST
HTTP/1.1 200 OK Content-Type: application/json { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.common.location.search": [ { "version": "2026-08-25" } ] } }, "locations": [ { "id": "loc_valley_grocers_chicago_clark", "name": "Valley Grocers - Lincoln Park", "address": { "street_address": "2200 N Clark St", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60614" } }, { "id": "loc_valley_grocers_chicago_halsted", "name": "Valley Grocers - Lakeview", "address": { "street_address": "3200 N Halsted St", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60657" } } ], "buyer_address_locations": [], "messages": [ { "type": "info", "code": "no_delivery_addresses_stored", "content": "No delivery addresses stored on the linked account." } ] }
Sélection de l'utilisateur :
- Sélection de l'utilisateur : l'utilisateur sélectionne
Valley Grocers - Lincoln Park(loc_valley_grocers_chicago_clark). - Action de l'agent : l'agent procède ensuite à la recherche dans le catalogue, en transmettant
"location": "loc_valley_grocers_chicago_clark"danscontext.
Recherche dans le catalogue
L'agent recherche les ingrédients dans le catalogue du marchand. L'agent effectue un appel search_catalog par ingrédient. Pour la disponibilité localisée et la tarification spécifique au magasin, l'agent inclut l'indication de localisation validée à l'étape 1 dans l'objet context de la requête.
Les exemples suivants montrent la requête et la réponse pour la recherche de "beurre salé". L'agent répète ce processus pour les autres ingrédients : ail, oignon jaune, tomates pelées entières et pâtes.
- Opération/Outil :
search_catalog - Fonctionnalité :
dev.ucp.shopping.catalog.search(étendue avec des filtresdev.ucp.shopping.fulfillment) - Spécifications de transport : spécification MCP et spécification REST
Scénario A : livraison avec indication de localisation par l'adresse de l'acheteur
Dans un parcours de livraison où l'utilisateur a enregistré une ou plusieurs adresses de livraison, l'agent transmet l'identifiant de localisation correspondant (par exemple, "buyer_address_location": "addr_user_home_01") dans l'objet context afin de récupérer les articles du catalogue et les prix disponibles pour cette adresse.
Requête (beurre ; adresse de livraison enregistrée)
MCP
{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "search_catalog", "arguments": { "meta": { "ucp-agent": { "profile": "https://platform.example/profiles/grocery-agent.json" } }, "catalog": { "query": "salted butter", "context": { "buyer_address_location": "addr_user_home_01" } } } } }
REST
POST /catalog/search HTTP/1.1 Host: business.example.com Content-Type: application/json Request-Id: 8ef9b0c2-78d1-4e4b-91c2-3e2ef0d3ab03 UCP-Agent: profile="https://platform.example/profiles/grocery-agent.json" { "query": "salted butter", "context": { "buyer_address_location": "addr_user_home_01" } }
Scénario B : livraison avec indication de localisation par code postal
Dans un parcours de livraison où l'utilisateur n'a pas enregistré d'adresse de livraison (scénario B), l'agent transmet le code postal de livraison fourni par l'utilisateur (par exemple, "postal_code": "60614") dans l'objet context afin de récupérer les articles du catalogue et les prix disponibles pour cette zone.
Requête (beurre - livraison par code postal)
MCP
{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "search_catalog", "arguments": { "meta": { "ucp-agent": { "profile": "https://platform.example/profiles/grocery-agent.json" } }, "catalog": { "query": "salted butter", "context": { "postal_code": "60614" } } } } }
REST
POST /catalog/search HTTP/1.1 Host: business.example.com Content-Type: application/json Request-Id: 8ef9b0c2-78d1-4e4b-91c2-3e2ef0d3ab04 UCP-Agent: profile="https://platform.example/profiles/grocery-agent.json" { "query": "salted butter", "context": { "postal_code": "60614" } }
Scénario C : retrait avec indication de localisation du magasin
Dans un parcours de retrait, l'agent transmet l'identifiant de localisation du magasin sélectionné (par exemple, "location": "loc_valley_grocers_chicago_clark") dans l'objet context pour filtrer les résultats du catalogue et vérifier les disponibilités dans ce magasin spécifique.
Requête (beurre ; retrait)
MCP
{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "search_catalog", "arguments": { "meta": { "ucp-agent": { "profile": "https://platform.example/profiles/grocery-agent.json" } }, "catalog": { "query": "salted butter", "context": { "location": "loc_valley_grocers_chicago_clark" } } } } }
REST
POST /catalog/search HTTP/1.1 Host: business.example.com Content-Type: application/json Request-Id: 8ef9b0c2-78d1-4e4b-91c2-3e2ef0d3ab05 UCP-Agent: profile="https://platform.example/profiles/grocery-agent.json" { "query": "salted butter", "context": { "location": "loc_valley_grocers_chicago_clark" } }
Réponse (beurre)
Dans tous les scénarios, la réponse contient la meilleure correspondance pour "beurre salé", avec le prix, la disponibilité pour la livraison ou le retrait en fonction du contexte de localisation fourni, et les variantes de taille.
MCP
{ "jsonrpc": "2.0", "id": 2, "result": { "structuredContent": { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.shopping.catalog.search": [ { "version": "2026-08-25" } ] } }, "products": [ { "id": "prod_butter_valley_dairy", "title": "Valley Dairy Salted Butter", "description": { "plain": "Premium salted butter sticks." }, "price_range": { "min": { "amount": 299, "currency": "USD" }, "max": { "amount": 499, "currency": "USD" } }, "variants": [ { "id": "var_butter_valley_dairy_8oz", "title": "Valley Dairy Salted Butter (8 oz)", "description": { "plain": "Valley Dairy Salted Butter (8 oz) pack." }, "price": { "amount": 299, "currency": "USD" }, "availability": { "status": "in_stock" } }, { "id": "var_butter_valley_dairy_16oz", "title": "Valley Dairy Salted Butter (16 oz)", "description": { "plain": "Valley Dairy Salted Butter (16 oz) pack." }, "price": { "amount": 499, "currency": "USD" }, "availability": { "status": "in_stock" } } ] } ] } } }
REST
HTTP/1.1 200 OK Content-Type: application/json { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.shopping.catalog.search": [ { "version": "2026-08-25" } ] } }, "products": [ { "id": "prod_butter_valley_dairy", "title": "Valley Dairy Salted Butter", "description": { "plain": "Premium salted butter sticks." }, "price_range": { "min": { "amount": 299, "currency": "USD" }, "max": { "amount": 499, "currency": "USD" } }, "variants": [ { "id": "var_butter_valley_dairy_8oz", "title": "Valley Dairy Salted Butter (8 oz)", "description": { "plain": "Valley Dairy Salted Butter (8 oz) pack." }, "price": { "amount": 299, "currency": "USD" }, "availability": { "status": "in_stock" } }, { "id": "var_butter_valley_dairy_16oz", "title": "Valley Dairy Salted Butter (16 oz)", "description": { "plain": "Valley Dairy Salted Butter (16 oz) pack." }, "price": { "amount": 499, "currency": "USD" }, "availability": { "status": "in_stock" } } ] } ] }
Créer un panier
L'utilisateur indique son intention de procéder à l'achat. L'agent compile donc les articles et crée un panier.
- Opération/Outil :
create_cart - Fonctionnalité :
dev.ucp.shopping.cart - Spécifications de transport : spécification MCP et spécification REST
L'exemple suivant illustre la création d'un panier à l'aide d'un indice de localisation de code postal de livraison ("context": { "postal_code": "60614"}).
Demande
MCP
{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "create_cart", "arguments": { "meta": { "ucp-agent": { "profile": "https://platform.example/profiles/grocery-agent.json" } }, "cart": { "context": { "postal_code": "60614" }, "line_items": [ { "item": { "id": "var_butter_valley_dairy_8oz" }, "quantity": 1 }, { "item": { "id": "var_garlic_3pk" }, "quantity": 1 }, { "item": { "id": "var_onion_yellow_single" }, "quantity": 1 }, { "item": { "id": "var_tomatoes_bella_vista_28oz" }, "quantity": 1 }, { "item": { "id": "var_pasta_roma_spaghetti_16oz" }, "quantity": 1 } ] } } } }
REST
POST /carts HTTP/1.1 Host: business.example.com Content-Type: application/json Request-Id: 8ef9b0c2-78d1-4e4b-91c2-3e2ef0d3ab06 UCP-Agent: profile="https://platform.example/profiles/grocery-agent.json" { "context": { "postal_code": "60614" }, "line_items": [ { "item": { "id": "var_butter_valley_dairy_8oz" }, "quantity": 1 }, { "item": { "id": "var_garlic_3pk" }, "quantity": 1 }, { "item": { "id": "var_onion_yellow_single" }, "quantity": 1 }, { "item": { "id": "var_tomatoes_bella_vista_28oz" }, "quantity": 1 }, { "item": { "id": "var_pasta_roma_spaghetti_16oz" }, "quantity": 1 } ] }
Réponse
Vous créez le panier de livraison en renvoyant les totaux estimés et un élément continue_url, qui redirige les utilisateurs vers votre processus de paiement pour finaliser la commande (y compris l'adresse de livraison finale, la sélection du créneau horaire et le paiement).
MCP
{ "jsonrpc": "2.0", "id": 3, "result": { "structuredContent": { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.shopping.cart": [ { "version": "2026-08-25" } ] } }, "id": "cart_chicago_grocery_98765", "line_items": [ { "id": "li_butter_01", "item": { "id": "var_butter_valley_dairy_8oz", "title": "Valley Dairy Salted Butter (8 oz)", "price": 299, "image_url": "https://business.example.com/images/var_butter_valley_dairy_8oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 299 } ] }, { "id": "li_garlic_01", "item": { "id": "var_garlic_3pk", "title": "Garlic (3-Pack)", "price": 249, "image_url": "https://business.example.com/images/var_garlic_3pk.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 249 } ] }, { "id": "li_onion_01", "item": { "id": "var_onion_yellow_single", "title": "Yellow Onion (Single)", "price": 79, "image_url": "https://business.example.com/images/var_onion_yellow_single.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 79 } ] }, { "id": "li_tomatoes_01", "item": { "id": "var_tomatoes_bella_vista_28oz", "title": "Bella Vista Organic Whole Peeled Tomatoes (28 oz Can)", "price": 299, "image_url": "https://business.example.com/images/var_tomatoes_bella_vista_28oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 299 } ] }, { "id": "li_pasta_01", "item": { "id": "var_pasta_roma_spaghetti_16oz", "title": "Roma Organics Spaghetti (16 oz)", "price": 179, "image_url": "https://business.example.com/images/var_pasta_roma_spaghetti_16oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 179 } ] } ], "currency": "USD", "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 1105 }, { "type": "total", "display_text": "Total", "amount": 1105 } ], "continue_url": "https://business.example.com/cart/" } } }
REST
HTTP/1.1 201 Created Content-Type: application/json { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.shopping.cart": [ { "version": "2026-08-25" } ] } }, "id": "cart_chicago_grocery_98765", "line_items": [ { "id": "li_butter_01", "item": { "id": "var_butter_valley_dairy_8oz", "title": "Valley Dairy Salted Butter (8 oz)", "price": 299, "image_url": "https://business.example.com/images/var_butter_valley_dairy_8oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 299 } ] }, { "id": "li_garlic_01", "item": { "id": "var_garlic_3pk", "title": "Garlic (3-Pack)", "price": 249, "image_url": "https://business.example.com/images/var_garlic_3pk.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 249 } ] }, { "id": "li_onion_01", "item": { "id": "var_onion_yellow_single", "title": "Yellow Onion (Single)", "price": 79, "image_url": "https://business.example.com/images/var_onion_yellow_single.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 79 } ] }, { "id": "li_tomatoes_01", "item": { "id": "var_tomatoes_bella_vista_28oz", "title": "Bella Vista Organic Whole Peeled Tomatoes (28 oz Can)", "price": 299, "image_url": "https://business.example.com/images/var_tomatoes_bella_vista_28oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 299 } ] }, { "id": "li_pasta_01", "item": { "id": "var_pasta_roma_spaghetti_16oz", "title": "Roma Organics Spaghetti (16 oz)", "price": 179, "image_url": "https://business.example.com/images/var_pasta_roma_spaghetti_16oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 179 } ] } ], "currency": "USD", "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 1105 }, { "type": "total", "display_text": "Total", "amount": 1105 } ], "continue_url": "https://business.example.com/cart/" }
Mettre à jour le panier
L'utilisateur décide qu'il veut la plaquette de beurre de 500 g au lieu de 250 g. L'agent met à jour le panier pour remplacer l'article. Il effectue un appel update_cart avec l'ID du panier, conserve le contexte de localisation approprié, supprime la plaquette de beurre de 250 g et ajoute celle de 500 g.
update_cart est une actualisation complète.
- Opération/Outil :
update_cart - Fonctionnalité :
dev.ucp.shopping.cart - Spécifications de transport : spécification MCP et spécification REST
L'exemple suivant illustre la mise à jour d'un panier pour le retrait en magasin à l'aide d'une indication de localisation par identifiant de magasin ("cart": { "context": { "location":
"loc_valley_grocers_chicago_clark" }, ... }).
Demande
MCP
{ "jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": { "name": "update_cart", "arguments": { "meta": { "ucp-agent": { "profile": "https://platform.example/profiles/grocery-agent.json" } }, "id": "cart_chicago_grocery_98765", "cart": { "context": { "location": "loc_valley_grocers_chicago_clark" }, "line_items": [ { "item": { "id": "var_butter_valley_dairy_16oz" }, "quantity": 1 }, { "item": { "id": "var_garlic_3pk" }, "quantity": 1 }, { "item": { "id": "var_onion_yellow_single" }, "quantity": 1 }, { "item": { "id": "var_tomatoes_bella_vista_28oz" }, "quantity": 1 }, { "item": { "id": "var_pasta_roma_spaghetti_16oz" }, "quantity": 1 } ] } } } }
REST
PUT /carts/cart_chicago_grocery_98765 HTTP/1.1 Host: business.example.com Content-Type: application/json Request-Id: 8ef9b0c2-78d1-4e4b-91c2-3e2ef0d3ab07 UCP-Agent: profile="https://platform.example/profiles/grocery-agent.json" { "line_items": [ { "item": { "id": "var_butter_valley_dairy_16oz" }, "quantity": 1 }, { "item": { "id": "var_garlic_3pk" }, "quantity": 1 }, { "item": { "id": "var_onion_yellow_single" }, "quantity": 1 }, { "item": { "id": "var_tomatoes_bella_vista_28oz" }, "quantity": 1 }, { "item": { "id": "var_pasta_roma_spaghetti_16oz" }, "quantity": 1 } ], "context": { "location": "loc_valley_grocers_chicago_clark" } }
Réponse
La réponse contient l'état mis à jour du panier. Les totaux sont mis à jour en conséquence.
MCP
{ "jsonrpc": "2.0", "id": 4, "result": { "structuredContent": { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.shopping.cart": [ { "version": "2026-08-25" } ] } }, "id": "cart_chicago_grocery_98765", "line_items": [ { "id": "li_garlic_01", "item": { "id": "var_garlic_3pk", "title": "Garlic (3-Pack)", "price": 249, "image_url": "https://business.example.com/images/var_garlic_3pk.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 249 } ] }, { "id": "li_onion_01", "item": { "id": "var_onion_yellow_single", "title": "Yellow Onion (Single)", "price": 79, "image_url": "https://business.example.com/images/var_onion_yellow_single.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 79 } ] }, { "id": "li_tomatoes_01", "item": { "id": "var_tomatoes_bella_vista_28oz", "title": "Bella Vista Organic Whole Peeled Tomatoes (28 oz Can)", "price": 299, "image_url": "https://business.example.com/images/var_tomatoes_bella_vista_28oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 299 } ] }, { "id": "li_pasta_01", "item": { "id": "var_pasta_roma_spaghetti_16oz", "title": "Roma Organics Spaghetti (16 oz)", "price": 179, "image_url": "https://business.example.com/images/var_pasta_roma_spaghetti_16oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 179 } ] }, { "id": "li_butter_02", "item": { "id": "var_butter_valley_dairy_16oz", "title": "Valley Dairy Salted Butter (16 oz)", "price": 499, "image_url": "https://business.example.com/images/var_butter_valley_dairy_16oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 499 } ] } ], "currency": "USD", "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 1305 }, { "type": "total", "display_text": "Total", "amount": 1305 } ], "continue_url": "https://business.example.com/cart/" } } }
REST
HTTP/1.1 200 OK Content-Type: application/json { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.shopping.cart": [ { "version": "2026-08-25" } ] } }, "id": "cart_chicago_grocery_98765", "line_items": [ { "id": "li_garlic_01", "item": { "id": "var_garlic_3pk", "title": "Garlic (3-Pack)", "price": 249, "image_url": "https://business.example.com/images/var_garlic_3pk.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 249 } ] }, { "id": "li_onion_01", "item": { "id": "var_onion_yellow_single", "title": "Yellow Onion (Single)", "price": 79, "image_url": "https://business.example.com/images/var_onion_yellow_single.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 79 } ] }, { "id": "li_tomatoes_01", "item": { "id": "var_tomatoes_bella_vista_28oz", "title": "Bella Vista Organic Whole Peeled Tomatoes (28 oz Can)", "price": 299, "image_url": "https://business.example.com/images/var_tomatoes_bella_vista_28oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 299 } ] }, { "id": "li_pasta_01", "item": { "id": "var_pasta_roma_spaghetti_16oz", "title": "Roma Organics Spaghetti (16 oz)", "price": 179, "image_url": "https://business.example.com/images/var_pasta_roma_spaghetti_16oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 179 } ] }, { "id": "li_butter_02", "item": { "id": "var_butter_valley_dairy_16oz", "title": "Valley Dairy Salted Butter (16 oz)", "price": 499, "image_url": "https://business.example.com/images/var_butter_valley_dairy_16oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 499 } ] } ], "currency": "USD", "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 1305 }, { "type": "total", "display_text": "Total", "amount": 1305 } ], "continue_url": "https://business.example.com/cart/" }
Récupérer le panier
get_cart permet de récupérer un panier précédemment créé, par exemple si l'utilisateur démarre une nouvelle session et souhaite continuer à remplir son panier précédent.
- Opération/Outil :
get_cart - Fonctionnalité :
dev.ucp.shopping.cart - Spécifications de transport : spécification MCP et spécification REST
L'exemple suivant illustre la récupération de la session du panier à l'aide de l'ID du panier de l'opération de mise à jour précédente ("id": "cart_chicago_grocery_98765").
Demande
MCP
{ "jsonrpc": "2.0", "id": 5, "method": "tools/call", "params": { "name": "get_cart", "arguments": { "meta": { "ucp-agent": { "profile": "https://platform.example/profiles/grocery-agent.json" } }, "id": "cart_chicago_grocery_98765" } } }
REST
GET /carts/cart_chicago_grocery_98765 HTTP/1.1 Host: business.example.com Request-Id: 8ef9b0c2-78d1-4e4b-91c2-3e2ef0d3ab08 UCP-Agent: profile="https://platform.example/profiles/grocery-agent.json"
Réponse
Vous renvoyez l'état actuel de la session de panier demandée.
MCP
{ "jsonrpc": "2.0", "id": 5, "result": { "structuredContent": { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.shopping.cart": [ { "version": "2026-08-25" } ] } }, "id": "cart_chicago_grocery_98765", "line_items": [ { "id": "li_garlic_01", "item": { "id": "var_garlic_3pk", "title": "Garlic (3-Pack)", "price": 249, "image_url": "https://business.example.com/images/var_garlic_3pk.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 249 } ] }, { "id": "li_onion_01", "item": { "id": "var_onion_yellow_single", "title": "Yellow Onion (Single)", "price": 79, "image_url": "https://business.example.com/images/var_onion_yellow_single.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 79 } ] }, { "id": "li_tomatoes_01", "item": { "id": "var_tomatoes_bella_vista_28oz", "title": "Bella Vista Organic Whole Peeled Tomatoes (28 oz Can)", "price": 299, "image_url": "https://business.example.com/images/var_tomatoes_bella_vista_28oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 299 } ] }, { "id": "li_pasta_01", "item": { "id": "var_pasta_roma_spaghetti_16oz", "title": "Roma Organics Spaghetti (16 oz)", "price": 179, "image_url": "https://business.example.com/images/var_pasta_roma_spaghetti_16oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 179 } ] }, { "id": "li_butter_02", "item": { "id": "var_butter_valley_dairy_16oz", "title": "Valley Dairy Salted Butter (16 oz)", "price": 499, "image_url": "https://business.example.com/images/var_butter_valley_dairy_16oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 499 } ] } ], "currency": "USD", "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 1305 }, { "type": "total", "display_text": "Total", "amount": 1305 } ], "continue_url": "https://business.example.com/cart/" } } }
REST
HTTP/1.1 200 OK Content-Type: application/json { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.shopping.cart": [ { "version": "2026-08-25" } ] } }, "id": "cart_chicago_grocery_98765", "line_items": [ { "id": "li_garlic_01", "item": { "id": "var_garlic_3pk", "title": "Garlic (3-Pack)", "price": 249, "image_url": "https://business.example.com/images/var_garlic_3pk.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 249 } ] }, { "id": "li_onion_01", "item": { "id": "var_onion_yellow_single", "title": "Yellow Onion (Single)", "price": 79, "image_url": "https://business.example.com/images/var_onion_yellow_single.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 79 } ] }, { "id": "li_tomatoes_01", "item": { "id": "var_tomatoes_bella_vista_28oz", "title": "Bella Vista Organic Whole Peeled Tomatoes (28 oz Can)", "price": 299, "image_url": "https://business.example.com/images/var_tomatoes_bella_vista_28oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 299 } ] }, { "id": "li_pasta_01", "item": { "id": "var_pasta_roma_spaghetti_16oz", "title": "Roma Organics Spaghetti (16 oz)", "price": 179, "image_url": "https://business.example.com/images/var_pasta_roma_spaghetti_16oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 179 } ] }, { "id": "li_butter_02", "item": { "id": "var_butter_valley_dairy_16oz", "title": "Valley Dairy Salted Butter (16 oz)", "price": 499, "image_url": "https://business.example.com/images/var_butter_valley_dairy_16oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 499 } ] } ], "currency": "USD", "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 1305 }, { "type": "total", "display_text": "Total", "amount": 1305 } ], "continue_url": "https://business.example.com/cart/" }
Rechercher des lieux
Le backend UCP ne met pas en cache les informations de localisation, mais uniquement les identifiants de localisation que vous lui avez fournis. Par conséquent, lookup_locations est appelé chaque fois que l'UI du panier doit être présentée à l'utilisateur (sauf si l'indication de localisation est un élément postal_code) pour obtenir l'adresse de livraison ou l'adresse de retrait en magasin. Les adresses de magasins et de livraison peuvent être incluses dans le tableau ids de la requête, et la réponse doit inclure le tableau locations ou buyer_address_locations approprié.
- Opération/Outil :
lookup_locations - Fonctionnalité :
dev.ucp.common.location.lookup - Spécifications de transport : spécification MCP et spécification REST
Adresse des magasins
L'exemple suivant illustre la recherche d'une adresse de retrait en magasin par son identifiant ("ids": ["loc_valley_grocers_chicago_clark"]).
Demande
MCP
{ "jsonrpc": "2.0", "id": 6, "method": "tools/call", "params": { "name": "lookup_locations", "arguments": { "meta": { "ucp-agent": { "profile": "https://platform.example/profiles/grocery-agent.json" } }, "location": { "ids": [ "loc_valley_grocers_chicago_clark" ] } } } }
REST
POST /locations/lookup HTTP/1.1 Host: business.example.com Content-Type: application/json Request-Id: 8ef9b0c2-78d1-4e4b-91c2-3e2ef0d3ab09 UCP-Agent: profile="https://platform.example/profiles/grocery-agent.json" { "ids": [ "loc_valley_grocers_chicago_clark" ] }
Réponse
Vous renvoyez les informations validées sur l'adresse de retrait en magasin dans le tableau locations, y compris les métadonnées de corrélation inputs requises.
MCP
{ "jsonrpc": "2.0", "id": 6, "result": { "structuredContent": { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.common.location.lookup": [ { "version": "2026-08-25" } ] } }, "locations": [ { "id": "loc_valley_grocers_chicago_clark", "inputs": [ { "id": "loc_valley_grocers_chicago_clark" } ], "name": "Valley Grocers - Lincoln Park", "address": { "street_address": "2200 N Clark St", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60614" } } ] } } }
REST
HTTP/1.1 200 OK Content-Type: application/json { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.common.location.lookup": [ { "version": "2026-08-25" } ] } }, "locations": [ { "id": "loc_valley_grocers_chicago_clark", "inputs": [ { "id": "loc_valley_grocers_chicago_clark" } ], "name": "Valley Grocers - Lincoln Park", "address": { "street_address": "2200 N Clark St", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60614" } } ] }
Adresses de livraison de l'acheteur
L'exemple suivant illustre la recherche d'une adresse de livraison enregistrée par l'acheteur à l'aide de son identifiant ("ids": ["addr_user_home_01"]).
Demande
MCP
{ "jsonrpc": "2.0", "id": 6, "method": "tools/call", "params": { "name": "lookup_locations", "arguments": { "meta": { "ucp-agent": { "profile": "https://platform.example/profiles/grocery-agent.json" } }, "location": { "ids": [ "addr_user_home_01" ] } } } }
REST
POST /locations/lookup HTTP/1.1 Host: business.example.com Content-Type: application/json Request-Id: 8ef9b0c2-78d1-4e4b-91c2-3e2ef0d3ab10 UCP-Agent: profile="https://platform.example/profiles/grocery-agent.json" { "ids": [ "addr_user_home_01" ] }
Réponse
Vous renvoyez l'adresse de livraison validée dans le tableau buyer_address_locations.
MCP
{ "jsonrpc": "2.0", "id": 6, "result": { "structuredContent": { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.common.location.lookup": [ { "version": "2026-08-25" } ] } }, "locations": [], "buyer_address_locations": [ { "id": "addr_user_home_01", "inputs": [ { "id": "addr_user_home_01" } ], "name": "Home", "address": { "street_address": "2200 N Clark St, Apt 4B", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60614" } } ] } } }
REST
HTTP/1.1 200 OK Content-Type: application/json { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.common.location.lookup": [ { "version": "2026-08-25" } ] } }, "locations": [], "buyer_address_locations": [ { "id": "addr_user_home_01", "inputs": [ { "id": "addr_user_home_01" } ], "name": "Home", "address": { "street_address": "2200 N Clark St, Apt 4B", "address_locality": "Chicago", "address_region": "IL", "address_country": "US", "postal_code": "60614" } } ] }
Annuler le panier
cancel_cart est appelé si l'utilisateur exprime l'intention de recommencer avec une autre recette ou s'il souhaite vider l'intégralité de son panier. L'appel de cancel_cart doit déclencher une logique métier de votre côté pour mettre fin immédiatement à la session du panier ou l'invalider, de sorte que l'ID du panier ne soit plus disponible. Si vous conservez un ID de panier persistant par utilisateur de votre côté, vous devez créer des ID de panier lors des opérations create_cart et maintenir les correspondances entre ces ID de panier créés par Google et l'ID de panier persistant unique de l'utilisateur pendant la durée de vie de ces paniers.
- Opération/Outil :
cancel_cart - Fonctionnalité :
dev.ucp.shopping.cart - Spécifications de transport : spécification MCP et spécification REST
L'exemple suivant illustre l'annulation de la session de panier existante à l'aide de son ID de panier ("id": "cart_chicago_grocery_98765").
Demande
MCP
{ "jsonrpc": "2.0", "id": 7, "method": "tools/call", "params": { "name": "cancel_cart", "arguments": { "meta": { "ucp-agent": { "profile": "https://platform.example/profiles/grocery-agent.json" }, "idempotency-key": "660e8400-e29b-41d4-a716-446655440001" }, "id": "cart_chicago_grocery_98765" } } }
REST
POST /carts/cart_chicago_grocery_98765/cancel HTTP/1.1 Host: business.example.com Content-Type: application/json Request-Id: 8ef9b0c2-78d1-4e4b-91c2-3e2ef0d3ab11 UCP-Agent: profile="https://platform.example/profiles/grocery-agent.json" Idempotency-Key: 660e8400-e29b-41d4-a716-446655440001 {}
Réponse
Vous annulez la session du panier et renvoyez l'état du panier avant la suppression.
MCP
{ "jsonrpc": "2.0", "id": 7, "result": { "structuredContent": { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.shopping.cart": [ { "version": "2026-08-25" } ] } }, "id": "cart_chicago_grocery_98765", "line_items": [ { "id": "li_garlic_01", "item": { "id": "var_garlic_3pk", "title": "Garlic (3-Pack)", "price": 249, "image_url": "https://business.example.com/images/var_garlic_3pk.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 249 } ] }, { "id": "li_onion_01", "item": { "id": "var_onion_yellow_single", "title": "Yellow Onion (Single)", "price": 79, "image_url": "https://business.example.com/images/var_onion_yellow_single.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 79 } ] }, { "id": "li_tomatoes_01", "item": { "id": "var_tomatoes_bella_vista_28oz", "title": "Bella Vista Organic Whole Peeled Tomatoes (28 oz Can)", "price": 299, "image_url": "https://business.example.com/images/var_tomatoes_bella_vista_28oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 299 } ] }, { "id": "li_pasta_01", "item": { "id": "var_pasta_roma_spaghetti_16oz", "title": "Roma Organics Spaghetti (16 oz)", "price": 179, "image_url": "https://business.example.com/images/var_pasta_roma_spaghetti_16oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 179 } ] }, { "id": "li_butter_02", "item": { "id": "var_butter_valley_dairy_16oz", "title": "Valley Dairy Salted Butter (16 oz)", "price": 499, "image_url": "https://business.example.com/images/var_butter_valley_dairy_16oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 499 } ] } ], "currency": "USD", "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 1305 }, { "type": "total", "display_text": "Total", "amount": 1305 } ], "continue_url": "https://business.example.com/cart/" } } }
REST
HTTP/1.1 200 OK Content-Type: application/json { "ucp": { "version": "2026-08-25", "capabilities": { "dev.ucp.shopping.cart": [ { "version": "2026-08-25" } ] } }, "id": "cart_chicago_grocery_98765", "line_items": [ { "id": "li_garlic_01", "item": { "id": "var_garlic_3pk", "title": "Garlic (3-Pack)", "price": 249, "image_url": "https://business.example.com/images/var_garlic_3pk.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 249 } ] }, { "id": "li_onion_01", "item": { "id": "var_onion_yellow_single", "title": "Yellow Onion (Single)", "price": 79, "image_url": "https://business.example.com/images/var_onion_yellow_single.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 79 } ] }, { "id": "li_tomatoes_01", "item": { "id": "var_tomatoes_bella_vista_28oz", "title": "Bella Vista Organic Whole Peeled Tomatoes (28 oz Can)", "price": 299, "image_url": "https://business.example.com/images/var_tomatoes_bella_vista_28oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 299 } ] }, { "id": "li_pasta_01", "item": { "id": "var_pasta_roma_spaghetti_16oz", "title": "Roma Organics Spaghetti (16 oz)", "price": 179, "image_url": "https://business.example.com/images/var_pasta_roma_spaghetti_16oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 179 } ] }, { "id": "li_butter_02", "item": { "id": "var_butter_valley_dairy_16oz", "title": "Valley Dairy Salted Butter (16 oz)", "price": 499, "image_url": "https://business.example.com/images/var_butter_valley_dairy_16oz.png" }, "quantity": 1, "totals": [ { "type": "subtotal", "amount": 499 } ] } ], "currency": "USD", "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 1305 }, { "type": "total", "display_text": "Total", "amount": 1305 } ], "continue_url": "https://business.example.com/cart/" }
Profil et découverte
Les informations sur la négociation de profil et de découverte, y compris les définitions d'extension de fournisseur, sont en cours de développement.
Gestion des erreurs
Les erreurs sont gérées comme décrit dans Gestion des erreurs UCP et Erreurs de résultat métier UCP. Les erreurs de résultat métier associées ici sont documentées dans la fonctionnalité de paiement, mais le concept est universel dans l'UCP.
Niveaux d'accès UCP requis
Ces niveaux d'accès sont requis pour activer les fonctionnalités UCP.
dev.ucp.shopping.cart:managedev.ucp.shopping.catalog.search:readdev.ucp.shopping.catalog.lookup:readdev.ucp.common.location.lookup:readdev.ucp.common.location.search:readdev.ucp.shopping.order:managedev.ucp.shopping.checkout:manage