Skip to main content
Glama
AbdulRehman0004

Shopify Content Engine MCP Server

Shopify Product Content Engine

CI n8n OpenAI MCP Python License

Eine n8n-Pipeline, die aus einem nackten Produkt (product_name, product_description) ein vollständiges, prüfbereites Marketing-Kit macht – SEO-Recherche, Produktseitentext, einen Blogbeitrag, Google- + Meta-Anzeigen, Social-Posts, eine E-Mail und ein Hero-Bild – und eine Zeile pro Produkt in ein Prüfblatt schreibt. Nichts veröffentlicht automatisch; ein Mensch genehmigt.

Neben dem Workflow liefert dieses Repo zwei Dinge, die es betriebsbereit und nicht nur eine Demo machen: ein Eval-Harnass, das jedes generierte Kit anhand der eigenen Regeln der Engine bewertet (Längenbeschränkungen, gesperrte Wörter, erfundene Tatsachen) und einen MCP-Server, sodass jeder Agent – Claude Desktop, Claude Code, Cursor, Ihr eigener – Entwürfe validieren und Ausführungen auslösen kann.

product_name + product_description
        │
        ▼
 ┌────────────── n8n ──────────────┐
 │ idempotency gate → 3 LLM calls  │──▶ Review sheet (status=done | failed)
 │ strict JSON → validate → map    │──▶ hero image → Drive
 │ dry-run · retry · dead-letter   │──▶ batch summary email
 └─────────────────────────────────┘
        ▲                       │
   MCP server               eval harness
 (validate / run)      (rules + LLM judge, gates CI)

Warum es so gebaut ist

Anliegen

Was die Engine tut

Halluzinierte Spezifikationen

Jeder Prompt ist nur auf Fakten basiert; das Eval markiert jede Zahl/Einheit oder Behauptungswörter (clinically, certified, vegan, …), die nicht im Produktinput vorhanden sind.

Fragiles Parsen

Alle drei Modellaufrufe verwenden OpenAI Structured Outputs (strict: true) – schema-valides JSON, kein Regex.

Wiederholungen / Kosten

Ein Idempotenz-Gate überspringt alles, was bereits status=done ist; forceRegenerate überschreibt. Bulk-Modell ist gpt-4o-mini.

Ein schlechtes Produkt

Wiederholung pro Aufruf + Fortsetzen bei Fehler. Fehlschläge werden als status=failed-Zeilen mit einem failure_reason (Dead-Letter) geschrieben – der Batch stoppt nie.

Unentdeckte Fehler

Wird an einen separaten Error-Handler-Workflow weitergeleitet → Alarm-E-Mail.

Testen ohne Nebenwirkungen

dryRun=true generiert und validiert, schreibt aber nichts.

Veröffentlichen

Niemals automatisch. Entwürfe landen im Reiter Review und ein Mensch genehmigt.

Plattformlimits

Harte Grenzen (SEO-Titel ≤ 60, Meta ≤ 155, Google-Überschrift ≤ 30, X ≤ 280, …) befinden sich in config/, werden im Parse-Node durchgesetzt und von den Evals erneut geprüft.

Related MCP server: Shopify MCP Server

Ablauf

Manual / Schedule / Webhook ─▶ ⚙️ Config ─▶ 📥 Read Products [swap point → Shopify]
  ─▶ 📖 Read Done ─▶ 🚦 Idempotency Gate ─▶ 🔢 Limit ─▶ 🔁 Loop (1 product at a time)
        ─▶ 🤖 A: SEO + Product Page ─▶ 🤖 B: Blog ─▶ 🤖 C: Ads / Social / Email / Image prompt
        ─▶ 🧩 Parse, Validate & Map ─▶ 🧪 Dry run?
              ├─ yes ─▶ 📝 Dry-run log (no write) ─▶ loop
              └─ no  ─▶ 🖼️ Images? ─▶ 🎨 gpt-image-1 ─▶ ☁️ Drive ─▶ 📤 Upsert Review row ─▶ loop
  🔁 done ─▶ 📊 Batch summary ─▶ ✉️ Email (optional)
  (uncaught) ─▶ ⚠️ Error Handler workflow ─▶ alert email

Vollständiges Mermaid-Diagramm: docs/architecture.mmd. Produktquelle ist heute ein Google Sheet; 📥 Read Products ist ein markierter Austauschpunkt für Shopify → Get Products (title → product_name, body_html → product_description).

Evaluierungen

python -m evals bewertet Kits (Zeilen aus dem Reiter Review) anhand der Regeln, die die Engine einzuhalten verspricht. Regeln stammen direkt aus config/generation.config.yaml und config/brand-voice.yaml, sodass eine Änderung einer Grenze in der Konfiguration auch die Evaluierung ändert.

Prüfgruppe

Beispiele

Vollständigkeit

status=done, alle 19 Inhaltsfelder vorhanden

Harte Grenzen

8 Zeichenbegrenzungen, 3 Wortbereiche, ≤15 Google-Überschriften mit jeweils ≤30 Zeichen, 5–10 Hashtags

Struktur

4–6 Aufzählungspunkte, H2/H3 im Blog, genau ein {PRODUCT_URL}-CTA, Slug-Format

SEO-Platzierung

Primäres Schlüsselwort im Titel / Meta / ersten Satz (Warnungen)

Markenstimme

Gesperrte Wörter aus brand-voice.yaml

Nur Fakten

Zahlen+Einheiten und Behauptungswörter in der Ausgabe müssen im Produktinput vorhanden sein

LLM-Richter (--judge)

1–5 für Nur-Fakten, Markenstimme, SEO-Qualität + zitierte nicht belegte Behauptungen (Structured Outputs, opt-in, benötigt OPENAI_API_KEY)

Aktueller goldenen Satz (echtes Kit aus einem Live-Lauf, evals/golden/kits.json):

Produkt

Bewertung

Was es erfasst hat

Gentle Hydrating Gel Cleanser

88%

description 66 Wörter (gewünscht 150–250), Blog 507 Wörter (gewünscht 900–1200), E-Mail 28 Wörter (gewünscht 60–120) – das Modell liefert zu wenig Länge; der Parse-Node kürzt überlange Texte, hat aber noch keine Mindestlängen-Wiederholung

Diese Erkenntnis ist genau der Grund, warum das Harnass existiert – es ist jetzt ein offener Punkt (siehe Fahrplan). Führen Sie es gegen Ihren eigenen Export aus mit python -m evals --input review-export.csv --min-score 0.9; der Exit-Code ungleich Null sperrt CI.

MCP-Server

mcp_server/ stellt die Engine über das Model Context Protocol (stdio) bereit:

Werkzeug

Zweck

get_brand_voice

Stimme, Zielgruppe, gesperrte Wörter, Nur-Fakten-Regel

get_generation_limits

Die harten Grenzen + Ausführungsflags

list_sample_products

Die fünf Testprodukte

validate_content_kit(row, product)

Bewertet einen Entwurf mit denselben Regeln wie die Evaluierungen

run_content_engine(dry_run=True, …)

POST an den Workflow-Webhook mit ausführungsspezifischen Flags – standardmäßig Trockenlauf

Ressourcen: content-engine://columns (Spaltenzuordnung des Prüfblatts), content-engine://prompts/{A|B|C}.

Konfiguration für Claude Desktop / Claude Code:

{
  "mcpServers": {
    "shopify-content-engine": {
      "command": "content-engine-mcp",
      "env": { "N8N_WEBHOOK_URL": "https://<your-instance>/webhook/shopify-content-engine-run" }
    }
  }
}

Repo-Struktur

workflows/     shopify-content-engine.workflow.json · error-handler.workflow.json   (import these)
prompts/       system prompts A / B / C + prompt library (version-controlled mirror of ⚙️ Config)
config/        brand-voice.yaml · generation.config.yaml                            (limits, flags)
docs/          runbook.md · architecture.mmd · output-sheet-columns.md
test/          product-fixtures.json (5 products) · dry-run checklist · a real generated kit
evals/         checks.py (rules) · judge.py (LLM judge) · golden/ · tests/
mcp_server/    server.py · tests/
scripts/       check_workflows.py — static checks on the exported JSON (runs in CI)

Schnellstart

Workflow

  1. Importieren Sie workflows/error-handler.workflow.json, dann workflows/shopify-content-engine.workflow.json.

  2. Wählen Sie die Anmeldeinformationen für die OpenAI / Google Sheets / Drive / Gmail-Knoten neu aus (niemals im JSON gespeichert).

  3. Zeigen Sie 📥 Read Products, 📖 Read Done, 📤 Write auf ein Blatt mit den Reitern Products und Review.

  4. Setzen Sie Settings → Error Workflow auf den importierten Error-Handler.

  5. Führen Sie einen Trockenlauf mit den fünf Testprodukten durch (test/README.md), dann führen Sie es wirklich aus. Ausführungsflags können im Webhook-Body gesendet werden: {"dryRun": true, "enableImages": false}.

Evals + MCP

pip install -e ".[mcp,dev]"
python -m evals                     # score the golden set
python -m evals --input export.csv  # score your own Review-tab export
pytest                              # 27 tests: rules, negative cases, MCP tools in-process
content-engine-mcp                  # start the MCP server (stdio)

Fahrplan

  • Mindestlängen-Guard + eine selbstkorrigierende Wiederholung im Parse-Schritt (die Evaluierung markiert derzeit kurze Texte im Nachhinein).

  • Header-Authentifizierung am Webhook-Trigger (n8n-Anmeldeinformation) – derzeit basierend auf dem nicht erratbaren Pfad.

  • Shopify Admin API als Produktquelle und ein Draft product-Rückschreiben hinter demselben Genehmigungs-Gate.

  • Goldener Satz: weitere echte Kits, eines pro Testprodukt, und ein nächtlicher --judge-Lauf.

Lizenz

MIT

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables to manage Shopify store resources like products, orders, customers, inventory, and collections through natural language using the Shopify Admin API.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to manage Shopify stores via natural language, with tools for products, orders, inventory, customers, and analytics.
    6 npm
    MIT