Про протокол MCP (Model Context Protocol) сейчас говорят всё чаще. Этот протокол позволяет нейросетям общаться с внешним миром. С его помощью к LLM можно подключать любые источники данных или системы управления, и всё это через один универсальный стандарт. MCP часто сравнивают с USB — устройство одно, протокол один, а число сценариев применения практически бесконечно.
В статье расскажу про практический сценарий «как связать LLM и базу данных». Это может сделать любой на своём компьютере.
Протокол MCP придумали ребята из Anthropic. Далее будем использовать нейросети Claudе Sonnet и Claude Opus — это LLM от Anthropic.
Зачем это нужно? Такая связка позволит промтами вытаскивать инсайты из данных, создавать отчёты в PDF и строить интерактивные отчёты в HTML. Это работает на моём компьютере последние два месяца и результаты очень обнадёживающие.
Чтобы было интереснее, в качестве данных возьмём все вакансии Habr Career c описаниями. Данные — часть пет‑проекта анализа зарплат VILKY. Данные нормализируются, валюты переводятся по курсу ЦБ и т. д. Делаем втроём: Саша, Никита, Рома. Есть публичный дашборд и канал с аналитикой и автоотчётами. Все ссылки платформ‑агрегаторов сохраняются.
Разворачиваем базу данных и MCP-сервер
Что надо, чтобы подключить базу данных к MCP‑серверу:
База данных. В нашем случае — PostgreSQL
MCP‑сервер
Claude Desktop c Pro подпиской (20$)
В примере будем использовать Postgres MCP Pro — опенсорсный MCP сервер. У проекта есть страница Postgres MCP Pro на GitHub с подробными инструкциями по установке и настройке.
Будем устанавливать в докере — Option 1: Using Docker из инструкции
скачиваем и устанавливаем Docker Deskop
Выполняем во внутреннем терминале Docker:
docker pull crystaldba/postgres -mcp
Docker Desktop подтянет образы из репозитория и развернёт контейнеры
Docker-compose.yml ниже запускает связку:
Postgres 15 (с пользователем user, паролем password, базой mydb),
MCP-сервер (образ postgres-mcp, работает на порту 8080 и использует конфиг ./config/mcp.yaml).
Всё вместе будет отображаться в Docker Desktop как одна группа mcp-server.
version: "3.9"
services:
postgres:
image: postgres:15
container_name: postgres
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
mcp:
image: postgres-mcp
container_name: mcp
ports:
- "8080:8080"
environment:
- MCP_CONFIG=/config/mcp.yaml
volumes:
- ./config:/config
depends_on:
- postgres
volumes:
pgdata:
Конфигурационный файл для контейнера postgres-mcp mcp.yaml говорит MCP-серверу, как подключаться к Postgres и какие запросы разрешено выполнять. Здесь разрешены только SELECTы для безопасности.
listen_addr: "0.0.0.0:8080"
default_database:
host: postgres
port: 5432
user: user
password: password
dbname: mydb
allowed_sql_patterns:
- "(?i)^SELECT\\b"
log_level: info
В итоге, в Docker Desktop будет запущена группа контейнеров с образами postgres-mcp и postgres:

База данных и DBeaver
После того как контейнер с PostgreSQL поднят, база данных у нас пустая. Чтобы с ней работать, будем использовать DBeaver — универсальный клиент для любых СУБД. Можете использовать другой.
Откройте DBeaver и создайте новое подключение:
Database → New Database Connection → PostgreSQL.В настройках подключения укажите:
Host: localhost
Port: 5432
Database: mydb
Username: user
Password: password (или тот пароль, который вы указали в docker-compose.yml).Остальные параметры можно оставить по умолчанию.
Нажмите Test Connection. Если всё настроено верно, DBeaver подключится к PostgreSQL.
Теперь можно:
создавать таблицы (через запросы или мастера в DBeaver),
загружать данные из CSV/TSV/Excel,
выполнять SQL-запросы и проверять содержимое таблиц.

Внизу есть кнопка «Test Connection». При нажатии на неё подключение должно пройти успешно, если все верно сделали.
Наполнение таблиц
По умолчанию в PostgreSQL есть схема public. Можно или эту использовать или новую схему создать. В нашем случае будет использоваться схема sandbox.
В базе данных надо создать таблицу и записать туда данные. Для простоты в нашем случае сделаем только одну таблицу. Там будут все доступные данные с habr career - 120k+ вакансий.
Скрипт на питоне забирает данные из csv и записывает их в базу данных.
Так выглядят данные, к которым подключим Claude.

Дополнительно поля в конкретном случае не описываются - LLM понимает их по названиям.
Подключение Claude к базе данных
Важно: подключение MCP работает только с подпиской Claude Pro (20 $/мес).
В Claude Desktop откройте меню:
File → Settings → Local MCP Servers.Нажмите Edit Config. Откроется json-файл конфигурации.
Добавьте туда описание MCP-сервера PostgreSQL:
У меня работает с таким конфигом для Винды.
%APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"postgres": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DATABASE_URI=postgresql://user:password@host.docker.internal:5432/postgres",
"crystaldba/postgres-mcp",
"--access-mode=restricted"
]
}
}
}
При настройке MCP-сервера можно задать режим доступа:
restricted — read-only, то есть LLM сможет выполнять только SELECT-запросы (без INSERT/UPDATE/DELETE). Это самый безопасный вариант для аналитики и экспериментов.
full — полный доступ ко всем операциям (используется реже и только в тестовых окружениях).
В Claude Desktop после запуска сервера в разделе Local MCP Servers появится ваш источник.
Если всё настроено правильно, надпись running (синим цветом) будет означать успешное подключение LLM к базе данных.

Запросы к базе на естественном языке
Теперь начинается самое интересное — мы можем общаться с данными.
Простые вещи вроде средней или максимальной зарплаты легко достаются обычным SQL‑запросом. Но у нас под капотом — одна из самых мощных LLM, и это значит, что можно спрашивать задачи сложнее.
Например, если просто написать:
Найди вакансии гейминг-компаний и сделай сводную таблицу по средним и медианным зарплатам
Claude (без MCP) пойдёт в интернет и притащит ответы из случайных статей. Чтобы модель действительно обратилась к нашей базе, надо явно указать источник:
Подключись по MCP к базе данных (таблица sandbox.vacancies_habr) и найди вакансии гейминг-компаний,сделай сводную таблицу по средним и медианным зарплатам
После такого запроса Claude:
Сгенерирует нужные SQL-запросы (например, отберёт компании с ключевыми словами game / gaming в названии описании).
Выполнит их через MCP непосредственно в нашей базе.
Автоматически обработает результат: посчитает медианы, средние, сделает группировки.
-
Вернёт всё в удобном формате — это может быть:
таблица с цифрами,
график
PDF отчёт,
или даже полноценный интерактивный HTML-отчёт с фильтрами и визуализациями.
То есть мы фактически разговариваем с базой данных на обычном языке, а Claude берёт на себя всё от написания SQL до построения аналитики.
Практические примеры
ПРИМЕР 1. Сравнение зарплат в компаниях
Первый пример как раз отчёт по геймигу и зарплатам.
Сначала Claude исследует базу, находит схемы и таблицы, запускает общие SQL запросы, и, с каждым следующим SQL запросом уменьшает выборку. Рассуждает и переписывает запросы. Названия полей специально не расшифровываются — они понятны LLM. В итоге формирует отчёт.
Промт:
Подключись к базе данных MCP и найди средние зарплаты по гейминговым компаниям. Всё сведи в таблице

Отчёт надо проверять обязательно. В этом конкретно не все компании из гейминга, и надо об этом сказать LLM. Желательно делать запрос точнее. Дальше можно промтами убирать или добавлять что-то в отчёт. Сохраняется в PDF.
ПРИМЕР 2. ПЕРСОНАЛИЗИРОВАННЫЙ АНАЛИТИЧЕСКИЙ ОТЧЁТ (ПОИСК ВАКАНСИЙ ПО РЕЗЮМЕ)
В этом примере мы прикладываем резюме кандидата или описание вакансии.
Далее в ход идёт большой промт (на скриншоте) в нём подробно прописано, что именно должно попасть в итоговый документ:
ключевые метрики и показатели,
сравнение с данными из базы,
визуализации и сводные таблицы,
текстовые инсайты и выводы.
Claude обрабатывает запрос и формирует развёрнутый отчёт объёмом около 10 страниц PDF. Причём он не ограничивается только локальной базой. Модель дополнительно обращается в интернет, анализирует свежие новости и тенденции рынка труда и учитывает их в итоговом отчёте.
В результате получается документ, который объединяет данные из нашей базы и актуальный внешний контекст — фактически, полноценное исследование в автоматическом режиме.

Пример 3. Сравнение статистики зарплат из базы данных и статьи
Ещё один интересный сценарий работы с MCP — сравнение данных из разных источников.
Возьмём нашу базу вакансий с Habr Career и сопоставим её с результатами статьи «Анализ зарплат в IT», где использовались данные из калькулятора зарплат.
В базе у нас — реальные зарплатные вилки из опубликованных вакансий (120k+ записей).
В статье — данные специалистов, которые указывали свои доходы в калькуляторе.
Claude через MCP вытягивает статистику из таблицы sandbox.vacancies_habr и строит сводные таблицы: медианные и средние значения по ключевым ролям, уровням и регионам. Дальше он берёт цифры из статьи, сопоставляет их и показывает различия.

В итоге получаем отчёт, который показывает:
насколько расходятся зарплаты «по вакансиям» и «по опросам»
где рынок завышает ожидания, а где компании недоплачивают;
какие профессии ближе всего к балансу между ожиданиями кандидатов и предложениями работодателей.

Документы, формируемые в процессе работы, Claude называет артефактами и сохраняет из отдельно. Они остаются в Claude Desktop. На скриншоте ниже — примеры более сложного анализа, чем в примерах.

Плюсы и минусы связки LLM + База данных
Плюсы:
С данными можно разговаривать обычным языком
Подключить LLM к базе данных можно на обычном компьютере
Один промт может генерировать до пары десятков запросов — это намного быстрее, чем писать руками
Можно сразу получать отчёты и интерактивные HTML
Минусы:
Анализ поверхностный в большинстве случаев
Размер контекстного окна Claude небольшой
Нужна подписка Pro и VPN из РФ
Сложно сделать хороший интерактивный отчёт
С графиками Claude пока слабо работает — есть проблемы
У Claude есть свои форматы отчётов. Качество этого должно увеличиваться с временем. Подобный подход, когда LLM работает поверх базы данных и превращает запросы на естественном языке в аналитику в бизнес‑среде называют Generative BI. GenBI пушат гиганты: Snowflake, Microsoft, IBM, Amazon. Это будущее, без сомнения. Писал про это в статье на Хабр «Generative Business Intelligence. BI без дашбордов и аналитиков» и пишу у себя в TG канале.
Примеры PDF отчётов от Claude по рынку труда IT отправляем периодически в канал с аналитикой VILKY.
Там можно найти:
Комментарии (0)
helg1978
17.09.2025 14:12Не пойму, LLM ведь сама может сделаnь show tables, getTableSchema и т.д
Профит от MCP по идее должен быть в метаданных описывающих таблицы, а где он тут? Из текста статьи непонятно.
Ну, т.е. очевидна польза MCP при работе n8n напрмер, но с БД - чем это отличается от generic text-to-sql?
levge
Интересная идея, получаеться что если создать файл описания базы данных или использовать саму метадату базы данных, можно дать аналитику возможность строить запросы через Claude используя MCP. Я думал что надо возиться с RAG.
alexandervarlamov Автор
RAG нужен, когда модели не хватает контекста. А здесь - прямой доступ до БД, понятное название таблицы и полей в ней. LLM весь контекст собирает первыми запросами - читает схемы, смотрит названия полей, потом понимает как строить SQL для ответов на промт