Мастер Claude · Блок 6. MCP и интеграции

Урок 57 из 93 · ~10 мин чтения

MCP с базами данных: прямые SQL-запросы

Урок пока закрыт

Курс проходится последовательно.

К текущему уроку

Почему это важно именно вам

Есть одна ситуация, которую знает каждый директор, работающий с данными. Нужно понять: какие клиенты не платили больше трёх месяцев, или сколько сделок закрылось в прошлом квартале по каждому менеджеру, или какой канал привёл больше всего заявок в мае. Данные в базе есть. Но чтобы их получить, нужно или идти к разработчику с запросом «выгрузи мне вот это», или ждать когда кто-то обновит дашборд в Power BI, или самому разбираться в SQL — языке запросов, который большинство директоров не знают и, честно говоря, знать не обязаны.

MCP с базой данных убирает этот барьер полностью. Вы подключаете Claude к своей базе данных один раз — и дальше задаёте вопросы на русском. «Покажи топ-10 клиентов по выручке за этот год». «Сколько заявок пришло вчера». «Сравни конверсию по источникам за апрель и май». Claude переводит вопрос в SQL-запрос, выполняет его, получает данные и возвращает вам понятный ответ — с таблицами, числами, сравнениями. Разработчик в этой цепочке не нужен.

Для директора по развитию, который работает с аналитикой, порталом, коллцентром и маркетинговыми данными, это означает одно: оперативные данные перестают быть привилегией тех, кто умеет в SQL. Вы получаете ответ на вопрос за 30 секунд, а не через день после того, как поставили задачу разработчику.

Что это такое

Представьте базу данных как огромный структурированный архив документов. Там лежат таблицы: клиенты, заказы, платежи, звонки, заявки. Каждая таблица — это как отдельная папка с тысячами одинаково структурированных карточек. Чтобы что-то найти или посчитать, нужно задать запрос на специальном языке — SQL. Что-то вроде: «из папки "заказы" выбери все карточки, где дата больше 1 января, сгруппируй по клиенту и посчитай сумму». Это и есть SQL-запрос, только в человеческом пересказе.

SQL сам по себе не сложный, но требует знания синтаксиса, структуры конкретной базы, названий таблиц и колонок. Для непрограммиста это порог, который реально мешает работе.

@bytebase/dbhub — это MCP-сервер, который становится посредником между вами и базой данных. Он знает структуру вашей базы, отдаёт её Claude и выполняет присланные SQL-запросы, возвращая результат. Claude, в свою очередь, понимает ваш вопрос на русском, формулирует нужный запрос через dbhub и объясняет полученный результат.

Claude не хранит ваши данные

Claude видит данные только в момент запроса — в рамках конкретной сессии. После разговора ничего не сохраняется. Это важно понимать: каждый новый сеанс начинается без памяти о предыдущих запросах к базе.

Схема работы выглядит так: вы задаёте вопрос → Claude через dbhub запрашивает структуру базы → формулирует SQL-запрос → dbhub выполняет его → возвращает данные → Claude объясняет результат вам.

Поддерживаются PostgreSQL (промышленная база данных, стоит за большинством серьёзных продуктов), SQLite (лёгкая файловая база, часто используется в небольших приложениях и локальных сервисах) и ещё несколько популярных систем.

Как работает на практике

Разберём полный путь от установки до первого вопроса к данным.

Шаг 1. Установить Node.js

dbhub работает через Node.js — это среда выполнения JavaScript-кода. Проверьте, есть ли он:

node --version

Если видите что-то вроде v20.11.0 — всё хорошо. Если команда не найдена, скачайте установщик с nodejs.org и запустите его. Процедура стандартная, как любая установка программы на Mac или Windows.

Шаг 2. Добавить dbhub в конфигурацию Claude Code

Проще всего добавить сервер командой — тогда вопрос о файле не встаёт вовсе:

claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \
  --dsn "postgresql://claude_reader:пароль@localhost:5432/mydb"

Если правите руками — это ~/.claude.json (для себя) или .mcp.json в корне проекта (для команды). Секция называется mcpServers:

{
  "mcpServers": {
    "dbhub": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub",
        "--transport",
        "stdio",
        "--dsn",
        "postgresql://user:password@localhost:5432/mydb"
      ]
    }
  }
}

Строку --dsn замените на строку подключения к вашей базе. Для PostgreSQL формат: postgresql://пользователь:пароль@хост:порт/имя_базы. Для SQLite: sqlite:///полный/путь/к/файлу.db.

Пароль в строке подключения

Строка DSN содержит пароль в открытом виде. Файл .mcp.json (или ~/.claude.json) хранится локально на вашем компьютере, но будьте внимательны: не отправляйте этот файл никому и не кладите его в облачное хранилище без шифрования. Если работаете с чувствительными данными — используйте отдельного пользователя базы данных с правами только на чтение.

Шаг 3. Создать пользователя только на чтение (рекомендуется)

Если у вас PostgreSQL и есть доступ к нему как администратор, создайте отдельного пользователя для Claude:

CREATE USER claude_reader WITH PASSWORD 'безопасный_пароль';
GRANT CONNECT ON DATABASE mydb TO claude_reader;
GRANT USAGE ON SCHEMA public TO claude_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_reader;

Этот пользователь сможет только читать данные — никаких удалений, изменений, вставок. Это разумная мера безопасности, особенно если база содержит рабочие данные.

Шаг 4. Перезапустить Claude Code

После изменения конфигурации переподключите сервер: /mcp reconnect db. MCP-серверы инициализируются при старте сессии.

Шаг 5. Проверить подключение

В новой сессии напишите:

Какие таблицы есть в базе данных?

Claude должен ответить списком таблиц с кратким описанием. Если ответил — подключение работает.

Если вместо списка таблиц вы видите ошибку «tool not found» или «MCP server not available» — значит сервер не стартовал. Проверьте, правильно ли установлен Node.js, и убедитесь, что в .mcp.json нет синтаксических ошибок (лишних запятых, незакрытых скобок). JSON — капризный формат: одна лишняя запятая в конце блока ломает весь файл. Проверить синтаксис можно через сайт jsonlint.com — просто вставьте содержимое файла.

Шаг 6. Задавать вопросы

Теперь можно работать. Примеры запросов, которые реально нужны в работе:

Сколько заявок пришло за прошлую неделю?
Покажи топ-10 клиентов по сумме заказов за этот год. 
Выведи в таблице: название клиента, количество заказов, общая сумма.
Сравни количество новых клиентов в апреле и мае этого года.
Какие источники трафика привели больше всего заявок в мае? 
Укажи конверсию по каждому источнику.
Есть ли клиенты, у которых не было ни одного заказа за последние 90 дней?
Покажи список с датой последнего заказа.

Claude сначала спросит структуру таблиц (это один скрытый запрос к базе), потом сформулирует SQL, выполнит его через dbhub и вернёт результат в читаемом виде.

Хороший рабочий паттерн — начинать сессию с «ориентационного» вопроса: «Опиши мне структуру базы данных: какие таблицы есть, что в них хранится, как они связаны». Это займёт минуту, но дальнейшие вопросы будут точнее — Claude будет использовать правильные таблицы и названия колонок. Можно сохранить этот ответ в CLAUDE.md проекта как постоянный контекст: тогда в каждой новой сессии Claude уже будет знать структуру без дополнительного вопроса.

Если Claude ошибается в структуре

Иногда Claude формулирует запрос с неправильным названием таблицы или колонки. Это случается когда названия нестандартные или когда структура базы неочевидна. В таком случае скажите: «Ты ошибся в названии колонки, правильное название — orders_total». Claude исправит запрос и повторит.

Частые ошибки

Ошибка 1. Забыть перезапустить Claude Code после изменения настроек.

MCP-серверы читаются один раз при старте сессии. Если вы добавили dbhub в конфигурацию, но не переподключили сервер — он ничего не знает о новом сервере. Симптом: Claude отвечает, что не может подключиться к базе данных или не видит инструмент dbhub. Решение: закрыть и открыть заново.

Ошибка 2. Неправильный формат строки DSN.

Каждая СУБД имеет свой формат строки подключения. Для PostgreSQL это postgresql://, для MySQL — mysql://, для SQLite — sqlite:/// (три слеша, третий — начало пути). Опечатка в одном символе означает ошибку подключения. Если получаете ошибку «connection refused» или «cannot open database» — сначала проверяйте DSN посимвольно. Частая проблема: путь к SQLite-файлу не абсолютный. Пишите sqlite:////Users/yourname/data/mybase.db, не sqlite:///~/data/mybase.db — тильда в пути не всегда раскрывается.

Ошибка 3. Задавать слишком расплывчатые вопросы к сложной базе.

«Покажи статистику по продажам» — звучит просто, но для базы с 30 таблицами это неоднозначный запрос. Claude будет угадывать, какие именно таблицы использовать, и может взять не те. Правило: чем точнее вопрос, тем точнее ответ. Добавляйте период, метрику, разрез. «Покажи количество и сумму заказов за июнь 2026, сгруппированных по менеджерам» — это хороший запрос.

Ошибка 4. Давать Claude права на запись в рабочую базу.

Если пользователь базы, которого вы указали в DSN, имеет права на INSERT, UPDATE, DELETE — теоретически Claude может эти операции выполнить, если его об этом попросить. На практике Claude не будет изменять данные без явной просьбы, но лучше исключить саму возможность. Используйте пользователя только с правами SELECT, особенно если это рабочая база с реальными клиентами.

Когда нужно / когда нет

Подключайте MCP с базой данных, если:

Не нужно подключать, если:

Аналитическая база — лучший сценарий

Если в вашей компании есть отдельная аналитическая база данных (DWH, data warehouse) или хотя бы реплика боевой — подключайте туда. Там нет риска случайно что-то изменить, она оптимизирована под чтение, и нагрузка от ваших запросов не влияет на работу основного продукта.

Связь с другими уроками

День 51 (Что такое MCP и зачем он нужен) — базовый урок про архитектуру MCP. Если ещё не читали или подзабыли как работает stdio-транспорт и зачем нужен раздел mcpServers в .mcp.json — вернитесь туда. День 57 строится прямо на этой базе.

День 55 (MCP Notion) — смежный урок про структурированные данные через MCP. Разница принципиальная: базы Notion — карточки со свойствами, SQL-база — записи с отношениями между таблицами. Разница принципиальная: Sheets — это таблицы с ячейками, SQL-база — это структурированные записи с отношениями между таблицами. Для разных задач подходит разное.

День 25 (Агент-аналитик) — в том уроке мы строили агента, который анализирует данные из файлов. Теперь, когда есть MCP с базой данных, можно сделать следующий шаг: аналитический агент, который сам ходит в базу за свежими данными, а не ждёт когда вы принесёте файл. Связка День 25 + День 57 = автономный аналитик данных.

Задание на сегодня

Если у вас есть SQLite-файл от любого локального приложения (агент, скрипт, телеграм-бот, трекер) — подключите его к Claude Code через dbhub и задайте один вопрос к данным.

Конкретные шаги:

  1. Найдите SQLite-файл. Часто они называются *.db или *.sqlite. Можно поискать командой find ~ -name "*.db" -not -path "*/Library/*" 2>/dev/null.
  2. Добавьте dbhub командой: claude mcp add --transport stdio db -- npx -y @bytebase/dbhub --dsn "sqlite:////полный/путь/к/файлу.db". Если правите руками — это ~/.claude.json или .mcp.json в корне проекта.
  3. Перезапустите Claude Code.
  4. Спросите: «Какие таблицы есть в этой базе данных?»

Критерий выполнения: Claude ответил списком таблиц. Это означает, что подключение работает.

Если SQLite-файла нет под рукой — можно создать тестовый. Скажите Claude: «Создай SQLite-файл с тестовыми данными: таблица orders с полями id, client_name, amount, created_at, добавь 20 строк с реалистичными данными». Затем подключите его и поработайте с тестом.

Нет базы данных — не беда

Многие директора не имеют прямого доступа к базам данных своих систем. Это нормально. Задание в таком случае — создать тестовую базу через Claude (он напишет Python-скрипт, который её создаст) и отработать механику на ней. Навык подключения и формулировки запросов будет тот же.

Резюме

Следующий урок откроется после отметки.