Skip to main content
Glama
getsimba-ai

Simba MCP Server

Official
by getsimba-ai

Simba MCP Server

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 コネクタ)

Anthropic MCP コネクタでリモートの Streamable HTTP トランスポートを使用:

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

1 つのアップロードの詳細(列スキーマを含む)を取得

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

「what-if」シナリオ予測を実行

get_scenario_results

シナリオ結果を取得(最新、または特定の run_id

list_runs

モデルの保存済みオプティマイザー/シナリオ実行履歴を一覧表示

update_run

保存済み実行の名前変更/注釈付け(メモ、タグ)

set_run_pinned

保存済み実行のピン留め/ピン留め解除

プロンプトの例

接続済みの AI アシスタントで試してみてください:

モデルを探索:

「Simba モデルを一覧表示して、最新の完了モデルのチャネル ROI サマリーを見せて。」

モデルを構築:

「この CSV データを Simba にアップロードして、TV、Search、Social をメディアチャネルとする新しい MMM モデルを作成して。KPI は 'revenue'、日付列は '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

アップロード → 作成 → ポーリング → 結果の正しい読み取り(セクションの意味、チャネル命名、アトリビューション/Overlap ルール、コンテキストサイズ制御)

simba-optimizer-runs

オプティマイザーのペイロード規約、収益と利益、run_id によるポーリング、決定列と比較列の意味、実行のキュレーション

simba-prior-conventions

事前分布オーバーライドのペイロード: スマートデフォルトのマージ、厳格な拒否、半飽和/半限界/半減期アンカーファミリー

simba-var-workflow

長期(VAR)モデリング: 作成 → ポーリング → リンク → long_run_rollup

スキルはドキュメント成果物であり、リポジトリに同梱されます。ワイヤープロトコルには含まれません。

落とし穴とヒント

AI エージェントと人間の両方がよくつまずく点:

ホスト型サーバー: ベアラートークンがそのままログイン

HTTP デプロイメントでは、各リクエストは呼び出し元自身の Authorization: Bearer simba_sk_... トークンで認証されます。サーバー側の共有キーはありません。ツール呼び出しが "No API key on this request" を返す場合、MCP クライアントがトークンを送信していません(設定の authorization_token / ヘッダー設定を確認してください)。

チャネル名は完全一致

モデル結果は、create_model に渡した channels[].name ではなく、チャネルのアクティビティ列名(例: "search_activity""TV_impressions")でキー付けされます。キーにはスペースを含めることができ、一致は大文字小文字とスペースに敏感です。オプティマイザーとシナリオツールはこれらを辞書キーとして使用します。

必ず最初に get_model_resultssections="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 ツールは設計上ありません。1 つのキーを保持するサーバーがキーを発行または失効できてはならないからです。キーの管理は 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

3 つのエンドポイントは非同期

これらは 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

  • 非アクティブ期間は空白や NA ではなく 0 を使用。

  • 大きなファイルの場合: csv_content の代わりに csv_path(ローカルファイルパス)を渡してください。サーバーが会話を介さず直接読み取ります。ローカル(stdio)サーバーのみ。HTTP/SSE デプロイメントでは SIMBA_MCP_ALLOW_LOCAL_FILES=1 が設定されていない限り無効です。

よくあるエラー

エラー

原因

修正方法

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で プロフィール > APIキー に移動

  2. キーを作成 をクリック

  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以降): サーバーは呼び出し元間でIDを共有することはなく、キーのないリクエストには ガイダンス付きの構造化された401が返され、自分のアカウントのモデルのみが表示されます。

設定

環境変数

説明

デフォルト

SIMBA_API_URL

Simba APIのベースURL

http://localhost:5005

SIMBA_API_KEY

お使いのSimba APIキー(stdioモードのみ — HTTP呼び出し元はベアラートークンとして独自のキーを送信します)

(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