Supabase MCP

официальный

Официальный MCP-сервер Supabase для управления проектами Supabase, базами данных, аутентификацией, хранилищем, edge-функциями и SQL-процессами из AI-агентов.

Что можно делать с Supabase MCP?

  • Manage database tables — Попросите ассистента создать, изменить или удалить таблицы в вашем проекте Supabase с помощью инструментов MCP, таких как create_table и alter_table.
  • Query project data — Поручите вашему ИИ выполнять SQL-запросы только для чтения к вашей базе данных, извлекая строки, фильтруя результаты или проверяя схему без написания кода.
  • Fetch project configuration — Попросите ассистента получить настройки проекта, данные для подключения или информацию об окружении с помощью таких инструментов, как get_project_url, чтобы упростить задачи настройки.
  • Restrict tool access by feature — Настройте ваше MCP-подключение, чтобы ограничить доступные инструменты конкретными группами функций (например, database или docs) или включите режим только для чтения для более безопасного взаимодействия с ИИ.
  • Integrate with AI SDK clients — Используйте createToolSchemas() для генерации типизированных схем ввода/вывода для MCP-клиента Vercel AI SDK, что обеспечивает статическую проверку инструментов в ваших приложениях.

Документация

Сервер 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 на вашем клиенте, посетите нашу документацию по настройке. Вы также можете сгенерировать пользовательский MCP-URL для вашего проекта, посетив вкладку подключения 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.

Self-hosted

Для самостоятельно размещенного Supabase обратитесь к странице Включение MCP-сервера. В настоящее время MCP-сервер в средах self-hosted предлагает ограниченный набор инструментов и не поддерживает OAuth 2.1.

Параметры конфигурации и инструменты

См. документацию Supabase MCP Server для получения полного списка доступных инструментов и параметров конфигурации.

В документации также есть интерактивный конструктор URL для заполнения параметров конфигурации.

Использование с MCP-клиентом AI SDK

Пакет @supabase/mcp-server-supabase экспортирует createToolSchemas() для заполнения схем ввода и вывода для MCP-клиента 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, который не является зависимостью этого пакета. Установите его вместе с пакетом.

Другие MCP-серверы

@supabase/mcp-server-postgrest

MCP-сервер PostgREST позволяет подключать ваших пользователей к вашему приложению через REST API. Подробнее см. в README проекта.

Ресурсы

Для разработчиков

См. CONTRIBUTING для получения подробной информации о том, как внести вклад в этот проект.

Лицензия

Этот проект лицензирован под Apache 2.0. См. файл LICENSE для получения подробной информации.