Добавьте в свое приложение Supabase собственный MCP-сервер

Источник: Supabase•

Добавьте в свое приложение Supabase собственный MCP-сервер

Каждый вызов инструмента выполняется от имени вошедшего в систему пользователя, поэтому написанные вами политики RLS определяют, к чему имеет доступ каждый агент.

На конференции Supabase Select мы анонсировали способ предоставить вашему приложению Supabase собственный MCP-сервер. Ваши клиенты смогут использовать ваше приложение из ChatGPT, Claude или другого MCP-клиента. Они входят в систему с помощью уже имеющейся у них учетной записи. Каждый вызов инструмента выполняется от имени этого пользователя, поэтому ваши политики RLS определяют, к чему может обратиться каждый агент.

Вы предоставляете возможности своего приложения в качестве инструментов с помощью протокола Model Context Protocol (MCP).

Блок MCP Server добавляет код сервера в ваш проект. Supabase Auth управляет процессом OAuth. Вспомогательные функции из @supabase/server предоставляют каждому инструменту клиент Supabase для вошедшего в систему пользователя. Каждый инструмент может быть обычным запросом, без ключа роли сервиса. Вы пишите инструменты, которые подходят вашему приложению.

Посмотрите это в действии в докладе Грега Ричардсона (Greg Richardson) на Select. Общие анонсы читайте в статьях «Создавайте что угодно: Supabase из кода и MCP-сервер для вашего приложения» и в нашем обзоре Supabase Select 2026.

Допустим, ваше приложение превращает фотографии продуктов в видеорекламу. Клиент планирует кампанию в Claude. Ему нужны его продукты и инструменты рекламы в вашем приложении. С помощью MCP его агент может найти продукт, запросить рекламу и использовать результат в том же разговоре вместе с другими своими инструментами.

Именно этот сценарий мы показали с помощью Sizzle, демонстрационного приложения, на Supabase Select. Приложение использует Supabase Auth, Database и Storage. Его инструменты MCP позволяют клиенту выводить список своих продуктов и создавать видеорекламу через внешний сервис. Клиент может использовать эти действия из ChatGPT или Claude. Посмотрите полную демонстрацию.

Установите блок MCP Server из библиотеки Supabase:

_10

npx shadcn@latest add https://supabase.com/library/r/mcp.json

Команда копирует Edge Function в supabase/functions/mcp. Она включает обработчик MCP, промежуточное ПО (middleware) для аутентификации и инструмент whoami для проверки личности вызывающего абонента. Каждый инструмент имеет собственный файл, а tools/index.ts регистрирует их.

Вы владеете этим кодом. Добавляйте инструменты для операций, которые поддерживает ваш продукт, изменяйте их входные данные и решайте, какую информацию они возвращают. На странице блока в Библиотеке есть кнопка «Скопировать промпт для агента» (Copy agent prompt), которая указывает вашему агенту по кодированию на документацию блока.

Блок использует официальный TypeScript SDK для MCP для реализации протокола и регистрации инструментов. Вспомогательные функции Supabase управляют подключением к Supabase Auth и клиентской части пользователя.

Вспомогательные функции Supabase также работают в других бэкендах, использующих стандартные обработчики Web Request и Response, включая Cloudflare Workers, и с другими библиотеками MCP. Чтобы повторно использовать логику, которая запускается в другом месте, добавьте туда эндпоинт MCP и установите его общедоступный URL-адрес и URL-адрес Supabase Auth, чтобы клиенты могли найти правильный сервер Auth.

Агент клиента (MCP-клиент) начинается с URL-адреса вашего сервера. Промежуточное ПО аутентификации подсказывает ему, где найти OAuth-сервер вашего проекта. Пользователь входит в систему через ваше приложение и одобряет клиента на странице согласия. Затем Supabase Auth выдает токен доступа для этого пользователя.

Последующие вызовы инструментов несут этот токен.

В сгенерированной функции handleMcp является обработчиком запросов MCP. Вспомогательные функции аутентификации запускаются перед ним:

_15

import { pipeline } from 'npm:@supabase/middleware@1'

_15

import {

_15

withOAuthProtectedResource,

_15

withSupabase,

_15

} from 'npm:@supabase/server@1'

_15

_15

Deno.serve(

_15

pipeline(

_15

_15

withOAuthProtectedResource(),

_15

withSupabase({ auth: 'user' }),

_15

_15

handleMcp,

_15

_15

withOAuthProtectedResource() сообщает клиенту, где войти в систему. Он отвечает на запросы обнаружения и отправляет запрос OAuth, когда в запросе нет токена.

withSupabase({ auth: 'user' }) проверяет токен и предоставляет обработчику клиент Supabase пользователя. Запросы через этот клиент выполняются с идентификацией пользователя, поэтому Postgres применяет политики RLS для таблицы.

В руководстве по MCP-серверу подробно описаны промежуточное ПО и обработка запросов.

Каждый модуль инструмента получает MCP-сервер как server, а клиент Supabase вызывающего абонента как supabase. z — это построитель схем Zod. Инструмент для существующей защищенной с помощью RLS таблицы todos может выводить список незавершенных задач:

_23

server.registerTool(

_23

'list_open_tasks',

_23

_23

description: 'Find up to 20 unfinished tasks for the signed-in user.',

_23

inputSchema: z.object({}),

_23

annotations: { readOnlyHint: true },

_23

_23

async () => {

_23

const result = await supabase

_23

.from('todos')

_23

.select('id, title')

_23

.eq('done', false)

_23

.limit(20)

_23

_23

if (result.error) throw new Error(result.error.message)

_23

_23

return {

_23

content: [

_23

{ type: 'text', text: JSON.stringify(result.data) },

_23

_23

_23

_23

Инструмент фильтрует данные по статусу задачи. Ваши политики RLS определяют, к каким строкам этот пользователь может получить доступ.

Инструмент также может вызывать функцию базы данных, вызывать Edge Function или использовать существующий API приложения.

Храните бизнес-правила в коде, который вызывает инструмент. Например, для расхода может потребоваться проверка утверждения. Инструмент MCP должен вызывать ту же функцию, которую ваше приложение использует для этой проверки.

Ваши инструменты MCP могут отображать часть пользовательского интерфейса вашего приложения прямо в чате. Для этого используются MCP Apps — расширение для MCP. ChatGPT и другие поддерживающие его клиенты отображают пользовательский интерфейс внутри беседы.

В демонстрации Sizzle клиент просит ChatGPT показать один из своих продуктов. ChatGPT показывает карточку продукта Sizzle с описанием и видеоплеером. Когда клиент запрашивает новую рекламу, он наблюдает за ее рендерингом в том же чате.

Интерфейс повторно использует компоненты React из веб-приложения Sizzle. Отдельная сборка объединяет их в один файл HTML. Edge Function отправляет этот файл вместе с результатом работы инструмента.

Если люди в основном используют ваше приложение через агента, блок Headless App предоставляет еще одну отправную точку. Он включает в себя браузерный процесс для входа в систему и получения согласия, примеры инструментов задач и защищенную с помощью RLS базу данных. Пользователи одобряют доступ в браузере, а затем работают через своего агента.

Чтобы подключить внешние агенты, настройте свой проект Supabase с асимметричными ключами подписи и включите сервер OAuth 2.1. Включите динамическую регистрацию клиентов, чтобы совместимые клиенты могли регистрироваться самостоятельно.

Добавьте блок OAuth Consent на свой интерфейс, чтобы пользователи могли одобрять доступ. Установите для параметра Auth Site URL сайт, на котором размещена страница согласия.

Edge Function проверяет токены в своем промежуточном ПО. Отключите встроенную проверку JWT, чтобы запросы обнаружения без токена могли доходить до нее:

_10

[functions.mcp]

_10

verify_jwt = false

Пользователи подключают своего агента к развернутому URL-адресу сервера.

Следуйте руководству «Развертывание MCP-серверов» (Deploy MCP servers), чтобы ознакомиться с полной настройкой, локальным тестированием и шагами развертывания.

О чём эта статья

Ещё в разделе «Разработка ПО»

Все →

Ещё от Supabase