pg-guard-mcp
pg-guard-mcp
PostgreSQL MCP-сервер, который обеспечивает доступ только на чтение на уровне протокола и привилегий, а не разбором строки запроса и надеждой на удачу.
Установка
pip install pg-guard-mcp
# or, without installing anything permanently:
uvx pg-guard-mcpRelated MCP server: MCP PostgreSQL Read-Only Server
Зачем это нужно
Официальный @modelcontextprotocol/server-postgres поставлялся с режимом только для чтения, который можно было обойти одним COMMIT;: он оборачивал запрос агента в BEGIN TRANSACTION READ ONLY и отправлял всё это одной строкой. Postgres в этом режиме принимает несколько операторов, разделённых точкой с запятой, поэтому SELECT 1; COMMIT; DROP SCHEMA public CASCADE; досрочно закрывал транзакцию только для чтения и выполнял DROP как обычную запись. Из-за этого пакет объявили устаревшим. (Разбор Datadog Security Labs)
pg-guard-mcp существует потому, что такой класс багов — «read-only», который обеспечивается только проверкой строки, — всё ещё распространён в экосистеме MCP. Он защищает на трёх независимых уровнях, поэтому ни одна отдельная ошибка не станет фатальной:
Протокольный уровень (настоящая граница). Каждый запрос проходит через расширенный протокол запросов Postgres (
Parse/Bind/Execute), но никогда — через простой протокол запросов. Расширенный протокол на структурном уровне не допускает более одного оператора в сообщенииParse— сам Postgres отвергает такой запрос ещё до выполнения нашего кода. Именно поэтому эксплойт Datadog здесь не сработает, какую бы строку ни отправили.Сессионный уровень. Каждое соединение на уровне сессии устанавливает
default_transaction_read_only = on, поэтому даже запрос, который каким-то образом дошёл до базы как операция записи, будет отклонён Postgres.Уровень предварительной проверки. Ещё до отправки запрос проверяется на несколько операторов и ключевые слова управления транзакциями (
COMMIT,ROLLBACK,BEGIN,SAVEPOINT, ...) и отклоняется с понятной ошибкой. Этот уровень существует для быстрого и явного отказа, а не как основная защита.
Кроме того, настоятельно рекомендуется подключаться к базе данных с ролью, у которой права на запись отозваны (REVOKE), и такая настройка проверяется при запуске — двойная страховка и на уровне привилегий.
Инструменты
Инструмент | Что делает |
| Выполняет один оператор только для чтения и возвращает строки |
| Возвращает план запроса, не выполняя его |
| Перечисляет таблицы/представления в схеме |
| Перечисляет колонки таблицы |
| Сообщает о любых правах на запись, которые фактически есть у подключённой роли, — всегда должна возвращать пустой результат |
Настройка
pip install pg-guard-mcp
export PG_GUARD_DSN="host=127.0.0.1 dbname=mydb user=myapp_readonly password=..."
pg-guard-mcpНаправьте ваш MCP-клиент на команду pg-guard-mcp (или uvx pg-guard-mcp, если не нужна постоянная установка), задав PG_GUARD_DSN в конфигурации его окружения.
Все поддерживаемые переменные окружения перечислены в .env.example, а рабочий пример настройки правильно ограниченной read-only роли — в scripts/setup_dev_db.sh (именно на этой настройке выполняются собственные тесты проекта).
Тестирование
pip install -e ".[dev]"
pytest tests/ -vtests/test_safety.py написан на чистом Python и не требует базы данных. tests/test_db.py и tests/test_server.py запускаются против реального локального экземпляра PostgreSQL — включая ту самую полезную нагрузку эксплойта, из-за которой официальный Postgres MCP-сервер был объявлен устаревшим, — и автоматически пропускаются, если pgguard_test недоступна. Выполните scripts/setup_dev_db.sh один раз, чтобы создать её.
Статус
v0.1.0, опубликована на PyPI. 58 проходящих тестов (модульные + интеграция с живым Postgres, включая тот самый эксплойт, из-за которого официальный server-postgres признан устаревшим, прогнаны на свежей pip install опубликованного пакета).
Лицензия
MIT
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
- AlicenseNot gradedqualityNot gradedmaintenanceEnables read-only access to PostgreSQL databases with multi-tenant support, allowing users to query data, explore schemas, inspect table structures, and view function definitions across different tenant schemas safely.551
- AlicenseNot gradedqualityDmaintenanceEnables secure read-only access to PostgreSQL databases through SELECT queries only, with tools for exploring schemas, listing tables, and executing common queries while preventing any data modification operations.505MIT
- AlicenseNot gradedqualityDmaintenanceProvides secure, read-only access to PostgreSQL databases for schema inspection and data querying. It enables users to list tables, describe structures, and execute SELECT statements while strictly blocking destructive operations.111MIT
- AlicenseNot gradedqualityDmaintenanceEnables safe interaction with PostgreSQL databases through read-only queries, schema exploration, and performance analysis.225MIT
Related MCP Connectors
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Comprehensive PostgreSQL documentation and best practices, including ecosystem tools
Read-only bank access for your AI agent. Connects Claude, ChatGPT, Cursor, Gemini, Codex.
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/BerkantACUN/pg-guard-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server