MCP-сервер · Базы данных
Postgres MCP Pro
MCP-сервер сообщества Crystal DBA для PostgreSQL: выполняет SQL, показывает планы запросов, проверяет здоровье базы и подбирает индексы. Работает в режиме полного доступа для разработки или в ограниченном режиме только для чтения.
Сверено 21 октября 2026 г.
Что умеет сервер
Postgres MCP Pro выпускает компания Crystal DBA, это открытый проект сообщества, а не сервер от разработчиков самой PostgreSQL. Он написан на Python, опубликован как пакет postgres-mcp и как Docker-образ crystaldba/postgres-mcp. В отличие от простых серверов, которые только выполняют запросы, этот добавляет инструменты для диагностики: список схем и объектов, подробности о таблице (столбцы, ограничения, индексы), выполнение SQL, план запроса через explain_query, самые медленные запросы по данным pg_stat_statements, рекомендации по индексам для всей нагрузки или для десятка выбранных запросов и общую проверку здоровья базы.
Проверка здоровья охватывает кеш буферов, подключения, ограничения, дублирующиеся, неиспользуемые и невалидные индексы, пределы последовательностей и состояние вакуума. Для подбора индексов сервер использует расширение hypopg: он моделирует, как планировщик PostgreSQL построит план после добавления индекса, и сравнивает выигрыш в скорости с ценой хранения. Авторы подчёркивают, что эти проверки детерминированные, а не догадки модели.
Когда использовать
Сервер полезен, когда приложение стало медленно работать с базой и нужно понять почему: агент найдёт тяжёлые запросы, покажет план, предложит индексы и проверит их эффект до того, как вы их создадите. Он же подойдёт на этапе разработки, когда агенту нужна точная схема, чтобы писать корректный SQL, например при работе с ORM в Cursor. README приводит такой пример: приложение с медленным кодом SQLAlchemy ускорили за несколько минут.
Для индексной диагностики придётся подключить расширения pg_stat_statements и hypopg, на managed-сервисах AWS RDS, Azure SQL и Google Cloud SQL их достаточно включить командой CREATE EXTENSION.
Ограничения и безопасность
Сервер умеет работать в двух режимах доступа. В режиме unrestricted агент может читать и менять данные и схему, это вариант для разработки. В режиме restricted разрешены только транзакции на чтение, а время выполнения ограничено, этот режим авторы рекомендуют для продакшена. Чтобы агент не обошёл защиту командами COMMIT или ROLLBACK, сервер разбирает SQL библиотекой pglast и отклоняет такие операторы. README честно оговаривает слабое место: если в базе включены небезопасные процедурные языки, защиту на чтение можно обойти, поэтому для боевых данных надёжнее ещё и завести отдельного пользователя только с правом чтения.
Строка подключения передаётся при запуске, обычно в конфигурации клиента. Авторы замечают, что мало какие клиенты хранят такие конфигурации безопасно, а пароль в чате или в аргументах инструмента попадает в историю диалога, так что не вставляйте боевые пароли в чат. Проект тестируется на PostgreSQL 15, 16 и 17, поддержку версий с 13 по 17 планируют. Для запуска нужен Docker либо Python 3.12 и новее. Экспериментальный подбор индексов силами модели требует ключа OPENAI_API_KEY.
Установка
Docker
Скачайте образ:
docker pull crystaldba/postgres-mcpPython
С pipx:
pipx install postgres-mcpЛибо с uv:
uv pip install postgres-mcpClaude Desktop
Откройте файл конфигурации (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json, Windows: %APPDATA%/Claude/claude_desktop_config.json) и добавьте сервер в раздел mcpServers. Вариант с Docker:
{
"mcpServers": {
"postgres": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DATABASE_URI",
"crystaldba/postgres-mcp",
"--access-mode=unrestricted"
],
"env": {
"DATABASE_URI": "postgresql://username:password@localhost:5432/dbname"
}
}
}
}Вариант с uvx:
{
"mcpServers": {
"postgres": {
"command": "uvx",
"args": [
"postgres-mcp",
"--access-mode=unrestricted"
],
"env": {
"DATABASE_URI": "postgresql://username:password@localhost:5432/dbname"
}
}
}
}Для продакшена замените --access-mode=unrestricted на --access-mode=restricted: тогда разрешены только транзакции на чтение.
Cursor и Windsurf
Конфигурация похожа на ту, что для Claude Desktop. В Cursor откройте Command Palette, затем Cursor Settings и вкладку MCP. В Windsurf откройте Command Palette и выберите Open Windsurf Settings Page.
Если сервер запущен по SSE (--transport=sse), например так:
docker run -p 8000:8000 \
-e DATABASE_URI=postgresql://username:password@localhost:5432/dbname \
crystaldba/postgres-mcp --access-mode=unrestricted --transport=sseто в mcp.json Cursor указывается адрес сервера:
{
"mcpServers": {
"postgres": {
"type": "sse",
"url": "http://localhost:8000/sse"
}
}
}В mcp_config.json Windsurf формат немного другой:
{
"mcpServers": {
"postgres": {
"type": "sse",
"serverUrl": "http://localhost:8000/sse"
}
}
}Расширения для индексов
Чтобы работали подбор индексов и анализ нагрузки, включите расширения в базе:
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE EXTENSION IF NOT EXISTS hypopg;Совместимые клиенты
- Claude Desktop
- Cursor
- Windsurf
- Goose
- Qodo Gen