MCP server Supabase даёт агенту ключи от вашей базы данных: он может перечислять таблицы, выполнять SQL, применять миграции, разворачивать Edge Functions и создавать ветки. Поэтому это один из самых полезных MCP server для тех, кто строит что-то на Supabase, и один из немногих, у кого есть реальный публичный урок о том, что идёт не так, когда агент читает данные, записанные злоумышленником.
Мы прочитали документацию Supabase и исходный код сервера 14 ноября 2026 года и прогнали версию пакета 0.17.0, выпущенную днём ранее, через MCP Inspector, чтобы посчитать, что на самом деле открывает каждая настройка. Мы также проверили hosted endpoint. Живой проект мы не подключали.
Hosted, локально или на своём стеке
| Hosted | npm-пакет | Supabase CLI | Self-hosted | |
|---|---|---|---|---|
| Где | https://mcp.supabase.com/mcp |
npx -y @supabase/mcp-server-supabase |
http://localhost:54321/mcp |
http://localhost:8080/mcp через SSH-туннель |
| Вход | OAuth, без токена | Personal access token | Не нужен | Не нужен |
| Инструменты | Полный набор | Полный набор, кроме нескольких, которым нужно hosted-подключение | Урезанный набор | Урезанный набор |
| Для чего | Большая часть работы | Клиенты без поддержки HTTP, CI | Локальная разработка | Собственный деплой Supabase |
Hosted-сервер — рекомендация по умолчанию, и на вашей машине для него ничего не нужно. Мы отправили ему неаутентифицированный запрос и получили 401 со ссылкой на его OAuth-метаданные, где в качестве сервера авторизации указан API Supabase, а скоупы идут от organizations:read до database:write. Вход в браузере берёт на себя ваш клиент. На экране согласия выберите организацию, которой принадлежит проект.
Одно ограничение OAuth на сегодня: согласие выдаёт полный набор скоупов. В анонсе Supabase говорилось, что более тонкие права запланированы; текущая документация по-прежнему утверждает, что для ручного OAuth-приложения нужны все скоупы. Personal access token может быть уже, и в документации Supabase перечислено, какое разрешение нужно каждому инструменту.
Установка
Все клиенты используют один и тот же URL. Чтобы ограничить его область, добавьте параметры, описанные ниже.
Claude Code:
claude mcp add --scope project --transport http supabase "https://mcp.supabase.com/mcp?project_ref=YOUR_REF&read_only=true"
Затем выполните claude /mcp в обычном терминале, выберите supabase и нажмите Authenticate.
Cursor, в .cursor/mcp.json:
{
"mcpServers": {
"supabase": {
"url": "https://mcp.supabase.com/mcp?project_ref=YOUR_REF&read_only=true"
}
}
}
VS Code, в .vscode/mcp.json, где используется servers:
{
"servers": {
"supabase": {
"type": "http",
"url": "https://mcp.supabase.com/mcp?project_ref=YOUR_REF&read_only=true"
}
}
}
Codex:
codex mcp add supabase --url "https://mcp.supabase.com/mcp?project_ref=YOUR_REF&read_only=true"
Затем codex mcp login supabase. В каталогах коннекторов Claude.ai и ChatGPT есть Supabase. В документации Supabase нет отдельных шагов для Claude Desktop или Windsurf; в README предлагается скопировать универсальную HTTP-запись в любой клиент, который там не указан.
URL можно собрать в дашборде: откройте проект, нажмите Connect и выберите вкладку MCP. Локальный пакет запускается так, токен передаётся в SUPABASE_ACCESS_TOKEN:
npx -y @supabase/mcp-server-supabase@latest --read-only --project-ref=YOUR_REF
Без токена он завершается с сообщением "Please provide a personal access token (PAT) with the --access-token flag or set the SUPABASE_ACCESS_TOKEN environment variable".
Что убирают параметры
Три параметра URL — или соответствующие флаги для локального пакета — определяют, что получит агент:
| Параметр Hosted URL | Локальный флаг | Эффект |
|---|---|---|
read_only=true |
--read-only |
Запросы выполняются от имени пользователя Postgres с правами только на чтение; инструменты записи скрыты |
project_ref=abc123 |
--project-ref=abc123 |
Только один проект; инструменты уровня аккаунта скрыты |
features=database,docs |
--features=database,docs |
Только эти группы инструментов |
Мы посчитали инструменты для каждой настройки на 0.17.0:
| Настройка | Инструменты |
|---|---|
| Все десять групп | 39 |
| Значения по умолчанию (storage выключен) | 36 |
| Значения по умолчанию с read-only | 22 |
| Read-only и ограничение одним проектом | 16 |
Read-only убрал 14 инструментов: create_project, pause_project, restore_project, apply_migration, deploy_edge_function, пять операций записи для веток, create_notebook, delete_notebook и два инструмента обратной связи. execute_sql остаётся, но сама база данных отклоняет запись, потому что запрос выполняется от имени роли только для чтения. Это надёжнее, чем фильтрация текста SQL.
Группы — все включены по умолчанию, кроме storage:
| Группа | Инструменты |
|---|---|
docs |
search_docs |
account |
список и получение организаций и проектов, get_cost, confirm_cost; создание, приостановка и восстановление проектов |
database |
list_tables, list_extensions, list_migrations, execute_sql, apply_migration |
debugging |
query_logs, get_advisors для рекомендаций по безопасности и производительности |
development |
get_project_url, get_publishable_keys, generate_typescript_types |
functions |
список, получение и развёртывание Edge Functions; установка секрета на размещённом сервере |
branching |
список, создание, удаление, слияние, сброс и перебазирование веток, на платных планах |
storage |
список бакетов, чтение и обновление конфигурации storage |
notebooks |
список, получение, запуск, создание и удаление SQL-ноутбуков |
feedback |
отправка отзывов в Supabase |
В старых руководствах упоминается get_logs; в 0.17.0 это query_logs. Отключение группы — самый простой шаг к безопасности: без functions инструмент развёртывания вообще не попадает к модели.
Что произошло в июле 2025 года
6 июля 2025 года Simon Willison описал демонстрацию от General Analysis под заголовком «Supabase MCP может слить всю вашу базу данных SQL». Сценарий был таким: приложение поддержки. Агент разработчика в Cursor использовал Supabase MCP с ключом service_role, который обходит row-level security. Атакующий отправил обращение в поддержку через публичную форму, и текст обращения был адресован ИИ напрямую: в нём содержалась просьба прочитать приватную таблицу integration_tokens и опубликовать её содержимое обратно в обращении. Когда разработчик попросил агента просмотреть открытые обращения, тот так и сделал.
Willison назвал это «смертельной триадой»: приватные данные, контакт с текстом, который контролирует атакующий, и способ отправить данные наружу — всё в одном агенте.
Supabase ответила в сентябре 2025 года. Компания заявила, что заголовок преувеличивает риск, что в демонстрации использовалась привилегированная роль в локальной среде и что ни один клиент не сообщал об утечке через MCP. Там также сказали, что собственные меры защиты «снизили риск, но не устранили его» и что «одних ограничений недостаточно». Эти меры теперь и есть варианты выше: режим только для чтения, ограничение областью проекта и группы функций. Сервер также оборачивает каждый результат SQL в границу, помеченную случайным ID, и добавляет примечание, которое велит модели не следовать инструкциям внутри него. Supabase называет эту обёртку «не гарантирующей полную защиту».
Режим только для чтения стоит понимать точно. В демонстрации он остановил бы последний шаг — запись украденных данных обратно в обращение. Но он не помешал бы агенту прочитать приватную таблицу и передать её содержимое разработчику или в любой другой инструмент, до которого агент мог дотянуться.
Безопасная настройка, по порядку
- Не production, если этого можно избежать. Текущая формулировка Supabase — подключаться к production «только когда задача требует данных из production». Проект для разработки или ветка — более разумный вариант по умолчанию.
- Ограничьте область.
project_refудерживает агента в пределах одного проекта. - Только чтение по умолчанию. Включайте запись для тех сессий, где она нужна.
- Меньше групп.
features=database,docsпокрывает большинство задач со схемой и запросами. - Оставляйте подтверждение включённым. Документация Supabase советует проверять каждый вызов инструмента; не используйте «всегда одобрять» для этого сервера. Формы подтверждения для деструктивного SQL появляются только в клиентах, которые их поддерживают, а Supabase называет их «ограждением, а не гарантией».
- Никогда не давайте его клиентам. Он работает с вашими правами разработчика.
Для задач без участия человека Supabase советует заранее одобрять только инструменты чтения в пределах проекта, а при необходимости записи останавливать задачу и сообщать об этом. Подробнее об общей проблеме — в разделе Безопасность MCP.
Skills и плагины
Помимо MCP server, Supabase публикует agent skills с рекомендациями по лучшим практикам Supabase и Postgres: npx skills add supabase/agent-skills — или в Claude Code через его plugin marketplace. Собственная запись MCP в репозитории skills указывает на https://mcp.supabase.com/mcp?features=docs — только документация, без доступа к базе данных. Разумное значение по умолчанию, если вам нужны лишь точные ответы по Supabase.
Когда это не работает
| Что вы видите | Причина | Решение |
|---|---|---|
| 401 от hosted-сервера | Нет входа в систему | Выполните шаг аутентификации вашего клиента, например claude /mcp |
| «Please provide a personal access token» | Локальный пакет без токена | Задайте SUPABASE_ACCESS_TOKEN или передайте --access-token |
| Инструмент из руководства отсутствует | Режим только для чтения, отсутствующая группа функций или переименованный инструмент | Проверьте таблицы выше; get_logs теперь называется query_logs |
| Агент не видит ваши другие проекты | Задан project_ref |
Так и задумано; удалите его, только если вам нужны инструменты уровня аккаунта |
| Запись завершается ошибкой прав доступа | read_only=true |
Так и задумано; используйте отдельную запись без ограничения области для сессий записи |
| Нет инструментов хранилища | Хранилище по умолчанию отключено | Добавьте storage в features |
Меньше инструментов на localhost:54321 |
CLI предоставляет только часть | Используйте hosted-сервер для полного набора |
Серверы Supabase из нашего каталога с оценками проверок перечислены в начале этой страницы. Для обычных баз данных Postgres см. Postgres MCP servers.