Skip to main content
Glama
getsimba-ai

Simba MCP Server

Official
by getsimba-ai

Simba MCP Server

PyPI License: MIT Python 3.11+

Simba es una plataforma de modelado de mezcla de marketing (MMM) bayesiano. Este servidor MCP de modelado de mezcla de marketing permite a los asistentes de IA interactuar directamente con tus modelos: subir datos, crear modelos, comprobar resultados y ejecutar optimizaciones de presupuesto mediante lenguaje natural en Claude, Cursor o Claude Code.

Instalación

pip install simba-mcp

O ejecútalo directamente sin instalarlo:

uvx simba-mcp

Related MCP server: Meta Ads MCP

Inicio rápido

Cursor IDE

Añádelo a la configuración MCP de Cursor (.cursor/mcp.json en el espacio de trabajo o en la configuración global):

{
  "mcpServers": {
    "simba": {
      "command": "uvx",
      "args": ["simba-mcp"],
      "env": {
        "SIMBA_API_URL": "https://demo.simba-mmm.com",
        "SIMBA_API_KEY": "simba_sk_..."
      }
    }
  }
}

Claude Code

Añádelo a la configuración MCP de Claude Code:

{
  "mcpServers": {
    "simba": {
      "command": "uvx",
      "args": ["simba-mcp"],
      "env": {
        "SIMBA_API_URL": "https://demo.simba-mmm.com",
        "SIMBA_API_KEY": "simba_sk_..."
      }
    }
  }
}

API de Claude (conector MCP)

Usa el transporte remoto Streamable HTTP con el conector MCP de Anthropic:

import anthropic

client = anthropic.Anthropic()

response = client.beta.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=4096,
    messages=[{"role": "user", "content": "List my Simba models"}],
    mcp_servers=[
        {
            "type": "url",
            "url": "https://demo.simba-mmm.com/mcp",
            "name": "simba",
            "authorization_token": "simba_sk_...",
        }
    ],
    tools=[{"type": "mcp_toolset", "mcp_server_name": "simba"}],
    betas=["mcp-client-2025-11-20"],
)

Herramientas disponibles

Herramienta

Descripción

get_data_schema

Obtén el esquema CSV canónico para los archivos de entrada de MMM

upload_data

Sube un conjunto de datos CSV a Simba

list_uploads

Lista los conjuntos de datos subidos anteriormente

get_upload

Detalles de una subida, incluido su esquema de columnas

list_models

Lista todos los modelos con su estado

create_model

Configura y comienza a ajustar un nuevo modelo MMM

get_model

Metadatos del modelo + eco de configuración: funciona para cualquier estado, incl. fallido

delete_model

Elimina permanentemente un modelo FALLIDO (409 para cualquier otro estado)

rename_model

Renombra un modelo sin guardarlo

save_model

Archiva un modelo en un proyecto (lo hace visible en list_models por defecto)

unsave_model

Libera el espacio de un modelo guardado (inverso no destructivo de save_model)

list_projects

Lista los proyectos (carpetas de modelos) en los que puedes archivar modelos

create_project

Crea un proyecto con nombre, opcionalmente compartido con el equipo

rename_project

Renombra un proyecto que posees

get_model_status

Consulta el progreso de ajuste de un modelo

get_model_results

Obtén resultados (ROI, contribuciones, curvas de respuesta, diagnósticos y más)

create_var_model

Ajusta un modelo a largo plazo (VAR)

link_var_model / unlink_var_model

Adjunta/desadjunta un modelo VAR a un MMM para la sección long_run_rollup

set_contribution_groups / get_contribution_groups

Persistir/leer las agrupaciones de controladores de la vista de contribuciones

run_optimizer

Ejecuta la optimización de presupuesto en un modelo completado

get_optimizer_results

Obtén el estado y los resultados del optimizador (los últimos, o un run_id específico)

get_scenario_template

Genera una plantilla de período futuro para la planificación de escenarios

run_scenario

Ejecuta una predicción de escenario "qué pasaría si"

get_scenario_results

Obtén los resultados del escenario (los últimos, o un run_id específico)

list_runs

Lista el historial de ejecuciones guardadas del optimizador/escenario de un modelo

update_run

Renombra/anota una ejecución guardada (notas, etiquetas)

set_run_pinned

Fija/desfija una ejecución guardada

Ejemplos de indicaciones

Prueba estos con cualquier asistente de IA conectado:

Explora tus modelos:

"Lista mis modelos de Simba y muéstrame el resumen de ROI por canal para el modelo completo más reciente."

Crea un modelo:

"Sube estos datos CSV a Simba y crea un nuevo modelo MMM con TV, Search y Social como canales de medios. Usa 'revenue' como KPI y 'date' como columna de fecha."

Comprueba el progreso:

"¿Cuál es el estado de ajuste del modelo a1b2c3d4?"

Obtén resultados:

"Muéstrame los diagnósticos del modelo y las contribuciones por canal para el modelo a1b2c3d4."

Optimiza el presupuesto:

"Ejecuta una optimización de presupuesto en el modelo a1b2c3d4 con un presupuesto total de $1M durante 12 meses. Establece los límites de TV en 5-40% y los de Search en 10-50%. Usa pesos de distribución uniformes."

Curvas de respuesta:

"Muéstrame las curvas de respuesta del modelo a1b2c3d4. ¿En qué nivel de gasto alcanza TV rendimientos decrecientes?"

Planificación de escenarios:

"Obtén una plantilla de escenario para el modelo a1b2c3d4 para las próximas 12 semanas. Luego ejecuta un escenario donde aumento TV en un 20% y reduzco Search en un 10%. ¿Qué sucede con los ingresos?"

Flujo de trabajo completo:

"Tengo datos de marketing que quiero analizar. Primero obtén el esquema para saber qué formato se necesita, luego sube mis datos, crea un modelo y, una vez que esté listo, muéstrame el ROI por canal."

Habilidades del agente

El directorio skills/ incluye habilidades de flujo de trabajo en el formato Agent Skills (SKILL.md por habilidad): instálalas en cualquier agente compatible con habilidades (por ejemplo, Claude Code) junto con este servidor MCP:

Habilidad

Cubre

simba-mmm-workflow

Subir → crear → consultar → leer resultados correctamente (semántica de secciones, nombres de canales, reglas de atribución/solapamiento, controles de tamaño de contexto)

simba-optimizer-runs

Convenciones de payload del optimizador, ingresos vs. beneficios, consulta por run_id, semántica de columnas de decisión vs. comparación, curación de ejecuciones

simba-prior-conventions

Payloads de anulación de priors: fusión de valores predeterminados inteligentes, rechazo estricto, las familias de anclas de semi-saturación / semi-marginal / semi-vida

simba-var-workflow

Modelado a largo plazo (VAR): crear → consultar → vincular → long_run_rollup

Las habilidades son artefactos de documentación: viajan en el repositorio, no en el protocolo de red.

Advertencias y consejos

Cosas que suelen confundir tanto a los agentes de IA como a los humanos:

Servidor alojado: tu token de portador ES tu inicio de sesión

En las implementaciones HTTP, cada solicitud se autentica con el propio token Authorization: Bearer simba_sk_... del llamante; no hay una clave compartida en el servidor. Si las llamadas a herramientas devuelven "No API key on this request", tu cliente MCP no está enviando el token (revisa la configuración de authorization_token / encabezados en su configuración).

Los nombres de canal coinciden exactamente

Los resultados del modelo se indexan por el nombre de la columna de actividad del canal (por ejemplo, "search_activity", "TV_impressions"), no por el channels[].name que pasaste a create_model. Las claves pueden contener espacios y la coincidencia es sensible a mayúsculas y a espacios: el optimizador y las herramientas de escenario las usan como claves de diccionario.

Siempre llama a get_model_results con sections="channel_summary" primero para ver las claves exactas de los canales y luego úsalas textualmente en los payloads del optimizador/escenario.

Secciones de resultados

get_model_results sirve estas secciones (solicita solo lo que necesites mediante sections=): channel_summary, contributions (espacio de KPI/unidad — el multiplicador no se aplica), coefficients (tabla de ingresos por período y por canal), params, decay_curves, response_curves, marginal_curves, saturation, mroi_summary (ROI marginal al gasto actual con HDI del 94%; los ajustes posteriores a #591 añaden los escalares de convención allperiods_unweighted / spendweighted_active, y los ajustes posteriores a #629 añaden un *_mean junto a cada *_median — la mediana se muestra, la media es la que concilia con la curva de ingresos marginales), mroi_periods (solo opt-in — la serie de ROI marginal por período; nunca en el payload predeterminado, solicítala por nombre), model_stats, actual_vs_model, long_run_rollup, optimizer, predictions, posterior, financials, model_config. El campo sections_available de la respuesta es la autoridad si el servidor es más nuevo que estos documentos.

Los modelos se identifican por model_hash

Todos los endpoints de modelos usan la cadena model_hash (por ejemplo, "f835671a25") devuelta por create_model y list_models.

La gestión de claves API está deliberadamente no expuesta

Los endpoints /api/v1/keys (crear/listar/revocar claves API) son solo de autenticación de sesión y no tienen herramientas MCP por diseño: un servidor que posee una clave no debe poder crear ni revocar claves. Gestiona las claves en la interfaz de Simba (Perfil → Claves API).

Matrices del optimizador, no escalares

laydown_weights y period_cpm deben ser objetos de matrices, cada matriz con exactamente num_periods elementos:

// Wrong
"period_cpm": {"TV": 10}

// Correct
"period_cpm": {"TV": [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]}

Las mismas claves de canal deben aparecer en bounds, laydown_weights y period_cpm. Los valores de bounds son porcentajes (0-100) del total_budget, no cantidades monetarias.

Limpia los NaN de las plantillas de escenario

La plantilla de get_scenario_template puede contener NaN/null para canales sin datos históricos. Reemplázalos con 0 antes de pasarlos a run_scenario:

import math
for row in scenario_data:
    for key, val in row.items():
        if val is None or (isinstance(val, float) and math.isnan(val)):
            row[key] = 0

Tres endpoints son asíncronos

Estos devuelven 202 y requieren consulta:

Acción

Inicio

Consulta

Ajustar modelo

create_model

get_model_status

Optimizar

run_optimizer

get_optimizer_results

Escenario

run_scenario

get_scenario_results

Consulta cada 5-10 segundos. Comprueba el campo status para "complete" o "failed".

Requisitos de subida de datos

  • Solo CSV (no Excel). Máximo 10 MB (impuesto por la API).

  • Mínimo de filas: consulta get_data_schemax-simba-constraints.min_rows; el campo warnings de la respuesta de subida es la autoridad. Más filas = posteriores más ajustados (se recomiendan 104+ filas semanales).

  • Columnas de medios: {channel}_activity y {channel}_spend por canal.

  • Usa 0 para períodos inactivos, no en blanco o NA.

  • ¿Archivo grande? Pasa csv_path (una ruta de archivo local) en lugar de csv_content — el servidor lo lee directamente en lugar de que el CSV pase por la conversación. Solo servidores locales (stdio); deshabilitado en implementaciones HTTP/SSE a menos que SIMBA_MCP_ALLOW_LOCAL_FILES=1.

Errores comunes

Error

Causa

Solución

Authentication required

Sin clave de API o clave caducada

Comprueba la variable de entorno SIMBA_API_KEY

API key missing required scope: <scope>

La clave no tiene el alcance necesario

Crea una clave con todos los alcances

Missing required fields: [...]

Faltan claves obligatorias en el payload

Comprueba la lista de parámetros de la herramienta

Model status is '<status>'. Optimization requires a 'complete' model.

El modelo aún se está ajustando o falló

Consulta get_model_status hasta que esté completo

laydown_weights['TV'] must be an array of length 12

Escalar en lugar de matriz, o longitud incorrecta

Usa matrices que coincidan con num_periods

period_cpm['TV'] values must all be positive

CPM cero o negativo

Todos los valores de CPM deben ser > 0

Channels in bounds missing from period_cpm: [...]

Nombres de canal no coincidentes

Mismas claves en bounds, laydown_weights y period_cpm

Columns not found in data: [...]

Error tipográfico en el nombre de la columna

Comprueba que los encabezados del CSV coincidan exactamente

File exceeds 10 MB limit

CSV demasiado grande

Reduce el tamaño del archivo o agrega datos

Acceso directo a la API

El servidor MCP envuelve la API REST de Simba. Para scripting, CI/CD o entornos sin MCP, puedes llamar a la API directamente.

Cuándo usar MCP vs API directa

MCP (a través del asistente de IA)

API directa (curl / Python)

Mejor para

Análisis exploratorio, flujos de trabajo conversacionales

Pipelines automatizados, trabajos programados, scripts

Sondeo asíncrono

El asistente lo maneja automáticamente

Tú implementas la lógica de sondeo hasta completar

Limpieza de datos

El asistente limpia NaN/null, construye payloads

Tú escribes el código de preparación de datos

Reproducibilidad

Conversacional

Scriptable, controlado por versiones

Ambos usan las mismas claves de API con los mismos alcances.

Inicio rápido (Python)

import requests, time

BASE = "https://demo.simba-mmm.com"
HEADERS = {"Authorization": "Bearer simba_sk_..."}

# Upload data
with open("marketing_data.csv", "rb") as f:
    r = requests.post(f"{BASE}/api/v1/ingest",
                      headers={**HEADERS, "Content-Type": "text/csv"},
                      data=f.read(), params={"name": "q1_data"})
file_id = r.json()["id"]

# Create model
r = requests.post(f"{BASE}/api/v1/models", headers=HEADERS, json={
    "data_source": {"uploaded_file_id": file_id},
    "date_column": "date",
    "kpi_column": "revenue",
    "hierarchy_column": "brand",
    "channels": [
        {"name": "TV", "activity_column": "tv_grps", "spend_column": "tv_spend"},
        {"name": "Search", "activity_column": "search_impressions", "spend_column": "search_spend"},
    ],
    "total_media_effect": "Retail",
})
model_hash = r.json()["model_hash"]

# Poll until complete
while True:
    status = requests.get(f"{BASE}/api/v1/models/{model_hash}/status",
                          headers=HEADERS).json()
    if status["status"] in ("complete", "failed"):
        break
    print(f"Fitting... {status.get('progress', '?')}%")
    time.sleep(10)

# Get results
results = requests.get(f"{BASE}/api/v1/models/{model_hash}/results",
                       headers=HEADERS,
                       params={"sections": "channel_summary,model_stats"}).json()
for ch in results["results"]["channel_summary"]:
    print(f"{ch['Channel']}: ROI {ch['ROI']:.1f}")

Inicio rápido (curl)

API_KEY="simba_sk_..."
BASE="https://demo.simba-mmm.com"

# Upload data
curl -X POST "$BASE/api/v1/ingest?name=q1_data" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: text/csv" \
  --data-binary @marketing_data.csv

# Create model (replace uploaded_file_id with id from upload)
curl -X POST "$BASE/api/v1/models" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data_source": {"uploaded_file_id": 1}, "date_column": "date", "kpi_column": "revenue", "hierarchy_column": "brand", "channels": [{"name": "TV", "activity_column": "tv_grps", "spend_column": "tv_spend"}]}'

# Poll status (replace MODEL_HASH)
curl "$BASE/api/v1/models/MODEL_HASH/status" -H "Authorization: Bearer $API_KEY"

# Get results
curl "$BASE/api/v1/models/MODEL_HASH/results?sections=channel_summary,model_stats" \
  -H "Authorization: Bearer $API_KEY"

Configuración de la clave de API

El servidor MCP se autentica con las mismas claves de API utilizadas por la API REST de Simba. Crea una clave con los alcances requeridos:

  1. Ve a Perfil > Claves de API en la interfaz de Simba

  2. Haz clic en Crear clave

  3. Establece los alcances: ingest, read:models, read:results, create:models, optimize, scenario

  4. Copia la clave (se muestra solo una vez)

Cómo se suministra la clave depende de dónde se ejecute el servidor:

  • Local (stdio — Cursor, Claude Code): configúrala como la variable de entorno SIMBA_API_KEY en tu configuración de MCP (los ejemplos anteriores).

  • Alojado (https://demo.simba-mmm.com/mcp): envíala como el encabezado HTTP Authorization: Bearer — el campo authorization_token en la configuración del conector MCP de Claude. Cada llamador usa su propia clave (v0.2.2+): el servidor nunca comparte una identidad entre llamadores, una solicitud sin clave recibe un 401 estructurado con orientación, y solo ves los modelos de tu propia cuenta.

Configuración

Variable de Entorno

Descripción

Por defecto

SIMBA_API_URL

URL base de la API de Simba

http://localhost:5005

SIMBA_API_KEY

Tu clave de API de Simba (solo modo stdio — los llamadores HTTP envían su propia clave como token de portador)

(requerida para stdio)

Modos de transporte

El servidor admite todos los modos de transporte de MCP:

# stdio (default) — for Cursor, Claude Code
simba-mcp

# Streamable HTTP — for remote deployment
simba-mcp --transport streamable-http --port 8100

# SSE — legacy transport
simba-mcp --transport sse --port 8100

# Or via uvicorn directly
uvicorn simba_mcp.server:app --host 0.0.0.0 --port 8100

Licencia

MIT

A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
9Releases (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

  • -
    license
    Not graded
    quality
    B
    maintenance
    Connects AI assistants to marketing mix models, enabling natural language data upload, performance modeling, budget optimization, and scenario testing.
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to manage Meta Ads (Facebook, Instagram) end-to-end through natural conversation, including launching campaigns, uploading creatives, updating budgets, and analyzing performance.
    42
    Business Source 1.1
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to create, analyze, and optimize ad campaigns across Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads, Amazon Ads, and ChatGPT Ads through natural language using 400+ tools.
    83
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables marketing optimization tasks such as copywriting, campaign analysis, social media planning, audience segmentation, and KPI tracking through natural language.
    113

View all related MCP servers

Related MCP Connectors

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

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

  • Connect e-commerce and marketing data to AI assistants via MCP.

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/getsimba-ai/simba-mcp'

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