mcp-postgres
Provides read-only access to PostgreSQL databases, allowing schema introspection and SELECT queries while blocking write operations.
Click on "Install 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., "@mcp-postgreslist tables in the public schema"
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.
mcp-postgres
Хотите просто подключить сервер в Claude? → CLAUDE_SETUP.md — пошаговая инструкция (Claude Code и Claude Desktop, со скриншотами). Дальше в этом файле — про то, как устроен сам проект.
Read-only MCP-сервер для PostgreSQL на Python.
Даёт LLM-клиенту (Claude Code, Claude Desktop, любой MCP-совместимый клиент) доступ
к базе только на чтение: интроспекция схемы и SELECT-запросы. Любые изменяющие
операции — INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, TRUNCATE, GRANT,
COPY, CALL и т.д. — отклоняются.
Сервер доменно-нейтральный: он ничего не знает о бизнес-логике конкретной базы, только механика доступа, защита и аудит.
Какой транспорт когда запускать
stdio | http | |
Кто запускает процесс | MCP-клиент сам стартует сервер как дочерний процесс | вы: |
Где лежат креды к БД | в | в |
Защита доступа | не нужна (процесс локальный) | bearer-токен |
Когда выбирать | персональный доступ аналитика к своей БД | общий сервис на команду / общая сервисная роль |
Related MCP server: tusk-mcp
Три уровня защиты от записи
Валидатор SQL (sql_guard.py) — разбирает запрос в AST (
sqlglot, диалект postgres) и пропускает толькоSELECT/WITH ... SELECT/VALUES.Сессия Postgres (db.py) — соединение открывается с
default_transaction_read_only=on. Даже если валидатор пропустит запись, её отклонит сам Postgres.Права роли БД — главный рубеж: отдельная роль с
GRANT SELECT. Сервер не имеет инструмента смены кредов — какие права у роли, такие и у клиента.
Инструменты
Инструмент | Назначение |
| К чему подключены, какая роль, какие лимиты и гарантии read-only |
| Схемы, доступные роли, с числом объектов |
| Таблицы и представления: тип, размер, оценка строк, комментарий |
| Колонки, типы, NOT NULL, DEFAULT, комментарии, ограничения, индексы |
| Индексы с определением, размером и статистикой использования |
| Размеры, live/dead tuples, последний vacuum/analyze |
| План выполнения ( |
| Выполнение читающего запроса. Параметры: |
Запуск: stdio (локально)
Нужен Python 3.11+. Устанавливать пакет не надо — только зависимости:
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txtВ mcp.json клиента (полный пример — examples/mcp.json):
{
"mcpServers": {
"postgres": {
"command": "/путь/к/репозиторию/.venv/bin/python",
"args": ["/путь/к/репозиторию/run_server.py"],
"env": {
"PG_HOST": "db.example.com",
"PG_PORT": "5432",
"PG_DATABASE": "analytics",
"PG_USER": "mcp_readonly",
"PG_PASSWORD": "СЮДА_ПАРОЛЬ",
"PG_SSLMODE": "require"
}
}
}
}Запуск: http (Docker)
cp .env.example .env # заполнить креды и MCP_HTTP_AUTH_TOKEN
docker compose up -d --build
curl -s localhost:8000/healthВ mcp.json клиента:
{
"mcpServers": {
"postgres": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp",
"headers": { "Authorization": "Bearer СЮДА_ТОКЕН" }
}
}
}Логи — docker compose logs -f, остановить — docker compose down.
На Linux каталог
./logsмонтируется внутрь контейнера: он должен быть доступен на запись пользователюuid 10001, иначе сервер откажется стартовать (chown 10001 logsилиchmod 777 logs).
Локальный Postgres для разработки
Нужен только для быстрой проверки, что сервер вообще работает — не для прод-данных:
docker compose -f docker-compose.postgres.yml up -dПоднимает голый postgres:15 с суперпользователем postgres/postgres. Оба
compose-файла используют общую сеть mcp-net, поэтому в .env сервера достаточно
PG_HOST=postgres. Данные лежат в ./data (в git не попадают), down их не трогает.
Read-only роль под реальный доступ создаётся отдельно, вручную — см. SQL в разделе «Три уровня защиты» выше.
Конфигурация
Всё задаётся переменными окружения (в mcp.json → env или в .env для Docker).
Полный список с комментариями — в .env.example.
Подключение: PG_DSN (или DATABASE_URL) либо по частям — PG_HOST, PG_PORT,
PG_DATABASE, PG_USER, PG_PASSWORD, PG_SSLMODE.
Транспорт: MCP_TRANSPORT = stdio | http, MCP_HTTP_HOST, MCP_HTTP_PORT,
MCP_HTTP_PATH, MCP_HTTP_AUTH_TOKEN.
Лимиты на запрос: MCP_MAX_ROWS (1000), MCP_MAX_RESULT_BYTES (1 000 000),
MCP_MAX_SQL_LENGTH (20 000), PG_STATEMENT_TIMEOUT_MS (30 000), MCP_ALLOWED_SCHEMAS,
MCP_ALLOW_EXPLAIN_ANALYZE (по умолчанию false).
Логи и аудит: LOG_LEVEL, LOG_FORMAT (text | json), LOG_FILE, LOG_SQL, AUDIT_FILE.
Логи и аудит
Два независимых потока.
Логи работы сервера — старт, подключение к БД, ошибки, отказы авторизации. Всегда идут
в stderr (и опционально в LOG_FILE): stdout занят JSON-RPC.
Журнал аудита — по одному JSONL-событию на каждый вызов инструмента: кто, что и когда
делал (tool, status, db_user/db_name, sql, row_count и т.д.), но без данных
результата — только их объём. Пишется в AUDIT_FILE (по умолчанию ./logs/audit.jsonl);
если файл недоступен на запись, сервер не стартует.
Тесты
Автотестами покрыт SQL-валидатор — та часть, где ошибка стоит дороже всего:
python -m pytest -q # именно `python -m`, из корня репозиторияОстальное проверяется вручную из MCP-клиента: connection_info → list_tables
→ describe_table → query.
Ограничения
Одна база на процесс. Смена подключения на лету не предусмотрена намеренно: креды = identity, и менять их должен конфиг, а не модель.
paramsработает с плейсхолдерами%s(psycopg), не$1.Курсоры/стриминг больших выборок не поддерживаются: ответ всегда ограничен
MCP_MAX_ROWSиMCP_MAX_RESULT_BYTES.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityDmaintenanceAn MCP server allowing AI assistants like Claude to execute read-only SQL queries against AWS PostgreSQL databases, enabling data retrieval while preventing database modifications.Last updated
- Alicense-qualityCmaintenanceA read-only PostgreSQL MCP server that enables AI agents to perform schema introspection and execute SELECT-only queries. It supports secure database connections through SSL and SSH tunnels while offering a structure-only mode to restrict query access.Last updated10MIT
- Alicense-qualityCmaintenanceRead-only PostgreSQL MCP server that enables running SELECT queries, listing tables and schemas, and describing columns, with built-in protection against writes and malicious SQL attacks.Last updated668MIT
- Alicense-qualityBmaintenanceRead-only MCP server for PostgreSQL, enabling schema discovery, table metadata, and safe SELECT queries via READ ONLY transactions.Last updated24MIT
Related MCP Connectors
MCP server for managing Prisma Postgres.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Read-only MCP server for wafergraph.com's semiconductor & AI supply-chain data: 30 tools, no auth.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/imangali01/postgres-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server