Supabase MCP
ทางการเซิร์ฟเวอร์ MCP อย่างเป็นทางการของ Supabase สำหรับจัดการโปรเจกต์ Supabase, ฐานข้อมูล, การยืนยันตัวตน, พื้นที่จัดเก็บ, ฟังก์ชัน Edge และเวิร์กโฟลว์ SQL จากเอเจนต์ AI
คุณทำอะไรได้บ้างด้วย Supabase MCP?
- จัดการตารางฐานข้อมูล — ขอให้ผู้ช่วยของคุณสร้าง แก้ไข หรือลบตารางในโปรเจกต์ Supabase ผ่านเครื่องมือ MCP เช่น
create_tableและalter_table - สอบถามข้อมูลโปรเจกต์ — สั่งให้ AI ของคุณรันคำสั่ง SQL แบบอ่านอย่างเดียวกับฐานข้อมูลของคุณ ดึงแถวข้อมูล กรองผลลัพธ์ หรือตรวจสอบโครงสร้างโดยไม่ต้องเขียนโค้ด
- ดึงการกำหนดค่าโปรเจกต์ — ให้ผู้ช่วยของคุณดึงการตั้งค่าโปรเจกต์ รายละเอียดการเชื่อมต่อ หรือข้อมูลสภาพแวดล้อมโดยใช้เครื่องมือ เช่น
get_project_urlเพื่อปรับขั้นตอนการตั้งค่าให้ง่ายขึ้น - จำกัดการเข้าถึงเครื่องมือตามฟีเจอร์ — กำหนดค่าการเชื่อมต่อ MCP ของคุณเพื่อจำกัดเครื่องมือที่ใช้ได้ให้อยู่ในกลุ่มฟีเจอร์เฉพาะ (เช่น
databaseหรือdocs) หรือเปิดใช้งานโหมดอ่านอย่างเดียวเพื่อการโต้ตอบกับ AI ที่ปลอดภัยยิ่งขึ้น - ผสานรวมกับไคลเอนต์ AI SDK — ใช้
createToolSchemas()เพื่อสร้างสคีมาอินพุต/เอาต์พุตแบบมีชนิดสำหรับไคลเอนต์ MCP ของ Vercel AI SDK ซึ่งช่วยให้สามารถตรวจสอบเครื่องมือแบบคงที่ในแอปของคุณได้
เอกสาร
เซิร์ฟเวอร์ Supabase MCP
เชื่อมต่อโปรเจกต์ Supabase ของคุณกับ Cursor, Claude, Windsurf และผู้ช่วย AI อื่นๆ
Model Context Protocol (MCP) กำหนดมาตรฐานวิธีการที่ Large Language Models (LLMs) สื่อสารกับบริการภายนอกอย่าง Supabase โดยเชื่อมต่อผู้ช่วย AI เข้ากับโปรเจกต์ Supabase ของคุณโดยตรง และช่วยให้พวกเขาสามารถทำงานต่างๆ เช่น การจัดการตาราง การดึงข้อมูลคอนฟิก และการสอบถามข้อมูล ดู รายการเครื่องมือทั้งหมด
การตั้งค่า
1. ปฏิบัติตามแนวทางปฏิบัติด้านความปลอดภัยที่ดีที่สุดของเรา
ก่อนตั้งค่าเซิร์ฟเวอร์ MCP เราขอแนะนำให้คุณอ่าน แนวทางปฏิบัติด้านความปลอดภัยที่ดีที่สุด เพื่อทำความเข้าใจความเสี่ยงของการเชื่อมต่อ LLM เข้ากับโปรเจกต์ Supabase ของคุณและวิธีลดความเสี่ยงเหล่านั้น
2. กำหนดค่าไคลเอนต์ MCP ของคุณ
หากต้องการกำหนดค่าเซิร์ฟเวอร์ Supabase MCP บนไคลเอนต์ของคุณ โปรดเยี่ยมชม เอกสารการตั้งค่า ของเรา คุณยังสามารถสร้าง URL MCP ที่กำหนดเองสำหรับโปรเจกต์ของคุณได้โดยไปที่ แท็บการเชื่อมต่อ MCP ในแดชบอร์ด Supabase
ไคลเอนต์ MCP ของคุณจะแจ้งให้คุณเข้าสู่ระบบ Supabase โดยอัตโนมัติระหว่างการตั้งค่า ตรวจสอบให้แน่ใจว่าคุณเลือกองค์กรที่มีโปรเจกต์ที่คุณต้องการทำงานด้วย
ไคลเอนต์ MCP ส่วนใหญ่ต้องการข้อมูลต่อไปนี้:
{
"mcpServers": {
"supabase": {
"type": "http",
"url": "https://mcp.supabase.com/mcp"
}
}
}
หากคุณไม่เห็นไคลเอนต์ MCP ของคุณอยู่ในเอกสารของเรา โปรดตรวจสอบเอกสาร MCP ของไคลเอนต์ของคุณและคัดลอกข้อมูล MCP ด้านบนลงในรูปแบบที่คาดหวัง (json, yaml ฯลฯ)
CLI
หากคุณรัน Supabase ในเครื่องด้วย Supabase CLI คุณสามารถเข้าถึงเซิร์ฟเวอร์ MCP ได้ที่ http://localhost:54321/mcp ปัจจุบัน เซิร์ฟเวอร์ MCP ในสภาพแวดล้อม CLI มีเครื่องมือชุดย่อยที่จำกัดและไม่มี OAuth 2.1
โฮสต์ด้วยตนเอง
สำหรับ Supabase ที่โฮสต์ด้วยตนเอง โปรดตรวจสอบหน้า การเปิดใช้งานเซิร์ฟเวอร์ MCP ปัจจุบัน เซิร์ฟเวอร์ MCP ในสภาพแวดล้อมที่โฮสต์ด้วยตนเองมีเครื่องมือชุดย่อยที่จำกัดและไม่มี OAuth 2.1
ตัวเลือกการกำหนดค่าและเครื่องมือ
ดูเอกสาร Supabase MCP Server สำหรับ รายการเครื่องมือที่มี และ ตัวเลือกการกำหนดค่า ทั้งหมด
เอกสารยังมีตัวสร้าง URL แบบโต้ตอบเพื่อเติมตัวเลือกการกำหนดค่าให้คุณ
การใช้งานกับ MCP Client ของ AI SDK
แพ็คเกจ @supabase/mcp-server-supabase ส่งออก createToolSchemas() เพื่อเติมสคีมาอินพุตและเอาต์พุตสำหรับ MCP client ของ Vercel AI SDK ซึ่งช่วยให้เครื่องมือ Supabase MCP ถูกจัดการเป็นเครื่องมือแบบคงที่พร้อมการตรวจสอบฝั่งไคลเอนต์และประเภท TypeScript ที่อนุมานสำหรับอินพุตและเอาต์พุต
import { createToolSchemas } from '@supabase/mcp-server-supabase';
import { createMCPClient } from '@ai-sdk/mcp';
import { streamText } from 'ai';
const mcpClient = await createMCPClient({
transport: {
type: 'http',
url: 'https://mcp.supabase.com/mcp',
},
});
const tools = await mcpClient.tools({
schemas: createToolSchemas(),
});
const result = streamText({ model, tools, prompt: '...' });
for (const step of await result.steps) {
for (const toolResult of step.staticToolResults) {
if (toolResult.toolName === 'get_project_url') {
toolResult.input; // { project_id: string }
toolResult.output; // { url: string }
}
}
}
createToolSchemas() รองรับตัวเลือกการกรองที่คล้ายกับพารามิเตอร์ URL ของเซิร์ฟเวอร์ MCP:
features: จำกัดเฉพาะ กลุ่มคุณสมบัติ ที่ระบุ (เช่น['database', 'docs']) ค่าเริ่มต้นคือกลุ่มคุณสมบัติเริ่มต้นทั้งหมดprojectScoped: เมื่อเป็นtrueจะละเว้นproject_idจากสคีมาอินพุตของเครื่องมือและไม่รวมเครื่องมือระดับบัญชี — ใช้เมื่อเชื่อมต่อกับเซิร์ฟเวอร์ที่กำหนดค่าด้วยproject_refค่าเริ่มต้นคือfalsereadOnly: เมื่อเป็นtrueจะไม่รวมเครื่องมือที่แก้ไขข้อมูล — ใช้เมื่อเชื่อมต่อกับเซิร์ฟเวอร์ที่กำหนดค่าด้วยread_only=trueค่าเริ่มต้นคือfalse
const mcpClient = await createMCPClient({
transport: {
type: 'http',
url: 'https://mcp.supabase.com/mcp?project_ref=<project-ref>&read_only=true&features=database,docs',
},
});
const tools = await mcpClient.tools({
schemas: createToolSchemas({
features: ['database', 'docs'],
projectScoped: true,
readOnly: true,
}),
});
[!NOTE] เซิร์ฟเวอร์นี้ไม่ส่ง
structuredContentในผลลัพธ์เครื่องมือ MCP AI SDK จะย้อนกลับไปแยกวิเคราะห์ JSON จากข้อความcontent
สำหรับข้อมูลเพิ่มเติม โปรดดู คำจำกัดความของสคีมา และ ผลลัพธ์เครื่องมือที่พิมพ์ ในเอกสาร AI SDK
การโฮสต์ปลายทาง MCP ด้วยตนเอง
แพ็คเกจ @supabase/mcp-server-supabase ส่งออก createSupabaseMcpHandler() เพื่อให้บริการเครื่องมือผ่าน HTTP จากปลายทางของคุณเอง โดยยอมรับ SupabaseMcpServerOptions เดียวกับ createSupabaseMcpServer() โดยเฉพาะอย่างยิ่ง platform
ตัวจัดการรองรับเฉพาะโปรโตคอลเวอร์ชันปัจจุบันเท่านั้น มันถูกสร้างด้วย legacy: 'reject' ดังนั้นไคลเอนต์ที่พูดเฉพาะโปรโตคอลยุค 2025 จะได้รับ HTTP 400 แทนที่จะได้รับบริการ
เมื่อ platform มีข้อมูลประจำตัวต่อคำขอ ให้สร้างตัวจัดการต่อคำขอและปิดเมื่อการตอบสนองเสร็จสิ้น ตัวจัดการปิดทับ platform ที่คุณให้ไว้ ดังนั้นตัวจัดการที่ใช้ร่วมกันจะให้บริการทุกคำขอด้วยแพลตฟอร์มนั้น
ตัวจัดการที่มีอายุยาวนานนั้นใช้ได้เมื่อ platform ตั้งใจให้แชร์ เช่น โทเค็นบัญชีบริการ สร้างมันครั้งเดียวและ close() เมื่อปิดระบบแทนที่จะต่อคำขอ เนื่องจาก close() ทำลายเราเตอร์การสมัครสมาชิกและปฏิเสธคำขอในภายหลัง
import { createServer } from 'node:http';
import { toNodeHandler } from '@modelcontextprotocol/node';
import { createSupabaseMcpHandler } from '@supabase/mcp-server-supabase';
import { createSupabaseApiPlatform } from '@supabase/mcp-server-supabase/platform/api';
const server = createServer((req, res) => {
const accessToken = getAccessTokenFromRequest(req); // your own auth
const handler = createSupabaseMcpHandler({
platform: createSupabaseApiPlatform({ accessToken }),
});
// `close()` aborts in-flight exchanges, so close on `res` finishing rather
// than when the handler resolves, which would cut streaming responses short.
res.on('close', () => {
handler.close().catch((error) => console.error(error));
});
toNodeHandler(handler)(req, res).catch((error) => console.error(error));
});
toNodeHandler มาจาก @modelcontextprotocol/node ซึ่งไม่ใช่ dependency ของแพ็คเกจนี้ ติดตั้งควบคู่กัน
เซิร์ฟเวอร์ MCP อื่นๆ
@supabase/mcp-server-postgrest
เซิร์ฟเวอร์ PostgREST MCP ช่วยให้คุณเชื่อมต่อผู้ใช้ของคุณเองกับแอปของคุณผ่าน REST API ดูรายละเอียดเพิ่มเติมได้ที่ README ของโปรเจกต์
ทรัพยากร
- Model Context Protocol: เรียนรู้เพิ่มเติมเกี่ยวกับ MCP และความสามารถของมัน
- จากการพัฒนาไปสู่การผลิต: เรียนรู้วิธีส่งเสริมการเปลี่ยนแปลงไปยังสภาพแวดล้อมการผลิตอย่างปลอดภัย
สำหรับนักพัฒนา
ดู CONTRIBUTING สำหรับรายละเอียดเกี่ยวกับวิธีการมีส่วนร่วมในโปรเจกต์นี้
ใบอนุญาต
โปรเจกต์นี้ได้รับอนุญาตภายใต้ Apache 2.0 ดูไฟล์ LICENSE สำหรับรายละเอียด