Supabase MCP

공식

Supabase 프로젝트, 데이터베이스, 인증, 스토리지, 엣지 함수 및 SQL 워크플로우를 AI 에이전트에서 관리할 수 있는 공식 Supabase MCP 서버입니다.

Supabase MCP(으)로 무엇을 할 수 있나요?

  • Manage database tables — 어시스턴트에게 Supabase 프로젝트에서 create_tablealter_table 같은 MCP 도구를 통해 테이블을 생성, 변경 또는 삭제하도록 요청하세요.
  • Query project data — AI에게 데이터베이스에 대해 읽기 전용 SQL 쿼리를 실행하도록 지시하여, 코드를 작성하지 않고도 행을 가져오거나 결과를 필터링하거나 스키마를 검사할 수 있습니다.
  • Fetch project configuration — 어시스턴트가 get_project_url 같은 도구를 사용하여 프로젝트 설정, 연결 세부 정보 또는 환경 정보를 검색하도록 하여 설정 작업을 간소화하세요.
  • Restrict tool access by feature — MCP 연결을 구성하여 사용 가능한 도구를 특정 기능 그룹(예: database 또는 docs)으로 제한하거나, 더 안전한 AI 상호작용을 위해 읽기 전용 모드를 활성화하세요.
  • Integrate with AI SDK clientscreateToolSchemas()를 사용하여 Vercel AI SDK의 MCP 클라이언트용 타입이 지정된 입력/출력 스키마를 생성함으로써, 앱에서 정적 도구 검증을 가능하게 하세요.

문서

Supabase MCP 서버

MCP Registry Version

Supabase 프로젝트를 Cursor, Claude, Windsurf 및 기타 AI 어시스턴트에 연결하세요.

supabase-mcp-demo

Model Context Protocol(MCP)은 대규모 언어 모델(LLM)이 Supabase와 같은 외부 서비스와 통신하는 방식을 표준화합니다. AI 어시스턴트를 Supabase 프로젝트에 직접 연결하여 테이블 관리, 구성 가져오기, 데이터 쿼리와 같은 작업을 수행할 수 있게 합니다. 전체 도구 목록을 확인하세요.

설정

1. 보안 모범 사례 준수

MCP 서버를 설정하기 전에 보안 모범 사례를 읽고 LLM을 Supabase 프로젝트에 연결할 때의 위험과 이를 완화하는 방법을 이해하는 것이 좋습니다.

2. MCP 클라이언트 구성

클라이언트에서 Supabase MCP 서버를 구성하려면 설정 문서를 방문하세요. Supabase 대시보드의 MCP 연결 탭에서 프로젝트에 대한 사용자 지정 MCP URL을 생성할 수도 있습니다.

MCP 클라이언트는 설정 중에 자동으로 Supabase에 로그인하도록 요청합니다. 작업하려는 프로젝트가 포함된 조직을 선택해야 합니다.

대부분의 MCP 클라이언트는 다음 정보를 요구합니다:

{
  "mcpServers": {
    "supabase": {
      "type": "http",
      "url": "https://mcp.supabase.com/mcp"
    }
  }
}

문서에 MCP 클라이언트가 나열되지 않은 경우, 클라이언트의 MCP 문서를 확인하고 위의 MCP 정보를 해당 형식(json, yaml 등)으로 복사하세요.

CLI

Supabase CLI로 Supabase를 로컬에서 실행하는 경우, http://localhost:54321/mcp에서 MCP 서버에 접근할 수 있습니다. 현재 CLI 환경의 MCP 서버는 제한된 도구 하위 집합을 제공하며 OAuth 2.1을 지원하지 않습니다.

자체 호스팅

자체 호스팅 Supabase의 경우 MCP 서버 활성화 페이지를 확인하세요. 현재 자체 호스팅 환경의 MCP 서버는 제한된 도구 하위 집합을 제공하며 OAuth 2.1을 지원하지 않습니다.

구성 옵션 및 도구

Supabase MCP 서버 문서에서 사용 가능한 도구구성 옵션의 전체 목록을 확인하세요.

문서에는 구성 옵션을 자동으로 채워주는 대화형 URL 빌더도 포함되어 있습니다.

AI SDK의 MCP 클라이언트와 함께 사용

@supabase/mcp-server-supabase 패키지는 Vercel AI SDK의 MCP 클라이언트를 위한 입력 및 출력 스키마를 채우기 위해 createToolSchemas()를 내보냅니다. 이를 통해 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()은 MCP 서버의 URL 매개변수와 유사한 필터링 옵션을 허용합니다:

  • 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] 이 서버는 MCP 도구 결과에 structuredContent를 보내지 않습니다. AI SDK는 content 텍스트에서 JSON을 파싱하는 방식으로 대체합니다.

자세한 내용은 AI SDK 문서의 스키마 정의타입이 지정된 도구 출력을 참조하세요.

MCP 엔드포인트 자체 호스팅

@supabase/mcp-server-supabase 패키지는 자체 엔드포인트에서 HTTP를 통해 도구를 제공하기 위해 createSupabaseMcpHandler()를 내보냅니다. createSupabaseMcpServer()와 동일한 SupabaseMcpServerOptions을 허용하며, 가장 중요한 것은 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에서 제공되며, 이 패키지의 종속성이 아닙니다. 함께 설치하세요.

기타 MCP 서버

@supabase/mcp-server-postgrest

PostgREST MCP 서버를 사용하면 REST API를 통해 자신의 사용자를 앱에 연결할 수 있습니다. 자세한 내용은 프로젝트 README를 참조하세요.

리소스

개발자용

이 프로젝트에 기여하는 방법에 대한 자세한 내용은 CONTRIBUTING을 참조하세요.

라이선스

이 프로젝트는 Apache 2.0에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.