Підключіть 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"]
}
}
}
Щоб не зберігати пароль у файлі конфігурації, використовуйте змінну середовища через поле env. Чутливу конфігурацію кладіть у .claude/settings.local.json і додавайте до .gitignore.
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 Code і запитайте: «Виведи список усіх таблиць у базі даних». Якщо Claude поверне список — MCP працює.
Зрозуміти структуру даних: «Який зв'язок між таблицями users і orders? Є обмеження зовнішніх ключів?»
Аналіз даних: «З користувачів, що зареєструвалися за останні 30 днів, який відсоток зробив хоча б одне замовлення? З розбивкою за каналом реєстрації.»
Налагодження: «Знайди замовлення зі status = 'pending', створені більш ніж 7 днів тому. Скільки їх і коли створено останнє?»
Допомога в розробці: «Хочу додати колонку 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 -L 5433:localhost:5432 [email protected] -N
Найпомітніша зміна: розмови про дані більше не потребують передмов. Не потрібно пояснювати схему — просто скажіть що потрібно, Claude сам розбереться. Особливо корисно при налагодженні: замість самостійного запиту і копіювання результатів, ви описуєте проблему — Claude запитує напряму й одразу дає висновки.