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

в 8:16, , рубрики: Anthropic, api, claude, MPC, TypeScript, искуственный интеллект

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

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

Пример от Zed Editor

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

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

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

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

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

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

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js