[{"data":1,"prerenderedAt":99},["ShallowReactive",2],{"wiki-mcp-mcp-transports-ru":3},{"meta":4,"html":8,"headings":9,"words":98},{"title":5,"description":6,"published":7,"updated":7,"sourceUpdated":7},"Транспорты MCP: stdio и Streamable HTTP","Транспорт MCP определяет, как сообщения JSON-RPC разбиваются и доставляются. stdio, Streamable HTTP, заголовки, коды HTTP, история и обратная совместимость.","2026-11-03","\u003Cp>\u003Cstrong>Транспорт (transport)\u003C/strong> в Model Context Protocol (MCP) - привязка к каналу связи, которая определяет, как сообщения JSON-RPC между клиентом и сервером разбиваются на части и доставляются, как передаются метаданные запроса и как сообщается об отмене и завершении работы. Смысл сообщений транспорт не меняет: одни и те же запросы и результаты идут по любому транспорту. Спецификация определяет два стандартных транспорта: stdio для локальных серверов и Streamable HTTP для удалённых.\u003C/p>\n\u003Cp>Первая версия спецификации, 2024-11-05, определяла stdio и HTTP с Server-Sent Events (HTTP+SSE). В версии 2025-03-26 HTTP+SSE заменил Streamable HTTP. Текущая версия спецификации - \u003Cstrong>2026-07-28\u003C/strong>: она убрала из Streamable HTTP сессии протокола, и с тех пор любой запрос может обработать любой экземпляр сервера. Протокол развивается в Agentic AI Foundation, входящем в Linux Foundation. Общая архитектура MCP описана в статье \u003Ca href=\"/ru/wiki/mcp/what-is-mcp\" class=\"wiki-link wiki-link--article\">Что такое MCP\u003C/a>.\u003C/p>\n\u003Ch2 id=\"кратко\" class=\"wiki-heading\">Кратко\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"кратко\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Параметр\u003C/th>\n\u003Cth>Значение\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Уровень\u003C/td>\n\u003Ctd>Транспортный уровень MCP\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Формат сообщений\u003C/td>\n\u003Ctd>JSON-RPC 2.0, UTF-8\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Стандартные транспорты\u003C/td>\n\u003Ctd>stdio, Streamable HTTP\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Разбиение потока в stdio\u003C/td>\n\u003Ctd>Одно сообщение JSON-RPC на строку\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Эндпоинт Streamable HTTP\u003C/td>\n\u003Ctd>Один MCP-эндпоинт, принимает POST\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Ответ сервера по HTTP\u003C/td>\n\u003Ctd>Объект JSON или поток SSE в рамках запроса\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Сессии протокола\u003C/td>\n\u003Ctd>Нет с версии 2026-07-28\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Устаревший транспорт\u003C/td>\n\u003Ctd>HTTP+SSE из 2024-11-05, устарел с 2025-03-26\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Текущая спецификация\u003C/td>\n\u003Ctd>2026-07-28\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Ch2 id=\"какую-задачу-решают-транспорты\" class=\"wiki-heading\">Какую задачу решают транспорты\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"какую-задачу-решают-транспорты\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>\u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"mcp-server\">MCP-серверы\u003C/span> работают двумя разными способами. Локальный сервер - программа на машине пользователя, которую часто запускает сам хост. Удалённый сервер - сетевой сервис, к которому многие пользователи обращаются через интернет. Этим случаям нужна разная доставка: в одном - канал между двумя процессами, в другом - HTTP с балансировщиками нагрузки, шлюзами и авторизацией.\u003C/p>\n\u003Cp>Протокол отделяет смысл сообщений от их доставки. Уровень данных определяет сообщения JSON-RPC: обнаружение возможностей, примитивы, уведомления, ошибки. Транспортный уровень определяет, как эти сообщения доходят до другой стороны. Поэтому один раз написанный сервер можно развернуть и локально, и удалённо, а его логика не зависит от транспорта.\u003C/p>\n\u003Ch2 id=\"история\" class=\"wiki-heading\">История\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"история\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>В таблице - изменения транспортов от версии к версии спецификации.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Версия\u003C/th>\n\u003Cth>Изменения в транспортах\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>2024-11-05\u003C/td>\n\u003Ctd>stdio и HTTP+SSE: поток SSE для сообщений сервера и отдельный эндпоинт для запросов POST; обязательная проверка \u003Ccode>Origin\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>2025-03-26\u003C/td>\n\u003Ctd>Streamable HTTP заменяет HTTP+SSE: один MCP-эндпоинт для POST и GET, необязательный SSE, сессии с \u003Ccode>Mcp-Session-Id\u003C/code>, возобновляемые потоки с \u003Ccode>Last-Event-ID\u003C/code>; пакетная отправка JSON-RPC\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>2025-06-18\u003C/td>\n\u003Ctd>Пакетная отправка убрана; заголовок \u003Ccode>MCP-Protocol-Version\u003C/code> обязателен в HTTP-запросах\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>2025-11-25\u003C/td>\n\u003Ctd>HTTP 403 при неверном \u003Ccode>Origin\u003C/code>; сервер может закрыть соединение SSE, а клиент переподключается с \u003Ccode>Last-Event-ID\u003C/code>; stderr разрешён для журнала любого уровня\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>2026-07-28\u003C/td>\n\u003Ctd>Нет сессий, потока GET и возобновления потоков; заголовки \u003Ccode>Mcp-Method\u003C/code> и \u003Ccode>Mcp-Name\u003C/code>; нет запросов от сервера; \u003Ccode>subscriptions/listen\u003C/code> для уведомлений; HTTP+SSE получил статус Deprecated\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Ch2 id=\"что-определяет-транспорт\" class=\"wiki-heading\">Что определяет транспорт\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"что-определяет-транспорт\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>Все сообщения MCP - сообщения JSON-RPC в кодировке UTF-8. Транспорт доставляет запросы и уведомления от клиента к серверу и ответы и уведомления от сервера к клиенту. В версии 2026-07-28 сервер не отправляет запросы JSON-RPC: когда ему нужны данные от клиента, он возвращает \u003Ccode>InputRequiredResult\u003C/code> в рамках механизма \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"mrtr\">Multi Round-Trip Requests\u003C/span> (MRTR), многоэтапных запросов.\u003C/p>\n\u003Cp>Все метаданные протокола передаются в теле сообщения. Каждый запрос несёт версию протокола и возможности (capabilities) клиента в поле \u003Ccode>_meta\u003C/code>. Транспорт может копировать отдельные поля тела в свою оболочку, как Streamable HTTP копирует их в заголовки. Источником истины остаётся тело, а транспорт, который копирует метаданные, определяет, как отклонять расхождения.\u003C/p>\n\u003Cp>Каждый транспорт также определяет, как клиент отказывается от запроса, который ещё выполняется: в stdio клиент отправляет уведомление, в Streamable HTTP закрывает поток ответа на этот запрос. Модель запросов без состояния версии 2026-07-28 описана в статье \u003Ca href=\"/ru/wiki/mcp/stateless-mcp\" class=\"wiki-link wiki-link--article\">MCP без состояния\u003C/a>.\u003C/p>\n\u003Ch2 id=\"stdio\" class=\"wiki-heading\">stdio\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"stdio\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Ch3 id=\"запуск-сервера\" class=\"wiki-heading\">Запуск сервера\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"запуск-сервера\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>В транспорте \u003Cstrong>stdio\u003C/strong> клиент запускает MCP-сервер как дочерний процесс и обменивается с ним данными через стандартные потоки этого процесса. Сервер читает сообщения из стандартного ввода (\u003Ccode>stdin\u003C/code>) и пишет сообщения в стандартный вывод (\u003Ccode>stdout\u003C/code>). Команду запуска хост берёт из своей конфигурации, например из файла \u003Ccode>claude_desktop_config.json\u003C/code> приложения Claude Desktop, который приведён в документации MCP:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"json\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">JSON\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Скопировано\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Копировать\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Скопировано\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>{\n  &quot;mcpServers&quot;: {\n    &quot;filesystem&quot;: {\n      &quot;command&quot;: &quot;npx&quot;,\n      &quot;args&quot;: [\n        &quot;-y&quot;,\n        &quot;@modelcontextprotocol/server-filesystem&quot;,\n        &quot;/Users/username/Desktop&quot;\n      ]\n    }\n  }\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Процесс сервера работает с теми же правами, что и хост. Спецификация указывает, что серверу на stdio не следует использовать механизм авторизации MCP: учётные данные он берёт из окружения, например из переменных окружения.\u003C/p>\n\u003Ch3 id=\"разбиение-потока-на-сообщения\" class=\"wiki-heading\">Разбиение потока на сообщения\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"разбиение-потока-на-сообщения\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Сообщения разделяются переводом строки и не должны содержать переводов строки внутри, поэтому каждая строка потока - ровно одно сообщение JSON-RPC. Запрос \u003Ccode>server/discover\u003C/code>, записанный в \u003Ccode>stdin\u003C/code>, выглядит так:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"json\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">JSON\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Скопировано\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Копировать\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Скопировано\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>{&quot;jsonrpc&quot;:&quot;2.0&quot;,&quot;id&quot;:1,&quot;method&quot;:&quot;server/discover&quot;,&quot;params&quot;:{&quot;_meta&quot;:{&quot;io.modelcontextprotocol/protocolVersion&quot;:&quot;2026-07-28&quot;,&quot;io.modelcontextprotocol/clientCapabilities&quot;:{}}}}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Слоя заголовков нет: метод, аргументы и все метаданные находятся в теле JSON. Все сообщения сервера идут по одному каналу, \u003Ccode>stdout\u003C/code>: ответы, которые сопоставляются с запросами по \u003Ccode>id\u003C/code> JSON-RPC, уведомления о выполняющемся запросе и уведомления подписок \u003Ccode>subscriptions/listen\u003C/code>. Подписки клиент различает по полю \u003Ccode>io.modelcontextprotocol/subscriptionId\u003C/code> в \u003Ccode>_meta\u003C/code>.\u003C/p>\n\u003Ch3 id=\"стандартный-вывод-и-стандартный-поток-ошибок\" class=\"wiki-heading\">Стандартный вывод и стандартный поток ошибок\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"стандартный-вывод-и-стандартный-поток-ошибок\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Сервер не должен писать в \u003Ccode>stdout\u003C/code> ничего, кроме корректных сообщений MCP, а клиент не должен писать ничего другого в \u003Ccode>stdin\u003C/code> сервера. Одна отладочная строка в \u003Ccode>stdout\u003C/code> ломает поток. Поэтому руководства по созданию серверов в документации MCP предостерегают от \u003Ccode>print()\u003C/code> в Python и \u003Ccode>console.log()\u003C/code> в JavaScript в серверах на stdio: обе функции по умолчанию пишут в стандартный вывод.\u003C/p>\n\u003Cp>Журнал пишется в стандартный поток ошибок (\u003Ccode>stderr\u003C/code>). Сервер может писать туда любой текст в UTF-8: информационные, отладочные сообщения и сообщения об ошибках. Клиент может перехватывать этот поток, пересылать его или игнорировать и не должен считать вывод в \u003Ccode>stderr\u003C/code> признаком ошибки. С версии 2026-07-28 функция протокола Logging устарела, и спецификация называет \u003Ccode>stderr\u003C/code> её заменой для серверов на stdio.\u003C/p>\n\u003Ch3 id=\"отмена-запроса\" class=\"wiki-heading\">Отмена запроса\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"отмена-запроса\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Чтобы отменить выполняющийся запрос, клиент отправляет уведомление \u003Ccode>notifications/cancelled\u003C/code> с идентификатором этого запроса:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"json\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">JSON\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Скопировано\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Копировать\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Скопировано\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>{\n  &quot;jsonrpc&quot;: &quot;2.0&quot;,\n  &quot;method&quot;: &quot;notifications/cancelled&quot;,\n  &quot;params&quot;: { &quot;requestId&quot;: 3, &quot;reason&quot;: &quot;User cancelled the operation&quot; }\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Серверу следует как можно скорее прекратить работу над запросом, и он не должен отправлять по нему новых сообщений. В stdio сервер тоже использует это уведомление, но только в одном случае: чтобы завершить открытый ранее поток \u003Ccode>subscriptions/listen\u003C/code>.\u003C/p>\n\u003Ch3 id=\"завершение-и-перезапуск\" class=\"wiki-heading\">Завершение и перезапуск\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"завершение-и-перезапуск\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Клиенту следует завершать работу сервера в три шага:\u003C/p>\n\u003Col>\n\u003Cli>Закрыть входной поток дочернего процесса.\u003C/li>\n\u003Cli>Дождаться завершения сервера.\u003C/li>\n\u003Cli>Если сервер не завершился за разумное время, принудительно завершить процесс. В POSIX-системах это обычно \u003Ccode>SIGTERM\u003C/code>, затем \u003Ccode>SIGKILL\u003C/code>; в Windows - \u003Ccode>TerminateProcess\u003C/code> или Job Objects.\u003C/li>\n\u003C/ol>\n\u003Cp>Серверу следует сразу завершаться, когда закрыт его стандартный ввод: спецификация называет это единственным переносимым сигналом штатного завершения. Если процесс сервера неожиданно завершился, клиенту следует перезапустить его. Запросы, которые выполнялись, теряются, и клиент может отправить их заново новому процессу; активные потоки \u003Ccode>subscriptions/listen\u003C/code> открываются заново.\u003C/p>\n\u003Ch3 id=\"доверие-между-процессами\" class=\"wiki-heading\">Доверие между процессами\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"доверие-между-процессами\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Согласно документации MCP о безопасности локальных серверов, клиент и сервер на stdio находятся в одной зоне доверия: сервер уже выполняет код на машине пользователя, и транспорт не является песочницей. Изоляцию при необходимости обеспечивает хост или тот, кто управляет машиной, например с помощью контейнера.\u003C/p>\n\u003Ch2 id=\"streamable-http\" class=\"wiki-heading\">Streamable HTTP\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"streamable-http\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Ch3 id=\"эндпоинт-и-запросы\" class=\"wiki-heading\">Эндпоинт и запросы\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"эндпоинт-и-запросы\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>В транспорте \u003Cstrong>Streamable HTTP\u003C/strong> сервер работает как самостоятельный процесс и обслуживает соединения от многих клиентов. Он предоставляет один HTTP-эндпоинт, \u003Cstrong>MCP-эндпоинт\u003C/strong>, который принимает запросы POST, например \u003Ccode>https://example.com/mcp\u003C/code>.\u003C/p>\n\u003Cp>Каждое сообщение JSON-RPC от клиента - новый HTTP-запрос POST к MCP-эндпоинту. Тело содержит ровно один запрос или одно уведомление. Клиент обязан передать заголовок \u003Ccode>Accept\u003C/code>, в котором перечислены и \u003Ccode>application/json\u003C/code>, и \u003Ccode>text/event-stream\u003C/code>, и заголовки метаданных запроса, описанные ниже. Запрос промпта выглядит так:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"http\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">HTTP\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Скопировано\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Копировать\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Скопировано\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>POST /mcp HTTP/1.1\nHost: example.com\nContent-Type: application/json\nAccept: application/json, text/event-stream\nMCP-Protocol-Version: 2026-07-28\nMcp-Method: prompts/get\nMcp-Name: code_review\n\n{\n  &quot;jsonrpc&quot;: &quot;2.0&quot;,\n  &quot;id&quot;: 7,\n  &quot;method&quot;: &quot;prompts/get&quot;,\n  &quot;params&quot;: {\n    &quot;name&quot;: &quot;code_review&quot;,\n    &quot;arguments&quot;: { &quot;code&quot;: &quot;def hello():\\n    print('world')&quot; },\n    &quot;_meta&quot;: {\n      &quot;io.modelcontextprotocol/protocolVersion&quot;: &quot;2026-07-28&quot;,\n      &quot;io.modelcontextprotocol/clientInfo&quot;: { &quot;name&quot;: &quot;example-client&quot;, &quot;version&quot;: &quot;1.0.0&quot; },\n      &quot;io.modelcontextprotocol/clientCapabilities&quot;: {}\n    }\n  }\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Если тело - уведомление и сервер его принял, сервер отвечает \u003Ccode>202 Accepted\u003C/code> без тела. Ядро протокола версии 2026-07-28 не определяет уведомлений клиента для Streamable HTTP, так что это правило описывает только механику транспорта.\u003C/p>\n\u003Ch3 id=\"ответы\" class=\"wiki-heading\">Ответы\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"ответы\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>\u003Cstrong>Server-Sent Events (SSE)\u003C/strong> - формат HTTP-ответа, в котором сервер передаёт поток событий в рамках одного ответа. На запрос сервер отвечает в одной из двух форм, и клиент обязан поддерживать обе:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>\u003Ccode>Content-Type: application/json\u003C/code>\u003C/strong>: один объект JSON с ответом JSON-RPC.\u003C/li>\n\u003Cli>\u003Cstrong>\u003Ccode>Content-Type: text/event-stream\u003C/code>\u003C/strong>: поток SSE в рамках этого запроса. Поток может передавать уведомления, связанные с запросом, например \u003Ccode>notifications/progress\u003C/code>, а затем итоговый ответ, которым поток следует завершить.\u003C/li>\n\u003C/ul>\n\u003Cp>В отличие от версий до 2025-11-25 включительно, сервер не должен отправлять в потоке собственные запросы JSON-RPC. Открывая поток SSE, серверу следует передать заголовок \u003Ccode>X-Accel-Buffering: no\u003C/code>, чтобы обратные прокси, например nginx, не буферизовали события.\u003C/p>\n\u003Ch3 id=\"потоки-уведомлений\" class=\"wiki-heading\">Потоки уведомлений\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"потоки-уведомлений\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Отдельный поток GET прежних версий в 2026-07-28 убран. Чтобы получать уведомления об изменениях, например \u003Ccode>notifications/tools/list_changed\u003C/code>, клиент отправляет запрос \u003Ccode>subscriptions/listen\u003C/code> методом POST. Ответ на него - поток SSE, который остаётся открытым и передаёт только запрошенные клиентом типы уведомлений. Уведомления о прогрессе и другие уведомления отдельного запроса приходят только в поток ответа на этот запрос.\u003C/p>\n\u003Ch3 id=\"заголовки-запроса\" class=\"wiki-heading\">Заголовки запроса\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"заголовки-запроса\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Streamable HTTP копирует отдельные поля тела JSON-RPC в HTTP-заголовки. Балансировщики нагрузки, шлюзы и средства наблюдения могут тогда маршрутизировать и анализировать запросы, не разбирая тело. В таблице - заголовки версии 2026-07-28.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Заголовок\u003C/th>\n\u003Cth>Источник в теле\u003C/th>\n\u003Cth>Обязателен для\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>MCP-Protocol-Version\u003C/code>\u003C/td>\n\u003Ctd>\u003Ccode>io.modelcontextprotocol/protocolVersion\u003C/code> в \u003Ccode>_meta\u003C/code>\u003C/td>\n\u003Ctd>Каждого запроса POST\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Mcp-Method\u003C/code>\u003C/td>\n\u003Ctd>\u003Ccode>method\u003C/code>\u003C/td>\n\u003Ctd>Всех запросов\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Mcp-Name\u003C/code>\u003C/td>\n\u003Ctd>\u003Ccode>params.name\u003C/code> или \u003Ccode>params.uri\u003C/code>\u003C/td>\n\u003Ctd>\u003Ccode>tools/call\u003C/code>, \u003Ccode>resources/read\u003C/code>, \u003Ccode>prompts/get\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Mcp-Param-{Name}\u003C/code>\u003C/td>\n\u003Ctd>Параметр инструмента, помеченный \u003Ccode>x-mcp-header\u003C/code>\u003C/td>\n\u003Ctd>Вызовов инструментов, которые объявляют такие параметры\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Заголовки \u003Ccode>Mcp-Param-{Name}\u003C/code> создаются из свойства \u003Ccode>x-mcp-header\u003C/code> во входной схеме инструмента, см. статью \u003Ca href=\"/ru/wiki/mcp/mcp-tools\" class=\"wiki-link wiki-link--article\">Инструменты (tools) в MCP\u003C/a>. Серверы могут использовать это свойство, клиенты обязаны его поддерживать.\u003C/p>\n\u003Cp>Значение \u003Ccode>Mcp-Name\u003C/code> или \u003Ccode>Mcp-Param-{Name}\u003C/code>, которое нельзя передать как обычный заголовок ASCII, кодируется в Base64 в виде \u003Ccode>=?base64?{value}?=\u003C/code>. Имена заголовков сравниваются без учёта регистра, а значения, например имена методов, чувствительны к регистру.\u003C/p>\n\u003Ch3 id=\"проверка-заголовков\" class=\"wiki-heading\">Проверка заголовков\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"проверка-заголовков\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Сервер, который обрабатывает тело, обязан отклонить запрос, если заголовок не совпадает с телом, если нет обязательного заголовка или если в заголовке недопустимые символы. Перед сравнением сервер декодирует значения в форме Base64. Отказ - \u003Ccode>400 Bad Request\u003C/code> с ошибкой JSON-RPC \u003Ccode>-32020\u003C/code> (\u003Ccode>HeaderMismatch\u003C/code>):\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"json\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">JSON\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Скопировано\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Копировать\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Скопировано\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>{\n  &quot;jsonrpc&quot;: &quot;2.0&quot;,\n  &quot;id&quot;: 7,\n  &quot;error&quot;: {\n    &quot;code&quot;: -32020,\n    &quot;message&quot;: &quot;Header mismatch: Mcp-Method header value 'tools/call' does not match body value 'prompts/get'&quot;\n  }\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Проверка не даёт сетевым компонентам опираться на разные источники истины, например когда балансировщик маршрутизирует по заголовку, а сервер выполняет тело.\u003C/p>\n\u003Ch3 id=\"коды-состояния-http\" class=\"wiki-heading\">Коды состояния HTTP\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"коды-состояния-http\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>В таблице - коды состояния, которые спецификация определяет для транспорта.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Код\u003C/th>\n\u003Cth>Когда\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>200 OK\u003C/code>\u003C/td>\n\u003Ctd>Ответ на запрос: объект JSON или поток SSE\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>202 Accepted\u003C/code>\u003C/td>\n\u003Ctd>Уведомление принято; тела нет\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>400 Bad Request\u003C/code>\u003C/td>\n\u003Ctd>Расхождение заголовков (\u003Ccode>-32020\u003C/code>), нет обязательной возможности клиента (\u003Ccode>-32021\u003C/code>), неподдерживаемая версия протокола (\u003Ccode>-32022\u003C/code>), уведомление, которое нельзя принять\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>403 Forbidden\u003C/code>\u003C/td>\n\u003Ctd>Неверный заголовок \u003Ccode>Origin\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>404 Not Found\u003C/code>\u003C/td>\n\u003Ctd>Сервер не реализует метод; ошибка JSON-RPC \u003Ccode>-32601\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>405 Method Not Allowed\u003C/code>\u003C/td>\n\u003Ctd>GET или DELETE от клиента прежней версии\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Авторизация добавляет \u003Ccode>401 Unauthorized\u003C/code> и \u003Ccode>403 Forbidden\u003C/code> для отсутствующих, неверных или недостаточных токенов.\u003C/p>\n\u003Ch3 id=\"отмена-и-обрыв-потока\" class=\"wiki-heading\">Отмена и обрыв потока\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"отмена-и-обрыв-потока\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>В Streamable HTTP закрытие потока SSE с ответом означает отмену этого запроса. У каждого запроса свой поток, поэтому разрыв однозначен, и уведомление \u003Ccode>notifications/cancelled\u003C/code> не ожидается. Серверу следует прекратить работу над запросом, и он не должен отправлять по нему новых сообщений.\u003C/p>\n\u003Cp>С версии 2026-07-28 потоки нельзя возобновить: заголовок \u003Ccode>Last-Event-ID\u003C/code> и идентификаторы событий SSE убраны. Если поток ответа оборвался, выполнявшийся запрос теряется. Клиент обязан отправить его заново как новый запрос с новым идентификатором.\u003C/p>\n\u003Ch3 id=\"отсутствие-сессий-и-балансировка-нагрузки\" class=\"wiki-heading\">Отсутствие сессий и балансировка нагрузки\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"отсутствие-сессий-и-балансировка-нагрузки\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Версия 2026-07-28 убрала сессии протокола и заголовок \u003Ccode>Mcp-Session-Id\u003C/code>. Согласно анонсу выпуска, теперь любой запрос может попасть на любой экземпляр сервера за обычным балансировщиком нагрузки с распределением по кругу (round-robin), без общего хранилища.\u003C/p>\n\u003Cp>Состояние, которое должно сохраняться между вызовами, теперь передаётся явно: инструмент возвращает идентификатор, а модель передаёт его аргументом следующего вызова. Изменения выпуска и миграция описаны в статье \u003Ca href=\"/ru/wiki/mcp/stateless-mcp\" class=\"wiki-link wiki-link--article\">MCP без состояния\u003C/a>.\u003C/p>\n\u003Ch3 id=\"безопасность-локальных-http-серверов\" class=\"wiki-heading\">Безопасность локальных HTTP-серверов\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"безопасность-локальных-http-серверов\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Спецификация транспорта содержит три требования безопасности:\u003C/p>\n\u003Col>\n\u003Cli>Серверы обязаны проверять заголовок \u003Ccode>Origin\u003C/code> всех входящих соединений, чтобы предотвратить атаки DNS rebinding. Если \u003Ccode>Origin\u003C/code> передан и неверен, сервер обязан ответить \u003Ccode>403 Forbidden\u003C/code>.\u003C/li>\n\u003Cli>Серверу, который работает локально, следует слушать только localhost (127.0.0.1), а не все сетевые интерфейсы (0.0.0.0).\u003C/li>\n\u003Cli>Серверам следует реализовать аутентификацию для всех соединений.\u003C/li>\n\u003C/ol>\n\u003Cp>Без этих мер, согласно спецификации, злоумышленники могут с помощью DNS rebinding обращаться к локальным MCP-серверам с удалённых веб-сайтов. Документация MCP добавляет, что порт на 127.0.0.1 доступен другим локальным процессам и, через браузер, веб-сайтам.\u003C/p>\n\u003Cblockquote>\n\u003Cp>Привязка к 127.0.0.1 не является границей аутентификации. Локальному HTTP-серверу нужны также проверка \u003Ccode>Origin\u003C/code> и аутентификация.\u003C/p>\n\u003C/blockquote>\n\u003Cp>Другие риски описаны в статье \u003Ca href=\"/ru/wiki/mcp/mcp-security\" class=\"wiki-link wiki-link--article\">Безопасность MCP\u003C/a>.\u003C/p>\n\u003Ch3 id=\"авторизация\" class=\"wiki-heading\">Авторизация\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"авторизация\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Авторизация в MCP необязательна и относится к транспортам на основе HTTP. Реализациям на HTTP следует соблюдать механизм авторизации из спецификации, основанный на OAuth 2.1: клиент передаёт токен в заголовке \u003Ccode>Authorization\u003C/code> каждого запроса. Серверам на stdio не следует его использовать: они берут учётные данные из окружения. Подробности - в статье \u003Ca href=\"/ru/wiki/mcp/mcp-authorization\" class=\"wiki-link wiki-link--article\">Авторизация в MCP\u003C/a>.\u003C/p>\n\u003Ch2 id=\"обратная-совместимость\" class=\"wiki-heading\">Обратная совместимость\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"обратная-совместимость\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Ch3 id=\"прежние-редакции-streamable-http\" class=\"wiki-heading\">Прежние редакции Streamable HTTP\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"прежние-редакции-streamable-http\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Версии с 2025-03-26 по 2025-11-25 использовали Streamable HTTP с сессиями (\u003Ccode>Mcp-Session-Id\u003C/code>, завершение запросом DELETE), отдельным потоком GET, запросами сервера в потоках SSE и возобновлением через \u003Ccode>Last-Event-ID\u003C/code>. Сервер, который поддерживает только 2026-07-28, отвечает на GET и DELETE кодом \u003Ccode>405 Method Not Allowed\u003C/code> и игнорирует \u003Ccode>Mcp-Session-Id\u003C/code> и \u003Ccode>Last-Event-ID\u003C/code>.\u003C/p>\n\u003Cp>Клиент, который поддерживает и версии с рукопожатием \u003Ccode>initialize\u003C/code>, сначала отправляет запрос в текущем формате. При ответе \u003Ccode>400 Bad Request\u003C/code> он смотрит на тело: известная ошибка JSON-RPC текущей версии означает современный сервер, а пустое тело или неизвестная ошибка - сервер прежней версии, и тогда клиент переходит на \u003Ccode>initialize\u003C/code>. В stdio клиент проверяет сервер запросом \u003Ccode>server/discover\u003C/code>. Переход не должен зависеть от одного конкретного кода ошибки, потому что прежние серверы отвечают на неизвестные запросы по-разному или не отвечают вовсе.\u003C/p>\n\u003Ch3 id=\"транспорт-httpsse\" class=\"wiki-heading\">Транспорт HTTP+SSE\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"транспорт-httpsse\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Транспорт HTTP+SSE версии 2024-11-05 использовал два эндпоинта. Клиент открывал поток SSE, сервер отправлял событие \u003Ccode>endpoint\u003C/code> с адресом для сообщений, и клиент отправлял все сообщения запросами POST на этот адрес.\u003C/p>\n\u003Cp>HTTP+SSE устарел с версии 2025-03-26. Версия 2026-07-28 присвоила ему статус Deprecated по политике жизненного цикла функций (SEP-2596): новым реализациям не следует его использовать. Согласно реестру устаревших функций, его можно удалить не раньше чем через три месяца после того, как SEP-2596 получил статус Final.\u003C/p>\n\u003Cp>Сервер может сохранить старые эндпоинты рядом с новым MCP-эндпоинтом. Клиент сначала отправляет запрос POST на адрес сервера. Если ответ - \u003Ccode>400\u003C/code>, \u003Ccode>404\u003C/code> или \u003Ccode>405\u003C/code> без известной ошибки JSON-RPC текущей версии, он отправляет запрос GET, и событие \u003Ccode>endpoint\u003C/code> первым в потоке означает HTTP+SSE.\u003C/p>\n\u003Ch2 id=\"собственные-транспорты\" class=\"wiki-heading\">Собственные транспорты\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"собственные-транспорты\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>Клиенты и серверы могут реализовать собственные транспорты. Протокол не зависит от транспорта и может работать поверх любого канала с двусторонним обменом сообщениями. Собственный транспорт обязан сохранять формат сообщений JSON-RPC, шаблоны обмена сообщениями и модель метаданных в каждом запросе. Ему следует документировать, как устанавливается соединение, как разбивается поток на сообщения и как работает отмена.\u003C/p>\n\u003Cp>Собственному транспорту поверх надёжного двустороннего потока байтов, например сокетов Unix или TCP, следует использовать разбиение потока из stdio: одно сообщение JSON-RPC на строку.\u003C/p>\n\u003Ch2 id=\"сравнение-stdio-и-streamable-http\" class=\"wiki-heading\">Сравнение stdio и Streamable HTTP\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"сравнение-stdio-и-streamable-http\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>В таблице сравниваются два стандартных транспорта.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003C/th>\n\u003Cth>stdio\u003C/th>\n\u003Cth>Streamable HTTP\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Типичное развёртывание\u003C/td>\n\u003Ctd>Локальный сервер на машине пользователя\u003C/td>\n\u003Ctd>Удалённый сервер, сетевой сервис\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Кто запускает сервер\u003C/td>\n\u003Ctd>Клиент, как дочерний процесс\u003C/td>\n\u003Ctd>Оператор; сервер работает самостоятельно\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Клиентов у одного процесса сервера\u003C/td>\n\u003Ctd>Один, тот, кто его запустил\u003C/td>\n\u003Ctd>Много\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Разбиение на сообщения\u003C/td>\n\u003Ctd>Одно сообщение JSON-RPC на строку\u003C/td>\n\u003Ctd>Одно сообщение на запрос POST\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Метаданные запроса\u003C/td>\n\u003Ctd>Только в теле\u003C/td>\n\u003Ctd>В теле и в заголовках\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Сообщения сервера\u003C/td>\n\u003Ctd>Один общий канал \u003Ccode>stdout\u003C/code>\u003C/td>\n\u003Ctd>Объект JSON или поток SSE на каждый запрос\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Уведомления об изменениях\u003C/td>\n\u003Ctd>В \u003Ccode>stdout\u003C/code>, с идентификатором подписки\u003C/td>\n\u003Ctd>В потоке SSE запроса \u003Ccode>subscriptions/listen\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Отмена\u003C/td>\n\u003Ctd>\u003Ccode>notifications/cancelled\u003C/code>\u003C/td>\n\u003Ctd>Закрытие потока ответа\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Журнал\u003C/td>\n\u003Ctd>\u003Ccode>stderr\u003C/code>\u003C/td>\n\u003Ctd>На стороне сервера, например OpenTelemetry\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Учётные данные\u003C/td>\n\u003Ctd>Из окружения процесса\u003C/td>\n\u003Ctd>Механизм авторизации на основе OAuth 2.1\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Главный вопрос безопасности\u003C/td>\n\u003Ctd>Общая зона доверия с хостом\u003C/td>\n\u003Ctd>Проверка \u003Ccode>Origin\u003C/code>, аутентификация\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Выбор транспорта следует из того, где должен работать сервер. Согласно документации MCP, чтение локальных файлов, управление локальным инструментом или доступ к оборудованию - причины запускать сервер локально, а серверу, который только оборачивает удалённый API, это ничего не даёт. Удалённый сервер на Streamable HTTP не выполняет код на машине пользователя и использует механизм авторизации вместо токена в локальном файле конфигурации.\u003C/p>\n\u003Cp>Логика сервера не зависит от транспорта, поэтому один сервер может поддерживать оба: тогда одни и те же инструменты, ресурсы и промпты доступны и локально, и удалённо.\u003C/p>\n\u003Ch2 id=\"термины\" class=\"wiki-heading\">Термины\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"термины\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Термин\u003C/th>\n\u003Cth>Значение\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Транспорт (transport)\u003C/td>\n\u003Ctd>Привязка к каналу связи, которая определяет, как сообщения MCP разбиваются и доставляются\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>stdio\u003C/td>\n\u003Ctd>Транспорт через стандартные потоки дочернего процесса, который запускает клиент\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Streamable HTTP\u003C/td>\n\u003Ctd>Транспорт, в котором каждое сообщение - HTTP-запрос POST к одному MCP-эндпоинту\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>MCP-эндпоинт\u003C/td>\n\u003Ctd>Единственный HTTP-путь сервера, который принимает запросы POST с сообщениями MCP\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Server-Sent Events (SSE)\u003C/td>\n\u003Ctd>Формат HTTP-ответа с потоком событий от сервера\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>HTTP+SSE\u003C/td>\n\u003Ctd>Транспорт версии 2024-11-05 с двумя эндпоинтами; устарел с 2025-03-26\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>DNS rebinding\u003C/td>\n\u003Ctd>Атака, при которой веб-сайт через браузер обращается к серверу на машине пользователя\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Собственный транспорт\u003C/td>\n\u003Ctd>Транспорт вне спецификации, который сохраняет её сообщения и метаданные\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Ch2 id=\"источники\" class=\"wiki-heading\">Источники\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"источники\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2026-07-28/basic/transports\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Transports overview, спецификация 2026-07-28\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/stdio\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">stdio, спецификация 2026-07-28\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Streamable HTTP, спецификация 2026-07-28\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2026-07-28/basic/patterns/subscriptions\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Subscriptions, спецификация 2026-07-28\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2026-07-28/basic\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Обзор базового протокола, спецификация 2026-07-28\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2026-07-28/changelog\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Ключевые изменения 2026-07-28\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2026-07-28/deprecated\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Устаревшие функции, спецификация 2026-07-28\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2025-11-25/basic/transports\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Transports, спецификация 2025-11-25\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2025-03-26/basic/transports\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Transports, спецификация 2025-03-26\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2024-11-05/basic/transports\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Transports, спецификация 2024-11-05\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/docs/2026-07-28/tutorials/security/local-server-security\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Local Server Security, документация MCP\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/docs/2026-07-28/develop/build-server\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Build an MCP server, документация MCP\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://blog.modelcontextprotocol.io/posts/2026-07-28/\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">The 2026-07-28 Specification, блог MCP, 28 июля 2026\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003C/ul>\n",[10,14,17,20,23,25,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95],{"id":11,"level":12,"text":13},"кратко",2,"Кратко",{"id":15,"level":12,"text":16},"какую-задачу-решают-транспорты","Какую задачу решают транспорты",{"id":18,"level":12,"text":19},"история","История",{"id":21,"level":12,"text":22},"что-определяет-транспорт","Что определяет транспорт",{"id":24,"level":12,"text":24},"stdio",{"id":26,"level":27,"text":28},"запуск-сервера",3,"Запуск сервера",{"id":30,"level":27,"text":31},"разбиение-потока-на-сообщения","Разбиение потока на сообщения",{"id":33,"level":27,"text":34},"стандартный-вывод-и-стандартный-поток-ошибок","Стандартный вывод и стандартный поток ошибок",{"id":36,"level":27,"text":37},"отмена-запроса","Отмена запроса",{"id":39,"level":27,"text":40},"завершение-и-перезапуск","Завершение и перезапуск",{"id":42,"level":27,"text":43},"доверие-между-процессами","Доверие между процессами",{"id":45,"level":12,"text":46},"streamable-http","Streamable HTTP",{"id":48,"level":27,"text":49},"эндпоинт-и-запросы","Эндпоинт и запросы",{"id":51,"level":27,"text":52},"ответы","Ответы",{"id":54,"level":27,"text":55},"потоки-уведомлений","Потоки уведомлений",{"id":57,"level":27,"text":58},"заголовки-запроса","Заголовки запроса",{"id":60,"level":27,"text":61},"проверка-заголовков","Проверка заголовков",{"id":63,"level":27,"text":64},"коды-состояния-http","Коды состояния HTTP",{"id":66,"level":27,"text":67},"отмена-и-обрыв-потока","Отмена и обрыв потока",{"id":69,"level":27,"text":70},"отсутствие-сессий-и-балансировка-нагрузки","Отсутствие сессий и балансировка нагрузки",{"id":72,"level":27,"text":73},"безопасность-локальных-http-серверов","Безопасность локальных HTTP-серверов",{"id":75,"level":27,"text":76},"авторизация","Авторизация",{"id":78,"level":12,"text":79},"обратная-совместимость","Обратная совместимость",{"id":81,"level":27,"text":82},"прежние-редакции-streamable-http","Прежние редакции Streamable HTTP",{"id":84,"level":27,"text":85},"транспорт-httpsse","Транспорт HTTP+SSE",{"id":87,"level":12,"text":88},"собственные-транспорты","Собственные транспорты",{"id":90,"level":12,"text":91},"сравнение-stdio-и-streamable-http","Сравнение stdio и Streamable HTTP",{"id":93,"level":12,"text":94},"термины","Термины",{"id":96,"level":12,"text":97},"источники","Источники",2540,1793718888907]