Diese Dokumentation bezieht sich immer auf den aktuellen Stand des main-Branches.
Der Server stellt 42 Tools bereit. Die Grenzwerte unten stammen aus der Eingabeprüfung (Zod), die jeden Aufruf vor der Ausführung validiert.
| Bereich | Anzahl | Tools |
|---|---|---|
| Produkte | 6 | product_create, product_get, product_list, product_update, product_set_active, search_products |
| Content | 4 | product_generate_content, product_generate_seo, variant_generate_content, content_update |
| Kategorien | 4 | category_list, category_get, category_generate_content, category_update |
| Hilfen | 3 | get_properties, get_manufacturers, snippet_list |
| Mail-Templates | 4 | mail_template_list, mail_template_get, mail_template_update, mail_template_send_test |
| Flows | 3 | flow_list, flow_get, flow_toggle |
| Medien | 6 | media_list, media_get, media_update, media_search, media_audit_alt, media_upload_url |
| Bestellungen | 3 | order_list, order_get, order_stats |
| Cross-Selling | 5 | cross_selling_list, cross_selling_get, cross_selling_create, cross_selling_update, cross_selling_suggest |
| SEO-URLs | 4 | seo_url_list, seo_url_audit, seo_url_update, seo_url_generate |
limit und offset. Der Server rechnet daraus die Seite offset / limit + 1, ein offset, der kein Vielfaches von limit ist, wird abgerundet.isError. Das Format steht unter Technische Details.product_create erzeugt immer ein inaktives Produkt. Geändert wird nur, was du übergibst.| Tool | Parameter | Verhalten |
|---|---|---|
product_create |
Pflicht: name (1 bis 255), productNumber (1 bis 64), price (brutto, größer 0), categoryId. Optional: description (HTML, bis 65535), ean (bis 50), manufacturerId, taxId, stock (ganzzahlig, ab 0, Standard 0), salesChannelId, tags, searchKeywords |
Legt das Produkt immer inaktiv an, mit Sichtbarkeit "überall" im Verkaufskanal. Der Preis wird als Brutto in der Standard-Währung gespeichert, der Nettopreis aus SHOPWARE_DEFAULT_TAX_RATE berechnet. Tags werden bei Bedarf angelegt. Eine doppelte Artikelnummer ergibt PRODUCT_NUMBER_EXISTS. Rückgabe: id, productNumber, name, active. |
product_get |
id oder productNumber (eines von beiden) |
Liefert Produkt mit Kategorien, Hersteller, Varianten samt Optionen, Eigenschaften und Medien. Wird 5 Minuten zwischengespeichert. |
product_list |
categoryId, active, search (bis 255, sucht in Name und Artikelnummer), limit (1 bis 100, Standard 25), offset |
Rückgabe: products und total. |
product_update |
Pflicht: id. Optional: name, price, description, ean, stock, manufacturerId, customFields (bis 50 Felder, Werte Text bis 5000, Zahl, Wahrheitswert oder null), metaTitle, metaDescription, keywords (je bis 255), tags, searchKeywords |
Schreibt über die Sync-API (Upsert mit der Versions-ID des Produkts). Der Preis ist Brutto, der Nettopreis kommt aus SHOPWARE_DEFAULT_TAX_RATE. |
product_set_active |
id, active |
Aktiviert oder deaktiviert das Produkt. |
search_products |
query (2 bis 255), limit (1 bis 50, Standard 20) |
Volltextsuche. Rückgabe: id, productNumber, name, active. |
Diese Tools erzeugen keinen Text. Sie liefern Kontext und Vorgaben, den Text schreibt Claude. Gespeichert wird er mit content_update.
| Tool | Parameter | Verhalten |
|---|---|---|
product_generate_content |
Pflicht: productId. Optional: style, maxLength (200 bis 5000, Standard 1000), includeSnippets (Standard true), snippetIds |
Rückgabe: style, profile, context, wikiUrl (immer null), availableSnippets, maxLength und prompt. Der Prompt-Text ist deutsch und enthält Produktdaten, Eigenschaften, Profil-Vorgaben und die ersten 500 Zeichen der bestehenden Beschreibung ohne HTML. Textbausteine kommen nur bei einem Profil mit includeSnippets: true. |
product_generate_seo |
Pflicht: productId. Optional: style, maxTitleLength (30 bis 70, Standard 60), maxDescriptionLength (100 bis 160, Standard 155) |
Rückgabe: style, profile, productName, categoryPath, existingDescription, constraints und prompt. |
variant_generate_content |
Pflicht: variantId. Optional: inheritFromParent (Standard true), focusOnOptions (Standard true) |
Prompt für die Varianten-Beschreibung, feste Länge 500. inheritFromParent hat keine Wirkung: Der Server lädt kein Elternprodukt, der Prompt beruht auf der Variante selbst. Auch die Stil-Erkennung läuft automatisch über die Kategorien der Variante, einen style-Parameter gibt es nicht. |
content_update |
Pflicht: productId. Optional: description (bis 65535), metaTitle, metaDescription, keywords (je bis 255) |
Speichert über dasselbe Update wie product_update. Rückgabe: productId und die Liste der geänderten Felder. |
| Tool | Parameter | Verhalten |
|---|---|---|
category_list |
parentId, depth (1 bis 10, Standard 3), includeInactive (Standard false) |
Flache Liste mit bis zu 500 Kategorien. Mit parentId nur direkte Kinder. children ist immer leer, depth ändert das Ergebnis nicht. productCount ist die Zahl der Unterkategorien. Wird 10 Minuten zwischengespeichert. |
category_get |
Pflicht: id. Optional: includeProducts (Standard false), productLimit (1 bis 100, Standard 25) |
Kategorie mit Breadcrumb und SEO-Daten, optional mit Produktliste. |
category_generate_content |
Pflicht: id. Optional: style, maxLength (100 bis 2000, Standard 500) |
Rückgabe: Kategorie (id, name, breadcrumb), style, maxLength und eine kurze englische Anweisung mit Anrede, Ton und Zielgruppe des Profils. |
category_update |
Pflicht: id. Optional: description (bis 65535), metaTitle, metaDescription, keywords (je bis 255) |
Aktualisiert die Felder und leert danach den gesamten Cache des Servers. |
| Tool | Parameter | Verhalten |
|---|---|---|
get_properties |
groupId |
Eigenschaftsgruppen mit Optionen, bis zu 100 Gruppen, nach Position sortiert. |
get_manufacturers |
search (bis 100), limit (1 bis 100, Standard 50) |
Hersteller mit Link, Beschreibung und Logo. Die Liste ohne Suche wird 10 Minuten zwischengespeichert. |
snippet_list |
activeOnly (Standard true) |
Textbausteine des Plugins mit der Entität mmd-product-snippet, bis zu 100, mit identifier, name und active. |
Es gibt kein Anlegen und kein Löschen von Templates.
| Tool | Parameter | Verhalten |
|---|---|---|
mail_template_list |
search (Typname oder Betreff), limit (1 bis 100, Standard 50), offset |
Rückgabe: Templates mit technicalName, typeName, subject, systemDefault, updatedAt sowie count und total. |
mail_template_get |
id oder technicalName |
Details mit Betreff, HTML- und Text-Inhalt und dem Mail-Typ samt verfügbaren Entitäten für Twig. Wird 10 Minuten zwischengespeichert. |
mail_template_update |
Pflicht: id. Optional: subject (1 bis 998), contentHtml, contentPlain (je bis 16777215), senderName (bis 255), description (bis 65535) |
Ändert nur übergebene Felder. Twig-Syntax bleibt unverändert im Inhalt. |
mail_template_send_test |
Pflicht: mailTemplateId, recipient. Optional: salesChannelId |
Sendet das Template im Testmodus (Shopware setzt Beispieldaten für Twig-Variablen). Der Empfänger muss eine gültige E-Mail-Adresse bis 254 Zeichen sein und darf weder localhost enthalten noch eine IP-Adresse als Domain haben. Begrenzt auf 5 Aufrufe je Template und 10 insgesamt pro Minute (RATE_LIMITED). |
| Tool | Parameter | Verhalten |
|---|---|---|
flow_list |
active, eventName (exakt), search (Name oder Beschreibung), hasMailAction, limit (1 bis 100, Standard 50), offset |
Liste mit actionCount und hasMailAction. Als Mail-Aktion zählen action.mail.send und action.mail.send.create.document. Der Filter hasMailAction wirkt erst nach der Seitenabfrage, total zählt dann nur die gefilterte Seite. |
flow_get |
id oder name (exakt) |
Flow mit Sequenzen als Baum nach Position, inklusive Regel. Wird 5 Minuten zwischengespeichert. |
flow_toggle |
id, active |
Schaltet den Flow ein oder aus und gibt den aktualisierten Flow zurück. |
| Tool | Parameter | Verhalten |
|---|---|---|
media_list |
mediaFolderId, mimeTypePrefix (Format typ/, etwa image/), hasAlt, limit (1 bis 100, Standard 25), offset |
Neueste zuerst. hasAlt: false liefert Medien ohne Alt-Text (NULL). Rückgabe: count, total, media. |
media_get |
id |
Details mit Thumbnails, Ordner und Produkten, die das Medium nutzen. Wird 5 Minuten zwischengespeichert. |
media_update |
Pflicht: id. Optional: alt, title (je bis 255) |
Mindestens eines von beiden ist nötig. |
media_search |
query (2 bis 255), limit (1 bis 50, Standard 20) |
Volltextsuche über Dateiname, Alt-Text und Titel. |
media_audit_alt |
onlyActive (Standard true), limit (1 bis 200, Standard 100) |
Sucht Bilder (image/) ohne Alt-Text über die Produkt-Medien-Zuordnung und gruppiert sie je Medium mit den betroffenen Produkten. Das Limit gilt für die abgefragten Zuordnungen. Schlägt die Abfrage fehl, wird der Weg über die Medien-Entität genommen. Rückgabe: totalMediaChecked, missingAltCount, affectedProductCount, items, recommendation. |
media_upload_url |
Pflicht: url (http oder https, bis 2048). Optional: alt, title, mediaFolderId |
Legt ein Medium an und lässt Shopware die Datei von der URL laden. Dateiname und Endung stammen aus der URL, nicht erlaubte Endungen werden zu jpg. Erlaubt: jpg, jpeg, png, gif, webp, svg, bmp, tiff, tif, pdf, ico. Schlägt der Download fehl, wird das angelegte Medium wieder gelöscht. Interne und private Adressen lehnt die Prüfung ab, siehe Sicherheit. |
| Tool | Parameter | Verhalten |
|---|---|---|
order_list |
orderStatus (open, in_progress, completed, cancelled), paymentStatus (open, authorized, paid, paid_partially, refunded, refunded_partially, failed, cancelled, unconfirmed, reminded, chargeback), deliveryStatus (open, shipped, shipped_partially, returned, returned_partially, cancelled), customerEmail (Teilstring), dateFrom, dateTo (YYYY-MM-DD oder YYYY-MM-DDTHH:MM:SS), limit (1 bis 100, Standard 25), offset |
Neueste zuerst. Rückgabe: count, total, orders mit unter anderem customerName und customerEmail. dateFrom und dateTo gehen unverändert als untere und obere Grenze an Shopware. Ob bei einem reinen Datum der Endtag noch dazugehört, hängt von Shopwares Datumsauslegung ab. |
order_get |
id oder orderNumber |
Bestellung mit Kunde (auch Firma), Rechnungs- und Lieferadresse (mit Telefonnummer), Positionen, Zahlungen, Lieferungen und Kundenkommentar. Wird 2 Minuten zwischengespeichert. |
order_stats |
dateFrom, dateTo |
Anzahl, Umsatz (Summe der Bestell-Gesamtbeträge), durchschnittlicher Bestellwert (Durchschnitt der Gesamtbeträge je Bestellung inklusive Versand und Steuer, auf zwei Stellen gerundet), Aufteilung nach Bestell- und Zahlungsstatus, Zeitraum und Währungssymbol. Für die Datumsgrenzen gilt dieselbe Einschränkung wie bei order_list. |
Die Bestell-Tools liefern personenbezogene Daten (Name, E-Mail, Adressen, Telefonnummer) in die Konversation mit Claude. Siehe Sicherheit und Datenschutz.
| Tool | Parameter | Verhalten |
|---|---|---|
cross_selling_list |
productId |
Bis zu 50 Gruppen mit id, name, type, active, position, assignedProductCount. |
cross_selling_get |
id |
Gruppe mit zugeordneten Produkten und gegebenenfalls Produkt-Stream. Wird 5 Minuten zwischengespeichert. |
cross_selling_create |
Pflicht: productId, name (1 bis 255). Optional: type (productList oder productStream, Standard productList), active (Standard true), position (ab 0, Standard 1), sortBy (name, cheapestPrice, releaseDate, productNumber), sortDirection (ASC, DESC), limit (1 bis 100, Standard 24), assignedProductIds, productStreamId |
Legt die Gruppe an. Die Reihenfolge von assignedProductIds bestimmt die Position. |
cross_selling_update |
Pflicht: id. Optional: name, active, position, sortBy, sortDirection, limit, assignedProductIds |
Ändert nur übergebene Felder. |
cross_selling_suggest |
Pflicht: productId. Optional: limit (5 bis 50, Standard 20) |
Liefert Kontext für Empfehlungen: Quellprodukt mit Eigenschaften, Kandidaten (aktive Produkte aus denselben Kategorien, nur Hauptprodukte ohne Varianten-Kindprodukte) und die Namen bestehender Gruppen. Die Auswahl trifft Claude. |
Zulässige Werte für routeName: frontend.detail.page (Produkt), frontend.navigation.page (Kategorie), frontend.landing.page (Landingpage).
| Tool | Parameter | Verhalten |
|---|---|---|
seo_url_list |
routeName, salesChannelId, foreignKey, isCanonical, isDeleted, search (2 bis 255), limit (1 bis 100, Standard 25), offset |
Nach Pfad sortiert. Rückgabe: urls und total. |
seo_url_audit |
routeName, salesChannelId, limit (10 bis 500, Standard 200) |
Prüft die ersten URLs (nach Entität sortiert) auf drei Probleme: deleted_url (Warnung), duplicate_path (Fehler, mehrere kanonische URLs mit gleichem Pfad im selben Verkaufskanal) und no_canonical (Fehler, Entität ohne kanonische URL). Bei Begrenzung durch limit können Meldungen unvollständig sein. |
seo_url_update |
Pflicht: id. Optional: seoPathInfo (1 bis 2048), isCanonical, isDeleted |
Mindestens ein Feld ist nötig. Ein neuer seoPathInfo setzt isModified automatisch auf true. |
seo_url_generate |
routeName, salesChannelId (beide Pflicht) |
Ruft die Shopware-Aktion /api/_action/seo-url/create-custom-url auf und fällt bei einem Fehler auf /api/_action/seo-url/canonical zurück. |