如何把 Supabase MCP 添加到 Claude Code:配置教程
如何把 Supabase MCP 添加到 Claude Code:一条 claude mcp add 命令,通过 /mcp 完成 OAuth 登录,再限定到单个项目、开启只读模式并选择功能组。
简短回答
要把 Supabase MCP 添加到 Claude Code,运行 claude mcp add --scope project --transport http supabase "https://mcp.supabase.com/mcp",在普通终端中启动 claude,输入 /mcp,选择 supabase,点 Authenticate,然后在浏览器中登录 Supabase。选择包含你项目的组织后,Claude 就能列出数据表、执行 SQL、应用迁移和查看日志。
这是 Supabase 官方托管的服务器,来自 supabase-community/supabase-mcp,在 mcp.so 上收录为 Supabase MCP。在正式依赖它之前,花两分钟看看下面的安全选项:限定到单个项目和开启只读模式都只是 URL 参数而已。
你需要准备
- 已安装并登录的 Claude Code。
- 一个至少有一个项目的 Supabase 账号。从开发项目开始是正确的做法。
- 一个用于 OAuth 登录的浏览器。交互式使用不需要 API key。
本地不需要安装任何东西。这个服务器是远程 Streamable HTTP 端点,Claude Code 直接连接 https://mcp.supabase.com/mcp。
第 1 步:添加服务器
Supabase MCP 文档中的命令:
claude mcp add --scope project --transport http supabase "https://mcp.supabase.com/mcp"
Supabase 使用 --scope project,它会把服务器写入仓库根目录的 .mcp.json:
{
"mcpServers": {
"supabase": {
"type": "http",
"url": "https://mcp.supabase.com/mcp"
}
}
}
这个文件不包含任何密钥,因为每个开发者都用自己的 Supabase 账号登录,所以可以放心提交。其他作用域也可以:
| 作用域 | 参数 | 适用场景 |
|---|---|---|
| project | --scope project | 仓库对应一个 Supabase 项目,团队共享配置 |
| local | 无参数 | 先试用,或不想改动 .mcp.json |
| user | --scope user | 希望所有项目都能用 Supabase(较少见,因为每个应用有自己的数据库) |
作用域、优先级和审批的通用规则,见 Claude Code MCP 指南。
第 2 步:用 OAuth 登录
- 在普通终端中启动
claude。Supabase 文档特别说明要在终端中认证,而不是在 IDE 扩展里。 - 输入
/mcp。 - 选择 supabase,然后选 Authenticate。
- 在浏览器中登录 Supabase,并选择包含目标项目的组织。
- 回到 Claude Code,
/mcp会显示supabase已连接。
Claude Code 会保存并刷新令牌。想了解底层流程,可以看 MCP 认证与 OAuth。
第 3 步:限定到单个项目并设为只读
使用不带参数的 URL 时,Claude 可以访问你所选组织中的所有项目,并且拥有写权限。Supabase 自己的安全建议也推荐收窄范围。这些都通过 URL 查询参数完成:
| 参数 | 效果 |
|---|---|
project_ref=your-project-ref | 只允许访问一个项目,并禁用账号级工具 |
read_only=true | 所有查询都以只读 Postgres 用户执行 |
features=database,docs | 只启用列出的功能组 |
项目 ref 就是控制台 URL 中的 ID,即 supabase.com/dashboard/project/your-project-ref。限定项目且只读的配置如下。注意保留引号,因为 & 对 shell 有特殊含义:
claude mcp add --scope project --transport http supabase \
"https://mcp.supabase.com/mcp?project_ref=your-project-ref&read_only=true"
如果已经添加过服务器,先运行 claude mcp remove supabase(如果它在 project 作用域,加上 --scope project),或者直接编辑 .mcp.json 中的 url。之后需要重新认证。
功能组
除 Storage 外,所有功能组默认启用。features 参数接受以下值:
| 功能组 | features 值 | 示例工具 |
|---|---|---|
| Database | database | list_tables、list_extensions、list_migrations、apply_migration、execute_sql |
| Debugging | debugging | query_logs、get_advisors |
| Development | development | get_project_url、get_publishable_keys、generate_typescript_types |
| Edge Functions | functions | list_edge_functions、get_edge_function、deploy_edge_function |
| Account | account | list_projects、create_project、pause_project、get_cost |
| Docs | docs | search_docs |
| Branching | branching | create_branch、merge_branch、reset_branch(实验性,需付费套餐) |
| Storage | storage | list_storage_buckets、get_storage_config(默认关闭) |
做应用开发时,features=database,docs,debugging,development 是一个合理的起点。这样就不能在对话中部署函数或创建项目,Claude 需要挑选的工具定义也更少。注意:只要设置了 project_ref,账号类工具就会被跳过。
如果你更喜欢点选而不是手写,Supabase MCP 页面提供了交互式 URL 生成器。
第 4 步:验证
claude mcp list
然后在会话中,/mcp 应显示 supabase 已连接并列出工具。先问一个无害的问题:
Use the supabase MCP to list the tables in my project and their row-level security status.
如果用 project_ref 做了限定,Claude 不需要再问你指的是哪个项目。
示例提示词
- 「列出我的数据表,告诉我哪些没有开启 RLS。」
- 「写一个迁移,新增一张关联
auth.users的profiles表,并配置 RLS 策略,让用户只能读取和更新自己的那一行。应用之前先给我看。」 - 「为我的数据库生成 TypeScript 类型,保存到 src/types/supabase.ts。」
- 「检查安全和性能建议(advisors),修复最重要的一个问题。」
- 「看看最近一小时的 API 日志,解释一下那些 500 错误。」
- 「在 Supabase 文档中搜索如何为数据表开启 realtime,然后在这里实现。」
生成类型的提示词很好地说明了为什么这件事适合放在 Claude Code 而不是聊天应用里:Claude 通过 MCP 读取实时的数据库结构,并把结果直接写进你的仓库。
改用令牌(CI 和无界面运行)
OAuth 需要浏览器,所以像 CI 中的 claude -p 这样的非交互式运行无法完成它。Supabase 文档介绍了改用个人访问令牌的方法:
- 在 supabase.com/dashboard/account/tokens 创建令牌。把它限定到服务器要连接的项目,只授予已启用工具所需的权限。
- 在 CI 环境中设置
SUPABASE_ACCESS_TOKEN和SUPABASE_PROJECT_REF。 - 提交一份引用这两个变量的配置。Claude Code 会展开
.mcp.json中 URL 和请求头里的环境变量:
{
"mcpServers": {
"supabase": {
"type": "http",
"url": "https://mcp.supabase.com/mcp?project_ref=${SUPABASE_PROJECT_REF}&read_only=true",
"headers": {
"Authorization": "Bearer ${SUPABASE_ACCESS_TOKEN}"
}
}
}
}
绝对不要在文件里写真实令牌。对于这类无人值守的监控和诊断任务,Supabase 推荐使用只读模式。
本地和自托管 Supabase
如果你用 Supabase CLI 在本地运行 Supabase,MCP 服务器地址是 http://localhost:54321/mcp:
claude mcp add --transport http supabase-local http://localhost:54321/mcp
根据 README,本地和自托管环境中的服务器只提供部分工具,也不支持 OAuth 2.1。自托管实例请参考 Supabase 的「Enabling MCP server」指南。
安全清单
Supabase 文档对风险说得非常直白。简要版本如下:
- 不要连接生产环境,除非任务确实需要生产数据。使用开发项目或分支。
- 只需要查看时就用只读模式。
- 用
project_ref限定到单个项目。 - 在 Claude Code 中保持手动审批工具调用,尤其是
execute_sql和apply_migration。 - 警惕提示词注入。 数据库中的行可能包含用户写的文本。如果 Claude 读到一行写着「忽略之前的指令」,这段文字就会进入模型。批准之前先检查它提出的操作。
- 不要把服务器提供给终端用户。 它是以你的权限执行操作的开发者工具。
更多内容见我们的 MCP 安全最佳实践。
故障排查
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
显示 ! Needs authentication | 还没完成 OAuth | /mcp → supabase → Authenticate |
| 已连接,但 Claude 找不到你的项目 | 登录时选错了组织 | 删除并重新添加服务器,重新认证并选择拥有该项目的组织 |
| 在 IDE 中无法登录 | 在 IDE 扩展中发起了认证 | 在普通终端中运行 claude 并在那里认证 |
zsh: no matches found,或 URL 在 & 处被截断 | URL 没加引号 | 用双引号包住整个 URL |
| 写操作报权限错误 | 设置了 read_only=true | 这是预期行为;只在必须写入的任务中去掉它 |
缺少 list_projects 等账号工具 | 设置了 project_ref | 这是预期行为;限定项目后账号工具会被禁用 |
| 分支工具调用失败 | 分支功能需要付费套餐 | 升级套餐,或使用单独的开发项目 |
| CI 运行卡住或认证失败 | OAuth 无法在无界面环境运行 | 使用上面的访问令牌配置 |
想查看原始工具列表和返回内容,可以把服务器连接到 MCP Inspector。
下一步
Supabase MCP 负责数据库这一侧。再加上 GitHub MCP 服务器,让 Claude 为它写好的迁移创建 PR;加上 Playwright MCP 在浏览器中检查功能。更多数据库和后端工具,可以浏览 MCP 服务器目录。
常见问题
如何把 Supabase MCP 连接到 Claude Code?
- 运行 'claude mcp add --scope project --transport http supabase https://mcp.supabase.com/mcp',在终端中启动 Claude Code,输入 /mcp,选择 supabase 并点 Authenticate。在浏览器中登录 Supabase,并选择拥有该项目的组织。
Supabase MCP 需要 API key 吗?
- 交互式使用不需要,因为 Claude Code 会通过浏览器用 OAuth 登录。在 CI 等无界面环境中,需要在 Supabase 控制台创建个人访问令牌,并通过 Authorization Bearer 请求头发送。
如何让 Supabase MCP 只读?
- 在服务器 URL 中加上 read_only=true,例如 https://mcp.supabase.com/mcp?read_only=true。之后所有查询都会以只读 Postgres 用户执行。
把 Supabase MCP 连到生产数据库安全吗?
- Supabase 建议只在任务确实需要生产数据时才连接生产环境。优先使用开发项目或分支,用 project_ref 限定项目,开启只读模式,并保持手动审批工具调用。