Supabase MCP 用 mcp.supabase.com/mcp,查询参数写进 url

CLI:codex mcp add supabase --url https://mcp.supabase.com/mcp,再 mcp login。官方查询 read_only=true、project_ref=abc123 写进 url。不要 PAT 当主路径,也不要抄 experimental_use_rmcp_client。

Supabase 托管的是远程 Streamable HTTP + OAuth(动态客户端登记)。官方 Codex 节:

codex mcp add supabase --url "https://mcp.supabase.com/mcp"
codex mcp login supabase
[mcp_servers.supabase]
url = "https://mcp.supabase.com/mcp"
enabled = true

这和 Datadog 不同:Datadog 在 Codex 里要用 http_headers 选工具集;Supabase 官方就是把查询参数写进 url。常用三个:

  • ?read_only=true:SQL 以只读 Postgres 用户跑
  • ?project_ref=abc123:限定到一个项目(官方表示例就是 abc123)。加上之后 account 类工具会关掉
  • ?features=database,docs:只开指定工具组。Storage 组默认关,要用再写进 features

可以组合:

[mcp_servers.supabase]
url = "https://mcp.supabase.com/mcp?project_ref=abc123&read_only=true"
enabled = true

本机 Supabase CLI 是另一台:http://localhost:54321/mcp,工具子集,没有 OAuth。不要把托管 URL 抄到本地,也不要把本地地址拿去 mcp login

日常不要 PAT。CI 不能开浏览器时才用个人访问令牌,走 bearer_token_env_var,变量必须在启动 Codex 的那个进程里。不要把 Authorization: Bearer 写进 http_headers

[mcp_servers.supabase]
url = "https://mcp.supabase.com/mcp?project_ref=abc123&read_only=true"
bearer_token_env_var = "SUPABASE_ACCESS_TOKEN"
enabled = true

键里是变量。不要和已经 mcp login 的 OAuth 写在同一张表。

不要做这些:

  • 不要抄旧文的 experimental_use_rmcp_client,也不要抄 [mcp] remote_mcp_client_enabled = true。那是 Studio / 旧客户端旗标,不是 Codex 配置面;Supabase 自己已经从流程里删掉。
  • 不要抄 Claude 的 --transport http,也不要抄 mcpServers JSON。
  • 不要套 mcp-remote
  • 不要给它 required = true 挂全局。生产库带着写工具不是每条会话都要的依赖。
  • 不要一上来 --yolo。SQL 结果和工单正文都可能带提示注入,保持工具批准。

网页 Cloud 不读 ~/.codex/config.toml。改完新开会话。用 codex mcp get supabase 看传输是 streamable_http。会话里 /mcp 只是核对工具,不是唯一登录入口。

来源