/ ディレクトリ / プレイグラウンド / Supabase
● 公式 supabase-community 🔑 自分のキーが必要

Supabase

作者 supabase-community · supabase-community/supabase-mcp

公式 Supabase MCP — プロジェクト管理、SQL 実行、Edge Functions デプロイ、認証設定、ログ閲覧、すべてチャットから。

Supabase の公式 MCP です(supabase-community org で保守)。Supabase Management API とプロジェクト単位の Postgres アクセスをラップしています。エージェントがブランチ作成、マイグレーション実行、Edge Functions 記述、DB クエリ、ログ閲覧をすべてチャット内で実行できます。

なぜ使うのか

主な機能

ライブデモ

実際の動作

supabase.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "supabase": {
      "command": "npx",
      "args": [
        "-y",
        "@supabase/mcp-server-supabase"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "supabase": {
      "command": "npx",
      "args": [
        "-y",
        "@supabase/mcp-server-supabase"
      ]
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "supabase": {
      "command": "npx",
      "args": [
        "-y",
        "@supabase/mcp-server-supabase"
      ]
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "supabase": {
      "command": "npx",
      "args": [
        "-y",
        "@supabase/mcp-server-supabase"
      ]
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "supabase",
      "command": "npx",
      "args": [
        "-y",
        "@supabase/mcp-server-supabase"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "supabase": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@supabase/mcp-server-supabase"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add supabase -- npx -y @supabase/mcp-server-supabase

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: Supabase

本番環境に適用する前に、データベースブランチで破壊的マイグレーションをテストする

👤 スキーマ変更をデプロイするエンジニア ⏱ ~30 min advanced

使うタイミング: カラムをドロップまたは数百万行をバックフィルするマイグレーションがあり、実データを含むブランチで事前実行をしたい場合。

前提条件
  • Supabase Pro プラン以上 — ブランチングは有料プランでのみ利用可能です
  • 個人アクセストークン — supabase.com/dashboard/account/tokens — 組織にスコープを絞ります
フロー
  1. 本番環境からブランチを作成
    プロジェクト <ref> のメインブランチからデータベースブランチ 'test-drop-legacy-col' を作成します。準備完了を待ってください。✓ コピーしました
    → ブランチが独自の接続文字列で作成されました
  2. ブランチ上でマイグレーションを実行
    新しいブランチに以下のマイグレーションを適用します:<SQL を貼り付け>。影響を受けた行数とエラーを報告してください。✓ コピーしました
    → マイグレーション実行完了;行数が表示されました
  3. 検証して、昇格またはブランチを削除
    ブランチ上でサニティチェック用の SELECT を実行します(影響を受けたテーブルの上位 10 行、変更されたカラムの NULL カウント)。問題なければ報告してください(昇格させます);問題があればブランチを削除します。✓ コピーしました
    → 検証結果、その後明確な承認/非承認

結果: 本番環境に適用する前に、実データ構造に対してマイグレーションが検証されました。

注意点
  • ブランチは本番環境と同じデータを持たない — ブランチ作成時のスナップショットです — スナップショットのタイムスタンプを記録してください;マイグレーションが最近の行に敏感な場合、適用予定時刻に近い時点でブランチを作成してください
  • ブランチ作成はコンピュート時間をコストします — テスト後は必ずブランチを削除してください;放置されたブランチは課金が増加します
組み合わせ: github · postgres

チャットから Supabase Edge Function を記述してデプロイ

👤 小規模なバックエンドエンドポイント(webhook、署名付き URL 生成など)を追加する開発者 ⏱ ~20 min intermediate

使うタイミング: DB アクセス可能な HTTP エンドポイントが必要で、Edge Function に最適な場合。ダッシュボードにコンテキスト切り替えしたくない場合。

フロー
  1. 関数のスカフォルディング
    プロジェクト <ref> に Edge Function stripe-webhook を作成します。Stripe 署名を検証し、stripe_events テーブルに行を INSERT します。Deno 形式のインポートを使用してください。✓ コピーしました
    → 関数コードが適切な Deno 規約で記述されました
  2. デプロイ
    プロジェクト <ref> に stripe-webhook をデプロイしてください。生成された URL を表示してください。✓ コピーしました
    → デプロイ済み URL が返されました
  3. サンプルペイロードでテスト
    URL にテストペイロードを POST して、関数ログをテイルしてください。成功して行が書き込まれましたか?✓ コピーしました
    → ログに呼び出しが表示;テーブルに行が表示

結果: 5 分以内にライブエンドポイントと DB の行が作成され、動作を証明できます。

注意点
  • シークレット(STRIPE_SECRET)は自動注入されません — Supabase ダッシュボードまたは set_secrets MCP ツールで設定してください(呼び出す前に);Deno.env.get('STRIPE_SECRET') で参照します
  • Edge functions はコールドスタート;最初のリクエストは遅い — デプロイ後に 1 回呼び出してウォーミングしてから「動作確認完了」と判定してください
組み合わせ: stripe · github

Supabase プロジェクトの行レベルセキュリティポリシーを監査

👤 セキュリティを重視する開発者とレビュアー ⏱ ~25 min intermediate

使うタイミング: ローンチ前 — すべてのテーブルで RLS が有効で、ポリシーが期待通りに動作することを確認したい場合。

フロー
  1. テーブルと RLS 状態をリスト
    public スキーマのすべてのテーブルをリストしてください。それぞれについて、RLS は有効ですか?アタッチされたポリシーをリストしてください。✓ コピーしました
    → テーブルごとの RLS 状態とポリシー本体
  2. RLS がないテーブルを見つける
    RLS が OFF のテーブル、または RLS は ON だがポリシーが存在しないテーブルを強調表示してください(実質的には暗黙の拒否)。✓ コピーしました
    → 各テーブルの明確なカテゴリ分けされたリスク一覧
  3. 匿名ユーザーとしてテスト
    3 つの機密テーブルについて、匿名ユーザークエリをシミュレートしてください(anon ロールを使用)。行が返されますか?返されるべきではありません。✓ コピーしました
    → 空の結果 = 良い;行が返される = ポリシーのバグ

結果: ローンチ前の認証ポスチャー承認、テーブルごとの証拠付き。

注意点
  • 内部テーブルと思っていたテーブルで RLS が OFF — サービスロールキーは仕様上 RLS をバイパスします — クライアント側に公開しないでください。どのキーがどこで使われているかを監査してください

ユーザーがログインできない理由を調査

👤 サポートエンジニア、初期対応を行う創業者 ⏱ ~10 min beginner

使うタイミング: ユーザーが「ログインリンクが動作しない」と報告し、メールが送信されたか、どの認証イベントが発生したかを確認したい場合。

フロー
  1. ユーザーを検索
    メール '[email protected]' の認証ユーザーを検索してください。created_at、last_sign_in_at、email_confirmed_at を表示してください。✓ コピーしました
    → ユーザーレコードまたは「見つかりません」の結果
  2. 最近の認証ログをチェック
    そのユーザーID の過去 24 時間の認証ログエントリを取得してください。イベントタイプでグループ化してください。✓ コピーしました
    → 認証イベントのシーケンス(otp_sent、sign_in_failed など)
  3. 解決
    イベントに基づいて、実際の問題は何ですか?修正案を提案してください(招待を再送信、手動確認、パスワードリセット)。✓ コピーしました
    → 診断と対応計画

結果: 5 分以内に監査証跡付きの解決済みサポートチケット。

注意点
  • 個人識別情報(PII)がチャットログに流れ込む — アーカイブされるチャット履歴に生のユーザーレコードを貼り付けないでください;要約時にメールアドレスをマスクしてください

Supabase スキーマから TypeScript 型を生成

👤 `supabase-js` を使用するフロントエンド開発者 ⏱ ~10 min beginner

使うタイミング: DB スキーマを変更し、クライアント型を更新したい場合。

フロー
  1. 型を生成
    プロジェクト <ref> の public スキーマの TypeScript 型を生成してください。src/types/database.ts に保存してください。✓ コピーしました
    → 型ファイルが生成されました
  2. 差分確認と使用方法チェック
    以前の型ファイル(git)と比較して何が変わりました?既存の src/ の呼び出しサイトで破壊的な変更がありますか?✓ コピーしました
    → 変更ごとの影響分析
  3. PR を開く
    型更新と必要な呼び出しサイトの修正をコミットしてください。『chore: regen db types YYYY-MM-DD』というタイトルで PR を開いてください。✓ コピーしました
    → 完全な差分付き PR が開かれました

結果: 型がスキーマと同期を保つ;破壊的な変更は PR 時に検出され、本番環境では検出されません。

注意点
  • 生成された型には、SECURITY INVOKER が設定されていない限りビューが含まれません — ビューを明示的に追加するか、ギャップを文書化してください;supabase-js は from('view_name') で処理します
組み合わせ: github · filesystem

組み合わせ

他のMCPと組み合わせて10倍の力を

supabase + github

マイグレーション付き PR を開き、ブランチにデプロイし、PR にテスト結果をアタッチ

supabase/migrations/ にマイグレーションを追加する PR を開いてください。マイグレーションを適用した Supabase ブランチを作成します。PR にブランチからのテスト結果をコメントしてください。✓ コピーしました
supabase + stripe

イベントを Supabase に書き込む Stripe webhook Edge Function を構築

Stripe webhook を受け取り、署名を検証し、stripe_events テーブルにイベントを挿入する Edge Function を作成してください。Stripe で webhook エンドポイントをこれに指定する設定をしてください。✓ コピーしました
supabase + filesystem

ローカル SQL マイグレーションファイルを Supabase プロジェクト状態と同期

ディスク上の /supabase/migrations/ をプロジェクトに適用されているマイグレーションと比較してください。不足しているものを順序通りに適用します。✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
list_projects none トークンでアクセス可能なプロジェクトを検出 free
get_project / pause_project / restore_project project_id: str プロジェクトの検査または制御 free
create_branch / list_branches / merge_branch / delete_branch project_id, name? マイグレーションテスト向けデータベースブランチング(Pro+) ブランチコンピュート時間に基づいて課金
list_tables project_id, schemas?: str[] スキーマ内検査 free
list_extensions / list_migrations project_id DB メタデータ free
apply_migration project_id, name: str, query: str 追跡中のマイグレーションをプロジェクト DB に適用 free
execute_sql project_id, query: str アドホック SQL — 読み取り・書き込み free
list_edge_functions / get_edge_function / deploy_edge_function project_id, function name, code, entrypoint Deno ベースの edge functions を管理 Edge Function 呼び出しに基づいて課金
get_logs project_id, service: 'postgres'|'auth'|'edge-function'|... サービスの最近のログを取得 free
generate_typescript_types project_id スキーマ変更後にクライアント型を再生成 free
get_anon_key / get_project_url / get_advisors project_id プロジェクトメタデータ;advisors がセキュリティとパフォーマンス上の問題をフラグ free

コストと制限

運用コスト

APIクォータ
標準 Supabase レート制限(プラン別)
呼び出しあたりのトークン
スキーマクエリ:小規模。ログと SQL 結果:データ量に依存 — 常に時間・行のリミットを設定してください。
金額
MCP は無料;Supabase プロジェク��はプラン別($0 無料;Pro $25/月)。ブランチングはコンピュート時間を消費します。
ヒント
ブランチはテストに最適ですが、忘れると高額になります。マージ後または破棄時は必ず delete_branch を実行してください。

セキュリティ

権限、シークレット、影響範囲

最小スコープ: 可能な限り特定のプロジェクトにスコープを絞った個人アクセストークン
認証情報の保管: 環境変数 SUPABASE_ACCESS_TOKEN に個人アクセストークンを保存
データ送信先: api.supabase.com とプロジェクトの地域エンドポイントへのすべての呼び出し
絶対に付与しない: 絶対に必要な場合を除き、エージェントにサービスロールキーを付与しないでください — RLS をバイパスします

トラブルシューティング

よくあるエラーと対処法

認可されていません — 無効なトークン

トークンの有効期限が切れているか、スコープが違います。supabase.com/dashboard/account/tokens で新しいものを生成してください。

確認: curl -H 'Authorization: Bearer $TOKEN' https://api.supabase.com/v1/projects
ブランチングツールが失敗:『プランはブランチングをサポートしていません』

ブランチングは Pro+ です。プランをアップグレードするか、ブランチングワークフローをスキップしてください。

Edge Function デプロイに失敗:『無効な Deno コード』

関数コードは Deno 互換である必要があります(Node 形式の require は使えません)。インポートが https://deno.land/... または npm: 指定子を使用していることを確認してください。

execute_sql が『権限がありません』を返す

MCP はプロジェクトスコープのロールを使用します。権限が必要な操作はダッシュボードの SQL エディターで実行してください。MCP ロールにスーパーユーザー権限を付与しないでください。

代替案

Supabase 他との比較

代替案代わりに使う場面トレードオフ
Postgres MCP読み取り専用 SQL アクセスのみが必要で、Supabase 固有の機能が不要な場合ブランチング、edge functions、認証内検査、またはログが利用できません
Neon MCPNeon を使用している場合 — ブランチングもあります異なるプラットフォーム;認証/edge functions が利用できません
Supabase CLI directlysupabase start で完全なローカル開発フローが必要な場合エージェント向け UI がありません;コミット済みワークフローに適しています

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る