На прошлой неделе я полдня потратил на то, чтобы научить Claude работать с моей базой данных напрямую. Не через копипаст SQL-запросов в чат, а по-настоящему — чтобы он сам мог читать схему, выполнять запросы и показывать результаты. Оказалось, что Anthropic уже сделали для этого протокол. Model Context Protocol, или просто MCP.
Суть простая: вместо того чтобы каждый раз объяснять ИИ, как достать данные из вашей системы, вы один раз описываете набор инструментов — а дальше модель сама решает, когда их вызывать. Звучит как очередной buzzword, но на практике работает неожиданно удобно.
Что это вообще такое
MCP — это стандарт для подключения инструментов к языковым моделям. Вы пишете сервер (на Python, TypeScript, во что угодно), который умеет делать что-то полезное: читать файлы, дёргать API, работать с базой. Модель подключается к этому серверу и получает список доступных функций. Нужно что-то сделать? Она просит сервер выполнить нужный инструмент и получает результат.
Я сначала подумал, что это просто обёртка над function calling из OpenAI API. Нет, тут другой уровень абстракции. Function calling — это когда вы в каждом запросе передаёте список функций и их описания. MCP — это когда сервер с инструментами живёт отдельно, и модель может к нему обращаться в любой момент сессии. Разница как между тем, чтобы каждый раз объяснять человеку, где лежит молоток, и тем, чтобы один раз показать мастерскую.
Протокол открытый. Anthropic запустили его в ноябре 2024, выложили спецификацию на GitHub. Уже появились серверы для Postgres, GitHub, Google Drive, Slack. Я смотрел на список — там штук 30, и половина написана сообществом за пару недель после анонса.
Как это работает изнутри
MCP-сервер — это обычная программа, которая общается с клиентом (например, Claude Desktop) по JSON-RPC. Клиент спрашивает: какие инструменты у тебя есть? Сервер отвечает списком с описаниями. Потом клиент может вызвать любой инструмент с параметрами, и сервер вернёт результат.
Я попробовал написать простой сервер для работы с моим Notion. Взял Python SDK от Anthropic — там есть mcp библиотека, которая берёт на себя всю возню с протоколом. Мне нужно было только описать инструменты:
@server.call_tool()
async def search_pages(arguments: dict) -> list[TextContent]:
query = arguments.get("query", "")
results = notion.search(query=query)
return [TextContent(type="text", text=format_results(results))]
Всё. Теперь Claude может искать страницы в моём Notion, просто написав что-то вроде "найди все заметки про MCP". Модель сама понимает, когда нужно вызвать этот инструмент, какие параметры передать, и как интерпретировать результат.
Под капотом происходит примерно следующее: Claude видит мой запрос, смотрит на список доступных инструментов, решает что нужно вызвать search_pages, формирует JSON с параметрами, отправляет серверу. Получает результат, и только потом формулирует ответ мне. Всё это занимает пару секунд.
Зачем это вообще нужно
Я сначала скептически отнёсся к идее. Ну подключил Claude к базе данных — и что? Я же могу просто скопировать схему в чат и попросить написать SQL. Да, могу. Но когда я начал пользоваться, понял разницу.
Модель видит актуальное состояние. Когда я меняю схему базы или добавляю новую таблицу, мне не нужно обновлять промпт — сервер сам отдаёт свежую информацию. Claude сам решает, когда и какие инструменты вызывать. Я могу спросить "сколько пользователей зарегистрировалось за последний месяц?" — и он сам выполнит запрос, подсчитает, покажет. Мне не нужно явно просить "напиши SQL и выполни его".
Самое неожиданное — цепочки действий. Я спрашиваю "какие самые популярные посты в блоге?" — Claude сначала выполняет запрос к базе, получает список ID, потом дёргает API блога чтобы получить заголовки, и только потом показывает мне результат. Я этого не просил явно — модель сама поняла, что нужна цепочка вызовов.
У меня был момент, когда я попросил Claude "найди все баги, которые мы закрыли на этой неделе, и создай краткий саммари для команды". Он пошёл в GitHub Issues, нашёл закрытые баги, прочитал описания, сгруппировал по категориям, и выдал готовый текст. На это у меня обычно уходило минут 20. Тут — две минуты.
Что можно подключить
Сейчас официальные серверы есть для базовых штук: файловая система, Postgres, SQLite, Google Drive, GitHub, GitLab, Slack. Я пробовал несколько.
С Postgres получилось быстро — установил сервер через npm, добавил строку подключения в конфиг Claude Desktop, перезапустил. Теперь Claude может читать схему, выполнять SELECT-запросы (INSERT/UPDATE/DELETE заблокированы для безопасности), объяснять связи между таблицами. Я спросил его "покажи мне схему таблицы orders" — он сам выполнил \d orders в Postgres и вывел результат.
С GitHub чуть сложнее, потому что нужен токен доступа. Но после настройки могу спросить Claude "какие PR открыты в репозитории?" или "найди issue, где упоминается bug с авторизацией". Модель сама дёргает GitHub API и парсит результат.
Самый прикольный сервер — filesystem. Даёшь Claude доступ к папке, и он может читать файлы, искать по содержимому, даже запускать grep. Я подключил папку с проектом и спросил "где у меня используется функция parseConfig?" — Claude нашёл все места за секунду. Обычно я бы лез в IDE или запускал grep вручную.
Есть и неофициальные серверы, которые написало сообщество. Нашёл для Stripe, для MongoDB, для Kubernetes. Качество разное, но идея понятна — можно подключить что угодно, если написать сервер.
Как начать
Начал я с самого простого — подключил официальный filesystem-сервер к Claude Desktop. Скачал приложение (оно пока только для macOS и Windows), нашёл конфиг в ~/Library/Application Support/Claude/, добавил туда строчку:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/zero/projects"]
}
}
}
Перезапустил Claude — и всё. Теперь в чате появилась иконка с инструментами. Когда спрашиваю про файлы в этой папке, Claude их сам читает.
Дальше попробовал написать свой сервер. Взял Python SDK, накидал скрипт на 50 строк, который умеет читать мои TODO из текстового файла и искать по ним. Запустил сервер, добавил в конфиг Claude:
{
"mcpServers": {
"todos": {
"command": "python",
"args": ["/Users/zero/mcp-servers/todos.py"]
}
}
}
Теперь могу спросить Claude "что у меня в TODO на эту неделю?" — и он сам прочитает файл и покажет список. Мелочь, но удобно.
Если хочешь попробовать — начни с готовых серверов. Не надо сразу писать свой. Поставь Claude Desktop, подключи filesystem или SQLite сервер, поиграйся. Когда поймёшь как оно работает, можешь написать что-то своё. Документация на GitHub нормальная, примеры есть.
Подводные камни
Конечно, не всё гладко. Первая штука — это скорость. Каждый вызов инструмента добавляет задержку. Если Claude решает сделать цепочку из пяти запросов к базе, ждёшь секунд 10-15. Для интерактивной работы это заметно. С другой стороны, я раньше эти же действия делал руками, и уходило больше времени.
Безопасность — тут нужно быть осторожным. Даёшь ИИ доступ к файлам или базе — нужно быть уверенным, что он не натворит дел. MCP-серверы обычно работают read-only по умолчанию, но если включить запись, модель теоретически может удалить что-то важное. Я пока держу всё в режиме чтения и не даю доступ к продакшен-системам.
Ошибки тоже бывают. Когда сервер падает или возвращает невалидный JSON, Claude просто говорит "не смог выполнить инструмент" и всё. Дебажить приходится вручную, смотреть логи сервера. Удобного интерфейса для этого пока нет.
И последнее — это пока только Claude Desktop. Хочешь использовать MCP с API или с другими клиентами? Придётся самому писать интеграцию. Anthropic обещают расширить поддержку, но пока что это экспериментальная фича для десктопного приложения.
Что дальше
MCP — это первая попытка стандартизировать подключение инструментов к LLM. До этого каждый делал по-своему: OpenAI — function calling в API, LangChain — свои агенты и tools, AutoGPT — плагины. Теперь есть общий протокол, и это меняет подход.
Я вижу два сценария. Появятся маркетплейсы MCP-серверов, как было с плагинами для ChatGPT. Захочешь подключить CRM — найдёшь готовый сервер, ткнёшь кнопку "установить", и всё. Компании начнут делать официальные MCP-серверы для своих API. Stripe, Notion, Jira — каждый выпустит свой сервер, и подключать их будет проще чем писать integration вручную.
Пока что MCP сырой. Документация неполная, экосистема маленькая, багов хватает. Но идея правильная. Вместо того чтобы копипастить данные в чат или писать кастомные скрипты для каждой задачи, даёшь модели набор инструментов один раз — и дальше она сама разбирается.
Я уже не представляю как работал с Claude без этого. Пара серверов, которые подключил — для базы, для GitHub, для файлов — закрывают процентов 80 моих повседневных задач. Остальное допилю по мере необходимости.
