- PVSM.RU - https://www.pvsm.ru -

Обзор на Model Context Protocol (MCP) от Anthropic

На заре появления 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]".

Что уже есть в открытом доступе

Готовые библиотеки для разработчиков:

Готовые серверы:

  • 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

Кто уже использует MCP

Протокол уже взяли на вооружение несколько известных проектов:

  • Sourcegraph Cody [20]: использует для улучшения контекста при работе с кодом

  • Zed Editor [21]: расширяет возможности для разработчиков

Пример от Sourcegraph Cody

В их блоге [20] есть отличный пример:

Cody подключается к базе PostgreSQL, смотрит её схему и на основе этого пишет запрос Prisma.

Обзор на Model Context Protocol (MCP) от Anthropic - 1

Пример от Zed Editor

А вот что пишут в своем блоге [21]разработчики Zed:

Они сделали расширение для PostgreSQL, которое сразу даёт модели ИИ информацию о структуре базы данных. Теперь, когда пользователь просит написать запрос, ИИ точно знает, какие таблицы и столбцы есть в базе и какие у них типы данных.

Обзор на Model Context Protocol (MCP) от Anthropic - 2

В блоге Sourcegraph также есть пример [22]построения линейной интеграции с TypeScript и MCP.

Тестируем MCP в Claude Desktop

Давайте попробуем запустить 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 — это диалоговое окно с запросом прав.

Обзор на Model Context Protocol (MCP) от Anthropic - 3

Нажмите "Разрешить для этого чата" (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