Как дать Claude безопасный read-only доступ к production Postgres
Когда использовать: Хочется, чтобы Claude отвечал на вопросы по реальной базе без универсального инструмента execute_sql, который может выполнить DROP TABLE.
Предварительные требования
- Postgres, доступный через libpq URL — Использовать роль только на чтение; никогда — записываемого пользователя приложения
- Docker или Go — Toolbox поставляется как единый бинарник; Docker-образ проще всего
Поток
-
Запустить Toolbox с профилем postgresЗапусти mcp-toolbox в режиме stdio с флагом
--prebuilt postgresи POSTGRES_URL, указывающим на read-реплику.✓ Скопировано→ Toolbox логируетtools registered: list_tables, describe_table, execute_sql_readonly -
Подключить к Claude DesktopДобавь docker-конфиг toolbox в claude_desktop_config.json в раздел mcpServers, затем перезапусти Claude.✓ Скопировано→ Команда
/mcpпоказывает инструменты toolbox без ошибок -
Задать реальный вопросToolbox: покажи таблицы. Для
orders— какова медиана заказа за последние 7 дней? Покажи точный SQL.✓ Скопировано→ Claude вызывает list_tables → describe_table → execute_sql_readonly с SELECT (без UPDATE/DELETE)
Итог: Read-only аналитика по реальным данным без риска мутации, с логом каждого запроса.
Подводные камни
- Указан записываемый пользователь — Claude в итоге вызывает мутирующий инструмент — Всегда используй роль только с
GRANT SELECT; проверяй через\duв psql - Пул соединений исчерпан при параллельных вызовах агента — Установи
pool.max_open_connsв tools.yaml; значение по умолчанию консервативное