Подключите PostgreSQL к Claude Code через MCP, настройте аккаунт только для чтения с контролем прав — Claude сам читает схемы, пишет запросы и анализирует данные.
После подключения базы данных Claude Code работает иначе. Не нужно копировать структуру таблиц в промпт и объяснять названия полей — Claude подключается напрямую, читает схему сам, пишет запросы и анализирует результаты.
В статье используется PostgreSQL как пример, и мы разбираем весь процесс от настройки до реального использования.
Официальный @modelcontextprotocol/server-postgres поддерживает:
Только чтение. Этот Server предназначен исключительно для запросов — INSERT, UPDATE, DELETE не выполняет.
npm install -g @modelcontextprotocol/server-postgres
Отредактируйте .claude/settings.json (уровень проекта):
{
"mcpServers": {
"db": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://readonly_user:password@localhost:5432/myapp_production"
]
}
}
}
Формат строки подключения: postgresql://USER:PASSWORD@HOST:PORT/DATABASE
Чтобы не хранить пароль в файле конфигурации, используйте переменную окружения:
{
"mcpServers": {
"db": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"DATABASE_URL": "postgresql://readonly_user:password@localhost:5432/myapp_production"
}
}
}
}
Если .claude/settings.json коммитится в git, убедитесь, что пароль не хранится в открытом виде. Чувствительную конфигурацию кладите в .claude/settings.local.json и добавляйте его в .gitignore.
Не давайте Claude аккаунт с правами записи. Создайте пользователя только для чтения в PostgreSQL:
CREATE USER claude_readonly WITH PASSWORD 'your_password';
GRANT CONNECT ON DATABASE myapp_production TO claude_readonly;
GRANT USAGE ON SCHEMA public TO claude_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO claude_readonly;
Таблицы, которые не нужно показывать Claude (sessions, audit_logs), просто не включайте в права доступа или перенесите в отдельную схему.
Перезапустите Claude Code и спросите:
Выведи список всех таблиц в базе данных
Если Claude вернёт список таблиц вместо «у меня нет доступа к базе данных» — MCP работает.
Сценарий 1: Понять структуру данных
Какая связь между таблицами users и orders?
Есть ли ограничения внешних ключей?
Сценарий 2: Анализ данных
Из пользователей, зарегистрировавшихся за последние 30 дней,
какой процент сделал хотя бы один заказ?
С разбивкой по каналу регистрации.
Сценарий 3: Отладка
Найди заказы со status = 'pending', созданные более 7 дней назад.
Сколько их и когда создан последний?
Сценарий 4: Помощь в разработке
Хочу добавить колонку last_login_at в таблицу users.
Напиши SQL миграции и проверь, хватает ли существующих индексов.
На уровне таблиц
GRANT SELECT ON TABLE users, orders, products TO claude_readonly;
Фильтрация чувствительных полей через view
CREATE VIEW users_safe AS
SELECT id, email, created_at, plan, status FROM users;
GRANT SELECT ON users_safe TO claude_readonly;
Используйте SSH-туннель:
ssh -L 5433:localhost:5432 [email protected] -N
Затем в конфигурации укажите локальный порт.
Самое заметное изменение: разговоры о данных больше не требуют предисловий. Не нужно объяснять схему и типы полей — просто говорите что нужно, Claude сам разберётся. Особенно полезно при отладке: вместо того чтобы самому делать запрос, копировать и вставлять результаты, вы описываете проблему — Claude запрашивает напрямую и выдаёт выводы.