Postgres MCP Pro
Provides database administration and optimization tools for PostgreSQL, including schema inspection, SQL execution with read-only support, EXPLAIN query plans, index analysis, health checks, slow query analysis, table sizes, and lock monitoring.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Postgres MCP Pro Analyze my database for performance issues and recommend indexes."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
📘 Postgres MCP Pro — сервер MCP для PostgreSQL
🔎 Обзор
Postgres MCP Pro — это open-source сервер Model Context Protocol (MCP), предназначенный для помощи разработчикам и AI-агентам на всех этапах разработки: от начального кода и тестирования до деплоя и продакшн-оптимизации.
🙌 Основано на crystaldba/postgres-mcp (MIT, © 2025 Crystal Corp / Johann Schleier-Smith). Форк развивается и поддерживается sparta2025 — автономный MCP-сервер, Gradio-оболочка, LLM-чат с tool-calling, сертификаты шифрования.
📚 Полная документация: docs/DOCUMENTATION.md — развёртывание (Docker/облако), Gradio-оболочка, подключение клиентов (stdio/SSE), все инструменты и переменные окружения.
Отличается от простого подключения к базе данных следующими возможностями:
Анализ состояния БД: индекс, буферный кэш, autovacuum, последовательности, репликация и др.
Оптимизация индексов: автоматический подбор лучших индексов с помощью промышленных алгоритмов.
Планы выполнения: EXPLAIN и симуляция с гипотетическими индексами.
Интеллект схемы: генерация SQL с учётом структуры базы.
Безопасное выполнение SQL: поддержка режима только для чтения и защита в продакшне.
Поддерживает транспорты: stdio и SSE.
Запуск проекта и причины его создания
Related MCP server: Postgres Scout MCP
📺 Демонстрация
От медленного к молниеносному AI сгенерировал приложение на SQLAlchemy ORM — но оно было слишком медленным. Postgres MCP Pro с Cursor решил проблему за считанные минуты.
🚀 Оптимизация ORM-запросов, индексации и кэширования
🛠️ Исправление сломанной страницы
🧠 Улучшение вывода "топ-фильмов" путём анализа данных и корректировки запросов
👉 Подробнее: movie-app.md
⚡ Быстрый старт
Требования:
Доступ к вашей базе данных PostgreSQL
Docker или Python 3.12+
Удостоверьтесь в доступе:
Пример — подключение через psql или pgAdmin
💡 Для запуска через
docker composeзаранее создайте пустые файлы хранилищ подключений (иначе Docker смонтирует каталоги вместо файлов):touch connections.json llm_connections.json
Установка
🐳 Docker
docker pull crystaldba/postgres-mcp🐍 Python (через pipx)
pipx install postgres-mcp-proили через uv:
uv pip install postgres-mcp-proКонсольная команда после установки —
postgres-mcp(автономный MCP-сервер, stdio по умолчанию;--transport sseдля SSE).
⚙️ Настройка AI-ассистента (на примере Claude Desktop)
Откройте конфигурационный файл:
MacOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%/Claude/claude_desktop_config.json
Пример конфигурации:
Через 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"
}
}
}
}Через pipx
{
"mcpServers": {
"postgres": {
"command": "postgres-mcp",
"args": ["--access-mode=unrestricted"],
"env": {
"DATABASE_URI": "postgresql://username:password@localhost:5432/dbname"
}
}
}
}Через uv
{
"mcpServers": {
"postgres": {
"command": "uv",
"args": [
"run", "postgres-mcp", "--access-mode=unrestricted"
],
"env": {
"DATABASE_URI": "postgresql://username:password@localhost:5432/dbname"
}
}
}
}Режимы доступа:
--access-mode=unrestricted: полный доступ (dev)--access-mode=restricted: только чтение (prod)
⚠️ Флаг
--access-modeподдерживает только легаси-сервер (python -m postgres_mcp.server). Автономный MCP-сервер (postgres_mcp.autonomous.mcp_server) всегда выполняет переданный SQL; разграничение делайте на стороне пользователя БД.
🔄 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Пример для Cursor:
{
"mcpServers": {
"postgres": {
"type": "sse",
"url": "http://localhost:8000/sse"
}
}
}🧩 Установка расширений (опционально)
Нужно для:
pg_stat_statements— для анализа запросовhypopg— симуляция индексов
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE EXTENSION IF NOT EXISTS hypopg;🧪 Примеры использования
Проверка БД: "Check the health of my database..."
Медленные запросы: "What are the slowest queries..."
Рекомендации: "How can I make it faster?"
Индексы: "Suggest indexes to improve performance"
Оптимизация запроса: "Help me optimize this query: SELECT ..."
📡 MCP API (интерфейс)
Автономный сервер (postgres_mcp.autonomous.mcp_server) предоставляет 15 MCP tools:
Tool | Назначение |
| Список схем БД |
| Список таблиц, представлений и т.п. |
| Подробности по объекту |
| Выполнение SQL |
| EXPLAIN план запроса |
| Здоровье БД по множеству метрик |
| Самые медленные запросы (pg_stat_statements) |
| Анализ использования индексов |
| Выполняющиеся запросы |
| Размеры таблиц/индексов |
| Текущие блокировки |
| Форматирование SQL (sqlparse) |
| Версия, размер БД, расширения, uptime |
| Управление Fernet-сертификатами |
| Список всех инструментов сервера |
📌 Отличия от других MCP-серверов
Postgres MCP Pro | Другие MCP-серверы |
✅ Проверки здоровья с гарантией | ❌ Генерация LLM |
✅ Оптимизация индексов алгоритмом | ❌ Гипотетические советы |
✅ Симуляции EXPLAIN | ❌ "Попробуй сам" |
✅ Детальный workload-анализ | ❌ Нет анализа запросов |
🧠 Почему нужны инструменты MCP?
LLM отлично справляется с генерацией SQL, но медленно, дорого и непредсказуемо. Оптимизация БД давно решается алгоритмами. MCP Pro сочетает лучшее от LLM и классических алгоритмов.
🛠️ Технические заметки (ключевые моменты)
Индексы: использование
pg_stat_statements, генерация кандидатов, анализ черезhypopgLLM-оптимизация: экспериментальная, с использованием OpenAI API (
OPENAI_API_KEY)Здоровье БД: адаптация проверок из PgHero
Библиотека подключения:
psycopg3сlibpqБезопасность SQL: чтение, защита от
ROLLBACK; DROP ...Интеграция со схемой: передаёт схему агенту через инструменты, а не ресурсы
Конфигурация соединений: через переменные среды
Dev-сборка:
uv,pip, запуск с локальной БД
Available Tools
15 toolsanalyze_db_healthB
Database health overview.
Args:
health_type: Принимается для совместимости со старой схемой
инструмента, но пока не используется — отчёт всегда
включает все проверки (default: "all").
database_url: Database URL (optional, uses DATABASE_URL from .env if omitted).
Inputs: health_type, database_url.
analyze_index_performanceA
Analyze index usage and find unused/duplicate indexes.
Args:
schema_name: Schema to analyze (default: "public").
database_url: Database URL (optional, uses DATABASE_URL from .env if omitted).
Inputs: schema_name, database_url.
execute_sqlB
Execute a SQL query.
Args:
sql: SQL statement to execute.
database_url: Database URL (optional, uses DATABASE_URL from .env if omitted).
Inputs: sql (required), database_url.
explain_queryA
Get query execution plan.
Args:
sql: SQL statement to explain.
analyze: If true, actually executes the query for real timing data
(default: value of EXPLAIN_ANALYZE in .env, normally false).
WARNING: true really runs the query, including any
INSERT/UPDATE/DELETE it contains — use with care.
database_url: Database URL (optional, uses DATABASE_URL from .env if omitted).
Inputs: sql (required), analyze, database_url.
format_sql_queryB
Format/beautify a SQL query for readability.
Args:
sql: Raw SQL text to format.
Inputs: sql (required).
get_active_queriesA
List currently running queries and their duration.
Args:
database_url: Database URL (optional, uses DATABASE_URL from .env if omitted).
Inputs: database_url.
get_database_infoA
Get general database information: version, size, extensions, server settings.
Args:
database_url: Database URL (optional, uses DATABASE_URL from .env if omitted).
Inputs: database_url.
get_database_locksA
Show current database locks and blocking queries.
Args:
database_url: Database URL (optional, uses DATABASE_URL from .env if omitted).
Inputs: database_url.
get_object_detailsA
Get columns of a table or view.
Args:
schema_name: Schema containing the object.
object_name: Table or view name.
database_url: Database URL (optional, uses DATABASE_URL from .env if omitted).
Inputs: object_name (required), schema_name (required), database_url.
get_table_sizesB
Show table sizes including indexes and total.
Args:
schema_name: Schema to analyze (default: "public").
sort_by: Sort order — "total", "table", or "indexes" (default: "total").
database_url: Database URL (optional, uses DATABASE_URL from .env if omitted).
Inputs: sort_by, schema_name, database_url.
get_top_queriesA
Top queries by resource usage (requires pg_stat_statements extension).
Args:
limit: How many queries to return (optional, defaults to
TOP_QUERIES_DEFAULT_LIMIT from .env).
sort_by: Принимается для совместимости со старой схемой
инструмента, но пока не используется — сортировка всегда
по total_exec_time (default: "resources").
database_url: Database URL (optional, uses DATABASE_URL from .env if omitted).
Inputs: limit, sort_by, database_url.
list_objectsA
List tables/views/sequences in a schema.
Args:
schema_name: Name of the schema to list objects from.
object_type: One of "table", "view", "sequence" (default: "table").
database_url: Database URL (optional, uses DATABASE_URL from .env if omitted).
Inputs: schema_name (required), object_type, database_url.
list_schemasA
List all schemas in the database.
Args:
database_url: Database URL (optional, uses DATABASE_URL from .env if omitted).
Inputs: database_url.
list_toolsA
List all available MCP tools of this server with their descriptions.
Returns a JSON array with one entry per tool: name, description and
inputSchema (parameters). Does NOT require a database connection —
useful for discovering capabilities at runtime.
Returns:
JSON string: [{"name": ..., "description": ..., "parameters": ...}, ...]
Inputs: no named parameters.
manage_encryption_keyA
Manage the Data Encryption Certificate (Fernet key) for stored secrets.
Args:
action: One of:
- "status" (default) — list all certs with metadata, no changes.
- "generate" — create a new cert, set as active. ttl_days applies.
- "rotate" — create a new cert (version+1), set as active,
previous one becomes ROTATING (decrypt still works
in grace period).
- "rekey" — re-encrypt connections.json and llm_connections.json
with the new active cert (run after rotation).
- "revoke" — mark cert by `kid` as REVOKED (compromised).
Decrypt NO longer works for it.
- "validate" — same as status, but also tries to decrypt a known
secret (currently no-op placeholder, returns status).
ttl_days: Certificate lifetime for generate/rotate (default 90).
subject: Subject CN for new certs (default "postgres-mcp secrets").
use_passphrase: If true, new cert will be passphrase-protected
(raw key encrypted with PBKDF2(passphrase)). Passphrase is read
from env CERT_PASSPHRASE.
kid: For action="revoke" — which certificate to revoke.
reason: Free-text reason recorded in audit log and cert notes.
Returns:
JSON with details of the operation. For "status" — list of certs.
For generate/rotate — new cert metadata. For revoke — boolean.
For rekey — statistics {scanned, rekeyed, skipped, errors}.
Examples:
# See current state
action="status"
# Create a new cert (auto-active)
action="generate" ttl_days=90
# Rotate (new active, old → ROTATING for grace period)
action="rotate"
# Re-encrypt connections files with new cert
action="rekey"
# Revoke a compromised cert
action="revoke" kid="dec-abc123..." reason="leaked on GitHub"
Inputs: kid, action, reason, subject, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 15 tools
Most tools target clearly distinct concerns: schema listing, object details, SQL execution, explain plans, active queries, locks, sizes, and index analysis. The main potential confusion is between analyze_db_health and get_database_info, which both provide broad database-level overviews and could lead an agent to pick the wrong one.
All tool names follow a consistent lowercase verb_noun pattern (list_schemas, get_object_details, execute_sql, analyze_index_performance, etc.). The naming convention is uniform and predictable, making it easy to infer what each tool does.
15 tools is at the upper end of the ideal range but still reasonable for a Postgres server covering introspection, SQL execution, performance analysis, and health checks. The inclusion of manage_encryption_key and list_tools adds some scope beyond the core database domain, making the set feel slightly over-packed.
The tool surface covers schema discovery, object details, arbitrary SQL execution, query explanation, performance diagnostics, active queries, locks, table sizes, and database info. Notable gaps include no query cancellation/termination, no vacuum/analyze maintenance tool, and no explicit database-level listing, though execute_sql can work around some of these.
Maintenance
Related MCP Connectors
Deterministic safety, correctness & cost gate that vets Postgres SQL before your AI agent runs it.
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
Query Postgres, MySQL, SQL Server, Oracle, BigQuery, ClickHouse and Redshift from your AI client.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables secure, AI-driven PostgreSQL database administration, observability, and querying with support for extensions like PostGIS and pgvector, connection pooling, and advanced tool filtering.119 npm12MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to safely explore, analyze, and maintain PostgreSQL databases with read-only mode by default, SQL injection prevention, query performance analysis, and optional write operations.87 npmApache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with PostgreSQL databases through schema intelligence, query execution, and DBA tooling including index analysis and health monitoring. Features configurable access levels and audit logging for secure database operations.432 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to safely interact with PostgreSQL databases, perform queries, inspect schemas, and analyze query performance.2ISC