Navega con , barra espaciadora o las flechas de abajo  ·  F pantalla completa

Entregable 3:
Stack Técnico y Arquitectura

El Orquestador IA de Marketing: cinco fuentes vía MCP, decisiones técnicas y roadmap de closed-loop attribution

Alumno: Antonio Rodríguez de Tembleque Fuentes

Tutor: Cristian Betancort Niz

Máster: IA Aplicada al Marketing (KSchool)

Caso práctico: FactuFicticia (SaaS B2B de facturación electrónica CFDI 4.0 · México)

Las calculadoras fiscales en producción referenciadas en la demo están publicadas en un dominio real (facturama.mx) como prueba directa del MVP. El resto del documento mantiene el pseudónimo FactuFicticia por coherencia con E1/E2.

De la idea a la implementación técnica

En el Entregable 2 se consolidó el pivot a un Orquestador IA de Marketing propio basado en MCPs. Este Entregable 3 baja al detalle técnico: arquitectura, código, OAuth y decisiones de ingeniería.

5
Fuentes vía MCP

GA4, Search Console, Google Ads (servidor custom propio), DataForSEO y skill propia SEO/GEO. Integradas en sólo dos sesiones de trabajo.

$6,613
MXN/mes ahorrados

Resultado real ya medido aplicando 4 negativas de competencia vía API a 8 campañas. 100% reversible con un único comando.

200
MCP custom

Líneas de código del servidor MCP de Google Ads en FastMCP 3.2. Stdio, sin red expuesta, con OAuth desktop + refresh token.

Bloque 1: Arquitectura del Orquestador IA

Capa 1 — Cliente

Claude Code como cliente MCP. Descubre tools vía tools/list, invoca con JSON-RPC 2.0. Memoria persistente entre sesiones en sistema de archivos local.

Capa 2 — MCPs (stdio)

5 servidores: GSC, GA4, Google Ads custom (FastMCP), DataForSEO skill, facturama-seo-content skill. Sin red expuesta.

Capa 3 — n8n

Self-hosted. Pipeline diario closed-loop attribution: Openpay → HubSpot (gclid) → Google Ads UploadClickConversion. Reintentos + logs.

Capa 4 — Outputs

Marketing (análisis NL), Ventas (Lead Scoring HubSpot), B2B (calculadoras web) y Developers externos (servidor MCP FactuFicticia).

El operador habla con Claude, Claude invoca tools de los 5 MCPs en paralelo, n8n cierra el ciclo de atribución en background.

Bloque 2: Las 5 fuentes integradas vía MCP

Fuente Tipo Acceso Tools / Cobertura
Google Search Console MCP comunitario Service account JSON 24 tools (search_analytics, URL inspection, sitemaps)
Google Analytics 4 MCP comunitario Service account JSON get_ga4_data + search_schema + anti-explosión de filas
Google Ads MCP custom (FastMCP) OAuth desktop + refresh token 6 tools: list_accounts, account_summary, campaign_performance, top_keywords, top_search_terms, search (GAQL)
DataForSEO Skill con scripts Python API key Basic Auth keyword_ideas, serp_organic, keyword_difficulty, search_volume
facturama-seo-content Skill propia Triggers internos Framework GEO/AEO de 8 bloques + orquesta DataForSEO

Roadmap: HubSpot (Fase 3) y Openpay (Fase 1) cerrarán el ciclo de closed-loop attribution.

Bloque 3: Servidor MCP custom para Google Ads

Stack y forma del servidor

FastMCP 3.2.4 + SDK oficial google-ads-python 30.1.0 + transporte stdio. Total: 200 LOC en scripts/google_ads_mcp_local.py.

Configurado en .mcp.json del proyecto. Tras reiniciar Claude Code, las tools quedan disponibles como mcp__google-ads__*.

Credenciales (4 piezas):

  • Developer Token del MCC (Tools & Settings → API Center)
  • OAuth 2.0 Desktop client (Cloud Console)
  • Refresh Token (flujo InstalledAppFlow)
  • Customer ID + Login Customer ID (MCC)

6 tools expuestas al LLM

  • list_accounts — cuentas accesibles desde el MCC
  • account_summary — KPIs agregados por rango
  • campaign_performance — desglose por campaña
  • top_keywords — orden por cost/clicks/conv/imp
  • top_search_terms — search terms reales
  • search — GAQL libre de sólo lectura

Aplanado de protobuf: con use_proto_plus=True los objetos no exponen DESCRIPTOR.fields. Solución: MessageToDict(row._pb, preserving_proto_field_name=True). cost_micros/ 1_000_000.

Bloque 4: Skill propia facturama-seo-content

Framework GEO/AEO de 8 bloques

Adapta los hallazgos de Princeton 2024 (Aggarwal et al., "GEO") al contexto fiscal mexicano. Triggers automáticos: "redacta artículo sobre [tema fiscal]", "auditemos post X", "mejora este artículo".

  1. Intent fit — intención dominante MX
  2. E-E-A-T fiscal — autor C.P., fuentes SAT/LISR
  3. Estructura para snippets — H2/H3 con preguntas
  4. GEO signals — UMA, Art. 87 LFT, Art. 96 LISR
  5. Schema — Article, FAQPage, HowTo, WebApplication
  6. Cluster + internal linking
  7. Anti-AI heuristics — sin muletillas IA
  8. Performance técnica — Core Web Vitals, INP

Estructura y orquestación

.claude/skills/facturama-seo-content/
├── SKILL.md (descripción + triggers)
├── scripts/
│   ├── keyword_research.py
│   ├── serp_analysis.py
│   ├── keyword_difficulty.py
│   └── .env (gitignored)
└── references/
     └── frameworks-seo.md

Pipeline DataForSEO

3 scripts en secuencia: keyword_research (seed → ideas) → serp_analysis (top 10) → kd_priorización (volumen vs KD). Output: brief editorial con outline, schema, internal links y checklist GEO/AEO.

Bloque 5: Decisión arquitectónica

El primer intento usó el servidor MCP oficial de Google Ads (HTTP streamable con OAuth 2.1 + DCR). Falló con MCP error -32000: Connection closed porque el cliente no completa el OAuth dance. Esa decisión técnica obligó a un cambio de rumbo:

Servidor oficial (HTTP + OAuth 2.1)

  • Streamable HTTP en puerto 8080
  • OAuth 2.1 con Dynamic Client Registration
  • Cliente debe completar OAuth dance: leer resource_metadata, registrarse, autorizar, reintentar
  • Falla: cliente actual no soporta DCR maduro
  • Requiere OAuth Web client con redirect URI registrado

MCP custom (stdio)

  • Compatibilidad universal: todo cliente MCP soporta stdio
  • Sin red expuesta: corre como subproceso del cliente
  • Un único refresh token validado, no segundo OAuth
  • Control del catálogo: 6 tools enfocadas, no 40+
  • OAuth Desktop client + InstalledAppFlow

Lección general: stdio > HTTP para MCPs locales · Custom > oficial cuando el oficial falla por incompatibilidad de transporte · Skill > MCP cuando lo que integras es una metodología, no una fuente de datos.

Bloque 6: Closed-loop attribution (roadmap)

Constraint del negocio: el trial de 30 días en FactuFicticia hace que la primera compra (Openpay, 85% del volumen) ocurra al día 31-32, fuera de la ventana default de Google Ads. Resultado: las compras reales NO se atribuyen.

① Openpay → cargo del día

REST API expone customer.email, amount, creation_date por cada cargo. n8n self-hosted pollea diariamente con HTTP Request node.

② HubSpot → lookup gclid por email

HubSpot Starter guarda el gclid del clic Google Ads como property en el contact al registro. Match por email garantizado (login obligatorio).

③ Google Ads → UploadClickConversion

Subir conversión offline con (gclid, conversion_action, value, time). Conversion action específica: "Compra Openpay (offline)" con valor dinámico = importe del cargo.

④ Configuraciones complementarias

Extender click_through_lookback_window_days de 30 → 90. Activar GA4 User-ID para stitching cross-session. BigQuery export de GA4 para análisis SQL.

⑤ Resultado esperado (6 semanas)

ROAS real por keyword medido sobre ingreso Openpay (no proxy). LTV por canal segmentado (API enterprise vs autoservicio vs nóminas). Validación/invalidación de hipótesis con datos económicos reales.

Bloque 7: Pitfalls técnicos documentados

Una de las aportaciones del TFM es el catálogo de pitfalls reales al integrar APIs Google + Python en Windows. Cada uno con su workaround:

Rutas con espacios en Windows

pipx falla con username El minador. Fix: python -m pip install directo. pip del PATH puede apuntar a otro Python distinto del python del PATH.

CRLF al copiar tokens OAuth

Refresh token con \r final causa invalid_grant: Bad Request. Fix: verificar bytes raw. Nunca copiar tokens desde editores con EOL Windows.

use_proto_plus=True

No expone DESCRIPTOR.fields. Fix: MessageToDict(row._pb, preserving_proto_field_name=True). Convertir cost_micros ÷ 1,000,000.

OAuth Web vs Desktop client

FastMCP con GoogleProvider espera Web con redirect URI. Para stdio con refresh token, usar Desktop + InstalledAppFlow + port=0.

Ventana conversión Ads = 30d

Demasiado corta para SaaS con trial de 30d. Fix: extender click_through_lookback_window_days a 90 + subir conversiones offline vía OCI.

Tablas grandes saturan contexto LLM

Una query GAQL puede devolver >59K caracteres. Fix: procesar con script Python externo (filtrar, top N) antes de pasar al modelo.

Bloque 8: Planificación del MVP restante

Con la arquitectura del Orquestador IA ya en operación y el primer resultado real medido, el MVP restante hasta la defensa de junio 2026 se centra en tres piezas:

① Calculadora fiscal publicada

Calculadora de aguinaldo o ISR generada con Cursor + Claude. Sprint: 2 semanas. Incluye lógica fiscal validada, UI responsive, eventos GA4 y formulario de captación de leads. Indexada y generando tráfico orgánico.

Outputs: URL pública + código fuente + prompts documentados (metodología Vibe Coding).

② Closed-loop attribution operativo

Pipeline n8n diaria Openpay → HubSpot → Google Ads OCI. Sprint: 4-6 semanas. Conversion action "Compra Openpay" creada, ventana extendida a 90d, GA4 User-ID activo. Reintentos automáticos + logs persistidos.

Outputs: ROAS real por keyword + LTV por canal + invalidación/validación de hipótesis API enterprise.

③ PoC del Servidor MCP FactuFicticia

Documento técnico (Prueba de Concepto) para presentar al departamento IT. Sprint: 3 semanas. Incluye arquitectura del servidor, endpoints CFDI propuestos, esquema de autenticación y ejemplos de prompts para Cursor/Windsurf/Codex.

Outputs: documento PoC + diagrama de implementación + estimación de esfuerzo IT.

Hitos de cierre: calculadora indexada en Google · pipeline n8n diaria operativa · documento PoC del MCP entregado a IT · resultados medidos para la defensa de junio 2026.

Flujo end-to-end del sistema

1 · Contexto

SaaS B2B CFDI 4.0 (FactuFicticia · México). 55K+ clientes, 400-500K visitas/mes. Gasto Ads ~$89K MXN/sem. Trial 30d → primera compra día 31-32.

2 · Entradas

Pregunta en lenguaje natural del Head of Marketing al Orquestador IA. Ej: "dame search terms con coste y cero conversiones de los últimos 30 días".

3 · Procesamiento

Claude Code: descubre tools, invoca los 5 MCPs en paralelo (GSC, GA4, Ads, DataForSEO, skill SEO/GEO), procesa volúmenes grandes con scripts Python externos para no saturar el contexto, cruza datos y aplica reglas aprendidas en memoria.

4 · Output

Tabla de insights + propuesta de acción reversible. Ej: identifica 4 competidores en negativas (Sinube, AGSA, Facturación Elite, Facturify).

5 · Usuario

Head of Marketing valida la propuesta o pide más contexto. Confirma la acción en lenguaje natural. El humano siempre aprueba antes de cualquier cambio.

6 · Impacto

Acción ejecutada vía API. −$6,613 MXN/mes (−$79,356 MXN/año). 100% reversible con un único comando. Regla aprendida queda en memoria.

El operador habla al Orquestador IA en lenguaje natural. El agente cruza datos de cinco fuentes vía MCP, propone una acción reversible y la ejecuta vía API tras validación humana. La regla aprendida se persiste para futuras sesiones — el sistema mejora con el uso.

MVP definido — Las 4 preguntas

1. ¿Qué construyo sí o sí?

El Orquestador IA de Marketing: Claude Code como cliente MCP, cinco servidores operativos (GSC + GA4 + Google Ads custom en FastMCP + DataForSEO + skill facturama-seo-content), con OAuth/credenciales reales y memoria persistente.

2. ¿Qué enseño funcionando?

El caso real de negativas vía API ejecutado en vivo desde Claude Code: query GAQL → tabla de search terms → identificación de competencia → aplicación de la SharedSet → rollback. Resultado verificable: ~$6,613 MXN/mes.

3. ¿Qué es lo mínimo que demuestra valor?

Un ciclo completo análisis → acción → impacto medible ejecutado en una sola sesión de Claude Code, con todas las acciones reversibles. Sin presentaciones precocinadas: si el agente falla en vivo, se ve. Si funciona, el ahorro queda medido.

4. ¿Qué queda fuera del MVP?

Roadmap, no MVP demostrable: las calculadoras fiscales en producción (facturama.mx/calculadoras), el servidor MCP de FactuFicticia para Vibe Coding externo y el closed-loop attribution Openpay→HubSpot→Ads OCI en n8n.

Criterio de éxito: el tribunal ve la acción ejecutarse en vivo, la cifra de ahorro queda en el log, el rollback funciona delante de ellos.

Plan de demo para la defensa (junio 2026)

Guión propuesto para la sesión de defensa final, entregado ahora en el E3 para validación del tutor. La ejecución en vivo ocurre en la defensa, no en este entregable.

EN VIVO (5-6 min)
  1. Abrir Claude Code con el repo y los 5 MCPs cargados; mostrar tools/list.
  2. Pregunta NL al agente: "dame los search terms de los últimos 30 días con coste > 0 y conversiones = 0".
  3. Claude invoca el MCP custom de Google Ads (tool search) con GAQL; recibe respuesta vía MessageToDict.
  4. Identificar 4 competidores en la tabla; el agente propone aplicar negativas.
  5. Aplicar: SharedSet + vincular a 8 campañas vía API.
  6. Rollback con un único comando para demostrar reversibilidad.
CONCEPTUAL (3 min)
  • Calculadoras fiscales en producción: mostrar URL facturama.mx/calculadoras (caso real publicado).
  • Roadmap closed-loop attribution: diagrama Openpay → HubSpot → Google Ads OCI vía n8n.
  • Servidor MCP de FactuFicticia: prototipo del PoC para que IAs externas operen la API CFDI.
  • Skill facturama-seo-content: framework GEO/AEO de 8 bloques sobre el blog.
MOMENTO VALOR (1 min)

Una sola pantalla con el log de la acción que el tribunal acaba de ver ejecutarse:

[OK] SharedSet creada
[OK] 4 negativas añadidas
[OK] Vinculada a 8 campañas
──────────────────────
Ahorro: −$6,613 MXN/mes
Anual: −$79,356 MXN

El número no es proyección: es la ejecución que acaban de presenciar.

Stack tecnológico justificado

Herramienta Función Por qué ésta y no otra Auto/Manual Coste (aprox.)
Claude CodeCliente MCP y orquestador conversacional; memoria persistenteÚnico cliente con soporte MCP nativo + 1M de contexto + acceso al ecosistema AnthropicManual asistido~$200 / mes (Max)
FastMCP 3.2Framework para construir el servidor MCP custom de Google AdsMismo framework que usa el server oficial Google; permite stdio sin OAuth runtimeAutomatizado$0 (open source)
Python + httpxScripts auxiliares para procesar tablas grandes fuera del contexto LLMhttpx async permite paralelizar llamadas HTTP; Python ya parte del stack del autorAutomatizado$0 (open source)
google-ads-pythonSDK oficial para la API de Google Ads (queries GAQL, mutaciones)SDK oficial = compatibilidad garantizada; alternativa REST manual descartada por verbosidadAutomatizado$0 (open source)
n8n self-hostedOrquestación del closed-loop attribution diaria (roadmap)Self-hosted en infra propia del autor; nodos nativos HubSpot + HTTP RequestAutomatizado~$10 / mes (VPS)
DataForSEOKeyword research, SERP scraping, keyword difficulty MXMejor cobertura MX + pricing pay-as-you-go vs Semrush/Ahrefs por suscripción fijaAutomatizado~$50-100 / mes
HubSpot StarterCRM; almacena gclid del clic Ads en cada contactYa en stack de FactuFicticia; Private App token con scopes mínimosManual + API~$20 / mes
Openpay APIPasarela de pagos; 85% del ingreso de FactuFicticiaPasarela ya operativa; REST API estándar con auth merchant_id + private_keyAutomatizado% por transacción
Cursor IDEDesarrollo de calculadoras fiscales y skill SEO/GEO con IAÚnico IDE con context-aware en proyecto + integración Claude/GPT en una sola UIManual asistido~$20 / mes (Pro)

Coste total estimado: ~$300-350 USD/mes (vs ~$1,500+ USD/mes del plan Connectif que cubría las mismas fuentes). Costes aproximados; ajustar al cierre de la implementación.

Pitch de 90 segundos

Problema15 s

FactuFicticia gasta ~$90K MXN/semana en Google Ads pero no sabe qué keyword genera clientes que pagan: el trial es de 30 días y la compra real ocurre al día 31-32, fuera de la ventana de atribución. Decisiones a ciegas con presupuesto real.

Solución IA30 s

Un Orquestador IA de Marketing: Claude Code conecta cinco fuentes vía MCP (GA4, Search Console, Google Ads con servidor custom propio en FastMCP, DataForSEO y skill SEO/GEO). El operador pregunta en lenguaje natural, el agente cruza fuentes, propone acciones y las ejecuta reversiblemente tras validación humana. Memoria persistente entre sesiones para reglas de negocio.

Impacto15 s

−$6,613 MXN/mes recuperados en sólo dos sesiones de trabajo, aplicando cuatro negativas de competencia vía API a 8 campañas. Sin pérdida de tráfico cualificado. 100% reversible. Equivalente anual: −$79,356 MXN.

Demo30 s

Aquí mismo, en vivo: abro Claude Code, le pido los search terms con coste y cero conversiones de los últimos 30 días, identifico la competencia, aplico la SharedSet de negativas a las 8 campañas y la elimino con un comando. El log enseña el número y el rollback.

Cierre del pitch: esto no es un piloto de laboratorio — es una arquitectura ya operativa en una empresa B2B con 55 000+ clientes, montada en sólo dos sesiones de trabajo, y replicable a cualquier negocio con paid media + analytics + CRM.

Hacia el MVP final y la defensa

Resumen del Entregable 3

Este Entregable 3 documenta el stack técnico definitivo del Orquestador IA de Marketing: arquitectura en 4 capas, 5 fuentes integradas vía MCP, servidor custom en FastMCP con OAuth desktop, skill propia con framework GEO/AEO de 8 bloques y roadmap detallado de closed-loop attribution.

Cierra con un catálogo de pitfalls reales y la planificación del MVP restante en tres sprints:

  • Calculadora fiscal publicada (~2 semanas)
  • Closed-loop attribution operativo (~4-6 semanas)
  • PoC del Servidor MCP FactuFicticia (~3 semanas)

Defensa final: junio 2026.

MCP FastMCP 3.2 Claude Code google-ads-python DataForSEO n8n Openpay HubSpot
Arquitectura técnica del Orquestador IA de Marketing