Глава 3

Протокол начинается с сообщения, а не с SDK

SDK удобен, но он же и прячет протокол. Пока всё работает, разница незаметна; как только начинается отладка, вам нужно видеть то, что реально уходит по проводу: method, params, идентификатор, version metadata, HTTP-заголовки и ответ. Оба протокола используют один и тот же конверт - JSON-RPC 2.0, - и именно из-за этого сходства их легко перепутать. Поэтому полезно один раз посмотреть на сырые сообщения обоих.

Вот как MCP адресует конкретную возможность - вызывает инструмент по имени с аргументами и modern-метаданными редакции 2026-07-28.

JSON
{
  "jsonrpc": "2.0",
  "id": "req-42",
  "method": "tools/call",
  "params": {
    "name": "review_release",
    "arguments": {
      "service": "web-portal",
      "version": "2.4.0"
    },
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {
        "name": "release-host",
        "version": "1.0.0"
      },
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}

А вот как A2A передаёт цель исполнителю - отправляет Message с ролью и частями, не называя ни функции, ни её аргументов.

JSON
{
  "jsonrpc": "2.0",
  "id": "req-43",
  "method": "SendMessage",
  "params": {
    "message": {
      "messageId": "msg-1",
      "role": "ROLE_USER",
      "parts": [
        {
          "text": "Проверь релиз web-portal@2.4.0"
        }
      ]
    },
    "configuration": {
      "acceptedOutputModes": [
        "text/markdown",
        "application/json"
      ]
    }
  }
}

Общего у них действительно много: корреляция запроса и ответа по id, структурированные ошибки, транспорт поверх HTTP и возможность streaming. Но различие принципиальное и лежит не в конверте, а в семантике метода. MCP-метод адресует capability - "вызови вот этот инструмент вот с такими аргументами". A2A-операция меняет или читает состояние агентной задачи - "вот цель, веди её жизненный цикл". Один и тот же JSON-RPC описывает два разных мира.

JSON-RPC не делает протоколы взаимозаменяемыми. Одинаковая оболочка не означает одинаковые методы, capability negotiation, ошибки или жизненный цикл. Нельзя отправить tools/call A2A-агенту или SendMessage MCP-серверу.

Умение читать эти сообщения окупается сразу: почти любую проблему интеграции - не тот протокол, потерянные метаданные, неверный формат ответа - видно на wire-уровне раньше, чем в логах приложения. Дальше мы проследим, как из таких сообщений складывается один сквозной запрос через обе границы.

Ссылки