pg-mcp
pg-mcp
Сервис для запросов к PostgreSQL на естественном языке через MCP (Model Context Protocol). Использует OpenAI для перевода естественного языка в SQL, проверяет и безопасно выполняет его, а также возвращает результаты любому клиенту, совместимому с MCP.
Возможности
Перевод естественного языка в SQL через OpenAI
Автоматическое обнаружение схемы базы данных при запуске (таблицы, представления, столбцы, индексы, внешние ключи, перечисления)
Кэш схемы с опциональным сохранением на диск
Проверка безопасности SQL (только SELECT, блокировка опасных функций, принудительное ограничение LIMIT)
Выполнение транзакций только для чтения с настраиваемым тайм-аутом
Проверка результатов с автоматическим повтором при пустых результатах
Поддержка нескольких баз данных
Related MCP server: PostgreSQL MCP Server
Требования
Python 3.11+
PostgreSQL
API-ключ OpenAI
Установка
pip install -e .Для разработки:
pip install -e ".[dev]"Конфигурация
Скопируйте .env.example в .env и заполните свои значения:
cp .env.example .envПеременная | Обязательно | По умолчанию | Описание |
| Да | — | Строки подключения к PostgreSQL, разделенные запятыми |
| Нет | Первая DSN | База данных по умолчанию для запросов |
| Да | — | API-ключ OpenAI |
| Нет |
| Модель для генерации SQL |
| Нет | По умолчанию OpenAI | Пользовательский эндпоинт (Azure, прокси и т.д.) |
| Нет |
| Тайм-аут запроса в секундах |
| Нет |
| Максимальное количество возвращаемых строк (1-1000) |
| Нет | Нет | Путь для постоянного кэша схемы |
| Нет |
|
|
Пример для нескольких баз данных:
PG_MCP_DATABASES=postgresql://user:pass@host1:5432/db1,postgresql://user:pass@host2:5432/db2Использование с Claude Desktop
Добавьте в ваш claude_desktop_config.json:
{
"mcpServers": {
"pg-mcp": {
"command": "pg-mcp",
"args": [],
"env": {
"PG_MCP_DATABASES": "postgresql://user:pass@localhost:5432/mydb",
"OPENAI_API_KEY": "sk-...",
"PG_MCP_SCHEMA_CACHE_PATH": "~/.cache/pg-mcp/schema.json"
}
}
}
}Инструменты MCP
query
Запрос к базе данных на естественном языке.
{
"question": "What are the top 10 customers by sales last month?",
"database": "mydb",
"return_sql": false,
"max_rows": 100
}return_sql: true— возвращает сгенерированный SQL без выполненияreturn_sql: false(по умолчанию) — выполняет и возвращает результаты
list_databases
Список всех доступных баз данных со сводной информацией.
describe_database
Получение подробной информации о схеме базы данных.
{
"database": "mydb",
"schema": "public",
"pattern": "user"
}refresh_schema
Обновление кэша схемы из базы данных.
{
"database": "mydb"
}Опустите database, чтобы обновить все базы данных.
Тестирование с фикстурами баз данных
Директория fixtures/ содержит три готовые базы данных для локального тестирования.
Настройка
# From project root, create & seed all fixture databases
cd fixtures
make all
# Or create individual ones
make small # pg_mcp_test_small — bookshelf (4 tables, ~50 rows)
make medium # pg_mcp_test_medium — ecommerce (12 tables, ~500 rows)
make large # pg_mcp_test_large — enterprise (28 tables, ~5000 rows)Переопределите учетные данные PostgreSQL через переменные окружения (по умолчанию: root / admin123 @ localhost:5432):
make all PGUSER=myuser PGPASSWORD=mypass PGHOST=127.0.0.1Настройка .env
Укажите PG_MCP_DATABASES на базы данных из фикстур:
PG_MCP_DATABASES=postgresql://root:admin123@localhost:5432/pg_mcp_test_small,postgresql://root:admin123@localhost:5432/pg_mcp_test_medium,postgresql://root:admin123@localhost:5432/pg_mcp_test_largeТестирование с помощью MCP Inspector
Используйте встроенный инспектор MCP для интерактивного тестирования:
cd /path/to/postgres-mcp
fastmcp dev src/pg_mcp/server.py:mcpЭто откроет UI в браузере, где вы сможете напрямую вызывать инструменты, такие как query, list_databases и describe_database.
Тестирование с Claude Desktop
Добавьте в claude_desktop_config.json:
{
"mcpServers": {
"pg-mcp": {
"command": "python3",
"args": ["-m", "pg_mcp.server"],
"cwd": "/path/to/postgres-mcp"
}
}
}Примечание: При использовании
cwdсервер считывает.envиз этой директории. Вы также можете передать переменные окружения через ключ"env".
Тестовые запросы
После подключения попробуйте выполнить эти запросы на естественном языке к базам данных из фикстур:
База данных | Пример запроса |
| "列出所有评分高于4分的图书" |
| "哪个国家的作者最多" |
| "上个月销量前10的商品" |
| "每个用户的总消费金额" |
| "各部门员工数量和平均薪资" |
| "今年收入最高的前5个销售代表" |
Очистка
cd fixtures
make drop-all # Remove all fixture databases
make refresh-all # Drop + recreate + re-seedЗапуск тестов
python3 -m pytest tests/ -vКак это работает
User question
→ Schema context assembled from cache
→ OpenAI generates SQL
→ Safety validation (SELECT-only, no dangerous functions, LIMIT injection)
→ Execute in read-only transaction with timeout
→ Optional result validation on empty results
→ Return SQL or query resultsБезопасность
Сгенерированный SQL проверяется на выполнение только операций SELECT (включая проверки CTE)
Заблокировано более 40 опасных функций PostgreSQL (управление сессиями, консультативные блокировки, dblink, доступ к файловой системе, изменение последовательностей и т.д.)
Все запросы выполняются в транзакциях только для чтения
Автоматическое ограничение LIMIT предотвращает получение больших наборов данных
Тайм-аут запроса предотвращает выполнение длительных операций
Пароли для подключения никогда не отображаются в логах или ответах API
This server cannot be deployed
Maintenance
Related MCP Connectors
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
Related MCP Servers
- -licenseNot gradedqualityAmaintenanceA Model Context Protocol server that provides read-only access to PostgreSQL databases. This server enables LLMs to inspect database schemas and execute read-only queries.122,323 npm91,120MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server providing LLMs read-only access to PostgreSQL databases for inspecting schemas and executing queries.122,323 npm27MIT
- FlicenseDqualityDmaintenanceA secure Model Context Protocol server that allows Claude to execute read-only SQL queries against a PostgreSQL database, enabling natural language interaction with database data.1-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to query, explore, and analyze PostgreSQL databases through the Model Context Protocol. It provides robust security features including read-only mode, schema restrictions, and query timeouts for safe data interaction.7 npmMIT