> ## 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

> KI-Assistenten via MCP mit einem storekit-Store verbinden: Menü, Artikeloptionen, Bestellmethoden und Zeitfenster lesen und einen bepreisten Warenkorb bauen.

**Für wen das ist:** eine Assistenten- oder Agenten-App, die im Auftrag des Kunden außerhalb seines Browsers handelt. Wenn der Assistent für das Restaurant handelt, brauchen Sie stattdessen das [Merchant MCP](/docs/de/developers/mcp/overview) unter `mcp.storekit.com`.

Jeder storekit-Bestell-Host ist auch ein Remote-[MCP](https://modelcontextprotocol.io)-Server. Ein Assistent, der nirgendwo in der Nähe des Kunden-Browsers ist — ChatGPT, Claude, eine Agenten-App, eine IDE — kann sich damit verbinden, das Menü einer Filiale lesen, einen Preis nennen und einen Warenkorb bauen, den der Kunde dann öffnet, um zu bezahlen.

## Endpoints

Es gibt zwei Scopes, und beide sind auf dem eigenen Bestell-Host des Stores erreichbar:

| Endpoint | Scope |
| - | - |
| `POST https://{host}/{venueSlug}/api/mcp` | Eine Filiale — für einen Agenten, der bereits über einen Standort spricht |
| `POST https://{host}/api/mcp` | Jede Filiale der Marke auf diesem Host, pro Aufruf aufgelöst |

`{host}` ist die Domain, von der die Bestellseiten des Stores ausgeliefert werden, zum Beispiel `order.storekit.com`. Beide Endpoints sind auf diesen Host beschränkt, sodass eine Marke auf ihrer eigenen Domain ausschließlich für ihre eigenen Filialen antworten kann.

Verwenden Sie den Marken-Endpoint, wenn der Kunde noch nicht gesagt hat, welche Filiale er möchte: `find_venues` gibt den Slug zurück, den jedes andere Tool dann als `venue`-Argument annimmt. Verwenden Sie den Filial-Endpoint, wenn der Standort bereits geklärt ist.

Ein `GET` oder `HEAD` auf beide Endpoints gibt `200` zurück und eine Zeile, die sagt, was der Endpoint ist, damit ein Client ihn testen kann, bevor er eine Session öffnet.

## Protokoll

JSON-RPC 2.0 über HTTP, eine Nachricht pro `POST`. Die implementierten Methoden sind `initialize`, `ping`, `tools/list` und `tools/call`; die MCP-Revisionen `2025-06-18`, `2025-03-26` und `2024-11-05` werden alle in der Revision beantwortet, die der Client anfragt.

```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" }
    }
  }'
```

Jedes Ergebnis ist JSON in einem Text-Content-Block, wiederholt als `structuredContent` für Clients, die ihn lesen. Der Endpoint ist zustandslos: `initialize` gibt keine Session-ID zurück, und zwischen Anfragen wird nichts gespeichert, sodass eine Konversation den Filial-Slug und die Cart-ID trägt statt einer Session.

Fehler teilen sich nach dem auf, der darauf reagieren kann. Ein fehlerhaftes Argument ist ein JSON-RPC `-32602`, das den Parameter benennt; alles, wovon der Assistent sich erholen könnte — keine solche Kategorie, keine Übereinstimmung, eine Filiale, die keine Bestellungen mehr annimmt — kommt als Tool-Ergebnis mit `isError: true` zurück, dessen Text sagt, was als Nächstes zu tun ist.

## Read-Tools

| Tool | Beschreibung |
| - | - |
| `find_venues` | Listet die Filialen der Marke auf, gefiltert nach Name, Ort oder Postleitzahl. Gibt den Slug zurück, den die anderen Tools annehmen. |
| `get_menu` | Das Menü der Filiale: jede Kategorie mit ihren Artikeln, Preisen, Ernährungs-Tags und Verfügbarkeit. Ein sehr langes Menü wird zusammengefasst, und ein Kategoriename gibt diese Kategorie vollständig zurück. |
| `search_menu` | Durchsucht das Menü nach Gerichtsname, Kategorie oder Beschreibung. Für Menüs, die zu lang sind, um sie komplett zurückzugeben. |
| `get_item` | Ein Artikel vollständig: die enthaltenen und möglicherweise enthaltenen Allergene (`allergens.contains`, `allergens.mayContain`, aus den 14 UK-Allergenen; `null`, wenn die Filiale nichts angegeben hat, leere Listen, wenn sie den Artikel als allergenfrei deklariert hat), die Nährwerte, wo die Filiale sie veröffentlicht (`nutrition`: kcal, dann Gramm; sonst `null`), wie viele Portionen er in einer Catering-Filiale liefert (`servings`) sowie jede Optionsgruppe, wie viele Auswahlen sie erlaubt und was jede kostet. Beide Felder beschreiben den Basisartikel; eine Option, die Allergene oder Nährwerte hinzufügt, führt eigene `allergens` / `nutrition`. |
| `get_venue_info` | Die Filiale selbst: Name, Adresse, Telefonnummer, Website, Beschreibung, ob sie jetzt geöffnet ist, die heutigen Öffnungszeiten, die vollständigen Wochen-Öffnungszeiten (schema.org `OpeningHoursSpecification`) und die angebotenen Bestellmethoden. |
| `get_available_fulfillment` | Wie in der Filiale bestellt werden kann, der Mindestbestellwert je Methode, ob sie jetzt geöffnet ist und die heutigen Öffnungszeiten. |
| `get_available_slots` | Die Liefer- oder Abholzeitfenster, die an einem bestimmten Tag noch frei sind. |

`get_menu` und `search_menu` nehmen beide optional Listen `excludeAllergens` und `diets` entgegen. `excludeAllergens` nennt beliebige der 14 UK-Allergene (`celery`, `gluten`, `crustaceans`, `fish`, `eggs`, `lupin`, `milk`, `molluscs`, `mustard`, `nuts`, `peanuts`, `sesame`, `soya`, `sulphites`) und lässt jeden Artikel weg, der eines davon enthält oder enthalten kann; ein Artikel ohne Allergen-Angaben bleibt drin, denn ohne Kennzeichnung ist nicht dasselbe wie frei davon. `diets` nennt beliebige von `halal`, `kosher`, `vegan`, `vegetarian`, `gluten free` und `dairy free` und behält nur Artikel, die für jede davon gekennzeichnet sind. Das sind dieselben Regeln, die die Bestellseite für ihre eigenen Allergen- und Diät-Filter anwendet, und das Ergebnis gibt die angewendeten Filter unter `filters` zurück.

Auf dem Marken-Endpoint nimmt jedes Tool außer `find_venues` ein zusätzliches `venue`-Argument, und ein Slug, der nicht zu dieser Marke gehört, wird mit der eigenen Liste der Marke abgelehnt statt aus dem Menü einer anderen Marke beantwortet.

Reads tragen `readOnlyHint`, sodass ein Client sie aufrufen kann, ohne den Kunden vorher zu fragen. Preise sind formatierte Strings in der Währung der Filiale, Beschreibungen sind bereinigt und gekürzt, und jede Liste ist gekappt.

> [!NOTE]
>
> Bestellmethoden werden aus dem gemeldet, was das Filial-Payload belegt: Delivery, Pickup und InStore. Catering wird über MCP nicht angeboten.

## Cart-Tools

Die Cart-Capability folgt exakt dem [UCP-Cart-MCP-Binding](https://ucp.dev/2026-08-25/specification/shopping/cart/mcp/), sodass ein UCP-Client keine Mapping-Tabelle braucht.

| Tool | Beschreibung |
| - | - |
| `create_cart` | Erstellt einen Warenkorb bei dieser Filiale aus Menü-Artikeln, bepreist in der Währung der Filiale. |
| `get_cart` | Liest und bepreist einen Warenkorb per ID neu. |
| `update_cart` | Ersetzt die Zeilen des Warenkorbs. Ein vollständiger Ersatz, kein Patch: Senden Sie jede Zeile, die der Warenkorb enthalten soll. |
| `cancel_cart` | Verwirft den Warenkorb. |

Was das Binding in der Praxis bedeutet:

* Jeder Aufruf trägt `meta["ucp-agent"]` mit Ihrem Agenten-Profil. Ein Aufruf ohne wird abgelehnt.
* Die Cart-ID ist eine `id` auf oberster Ebene, niemals verschachtelt in `cart`.
* Beträge sind ganzzahlige Minor Units (`450` sind £4.50).
* Ein Geschäftsproblem ist ein erfolgreiches Ergebnis mit `messages[]` — eine Zeile, die nicht mehr verkäuflich ist, wird dort gemeldet, statt zu verschwinden.
* Zeilen werden nach Artikel-ID mit Optionen in Klammern benannt, `BURGER(CHEESE;BACON:2)`, dieselbe Grammatik, die die [Basket-Prefill-Links](/docs/de/developers/basket-prefill) verwenden.

Ein Warenkorb hält Intent, keine Preise: Jede Operation löst ihn gegen das aktuelle Menü neu auf und bepreist ihn neu, sodass ein gespeicherter Warenkorb keinen Betrag nennen kann, dem die Filialseite widerspräche. Warenkörbe verfallen 24 Stunden nach dem letzten Schreibvorgang, und es wird nichts Kundenbezogenes darin gespeichert.

> [!WARNING]
>
> Ein Warenkorb ist keine Bestellung, und diese Tools sprechen nur für die Seite des Kunden. Nichts hier liest die Bestellwarteschlange eines Stores, bearbeitet ein Menü oder ändert eine Einstellung. Die Tools geben eine `continue_url` zurück, die der Kunde öffnet, um den Warenkorb zu prüfen und auf der Filialseite zu bezahlen — es gibt kein Checkout-, Zahlungs- oder Rabatt-Tool, und es wird keine Bestellung aufgegeben, bis er dort fertig ist.

## Verwandt

> **[UCP-Discovery](/docs/de/developers/agents/ordering/ucp)**
>
> Das Profil, das diese Endpoints und die Cart-Capability bewirbt.

> **[WebMCP-Tools](/docs/de/developers/agents/ordering/webmcp)**
>
> Das separate Tool-Set, das ein Agent im Browser des Kunden aufruft.


## Related topics

- [UCP-Discovery](/docs/de/developers/agents/ordering/ucp.md)
- [Übersicht der Bestell-Agenten](/docs/de/developers/agents/ordering/overview.md)
- [WebMCP-Tools](/docs/de/developers/agents/ordering/webmcp.md)
- [llms.txt](/docs/de/developers/agents/ordering/llms-txt.md)
- [Einführung für Entwickler](/docs/de/developers/introduction.md)


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