/ 目录 / 演练场 / Supabase
● 官方 supabase-community 🔑 需要你的密钥

Supabase

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

Supabase 官方 MCP — 在聊天中管理项目、运行 SQL、部署 Edge Functions、配置认证、查看日志。

Supabase 官方 MCP,由 supabase-community 社区维护。封装了 Supabase Management API 和项目级 Postgres 访问。让 agent 能创建分支、运行迁移、编写 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

在数据库分支上测试破坏性迁移,再应用到生产环境

👤 交付 schema 变更的工程师 ⏱ ~30 min advanced

何时使用: 你有一个迁移会删除列或回填数百万行数据,想先在真实数据分支上干跑一遍。

前置条件
  • Supabase Pro 计划或更高版本 — 分支功能仅对付费计划开放
  • 个人访问令牌 — 在 supabase.com/dashboard/account/tokens 生成 — 范围限定到你的组织
步骤
  1. 从生产环境创建分支
    在项目 <ref> 中从主分支创建一个名为 'test-drop-legacy-col' 的数据库分支。等待它就绪。✓ 已复制
    → 分支已创建,有自己的连接字符串
  2. 在分支上运行迁移
    在新分支上应用以下迁移:<paste SQL>。报告受影响的行和任何错误。✓ 已复制
    → 迁移运行中;行数可见
  3. 验证后推送或丢弃
    在分支上运行健全性 SELECT(受影响表的前 10 行、变更列的 NULL 计数)。如果看起来不错,告诉我我会推送;否则删除分支。✓ 已复制
    → 验证输出,然后明确的人工决定

结果: 迁移在接触生产环境前已针对真实数据形状进行验证。

注意事项
  • 分支不具有生产环境的确切数据——它们是分支创建时的快照 — 记下快照时间戳;如果迁移对最近的行敏感,尽可能靠近应用时间创建分支
  • 创建分支消耗计算时间 — 测试后总是删除分支;遗弃的分支会累积账单
搭配使用: github · postgres

从聊天中编写和部署 Supabase Edge Function

👤 添加小型后端端点的开发者(webhooks、签名 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. 用样本负载测试
    向 URL 发送 POST 测试负载并跟踪函数日志。它是否成功且写入了一行?✓ 已复制
    → 日志显示调用;表中可见行

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

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

审计 Supabase 项目上的行级安全策略

👤 注重安全的开发者和评审员 ⏱ ~25 min intermediate

何时使用: 启动前——你想确认每个表上都启用了 RLS,策略确实如你所想的那样工作。

步骤
  1. 列出表和 RLS 状态
    列出 public schema 中的每个表。对于每个表,RLS 是否启用?列出附加的策略。✓ 已复制
    → 按表的 RLS 状态加上策略内容
  2. 找到没有 RLS 的表
    突出显示任何 RLS 为 OFF 或 RLS 为 ON 但不存在策略的表(实际上是默默拒绝所有)。✓ 已复制
    → 风险列表,每个都有清晰的类别
  3. 以匿名身份测试
    对于 3 个敏感表,模拟一个匿名用户查询(使用 anon 角色)。它是否返回行?它不应该。✓ 已复制
    → 空结果 = 好;返回行 = 策略错误

结果: 启动前对认证姿态的签字,附加按表的证据。

注意事项
  • 认为是内部表但 RLS 关闭 — Service-role 密钥设计上绕过 RLS——从不在客户端暴露它。审计在哪里使用了哪些密钥

调查用户为什么无法登录

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

何时使用: 用户报告'我的登录链接不工作',你想查看是否发送了邮件、什么认证事件被触发等。

步骤
  1. 找到用户
    找到邮箱为 '[email protected]' 的认证用户。显示 created_at、last_sign_in_at、email_confirmed_at。✓ 已复制
    → 用户记录或'未找到'判决
  2. 检查最近的认证日志
    提取过去 24 小时内该 user_id 的认证日志条目。按事件类型分组。✓ 已复制
    → 认证事件序列(otp_sent、sign_in_failed 等)
  3. 解决
    基于这些事件,实际问题是什么?建议修复(重新发送邀请、手动确认、重置密码)。✓ 已复制
    → 诊断加行动方案

结果: 一个已解决的支持票,附加审计跟踪,5 分钟内完成。

注意事项
  • PII 流入聊天日志 — 避免将原始用户记录粘贴到已归档的聊天历史;总结时编辑邮件

从 Supabase schema 生成 TypeScript 类型

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

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

步骤
  1. 生成类型
    为项目 <ref> 的 public schema 生成 TypeScript 类型。保存到 src/types/database.ts。✓ 已复制
    → 类型文件已写入
  2. 对比和检查使用情况
    与之前的类型文件(在 git 中)比较,发生了什么变化?对于 src/ 中的现有调用点,是否有任何破坏性变化?✓ 已复制
    → 按变化的影响分析
  3. 开启 PR
    提交类型更新加任何必要的调用点修复。开启一个标题为 'chore: regen db types YYYY-MM-DD' 的 PR。✓ 已复制
    → 已开启 PR,附完整差异

结果: 类型与 schema 保持同步;破坏的调用点在 PR 时被捕获,而不是在生产环境。

注意事项
  • 生成的类型不包括视图,除非视图设置了 SECURITY INVOKER — 显式添加视图或记录差距;supabase-js 无论如何都用 from('view_name') 处理它们
搭配使用: github · filesystem

组合

与其他 MCP 搭配,撬动十倍杠杆

supabase + github

开启含迁移的 PR,部署到分支,将测试结果附加到 PR

开启添加 supabase/migrations/ 中迁移的 PR。创建应用了迁移的 Supabase 分支。用分支的测试结果评论 PR。✓ 已复制
supabase + stripe

构建一个 Stripe webhook Edge Function,将事件写入 Supabase

创建一个 Edge Function 接收 Stripe webhooks,验证签名,并将事件插入 stripe_events 表。在 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[] Schema 内省 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 在 schema 变更后重新生成客户端类型 free
get_anon_key / get_project_url / get_advisors project_id 项目元数据;advisors 标记安全或性能问题 free

成本与限制

运行它的成本

API 配额
每个计划的标准 Supabase 速率限制
每次调用 Token 数
Schema 查询:小。日志和 SQL 结果:取决于数据量——总是设置时间/行限制
费用
MCP 免费;Supabase 项目按计划($0 免费层;Pro $25/月)。分支消耗计算时间。
提示
分支很适合测试,但遗忘时很贵。合并或丢弃后总是 delete_branch

安全

权限、密钥、影响范围

最小权限: 尽可能将个人访问令牌限定到特定项目
凭据存储: 个人访问令牌在环境变量 SUPABASE_ACCESS_TOKEN
数据出站: 所有调用都指向 api.supabase.com 和你的项目的区域端点
切勿授予: 不向 agent 授予 service_role 密钥,除非绝对必要——它绕过 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 MCP你改用 Neon——也有分支不同的平台;没有认证/edge functions
Supabase CLI directly你想要完整的本地开发流程使用 supabase start没有 agent 人体工程学;更适合提交的工作流

更多

资源

📖 阅读 GitHub 上的官方 README

🐙 查看未解决的 issue

🔍 浏览全部 400+ MCP 服务器和 Skills