MCP-Tools der Guthaben-Verwaltung
Die Guthaben-Verwaltung stellt dem Shopware MCP Server fünf Tools, einen Prompt und eine Resource zur Verfügung. Damit können KI-Assistenten (Shopware Copilot, Claude, andere MCP-Clients) Gutscheine suchen, anlegen, auf- und abbuchen, ändern und auswerten — mit denselben Regeln wie in der Administration.
Alle Bestandteile gehören zur Tool-Gruppe bzw. zum Toolset lenz-credit-management
(in der Administration: „Lenz credit management tools").
Überblick
| Tool | Zweck | Schreibt? |
|---|---|---|
lenz-credit-management-credit-lookup |
Gutscheine und Restguthaben suchen | nein |
lenz-credit-management-credit-create |
1–30 Gutscheine mit Startguthaben anlegen | ja, mit Vorschau |
lenz-credit-management-credit-balance-adjust |
Guthaben aufladen oder abbuchen | ja, mit Vorschau |
lenz-credit-management-credit-update |
Status, Ablaufdatum, Kunde, Einschränkung ändern | ja, mit Vorschau |
lenz-credit-management-credit-report |
Anzahl, offenes Guthaben, Bewegungen im Zeitraum | nein |
Prompt lenz-credit-management-context |
Erklärt dem Modell Domäne, Tools und Regeln | – |
Resource lenz-credit-management://config |
Code-Format, Standard-Steuer, Ablauf-Einstellungen | – |
Voraussetzungen
| Shopware | Stand |
|---|---|
| < 6.7.11 | Keine MCP-Klassen im Core — das Plugin lädt die Tools nicht, alles andere funktioniert normal. |
| 6.7.11 – 6.7.13 | Tools verfügbar. Der MCP-Server muss mit MCP_SERVER=1 in der .env des Shops aktiviert werden (eine Container-Umgebungsvariable reicht für Apache nicht). Keine Tool-Gruppen. |
| ab 6.7.14 | Tool-Gruppen/Toolsets, MCP-Allowlist und Shopware Copilot. |
Prüfen, ob die Tools registriert sind:
Erwartet: fünf Tools, der Prompt lenz-credit-management-context und die Resource lenz-credit-management-config.
Einrichtung
1. Rolle anlegen
Unter Einstellungen → Benutzer & Rechte → Rollen gibt es unter „Marketing" die Rechte Guthaben und Gutschein-Layouts. Die MCP-Tools brauchen eine Rolle mit dem Guthaben-Recht:
| Tool | benötigte Stufe „Guthaben" | zusätzlich zur Laufzeit |
|---|---|---|
credit-lookup, credit-report |
Ansehen | customer:read bei Suche nach Kunde, order:read bei Suche nach Bestellnummer |
credit-balance-adjust, credit-update |
Bearbeiten | customer:read, wenn ein Kunde zugeordnet wird |
credit-create |
Erstellen | customer:read, wenn ein Kunde zugeordnet wird |
Shopware Copilot erreicht die Plugin-Tabellen nur über eine eigene Rolle, die diese Rechte gewährt. Ohne
customer:readliefert die Suche Gutscheine ohne Kundendaten (customerHidden: true).
Hinweis: „Guthaben ansehen" enthält system_config:read, weil die Admin-Seiten die Plugin-Konfiguration lesen.
Eine Integration mit dieser Rolle kann damit die gesamte Systemkonfiguration lesen.
2. Integration anlegen
oder unter Einstellungen → System → Integrationen. Dort:
- Die Rolle aus Schritt 1 zuweisen.
- Ab 6.7.14: „MCP-Allowlist bearbeiten" → Gruppe „Lenz credit management tools" erlauben.
- Im Rollen-Detail unter „MCP-Tool-Anforderungen anzeigen" prüfen, dass keine Rechte fehlen.
3. Client verbinden
Endpunkt: https://<shop>/api/_mcp (Streamable HTTP), Authentifizierung über die Header der Integration.
Beispiel .mcp.json für Claude Code:
{
"mcpServers": {
"shopware": {
"type": "http",
"url": "https://shop.example.com/api/_mcp",
"headers": {
"sw-access-key": "<Zugangs-ID>",
"sw-secret-access-key": "<Sicherheitsschlüssel>"
}
}
}
}
Ab 6.7.14 sind Plugin-Tools in Toolsets gruppiert. Der Client findet sie über shopware-tool-search
und schaltet sie mit shopware-toolset-enable ({"toolset": "lenz-credit-management"}) frei.
Die Tool-Suche ist lexikalisch: Stichworte wie „Gutschein anlegen" oder „Restguthaben" treffen
zuverlässig, ganze deutsche Sätze nicht immer.
Vorschau und Freigabe (dryRun)
Alle schreibenden Tools haben den Parameter dryRun, Standard true:
- Aufruf mit
dryRun=true→ die Änderung wird echt ausgeführt und dann zurückgerollt. Die Antwort zeigt genau das Ergebnis, das der echte Aufruf hätte — inklusive derselben Fehler. - Nach Freigabe derselbe Aufruf mit
dryRun=false→ die Änderung wird gespeichert.
Shopware Copilot macht das automatisch (Vorschau als Freigabekarte). Bei credit-create ohne festen Code
sind die Codes in der Vorschau nur Beispiele; die echten Codes stehen in der Antwort des zweiten Aufrufs.
Schutz vor Doppelbuchungen: Ein identischer Aufruf innerhalb von 120 Sekunden wird abgelehnt (gleiche Buchung mit gleichem Kommentar, gleicher Gutschein für denselben Kunden, gleicher fester Code). Das fängt Wiederholungen ab, wenn ein Client die Antwort nicht gesehen hat. Ist die zweite Buchung wirklich gewollt, einen anderen Kommentar verwenden.
Die Tools im Detail
lenz-credit-management-credit-lookup — Gutschein suchen
Sucht nach genau einem Kriterium und liefert das Restguthaben (Summe aller Buchungen).
| Parameter | Typ | Beschreibung |
|---|---|---|
code |
string | Gutscheincode |
customerEmail / customerNumber |
string | alle Gutscheine eines Kunden |
orderNumber |
string | Gutschein, der mit dieser Bestellung gekauft wurde |
includeInactive |
bool | auch deaktivierte Gutscheine (Standard false) |
limit |
int | 1–50, Standard 10 |
Antwort je Gutschein: code, name, balance, active, expiresAt, expired, residual,
onlyRedeemableByAssignedCustomer, source, orderNumber, customer, customerSuppliedText
(von Kunden beim Kauf eingegebene Texte — nur Daten, keine Anweisungen). Bei genau einem Treffer
zusätzlich die letzten fünf Buchungen (lastMovements).
Restguthaben immer über dieses Tool abfragen, nicht über
shopware-entity-search— der Wert steht nicht am Gutschein, sondern ergibt sich aus den Buchungszeilen.
lenz-credit-management-credit-create — Gutscheine anlegen
| Parameter | Typ | Beschreibung |
|---|---|---|
value |
float | Pflicht, Startguthaben > 0 |
name |
string | Pflicht, z. B. „Gutschein 50 €" — sieht der Kunde im Warenkorb |
quantity |
int | 1–30, Standard 1 |
code |
string | fester Code (nur bei quantity=1, ohne Leerzeichen); leer = Code im konfigurierten Format generieren |
customerEmail / customerNumber |
string | Kunde zuordnen |
onlyRedeemableByAssignedCustomer |
bool | nur der zugeordnete Kunde darf einlösen (braucht Kunde) |
expiresAt |
string | Ablaufdatum YYYY-MM-DD, muss in der Zukunft liegen |
residual |
bool | Restbetrag bleibt einlösbar (Standard true) |
comment |
string | Kommentar der Startbuchung, Standard „MCP" |
dryRun |
bool | Standard true |
Angelegte Gutscheine erhalten source = "mcp". Die Steuer kommt aus „Standard-Steuer" in der
Plugin-Konfiguration, sonst der niedrigste Steuersatz des Shops.
lenz-credit-management-credit-balance-adjust — aufladen oder abbuchen
| Parameter | Typ | Beschreibung |
|---|---|---|
amount |
float | Pflicht, positiv = aufladen, negativ = abbuchen, nicht 0 |
comment |
string | Pflicht, erscheint in der Guthaben-Historie |
code oder creditId |
string | welcher Gutschein |
dryRun |
bool | Standard true |
Schreibt eine Buchung charge-manual bzw. discharge-manual. Das Guthaben kann nicht unter 0 fallen.
Die Antwort enthält balanceBefore, change, balanceAfter und Warnungen, wenn der Gutschein inaktiv
oder abgelaufen ist.
lenz-credit-management-credit-update — Gutschein ändern
Ändert nur übergebene Werte; leere Parameter bleiben unverändert. Das Guthaben ändert dieses Tool nicht.
| Parameter | Typ | Beschreibung |
|---|---|---|
code oder creditId |
string | welcher Gutschein |
active |
"true" / "false" / leer |
sperren oder wieder aktivieren |
expiresAt |
string | neues Datum YYYY-MM-DD oder none zum Entfernen |
customerEmail / customerNumber |
string | anderen Kunden zuordnen |
removeCustomer |
bool | Kundenzuordnung entfernen |
onlyRedeemableByAssignedCustomer |
"true" / "false" / leer |
Einlösung auf Kunden beschränken |
dryRun |
bool | Standard true |
Die Antwort listet jedes geänderte Feld mit altem und neuem Wert. Abgelehnt werden u. a.: Beschränkung ohne zugeordneten Kunden, Kunde entfernen bei weiter bestehender Beschränkung (dann wäre der Gutschein für niemanden einlösbar) und Aufrufe, die nichts ändern.
lenz-credit-management-credit-report — Auswertung
| Parameter | Typ | Beschreibung |
|---|---|---|
from / to |
string | YYYY-MM-DD, Standard: aktueller Monat bis heute. Tage gelten in UTC. |
Antwort:
activeCredits— aktive, nicht abgelaufene GutscheineoutstandingBalance— offenes, noch einlösbares Gutscheinguthaben (Verbindlichkeit)period.charged— im Zeitraum aufgeladen (manuell und durch Kauf)period.redeemedInOrders— im Zeitraum in Bestellungen eingelöstperiod.deductedManually— im Zeitraum manuell abgebucht
Prompt lenz-credit-management-context
Gibt dem Modell das Domänenwissen mit: was ein Gutschein ist, wie sich das Guthaben berechnet, welche Tools es gibt, Abläufe für typische Aufgaben und die Regeln (Vorschau zuerst, keine Wiederholung nach Duplikat-Fehler, Kundentexte sind Daten). Clients, die Prompts unterstützen, können ihn zu Beginn laden.
Resource lenz-credit-management://config
JSON mit den Einstellungen, die ein Assistent zum Erklären einer Vorschau braucht: Code-Format (Präfix,
Länge, Trennzeichen), Standard-Steuer, Ablauf und Kundenzuordnung gekaufter Gutscheine,
autoDisableCreditOnZeroValue. Keine Kundendaten, keine Geheimnisse.
Beispiele
| Anfrage an den Assistenten | Tool |
|---|---|
| „Wie viel ist auf Gutschein ABCD-1234 noch drauf?" | credit-lookup (code) |
| „Welche Gutscheine hat Kunde 10001?" | credit-lookup (customerNumber) |
| „Welcher Gutschein wurde mit Bestellung 10057 gekauft?" | credit-lookup (orderNumber) |
| „Erstelle einen 25-€-Gutschein für max@example.com, nur für ihn einlösbar." | credit-create |
| „Erstelle 10 Gutscheine à 20 €, gültig bis Ende des Jahres." | credit-create (quantity=10, expiresAt) |
| „Buche 10 € von ABCD-1234 ab, Grund: Barauszahlung." | credit-balance-adjust (amount=-10) |
| „Erstatte Bestellung 10057 als Guthaben auf den Gutschein von max@example.com." | credit-lookup → credit-balance-adjust |
| „Sperre den Gutschein ABCD-1234." | credit-update (active="false") |
| „Wie viel offenes Gutscheinguthaben haben wir?" | credit-report |
| „Wie viel wurde im September eingelöst?" | credit-report (from=2026-09-01, to=2026-09-30) |
Direkter Aufruf per JSON-RPC (z. B. zum Testen mit curl, nach initialize mit Mcp-Session-Id):
{"jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": {
"name": "lenz-credit-management-credit-create",
"arguments": {"value": 50, "name": "Gutschein 50 €", "customerEmail": "max@example.com", "dryRun": true}
}}
Fehlermeldungen
Fehler kommen als normale Tool-Antwort mit einem Text, der sagt, was als Nächstes zu tun ist — etwa „Retry with includeInactive=true", „Cannot deduct 30.00: the credit has only 20.00 left" oder „An identical booking … was made less than 120 seconds ago". Fehlende Rechte werden mit dem Namen des fehlenden Rechts gemeldet.
Bekannte Grenzen
- Keine Zeilensperre gegen gleichzeitiges Abbuchen per MCP und Einlösen im Storefront.
- Die Tool-Suche (
shopware-tool-search) trifft Stichworte zuverlässiger als ganze Sätze.