/ 目錄 / 演練場 / Supabase
● 官方 supabase-community 🔑 需要你的金鑰

Supabase

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

Supabase 官方 MCP — 在聊天中管理专案、执行 SQL、部署 Edge Functions、设置认证、查看日誌。

Supabase 官方 MCP,由 supabase-community 组织维护。封装了 Supabase Management API 和按专案级别的 Postgres 访问权限。让代理创建分支、运行迁移、编写 Edge Functions、查询数据库和读取日誌,全部无需离开聊天。

為什麼要用

核心特性

即時演示

實際使用效果

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

何時使用: 你需要一个有数据库访问权限的快速 HTTP 端点 — 非常适合 Edge Function — 并且不想切换到仪表板。

步驟
  1. 搭建函数
    在专案 <ref> 中创建一个 Edge Function stripe-webhook。它应该:验证 Stripe 签名,然后向 stripe_events 表中插入一行。使用 Deno 风格的导入。✓ 已複製
    → 函数代码已使用正确的 Deno 惯例编写
  2. 部署
    stripe-webhook 部署到专案 <ref>。显示结果 URL。✓ 已複製
    → 已返回部署 URL
  3. 使用示例有效载荷测试
    将测试有效载荷 POST 到 URL,并跟踪函数日誌。它是否成功并写入一行?✓ 已複製
    → 日誌显示调用;表中可见一行

結果: 一个实时端点加上数据库中的一行来证明它有效,5 分钟内完成。

注意事項
  • 秘密(STRIPE_SECRET)不会自动注入 — 在调用前通过 Supabase 仪表板或 set_secrets MCP 工具设置它们;通过 Deno.env.get('STRIPE_SECRET') 引用
  • Edge functions 冷启动;第一个请求很慢 — 在宣称 'works' 前,部署后调用一次来预热
搭配使用: stripe · github

审计 Supabase 专案的行级安全性政策

👤 具有安全意识的开发者和审阅者 ⏱ ~25 min intermediate

何時使用: 发布前 — 你想确认每个表都启用了 RLS,政策确实做了你认为的事情。

步驟
  1. 列出表和 RLS 状态
    列出公开模式中的每个表。对于每个表,是否启用了 RLS?列出附加的政策。✓ 已複製
    → 每个表的 RLS 状态加上政策主体
  2. 找出没有 RLS 的表
    突出显示任何 RLS 关闭或 RLS 打开但不存在政策的表(实际上默认拒绝所有)。✓ 已複製
    → 风险列表,每个有明确的分类
  3. 作为匿名用户测试
    对于 3 个敏感表,模拟匿名用户查询(使用 anon 角色)。它返回行吗?它不应该。✓ 已複製
    → 空结果 = 好;返回行 = 政策错误

結果: 一个发布前的认证态势批准,每个表都有证据。

注意事項
  • 在你认为是内部的表上 RLS 关闭 — Service-role 密钥按设计绕过 RLS — 永远不要在客户端暴露它。审计哪些密钥在哪里使用

调查用户无法登录的原因

👤 支持工程师、进行一线工作的创始人 ⏱ ~10 min beginner

何時使用: 用户报告 'my login link doesn't work',你想看看邮件是否发送、哪些认证事件触发等。

步驟
  1. 找到用户
    找到邮箱为 '[email protected]' 的认证用户。显示 created_at、last_sign_in_at、email_confirmed_at。✓ 已複製
    → 用户记录或 'not found' 结论
  2. 检查最近的认证日誌
    拉取最后 24 小时该 user_id 的认证日誌条目。按事件类型分组。✓ 已複製
    → 认证事件序列(otp_sent、sign_in_failed 等)
  3. 解决
    根据事件,实际问题是什么?建议修复方案(重新发送邀请、手动确认、重置密码)。✓ 已複製
    → 诊断加上行动计划

結果: 一个已解决的支持工单,带有审计跟踪,5 分钟内完成。

注意事項
  • 个人识别信息流入聊天日誌 — 避免将原始用户记录粘贴到存档的聊天历史记录中;在总结时编辑电子邮件

从你的 Supabase 模式生成 TypeScript 类型

👤 使用 `supabase-js` 的前端开发者 ⏱ ~10 min beginner

何時使用: 你改变了数据库模式,想要更新客户端类型以匹配。

步驟
  1. 生成类型
    为专案 <ref> 的公开模式生成 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 搭配,撬動十倍槓桿

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+) Branch compute hours billed
list_tables project_id, schemas?: str[] 模式自省 free
list_extensions / list_migrations project_id 数据库元数据 free
apply_migration project_id, name: str, query: str 将跟踪的迁移应用到专案数据库 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 invocations billed
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 专案元数据;顾问标记安全或性能问题 free

成本與限制

運行它的成本

API 配額
标准 Supabase 速率限制(按计划)
每次呼叫 Token 數
模式查询:小。日誌和 SQL 结果:取决于数据量 — 始终设置时间/行限制
費用
MCP 免费;Supabase 专案按计划计费($0 免费层;Pro $25/月)。分支消耗计算小时数。
提示
分支非常适合测试,但被遗忘时会很昂贵。合并后或丢弃时始终 delete_branch

安全

權限、密鑰、影響範圍

最小權限: 尽可能将个人访问令牌限制在特定专案
憑證儲存: 环境变量 SUPABASE_ACCESS_TOKEN 中的个人访问令牌
資料出站: 所有对 api.supabase.com 和你的专案区域端点的调用
切勿授予: 除非绝对必要,否则不要将 service_role 密钥授予代理 — 它绕过 RLS

故障排查

常見錯誤與修復

Unauthorized — invalid token

令牌过期或范围错误。在 supabase.com/dashboard/account/tokens 生成新令牌。

驗證: curl -H 'Authorization: Bearer $TOKEN' https://api.supabase.com/v1/projects
Branching tools fail with 'plan does not support branching'

分支是 Pro+。升级计划或跳过分支工作流。

Edge Function deploy fails: 'invalid Deno code'

函数代码必须与 Deno 兼容(无 Node 风格的 require)。检查导入使用 https://deno.land/...npm: 说明符。

execute_sql returns 'permission denied'

MCP 使用专案范围的角色。对于特权操作,通过仪表板 SQL 编辑器运行。不要授予 MCP 角色超级用户。

替代方案

Supabase 對比其他方案

替代方案何時用它替代權衡
Postgres MCP你只需要只读 SQL 访问权限,不需要 Supabase 特定功能没有分支、edge functions、认证自省或日誌
Neon MCP你在 Neon 上 — 也有分支不同的平台;没有认证/edge functions
Supabase CLI directly你想要完整的本地开发流程,使用 supabase start没有代理人体工学;更适合已提交的工作流

更多

資源

📖 閱讀 GitHub 上的官方 README

🐙 查看未解決的 issue

🔍 瀏覽全部 400+ MCP 伺服器和 Skills