Skip to content
Назад в блог
Руководство5 мин чтения

Supabase, Vercel и RevenueCat внутри Claude Code: MCP-сетап, на котором построен Council

Как я подключил Supabase, Vercel и RevenueCat к Claude Code через MCP во время работы над Council — точный сетап для каждого сервиса и три гостевых пропуска.

Claude CodeMCPSupabaseVercelRevenueCat
Supabase, Vercel, RevenueCat, MCP и Claude Code, подключённые к мобильному приложению Council

Когда я писал о том, как устроен Council, речь шла об архитектуре: один бэкенд на Next.js + Supabase, веб-приложение, приложение на Expo, два платёжных провайдера, сведённые в одну таблицу подписок. Но я не рассказал, как всё это строилось день за днём — а честный ответ в том, что заметная часть работы вообще не происходила в редакторе. Она происходила в дашбордах: SQL-редактор Supabase, страница деплоев Vercel, каталог продуктов RevenueCat.

MCP (Model Context Protocol) — это то, что сложило эти дашборды прямо в мой терминал. Это открытый стандарт, который позволяет сервисам открывать свои API ИИ-ассистенту, и Claude Code поддерживает его из коробки. Как только Supabase, Vercel и RevenueCat были подключены, «проверь схему», «посмотри логи деплоя» и «создай продукты для iOS» перестали быть переключением вкладок и стали просто фразами. Этот пост — сетап всех трёх, ровно в том виде, в каком его использует Council.

Supabase: база данных как собеседник

У Supabase есть хостируемый MCP-сервер, так что устанавливать ничего не нужно. Он прописывается в .mcp.json проекта (файл лежит в репозитории, так что каждая сессия получает его автоматически):

{
  "mcpServers": {
    "supabase": {
      "type": "http",
      "url": "https://mcp.supabase.com/mcp?project_ref=<your-project-ref>"
    }
  }
}

Первое использование открывает OAuth-вход в браузере — и на этом настройка закончена. Две детали важнее, чем кажутся:

  • Ограничьте область через project_ref. Без него MCP видит все проекты вашей организации в Supabase. С ним Claude может трогать только базу этого проекта. Если вы работаете над несколькими продуктами в соседних папках (как я), это разница между «ассистент с доступом к одной базе» и «ассистент с доступом ко всем сразу».
  • Добавьте read-only-инструменты в allowlist. В .claude/settings.json Council разрешает list_tables и list_migrations без подтверждения, а всё, что пишет в базу, по-прежнему спрашивает. Об этом ниже.

Как это выглядит на практике: работая над фичей сессий, я мог спросить «как сейчас выглядит таблица sessions и есть ли индекс на anon_id?» — и получить ответ из живой базы, а не из потенциально устаревшего файла миграции. Проверки схемы, быстрые read-запросы, раскопки в логах после упавшего вебхука, security-advisors, которые подсвечивают отсутствующие RLS-политики, — всё это не выходя из разговора, в котором пишется код. Когда Claude Code сверяет файл миграции с реально задеплоенной схемой и ловит расхождение — это то, что раньше требовало от меня достаточной подозрительности, чтобы вообще пойти проверить.

Vercel: деплои и переменные окружения без лишней вкладки

У Vercel тоже есть хостируемый MCP-эндпоинт. Регистрируется одной командой:

claude mcp add --transport http vercel https://mcp.vercel.com

Как и Supabase, при первом использовании он авторизуется через OAuth. Вдобавок Vercel выпускает официальный плагин для Claude Code, который поверх MCP добавляет скиллы — /vercel:deploy, /vercel:env, /vercel:status — так что типовые сценарии превращаются в одну slash-команду вместо абзаца инструкций.

Продакшен-деплой Council — это скрипт в репозитории (npm run deploy:web), но всё вокруг деплоя — как раз то место, где интеграция окупается: посмотреть, почему упал preview-билд, и почитать его логи; сравнить переменные окружения между локальным .env.local и тем, что реально стоит в продакшене; убедиться, что деплой подхватил новую переменную, прежде чем двадцать минут отлаживать «почему этот ключ undefined». Дрейф окружений между локальной машиной и продакшеном — из тех классов багов, что тривиальны, когда посмотришь, и сводят с ума, когда нет. Теперь «посмотреть» стоит одно предложение.

RevenueCat: весь каталог покупок — в диалоге

Вот это удивило меня больше всего. У RevenueCat есть и хостируемый MCP-сервер, и официальный плагин для Claude Code (плагин — более приятный путь: он включает скиллы для типовых задач вроде интеграции пейволла и sandbox-тестирования). Хостируемый сервер авторизуется секретным API-ключом v2, ограниченным одним проектом:

claude mcp add --transport http revenuecat https://mcp.revenuecat.ai/mcp \
  --header "Authorization: Bearer sk_..."

Все, кто настраивал внутриигровые покупки, знают этот танец: products, entitlements, offerings, packages — каждый создаётся в правильном порядке, каждый ссылается на остальные, и всё это размазано по экранам дашборда. С подключённым MCP каталог мобильных подписок Council настраивался как диалог — «создай entitlement pro, привяжи месячный и годовой продукты, положи их в default offering» — а Claude Code делал эквивалент всех кликов через API и зачитывал состояние обратно для проверки. Он же умеет проверять статус продуктов в сторах и вытаскивать метрики выручки, что превращает «как конвертируются триалы» в вопрос, а не в сеанс построения отчётов.

Для Council это особенно хорошо ложится на архитектуру из прошлого поста: вебхуки RevenueCat пишут в ту же таблицу subscriptions в Supabase, что и Stripe. А значит, один ассистент, подключённый к обоим концам, может проследить покупку от события RevenueCat до строки, которая открывает пейволл. Отладка через границы двух SaaS в одном разговоре честно ощущается как чит.

Гигиена разрешений: чтение свободно, запись спрашивает

Часть, которую я советую скопировать каждому: MCP-инструменты проходят через ту же систему разрешений, что и всё остальное в Claude Code, и на её настройку стоит потратить пять минут. .claude/settings.json в Council заносит безобидные read-only-инструменты в allowlist, чтобы они не прерывали поток:

{
  "permissions": {
    "allow": [
      "mcp__supabase__list_tables",
      "mcp__supabase__list_migrations",
      "mcp__plugin_RevenueCat_RevenueCat__list-projects",
      "mcp__plugin_RevenueCat_RevenueCat__list-products",
      "mcp__plugin_RevenueCat_RevenueCat__get-product-store-state"
    ]
  }
}

Всё, что меняет состояние, — пишущий SQL, создание продуктов, деплои — по-прежнему спрашивает подтверждение. Именно это разделение делает весь сетап комфортным: ассистент может свободно смотреть на продакшен, а трогать его — только с моим пальцем на кнопке.

Место, где я хвалю инструмент, потому что он это заслужил

Я перепробовал много ИИ-инструментов для разработки, и Claude Code — тот, который перестал ощущаться инструментом. Отчасти дело в модели, но в большей степени — именно в этой истории с интеграциями: он приходит туда, где живёт ваш стек. MCP-серверы выше, система разрешений, которая делает их безопасными, скиллы, упаковывающие рабочие процессы, плагины от самих вендоров — всё это компонуется как хорошая инфраструктура, а не как демо. Council — продукт из двух приложений с настоящим бэкендом, настоящими платежами и настоящими релизами в сторах, построенный в одиночку, и я не думаю, что «в одиночку» было бы правдой без него. Это самое близкое, что у меня было, к коллеге, который прочитал все дашборды, помнит каждую схему и никогда не устаёт от вопроса «стоп, а почему этой переменной окружения нет?».

Три гостевых пропуска, если вы сомневаетесь

Если вы всё откладывали знакомство с Claude Code — у меня есть три гостевых пропуска, кто первый успел:

Забрать гостевой пропуск →

Подключите его к своим аналогам Supabase/Vercel/RevenueCat и дайте ему настоящую задачу, а не игрушечную. Именно в этот момент всё щёлкает. А если вы строите что-то вроде Council — веб-приложение, мобильное приложение, один бэкенд, настоящие подписки — напишите мне: доводить такие продукты до продакшена под ключ — это то, чем я занимаюсь.