Skip to main content
Glama
jmacaggi-gfm

ads-mcp-server

by jmacaggi-gfm

ads-mcp-server

Servidor MCP local que expone datos de rendimiento, configuración de campañas e historial de cambios de Google Ads + Meta Marketing a Claude (Cowork) para flujos de trabajo de paneles diarios en tiempo real.


Qué hace

Tres herramientas registradas con MCP:

Herramienta

Propósito

get_google_ads_report(date_range, breakdown)

Rendimiento + diagnósticos + series de 56 días + WoW + comparaciones de 8 semanas DoW + configuración de campañas + historial de cambios

get_meta_ads_report(date_range, breakdown)

Misma estructura que Google. Conversiones filtradas a META_CONVERSION_EVENT_NAME

get_campaign_settings(platform)

Configuración + historial de cambios para google / meta / both

Arquitectura: extrae datos brutos de anuncios por día una vez por plataforma cada hora, los almacena en caché en formato parquet y deriva cada agregación en pandas. Sin llamadas a la API por desglose.


Related MCP server: Google Ads MCP Server

Requisitos previos

Enlaces de configuración de credenciales

Credencial

Dónde obtenerla

GOOGLE_ADS_DEVELOPER_TOKEN

Interfaz de Google Ads → Herramientas → Centro de API

GOOGLE_ADS_CLIENT_ID / CLIENT_SECRET

https://console.cloud.google.com → Cliente OAuth 2.0 (Aplicación de escritorio)

GOOGLE_ADS_REFRESH_TOKEN

Ejecutar python -m google.ads.googleads.examples.authentication.generate_user_credentials después de instalar google-ads

GOOGLE_ADS_CUSTOMER_IDS

Separados por comas, sin guiones. Encontrarlos en la parte superior derecha de la interfaz de Google Ads

GOOGLE_ADS_LOGIN_CUSTOMER_ID

ID de la cuenta de administrador MCC, sin guiones

META_APP_ID / META_APP_SECRET

https://developers.facebook.com → Mis aplicaciones → Configuración → Básico

META_ACCESS_TOKEN

https://business.facebook.com → Configuración del negocio → Usuarios del sistema → Generar nuevo token (de larga duración, con ads_read)

META_AD_ACCOUNT_ID

Administrador de anuncios de Meta → selector de cuenta superior izquierda. Formato: act_XXXXXXXXX


Instalación

cd ~/marketing-ds/ads-mcp-server
uv sync --extra dev

uv crea .venv/ e instala todas las dependencias fijadas en pyproject.toml.


Configurar credenciales

Dos opciones:

Opción A — apuntar a un .env existente (recomendado si ya tienes claves en ~/marketing-ds/decision_science/.env):

export ADS_MCP_ENV_FILE=/Users/jmacaggi/marketing-ds/decision_science/.env

Opción B — .env local:

cp .env.example .env
# fill in the blanks

Las claves requeridas se enumeran en .env.example con comentarios que explican cada una.


Ejecución

Localmente para pruebas:

uv run ads-mcp-server

El servidor habla MCP a través de stdio — Cowork (o cualquier cliente MCP) lo inicia bajo demanda.


Conectar a Claude (Cowork)

Añade este bloque a ~/.claude/claude_desktop_config.json (créalo si no existe):

{
  "mcpServers": {
    "ads": {
      "command": "uv",
      "args": [
        "--directory",
        "/Users/jmacaggi/marketing-ds/ads-mcp-server",
        "run",
        "ads-mcp-server"
      ],
      "env": {
        "ADS_MCP_ENV_FILE": "/Users/jmacaggi/marketing-ds/decision_science/.env"
      }
    }
  }
}

Reinicia Claude/Cowork. Deberían aparecer las herramientas get_google_ads_report, get_meta_ads_report, get_campaign_settings.

No se requiere un demonio en segundo plano — Cowork inicia/detiene el proceso por sesión.


Precalentamiento diario (recomendado para paneles en tiempo real)

Regla de validez de caché: una caché está actualizada si contiene la fecha de ayer. Se actualiza una vez al día. La primera consulta del usuario del día activa la actualización — y una extracción de 56 días en una cuenta grande puede tardar de 1 a 3 minutos.

Para evitar esa espera, programa un precalentamiento a las 6 a.m. mediante launchd de macOS:

# Install
cp /Users/jmacaggi/marketing-ds/ads-mcp-server/launchd/com.jmacaggi.adsmcp.prewarm.plist \
   ~/Library/LaunchAgents/

launchctl load ~/Library/LaunchAgents/com.jmacaggi.adsmcp.prewarm.plist

# Verify it's scheduled
launchctl list | grep adsmcp

# Trigger immediately (test)
launchctl start com.jmacaggi.adsmcp.prewarm

# Logs
tail -f ~/marketing-ds/ads-mcp-server/logs/prewarm.stdout.log
tail -f ~/marketing-ds/ads-mcp-server/logs/$(date +%Y-%m-%d).log

Lo que hace cada mañana a las 6 a.m.:

  1. Extrae el rendimiento de Google Ads de 56 días, configuración, change_event de 29 días → caché

  2. (Meta actualmente deshabilitado — ver "Estado de Meta" a continuación)

  3. Escribe la marca de actualización cache/google_lastrefresh.txt = hoy

Para cuando abras Cowork, los datos de Google estarán listos. Las llamadas a las herramientas responden en menos de 1s.

Para desinstalar:

launchctl unload ~/Library/LaunchAgents/com.jmacaggi.adsmcp.prewarm.plist
rm ~/Library/LaunchAgents/com.jmacaggi.adsmcp.prewarm.plist

Estado de Meta (a fecha de 2026-05-07)

Las herramientas de Meta (get_meta_ads_report, get_campaign_settings(platform="meta"|"both")) están estructuralmente completas pero aún no verificadas de extremo a extremo.

Lo que funciona:

  • La extracción de rendimiento se divide en ventanas de 7 días (evita el error "result too large" Service temporarily unavailable / subcode 1504044)

  • Los datos a nivel de anuncio están divididos: level=campaign para la serie de 56 días, level=ad solo para ayer (evita la paginación de 5 minutos)

  • La extracción de AdSet se filtra a effective_status IN [ACTIVE, PAUSED] (evita paginar miles de conjuntos de anuncios archivados)

Lo que nos bloqueó:

  • Después de la primera gran extracción de rendimiento, la extracción de AdSet alcanzó el límite de tasa por hora de Meta (code 17, subcode 2446079: "User request limit reached"). El tiempo de espera suele ser de 10 a 60 minutos.

Para volver a probar mañana por la mañana (después de que se restablezca la cuota):

# Remove --skip-meta from the launchd plist to enable Meta in pre-warm
sed -i '' '/<string>--skip-meta<\/string>/d' \
   ~/Library/LaunchAgents/com.jmacaggi.adsmcp.prewarm.plist
launchctl unload ~/Library/LaunchAgents/com.jmacaggi.adsmcp.prewarm.plist
launchctl load ~/Library/LaunchAgents/com.jmacaggi.adsmcp.prewarm.plist

# Or run manually
ADS_MCP_ENV_FILE=/Users/jmacaggi/marketing-ds/decision_science/.env \
   uv run python scripts/prewarm.py

Si Meta sigue limitando la tasa, opciones alternativas (aún no implementadas):

  • Ejecuciones de informes asíncronos (async=True) para la extracción de rendimiento

  • Filtro effective_status más estricto (solo ACTIVE, descartar pausados)

Si prefieres un proceso en segundo plano de larga duración (opcional, no requerido para Cowork): usa nohup uv run ads-mcp-server > /tmp/ads-mcp.log 2>&1 & o un plist de launchd.


Opcional: anulación mediante CSV (saltar la API)

La interfaz de Google Ads exporta informes CSV sin límites de cuota de API. Coloca un CSV en cache/external/ para anular la extracción de la API:

cache/external/google_2026-05-07.csv
cache/external/meta_2026-05-07.csv

Si existe un CSV coincidente Y es más reciente que la caché de parquet, el servidor lo carga en lugar de llamar a la API. La respuesta establece metadata.data_source = "csv_override" para que Cowork lo sepa.

El esquema de columnas del CSV debe coincidir con el de parquet (consulta src/ads_mcp_server/google_ads.py y meta_ads.py para los nombres de las columnas: date, campaign_id, campaign_name, ad_id, ad_name, spend, impressions, clicks, conversions, ...).


Pruebas

uv run pytest -v

Todas las pruebas están basadas en mocks — no hay llamadas de red. Cubre:

  • classify_campaign Marca/No-Marca/Otro

  • diagnose clasificador de 5 estados

  • El selector de 8 semanas del mismo día de la semana elige las 8 fechas correctas

  • Delta WoW + división por cero

  • Filtro actions[] para Meta

  • Diferencia de instantánea incluyendo valor nulo-antiguo y poda

  • Las credenciales faltantes devuelven un error limpio (sin excepción)


Registros

Cada llamada a la API y error se registra en logs/YYYY-MM-DD.log (un archivo por día).


Solución de problemas

  • La instalación de google-ads falla: asegúrate de que Python 3.13 (uv python pin 3.13) y pip install grpcio funcionen en tu sistema. En Apple Silicon: arch -arm64 uv sync.

  • Token de Meta expirado: regenera el token de usuario del sistema en la Configuración del negocio; los tokens de larga duración duran 60 días.

  • La herramienta no aparece en Cowork: revisa ~/Library/Logs/Claude/mcp*.log para ver errores de inicio. Confirma que uv está en el PATH para el proceso de la GUI (puede que necesites una ruta completa: which uv).

  • Caché obsoleta: elimina cache/*.parquet para forzar una nueva extracción.


Mapa de archivos

src/ads_mcp_server/
  server.py        # MCP entry + tool handlers
  config.py        # env loading, validates creds
  google_ads.py    # 3 GAQL queries: perf, settings, change_event
  meta_ads.py      # Insights + AdSet pull
  snapshots.py     # Meta snapshot diff (Meta has no reliable change API)
  cache.py         # parquet + CSV override
  aggregate.py     # all pandas math
  classify.py      # Brand/NB/Other
  diagnose.py      # 5-state diagnosis
  date_ranges.py   # window resolution + 8wk DoW
  retry.py         # exponential backoff
  logging_setup.py # daily file logs
  schema.py        # response shape constants
Install Server
F
license - not found
B
quality
C
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

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables natural language access to Google Ads campaigns, accounts, and performance metrics via Claude, with tools for managing ad groups, keywords, budgets, and visualizing data.
    1
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides access to Google Ads API for comprehensive campaign analytics, enabling conversational ad performance analysis with Claude Code.
    51
    2
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Connect Claude to your marketing data from Google and Meta, enabling read and write operations on Search Console, Analytics, Tag Manager, Business Profile, and Meta platforms.
    35
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • Ask AI about your ads — query Meta, TikTok, and Google Ads performance in natural language.

  • AI marketing agent for Google Ads, Meta, GA4, TikTok, LinkedIn, Shopify, HubSpot and more.

  • Talk to your live-events CRM (campaigns, analytics, paid ads, segments) in Claude and ChatGPT.

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/jmacaggi-gfm/ads-mcp-server'

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