- PVSM.RU - https://www.pvsm.ru -
На заре появления LLM пользователям приходилось просто копировать свой код в текстовое окно, чтобы ИИ могла его обработать. Естественно, такой подход быстро всех утомил, и разработчики начали искать свои способы загрузки данных в модель. У этого подхода была серьезная проблема — каждому приходилось изобретать велосипед заново. Именно поэтому появился протокол MCP [1] (Model Context Protocol) — универсальный способ дать искусственному интеллекту доступ к нужным данным, неважно где они хранятся — на компьютере пользователя или же в интернете.
Протокол состоит из трех главных частей:
Хост — это приложения с ИИ внутри (например, Claude Desktop или другие среды разработки), которые хотят получить доступ к данным
Клиентская часть — находится внутри такой программы и держит связь с сервером
Серверная часть — предоставляет доступ к данным, инструментам и шаблонам запросов
Если вы уже работали с инструментами для ИИ [2], то вам будет несложно разобраться. Давайте посмотрим на пример — сервер для поиска через Brave Search [3].
Внутри программа сервера определяет инструменты, к которым у него есть доступ, и сообщает об их доступности клиенту.
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 [2] или OpenAI Function Calling [4].
Дальше создается обработчик запросов:
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 [5].
$ 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 [6] — простой и надёжный способ удалённого вызова функций.
Программа-хост — это то приложение, которое решает, к каким серверам подключаться и когда. Её главная задача — понять, что умеет делать каждый сервер, и придумать, как с их помощью решить задачу пользователя.
Надо сказать, что эта часть протокола описана довольно расплывчато. Насколько я понимаю, предполагается, что каждый разработчик сам решает, как именно его приложение будет выбирать и использовать серверы. Если интересно, я рассказывал об этом подробнее в статье "Как научить ИИ пользоваться инструментами [7]".
TypeScript [8]
Python [9]
Filesystem [10] — безопасный доступ к файлам с гибкими настройками прав
GitHub [11] — работа с репозиториями и API GitHub
Google Drive [12] — поиск и доступ к файлам
PostgreSQL [13] — чтение из базы данных с анализом её структуры
Slack [14] — управление каналами и отправка сообщений
Memory [15] — система долговременной памяти на основе графов знаний
Puppeteer [16] — автоматизация браузера и сбор данных с веб-страниц
Brave Search [3] — поиск в интернете и на компьютере через API Brave
Google Maps [17] — всё для работы с картами: поиск мест, построение маршрутов и подробная информация о местах
Fetch [18] — загрузка веб-страниц в формате, удобном для обработки ИИ
MCP YouTube [19] — скачивает субтитры с YouTube через yt-dlp
Протокол уже взяли на вооружение несколько известных проектов:
Sourcegraph Cody [20]: использует для улучшения контекста при работе с кодом
Zed Editor [21]: расширяет возможности для разработчиков
В их блоге [20] есть отличный пример:
Cody подключается к базе PostgreSQL, смотрит её схему и на основе этого пишет запрос Prisma.
А вот что пишут в своем блоге [21]разработчики Zed:
Они сделали расширение для PostgreSQL, которое сразу даёт модели ИИ информацию о структуре базы данных. Теперь, когда пользователь просит написать запрос, ИИ точно знает, какие таблицы и столбцы есть в базе и какие у них типы данных.
В блоге Sourcegraph также есть пример [22]построения линейной интеграции с TypeScript и MCP.
Давайте попробуем запустить MCP — проще всего это сделать через приложение Claude Desktop. [23]
Сначала нужно настроить приложение. Откройте любым текстовым редактором файл конфигурации:
~/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 [24] — открытая спецификация и набор инструментов для создания приложений, с которыми могут работать ИИ-ассистенты
Я думаю, что MCP станет по-настоящему популярным только когда появится поддержка HTTP. Но уже можно представить будущее, где в таких приложениях как Glama или Claude Desktop появится что-то вроде магазина MCP-серверов — пользователи смогут просто подключать нужные сервисы к своим рабочим процессам.
Хотя MCP позиционируется как открытый стандарт [25], пока что он больше заточен под работу с Claude от Anthropic. Есть и другие проблемы:
Нет чёткой документации по совместимости с другими провайдерами ИИ (AWS Bedrock, Google Vertex AI)
Настройка серверов в Claude Desktop делается вручную, нет удобных инструментов
Приходится давать разрешение на использование MCP каждый раз при запуске приложения
Поэтому можно сделать вывод, что до полноценного стандарта еще далеко...
Лично я думаю, что победителем в этой гонке станет Computer Use [26] — он сможет решить все те задачи, которые пытается решить MCP, и даже больше. Поэтому, шансов стать новым стандартом у него гораздо больше.
Автор: Ologos
Источник [27]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/api/403657
Ссылки в тексте:
[1] протокол MCP: https://www.anthropic.com/news/model-context-protocol
[2] инструментами для ИИ: https://docs.anthropic.com/en/docs/build-with-claude/tool-use
[3] Brave Search: https://github.com/modelcontextprotocol/servers/tree/main/src/brave-search
[4] OpenAI Function Calling: https://platform.openai.com/docs/guides/gpt/function-calling
[5] зарегистрируйтесь в Brave: https://api.search.brave.com/
[6] JSON-RPC 2.0: https://www.jsonrpc.org/
[7] Как научить ИИ пользоваться инструментами: https://glama.ai/blog/2024-10-17-implementing-tool-functionality-in-conversational-ai
[8] TypeScript: https://github.com/modelcontextprotocol/typescript-sdk
[9] Python: https://github.com/modelcontextprotocol/python-sdk
[10] Filesystem: https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem
[11] GitHub: https://github.com/modelcontextprotocol/servers/tree/main/src/github
[12] Google Drive: https://github.com/modelcontextprotocol/servers/tree/main/src/gdrive
[13] PostgreSQL: https://github.com/modelcontextprotocol/servers/tree/main/src/postgres
[14] Slack: https://github.com/modelcontextprotocol/servers/tree/main/src/slack
[15] Memory: https://github.com/modelcontextprotocol/servers/tree/main/src/memory
[16] Puppeteer: https://github.com/modelcontextprotocol/servers/tree/main/src/puppeteer
[17] Google Maps: https://github.com/modelcontextprotocol/servers/tree/main/src/google-maps
[18] Fetch: https://github.com/modelcontextprotocol/servers/tree/main/src/fetch
[19] MCP YouTube: https://github.com/anaisbetts/mcp-youtube
[20] Sourcegraph Cody: https://sourcegraph.com/blog/cody-supports-anthropic-model-context-protocol
[21] Zed Editor: https://zed.dev/blog/mcp
[22] пример : https://sourcegraph.com/blog/cody-supports-anthropic-model-context-protocol#building-a-linear-mcp-integration
[23] приложение Claude Desktop.: https://claude.ai/download
[24] Web Applets: https://github.com/unternet-co/web-applets/
[25] позиционируется как открытый стандарт: https://spec.modelcontextprotocol.io/specification/
[26] Computer Use: https://glama.ai/blog/2024-10-22-automate-computer-using-claude
[27] Источник: https://habr.com/ru/articles/862312/?utm_source=habrahabr&utm_medium=rss&utm_campaign=862312
Нажмите здесь для печати.