Skip to main content
Glama
AbdulRehman0004

Shopify Content Engine MCP Server

Shopify Content Engine для товаров

CI n8n OpenAI MCP Python License

Конвейер n8n, который превращает «голый» товар (product_name, product_description) в полный маркетинговый набор, готовый к рецензированию — SEO-исследование, текст карточки товара, пост в блоге, рекламу в Google + Meta, посты в соцсетях, письмо и изображение героя — и записывает одну строку на товар в лист рецензирования. Ничто не публикуется автоматически; утверждает человек.

Наряду с рабочим процессом в этом репозитории поставляются две вещи, которые делают его работоспособным, а не демонстрацией: тестовый стенд (eval harness), который оценивает каждый сгенерированный набор по собственным правилам движка (ограничения длины, запрещённые слова, выдуманные факты), и MCP-сервер, чтобы любой агент — Claude Desktop, Claude Code, Cursor, ваш собственный — мог проверять черновики и запускать выполнение.

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)

Почему он так построен

Проблема

Что делает движок

Галлюцинированные характеристики

Каждый промпт основан только на фактах; оценка помечает любое число/единицу или слово-утверждение (клинически, сертифицировано, веган, …), отсутствующее во входных данных товара.

Хрупкий парсинг

Все три вызова модели используют OpenAI Structured Outputs (strict: true) — JSON, соответствующий схеме, без регулярных выражений.

Повторные запуски / стоимость

Шлюз идемпотентности пропускает всё, что уже имеет status=done; forceRegenerate переопределяет. Массовая модель — gpt-4o-mini.

Один плохой товар

Повторные попытки на каждый вызов + продолжение при ошибке. Сбои записываются как строки status=failed с failure_reason (dead-letter) — пакет никогда не останавливается.

Неотловленные сбои

Направляются в отдельный рабочий процесс Error Handler → оповещение по электронной почте.

Тестирование без побочных эффектов

dryRun=true генерирует и проверяет, но ничего не записывает.

Публикация

Никогда не автоматическая. Черновики попадают на вкладку Review, и человек утверждает.

Ограничения платформы

Жёсткие ограничения (SEO-заголовок ≤ 60, мета-описание ≤ 155, заголовок Google ≤ 30, X ≤ 280, …) находятся в config/, применяются в узле Parse и повторно проверяются оценками.

Related MCP server: Shopify MCP Server

Поток

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

Полная диаграмма Mermaid: docs/architecture.mmd. Источник товаров сегодня — Google Sheet; 📥 Read Products — отмеченная точка замены на Shopify → Get Products (title → product_name, body_html → product_description).

Оценки

python -m evals оценивает наборы (строки на вкладке Review) по правилам, которые движок обещает соблюдать. Правила берутся прямо из config/generation.config.yaml и config/brand-voice.yaml, поэтому изменение ограничения в конфиге меняет оценку.

Семейство проверок

Примеры

Полнота

status=done, все 19 полей контента присутствуют

Жёсткие ограничения

8 символьных ограничений, 3 диапазона слов, ≤15 заголовков Google, каждый ≤30 символов, 5–10 хэштегов

Структура

4–6 пунктов, H2/H3 в блоге, ровно один CTA {PRODUCT_URL}, формат slug

Размещение SEO

основное ключевое слово в заголовке / мета-описании / первом предложении (предупреждения)

Голос бренда

запрещённые слова из brand-voice.yaml

Только факты

числа+единицы и слова-утверждения в выводе должны присутствовать во входных данных товара

Судья LLM (--judge)

1–5 по критериям «только факты», голос бренда, качество SEO + процитированные неподтверждённые утверждения (Structured Outputs, опционально, требуется OPENAI_API_KEY)

Текущий золотой набор (реальный набор из живого запуска, evals/golden/kits.json):

Товар

Оценка

Что было выявлено

Gentle Hydrating Gel Cleanser

88%

описание 66 слов (нужно 150–250), блог 507 слов (нужно 900–1200), письмо 28 слов (нужно 60–120) — модель недодаёт по длине; узел Parse обрезает слишком длинный текст, но пока нет повторной попытки при недостаточной длине

Именно этот вывод и есть причина существования тестового стенда — теперь это открытый пункт (см. дорожную карту). Запустите его на своём экспорте с помощью python -m evals --input review-export.csv --min-score 0.9; ненулевой код возврата блокирует CI.

MCP-сервер

mcp_server/ предоставляет движок через Model Context Protocol (stdio):

Инструмент

Назначение

get_brand_voice

голос, аудитория, запрещённые слова, правило «только факты»

get_generation_limits

жёсткие ограничения + флаги запуска

list_sample_products

пять фикстурных товаров

validate_content_kit(row, product)

оценить черновик по тем же правилам, что и оценки

run_content_engine(dry_run=True, …)

отправить POST на вебхук рабочего процесса с флагами запуска — по умолчанию dry-run

Ресурсы: content-engine://columns (карта столбцов листа Review), content-engine://prompts/{A|B|C}.

Конфигурация Claude Desktop / Claude Code:

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

Структура репозитория

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)

Быстрый старт

Рабочий процесс

  1. Импортируйте workflows/error-handler.workflow.json, затем workflows/shopify-content-engine.workflow.json.

  2. Повторно выберите учётные данные на узлах OpenAI / Google Sheets / Drive / Gmail (они никогда не хранятся в JSON).

  3. Укажите 📥 Read Products, 📖 Read Done, 📤 Write на лист с вкладками Products и Review.

  4. Установите Settings → Error Workflow на импортированный обработчик ошибок.

  5. Выполните сухой прогон пяти фикстур (test/README.md), затем запустите по-настоящему. Флаги запуска можно передать в теле вебхука: {"dryRun": true, "enableImages": false}.

Оценки + 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)

Дорожная карта

  • Защита от недостаточной длины + одна самокорректирующаяся повторная попытка на этапе Parse (оценка сейчас помечает короткий текст постфактум).

  • Аутентификация по заголовку на триггере вебхука (учётные данные n8n) — сегодня он полагается на непредсказуемый путь.

  • Shopify Admin API как источник товаров и запись обратно в Draft product за тем же шлюзом утверждения.

  • Золотой набор: больше реальных наборов, по одному на фикстуру, и ночной запуск --judge.

Лицензия

MIT

Related MCP Connectors

Related MCP Servers

  • F
    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.
    -
  • 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
  • A
    license
    A
    quality
    B
    maintenance
    Drives an AI CMO to add products, generate on-brand content (UGC video, posts, images), approve, and publish across 30+ platforms via natural language.
    2
    45 npm
    MIT