mcpField
M
Metabase MCP (headless)

Metabase MCP (headless)

ローカル
serdnaley.github.ioデータ・分析01 日前に更新

Metabase MCP (headless) について

Metabase MCP (headless) は、API キーまたはメールアドレスとパスワードで、AI エージェント、アプリ、ジョブから Metabase に接続するサーバーです。クエリ、コンテンツ管理、管理操作のツールセットを選択でき、ローカルの stdio とベアラートークン保護の HTTP に対応します。

主な機能

  1. 01Metabase の各領域を扱う 178 個のツール
  2. 02ツールセット選択と個別ツールの有効・無効化
  3. 03stdio とベアラー認証付き HTTP モード
  4. 04読み取り専用モードとツールの安全性注釈
  5. 05簡潔で上限付き、ページ分割対応のクエリ結果
  6. 06一般的なワークフロー向けリソースとプロンプト

活用シーン

  1. 01テーブルの探索と分析データのクエリ
  2. 02ダッシュボードやカードの作成・整理
  3. 03CI での Metabase 管理の自動化
  4. 04HTTP 経由で選択した Metabase ツールを提供

MCP 対応

MCP サーバーとして、Metabase のツール、リソース、プロンプトを提供します。MCP クライアントは stdio または Streamable HTTP で接続でき、サーバーは API キーまたはメールアドレスとパスワードで Metabase に認証します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"serdnaley-metabase": {
"command": "npx",
"args": [
"-y",
"@serdnaley/metabase-mcp"
],
"env": {
"METABASE_URL": "<METABASE_URL>",
"METABASE_API_KEY": "<METABASE_API_KEY>",
"METABASE_EMAIL": "<METABASE_EMAIL>",
"METABASE_PASSWORD": "<METABASE_PASSWORD>",
"METABASE_READ_ONLY_MODE": "<METABASE_READ_ONLY_MODE>",
"METABASE_TOOLSETS": "<METABASE_TOOLSETS>",
"METABASE_TOOLS_ENABLE": "<METABASE_TOOLS_ENABLE>",
"METABASE_TOOLS_DISABLE": "<METABASE_TOOLS_DISABLE>",
"METABASE_CUSTOM_HEADERS": "<METABASE_CUSTOM_HEADERS>"
}
}
}
}
起動コマンドnpx -y @serdnaley/metabase-mcp
設定が必要な環境変数
METABASE_URLMetabase base URL, e.g. https://metabase.example.com
METABASE_API_KEYシークレットMetabase API key (or set METABASE_EMAIL + METABASE_PASSWORD)
METABASE_EMAILLogin email (alternative to an API key)
METABASE_PASSWORDシークレットLogin password (alternative to an API key)
METABASE_READ_ONLY_MODEtrue hides all write tools
METABASE_TOOLSETSComma list of toolsets or presets (all, query, content, admin)
METABASE_TOOLS_ENABLEExtra tools to enable (names or globs)
METABASE_TOOLS_DISABLETools to disable (names or globs); always wins
METABASE_CUSTOM_HEADERSシークレットExtra headers for every Metabase request (e.g. Cloudflare Access)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@serdnaley/metabase-mcp0.4.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

@serdnaley/metabase-mcp

npm version License: MIT Tests Metabase MCP Glama score

Metabase 向けのヘッドレス MCP サーバーです。 シンプルな API キーだけで、Metabase をあらゆる AI エージェント、アプリ、CI ジョブ、サーバーに接続できます。OAuth フローもブラウザーも、切り替えが必要な管理者設定もありません。

  • ヘッドレス認証。 必要なのは Metabase API キー(またはメールアドレスとパスワード)だけです。インタラクティブな OAuth ログインが使えないサーバー、CI、コンテナー、独自のアプリやエージェントでも動作します。Metabase に組み込まれた MCP は OAuth のみと説明されており、0.60 以降では管理者による有効化が必要です。
  • ローカルでもサービスとしても実行可能。 デスクトップクライアント向けの stdio、または共有環境やサーバーへのデプロイ向けのベアラートークン認証付き Streamable HTTP に対応しています。Metabase の認証情報はサーバー上に保持されます。
  • 幅広い機能を網羅。 Metabase のクエリと操作に対応する 178 個のツールを備えています。ダッシュボード、質問、コレクション、ユーザー、グループ、権限、データベース、設定、アラート、トランスフォーム、エクスポートなどを扱えます。
  • 必要なツールだけを利用可能。 ツールセットとツールごとの有効化・無効化により、モデルのコンテキストを小さく保てます。すべてのツールに読み取り専用/破壊的操作のヒントが付いているため、クライアントは読み取りを自動承認できます。
  • あらゆる Metabase に対応。 Metabase OSS(無料版)と有料エディションで動作し、0.59 と 0.64 でテスト済みです。キャッシュ、モデルの永続化、モデレーションなどの有料限定機能は、インスタンスで利用可能な場合に動作します。CI では無料版を対象にテストしています。

Metabase 組み込みの MCP やその他の Metabase MCP サーバーとの比較については、docs/comparison.md をご覧ください。ツールの全カタログは serdnaley.github.io/metabase-mcp にあります。

機能

  • 178 個の MCP ツール、33 個のツールセットに対応:検索、データベース、テーブル、コレクション、カード、ダッシュボード、アクション、データセット、ユーザー、グループ、権限、セグメント、リビジョン、設定、アラート、サブスクリプション、用語集、ドキュメント、タイムライン、ブックマーク、モデレーション、スニペット、X線分析、キャッシュ、永続化、アップロード、メトリクス、測定値、トランスフォーム、エクスポート、API キー、埋め込み、タスクとログ
  • ツールセット:必要なものだけを読み込み(METABASE_TOOLSETS=query)、グロブを使って個別のツールを追加または除外できます
  • ツールの注釈:すべてのツールに readOnlyHint / destructiveHint / idempotentHint を付与
  • stdio または HTTP:共有環境へのデプロイ向けに、ベアラー認証付き Streamable HTTP に対応
  • 読み取り専用モード:環境変数を 1 つ設定するだけで、すべての書き込みツールを非表示にできます
  • 大規模な結果への安全対策:クエリ結果の簡潔化、行数とレスポンスサイズの上限、ページング
  • リソースとプロンプト:データベース、カード、ダッシュボード、コレクションを閲覧できます。すぐに使えるワークフローも用意しています
  • 管理作業の自動化:ユーザー、グループ、権限、設定、データベース接続、トランスフォーム
  • 型安全:Metabase の OpenAPI 仕様から生成した HTTP クライアント
  • 設定不要:npx で実行でき、インストールは不要です

インストール

Claude Desktop(ワンクリックバンドル)

最新リリースからmetabase-mcp-X.Y.Z.mcpbをダウンロードして開くと、Claude DesktopにMetabaseのURLとAPIキーを入力するフォームが表示されます。Node.jsのセットアップやJSONの編集は不要です。

Claude Desktop(JSON設定)

~/Library/Application Support/Claude/claude_desktop_config.json(macOS)または%APPDATA%\Claude\claude_desktop_config.json(Windows)を編集します。

{
  "mcpServers": {
    "metabase": {
      "command": "npx",
      "args": ["-y", "@serdnaley/metabase-mcp"],
      "env": {
        "METABASE_URL": "https://your-metabase.example.com",
        "METABASE_API_KEY": "mb_xxx"
      }
    }
  }
}

保存後、Claude Desktopを再起動してください。

Claude Code(CLI)
claude mcp add metabase \
  --env METABASE_URL=https://your-metabase.example.com \
  --env METABASE_API_KEY=mb_xxx \
  -- npx -y @serdnaley/metabase-mcp

または、.claude/mcp.jsonに追加します。

{
  "mcpServers": {
    "metabase": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@serdnaley/metabase-mcp"],
      "env": {
        "METABASE_URL": "https://your-metabase.example.com",
        "METABASE_API_KEY": "mb_xxx"
      }
    }
  }
}
Cursor

~/.cursor/mcp.json(グローバル)または.cursor/mcp.json(プロジェクト)に追加します。

{
  "mcpServers": {
    "metabase": {
      "command": "npx",
      "args": ["-y", "@serdnaley/metabase-mcp"],
      "env": {
        "METABASE_URL": "https://your-metabase.example.com",
        "METABASE_API_KEY": "mb_xxx"
      }
    }
  }
}

保存後、Cursorを再起動してください。

Windsurf

~/.codeium/windsurf/mcp_config.jsonに追加します。

{
  "mcpServers": {
    "metabase": {
      "command": "npx",
      "args": ["-y", "@serdnaley/metabase-mcp"],
      "env": {
        "METABASE_URL": "https://your-metabase.example.com",
        "METABASE_API_KEY": "mb_xxx"
      }
    }
  }
}
Cline(VS Code)

ClineのMCP設定(MCP Serversアイコンからアクセスできます)に追加します。

{
  "mcpServers": {
    "metabase": {
      "command": "npx",
      "args": ["-y", "@serdnaley/metabase-mcp"],
      "env": {
        "METABASE_URL": "https://your-metabase.example.com",
        "METABASE_API_KEY": "mb_xxx"
      }
    }
  }
}
Continue(VS Code)

.continue/config.yamlに追加します。

mcpServers:
  - name: metabase
    command: npx
    args:
      - "-y"
      - "@serdnaley/metabase-mcp"
    env:
      METABASE_URL: "https://your-metabase.example.com"
      METABASE_API_KEY: "mb_xxx"
Zed

Zedのsettings.jsonに追加します。

{
  "context_servers": {
    "metabase": {
      "command": "npx",
      "args": ["-y", "@serdnaley/metabase-mcp"],
      "env": {
        "METABASE_URL": "https://your-metabase.example.com",
        "METABASE_API_KEY": "mb_xxx"
      }
    }
  }
}
リモート/HTTP(Streamable HTTPに対応するすべてのクライアント)

まずHTTPモードでサーバーを起動し(HTTPモードを参照)、そのサーバーをクライアントに指定します。Claude Codeの場合:

claude mcp add --transport http metabase https://mcp.example.com/mcp \
  --header "Authorization: Bearer $MCP_HTTP_TOKEN"

汎用JSON設定(Cursor、VS Codeなど):

{
  "mcpServers": {
    "metabase": {
      "url": "https://mcp.example.com/mcp",
      "headers": { "Authorization": "Bearer <MCP_HTTP_TOKEN>" }
    }
  }
}

設定

変数必須説明
METABASE_URLはいMetabaseインスタンスのベースURL
METABASE_API_KEYいいえ*認証用APIキー
METABASE_EMAILいいえ*セッションベース認証用のメールアドレス
METABASE_PASSWORDいいえ*セッションベース認証用のパスワード
METABASE_READ_ONLY_MODEいいえtrueに設定すると書き込みツールを無効にします
METABASE_CUSTOM_HEADERSいいえセッションログインを含む、すべてのリクエストで送信する追加のHTTPヘッダー(下記参照)
METABASE_TOOLSETSいいえ読み込むツールセットまたはプリセットのカンマ区切りリスト(デフォルト:すべて)。ツールセットを参照
METABASE_TOOLS_ENABLEいいえツールセットに加えて読み込むツール(名前またはグロブ。例:get_card,export_*)
METABASE_TOOLS_DISABLEいいえ読み込まないツール(名前またはグロブ)。有効化設定より常に優先されます
METABASE_MAX_ROWSいいえクエリツールの行数上限(デフォルトは500)。大きな結果を参照
METABASE_MAX_RESPONSE_CHARSいいえすべてのツール応答のサイズ上限(デフォルトは100000)
MCP_TRANSPORTいいえstdio(デフォルト)またはhttp。コマンドラインで--httpを指定した場合も同じです
MCP_HTTP_HOST / MCP_HTTP_PORTいいえHTTPのバインドアドレス。デフォルトは127.0.0.1:3333(PORTも使用できます)
MCP_HTTP_TOKENHTTPモードクライアントが送信する必要のあるベアラートークン(16文字以上)
MCP_HTTP_ALLOW_NO_AUTHいいえtrueにすると、ループバックホストでのみトークンなしのHTTPを実行します

*METABASE_API_KEY、またはMETABASE_EMAILとMETABASE_PASSWORDの両方を指定する必要があります。APIキーの使用を推奨します。

カスタムヘッダー

MetabaseがCloudflare Accessのサービストークンなど、独自のヘッダーを必要とするプロキシの背後にある場合は、METABASE_CUSTOM_HEADERSを使用します。JSONオブジェクトを指定します。

METABASE_CUSTOM_HEADERS='{"CF-Access-Client-Id": "xxx.access", "CF-Access-Client-Secret": "yyy"}'

または、改行または;で区切ったName: value形式のペアを指定します。

METABASE_CUSTOM_HEADERS='CF-Access-Client-Id: xxx.access; CF-Access-Client-Secret: yyy'

認証ヘッダー(X-API-Key、X-Metabase-Session)は、同じ名前のカスタムヘッダーより常に優先されます。不正な値が指定されている場合、サーバーは起動時に停止します。

ツールセット

各ツールのドメインはツールセット(dashboards、users、transforms などです。全リストはツールを参照してください)です。プリセットでまとめて選択できます。

プリセット対象
allすべて(デフォルト)
queryデータの探索とクエリ:検索、データベース、テーブル、データセット、カード、メトリクス、メジャー、セグメント、エクスポート、アクティビティ、X線分析
contentコンテンツの作成と整理:コレクション、カード、ダッシュボード、ドキュメント、スニペット、タイムライン、アラートなど
adminインスタンスの運用:ユーザー、権限、設定、データベース、テーブル、キャッシュ、アップロード、変換、アクションなど
METABASE_TOOLSETS=query,dashboards      # analyst assistant
METABASE_TOOLS_ENABLE=create_card       # plus one write tool
METABASE_TOOLS_DISABLE='delete_*'       # never delete anything

優先順位は、強い順に 読み取り専用モード > METABASE_TOOLS_DISABLE > METABASE_TOOLS_ENABLE > METABASE_TOOLSETS です。不明なツールセットがあると、起動時にサーバーが停止します。有効化/無効化パターンに一致するものがない場合は、警告がログに記録されます。起動ログ(stderr)には、有効なツールの数が表示されます。

大きな結果

クエリツール(execute_query、execute_card_query、run_metric)は、コンパクトな表示を返します。これにはcolumns(名前、型)とrowsが含まれ、Metabaseの列内部情報、results_metadata、インサイトは含まれません。生のレスポンスを取得するには、verbose: trueを指定してください。結果はMETABASE_MAX_ROWS行に制限され(呼び出しごとにmax_rowsを指定できますが、上限を超えることはできません)、offsetでページ分割されます。残りの結果を取得する方法はnoteに記載されます。各ツールのレスポンスはコンパクトなJSONで、METABASE_MAX_RESPONSE_CHARS文字に制限されます。SELECT * FROM ORDERSの10/100/500行の結果では、未整形のレスポンスと比べて94%/76%/60%小さくなります。結果セット全体を取得するには、output_pathを指定してエクスポートツールを使用してください。

リソースとプロンプト

ツールに加えて、サーバーは閲覧用のMCP リソース(コンパクトなJSON)として、metabase://databases、metabase://database/{id}/schema、metabase://card/{id}、metabase://dashboard/{id}、metabase://collection/{id}(ルートコレクションの場合はroot)を提供します。また、一般的なワークフロー用のプロンプトとして、explore-database、build-dashboard、explain-card、audit-permissionsを提供します。どちらもツールの選択設定に従います。リソースには対応するツールセットが必要で、プロンプトには使用するすべてのツールが必要です(そのため、読み取り専用モードではbuild-dashboardは表示されません)。

HTTP モード(共有/サーバーへのデプロイ)
METABASE_URL=https://metabase.example.com \
METABASE_API_KEY=mb_xxx \
MCP_TRANSPORT=http MCP_HTTP_HOST=0.0.0.0 MCP_HTTP_PORT=3333 \
MCP_HTTP_TOKEN="$(openssl rand -hex 32)" \
npx -y @serdnaley/metabase-mcp

クライアントはAuthorization: Bearer <MCP_HTTP_TOKEN>を指定してhttp://<host>:3333/mcpに接続します。GET /healthは認証なしで応答し、情報は開示しません。このエンドポイントはステートレス(セッションなし)なので、水平方向にスケールできます。localhost以外で使用する場合は、TLS(リバースプロキシ)経由にしてください。トークンを持つ全員がMetabase APIキーのユーザーとして動作するため、対象者ごとに専用のキー、トークン、ツールセットを用意してください。

または、コンテナとして実行できます(ghcr.io/serdnaley/metabase-mcp、amd64 + arm64、デフォルトでHTTPモード):

docker run -p 3333:3333 \
  -e METABASE_URL=https://metabase.example.com -e METABASE_API_KEY=mb_xxx \
  -e MCP_HTTP_TOKEN="$(openssl rand -hex 32)" \
  ghcr.io/serdnaley/metabase-mcp
Metabase API キーの取得
  1. Metabaseインスタンスに移動します
  2. 歯車アイコン > 管理者設定 > 認証 > APIキーをクリックします
  3. 「APIキーを作成」をクリックします
  4. 名前を付け、適切なグループ(例:管理者)を選択します
  5. キーをコピーします。キーはmb_で始まります

使用例

「注文の傾向を示すダッシュボードを作成する」

AI アシスタントは次の操作を行います:

  1. searchとget_database_metadataを使用してデータを確認します
  2. create_cardを使用して質問を作成します(例:月別の注文数、製品別の売上)
  3. create_dashboardを使用してダッシュボードを作成します
  4. update_dashboard_cardsを使用して、レイアウトに合わせてカードを配置します
「第4四半期のレポートをすべてArchiveコレクションに移動する」

AI アシスタントは次の操作を行います:

  1. searchを使用して第4四半期のレポートカードを探します
  2. 必要に応じてcreate_collectionを使用してArchiveコレクションを作成します
  3. 各カードでupdate_cardを使用して、新しいコレクションに移動します
「分析データベースにはどのようなテーブルがありますか?」

AI アシスタントは次の操作を行います:

  1. list_databasesを使用してデータベースを探します
  2. get_database_metadataを使用して、すべてのテーブル、フィールド、リレーションシップを一覧表示します

ツール

パラメーターを含む完全なカタログは、ツールカタログサイトを参照してください(コードから生成されています)。

Read tools (79, always available)
ToolsetTools
Search (search)search
Databases (databases)list_databases, get_database, get_database_metadata, list_database_schemas, get_database_schema
Tables & Fields (tables)get_table, get_table_query_metadata, get_field, get_field_values
Collections (collections)get_collection_tree, list_collections, get_collection, list_collection_items
Cards (cards)list_cards, get_card, execute_card_query
Dashboards (dashboards)list_dashboards, get_dashboard
Actions (actions)list_actions, get_action
Dataset (ad-hoc queries) (dataset)execute_query
Users & Groups (users)list_users, get_user, get_current_user, list_groups, get_group
Permissions (permissions)get_permissions_graph, get_collection_permissions
Segments (segments)list_segments, get_segment
Revisions (revisions)list_revisions
Settings (settings)list_settings, get_setting
Alerts & Subscriptions (notifications)list_alerts, get_alert, list_dashboard_subscriptions, list_notifications
X-Rays (xrays)generate_xray
Activity & Tasks (activity)get_activity, get_recent_items, get_popular_items
Snippets (snippets)list_snippets, get_snippet
Glossary (glossary)list_glossary_terms, get_glossary_term
Documents (documents)list_documents, get_document
Timelines (timelines)list_timelines, get_timeline
Bookmarks (bookmarks)list_bookmarks
EID Translation (eid-translation)translate_entity_ids
Metrics (metrics)list_metrics, get_metric, run_metric, list_metric_dimensions, get_metric_dimension_values
Measures (measures)list_measures, get_measure
Transforms (transforms)list_transforms, get_transform, list_transform_runs, get_transform_run, list_transform_jobs, list_transform_tags
Exports (exports)export_card_query, export_query, export_dashboard_pdf
API Keys (api-keys)list_api_keys
Embedding (embedding)get_embedding_status, create_embed_url
Tasks & Logs (diagnostics)list_tasks, get_task, list_task_types, list_task_runs, get_scheduler_info, get_server_logs, list_log_presets, get_premium_token_status
書き込みツール(99 個、読み取り専用モードでは非表示)
ツールセットツール
データベース (databases)create_database, update_database, delete_database, validate_database, sync_database_schema
テーブルとフィールド (tables)update_table, update_field, rescan_field_values, discard_field_values, reorder_fields
コレクション (collections)create_collection, update_collection
カード (cards)create_card, update_card, delete_card, copy_card, create_card_public_link, delete_card_public_link
ダッシュボード (dashboards)create_dashboard, update_dashboard, delete_dashboard, copy_dashboard, update_dashboard_cards, create_dashboard_public_link, delete_dashboard_public_link
アクション (actions)create_action, update_action, delete_action, execute_action, create_action_public_link, delete_action_public_link
ユーザーとグループ (users)create_user, update_user, deactivate_user, reactivate_user, create_group, update_group, delete_group, add_group_member, remove_group_member
権限 (permissions)update_permissions_graph, update_collection_permissions
セグメント (segments)create_segment, update_segment, delete_segment
リビジョン (revisions)revert_revision
設定 (settings)update_setting
アラートとサブスクリプション (notifications)send_notification, create_alert, update_alert, delete_alert, create_dashboard_subscription, update_dashboard_subscription, delete_dashboard_subscription
キャッシュ (cache)invalidate_cache, update_cache_config
モデルの永続化 (persistence)persist_model, unpersist_model, refresh_persisted_model
アップロード (upload)upload_csv
スニペット (snippets)create_snippet, update_snippet, delete_snippet
用語集 (glossary)create_glossary_term, update_glossary_term, delete_glossary_term
ドキュメント (documents)create_document, update_document, delete_document
タイムライン (timelines)create_timeline, update_timeline, delete_timeline, create_timeline_event, update_timeline_event, delete_timeline_event
ブックマーク (bookmarks)create_bookmark, delete_bookmark
モデレーション (moderation)create_moderation_review
メトリクス (metrics)create_metric, update_metric
メジャー (measures)create_measure, update_measure
変換 (transforms)create_transform, update_transform, delete_transform, run_transform, cancel_transform_run, create_transform_job, run_transform_job, delete_transform_job, create_transform_tag
API キー (api-keys)create_api_key, update_api_key, regenerate_api_key, delete_api_key
埋め込み (embedding)set_static_embedding, set_resource_embedding
タスクとログ (diagnostics)set_log_levels, reset_log_levels

METABASE_TOOLSETS のプリセット:all(すべて);query(search、databases、tables、dataset、cards、metrics、measures、segments、exports、activity、xrays);content(search、collections、cards、dashboards、documents、snippets、timelines、bookmarks、glossary、revisions、moderation、notifications、exports);admin(users、permissions、settings、databases、tables、cache、persistence、upload、transforms、actions、activity、eid-translation、api-keys、embedding、diagnostics)。

セキュリティ

読み取り専用モードでもexecute_queryを利用できます。 設定された Metabase アカウントがアクセスできる任意のデータベースに対して、任意の SQL を実行できます。Metabase は独自の権限モデルを適用しますが、このツールが追加の制限を設けることはありません。

書き込み操作を防ぐには、Metabase 自体で、Metabase API キーまたはアカウントに読み取り専用のデータベース権限が設定されていることを確認してください。

エクスポートではローカルファイルに書き込むことができます。 export_card_query、export_query、export_dashboard_pdfは読み取り専用モードでも利用でき(Metabase から読み取るだけです)、output_pathを指定すると、MCP サーバーを実行しているマシン上のその絶対パスに書き込みます。overwrite: trueを渡さない限り、既存のファイルを上書きすることはありません。Metabase はクエリの実行時と同じアクセスチェックをエクスポートにも適用します。独立した「結果のダウンロード」権限は Pro/Enterprise でのみ利用できます。

読み取り専用モードはセキュリティ境界ではありません。 METABASE_READ_ONLY_MODEは書き込みツールを非表示にするだけです。キーが実際にできることは Metabase で決まり、API キーには、そのグループの権限に加えてすべてのユーザーの権限が適用されます。読み取り専用のアシスタントには、キーをコレクションへの閲覧のみアクセス権を持つグループに設定し、「クエリの作成」をクエリビルダーのみ(またはなし)に設定したうえで、「すべてのユーザー」の権限もそれ以上に広がらないように制限してください。調査結果とセットアップのチェックリストについては、docs/read-only-and-permissions.mdを参照してください。

HTTP モードではベアラートークンが必要です。 MCP_TRANSPORT=httpは、ループバックホスト上でMCP_HTTP_ALLOW_NO_AUTH=trueが設定されている場合を除き、MCP_HTTP_TOKENがないと起動しません。トークンは一定時間で比較され、ループバックホストでは Host ヘッダーのチェックによって DNS リバインディングがブロックされます。このトークンには、設定された Metabase キーができることすべてを実行する権限があるため、そのキーと同様に取り扱い、localhost の外部では TLS 経由でエンドポイントを公開してください。

生 SQL はワンクリックで実行されます。 読み取りツールにはexecute_queryとexport_queryを含め、readOnlyHint: trueが設定されているため、クライアントが自動承認する場合があります。⚠️ SQL はそのまま送信されます。このサーバーはINSERT/UPDATE/DELETE/DDLをブロックせず、どちらのツールの説明にもその旨が記載されています。SQL による書き込みを防ぐ必要がある場合は、ネイティブクエリを実行できないグループの Metabase API キー(または読み取り専用権限を付与されたデータベースユーザー)を使用してください。docs/read-only-and-permissions.mdを参照してください。

アクションの種類は制限されています。 create_actionツールで許可されるアクションの種類は、queryとimplicitのみです。任意の外部リクエストを行う可能性がある HTTP アクションはブロックされます。

開発

bun install
bun run dev                    # Start the MCP server
bun run build                  # Build for npm
bun run generate-types         # Regenerate types from Metabase OpenAPI spec

テスト

テストは Docker 経由で実際の Metabase インスタンスに対して実行されます。

docker compose up -d             # Start Metabase (pinned version, see docker-compose.yml)
./tests/ci/wait-for-metabase.sh  # Wait for ready (~15s)
bun test                         # 276 tests
docker compose down              # Stop Metabase

Metabase v0.64.3.4(CI で固定されているバージョン)およびv0.59.6で検証済みです。別のリリースを試すには、次を実行してください。 MB_IMAGE=metabase/metabase:latest docker compose up -d。CI では、固定バージョンを更新する前に上流 API の変更を検知できるよう、週に一度、metabase:latestでもブロッキングなしのジョブとしてテストスイートを実行します。

アクション、トランスフォーム、CSV のアップロードは、docker-compose.ymlの Postgres「Test Warehouse」に対して実行されます。有料プランまたは不足しているサービスが必要な機能(モデレーション、キャッシュの無効化、モデルの永続化、またはウェアハウス自体)は、SKIP … (environment)というログ行を出して明示的にスキップされます。それ以外の API エラーが発生した場合、テストは失敗します。

仕組み

AI Client (Claude, Cursor, etc.)
  ↓ MCP protocol (stdio)
MCP Tool (zod schema + handler)
  ↓
Service function (business logic)
  ↓
openapi-fetch (type-safe HTTP client)
  ↓
Metabase REST API

このサーバーは Metabase のOpenAPI 仕様から TypeScript 型を生成し、型安全な API 呼び出しにopenapi-fetchを使用します。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。