Supabase MCP

ทางการ

เซิร์ฟเวอร์ MCP อย่างเป็นทางการของ Supabase สำหรับจัดการโปรเจกต์ Supabase, ฐานข้อมูล, การยืนยันตัวตน, พื้นที่จัดเก็บ, ฟังก์ชัน Edge และเวิร์กโฟลว์ SQL จากเอเจนต์ AI

คุณทำอะไรได้บ้างด้วย Supabase MCP?

  • จัดการตารางฐานข้อมูล — ขอให้ผู้ช่วยของคุณสร้าง แก้ไข หรือลบตารางในฐานข้อมูลของโปรเจกต์ Supabase
  • สอบถามและตรวจสอบข้อมูล — ให้ผู้ช่วยของคุณรันคำสั่ง SQL หรือดึงเนื้อหาของตารางเพื่อตอบคำถามเกี่ยวกับข้อมูลของคุณ
  • ดึงการกำหนดค่าโปรเจกต์ — ขอรายละเอียดเกี่ยวกับการตั้งค่าโปรเจกต์ Supabase เช่น ข้อมูลการเชื่อมต่อหรือแฟล็กคุณสมบัติ
  • จำกัดขอบเขตการเข้าถึง — กำหนดค่าบนเซิร์ฟเวอร์ด้วย read_only=true หรือ project_ref เพื่อจำกัดเครื่องมือให้ทำงานเฉพาะการดำเนินการที่ปลอดภัยและเฉพาะโปรเจกต์

เซิร์ฟเวอร์ MCP แบบโฮสต์

npx add-mcp 'https://mcp.supabase.com/mcp'

ติดตั้งลง Claude Code, Codex, Cursor และอื่นๆ

เอกสาร

เซิร์ฟเวอร์ Supabase MCP

MCP Registry Version

เชื่อมต่อโปรเจกต์ Supabase ของคุณกับ Cursor, Claude, Windsurf และผู้ช่วย AI อื่นๆ

supabase-mcp-demo

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 ค่าเริ่มต้นคือ false
  • readOnly: เมื่อเป็น 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 โค้ดของคุณนำเข้ามันโดยตรง ดังนั้นติดตั้งมันควบคู่กัน

การสังเกตการณ์

ส่ง observer ไปยัง createSupabaseMcpServer เพื่อรวบรวมผลลัพธ์วงจรชีวิตของคำขอและข้อเท็จจริงในตัวของ Supabase ที่นี่ platform คืออะแดปเตอร์แพลตฟอร์มที่มีอยู่ของคุณ:

import { createSupabaseMcpServer } from '@supabase/mcp-server-supabase';

const server = createSupabaseMcpServer({
  platform,
  observer: (context) => ({
    record(fact) {
      console.info(fact);
    },
    end(result) {
      console.info({ ...context, ...result });
    },
  }),
});

เซิร์ฟเวอร์ไม่ส่งต่อเพย์โหลดคำขอหรือการตอบสนองไปยังผู้สังเกตการณ์โดยอัตโนมัติ ข้อเท็จจริงในตัวของ Supabase ใช้ชุดฟิลด์และค่าที่มีขอบเขตจำกัด ข้อเท็จจริงที่กำหนดเองไม่ได้รับการตรวจสอบความเป็นส่วนตัวอัตโนมัติ การละเว้น observer จะข้ามงานสังเกตการณ์ทั้งหมด ความล้มเหลวของผู้สังเกตการณ์ ตัวจำแนก และซิงก์ไม่เปลี่ยนพฤติกรรมของคำขอ แต่งานสังเกตการณ์และตัวจำแนกแบบซิงโครนัสสามารถบล็อกคำขอได้

เซิร์ฟเวอร์ MCP อื่นๆ

@supabase/mcp-server-postgrest

เซิร์ฟเวอร์ PostgREST MCP ช่วยให้คุณเชื่อมต่อผู้ใช้ของคุณเองกับแอปของคุณผ่าน REST API ดูรายละเอียดเพิ่มเติมได้ที่ README ของโปรเจกต์

ทรัพยากร

สำหรับนักพัฒนา

ดู CONTRIBUTING สำหรับรายละเอียดเกี่ยวกับวิธีมีส่วนร่วมในโปรเจกต์นี้

ลิขสิทธิ์

โปรเจกต์นี้ได้รับอนุญาตภายใต้ Apache 2.0 ดูไฟล์ LICENSE สำหรับรายละเอียด