У PostgreSQL богатые метаданные: системные каталоги, pg_stat_*, планы выполнения, расширения. MCP-сервер даёт AI-агенту доступ ко всему этому напрямую: агент сам смотрит схему, выполняет запросы, читает EXPLAIN и предлагает индексы. Ниже — какие MCP-серверы для PostgreSQL стоит рассмотреть, как их подключить и как не дать агенту навредить базе.
Экосистема MCP меняется быстро: названия пакетов, флаги и набор инструментов у серверов обновляются. Перед установкой сверяйтесь с README в репозитории.
Что MCP даёт разработчику PostgreSQL
Без MCP AI знает о вашей базе только то, что вы вставите в чат: DDL, вывод pg_stat_statements, EXPLAIN ANALYZE. Это долго и неполно.
С MCP агент может:
- видеть реальную схему таблиц, индексов, представлений и функций;
- выполнять SELECT-запросы для анализа данных;
- читать метрики из
pg_stat_*; - разбирать планы выполнения и предлагать оптимизации;
- в зависимости от сервера и режима — создавать таблицы, индексы и применять миграции.
Обзор MCP-серверов для PostgreSQL
1. Postgres MCP Pro (Crystal DBA)
Репозиторий: github.com/crystaldba/postgres-mcp, Docker-образ: crystaldba/postgres-mcp.
Открытый сервер, ориентированный на анализ и настройку производительности, а не только на выполнение запросов.
Основные возможности:
- рекомендации по индексам на основе нагрузки из
pg_stat_statements; - получение и разбор планов выполнения;
- проверки здоровья базы: vacuum, bloat, cache hit ratio, долгие транзакции и т. п.;
- два режима доступа:
restricted(только чтение, запросы в read-only транзакциях) иunrestricted.
Конфигурация для Claude Desktop:
{
"mcpServers": {
"postgres-pro": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "DATABASE_URI",
"crystaldba/postgres-mcp",
"--access-mode=restricted"
],
"env": {
"DATABASE_URI": "postgresql://mcp_reader:password@host.docker.internal:5432/mydb"
}
}
}
}
Для production используйте restricted. Примеры запросов к агенту:
— Какие запросы занимают больше всего времени?
— Есть ли неиспользуемые индексы?
— Объясни, почему этот запрос медленный:
SELECT * FROM orders o JOIN users u ON o.user_id = u.id
WHERE o.created_at > NOW() - INTERVAL '7 days'
— Предложи индексы для таблицы orders.
2. pgEdge Postgres MCP Server
Компания pgEdge выпустила собственный MCP-сервер для PostgreSQL с открытым кодом. Он работает со стандартным PostgreSQL и с дистрибутивами pgEdge. Набор возможностей, формат конфигурации и поддерживаемые версии PostgreSQL смотрите в актуальном репозитории pgEdge на GitHub — проект молодой и меняется.
Имеет смысл, если вы уже используете pgEdge или вам нужна поддержка от вендора.
3. Supabase MCP Server
Пакет: @supabase/mcp-server-supabase, документация — в разделе MCP на supabase.com.
Если проект на Supabase, официальный сервер — очевидный выбор: он работает не только с базой, но и с платформой. Среди инструментов: просмотр таблиц и расширений, выполнение SQL, применение миграций, логи, рекомендации советников по безопасности и производительности, генерация TypeScript-типов, работа с Edge Functions. Есть флаг --read-only и привязка к одному проекту через --project-ref.
Подключение использует персональный токен доступа (Dashboard → Account → Access Tokens), а не service role key:
{
"mcpServers": {
"supabase": {
"command": "npx",
"args": [
"-y",
"@supabase/mcp-server-supabase@latest",
"--read-only",
"--project-ref=<project-ref>"
],
"env": {
"SUPABASE_ACCESS_TOKEN": "<personal-access-token>"
}
}
}
}
Supabase также предлагает удалённый (hosted) MCP-сервер с авторизацией через браузер — проверьте актуальный способ подключения в документации.
Примеры запросов:
— Создай миграцию: таблица posts (id, title, content, author_id → users, published, created_at)
— Добавь RLS-политику: пользователь видит свои посты и все опубликованные
— Найди таблицы без включённого RLS
Если вы ищете замену Supabase с хостингом в России, посмотрите аналоги Supabase.
4. Референсный сервер @modelcontextprotocol/server-postgres
Ранее в репозитории modelcontextprotocol/servers был простой референсный сервер для PostgreSQL: список таблиц, схема и выполнение запросов в read-only транзакции. Сейчас он перенесён в архив и не поддерживается. Он встречается во множестве старых инструкций, но для новых проектов лучше выбрать поддерживаемый сервер из списка выше.
5. MCP Toolbox for Databases (Google)
Открытый проект Google (googleapis/genai-toolbox). Работает с Cloud SQL, AlloyDB и обычным PostgreSQL, а также с другими СУБД. Инструменты описываются в конфигурационном файле tools.yaml: вы сами задаёте, какие именно SQL-запросы может вызывать агент. Это удобно, когда нужно дать агенту ограниченный набор заранее одобренных операций вместо произвольного SQL.
Подходит командам в Google Cloud и тем, кому нужен строгий контроль над тем, что выполняет агент.
Сравнение
| Параметр | Postgres MCP Pro | Supabase MCP | MCP Toolbox | Референсный сервер |
|---|---|---|---|---|
| Анализ производительности | Да, основной фокус | Советники Supabase | Если описать инструменты | Нет |
| Рекомендации по индексам | Да | Нет | Нет | Нет |
| Read-only режим | --access-mode=restricted | --read-only | Определяется набором инструментов | Да |
| Миграции и DDL | В unrestricted-режиме | Да | Если описать инструменты | Нет |
| Привязка к платформе | Любой PostgreSQL | Только Supabase | Любой PostgreSQL, GCP | Любой PostgreSQL |
| Статус | Поддерживается | Поддерживается | Поддерживается | В архиве |
Как выбрать
- Оптимизация и работа DBA — Postgres MCP Pro.
- Проект на Supabase — Supabase MCP.
- Нужен фиксированный набор разрешённых запросов или GCP — MCP Toolbox for Databases.
- Используете pgEdge — сервер pgEdge.
Пошаговая настройка Postgres MCP Pro
Шаг 1. Создайте read-only пользователя
CREATE ROLE mcp_reader WITH LOGIN PASSWORD 'secure-random-password';
GRANT CONNECT ON DATABASE mydb TO mcp_reader;
GRANT USAGE ON SCHEMA public TO mcp_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO mcp_reader;
-- Доступ к системной статистике для анализа производительности
GRANT pg_monitor TO mcp_reader;
ALTER DEFAULT PRIVILEGES действует только на таблицы, которые в будущем создаст роль, выполнившая команду. Если миграции запускает другая роль, добавьте FOR ROLE <migration_role>.
Шаг 2. Проверьте подключение
docker pull crystaldba/postgres-mcp
docker run -it --rm \
-e DATABASE_URI="postgresql://mcp_reader:secure-password@host.docker.internal:5432/mydb" \
crystaldba/postgres-mcp \
--access-mode=restricted
Шаг 3. Подключите MCP-клиент
Claude Desktop: файл ~/Library/Application Support/Claude/claude_desktop_config.json на macOS или %APPDATA%\Claude\claude_desktop_config.json на Windows. Конфигурация — как в примере выше.
Claude Code:
claude mcp add postgres-pro \
-e DATABASE_URI="postgresql://mcp_reader:secure-password@host.docker.internal:5432/mydb" \
-- docker run -i --rm -e DATABASE_URI crystaldba/postgres-mcp --access-mode=restricted
При запуске в Docker на macOS и Windows используйте host.docker.internal вместо localhost, чтобы достучаться до PostgreSQL на хост-машине. На Linux добавьте --add-host=host.docker.internal:host-gateway или используйте сеть Docker.
Шаг 4. Проверьте
Перезапустите клиент и попросите: «Покажи все таблицы в базе». Если агент вернул список — сервер работает.
Продвинутые сценарии
Аудит базы
— Какие роли имеют права superuser?
— Есть ли таблицы без первичных ключей?
— Какие индексы не используются (idx_scan = 0)?
— Какие запросы в среднем выполняются дольше секунды?
Производительность
— Какие таблицы требуют VACUUM? Оцени bloat.
— Есть ли дублирующиеся индексы?
— Какой cache hit ratio? Хватает ли shared_buffers?
Разработка
— Спроектируй таблицу аудита: кто, что, когда, откуда.
— Предложи индексы под фильтрацию по user_id, created_at и status.
— Как хранить дерево категорий: ltree, adjacency list или closure table?
Безопасность
Отдельный пользователь с минимальными правами обязателен. Никогда не подключайте MCP под postgres или другим суперпользователем.
CREATE ROLE mcp_ai WITH LOGIN PASSWORD 'long-random-password';
GRANT CONNECT ON DATABASE production TO mcp_ai;
GRANT USAGE ON SCHEMA public TO mcp_ai;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_ai;
GRANT pg_monitor TO mcp_ai;
-- Защита от тяжёлых запросов агента
ALTER ROLE mcp_ai SET statement_timeout = '30s';
ALTER ROLE mcp_ai SET default_transaction_read_only = on;
default_transaction_read_only — дополнительная страховка, но не замена правам: пользователь может переключить её в своей сессии. Основная защита — отсутствие прав на запись.
Подключайтесь по TLS, если база доступна по сети:
postgresql://mcp_ai:password@db.example.com:5432/mydb?sslmode=require
Не открывайте PostgreSQL в интернет ради MCP. Используйте VPN, приватную сеть или SSH-туннель:
ssh -N -L 5433:localhost:5432 user@db-server.example.com
# затем DATABASE_URI="postgresql://mcp_ai:password@localhost:5433/mydb"
Для агентов с правом записи держите включённым ручное подтверждение каждого вызова инструмента и не давайте им доступ к production без необходимости. Подробнее о рисках — в статье что делать, если ИИ стёр базу данных.
Резервное копирование PostgreSQL при работе с агентами
Даже read-only агент может предложить DROP или «исправляющую» миграцию, которую вы подтвердите не глядя. Поэтому перед тем как дать агенту права на запись, настройте регулярный pg_dump и проверьте восстановление.
Минимальный вариант — дамп в plain SQL перед рискованной сессией и по расписанию:
pg_dump --format=plain --no-owner "$DATABASE_URL" > /var/backups/mydb.sql
Расписание через cron, выгрузка в Yandex Object Storage или Selectel и ротация разобраны в статье бэкап PostgreSQL через pg_dump в S3.
dbsend не подключается к вашему серверу и не запускает pg_dump сам: вы делаете дамп на своей стороне, а CLI загружает его как новую версию:
dbsend backup /var/backups/mydb.sql -d "$DBSEND_DATABASE_ID" -e postgresql_dump -l before-agent-session
Для plain-дампов dbsend показывает схему, таблицы и число строк и сравнивает версии — видно, что изменилось после сессии с агентом. У dbsend есть и собственный MCP-сервер: агент может проверить статус бэкапов и найти нужную версию, а скачивание для восстановления требует явного подтверждения. Подробнее — на странице бэкапы через MCP и в статье бэкапы базы через MCP из Claude Code и Cursor.
Частые вопросы
Какой MCP-сервер для PostgreSQL выбрать?
Для анализа и оптимизации — Postgres MCP Pro. Для проектов на Supabase — Supabase MCP. Для строго ограниченного набора запросов и GCP — MCP Toolbox for Databases. Референсный сервер из modelcontextprotocol/servers в архиве, для новых проектов его лучше не брать.
Работает ли MCP с managed PostgreSQL (Yandex Cloud, Selectel, RDS, Cloud SQL)?
Да, MCP-серверы подключаются по обычной строке подключения. Нужно обеспечить сетевой доступ (лучше через приватную сеть или туннель) и TLS, а пользователю выдать только нужные права.
Как проверить, что MCP-сервер подключился?
Перезапустите клиент и попросите показать список таблиц. В Claude Code состояние серверов видно по команде /mcp. Логи Claude Desktop на macOS лежат в ~/Library/Logs/Claude/ (файлы mcp*.log).
Может ли агент через MCP изменить структуру таблиц?
Если у пользователя базы нет прав на DDL, а сервер запущен в read-only режиме, — нет. В unrestricted-режиме и с правами на запись — да. Для production используйте read-only, а запись разрешайте только в dev-окружении.
Работает ли Postgres MCP Pro с PostgreSQL в Docker?
Да. Если оба контейнера в одной Docker-сети, укажите имя сервиса PostgreSQL как хост. Если PostgreSQL в Docker с пробросом порта, а MCP-сервер тоже в контейнере, используйте host.docker.internal.
Поддерживаются ли pgvector и PostGIS?
MCP-серверы работают со всем, что доступно через SQL, поэтому запросы к pgvector и PostGIS агент может составлять и выполнять, зная схему. Специальных инструментов для этих расширений в перечисленных серверах, как правило, нет.



