ecommerce-mcp-automation
Ecommerce MCP Automation
A sample Claude Code + MCP integration: Shopify and Meta Ads exposed as MCP tools, plus a reporting agent that pulls both into one formatted daily P&L + ad-performance spreadsheet — no manual copy-paste between platforms.
Это демонстрация, собранная по публичной документации Shopify Admin API и Meta Marketing API — не то, что работало на реальном бизнесе. Это clean-room пример: реальные эндпоинты, реальная аутентификация, реальная пагинация, реальная обработка ошибок, написанные с нуля, чтобы показать, как именно строится такая автоматизация. Он работает end-to-end в mock-режиме без учётных данных (реалистичные фикстурные данные вместо живых ответов) и переключается в live-режим для каждой интеграции, как только задаются реальные учётные данные — см. Как запустить.
Клиент Shopify запускался в live-режиме против реального магазина для разработки Shopify Partners (песочницы, а не производственного бизнеса) — реальная аутентификация, реальный заказ, реальные ответы API. В ходе этого процесса всплыли и были исправлены два реальных крайних случая с nullable-значениями (см. Известные упрощения), которые одни только mock-фикстуры не покрывали. Meta Ads в этом репозитории по умолчанию работает через mock-транспорт; код клиента написан так же и переключается на live, как только заданы
META_ACCESS_TOKEN/META_AD_ACCOUNT_ID.
Что делает
Предоставляет заказы Shopify, выручку и COGS как MCP-инструменты (
get_orders,get_daily_pnl)Предоставляет расходы на Meta Ads, показы, покупки и ROAS как MCP-инструменты (
get_insights,get_daily_ad_performance)Запускает агента отчётности (
daily_report.py), который забирает оба источника одновременно и записывает отформатированный.xlsx— листы Summary, Orders и Ad PerformanceВключает навык Claude Code, который оборачивает весь рабочий процесс в триггер на естественном языке («запусти ежедневный отчёт»)
Включает готовый пример вывода, так что результат виден без запуска чего-либо
Related MCP server: ads-mcp
Пример вывода
Предварительный рендер вкладки Summary — откройте реально сгенерированную книгу, чтобы увидеть настоящий файл (с листами Orders и Ad Performance, форматированием валют/ROAS и закреплёнными строками заголовков).
Архитектура
flowchart LR
subgraph Shopify["Shopify Admin API"]
SO[orders.json]
SI[inventory_items.json]
end
subgraph Meta["Meta Marketing API"]
MI[act_id/insights]
end
SO --> SC[shopify_client.py]
SI --> SC
MI --> MC[meta_ads_client.py]
SC --> SS[shopify_server.py<br/>MCP tools]
MC --> MS[meta_ads_server.py<br/>MCP tools]
SC --> DR[daily_report.py]
MC --> DR
DR --> SPX[spreadsheet.py]
SPX --> XLSX[(sample_daily_report.xlsx)]
Mock[["mock_api.py<br/>(ASGITransport, in-process)"]] -.mock mode.-> SC
Mock -.mock mode.-> MCДва API-клиента (clients/shopify_client.py, clients/meta_ads_client.py) —
это настоящий интеграционный код: реальные URL эндпоинтов, реальные заголовки
аутентификации, реальные циклы пагинации, реальный backoff для 429.
Единственное, что меняется между mock- и live-режимом, — это HTTP-транспорт
(clients/http.py):
Live:
httpx.AsyncClientоткрывает реальное соединение с Shopify / Meta.Mock:
httpx.AsyncClientполучаетhttpx.ASGITransport, указывающий на внутрипроцессное FastAPI-приложение (fixtures/mock_api.py), отдающее реалистичные фикстурные данные. Порт не занимается, подпроцесс не запускается — но запросы по-прежнему проходят через настоящую HTTP/ASGI-маршрутизацию, заголовки и JSON-кодирование.
Это означает, что код клиента, который читает ревьюер, — это тот же код, который выполнялся бы против живого магазина, а не mock, наряженный, чтобы выглядеть как настоящий. Полные правила см. в CLAUDE.md.
Как запустить
Mock-режим (по умолчанию — без учётных данных)
git clone <this-repo> && cd ecommerce-mcp-automation
python -m venv .venv && source .venv/bin/activate # or: uv sync && source .venv/bin/activate
pip install -e ".[dev]"
python -m ecommerce_mcp.reporting.daily_report
# -> Wrote examples/sample_daily_report.xlsxЗапустите тестовый набор точно так же — настройка не нужна:
pytestLive-режим
Скопируйте .env.example в .env и заполните то, что у вас есть, — каждая
интеграция переключается в live-режим независимо, как только появляются её
собственные учётные данные, так что вы можете запустить Shopify в live, а Meta
оставить в mock-режиме (или наоборот):
cp .env.example .env
# SHOPIFY_STORE_DOMAIN=your-dev-store.myshopify.com
# SHOPIFY_ACCESS_TOKEN=shpat_... (Partners dev store -> custom app -> Admin API token)
# META_ACCESS_TOKEN=EAA... (System User token, ads_read scope)
# META_AD_ACCOUNT_ID=act_1234567890Как MCP-серверы (Claude Code / Claude Desktop)
Добавьте в ваш MCP-конфиг (.mcp.json для Claude Code или файл конфигурации
Claude Desktop). Укажите command напрямую на интерпретатор venv проекта —
MCP-клиенты не подгружают ваш профиль оболочки, поэтому голый python не увидит
активированное виртуальное окружение:
{
"mcpServers": {
"shopify": {
"command": "/path/to/ecommerce-mcp-automation/.venv/bin/python",
"args": ["-m", "ecommerce_mcp.mcp_servers.shopify_server"],
"cwd": "/path/to/ecommerce-mcp-automation"
},
"meta-ads": {
"command": "/path/to/ecommerce-mcp-automation/.venv/bin/python",
"args": ["-m", "ecommerce_mcp.mcp_servers.meta_ads_server"],
"cwd": "/path/to/ecommerce-mcp-automation"
}
}
}Затем спрашивайте Клода что-то вроде «какой сегодня P&L у Shopify?» или «покажи мне вчерашнюю эффективность Meta Ads» — он вызовет инструменты напрямую, по умолчанию в mock-режиме.
Как навык
skills/daily-report/SKILL.md оборачивает процесс генерации отчёта, чтобы
Claude Code запускал его по триггеру на естественном языке («запусти ежедневный
отчёт»), а не по точной команде CLI. Путь полного отчёта вообще не нуждается
в MCP-конфиге выше — он напрямую запускает daily_report.py, который вызывает
клиенты как обычный Python, без участия MCP. MCP-конфиг нужен только для другого
пути навыка: ответа на разовый вопрос по одной метрике («какой сегодня ROAS?»)
через вызов get_daily_pnl / get_daily_ad_performance как MCP-инструментов
вместо запуска полного отчёта.
Структура проекта
src/ecommerce_mcp/
clients/ Typed, async API clients (Shopify + Meta), transport-swappable
mcp_servers/ MCP tool servers wrapping the clients
reporting/ daily_report.py (orchestration) + spreadsheet.py (openpyxl)
fixtures/ Realistic mock payloads + the in-process mock API app
skills/daily-report/ Claude Code Skill for the reporting workflow
tests/ pytest suite (all run against mock mode)
examples/ Committed sample .xlsx + README preview imageИзвестные упрощения
Описано здесь, а не скрыто, поскольку для такого примера точность важнее внешнего лоска:
COGS использует поле
InventoryItem.costв Shopify через настоящий двухэтапный поиск (вариант →inventory_item_id→ пакетное получениеinventory_items) — Shopify не отдаёт себестоимость напрямую в позиции заказа. Иcost, иskuпозиции заказа могут быть nullable в живом магазине (торговец мог их никогда не задавать) — это обнаружено при live-тестировании на реальном dev-магазине, а не только по документации. Оба случая обрабатываются как нулевая себестоимость / отсутствующий SKU, а не как ошибка.Возвращённые заказы полностью исключаются из выручки/COGS/количества заказов в
daily_pnl(). Учёт частичных возвратов и возвратов товаров потребовал бы ресурса Refund — это вне рамок данного примера.Атрибуция покупок в Meta использует тип действия
purchaseиз массивовactions/action_valuesв том окне атрибуции, которое настроено для рекламного аккаунта, — этот клиент его не переопределяет.Агент отчётности в настоящее время забирает все доступные заказы/инсайты, а не фильтрует по диапазону дат; в продакшене ежедневный cron передавал бы
created_at_min/time_rangeза целевой день.
Лицензия
MIT — см. LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Related MCP Servers
- FlicenseBqualityCmaintenanceExposes Google Ads and Meta Marketing performance data, campaign settings, and change history to Claude (Cowork) for live daily-dashboard workflows.3
- AlicenseNot gradedqualityCmaintenanceUnified MCP server for managing Meta Ads, LinkedIn Ads, Google Ads, GA4, and Search Console with 89 read/write tools, multi-account support, OAuth setup, and safe dry-run mutations.MIT
- AlicenseAqualityFmaintenanceFree, open-source MCP server that connects Claude to the Shopify Partner API. 25 tools for revenue analytics, churn analysis, retention cohorts, merchant health scoring, conversion funnels, revenue forecasting, and growth velocity.2512MIT

Presso MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceConnects e-commerce and marketing data sources like Shopify, GA4, Google Ads, and Meta Ads to AI assistants, enabling natural language queries about store performance, ad campaigns, and customer behavior.72MIT
Related MCP Connectors
Connect e-commerce and marketing data to AI assistants via MCP.
Run Google, Meta, Microsoft, TikTok and LinkedIn Ads from Claude or ChatGPT. Writes need approval.
Shopify MCP Pack — wraps the Shopify Admin REST API (2024-01)
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/petrycz/ecommerce-mcp-automation'
If you have feedback or need assistance with the MCP directory API, please join our Discord server