Підключаємо Claude Code до бази даних: реальні запити через MCP

Підключіть PostgreSQL до Claude Code через MCP, налаштуйте акаунт тільки для читання з контролем прав — Claude сам читає схеми, пише запити й аналізує дані.


Після підключення бази даних Claude Code працює інакше. Не потрібно копіювати структуру таблиць у промпт чи пояснювати назви полів — Claude підключається напряму, сам читає схему, пише запити й аналізує результати.

У статті використовується PostgreSQL як приклад, і ми розбираємо весь процес від налаштування до реального використання.

Який MCP Server використовувати

Офіційний @modelcontextprotocol/server-postgres підтримує:

  • Читання схеми всіх таблиць (імена полів, типи, обмеження)
  • Виконання SQL-запитів і повернення результатів
  • Кілька схем

Тільки читання. Цей 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 запитує напряму й одразу дає висновки.