Supabase MCP server は、エージェントにデータベースへの鍵を渡します。テーブルの一覧表示、SQL の実行、マイグレーションの適用、Edge Functions のデプロイ、ブランチの作成が可能です。そのため、Supabase 上で開発する人にとって最も有用な MCP server の一つであり、エージェントが攻撃者の書き込んだデータを読んだときに何が起きるかについて、実際の公開された教訓を持つ数少ない MCP server でもあります。
私たちは 2026 年 11 月 14 日に Supabase のドキュメントと server のソースを読み、前日にリリースされたパッケージのバージョン 0.17.0 を MCP Inspector で実行して、各設定が実際に何を公開するかを数えました。ホストされたエンドポイントも調査しました。実際のプロジェクトには接続していません。
ホスト型、ローカル、自前スタック
| ホスト型 | npm パッケージ | Supabase CLI | セルフホスト | |
|---|---|---|---|---|
| 場所 | https://mcp.supabase.com/mcp |
npx -y @supabase/mcp-server-supabase |
http://localhost:54321/mcp |
SSH トンネル経由の http://localhost:8080/mcp |
| サインイン | OAuth、トークン不要 | パーソナルアクセストークン | なし | なし |
| ツール | 全ツール | ホスト型接続が必要な一部を除く全ツール | より小さいサブセット | より小さいサブセット |
| 用途 | ほとんどの作業 | HTTP 非対応のクライアント、CI | ローカル開発 | 自前の Supabase デプロイ |
ホスト型サーバーが既定の推奨であり、マシン上に何も必要としません。認証なしのリクエストを送ると、OAuth メタデータを指す 401 が返りました。そのメタデータには、認可サーバーとして Supabase の API が、スコープとして organizations:read から database:write までが記載されています。ブラウザでのサインインはクライアントが処理します。同意画面では、プロジェクトを所有する組織を選択してください。
現在の OAuth の制約が 1 つあります。同意すると全スコープが付与されます。Supabase のローンチ記事では、より細かい権限を計画中と述べていました。現在のドキュメントでも、手動の OAuth アプリでは全スコープが必須とされています。パーソナルアクセストークンならより狭い権限にでき、Supabase のドキュメントには各ツールに必要な権限が記載されています。
インストール
すべてのクライアントで同じ URL を使用します。スコープを絞るには、以下で説明するオプションを追加してください。
Claude Code:
claude mcp add --scope project --transport http supabase "https://mcp.supabase.com/mcp?project_ref=YOUR_REF&read_only=true"
その後、通常のターミナルで claude /mcp を実行し、supabase を選択して Authenticate を選びます。
Cursor の場合、.cursor/mcp.json に記述します:
{
"mcpServers": {
"supabase": {
"url": "https://mcp.supabase.com/mcp?project_ref=YOUR_REF&read_only=true"
}
}
}
VS Code の場合、.vscode/mcp.json に記述します(servers を使用します):
{
"servers": {
"supabase": {
"type": "http",
"url": "https://mcp.supabase.com/mcp?project_ref=YOUR_REF&read_only=true"
}
}
}
Codex:
codex mcp add supabase --url "https://mcp.supabase.com/mcp?project_ref=YOUR_REF&read_only=true"
続いて codex mcp login supabase を実行します。Claude.ai と ChatGPT のコネクタディレクトリには Supabase が含まれています。Supabase のドキュメントには Claude Desktop や Windsurf 向けの個別の手順は記載されていません。README では、一覧にないクライアントには汎用の HTTP エントリをコピーすることを推奨しています。
ダッシュボードで URL を生成することもできます。プロジェクトを開き、Connect をクリックして MCP タブを選択してください。ローカルパッケージは次のように実行します。トークンは SUPABASE_ACCESS_TOKEN に設定します:
npx -y @supabase/mcp-server-supabase@latest --read-only --project-ref=YOUR_REF
トークンがない場合は、「Please provide a personal access token (PAT) with the --access-token flag or set the SUPABASE_ACCESS_TOKEN environment variable」というメッセージを出して終了します。
オプションが取り除くもの
3つのURLパラメータ、またはローカルパッケージ用の対応するフラグによって、エージェントが受け取るものが決まります。
| ホストURLパラメータ | ローカルフラグ | 効果 |
|---|---|---|
read_only=true |
--read-only |
クエリは読み取り専用のPostgresユーザーとして実行され、書き込みツールは非表示になる |
project_ref=abc123 |
--project-ref=abc123 |
1つのプロジェクトのみ。アカウントツールは非表示になる |
features=database,docs |
--features=database,docs |
これらのツールグループのみ |
0.17.0で各設定のツール数を数えました。
| 設定 | ツール数 |
|---|---|
| 10グループすべて | 39 |
| デフォルト(storageオフ) | 36 |
| デフォルト + 読み取り専用 | 22 |
| 読み取り専用 + 1プロジェクトに限定 | 16 |
読み取り専用では14のツールが削除されました: create_project、pause_project、restore_project、apply_migration、deploy_edge_function、5つのブランチ書き込み、create_notebook、delete_notebook、そして2つのフィードバックツールです。execute_sqlは残りますが、クエリが読み取り専用ロールとして実行されるため、データベース自体が書き込みを拒否します。これはSQLテキストのフィルタよりも強力です。
グループは次のとおりで、storage以外はすべてデフォルトで有効です。
| グループ | ツール |
|---|---|
docs |
search_docs |
account |
組織とプロジェクトの一覧取得・取得、get_cost、confirm_cost、プロジェクトの作成・一時停止・復元 |
database |
list_tables、list_extensions、list_migrations、execute_sql、apply_migration |
debugging |
query_logs、セキュリティとパフォーマンスの助言を行うget_advisors |
development |
get_project_url、get_publishable_keys、generate_typescript_types |
functions |
Edge Functionsの一覧取得・取得・デプロイ、ホストサーバーでのシークレット設定 |
branching |
有料プランでのブランチの一覧取得・作成・削除・マージ・リセット・リベース |
storage |
バケットの一覧取得、storage設定の読み取りと更新 |
notebooks |
SQLノートブックの一覧取得・取得・実行・作成・削除 |
feedback |
Supabaseへのフィードバック送信 |
古いガイドにはget_logsの記載がありますが、0.17.0ではquery_logsです。グループを外すのは最も手軽な安全策です。functionsがなければ、デプロイツールがモデルに届くことは一切ありません。
2025年7月に起きたこと
2025年7月6日、Simon Willison は General Analysis によるデモを「Supabase MCP can leak your entire SQL database」という見出しで記事にしました。題材はサポートアプリでした。開発者の Cursor エージェントが、行レベルセキュリティをバイパスする service_role キーを使って Supabase MCP を利用していました。攻撃者が公開フォームからサポートチケットを送信し、そのチケット本文で AI に直接語りかけて、非公開の integration_tokens テーブルを読み取り、その内容をチケットに書き戻すよう指示しました。開発者がエージェントに未対応チケットを確認するよう依頼すると、エージェントはまさにその通りに実行しました。
Willison はこれを「lethal trifecta(致命的な三要素)」と呼びました。非公開データ、攻撃者が制御するテキストへの露出、そしてデータを外部に送り出す経路、そのすべてが1つのエージェントに揃っていたのです。
Supabase は2025年9月に回答しました。見出しはリスクを誇張しており、デモはローカル環境で特権ロールを使ったもので、MCP 経由の漏えいを報告した顧客はいないと述べました。また、自社の緩和策は「リスクを減らしたが、排除はしていない」、「ガードレールだけでは不十分だ」とも述べています。これらの緩和策が、上記のオプション、すなわち読み取り専用モード、プロジェクトスコープ、機能グループです。さらにサーバーは、すべての SQL 結果をランダム ID と、その内部の指示に従わないようモデルに伝える注記でマークした境界でラップしています。Supabase はこのラッパーを「万全ではない」と表現しています。
読み取り専用モードについては正確に理解しておく価値があります。デモにおいて、それは最後の段階、つまり盗んだデータをチケットに書き戻すことを防いだはずです。しかし、エージェントが非公開テーブルを読み取り、それを開発者に繰り返したり、エージェントが到達できる他のツールに渡したりすることを防いだわけではありません。
安全なセットアップの手順
- 可能なら本番環境は避ける。 Supabase の現行の記述では、本番環境への接続は「タスクが本番環境の証拠を必要とする場合に限る」とされています。開発プロジェクトまたはブランチをデフォルトにするのが適切です。
- スコープを限定する。
project_refを指定すると、エージェントは 1 つのプロジェクト内に留まります。 - デフォルトは読み取り専用。 書き込みが必要なセッションでのみ有効にします。
- グループは少なめに。
features=database,docsでスキーマとクエリに関する作業のほとんどをカバーできます。 - 承認はオンのままにする。 Supabase のドキュメントでは各ツール呼び出しを確認するよう求めており、このサーバーでは「常に承認」を使用しないでください。破壊的な SQL の確認フォームは対応するクライアントでのみ表示され、Supabase はこれを「ガードレールであり、保証ではない」と述べています。
- 顧客には決して渡さない。 あなたの開発者権限で実行されます。
無人ジョブについては、Supabase は読み取り専用かつプロジェクトスコープのツールのみを事前承認し、書き込みは行わずにジョブを停止して報告するよう助言しています。この問題全般については MCP セキュリティ で詳しく説明しています。
スキルとプラグイン
Supabase は MCP server とは別に、Supabase と Postgres のベストプラクティスを案内する agent skills も公開しています。npx skills add supabase/agent-skills で追加できるほか、Claude Code ではプラグインの marketplace からも利用できます。skills リポジトリ自体の MCP エントリは https://mcp.supabase.com/mcp?features=docs を指しており、docs のみでデータベースへのアクセスはありません。正確な Supabase の回答だけが目的なら、これは妥当なデフォルトです。
動作しない場合
| 表示される内容 | 原因 | 対処 |
|---|---|---|
| ホスト型サーバーから 401 が返る | サインインしていない | クライアントの認証ステップを実行します。例えば claude /mcp です |
| 「Please provide a personal access token」と表示される | トークンなしでローカルパッケージを使用している | SUPABASE_ACCESS_TOKEN を設定するか、--access-token を渡します |
| チュートリアルのツールが見つからない | 読み取り専用、機能グループの不足、またはツール名の変更 | 上記の表を確認してください。get_logs は現在 query_logs です |
| エージェントから他のプロジェクトが見えない | project_ref が設定されている |
意図された動作です。アカウントツールが必要な場合にのみ削除してください |
| 書き込みが権限エラーで失敗する | read_only=true |
意図された動作です。書き込みセッションにはスコープ外の別エントリを使用してください |
| ストレージツールがない | ストレージはデフォルトで無効 | features に storage を追加してください |
localhost:54321 でツールが少ない |
CLI がサブセットのみを公開している | 全ツールセットが必要な場合はホスト型サーバーを使用してください |
当カタログに掲載されている Supabase サーバーとそのチェックスコアは、このページの上部に一覧されています。通常の Postgres データベースについては、Postgres MCP servers を参照してください。