ecommerce-mcp-automation
Ecommerce MCP Automation
Una integración de ejemplo con Claude Code + MCP: Shopify y Meta Ads expuestos como herramientas MCP, además de un agente de informes que reúne ambos en una hoja de cálculo diaria formateada P&L + rendimiento publicitario — sin copiar y pegar manualmente entre plataformas.
Esta es una demostración construida a partir de la documentación pública de la API de Shopify Admin y la API de Meta Marketing — no es algo que haya operado un negocio real. Es una muestra de sala limpia: endpoints reales, autenticación real, paginación real, manejo de errores real, escrita desde cero para mostrar exactamente cómo se construye este tipo de automatización. Se ejecuta de principio a fin en modo simulado sin credenciales (datos de fixture realistas que sustituyen a las respuestas en vivo), y cambia a modo en vivo por integración en cuanto se establecen credenciales reales — consulte Cómo ejecutar.
El cliente de Shopify se ha ejecutado en vivo contra una tienda de desarrollo real de Shopify Partners (una tienda sandbox, no un negocio de producción) — autenticación real, un pedido real, respuestas reales de la API. Ese proceso sacó a la luz y corrigió dos casos límite reales de nulabilidad (consulte Simplificaciones conocidas) que los fixtures mock por sí solos no habían cubierto. Meta Ads se ejecuta contra el transporte mock por defecto en este repositorio; el código del cliente está escrito igual y cambia a en vivo en cuanto se establecen
META_ACCESS_TOKEN/META_AD_ACCOUNT_ID.
Qué hace
Expone pedidos, ingresos y COGS de Shopify como herramientas MCP (
get_orders,get_daily_pnl)Expone el gasto, las impresiones, las compras y el ROAS de Meta Ads como herramientas MCP (
get_insights,get_daily_ad_performance)Ejecuta un agente de informes (
daily_report.py) que obtiene ambos simultáneamente y escribe un.xlsxcon formato — hojas de Summary, Orders y Ad PerformanceIncluye una habilidad de Claude Code que envuelve todo el flujo de trabajo en un disparador en lenguaje natural ("ejecuta el informe diario")
Incluye una salida de ejemplo ya confirmada en el repositorio para que el resultado sea visible sin ejecutar nada
Related MCP server: ads-mcp
Salida de ejemplo
Vista previa renderizada de la pestaña Summary — abre el libro de trabajo generado real para ver el archivo en vivo (con las hojas Orders y Ad Performance, formato de moneda/ROAS y filas de cabecera congeladas).
Arquitectura
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.-> MCLos dos clientes de API (clients/shopify_client.py, clients/meta_ads_client.py)
son código de integración genuino: URLs de endpoints reales, cabeceras de autenticación reales,
bucles de paginación reales, backoff real de 429. Lo único que cambia entre el
modo simulado y el modo en vivo es el transporte HTTP (clients/http.py):
Live:
httpx.AsyncClientabre una conexión real con Shopify / Meta.Mock: a
httpx.AsyncClientse le da unhttpx.ASGITransportapuntando a una aplicación FastAPI en proceso (fixtures/mock_api.py) que sirve payloads de fixture realistas. No se vincula ningún puerto, no se ejecuta ningún subproceso — pero las peticiones aún viajan mediante enrutamiento HTTP/ASGI genuino, cabeceras y codificación JSON.
Eso significa que el código de cliente que un revisor lee es el mismo código que se ejecutaría contra una tienda en vivo — no un mock disfrazado para parecerlo. Consulte CLAUDE.md para conocer todas las convenciones.
Cómo ejecutar
Modo simulado (por defecto — cero credenciales)
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.xlsxEjecute la suite de pruebas de la misma manera, sin necesidad de configuración:
pytestModo en vivo
Copie .env.example a .env y rellene lo que tenga — cada integración
pasa a en vivo de forma independiente en cuanto están presentes sus propias credenciales,
de modo que puede ejecutar Shopify en vivo con Meta aún en modo simulado (o viceversa):
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_1234567890Como servidores MCP (Claude Code / Claude Desktop)
Añádalo a su configuración de MCP (.mcp.json para Claude Code, o el archivo de
configuración de Claude Desktop). Apunte command directamente al intérprete del venv del proyecto —
los clientes MCP no cargan su perfil de shell, por lo que un python a secas no verá un
venv activado:
{
"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"
}
}
}Luego pregúntele a Claude cosas como "¿cuál es el P&L de Shopify hoy?" o "déme el rendimiento publicitario de Meta de ayer" — llamará a las herramientas directamente, en modo simulado por defecto.
Como habilidad
skills/daily-report/SKILL.md envuelve el flujo de trabajo de generación de informes para que
Claude Code lo ejecute mediante un disparador en lenguaje natural ("ejecuta el informe diario")
en lugar de necesitar el comando CLI exacto. La ruta del informe completo no necesita
la configuración de MCP anterior en absoluto — ejecuta daily_report.py directamente,
que llama a los clientes como Python puro, sin MCP involucrado. La configuración de MCP solo se
necesita para la otra ruta del Skill: responder a una pregunta puntual de una sola métrica
("¿cuál es el ROAS de hoy?") llamando a get_daily_pnl /
get_daily_ad_performance como herramientas MCP en lugar de ejecutar el informe completo.
Estructura del proyecto
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 imageSimplificaciones conocidas
Documentadas aquí en lugar de ocultas, ya que la precisión importa más que el pulido en una muestra como esta:
COGS utiliza el campo
InventoryItem.costde Shopify mediante la búsqueda real de dos saltos (variant →inventory_item_id→ obtención por lotes deinventory_items) — Shopify no expone el coste directamente en la línea de pedido. Tantocostcomo elskude la línea de pedido son anulables en una tienda en vivo (un comercio puede no haberlos establecido nunca) — detectado mediante pruebas en vivo contra una tienda de desarrollo real, no a partir de la documentación únicamente. Ambos se manejan como coste cero / SKU ausente en lugar de dar error.Los pedidos reembolsados se excluyen por completo del recuento de ingresos/COGS/pedidos en
daily_pnl(). La contabilización de reembolsos/devoluciones parciales requeriría el recurso Refund — fuera del alcance aquí.La atribución de compras de Meta utiliza el tipo de acción
purchasede los arraysactions/action_valuesen cualquier ventana de atribución con la que la cuenta publicitaria esté configurada — este cliente no la anula.El agente de informes actualmente obtiene todos los pedidos/insights disponibles en lugar de filtrar por rango de fechas; un cron diario de producción pasaría
created_at_min/time_rangepara el día objetivo.
Licencia
MIT — consulte 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