На заре появления LLM пользователям приходилось просто копировать свой код в текстовое окно, чтобы ИИ могла его обработать. Естественно, такой подход быстро всех утомил, и разработчики начали искать свои способы загрузки данных в модель. У этого подхода была серьезная проблема — каждому приходилось изобретать велосипед заново. Именно поэтому появился протокол MCP (Model Context Protocol) — универсальный способ дать искусственному интеллекту доступ к нужным данным, неважно где они хранятся — на компьютере пользователя или же в интернете.
Как это работает?
Протокол состоит из трех главных частей:
-
Хост — это приложения с ИИ внутри (например, Claude Desktop или другие среды разработки), которые хотят получить доступ к данным
-
Клиентская часть — находится внутри такой программы и держит связь с сервером
-
Серверная часть — предоставляет доступ к данным, инструментам и шаблонам запросов
Как устроена серверная часть
Если вы уже работали с инструментами для ИИ, то вам будет несложно разобраться. Давайте посмотрим на пример — сервер для поиска через Brave Search.
Внутри программа сервера определяет инструменты, к которым у него есть доступ, и сообщает об их доступности клиенту.
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [WEB_SEARCH_TOOL, LOCAL_SEARCH_TOOL],
}));
Например, инструмент для веб-поиска (WEB_SEARCH_TOOL
) описывается так:
{
name: "brave_web_search",
description: "Поиск в интернете через Brave Search. Подходит для поиска новостей, статей и любой информации в сети. " +
"Используйте для получения свежей информации или когда нужно найти разные источники по теме. " +
"Умеет выдавать результаты постранично и фильтровать контент. " +
"За раз можно получить до 20 результатов. ",
inputSchema: {
type: "object",
properties: {
query: {
type: "string",
description: "Что искать (до 400 символов или 50 слов)"
},
count: {
type: "number",
description: "Сколько результатов показать (от 1 до 20, обычно 10)",
default: 10
},
offset: {
type: "number",
description: "С какого результата начать (до 9, обычно с первого)",
default: 0
},
},
required: ["query"],
},
}
Насколько я могу судить, этот формат похож на то, как работают инструменты в Anthropic Claude Tool Use или OpenAI Function Calling.
Дальше создается обработчик запросов:
server.setRequestHandler(CallToolRequestSchema, async (request) => {
// ...
});
Когда приходит запрос, обработчик смотрит, какой инструмент нужен, и вызывает соответствующую функцию:
case "brave_web_search": {
if (!isBraveWebSearchArgs(args)) {
throw new Error("Неправильные параметры для поиска");
}
const { query, count = 10 } = args;
const results = await performWebSearch(query, count);
return {
content: [{
type: "text",
text: results
}],
isError: false,
};
}
Каждый такой сервер работает как отдельная программа, имеет свой адрес (например, tool://brave_web_search/brave_web_search
) и общается с клиентами через JSON-RPC. Запустить сервер Brave Search можно простой командой:
Сначала нужно получить бесплатный ключ API: просто зарегистрируйтесь в Brave.
$ export BRAVE_API_KEY=your-api-key
$ npx -y @modelcontextprotocol/server-brave-search
Как работает клиентская часть
Для начала клиент должен знать, к какому серверу подключаться:
const transport = new StdioClientTransport({
command: "tool://brave_web_search/brave_web_search"
});
Затем устанавливаем соединение:
await client.connect(transport);
При подключении происходит "рукопожатие" — клиент и сервер договариваются о том, как они будут работать:
-
Клиент сообщает, какую версию протокола использует и что умеет делать
-
Сервер отвечает своими возможностями и версией протокола
-
Клиент подтверждает, что всё понял
-
После этого можно начинать обмен данными
Теперь клиент может отправлять запросы:
const resources = await client.request(
{ method: "brave_web_search" },
BraveWebSearchResultSchema
);
В протоколе есть четыре типа сообщений:
-
Запросы — когда нужен ответ
-
Уведомления — просто сообщить что-то, ответ не нужен
-
Результаты — успешные ответы на запросы
-
Ошибки — когда что-то пошло не так
Как передаются данные
Протокол MCP умеет работать двумя способами:
-
Через стандартный ввод/вывод
-
Самый простой способ для программ на одном компьютере
-
Работает как обычный обмен текстом между программами
-
-
Через HTTP с Server-Sent Events (SSE)
-
Сервер отправляет данные клиенту через SSE
-
Клиент общается с сервером через обычные HTTP POST-запросы
-
В обоих случаях для передачи данных используется формат JSON-RPC 2.0 — простой и надёжный способ удалённого вызова функций.
Как работает Хост
Программа-хост — это то приложение, которое решает, к каким серверам подключаться и когда. Её главная задача — понять, что умеет делать каждый сервер, и придумать, как с их помощью решить задачу пользователя.
Надо сказать, что эта часть протокола описана довольно расплывчато. Насколько я понимаю, предполагается, что каждый разработчик сам решает, как именно его приложение будет выбирать и использовать серверы. Если интересно, я рассказывал об этом подробнее в статье "Как научить ИИ пользоваться инструментами".
Что уже есть в открытом доступе
Готовые библиотеки для разработчиков:
Готовые серверы:
-
Filesystem — безопасный доступ к файлам с гибкими настройками прав
-
GitHub — работа с репозиториями и API GitHub
-
Google Drive — поиск и доступ к файлам
-
PostgreSQL — чтение из базы данных с анализом её структуры
-
Slack — управление каналами и отправка сообщений
-
Memory — система долговременной памяти на основе графов знаний
-
Puppeteer — автоматизация браузера и сбор данных с веб-страниц
-
Brave Search — поиск в интернете и на компьютере через API Brave
-
Google Maps — всё для работы с картами: поиск мест, построение маршрутов и подробная информация о местах
-
Fetch — загрузка веб-страниц в формате, удобном для обработки ИИ
Серверы от сообщества:
-
MCP YouTube — скачивает субтитры с YouTube через
yt-dlp
Кто уже использует MCP
Протокол уже взяли на вооружение несколько известных проектов:
-
Sourcegraph Cody: использует для улучшения контекста при работе с кодом
-
Zed Editor: расширяет возможности для разработчиков
Пример от Sourcegraph Cody
В их блоге есть отличный пример:
Cody подключается к базе PostgreSQL, смотрит её схему и на основе этого пишет запрос Prisma.
Пример от Zed Editor
А вот что пишут в своем блоге разработчики Zed:
Они сделали расширение для PostgreSQL, которое сразу даёт модели ИИ информацию о структуре базы данных. Теперь, когда пользователь просит написать запрос, ИИ точно знает, какие таблицы и столбцы есть в базе и какие у них типы данных.
В блоге Sourcegraph также есть пример построения линейной интеграции с TypeScript и MCP.
Тестируем MCP в Claude Desktop
Давайте попробуем запустить MCP — проще всего это сделать через приложение Claude Desktop.
Сначала нужно настроить приложение. Откройте любым текстовым редактором файл конфигурации:
~/Library/Application Support/Claude/claude_desktop_config.json
Важно: этого файла скорее всего у вас нет, его нужно создать. И не перепутайте с файлом ~/Library/Application Support/Claude/config.json
— это совсем другой файл, его не трогаем.
Добавьте в файл такие настройки:
{
"mcpServers": {
"brave_search": {
"command": "npx",
"args": ["@modelcontextprotocol/server-brave-search"],
"env": {
"BRAVE_API_KEY": "ваш-ключ-api"
}
}
}
}
Этой записью мы говорим приложению:
-
Есть сервер MCP под названием
brave_search
-
Запускать его нужно командой
npx @modelcontextprotocol/server-brave-search
-
Для работы ему нужен ваш ключ API от Brave
Сохраните файл и перезапустите Claude Desktop.
Теперь можно попросить приложение что-нибудь поискать в интернете. Например, напишите "поищи в интернете информацию о glama.ai".
При первом запросе приложение спросит разрешение на использование MCP — это диалоговое окно с запросом прав.
Нажмите "Разрешить для этого чата" (Allow for This Chat), и Claude Desktop начнёт поиск через сервер Brave Search.
Есть ли альтернативы?
Да, есть несколько проектов с открытым исходным кодом, которые решают те же задачи:
-
Web Applets — открытая спецификация и набор инструментов для создания приложений, с которыми могут работать ИИ-ассистенты
Что дальше?
Я думаю, что MCP станет по-настоящему популярным только когда появится поддержка HTTP. Но уже можно представить будущее, где в таких приложениях как Glama или Claude Desktop появится что-то вроде магазина MCP-серверов — пользователи смогут просто подключать нужные сервисы к своим рабочим процессам.
Первые впечатления
Хотя MCP позиционируется как открытый стандарт, пока что он больше заточен под работу с Claude от Anthropic. Есть и другие проблемы:
-
Нет чёткой документации по совместимости с другими провайдерами ИИ (AWS Bedrock, Google Vertex AI)
-
Настройка серверов в Claude Desktop делается вручную, нет удобных инструментов
-
Приходится давать разрешение на использование MCP каждый раз при запуске приложения
Поэтому можно сделать вывод, что до полноценного стандарта еще далеко...
Лично я думаю, что победителем в этой гонке станет Computer Use — он сможет решить все те задачи, которые пытается решить MCP, и даже больше. Поэтому, шансов стать новым стандартом у него гораздо больше.
Автор: Ologos