Markus Michalski FAQ

Shopware Admin: Konfiguration

Konfiguration des Shopware Admin MCP-Servers: Umgebungsvariablen mit Standardwerten, Shopware-Integration einrichten und Content-Profile in der content-profiles.json.

English Version

Zurück zur Übersicht

Shopware Admin: Konfiguration

Diese Dokumentation bezieht sich immer auf den aktuellen Stand des main-Branches.

Umgebungsvariablen

Die Werte kommen aus der Prozessumgebung oder aus der .env-Datei (Suchreihenfolge siehe Installation). Eine Vorlage liegt als .env.example im Repository. Zeilen mit # sind Kommentare, Werte dürfen in einfachen oder doppelten Anführungszeichen stehen.

Pflichtangaben

Variable Beschreibung
SHOPWARE_URL Basis-URL des Shops ohne abschließenden Schrägstrich, zum Beispiel https://shop.example.com. Muss eine gültige URL sein.
SHOPWARE_CLIENT_ID Client-ID der Shopware-Integration.
SHOPWARE_CLIENT_SECRET Client-Secret der Shopware-Integration.
SHOPWARE_DEFAULT_TAX_ID ID des Standard-Steuersatzes (32 Zeichen Hex), wird bei product_create verwendet, wenn keine taxId übergeben wird.
SHOPWARE_DEFAULT_SALES_CHANNEL_ID ID des Standard-Verkaufskanals. Neue Produkte werden hier sichtbar, und Test-Mails nutzen ihn als Kontext.
WIKIJS_BASE_URL Muss eine gültige URL sein, sonst bricht der Start ab. Die Adresse wird nirgends verwendet, siehe Hinweis unten.

Optionale Angaben

Variable Standard Beschreibung
SHOPWARE_DEFAULT_TAX_RATE 0 Steuersatz in Prozent als ganze Zahl. Daraus wird der Nettopreis berechnet, 0 passt zum Kleinunternehmer. Ein ungültiger Wert fällt auf 0 zurück.
SHOPWARE_DEFAULT_CURRENCY_ID b7d2554b0ce847cd82f3ac9bd1c0dfca Währungs-ID für Preise. Der Standard ist die ID der Währung EUR in einer Standard-Installation.
CONTENT_PROFILES_PATH nicht gesetzt Pfad zur Datei mit den Content-Profilen, absolut oder relativ zum Arbeitsverzeichnis. Ohne Wert gilt die Suchreihenfolge: ~/.claude/mcp-servers/shopwareadmin/content-profiles.json, falls vorhanden, sonst ./content-profiles.json.
LOG_LEVEL info debug, info, warn oder error. Ein anderer Wert wird wie info behandelt.
CACHE_TTL_CATEGORIES 3600000 Hat keine Wirkung, siehe Hinweis unten.
CACHE_TTL_PROPERTIES 3600000 Hat keine Wirkung, siehe Hinweis unten.
CACHE_TTL_SNIPPETS 300000 Hat keine Wirkung, siehe Hinweis unten.

WIKIJS_BASE_URL und die drei CACHE_TTL_*-Variablen werden eingelesen und beim Start geprüft (gültige URL beziehungsweise Wert größer 0), danach aber von keinem Dienst verwendet. Die Cache-Laufzeiten sind fest im Code hinterlegt, siehe Technische Details. Die Wiki-Anbindung liefert in den Content-Ergebnissen immer wikiUrl: null.

Beim Start wird die HTTPS-Prüfung der SHOPWARE_URL nur als Warnung auf stderr ausgegeben. Der Server läuft auch mit http://, sendet die Zugangsdaten dann aber unverschlüsselt. Für localhost und 127.0.0.1 erscheint keine Warnung.

Shopware-Integration einrichten

  1. Im Shopware-Admin unter Einstellungen > System > Integrationen eine neue Integration anlegen.
  2. Client-ID und Client-Secret in die .env übernehmen.
  3. Der Integration die Rechte für die Bereiche geben, die du nutzen willst.

Der Server meldet sich mit dem OAuth2-Client-Credentials-Verfahren an (POST /api/oauth/token). Welche Entitäten er je Werkzeugbereich anspricht:

Bereich Entitäten Zugriff
Produkte, Content product, product_media, tag lesen, schreiben
Kategorien category lesen, schreiben
Eigenschaften, Hersteller property_group, property_group_option, product_manufacturer lesen
Mail-Templates mail_template, mail_template_type lesen, schreiben, Test-Mail senden
Medien media, media_folder, media_thumbnail lesen, schreiben, anlegen, bei fehlgeschlagenem Upload löschen
Bestellungen order samt Kunde, Adressen, Positionen, Zahlungen, Lieferungen, Status, Währung, Verkaufskanal nur lesen
Flows flow, flow_sequence, rule lesen, Flow ändern
Cross-Selling product_cross_selling, zugeordnete Produkte, product_stream lesen, schreiben
SEO-URLs seo_url lesen, schreiben
Textbausteine mmd-product-snippet (Plugin) lesen

Die Datei .env.example nennt nur einen Teil dieser Rechte. Das Repository enthält keine Rechteprüfung: Was die Integration darf, darf auch der Server. Vergib deshalb nur die Rechte der Bereiche, die du brauchst, und nutze getrennte Integrationen für Test und Produktion.

Content-Profile

Die Werkzeuge product_generate_content, product_generate_seo, variant_generate_content und category_generate_content formulieren Vorgaben für Claude. Ton, Anrede, Aufbau und Zielgruppe kommen aus Content-Profilen, die du in einer JSON-Datei festlegst.

Suchreihenfolge

  1. CONTENT_PROFILES_PATH, wenn gesetzt.
  2. ~/.claude/mcp-servers/shopwareadmin/content-profiles.json, wenn vorhanden.
  3. ./content-profiles.json im Arbeitsverzeichnis.

Findet der Server an dem ermittelten Ort keine Datei, nutzt er die eingebauten Profile und schreibt einen Hinweis ins Log. Das gilt auch, wenn CONTENT_PROFILES_PATH auf eine nicht vorhandene Datei zeigt. Eine vorhandene, aber ungültige Datei verhindert den Start, mit einer Fehlermeldung je fehlerhaftem Feld.

Struktur

{
  "language": "de",
  "defaultProfile": "creative",
  "profiles": {
    "creative": {
      "tonality": "Persoenlich, warm, emotional",
      "addressing": "du",
      "structure": ["Emotionaler Einstieg (Frage/Anekdote)", "Was ist es?", "Technische Details (Format, Groesse)", "Anwendungstipps"],
      "targetAudience": "Hobbybastler, Kreative, DIY-Enthusiasten",
      "exampleIntro": "Was waere denn Ostern ohne den Osterhasen?",
      "includeSnippets": false
    }
  },
  "categoryMapping": {
    "Stickdateien": "creative"
  }
}
Feld Typ Beschreibung
language Text, 2 bis 5 Zeichen Standard de. Wird eingelesen, aber von den Werkzeugen nicht ausgewertet.
defaultProfile Text Pflicht. Name eines vorhandenen Profils, gilt, wenn keine Kategorie passt.
profiles Objekt Pflicht, mindestens ein Profil. Der Schlüssel ist der Profilname und zugleich der Wert für den Parameter style.
profiles.*.tonality Text Pflicht, nicht leer.
profiles.*.addressing du oder Sie Pflicht, genau in dieser Schreibweise.
profiles.*.structure Liste von Texten Pflicht, mindestens ein Eintrag.
profiles.*.targetAudience Text Pflicht, nicht leer.
profiles.*.exampleIntro Text Pflicht, nicht leer.
profiles.*.includeSnippets Wahrheitswert Standard false. Mit true bietet der Server die aktiven Textbausteine an.
categoryMapping Objekt Pflicht (darf leer sein). Kategoriename zu Profilname, jeder Wert muss ein vorhandenes Profil sein.

Eingebaute Profile

Ohne Datei gelten die Profile creative (Anrede du, Standard) und software (Anrede Sie, mit Textbausteinen). Die Kategorie-Zuordnung lautet Software zu software sowie Stickdateien, Genaehtes und 3D-Druck zu creative. Es sind die Werte des Shops des Autors.

Stil-Erkennung

Textbausteine

Mit includeSnippets: true fragt der Server die Entität mmd-product-snippet ab. Sie stammt aus einem Shopware-Plugin für Produkt-Textbausteine, das im Shop installiert sein muss. Ohne dieses Plugin schlägt die Abfrage mit einem API-Fehler fehl, also auch der Aufruf von snippet_list.