Herramientas disponibles
37 herramientas MCP: resúmenes de rendimiento, análisis de funnel, desgloses de tráfico, análisis de campañas, recorridos de clientes, inteligencia creativa a nivel de workspace, pronósticos, recomendaciones y write-back a Meta CAPI
El servidor MCP de Atribu expone 37 herramientas. Cada herramienta devuelve una respuesta estructurada con un objeto data y un objeto meta que contiene metadatos de la solicitud, frescura de datos y contexto de atribución.
Parámetros compartidos
La mayoría de herramientas aceptan estos parámetros comunes:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
workspace_id | UUID | No | Qué workspace consultar. Se infiere si tienes exactamente uno. |
profile_id | UUID | No | Qué perfil consultar. Se infiere si el workspace tiene exactamente uno. |
window_start | YYYY-MM-DD | Sí | Inicio del rango de fechas |
window_end | YYYY-MM-DD | Sí | Fin del rango de fechas |
model | string | No | Modelo de atribución. Por defecto: last_touch |
Modelos de atribución disponibles: last_touch, first_touch, split_50_50, linear, position_based, time_decay, last_non_direct, custom_weighted, engagement_weighted
Dos niveles de scope. La mayoría de herramientas son de perfil: operan sobre un perfil (workspace_id + profile_id, ambos inferidos cuando no hay ambigüedad). Las herramientas de inteligencia creativa de workspace, pronósticos y recomendaciones de más abajo son de workspace: solo toman workspace_id y leen todos los perfiles a los que tienes acceso en ese workspace. Las herramientas de workspace están marcadas con Scope: workspace. En lugar de window_start/window_end, usan una ventana pre-agregada score_window (7d | 14d | 28d | lifetime, por defecto 28d).
Herramientas de descubrimiento
whoami
Identidad, uso y configuración efectiva del token MCP actual. Devuelve scopes, unidades usadas vs límite, tus workspaces y (cuando el scope no es ambiguo) la configuración del workspace activo (pii_mode, mcp_writeback_enabled, tu rol) y la moneda del perfil activo. Llámala una vez por sesión — te dice de antemano si el desenmascaramiento de PII o el write-back funcionarán, para que la herramienta de IA pueda guiar al usuario sin llamadas de prueba y error.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
workspace_id | UUID | No | Opcional. Si lo pasas (o tienes un solo workspace), se llena active_workspace. |
profile_id | UUID | No | Opcional. Si lo pasas (o el workspace tiene un solo perfil), se llena active_profile. |
Costo: 0 unidades
Devuelve: { token, usage, user, workspaces[], active_workspace, active_profile, server_version }. active_workspace y active_profile son null cuando el scope es ambiguo.
list_workspaces
Lista todos los workspaces a los que tienes acceso. Usa los valores id devueltos como workspace_id en llamadas posteriores.
| Parámetro | Tipo | Requerido |
|---|---|---|
| — | — | — |
Costo: 0 unidades
Devuelve: Array de objetos { id, name, role }.
list_profiles
Lista todos los perfiles dentro de un workspace. Usa los valores id devueltos como profile_id en llamadas posteriores.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
workspace_id | UUID | No | Se infiere si tienes un workspace |
Costo: 0 unidades
Devuelve: Array de objetos { id, name, workspace_id }.
Herramientas de rendimiento
get_performance_summary
KPIs principales para una ventana de fechas más el período previo equivalente. Devuelve tres buckets: cash (ingresos reales, base del ROAS), pipeline (conteos de deals del CRM + suma cruda de value_amount — NO son ingresos) y leads (parte alta del funnel).
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
model | string | No | last_touch |
Costo: 1 unidad
Devuelve:
{
"spend": { "amount": 1032.42 },
"cash": {
"attributed_revenue": { "amount": 4000 },
"attributed_conversions": 6,
"total_conversions": 17,
"collected": { "amount": 9749 },
"roas": { "value": 3.87, "formatted": "3.87x" }
},
"pipeline": {
"appointments_booked": 38,
"closed_won": 0,
"crm_value_amount_sum": {
"attributed": { "amount": 76600 },
"total": { "amount": 79600 }
},
"note": "Counts are concrete events. crm_value_amount_sum is the raw sum of whatever the agency entered in their CRM's deal value field — NOT revenue. Never present as a revenue claim without confirming the CRM convention."
},
"leads": { "count": 409, "note": "Top of funnel events with no revenue." },
"traffic": { "visitors": 1550, "pageviews": 2386, "bounce_rate_percent": 87.3 }
}El crm_value_amount_sum de pipeline NO son ingresos
El campo value_amount del CRM significa lo que la agencia haya configurado — objetivo del deal, estimación de valor de vida del cliente, tamaño del retainer o un valor arbitrario. Usa los conteos (appointments_booked, closed_won) como señal principal. Solo menciona la suma con contexto explícito. Nunca incluyas crm_value_amount_sum en cálculos de ROAS ni lo llames "ingresos" o "ingresos proyectados".
compare_periods
Compara dos ventanas de fechas arbitrarias lado a lado. Útil para comparaciones año contra año, pre/post lanzamiento de campaña o comparaciones estacionales.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
prev_window_start | fecha | Sí | — |
prev_window_end | fecha | Sí | — |
model | string | No | last_touch |
Costo: 1 unidad
Devuelve: Misma estructura que get_performance_summary con objetos current y previous representando las dos ventanas.
Herramientas de campañas
top_campaigns
Top campañas ordenadas por ingresos atribuidos dentro de una ventana de fechas.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
model | string | No | last_touch |
limit | número | No | 10 (máx 50) |
Costo: 1 unidad
Devuelve: Array de campañas con name, platform_id, spend, revenue, roas, conversions, clicks, impressions.
platform_id
Cada campaña incluye un platform_id que puedes pasar a explain_campaign para un análisis profundo.
top_ad_sets
Top ad sets ordenados por ingresos cash atribuidos. Se sitúa entre top_campaigns (más amplio) y top_creatives (más específico) — responde "¿qué audiencia/ubicación está entregando?" antes de bajar a creativos individuales.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
model | string | No | last_touch |
limit | número | No | 10 (máx 50) |
Costo: 1 unidad
Requiere: Conexión de Meta Ads
Devuelve: Array de ad sets con ad_set_name, campaign_name (padre), spend, attributed_revenue, roas, attributed_conversions, cac, ctr_percent, impressions, clicks, avg_engagement_score.
top_creatives
Top anuncios individuales ordenados por ROAS, con detalles creativos (URLs de miniaturas, titulares, texto).
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
model | string | No | last_touch |
limit | número | No | 10 (máx 50) |
Costo: 1 unidad
Requiere: Conexión de Meta Ads
Devuelve: Array de anuncios con name, spend, revenue, roas, ctr, thumbnail_url, headline, body.
explain_campaign
Análisis profundo de una sola campaña: métricas principales, tendencia diaria y anuncios constituyentes.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
campaign_id | string | Sí | — |
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
model | string | No | last_touch |
Costo: 2 unidades
El campaign_id puede ser un UUID (ID interno), un platform_id de Meta o un nombre de campaña. La herramienta lo resuelve automáticamente.
Devuelve:
{
"summary": {
"name": "Summer Sale - Retargeting",
"platform_id": "23851234567890",
"spend": 1200.00,
"revenue": 5400.00,
"roas": 4.50,
"conversions": 28,
"clicks": 1840,
"impressions": 42000
},
"daily_trend": [
{ "date": "2026-04-01", "spend": 180, "revenue": 720, "clicks": 260 }
],
"ads": [
{ "name": "Video - Testimonial", "spend": 600, "revenue": 3200, "roas": 5.33 }
]
}Herramientas de clientes
explain_customer_journey
Línea temporal completa de eventos para un solo cliente: clics en anuncios, vistas de página, envíos de formularios, conversiones y pagos.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
customer_profile_id | UUID | Sí | — |
include_sensitive | boolean | No | false |
cursor_time | string | No | — |
cursor_id | UUID | No | — |
limit | número | No | 50 (máx 100) |
Costo: 2 unidades
La paginación es por cursor: pasa el cursor_time y cursor_id del next_cursor de la respuesta anterior para obtener la siguiente página. No hay filtro por ventana de fechas — la herramienta recorre la línea temporal completa del cliente.
Devuelve: Información del cliente (nombre, email/teléfono enmascarado) más un array de eventos ordenados cronológicamente.
Enmascaramiento de PII
Por defecto, el email y teléfono se enmascaran (ej. j***@e****.com). Para ver valores desenmascarados, pasa include_sensitive: true -- requiere scope mcp:read_pii y modo PII del workspace en full_default. Ver Privacidad y PII.
Herramientas de análisis
compare_attribution_models
Ejecuta la misma ventana de fechas a través de múltiples modelos de atribución para ver cómo cambia la distribución de crédito.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
models | string[] | No | ["last_touch", "first_touch", "linear", "position_based", "time_decay"] |
top_campaigns_limit | número | No | 5 (máx 20) |
Costo: 5 unidades
Devuelve: Un conjunto de resultados por modelo, cada uno con las mismas métricas a nivel de campaña. Compara para entender qué canales subestiman los modelos de un solo toque.
creative_fatigue_check
Detecta anuncios que muestran señales de fatiga: CTR en declive, CPM en aumento o saturación de audiencia comparado con la ventana anterior de igual duración.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
model | string | No | last_touch |
Costo: 2 unidades
Requiere: Conexión de Meta Ads
Devuelve: Array de anuncios con métricas del período actual vs anterior e indicadores de fatiga.
find_anomalies
Identifica picos o caídas inusuales diarias en gasto, ingresos o tráfico usando análisis de z-score (mediana + MAD).
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
metrics | string[] | No | ["spend", "cash_revenue", "visitors"] |
threshold_sigma | número | No | 2.0 |
model | string | No | last_touch |
Costo: 2 unidades
Devuelve: Array de días anómalos con nombre de métrica, valor observado, rango esperado y magnitud del z-score.
get_funnel
Funnel de conversión orientado a objetivos para la ventana de fechas. Recorre la progresión canónica de lead-gen lead_created → appointment_booked → showed → qualified → closed_won con conteos por etapa, tasas de conversión etapa a etapa y conteos de abandono. También devuelve buckets de resultados negativos (disqualified, no_show, closed_lost).
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
scope | all | pipeline_only | contact_only | No | all |
Costo: 1 unidad
scope=pipeline_only restringe a eventos vinculados a un pipeline del CRM (deals en una etapa). scope=contact_only restringe a eventos sin pipeline (solo lead / formularios).
Devuelve:
{
"scope": "all",
"window": { "start": "2026-04-01", "end": "2026-04-30" },
"main_chain": [
{ "key": "lead_created", "label": "Leads", "count": 409, "conversion_rate_from_previous_pct": null, "drop_off_from_previous_count": 0 },
{ "key": "appointment_booked", "label": "Booked", "count": 38, "conversion_rate_from_previous_pct": 9.29, "drop_off_from_previous_count": 371 },
{ "key": "showed", "label": "Showed", "count": 24, "conversion_rate_from_previous_pct": 63.16, "drop_off_from_previous_count": 14 },
{ "key": "qualified", "label": "Qualified", "count": 12, "conversion_rate_from_previous_pct": 50.00, "drop_off_from_previous_count": 12 },
{ "key": "closed_won", "label": "Closed Won", "count": 0, "conversion_rate_from_previous_pct": 0, "drop_off_from_previous_count": 12 }
],
"drop_off_outcomes": [
{ "key": "disqualified", "label": "Disqualified", "count": 7 },
{ "key": "no_show", "label": "No Show", "count": 5 },
{ "key": "closed_lost", "label": "Closed Lost", "count": 3 }
],
"totals": {
"all_events": 498,
"leads": 409,
"closed_won": 0,
"lead_to_closed_won_rate_pct": 0
}
}Los conteos son eventos, no clientes únicos
Un cliente puede aparecer en múltiples etapas. No calcules tasas a nivel de cliente desde estos conteos de eventos. Las tasas etapa a etapa asumen progresión lineal — en la realidad los clientes pueden saltarse etapas o ser reclasificados.
Las etapas solo muestran eventos que también son conversiones
Los conteos incluyen solo eventos cuyo event_key está mapeado en Settings → Outcomes → Conversion Definitions. Si una etapa del CRM como disqualified muestra 0 pero tu equipo la usa (ej. etiquetas "Descualificado", "Lead Abandonado"), falta la definición de conversión. Mapea la clave en Conversion Definitions para que esos eventos aparezcan en el funnel.
get_tracking_breakdown
Top valores por dimensión de tráfico (canal, país, página, navegador, dispositivo, SO, referrer, campaña, etc.) ordenados por visitantes. Devuelve hasta 6 dimensiones en una llamada.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
dimensions | string[] | No | ["channel", "country", "page", "browser"] |
limit | número | No | 10 (máx 50) |
Dimensiones disponibles: channel, referrer, campaign, page, entry_page, exit_page, country, region, city, device, browser, os
Costo: 1 unidad
Devuelve:
{
"breakdowns": {
"channel": [
{ "dimension_value_key": "paid_social", "label": "Paid Social", "visitors": 820, "visits": 1120, "pageviews": 2400, "bounce_rate_pct": 62.4, "conversions": 14, "conversion_rate_pct": 1.71, "cash_revenue": { "amount": 3200 } }
],
"country": [
{ "dimension_value_key": "US", "label": "United States", "visitors": 540, "visits": 720, "pageviews": 1820, "bounce_rate_pct": 58.1, "conversions": 12, "conversion_rate_pct": 2.22, "cash_revenue": { "amount": 2800 } }
]
},
"window": { "start": "2026-04-01", "end": "2026-04-30" },
"dimensions_requested": ["channel", "country"],
"limit_per_dimension": 10
}Los ingresos son solo cash
El campo cash_revenue usa únicamente revenue_type='cash' — la misma definición que usa el dashboard para el ROAS. Los valores de deals del CRM / pipeline NO se incluyen aquí.
list_conversions
Lista paginada de conversiones para una ventana de fechas, ordenada por conversion_time DESC. Cada fila lleva el cliente (PII enmascarado por defecto), canal de primer toque, tiempo hasta completar, ingresos, más los totales de vida del cliente.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
goal | string | No | payment_received |
search | string | No | — |
cursor_time | string | No | — |
cursor_id | string | No | — |
limit | número | No | 25 (máx 100) |
include_sensitive | boolean | No | false |
Costo: 1 unidad
goal filtra por event_type (ej. payment_received, lead_created, appointment_booked, closed_won). Pasa all para incluir todos los tipos de conversión. Usa el next_cursor de la respuesta para la siguiente página.
Para la línea temporal completa de UN solo cliente, usa explain_customer_journey.
list_visitors
Roster paginado de visitantes (identificados + anónimos) para una ventana de fechas, ordenado por last_seen_at DESC. Cada fila lleva timestamp de última visita, conteo de sesiones, ingresos cash totales, canal/fuente de la última sesión y dispositivo/geo.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
search | string | No | — |
cursor_time | string | No | — |
cursor_id | string | No | — |
limit | número | No | 25 (máx 100) |
include_sensitive | boolean | No | false |
Costo: 1 unidad
is_identified=true significa que el visitante tiene un customer_profile_id (vinculado vía identify() o un evento server-side). False significa solo anónimo. total_revenue es solo cash (revenue_type='cash') y refleja la suma de vida del cliente.
get_attribution_quality
Diagnóstico — ¿qué tan confiables son los datos de atribución en esta ventana de fechas? Devuelve la proporción de eventos relacionados con conversiones con UTMs completos (lo mejor), con solo fbclid (clic de Meta pero sin UTMs) y sin tracking alguno (lo peor).
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
Costo: 1 unidad
Devuelve:
{
"window": { "start": "2026-04-01", "end": "2026-04-30" },
"totals": {
"total_events": 409,
"with_full_utms": 248,
"with_fbclid_only": 102,
"with_no_tracking": 59
},
"percentages": {
"full_utms_pct": 60.6,
"fbclid_only_pct": 24.9,
"no_tracking_pct": 14.4,
"attributable_coverage_pct": 85.5
}
}Heurística
Un attributable_coverage_pct sobre 80% es saludable. Entre 50–80% significa que los números de atribución deben tratarse con cautela. Bajo 50% indica brechas de etiquetado UTM — recomienda una auditoría antes de confiar en reportes a nivel de campaña.
get_engagement_summary
Calidad de engagement de todo el sitio para la ventana de fechas: profundidad de scroll, tiempo en página, rage clicks, dead clicks, completación de formularios, completación de video, errores JS y Core Web Vitals (LCP/FCP/CLS/INP/TTFB). Desglose opcional por página (top N con más engagement) o por día (línea temporal).
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
breakdown_by | none | page | day | No | none |
page_limit | número | No | 10 (máx 50) |
Costo: 1 unidad
Devuelve: summary.attention (scroll, tiempo en página), summary.frustration (rage/dead clicks, errores JS), summary.forms (enviados/abandonados + tasa de completación), summary.video (reproducciones/completaciones + tasa), summary.web_vitals (promedios LCP/FCP/CLS/INP/TTFB + pct LCP bueno/malo). Con breakdown_by='page' agrega pages[]. Con breakdown_by='day' agrega daily[].
Diferente de get_tracking_breakdown
get_tracking_breakdown trata del mix de tráfico (qué canales, países, páginas traen usuarios). get_engagement_summary trata de la calidad de UX (¿los usuarios interactúan? ¿Se frustran? ¿El sitio es rápido?). Los eventos de engagement son solo de visualización — NUNCA se convierten en conversiones y nunca se incluyen en el crédito de atribución.
ad_funnel_diagnosis
Diagnóstico de funnel por anuncio — "¿dónde en el funnel de este anuncio está el problema?" Devuelve una fila por capa del funnel (delivery → attention → retention → click_intent → postclick_messaging → attributed_revenue → platform_diagnostics, las mismas capas con las que se construye el score compuesto).
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
profile_id | UUID | No | Se infiere si el workspace tiene exactamente uno |
ad_external_id | string | Sí | — |
score_window | 7d | 14d | 28d | lifetime | No | 28d |
Costo: 1 unidad
Devuelve: Por capa: el percentile del anuncio dentro de su cohorte, el smoothed_metric subyacente, sample_n, is_weakest_layer (el cuello de botella — percentil más bajo cuando está bajo el 25), diagnostic_codes[] legibles por máquina, y un recommended_priority — uno de fix_offer_or_audience, fix_landing_or_offer, fix_hook, improve_creative_clarity, increase_spend, rework_offer_or_landing o maintain.
Frescura diaria
meta.data_as_of refleja el rebuild diario de scores creativos, no el tiempo de sincronización del conector — los percentiles del funnel se actualizan una vez al día aunque los datos de Meta se hayan sincronizado hace minutos.
Herramientas de mensajería
whatsapp_attribution_summary
Ingresos y conversiones atribuidos a puntos de contacto de WhatsApp (anuncios Click-to-WhatsApp o tráfico con origen WhatsApp).
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
Costo: 2 unidades
Requiere: Integración de WhatsApp
Devuelve: Conteo de conversaciones, conteo de conversiones, ingresos atribuidos a puntos de contacto de WhatsApp.
top_dm_ads
Ranking de anuncios de mensajería (DM Ads) para un perfil, ordenado por costo por conversación de alta intención. Cubre los canales Click-to-Message: ig_ctm, wa_ctwa, lead_dm.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
profile_id | UUID | Sí | — |
date_from | YYYY-MM-DD | No | hace 28 días |
date_to | YYYY-MM-DD | No | hoy |
sort_by | string | No | cost_per_high_intent (high_intent_rate, composite_score, spend, high_intent_conversations) |
limit | número | No | 10 (máx 50) |
Costo: 1 unidad
Devuelve: Array de anuncios con high_intent_conversations (intenciones de precio / consulta / demo), high_intent_rate + high_intent_band (confianza de muestra Wilson: low / medium / high), cost_per_high_intent (la métrica estrella), cost_per_conversation, tasas de profundidad de respuesta, ingresos/ROAS atribuidos, citas agendadas, deals cerrados, data_quality_tier, desglose de intenciones y las recomendaciones abiertas que apuntan al anuncio. El PII en las conversaciones de muestra se redacta del lado del servidor.
Inteligencia creativa de workspace
Las herramientas de esta sección (y las de pronóstico y recomendaciones de más abajo) son de workspace: pasa workspace_id (se infiere cuando tienes exactamente uno) y leen todos los perfiles a los que tienes acceso en el workspace. Se apoyan en el feature store creativo, que se re-puntúa a diario — meta.data_as_of refleja el último re-scoring del workspace, no el tiempo de sincronización del conector.
top_workspace_performers
Los anuncios con mejor rendimiento en TODOS los perfiles de clientes de un workspace, puntuados contra creativos comparables (normalización por cohorte, suavizado, etapas de madurez).
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
score_window | 7d | 14d | 28d | lifetime | No | 28d |
limit | número | No | 10 (máx 50) |
profile_ids | UUID[] | No | — |
objectives | string[] | No | — |
truth_grades | string[] | No | — (predicted, attributed, lift) |
outcome_kinds | string[] | No | — (cash, pipeline, messaging, meta, none) |
formats | string[] | No | — |
min_spend | número | No | — |
has_video | boolean | No | — |
fatigue_risk_tiers | string[] | No | — (low, medium, high, critical) |
fatigue_states | string[] | No | — (active, paused, degraded) |
Costo: 1 unidad
Scope: workspace
Devuelve: Cada anuncio lleva tres medidas distintas — nunca las mezcles:
composite_score(0–100) — una mezcla transparente basada en reglas de percentiles de cohortetop_performer_likelihood(0–1) — una probabilidad (una posibilidad, no una garantía): la salida calibrada del ranker ML cuandoscore_source='model', si no, derivada delcomposite_score. Nunca es ROAS.attributed_revenue/roas— atribución cash real (presente cuandotruth_grade='attributed')
Además: primary_outcome_kind (qué métrica destacar por anuncio: cash → ingresos/ROAS, pipeline → outcomes de pipeline atribuidos, messaging → conversaciones iniciadas, meta → las conversiones reportadas por el propio Meta — siempre etiquetadas como atribución de Meta, none → solo el score compuesto), maturity_stage (cold → early → mature → calibrated), reason_codes[] que explican por qué rankea el anuncio, y bloques forecast + fatigue (NULL hasta que el pase de predicción haya puntuado el anuncio).
top_workspace_creative_patterns_v2
Minero de patrones creativos a nivel de workspace: qué patrones estructurales (clúster de arquetipo, arco narrativo, combo de roles del tercio dominante, presencia de roles, bucket de duración de prueba social, hook×claim×CTA) ganan MÁS que la línea base del workspace.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
score_window | 7d | 14d | 28d | lifetime | No | 28d |
min_cluster_size | número | No | 3 (mín 3, máx 50) |
profile_ids | UUID[] | No | — |
objectives | string[] | No | — |
truth_grades | string[] | No | — |
outcome_kinds | string[] | No | — |
formats | string[] | No | — |
min_spend | número | No | — |
has_video | boolean | No | — |
Costo: 1 unidad
Scope: workspace
Devuelve: Una fila por (pattern_dim, pattern_value) con sample_n, winner_n, win_rate, workspace_baseline_win_rate, lift_vs_workspace, límites del intervalo de confianza Wilson al 95% y exemplar_ad_external_ids (los 5 anuncios que mejor encarnan el patrón). Un patrón cuyo intervalo de confianza cruza la línea base es ruido de muestreo, no señal. Esto es una señal de win-rate a nivel de patrón, NO ROAS cash — combínalo con top_workspace_performers para el impacto cash por anuncio.
top_workspace_archetype_summary
Los clústeres de arquetipos creativos del workspace — nombrados vía LLM a partir de ejemplares — ordenados por lift sobre la línea base del workspace. Úsalo como titular de "replica estos patrones"; usa top_workspace_creative_patterns_v2 para dimensiones más finas.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
score_window | 7d | 14d | 28d | lifetime | No | 28d |
Costo: 1 unidad
Scope: workspace
Devuelve: Una fila por clúster de arquetipo con label, description, winning_signal, n_ads, n_winners, win_rate, workspace_baseline_win_rate, lift_vs_workspace, límites de CI Wilson al 95% y los top-5 anuncios ejemplares.
top_workspace_experiments
Experimentos de Meta Conversion-Lift / Split-Test rastreados para el workspace.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
experiment_id | UUID | No | — (pásalo para obtener el documento de detalle completo de un experimento) |
Costo: 1 unidad
Scope: workspace
Devuelve (modo lista): Una fila por experimento con type (LIFT, CONTINUOUS_LIFT_CONFIG, GEO_LIFT, SPLIT_TEST, SPLIT_TEST_V2), derived_state (scheduled / running / observing / results_pending / complete / canceled — derivado de los timestamps de Meta), best_grade (A/B/C) y el estimado puntual de lift primario + límites de CI. El modo detalle (con experiment_id) agrega celdas, objetivos, últimos resultados y las top-10 atribuciones creativas modeladas.
El lift es a nivel de celda; los split tests los calcula Atribu
Meta devuelve lift solo a nivel de celda — el lift por creativo siempre es modelado. Los resultados de SPLIT_TEST los calcula Atribu desde sus propias tablas de hechos (Meta no expone un endpoint de resultados para split tests).
top_workspace_fatigue_risk
Qué anuncios tienen más probabilidad de pausarse en los próximos 30 días, ordenados por hazard_30d_pause × spend — el presupuesto en riesgo si el anuncio se pausa. Solo aparecen anuncios activos en los tiers de fatiga high / critical.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
score_window | 7d | 14d | 28d | lifetime | No | 28d |
top_n | número | No | 20 (máx 50) |
min_spend | número | No | 100 (pasa 0 para incluir todos) |
Costo: 1 unidad
Scope: workspace
Devuelve: Anuncios ordenados con hazard_30d_pause y hazard_30d_degradation (probabilidades a 30 días del modelo de supervivencia Cox — posibilidades, no temporizadores deterministas), expected_lifespan_days, fatigue_risk_tier, más los totales del workspace total_budget_at_risk (gasto de los anuncios listados) y total_expected_pause_loss_30d (suma de hazard × spend — una cantidad distinta, no las confundas).
workspace_pattern_gaps
Análisis de cobertura de patrones entre perfiles: para cada patrón ganador del workspace, qué perfiles NO tienen ningún anuncio que lo exprese. Responde "¿qué prueba debería correr ahora?" con oportunidades concretas de replicación entre perfiles.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
score_window | 7d | 14d | 28d | lifetime | No | 28d |
limit | número | No | 10 (máx 50) |
min_lift | número | No | 0.05 (mínimo lift_vs_workspace para calificar; 0–2) |
Costo: 1 unidad
Scope: workspace
Devuelve: Filas ordenadas por lift_vs_workspace DESC, cada una con pattern_dim / pattern_value, el lift + límite inferior del CI, source_profile_ids (donde vive el patrón), gap_profile_ids (perfiles a los que les falta) y anuncios ejemplares.
workspace_historical_lift_band
Distribución histórica de lift de los experimentos Conversion-Lift / Split-Test graduados en el workspace. Ancla las expectativas antes de comprometerse con un nuevo estudio de lift.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
profile_id | UUID | No | — (limitar al historial de un cliente) |
lookback_days | número | No | 365 (mín 30, máx 1095) |
Costo: 1 unidad
Scope: workspace
Devuelve: min / p25 / p50 / p75 / max de relative_uplift (% de lift sobre la celda de comparación) entre experimentos con derived_state complete o results_pending, más los 5 ejemplares más recientes. Devuelve n_experiments: 0 cuando no hay historial graduado.
experiment_power_calc
Calculadora de poder estadístico para un estudio Conversion-Lift (una celda + holdout). Matemática pura — no lee datos.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
baseline_rate | número | Sí | — (0 < p < 1, ej. 0.024 para 2.4%) |
daily_spend | número | Sí | — |
cost_per_sample | número | Sí | — |
holdout_pct | número | No | 0.2 (0.05–0.5) |
days_to_run | número | No | 14 (1–180) |
Costo: 1 unidad
Scope: workspace
Devuelve: El efecto mínimo detectable (MDE) con 80% de poder / α = 0.05 a dos colas, días hasta poder leer resultados, escenarios de comparación con 0.5× y 2× el gasto, y una recomendación (mantener gasto / duplicar gasto / cohorte demasiado escasa para este diseño).
Herramientas de pronóstico
forecast_workspace_outlook
Pronóstico a nivel de portafolio para los próximos 7 días — la consulta de "¿cómo viene la semana?".
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
score_window | 7d | 14d | 28d | lifetime | No | 28d |
Costo: 1 unidad
Scope: workspace
Devuelve: Impresiones totales + outcomes atribuidos proyectados con bandas de intervalo de predicción al 80% (calibración split-conformal), costo por outcome promedio proyectado, conteos de top performers emergentes (candidatos a escalar) y en riesgo (en fatiga high/critical), un histograma de fatiga por tier, y projected_budget_at_risk (gasto total de los anuncios en fatiga high + critical).
Comportamiento cold-start
Los campos de pronóstico y fatiga vienen del cron del pase de predicción. Los anuncios bajo la puerta de cold-start (menos de 7 días de historia) no tienen pronóstico; los workspaces donde el pase no ha corrido devuelven resultados vacíos con un campo interpretation explicativo.
forecast_ad_trajectory
Detalle por anuncio: scores actuales más el pronóstico a 7 días, hazards de fatiga e historial reciente de entrega — "¿cómo se ve este anuncio la próxima semana?"
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
profile_id | UUID | Sí | — |
ad_external_id | string | Sí | — |
score_window | 7d | 14d | 28d | lifetime | No | 28d |
Costo: 1 unidad
Scope: workspace (profile_id es requerido porque el mismo ad_external_id puede aparecer en múltiples perfiles de un workspace de agencia)
Devuelve: La última fila del feature store del anuncio (gasto, impresiones, scores), outcomes / impresiones / costo por outcome proyectados a 7 días con bandas de intervalo de predicción al 80%, los hazards de pausa + degradación a 30 días y la vida útil esperada, los últimos 14 días de entrega diaria y eventos de ciclo de vida (born / paused / revived / degraded). Los campos de pronóstico/fatiga son NULL para anuncios cold-start o sin puntuar — el campo interpretation explica cuál caso aplica.
compare_forecast_scenarios
Simulador what-if: alimenta valores modificados de gasto / frecuencia a través del forecaster para proyectar "si duplico el presupuesto de este anuncio, ¿cuál es el conteo esperado de outcomes a 7 días?"
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
profile_id | UUID | Sí | — |
ad_external_id | string | Sí | — |
score_window | 7d | 14d | 28d | lifetime | No | 28d |
scenarios | object[] | Sí | 1–5 de { name, spend_7d_override?, frequency_override? } |
Costo: 2 unidades
Scope: workspace (profile_id requerido)
Devuelve: La predicción base más, por escenario, el estimado puntual + banda de intervalo de predicción al 80% + delta vs base + un flag out_of_range — true cuando el gasto del escenario es más de 2× o menos de 0.5× el gasto trailing-7d actual del anuncio (el modelo está extrapolando; trata el resultado solo como direccional). Devuelve base null + gated_reason por escenario cuando el anuncio está en cold-start / pausado / degradado.
Herramientas de recomendaciones
list_workspace_recommendations
Las recomendaciones del media buyer de IA en todos los perfiles de un workspace, ordenadas por impacto esperado.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
profile_ids | UUID[] | No | — |
statuses | string[] | No | ["open"] (open, applied, dismissed, superseded, expired, rolled_back) |
kinds | string[] | No | — (scale_winner, pause_underperformer, budget_reallocate_winners, creative_refresh_pre_fatigue) |
risk_tiers | string[] | No | — (safe, medium, manual_only) |
cohort_objective | string | No | — (messaging, sales, leads, traffic, awareness) |
score_window | 7d | 14d | 28d | lifetime | No | 28d |
limit | número | No | 20 (máx 100) |
Costo: 1 unidad
Scope: workspace
Devuelve: Recomendaciones con kind, risk_tier (safe = auto-aplicable si el workspace lo activó, medium = siempre requiere confirmación explícita, manual_only = sin llamada a Meta — handoff a Ads Lab), rationale_text + rationale_jsonb estructurado, suggested_modifications (acción + parámetros), expected_impact_dollars (proyección direccional, no un pronóstico), confidence (0–1) y timestamps de ciclo de vida.
diagnose_recommendation
Diagnóstico completo de una sola recomendación — "¿qué pasó con esta recomendación?" Úsala antes de apply_recommendation para entender intentos previos.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
recommendation_id | UUID | Sí | — |
Costo: 1 unidad
Scope: workspace
Devuelve: La fila de la recomendación (kind / risk tier / status / rationale / suggested modifications / target / impacto / confianza / ciclo de vida), la aplicación más reciente si existe (con el estado de Meta pre-cambio y post-cambio, el resultado de la API de Meta, timestamps de verificación y rollback) y la cadena de auditoría de write-back relacionada, de más reciente a más antigua.
apply_recommendation
Aplica una recomendación contra Meta. Es una herramienta de escritura con el mismo flujo de seguridad de tres pasos y las mismas puertas que send_meta_conversions — consulta la guía de Write-Back.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
recommendation_id | UUID | Sí | — |
mode | preview | dry_run | confirm | Sí | — |
idempotency_key | string | No | Se auto-deriva por (usuario, recomendación, día) cuando se omite |
applied_by | UUID | No | — |
Costo: 10 unidades
Scope: workspace
Requiere (para dry_run y confirm): scope mcp:write, write-back del workspace habilitado, rol de propietario/administrador del workspace. preview no necesita ninguno. confirm además requiere que la recomendación esté open y sin expirar.
preview muestra lo que el worker haría (anuncio/ad-set objetivo, llamadas a Meta planeadas, % de cambio de presupuesto) sin efectos secundarios. dry_run registra una fila de auditoría capturando la intención. confirm encola el trabajo para el pipeline worker, que captura el estado de Meta pre-cambio, ejecuta la escritura y verifica que el cambio se aplicó ~5 minutos después. Repetir confirm con la misma clave de idempotencia devuelve la aplicación existente — sin doble escritura.
Herramientas de write-back
send_meta_conversions
Envía conversiones atribuidas a la API de Conversiones de Meta (CAPI) para optimización de entrega de anuncios. Esta herramienta tiene un flujo de seguridad de tres pasos: preview, dry-run, confirm.
Consulta la guía dedicada de Write-Back para el flujo completo, controles de seguridad y ejemplos. apply_recommendation (arriba) es la segunda herramienta de escritura — mismas puertas, mismo rastro de auditoría.
| Parámetro | Tipo | Requerido | Defecto |
|---|---|---|---|
mode | preview | dry_run | confirm | Sí | — |
window_start | fecha | Sí | — |
window_end | fecha | Sí | — |
event_types | string[] | Sí | — |
pixel_id | string | Para dry_run/confirm | — |
idempotency_key | string | Para confirm | — |
test_event_code | string | No | — |
max_events | número | No | 500 (máx 500) |
Costo: 10 unidades
Requiere: Scope mcp:write, conexión de Meta Ads, write-back del workspace habilitado, rol de administrador del workspace.
Envelope de respuesta
Cada herramienta devuelve un envelope consistente:
{
"data": { },
"meta": {
"request_id": "01968a3b-...",
"workspace_id": "...",
"profile_id": "...",
"window_start": "2026-04-01",
"window_end": "2026-04-14",
"attribution_model": "last_touch",
"currency": "USD",
"data_as_of": "2026-04-14T18:30:00Z",
"freshness_by_provider": {
"meta": "2026-04-14T18:30:00Z",
"ghl": "2026-04-14T17:00:00Z"
},
"data_freshness_warning": null,
"record_count": 12,
"pii_level_applied": "masked"
}
}| Campo meta | Descripción |
|---|---|
request_id | ID único para depuración y soporte |
data_as_of | Timestamp de sincronización más antiguo entre los proveedores requeridos |
freshness_by_provider | Tiempo de última sincronización por proveedor |
data_freshness_warning | Advertencia legible si los datos están obsoletos (>6 horas) |
pii_level_applied | masked o full -- qué nivel de PII se usó realmente |