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

Поток

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

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to read and write Shopify store data including products, orders, customers, inventory, and more via the Admin GraphQL API.
    28
    58
    MIT
  • F
    license
    -
    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
    C
    quality
    D
    maintenance
    Enables AI assistants like Cursor or Claude Desktop to fully manage a Shopify store using the Model Context Protocol, with tools for products, orders, customers, inventory, discounts, and analytics.
    32
    MIT

View all related MCP servers

Related MCP Connectors

  • Manage your Savanto store from your AI: catalog, content, prompts, and analytics, by chat.

  • Run GenflowAI templates and AI creative workflows for ecommerce visuals, UGC ads, and videos.

  • Manage your Jumpseller store with AI. Products, orders, customers, and more.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AbdulRehman0004/shopify-ai-content-engine'

If you have feedback or need assistance with the MCP directory API, please join our Discord server