Simba MCP Server
OfficialSimba MCP 服务器
Simba 是一个贝叶斯营销组合建模(MMM)平台。这个营销组合建模 MCP 服务器 让 AI 助手可以直接与你的模型交互——在 Claude、Cursor 或 Claude Code 中通过自然语言上传数据、构建模型、查看结果并运行预算优化。
安装
pip install simba-mcp或者不安装直接运行:
uvx simba-mcpRelated 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"],
)可用工具
工具 | 描述 |
| 获取 MMM 输入文件的规范 CSV 模式 |
| 将 CSV 数据集上传到 Simba |
| 列出之前上传的数据集 |
| 单个上传的详细信息,包括其列模式 |
| 列出所有模型及其状态 |
| 配置并开始拟合新的 MMM 模型 |
| 模型元数据 + 配置回显——适用于任何状态,包括失败 |
| 永久删除 FAILED 模型(其他任何状态返回 409) |
| 重命名模型而不保存它 |
| 将模型归档到项目中(使其在默认的 |
| 释放已保存模型的槽位( |
| 列出你可以归档模型的项目(模型文件夹) |
| 创建命名项目,可选团队共享 |
| 重命名你拥有的项目 |
| 轮询模型的拟合进度 |
| 获取结果(ROI、贡献、响应曲线、诊断等) |
| 拟合长期(VAR)模型 |
| 将 VAR 模型附加/分离到 MMM 以用于 |
| 持久化/读取贡献视图的驱动因素分组 |
| 对已完成的模型运行预算优化 |
| 获取优化器状态和结果(最新,或特定的 |
| 为情景规划生成前瞻期模板 |
| 运行"假设"情景预测 |
| 获取情景结果(最新,或特定的 |
| 列出模型保存的优化器/情景运行历史 |
| 重命名/注释已保存的运行(备注、标签) |
| 固定/取消固定已保存的运行 |
示例提示词
在任何已连接的 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)中:
技能 | 涵盖内容 |
上传 → 创建 → 轮询 → 正确读取结果(部分语义、渠道命名、归因/重叠规则、上下文大小控制) | |
优化器负载约定、收入与利润、按 run_id 轮询、决策列与比较列语义、运行整理 | |
先验覆盖负载:智能默认合并、严格拒绝、半饱和/半边际/半衰期锚定系列 | |
长期(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_model 的 channels[].name。键可以包含空格,匹配区分大小写和空格——优化器和情景工具将它们用作字典键。
始终先调用 get_model_results 并传入 sections="channel_summary" 以查看确切的渠道键,然后在优化器/情景负载中原样使用它们。
结果部分
get_model_results 提供以下部分(通过 sections= 只请求你需要的部分):
channel_summary、contributions(KPI/单位空间——不应用乘数)、coefficients(每周期每渠道收入表)、params、decay_curves、response_curves、marginal_curves、saturation、mroi_summary(当前支出下的边际 ROI,含 94% HDI;#591 之后的拟合添加了 allperiods_unweighted / spendweighted_active 约定标量,#629 之后的拟合在每个 *_median 旁边添加了 *_mean——显示的是中位数,与边际收入曲线对账的是均值)、mroi_periods(仅限选择加入——每周期边际 ROI 序列;绝不在默认负载中,按名称请求)、model_stats、actual_vs_model、long_run_rollup、optimizer、predictions、posterior、financials、model_config。如果服务器比这些文档更新,响应中的 sections_available 字段是权威的。
模型通过 model_hash 标识
所有模型端点使用 create_model 和 list_models 返回的字符串 model_hash(例如 "f835671a25")。
API 密钥管理刻意不暴露
/api/v1/keys 端点(创建/列出/撤销 API 密钥)仅限会话认证,有意不提供 MCP 工具:持有一个密钥的服务器绝不能能够铸造或撤销密钥。请在 Simba UI 中管理密钥(个人资料 → API 密钥)。
优化器使用数组,而非标量
laydown_weights 和 period_cpm 必须是数组对象,每个数组恰好有 num_periods 个元素:
// Wrong
"period_cpm": {"TV": 10}
// Correct
"period_cpm": {"TV": [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]}相同的渠道键必须出现在 bounds、laydown_weights 和 period_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 并需要轮询:
操作 | 开始 | 轮询 |
拟合模型 |
|
|
优化 |
|
|
情景 |
|
|
每 5-10 秒轮询一次。检查 status 字段是否为 "complete" 或 "failed"。
数据上传要求
仅限 CSV(不支持 Excel)。最大 10 MB(API 强制)。
行数下限:查看
get_data_schema→x-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 |
| 没有 API 密钥或密钥已过期 | 检查 |
| 密钥缺少所需的作用域 | 创建包含所有作用域的密钥 |
| 载荷缺少必需的键 | 检查工具的参数列表 |
| 模型仍在拟合或已失败 | 轮询 |
| 使用了标量而非数组,或长度错误 | 使用与 |
| CPM 为零或负数 | 所有 CPM 值必须大于 0 |
| 渠道名称不匹配 | bounds、laydown_weights 和 period_cpm 中的键必须一致 |
| 列名拼写错误 | 检查 CSV 表头是否完全匹配 |
| 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 密钥进行身份验证。创建具有所需作用域的密钥:
在 Simba UI 中转到 Profile > API Keys
点击 Create Key
设置作用域:
ingest、read:models、read:results、create:models、optimize、scenario复制密钥(仅显示一次)
密钥的提供方式取决于服务器的运行位置:
本地(stdio — Cursor、Claude Code): 在 MCP 配置中将其设置为
SIMBA_API_KEY环境变量(如上面的示例所示)。托管(
https://demo.simba-mmm.com/mcp): 将其作为 HTTPAuthorization: Bearer标头发送——即 Claude MCP 连接器配置中的authorization_token字段。每个调用者使用自己的密钥(v0.2.2+): 服务器绝不在调用者之间共享身份,没有密钥的请求会收到带有指引的结构化 401 响应, 并且你只能看到自己账户的模型。
配置
环境变量 | 描述 | 默认值 |
| Simba API 基础 URL |
|
| 你的 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
Maintenance
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
- -licenseNot gradedqualityBmaintenanceConnects AI assistants to marketing mix models, enabling natural language data upload, performance modeling, budget optimization, and scenario testing.
- AlicenseAqualityBmaintenanceEnables AI assistants to manage Meta Ads (Facebook, Instagram) end-to-end through natural conversation, including launching campaigns, uploading creatives, updating budgets, and analyzing performance.42Business Source 1.1
- AlicenseNot gradedqualityAmaintenanceEnables 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.83MIT
- FlicenseNot gradedqualityCmaintenanceEnables marketing optimization tasks such as copywriting, campaign analysis, social media planning, audience segmentation, and KPI tracking through natural language.113
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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