Skip to main content
Glama
getsimba-ai

Simba MCP Server

Official
by getsimba-ai

Simba MCP 服务器

PyPI License: MIT Python 3.11+

Simba 是一个贝叶斯营销组合建模(MMM)平台。这个营销组合建模 MCP 服务器 让 AI 助手可以直接与你的模型交互——在 Claude、Cursor 或 Claude Code 中通过自然语言上传数据、构建模型、查看结果并运行预算优化。

安装

pip install simba-mcp

或者不安装直接运行:

uvx simba-mcp

Related MCP server: Meta Ads MCP

快速开始

Cursor IDE

添加到你的 Cursor MCP 设置中(工作区中的 .cursor/mcp.json 或全局设置):

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

Claude Code

添加到你的 Claude Code MCP 配置中:

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

Claude API(MCP 连接器)

使用远程 Streamable HTTP 传输与 Anthropic MCP 连接器配合使用:

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"],
)

可用工具

工具

描述

get_data_schema

获取 MMM 输入文件的规范 CSV 模式

upload_data

将 CSV 数据集上传到 Simba

list_uploads

列出之前上传的数据集

get_upload

单个上传的详细信息,包括其列模式

list_models

列出所有模型及其状态

create_model

配置并开始拟合新的 MMM 模型

get_model

模型元数据 + 配置回显——适用于任何状态,包括失败

delete_model

永久删除 FAILED 模型(其他任何状态返回 409)

rename_model

重命名模型而不保存它

save_model

将模型归档到项目中(使其在默认的 list_models 中可见)

unsave_model

释放已保存模型的槽位(save_model 的非破坏性逆操作)

list_projects

列出你可以归档模型的项目(模型文件夹)

create_project

创建命名项目,可选团队共享

rename_project

重命名你拥有的项目

get_model_status

轮询模型的拟合进度

get_model_results

获取结果(ROI、贡献、响应曲线、诊断等)

create_var_model

拟合长期(VAR)模型

link_var_model / unlink_var_model

将 VAR 模型附加/分离到 MMM 以用于 long_run_rollup 部分

set_contribution_groups / get_contribution_groups

持久化/读取贡献视图的驱动因素分组

run_optimizer

对已完成的模型运行预算优化

get_optimizer_results

获取优化器状态和结果(最新,或特定的 run_id

get_scenario_template

为情景规划生成前瞻期模板

run_scenario

运行"假设"情景预测

get_scenario_results

获取情景结果(最新,或特定的 run_id

list_runs

列出模型保存的优化器/情景运行历史

update_run

重命名/注释已保存的运行(备注、标签)

set_run_pinned

固定/取消固定已保存的运行

示例提示词

在任何已连接的 AI 助手中尝试这些:

探索你的模型:

"列出我的 Simba 模型,并显示最近完成的模型的渠道 ROI 摘要。"

构建模型:

"将此 CSV 数据上传到 Simba,并使用 TV、Search 和 Social 作为媒体渠道创建新的 MMM 模型。使用 'revenue' 作为 KPI,'date' 作为日期列。"

检查进度:

"模型 a1b2c3d4 的拟合状态如何?"

获取结果:

"显示模型 a1b2c3d4 的模型诊断和渠道贡献。"

优化预算:

"对模型 a1b2c3d4 运行预算优化,总预算 100 万美元,为期 12 个月。将 TV 的边界设置为 5-40%,Search 设置为 10-50%。使用均匀投放权重。"

响应曲线:

"显示模型 a1b2c3d4 的响应曲线。TV 在什么支出水平下达到边际收益递减?"

情景规划:

"为模型 a1b2c3d4 获取未来 12 周的情景模板。然后运行一个情景:TV 增加 20%,Search 减少 10%。收入会发生什么变化?"

完整工作流:

"我有想要分析的营销数据。首先获取模式以了解所需格式,然后上传我的数据,创建模型,完成后按渠道显示 ROI。"

代理技能

skills/ 目录以 Agent Skills 格式(每个技能一个 SKILL.md)提供工作流技能——将它们与这个 MCP 服务器一起安装到任何支持技能的代理(例如 Claude Code)中:

技能

涵盖内容

simba-mmm-workflow

上传 → 创建 → 轮询 → 正确读取结果(部分语义、渠道命名、归因/重叠规则、上下文大小控制)

simba-optimizer-runs

优化器负载约定、收入与利润、按 run_id 轮询、决策列与比较列语义、运行整理

simba-prior-conventions

先验覆盖负载:智能默认合并、严格拒绝、半饱和/半边际/半衰期锚定系列

simba-var-workflow

长期(VAR)建模:创建 → 轮询 → 链接 → long_run_rollup

这些技能是文档制品——它们随仓库分发,不通过线路协议传输。

注意事项与提示

以下内容经常让 AI 代理和人类都感到困惑:

托管服务器:你的 bearer token 就是你的登录凭证

在 HTTP 部署中,每个请求都使用调用者自己的 Authorization: Bearer simba_sk_... token 进行身份验证——没有服务器端共享密钥。如果工具调用返回 "No API key on this request",说明你的 MCP 客户端没有发送 token(检查其配置中的 authorization_token / headers 设置)。

渠道名称是精确匹配

模型结果以渠道的活动列名称(例如 "search_activity""TV_impressions")为键,而不是你传递给 create_modelchannels[].name。键可以包含空格,匹配区分大小写和空格——优化器和情景工具将它们用作字典键。

始终先调用 get_model_results 并传入 sections="channel_summary" 以查看确切的渠道键,然后在优化器/情景负载中原样使用它们。

结果部分

get_model_results 提供以下部分(通过 sections= 只请求你需要的部分): channel_summarycontributions(KPI/单位空间——应用乘数)、coefficients(每周期每渠道收入表)、paramsdecay_curvesresponse_curvesmarginal_curvessaturationmroi_summary(当前支出下的边际 ROI,含 94% HDI;#591 之后的拟合添加了 allperiods_unweighted / spendweighted_active 约定标量,#629 之后的拟合在每个 *_median 旁边添加了 *_mean——显示的是中位数,与边际收入曲线对账的是均值)、mroi_periods仅限选择加入——每周期边际 ROI 序列;绝不在默认负载中,按名称请求)、model_statsactual_vs_modellong_run_rollupoptimizerpredictionsposteriorfinancialsmodel_config。如果服务器比这些文档更新,响应中的 sections_available 字段是权威的。

模型通过 model_hash 标识

所有模型端点使用 create_modellist_models 返回的字符串 model_hash(例如 "f835671a25")。

API 密钥管理刻意不暴露

/api/v1/keys 端点(创建/列出/撤销 API 密钥)仅限会话认证,有意不提供 MCP 工具:持有一个密钥的服务器绝不能能够铸造或撤销密钥。请在 Simba UI 中管理密钥(个人资料 → API 密钥)。

优化器使用数组,而非标量

laydown_weightsperiod_cpm 必须是数组对象,每个数组恰好有 num_periods 个元素:

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

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

相同的渠道键必须出现在 boundslaydown_weightsperiod_cpm 中。边界值是 total_budget百分比(0-100),不是货币金额。

清理情景模板中的 NaN

get_scenario_template 返回的模板可能包含没有历史数据的渠道的 NaN/null。在传递给 run_scenario 之前将它们替换为 0

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

三个端点是异步的

它们返回 202 并需要轮询:

操作

开始

轮询

拟合模型

create_model

get_model_status

优化

run_optimizer

get_optimizer_results

情景

run_scenario

get_scenario_results

每 5-10 秒轮询一次。检查 status 字段是否为 "complete""failed"

数据上传要求

  • 仅限 CSV(不支持 Excel)。最大 10 MB(API 强制)。

  • 行数下限:查看 get_data_schemax-simba-constraints.min_rows;上传响应的 warnings 字段是权威的。行数越多 = 后验越紧(建议 104+ 周行)。

  • 媒体列:每个渠道的 {channel}_activity{channel}_spend

  • 非活跃期间使用 0,不要留空或使用 NA。

  • 文件很大?传递 csv_path(本地文件路径)而不是 csv_content——服务器直接读取文件,而不是让 CSV 通过对话传输。仅限本地(stdio)服务器;在 HTTP/SSE 部署中禁用,除非设置了 SIMBA_MCP_ALLOW_LOCAL_FILES=1

常见错误

Error

Cause

Fix

Authentication required

没有 API 密钥或密钥已过期

检查 SIMBA_API_KEY 环境变量

API key missing required scope: <scope>

密钥缺少所需的作用域

创建包含所有作用域的密钥

Missing required fields: [...]

载荷缺少必需的键

检查工具的参数列表

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

模型仍在拟合或已失败

轮询 get_model_status 直到状态为 complete

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

使用了标量而非数组,或长度错误

使用与 num_periods 匹配的数组

period_cpm['TV'] values must all be positive

CPM 为零或负数

所有 CPM 值必须大于 0

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

渠道名称不匹配

bounds、laydown_weights 和 period_cpm 中的键必须一致

Columns not found in data: [...]

列名拼写错误

检查 CSV 表头是否完全匹配

File exceeds 10 MB limit

CSV 文件过大

减小文件大小或聚合数据

直接 API 访问

MCP 服务器封装了 Simba REST API。对于脚本、CI/CD 或无 MCP 的环境,你可以直接调用该 API。

何时使用 MCP 与直接 API

MCP(通过 AI 助手)

直接 API(curl / Python)

最适合

探索性分析、对话式工作流

自动化流水线、定时任务、脚本

异步轮询

助手自动处理

你自行实现轮询直到完成的逻辑

数据清洗

助手清洗 NaN/null 并构建载荷

你编写数据预处理代码

可复现性

对话式

可脚本化、可版本控制

两者使用相同的 API 密钥和相同的作用域。

快速入门(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}")

快速入门(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"

API 密钥设置

MCP 服务器使用与 Simba REST API 相同的 API 密钥进行身份验证。创建具有所需作用域的密钥:

  1. 在 Simba UI 中转到 Profile > API Keys

  2. 点击 Create Key

  3. 设置作用域:ingestread:modelsread:resultscreate:modelsoptimizescenario

  4. 复制密钥(仅显示一次)

密钥的提供方式取决于服务器的运行位置:

  • 本地(stdio — Cursor、Claude Code): 在 MCP 配置中将其设置为 SIMBA_API_KEY 环境变量(如上面的示例所示)。

  • 托管(https://demo.simba-mmm.com/mcp): 将其作为 HTTP Authorization: Bearer 标头发送——即 Claude MCP 连接器配置中的 authorization_token 字段。每个调用者使用自己的密钥(v0.2.2+): 服务器绝不在调用者之间共享身份,没有密钥的请求会收到带有指引的结构化 401 响应, 并且你只能看到自己账户的模型。

配置

环境变量

描述

默认值

SIMBA_API_URL

Simba API 基础 URL

http://localhost:5005

SIMBA_API_KEY

你的 Simba API 密钥(仅 stdio 模式——HTTP 调用者以 bearer 令牌形式发送自己的密钥)

(stdio 模式必需)

传输模式

服务器支持所有 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

许可证

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