據(jù)庫(kù)開(kāi)發(fā)環(huán)境!)
1. 為什么要把 Claude Code 接到 Supabase 上Claude Code 單獨(dú)用的時(shí)候本質(zhì)上還是一個(gè)「讀代碼、寫(xiě)代碼」的助手。你讓它改一個(gè) React 組件、補(bǔ)一段 SQL、解釋一個(gè)報(bào)錯(cuò)它都能干得不錯(cuò)。但它看不到你數(shù)據(jù)庫(kù)里真實(shí)有什么表、字段類型是什么、有沒(méi)有索引、外鍵怎么連的。每次要寫(xiě)查詢你得手動(dòng)把 schema 貼給它或者來(lái)回切換 Supabase 控制臺(tái)復(fù)制粘貼。我試過(guò)在幾個(gè)真實(shí)項(xiàng)目里這么干最煩的不是寫(xiě) SQL而是「上下文對(duì)不上」。比如你讓 Claude 寫(xiě)一個(gè)orders表的統(tǒng)計(jì)查詢它默認(rèn)按created_at字段來(lái)分組但你庫(kù)里實(shí)際叫order_time跑出來(lái)直接報(bào)column does not exist。這種錯(cuò)不致命但一次一次修很消耗耐心。Supabase MCP 解決的就是這個(gè)問(wèn)題。MCP 全稱 Model Context Protocol是 Anthropic 推出的一個(gè)標(biāo)準(zhǔn)協(xié)議讓 Claude 能通過(guò)統(tǒng)一的接口去訪問(wèn)外部系統(tǒng)——數(shù)據(jù)庫(kù)、文件系統(tǒng)、第三方 API 都行。Supabase 本身是開(kāi)源的 Postgres自帶 REST API、鑒權(quán)、存儲(chǔ)和 Edge Functions免費(fèi)層就能跑一個(gè)完整后端。把這兩個(gè)接起來(lái)之后Claude Code 就能直接讀你的表結(jié)構(gòu)、生成 SQL、執(zhí)行查詢、插入數(shù)據(jù)甚至根據(jù)真實(shí) schema 幫你寫(xiě)前端調(diào)用代碼。適合誰(shuí)用三類人最明顯一是獨(dú)立開(kāi)發(fā)者一個(gè)人要同時(shí)管前端、后端和數(shù)據(jù)庫(kù)想讓 AI 幫忙分擔(dān)數(shù)據(jù)庫(kù)這塊二是做 AI 編程出海方向的同學(xué)Supabase 在海外項(xiàng)目里用得非常多配合 Claude Code 能明顯提速三是剛接觸 Postgres 的新手讓 Claude 幫你把「建表、插數(shù)據(jù)、查結(jié)果」這條鏈路跑通比對(duì)著文檔啃快得多。這篇會(huì)從連接配置講到一次完整的建表查詢驗(yàn)證中間給出可復(fù)制的 MCP 配置片段并且把 endpoint 統(tǒng)一改到 TaoToken 的 Key 通道這樣你只需要維護(hù)一個(gè) Key不用在多個(gè)平臺(tái)之間來(lái)回切換。2. 前置準(zhǔn)備TaoToken 統(tǒng)一 Key 通道與 MCP 環(huán)境在動(dòng)手配 Supabase MCP 之前先把「Claude Code 怎么調(diào)用模型」這件事理順。Claude Code 默認(rèn)走的是 Anthropic 官方通道但國(guó)內(nèi)直連經(jīng)常不穩(wěn)定而且 Key 管理分散。TaoToken 提供的是一個(gè)統(tǒng)一的 Key 通道把模型調(diào)用收斂到一個(gè) endpoint 上Claude Code、Cline、Codex 這些工具都能共用同一個(gè) Key。先注冊(cè)并拿到 Key。打開(kāi)官網(wǎng) https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注冊(cè)后在控制臺(tái)里創(chuàng)建一個(gè) API Key。控制臺(tái)地址是 https://taotoken.net/console Key 管理頁(yè)面在 https://taotoken.net/api-keys 。創(chuàng)建完記得復(fù)制保存頁(yè)面刷新后就不再完整顯示了。拿到 Key 之后Claude Code 這邊需要設(shè)置兩個(gè)環(huán)境變量。Base URL 指向https://taotoken.net/api注意這個(gè)地址不加任何 UTM 參數(shù)就是純 API 入口。Key 就是你剛復(fù)制的那串。export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的TaoToken密鑰如果你用的是 Claude Code 的配置文件方式可以在~/.claude/settings.json里寫(xiě){ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的TaoToken密鑰 } }Model ID 這塊Claude Code 默認(rèn)會(huì)請(qǐng)求claude-sonnet-4-5這類模型標(biāo)識(shí)TaoToken 通道是兼容的你不需要額外改。如果遇到模型找不到的報(bào)錯(cuò)去 https://taotoken.net/doc 查一下當(dāng)前支持的模型列表把 Model ID 對(duì)齊即可。接下來(lái)是 Supabase 側(cè)的準(zhǔn)備。你需要一個(gè) Supabase 項(xiàng)目登錄 supabase.com 新建一個(gè)記下兩個(gè)東西項(xiàng)目 URL形如https://xxxx.supabase.co和 service_role key在 Project Settings → API 里注意用 service_role 而不是 anon因?yàn)?MCP 要執(zhí)行建表和寫(xiě)入操作。這兩個(gè)值后面會(huì)寫(xiě)進(jìn) MCP 配置里。MCP 的運(yùn)行環(huán)境需要 Node.js。確認(rèn)一下版本node -v npm -vNode 18 以上就行。然后建一個(gè)專門放 MCP 腳本的目錄我習(xí)慣放在~/.mcp/supabase下面方便統(tǒng)一管理。mkdir -p ~/.mcp/supabase cd ~/.mcp/supabase npm init -y npm install supabase/supabase-js裝完supabase/supabase-js之后這個(gè)目錄里就有了node_modules后面 MCP 腳本直接 require 它就行。這一步別跳過(guò)很多人配 MCP 失敗就是因?yàn)槟_本里 import 了一個(gè)沒(méi)裝的包。3. 可復(fù)制的 Supabase MCP 配置片段這一節(jié)給出完整的配置文件路徑和原文保持一致你直接復(fù)制改幾個(gè)值就能用。先創(chuàng)建 MCP 服務(wù)腳本。在~/.mcp/supabase/index.js里寫(xiě)入#!/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); // 簡(jiǎn)單的連通性檢查 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);注意這里用了一個(gè)_mcp_health表做探活如果表不存在會(huì)返回PGRST205表未找到這其實(shí)說(shuō)明連接是通的只是表還沒(méi)建所以代碼里把這個(gè)錯(cuò)誤碼排除掉。這樣你第一次跑的時(shí)候不會(huì)因?yàn)楸聿淮嬖诙`判連接失敗。然后是 Claude Code 的 MCP 配置文件。原文用的是~/.mcp/config.toml我們保持一致[mcp.supabase] command node args [ /Users/你的用戶名/.mcp/supabase/index.js, https://xxxx.supabase.co, your_service_role_key ]三個(gè)地方要改/Users/你的用戶名/換成你本機(jī)的實(shí)際路徑Windows 下是C:\\Users\\你的用戶名\\.mcp\\supabase\\index.jshttps://xxxx.supabase.co換成你的 Supabase 項(xiàng)目 URLyour_service_role_key換成 service_role key。如果你用的是 Cline 或者 Claude Code 的 MCP 配置界面格式會(huì)略有不同通常是 JSON{ mcpServers: { supabase: { command: node, args: [ /Users/你的用戶名/.mcp/supabase/index.js, https://xxxx.supabase.co, your_service_role_key ] } } }這里有個(gè)關(guān)鍵點(diǎn)Base URL、Key、Model ID 三件套要寫(xiě)全。Base URL 是 TaoToken 的https://taotoken.net/apiKey 是 TaoToken 的 API KeyModel ID 是 Claude 的模型標(biāo)識(shí)。Supabase 的 URL 和 Key 是另一套別混在一起。很多人配錯(cuò)就是把 Supabase 的 key 填到了 ANTHROPIC_API_KEY 里結(jié)果模型調(diào)用直接 401。配置寫(xiě)完后重啟 Claude Code 或者重新加載 MCP 配置。在 Claude Code 里輸入/mcp可以查看當(dāng)前加載的 MCP 服務(wù)列表看到supabase就說(shuō)明配置被讀到了。4. 驗(yàn)證請(qǐng)求一次建表查詢的完整動(dòng)作配置好之后最重要的就是驗(yàn)證它真的能跑通。別急著讓 Claude 寫(xiě)復(fù)雜業(yè)務(wù)先用一個(gè)最小閉環(huán)建表 → 插數(shù)據(jù) → 查結(jié)果。打開(kāi) Claude Code在對(duì)話里輸入我已經(jīng)配置了 Supabase MCP請(qǐng)先檢查數(shù)據(jù)庫(kù)連接是否正常。如果配置正確Claude 會(huì)調(diào)用 MCP 的探活邏輯返回類似Connected to Supabase: https://xxxx.supabase.co的信息。如果返回的是連接失敗或者超時(shí)先去看第 5 節(jié)的排查。連接確認(rèn)后讓它建一張表幫我在 Supabase 里新建一個(gè) users 表字段有 iduuid 主鍵、nametext、emailtext、created_attimestamp 默認(rèn) now。Claude 會(huì)生成這樣的 SQL 并通過(guò) MCP 執(zhí)行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() );執(zhí)行成功后你可以讓它插一條數(shù)據(jù)往 users 表插入一條記錄name 是 Miaomiaoemail 是 hiexample.com。對(duì)應(yīng)的操作是await supabase.from(users).insert({ name: Miaomiao, email: hiexample.com });最后查詢驗(yàn)證查詢 users 表的所有記錄。Claude 會(huì)返回類似[ { id: a1b2c3d4-..., name: Miaomiao, email: hiexample.com, created_at: 2025-01-15T10:30:00 } ]到這一步整條鏈路就通了。Claude Code 通過(guò) MCP 讀到了真實(shí)表結(jié)構(gòu)生成了正確的 SQL執(zhí)行后拿到了真實(shí)數(shù)據(jù)。后面你再讓它寫(xiě)前端調(diào)用代碼它就能基于真實(shí)的字段名來(lái)寫(xiě)不會(huì)再出現(xiàn)order_time寫(xiě)成created_at這種問(wèn)題。如果你想驗(yàn)證模型通道是否也走通了可以打開(kāi) https://taotoken.net/models 用同一個(gè) Key 做一次對(duì)話測(cè)試確認(rèn)模型側(cè)和數(shù)據(jù)庫(kù)側(cè)兩條鏈路都正常。5. 常見(jiàn)報(bào)錯(cuò)排查401、local proxy failed、reading choices配 MCP 的過(guò)程里報(bào)錯(cuò)基本集中在幾個(gè)地方。我把踩過(guò)的坑列出來(lái)對(duì)照著查會(huì)快很多。401 Unauthorized。這個(gè)最常見(jiàn)分兩種。一種是模型調(diào)用返回 401說(shuō)明 TaoToken 的 Key 不對(duì)或者沒(méi)生效。檢查ANTHROPIC_API_KEY是不是完整復(fù)制了有沒(méi)有多余空格。另一種是 Supabase 返回 401說(shuō)明 service_role key 填錯(cuò)了或者用了 anon key 去執(zhí)行建表操作。anon key 權(quán)限不夠建表會(huì)直接被拒。確認(rèn)你用的是 service_role key。local proxy failed。這個(gè)報(bào)錯(cuò)通常出現(xiàn)在 Claude Code 啟動(dòng)階段意思是它連不上你配置的 Base URL。先確認(rèn)ANTHROPIC_BASE_URL寫(xiě)的是https://taotoken.net/api不要帶路徑后綴也不要帶 UTM 參數(shù)。然后用 curl 測(cè)一下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 的配置文件沒(méi)被讀到檢查~/.claude/settings.json的路徑和格式。reading choices 報(bào)錯(cuò)。這個(gè)一般出現(xiàn)在 MCP 返回的數(shù)據(jù)格式不對(duì)的時(shí)候。Claude Code 期望 MCP 返回結(jié)構(gòu)化的 JSON如果你的腳本里console.log混入了非 JSON 內(nèi)容解析就會(huì)失敗。檢查index.js里除了必要的日志不要輸出多余內(nèi)容。探活那條console.log是允許的但別在數(shù)據(jù)返回路徑上打日志。OAuth 相關(guān)報(bào)錯(cuò)。Supabase 的某些操作需要 OAuth token如果你用的是 service_role key 直連一般不會(huì)觸發(fā)。但如果報(bào) OAuth 錯(cuò)誤說(shuō)明你的 Supabase 項(xiàng)目開(kāi)啟了 RLS行級(jí)安全且策略不允許 service_role 繞過(guò)。去 Supabase 控制臺(tái)的 Authentication → Policies 里檢查一下或者臨時(shí)關(guān)掉 RLS 測(cè)試。MCP 服務(wù)沒(méi)加載。在 Claude Code 里輸入/mcp看不到 supabase說(shuō)明配置文件路徑不對(duì)或者 TOML 格式有誤。TOML 對(duì)縮進(jìn)和引號(hào)敏感args數(shù)組里的每一項(xiàng)都要用雙引號(hào)路徑里的反斜杠在 Windows 下要轉(zhuǎn)義。建表成功但查詢報(bào) column does not exist。這說(shuō)明 Claude 生成的 SQL 字段名和實(shí)際表結(jié)構(gòu)不一致。讓 Claude 先執(zhí)行一次select * from information_schema.columns where table_name users把真實(shí)字段拉出來(lái)再基于結(jié)果寫(xiě)查詢。這也是 MCP 的價(jià)值所在——它能自己查 schema不用你手動(dòng)貼。6. 把這條鏈路用起來(lái)從建表到前端調(diào)用跑通驗(yàn)證之后這條鏈路能做的事情比想象中多。我平時(shí)的工作流是這樣的先在 Claude Code 里用自然語(yǔ)言描述需求讓它通過(guò) MCP 建表、加索引、插測(cè)試數(shù)據(jù)確認(rèn)數(shù)據(jù)結(jié)構(gòu)沒(méi)問(wèn)題之后再讓它基于真實(shí) schema 生成 Next.js 的 API 路由和前端頁(yè)面。比如讓它寫(xiě)一個(gè)用戶列表接口基于 users 表幫我寫(xiě)一個(gè) Next.js 的 /api/users 路由用 Supabase SDK 查詢所有用戶并返回 JSON。Claude 會(huì)生成類似這樣的代碼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); }因?yàn)?Claude 已經(jīng)通過(guò) MCP 看過(guò)真實(shí)的users表結(jié)構(gòu)它生成的字段名、類型都是對(duì)的你復(fù)制過(guò)去基本不用改。這就是「可對(duì)話式數(shù)據(jù)庫(kù)開(kāi)發(fā)」的實(shí)際體驗(yàn)——不是讓 AI 替你寫(xiě)代碼而是讓它在真實(shí)上下文里寫(xiě)代碼。長(zhǎng)期做編碼和 Agent 方向的話可以考慮用 Coding Plan把模型調(diào)用和 MCP 工具鏈統(tǒng)一管理地址是 https://taotoken.net/coding-plan 。如果只是想先驗(yàn)證模型通道用模型對(duì)話頁(yè)面測(cè)一下就行https://taotoken.net/models 。接入文檔在 https://taotoken.net/doc API Key 管理在 https://taotoken.net/api-keys 。最后說(shuō)一個(gè)實(shí)用技巧把 Supabase 的 URL 和 Key 放到環(huán)境變量里不要硬編碼在 MCP 配置文件中。這樣你換項(xiàng)目的時(shí)候只需要改環(huán)境變量配置文件不用動(dòng)。Claude Code 的 MCP 配置支持讀取環(huán)境變量把a(bǔ)rgs里的值換成process.env.SUPABASE_URL和process.env.SUPABASE_KEY就行。