1. 为什么要把 Claude Code 接到 Supabase 上Claude Code 单独用的时候本质上还是一个「读代码、写代码」的助手。你让它改一个 React 组件、补一段 SQL、解释一个报错它都能干得不错。但它看不到你数据库里真实有什么表、字段类型是什么、有没有索引、外键怎么连的。每次要写查询你得手动把 schema 贴给它或者来回切换 Supabase 控制台复制粘贴。我试过在几个真实项目里这么干最烦的不是写 SQL而是「上下文对不上」。比如你让 Claude 写一个orders表的统计查询它默认按created_at字段来分组但你库里实际叫order_time跑出来直接报column does not exist。这种错不致命但一次一次修很消耗耐心。Supabase MCP 解决的就是这个问题。MCP 全称 Model Context Protocol是 Anthropic 推出的一个标准协议让 Claude 能通过统一的接口去访问外部系统——数据库、文件系统、第三方 API 都行。Supabase 本身是开源的 Postgres自带 REST API、鉴权、存储和 Edge Functions免费层就能跑一个完整后端。把这两个接起来之后Claude Code 就能直接读你的表结构、生成 SQL、执行查询、插入数据甚至根据真实 schema 帮你写前端调用代码。适合谁用三类人最明显一是独立开发者一个人要同时管前端、后端和数据库想让 AI 帮忙分担数据库这块二是做 AI 编程出海方向的同学Supabase 在海外项目里用得非常多配合 Claude Code 能明显提速三是刚接触 Postgres 的新手让 Claude 帮你把「建表、插数据、查结果」这条链路跑通比对着文档啃快得多。这篇会从连接配置讲到一次完整的建表查询验证中间给出可复制的 MCP 配置片段并且把 endpoint 统一改到 TaoToken 的 Key 通道这样你只需要维护一个 Key不用在多个平台之间来回切换。2. 前置准备TaoToken 统一 Key 通道与 MCP 环境在动手配 Supabase MCP 之前先把「Claude Code 怎么调用模型」这件事理顺。Claude Code 默认走的是 Anthropic 官方通道但国内直连经常不稳定而且 Key 管理分散。TaoToken 提供的是一个统一的 Key 通道把模型调用收敛到一个 endpoint 上Claude Code、Cline、Codex 这些工具都能共用同一个 Key。先注册并拿到 Key。打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台里创建一个 API Key。控制台地址是 https://taotoken.net/console Key 管理页面在 https://taotoken.net/api-keys 。创建完记得复制保存页面刷新后就不再完整显示了。拿到 Key 之后Claude Code 这边需要设置两个环境变量。Base URL 指向https://taotoken.net/api注意这个地址不加任何 UTM 参数就是纯 API 入口。Key 就是你刚复制的那串。export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的TaoToken密钥如果你用的是 Claude Code 的配置文件方式可以在~/.claude/settings.json里写{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的TaoToken密钥 } }Model ID 这块Claude Code 默认会请求claude-sonnet-4-5这类模型标识TaoToken 通道是兼容的你不需要额外改。如果遇到模型找不到的报错去 https://taotoken.net/doc 查一下当前支持的模型列表把 Model ID 对齐即可。接下来是 Supabase 侧的准备。你需要一个 Supabase 项目登录 supabase.com 新建一个记下两个东西项目 URL形如https://xxxx.supabase.co和 service_role key在 Project Settings → API 里注意用 service_role 而不是 anon因为 MCP 要执行建表和写入操作。这两个值后面会写进 MCP 配置里。MCP 的运行环境需要 Node.js。确认一下版本node -v npm -vNode 18 以上就行。然后建一个专门放 MCP 脚本的目录我习惯放在~/.mcp/supabase下面方便统一管理。mkdir -p ~/.mcp/supabase cd ~/.mcp/supabase npm init -y npm install supabase/supabase-js装完supabase/supabase-js之后这个目录里就有了node_modules后面 MCP 脚本直接 require 它就行。这一步别跳过很多人配 MCP 失败就是因为脚本里 import 了一个没装的包。3. 可复制的 Supabase MCP 配置片段这一节给出完整的配置文件路径和原文保持一致你直接复制改几个值就能用。先创建 MCP 服务脚本。在~/.mcp/supabase/index.js里写入#!/usr/bin/env node import { createClient } from supabase/supabase-js; const [, , url, key] process.argv; if (!url || !key) { console.error(缺少 Supabase URL 或 Key); process.exit(1); } const supabase createClient(url, key); // 简单的连通性检查 const { data, error } await supabase.from(_mcp_health).select(*).limit(1); if (error error.code ! PGRST205) { console.error(连接失败:, error.message); process.exit(1); } console.log(Connected to Supabase:, url);注意这里用了一个_mcp_health表做探活如果表不存在会返回PGRST205表未找到这其实说明连接是通的只是表还没建所以代码里把这个错误码排除掉。这样你第一次跑的时候不会因为表不存在而误判连接失败。然后是 Claude Code 的 MCP 配置文件。原文用的是~/.mcp/config.toml我们保持一致[mcp.supabase] command node args [ /Users/你的用户名/.mcp/supabase/index.js, https://xxxx.supabase.co, your_service_role_key ]三个地方要改/Users/你的用户名/换成你本机的实际路径Windows 下是C:\\Users\\你的用户名\\.mcp\\supabase\\index.jshttps://xxxx.supabase.co换成你的 Supabase 项目 URLyour_service_role_key换成 service_role key。如果你用的是 Cline 或者 Claude Code 的 MCP 配置界面格式会略有不同通常是 JSON{ mcpServers: { supabase: { command: node, args: [ /Users/你的用户名/.mcp/supabase/index.js, https://xxxx.supabase.co, your_service_role_key ] } } }这里有个关键点Base URL、Key、Model ID 三件套要写全。Base URL 是 TaoToken 的https://taotoken.net/apiKey 是 TaoToken 的 API KeyModel ID 是 Claude 的模型标识。Supabase 的 URL 和 Key 是另一套别混在一起。很多人配错就是把 Supabase 的 key 填到了 ANTHROPIC_API_KEY 里结果模型调用直接 401。配置写完后重启 Claude Code 或者重新加载 MCP 配置。在 Claude Code 里输入/mcp可以查看当前加载的 MCP 服务列表看到supabase就说明配置被读到了。4. 验证请求一次建表查询的完整动作配置好之后最重要的就是验证它真的能跑通。别急着让 Claude 写复杂业务先用一个最小闭环建表 → 插数据 → 查结果。打开 Claude Code在对话里输入我已经配置了 Supabase MCP请先检查数据库连接是否正常。如果配置正确Claude 会调用 MCP 的探活逻辑返回类似Connected to Supabase: https://xxxx.supabase.co的信息。如果返回的是连接失败或者超时先去看第 5 节的排查。连接确认后让它建一张表帮我在 Supabase 里新建一个 users 表字段有 iduuid 主键、nametext、emailtext、created_attimestamp 默认 now。Claude 会生成这样的 SQL 并通过 MCP 执行create table users ( id uuid primary key default gen_random_uuid(), name text not null, email text not null unique, created_at timestamp default now() );执行成功后你可以让它插一条数据往 users 表插入一条记录name 是 Miaomiaoemail 是 hiexample.com。对应的操作是await supabase.from(users).insert({ name: Miaomiao, email: hiexample.com });最后查询验证查询 users 表的所有记录。Claude 会返回类似[ { id: a1b2c3d4-..., name: Miaomiao, email: hiexample.com, created_at: 2025-01-15T10:30:00 } ]到这一步整条链路就通了。Claude Code 通过 MCP 读到了真实表结构生成了正确的 SQL执行后拿到了真实数据。后面你再让它写前端调用代码它就能基于真实的字段名来写不会再出现order_time写成created_at这种问题。如果你想验证模型通道是否也走通了可以打开 https://taotoken.net/models 用同一个 Key 做一次对话测试确认模型侧和数据库侧两条链路都正常。5. 常见报错排查401、local proxy failed、reading choices配 MCP 的过程里报错基本集中在几个地方。我把踩过的坑列出来对照着查会快很多。401 Unauthorized。这个最常见分两种。一种是模型调用返回 401说明 TaoToken 的 Key 不对或者没生效。检查ANTHROPIC_API_KEY是不是完整复制了有没有多余空格。另一种是 Supabase 返回 401说明 service_role key 填错了或者用了 anon key 去执行建表操作。anon key 权限不够建表会直接被拒。确认你用的是 service_role key。local proxy failed。这个报错通常出现在 Claude Code 启动阶段意思是它连不上你配置的 Base URL。先确认ANTHROPIC_BASE_URL写的是https://taotoken.net/api不要带路径后缀也不要带 UTM 参数。然后用 curl 测一下curl -X POST https://taotoken.net/api/v1/messages \ -H x-api-key: sk-你的密钥 \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d {model:claude-sonnet-4-5,max_tokens:100,messages:[{role:user,content:hi}]}如果 curl 能通但 Claude Code 不通那就是 Claude Code 的配置文件没被读到检查~/.claude/settings.json的路径和格式。reading choices 报错。这个一般出现在 MCP 返回的数据格式不对的时候。Claude Code 期望 MCP 返回结构化的 JSON如果你的脚本里console.log混入了非 JSON 内容解析就会失败。检查index.js里除了必要的日志不要输出多余内容。探活那条console.log是允许的但别在数据返回路径上打日志。OAuth 相关报错。Supabase 的某些操作需要 OAuth token如果你用的是 service_role key 直连一般不会触发。但如果报 OAuth 错误说明你的 Supabase 项目开启了 RLS行级安全且策略不允许 service_role 绕过。去 Supabase 控制台的 Authentication → Policies 里检查一下或者临时关掉 RLS 测试。MCP 服务没加载。在 Claude Code 里输入/mcp看不到 supabase说明配置文件路径不对或者 TOML 格式有误。TOML 对缩进和引号敏感args数组里的每一项都要用双引号路径里的反斜杠在 Windows 下要转义。建表成功但查询报 column does not exist。这说明 Claude 生成的 SQL 字段名和实际表结构不一致。让 Claude 先执行一次select * from information_schema.columns where table_name users把真实字段拉出来再基于结果写查询。这也是 MCP 的价值所在——它能自己查 schema不用你手动贴。6. 把这条链路用起来从建表到前端调用跑通验证之后这条链路能做的事情比想象中多。我平时的工作流是这样的先在 Claude Code 里用自然语言描述需求让它通过 MCP 建表、加索引、插测试数据确认数据结构没问题之后再让它基于真实 schema 生成 Next.js 的 API 路由和前端页面。比如让它写一个用户列表接口基于 users 表帮我写一个 Next.js 的 /api/users 路由用 Supabase SDK 查询所有用户并返回 JSON。Claude 会生成类似这样的代码import { createClient } from supabase/supabase-js; const supabase createClient( process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY ); export default async function handler(req, res) { const { data, error } await supabase.from(users).select(*); if (error) return res.status(500).json({ error: error.message }); res.status(200).json(data); }因为 Claude 已经通过 MCP 看过真实的users表结构它生成的字段名、类型都是对的你复制过去基本不用改。这就是「可对话式数据库开发」的实际体验——不是让 AI 替你写代码而是让它在真实上下文里写代码。长期做编码和 Agent 方向的话可以考虑用 Coding Plan把模型调用和 MCP 工具链统一管理地址是 https://taotoken.net/coding-plan 。如果只是想先验证模型通道用模型对话页面测一下就行https://taotoken.net/models 。接入文档在 https://taotoken.net/doc API Key 管理在 https://taotoken.net/api-keys 。最后说一个实用技巧把 Supabase 的 URL 和 Key 放到环境变量里不要硬编码在 MCP 配置文件中。这样你换项目的时候只需要改环境变量配置文件不用动。Claude Code 的 MCP 配置支持读取环境变量把args里的值换成process.env.SUPABASE_URL和process.env.SUPABASE_KEY就行。