> ## Documentation Index
> Fetch the complete documentation index at: https://storekit.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP-endpoint

> Verbind een AI-assistent via MCP met een storekit-store: lees menu, itemopties, fulfillmentmethodes en tijdslots en bouw een cart met prijzen op.

**Voor wie is dit:** een assistent of agent-app die namens de klant handelt, buiten de browser van de klant. Als de assistent namens het restaurant handelt, heb je in plaats daarvan de [merchant MCP](/docs/nl/developers/mcp/overview) op `mcp.storekit.com` nodig.

Elke storekit-ordering-host is ook een remote [MCP](https://modelcontextprotocol.io)-server. Een assistent die zich nergens in de buurt van de browser van de klant bevindt (ChatGPT, Claude, een agent-app, een IDE) kan verbinding maken, het menu van een filiaal lezen, een prijs uitrekenen en een cart bouwen die de klant vervolgens opent om te betalen.

## Endpoints

Er zijn twee scopes en beide zijn bereikbaar op de eigen ordering-host van de store:

| Endpoint | Scope |
| - | - |
| `POST https://{host}/{venueSlug}/api/mcp` | Eén filiaal, voor een agent die het al over een locatie heeft |
| `POST https://{host}/api/mcp` | Elk filiaal van het merk op die host, per call opgezocht |

`{host}` is het domein waarvandaan de ordering-pagina's van de store worden geserveerd, zoals `order.storekit.com`. Beide endpoints zijn beperkt tot die host, dus een merk op zijn eigen domein kan alleen antwoorden voor zijn eigen filialen.

Gebruik het merkendpoint wanneer de klant nog niet heeft gezegd welk filiaal ze willen: `find_venues` geeft de slug terug die elke andere tool vervolgens als `venue`-argument aanneemt. Gebruik het filiaal-endpoint wanneer de locatie al vaststaat.

Een `GET` of `HEAD` op beide endpoints geeft `200` en een regel die aangeeft wat het endpoint is, zodat een client het kan sonderen voordat een sessie wordt geopend.

## Protocol

JSON-RPC 2.0 over HTTP, één bericht per `POST`. De geïmplementeerde methodes zijn `initialize`, `ping`, `tools/list` en `tools/call`; MCP-revisies `2025-06-18`, `2025-03-26` en `2024-11-05` worden allemaal beantwoord in de revisie waar de client om vraagt.

```bash theme={null}
curl -X POST https://order.storekit.com/gordon-ramsay-plane-food-1/api/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "search_menu",
      "arguments": { "query": "something vegan" }
    }
  }'
```

Elk resultaat is JSON in een tekstcontentblok, herhaald als `structuredContent` voor clients die het lezen. Het endpoint is stateless: `initialize` geeft geen session id terug en er wordt niets onthouden tussen verzoeken. Een gesprek draagt daarom zelf de venue slug en de cart id, geen sessie.

Fouten worden gesplitst op wie er wat aan kan doen. Een verkeerd gevormd argument is een JSON-RPC `-32602` met de parameternaam; alles waar de assistent van kan herstellen (geen bestaande categorie, geen match, een filiaal dat is gestopt met bestellingen aannemen) komt terug als tool-resultaat met `isError: true` waarvan de tekst zegt wat te doen.

## Read-tools

| Tool | Beschrijving |
| - | - |
| `find_venues` | Somt de filialen van het merk op, gefilterd op naam, plaats of postcode. Geeft de slug terug die de andere tools gebruiken. |
| `get_menu` | Het menu van het filiaal: elke categorie met haar items, prijzen, dieet-tags en beschikbaarheid. Een heel lang menu wordt samengevat en een categorienaam geeft die categorie volledig terug. |
| `search_menu` | Doorzoek het menu op gerechtsnaam, categorie of beschrijving. Voor menu's die te lang zijn om in hun geheel terug te geven. |
| `get_item` | Eén item in het volledig: de allergenen die het bevat en kan bevatten (`allergens.contains`, `allergens.mayContain`, uit de 14 UK-allergenen; `null` wanneer het filiaal niets heeft opgegeven, lege lijsten wanneer het heeft verklaard dat het item allergeenvrij is), voedingswaarde waar het filiaal die publiceert (`nutrition`: kcal, dan grammen; anders `null`), voor hoeveel personen het is bedoeld bij een cateringfiliaal (`servings`), en elke optiegroep, hoeveel keuzes deze aanneemt en wat elke keuze kost. Beide velden beschrijven het basisitem; een optie die allergenen of voedingswaarde toevoegt, draagt zijn eigen `allergens` / `nutrition`. |
| `get_venue_info` | Het filiaal zelf: naam, adres, telefoonnummer, website, beschrijving, of het nu open is, de openingstijden van vandaag, de volledige openingstijden van de week (schema.org `OpeningHoursSpecification`) en de bestelmethoden die het biedt. |
| `get_available_fulfillment` | Hoe er bij het filiaal kan worden besteld, de minimumbesteding per methode, of het nu open is en de openingstijden van vandaag. |
| `get_available_slots` | De bezorg- of afhaalslots die op een bepaalde dag nog vrij zijn. |

`get_menu` en `search_menu` nemen beide optionele `excludeAllergens`- en `diets`-lijsten aan. `excludeAllergens` noemt een van de 14 UK-allergenen (`celery`, `gluten`, `crustaceans`, `fish`, `eggs`, `lupin`, `milk`, `molluscs`, `mustard`, `nuts`, `peanuts`, `sesame`, `soya`, `sulphites`) en laat elk item weg dat er een bevat of kan bevatten; een item zonder allergene informatie blijft, omdat ongetagd niet hetzelfde is als vrij ervan. `diets` noemt een van `halal`, `kosher`, `vegan`, `vegetarian`, `gluten free` en `dairy free`, en houdt alleen items over die als passend voor elk daarvan zijn getagd. Dit zijn dezelfde regels die de ordering-pagina toepast op haar eigen allergen- en dieetfilters, en het resultaat echoot de toegepaste filters onder `filters`.

Op het merkendpoint neemt elke tool behalve `find_venues` een extra `venue`-argument aan, en een slug die niet bij dat merk hoort wordt geweigerd met de eigen lijst van het merk in plaats van beantwoord vanuit het menu van een ander merk.

Reads dragen `readOnlyHint`, zodat een client ze kan aanroepen zonder eerst de klant te vragen. Prijzen zijn geformatteerde strings in de valuta van het filiaal, beschrijvingen zijn gestript en afgekapt, en elke lijst is begrensd.

> [!NOTE]
>
> Fulfillmentmethodes worden gerapporteerd op basis van wat de venue-payload bewijst: Delivery, Pickup en InStore. Catering wordt niet via MCP aangeboden.

## Cart-tools

De cart-capability volgt de [UCP cart MCP binding](https://ucp.dev/2026-08-25/specification/shopping/cart/mcp/) exact, zodat een UCP-client geen mapping-tabel nodig heeft.

| Tool | Beschrijving |
| - | - |
| `create_cart` | Bouw op dit filiaal een cart op basis van menu-items, geprijsd in de valuta van het filiaal. |
| `get_cart` | Herlees en herprijs een cart op id. |
| `update_cart` | Vervang de regels van de cart. Een volledige vervanging, geen patch: stuur elke regel die de cart moet bevatten. |
| `cancel_cart` | Verwerp de cart. |

Wat de binding in de praktijk betekent:

* Elke call draagt `meta["ucp-agent"]` met je agent-profiel. Een call zonder deze wordt geweigerd.
* De cart id is een top-level `id`, nooit genest in `cart`.
* Bedragen zijn integer minor units (`450` is £4.50).
* Een business-probleem is een succesvol resultaat dat `messages[]` bevat: een regel die niet langer verkoopbaar is, wordt daar gemeld in plaats van te verdwijnen.
* Regels worden benoemd op item id met opties tussen haakjes, `BURGER(CHEESE;BACON:2)`, dezelfde grammatica die de [basket prefill links](/docs/nl/developers/basket-prefill) gebruiken.

Een cart bevat intentie, geen prijzen: elke bewerking her-resolvet en herprijst deze tegen het menu zoals dat op dat moment is, zodat een opgeslagen cart geen bedrag kan noemen dat de venue-pagina zou tegenspreken. Carts verlopen 24 uur na de laatste write, en niets klantspecifieks wordt erin opgeslagen.

> [!WARNING]
>
> Een cart is geen bestelling, en deze tools spreken alleen namens de klantzijde. Niets hier leest een orderwachtrij van een store, bewerkt een menu of wijzigt een instelling. De tools geven een `continue_url` terug die de klant opent om de cart te bekijken en op de venue-pagina te betalen: er is geen checkout-, betaal- of kortingstool, en er wordt geen bestelling geplaatst totdat ze het daar afronden.

## Gerelateerd

> **[UCP discovery](/docs/nl/developers/agents/ordering/ucp)**
>
> Het profiel dat deze endpoints en de cart-capability aankondigt.

> **[WebMCP-tools](/docs/nl/developers/agents/ordering/webmcp)**
>
> De aparte toolset die een agent binnen de browser van de klant aanroept.


## Related topics

- [Merchant MCP-overzicht](/docs/nl/developers/mcp/overview.md)
- [UCP-discovery](/docs/nl/developers/agents/ordering/ucp.md)
- [Overzicht van ordering-agents](/docs/nl/developers/agents/ordering/overview.md)
- [Introductie voor ontwikkelaars](/docs/nl/developers/introduction.md)
- [WebMCP-tools](/docs/nl/developers/agents/ordering/webmcp.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.