[{"data":1,"prerenderedAt":88},["ShallowReactive",2],{"wiki-mcp-stateless-mcp-ru":3},{"meta":4,"html":8,"headings":9,"words":87},{"title":5,"description":6,"published":7,"updated":7,"sourceUpdated":7},"MCP без состояния: изменения 2026-07-28","MCP без состояния - модель запросов спецификации 2026-07-28: поля _meta в каждом запросе, server/discover, MRTR, идентификаторы состояния, кеш, миграция.","2026-11-03","\u003Cp>\u003Cstrong>MCP без состояния (stateless MCP)\u003C/strong> - модель запросов Model Context Protocol, введённая в версии спецификации 2026-07-28: каждый запрос содержит всё, что нужно серверу для его обработки, а сервер не хранит сессию (session) протокола между запросами. Версия протокола, данные о клиенте и его возможности (capabilities) передаются в поле \u003Ccode>_meta\u003C/code> каждого запроса, а не согласуются один раз при рукопожатии (handshake).\u003C/p>\n\u003Cp>Изменение внесла группа предложений по развитию спецификации (Specification Enhancement Proposals, SEP), в первую очередь SEP-2575, SEP-2567 и SEP-2322. Версия вышла 28 июля 2026 года. В анонсе мейнтейнеры описывают его как переход от двунаправленного протокола с состоянием к протоколу запросов и ответов без состояния. Обзор MCP и краткая сводка версии - в статье \u003Ca href=\"/ru/wiki/mcp/what-is-mcp\" class=\"wiki-link wiki-link--article\">Что такое MCP\u003C/a>; здесь разобрано каждое изменение и миграция с версии 2025-11-25. Подробности уровня HTTP - в статье \u003Ca href=\"/ru/wiki/mcp/mcp-transports\" 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>Спецификация 2026-07-28, вышла 28 июля 2026 года\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Что заменяет\u003C/td>\n\u003Ctd>Рукопожатие \u003Ccode>initialize\u003C/code> и сессии протокола версий 2025-11-25 и раньше\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Основные SEP\u003C/td>\n\u003Ctd>SEP-2575, SEP-2567, SEP-2322\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Метаданные запроса\u003C/td>\n\u003Ctd>Ключи \u003Ccode>_meta\u003C/code> с префиксом \u003Ccode>io.modelcontextprotocol/\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Обнаружение возможностей\u003C/td>\n\u003Ctd>\u003Ccode>server/discover\u003C/code>: обязателен для серверов, необязателен для клиентов\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Данные от клиента\u003C/td>\n\u003Ctd>Multi Round-Trip Requests (MRTR)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Уведомления об изменениях\u003C/td>\n\u003Ctd>Поток \u003Ccode>subscriptions/listen\u003C/code>, подписка на каждый тип отдельно\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Совместимость с 2025-11-25\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\u003Cp>До версии 2025-11-25 клиент начинал работу с запроса \u003Ccode>initialize\u003C/code> и уведомления \u003Ccode>notifications/initialized\u003C/code>. Рукопожатие фиксировало версию протокола и возможности сторон до конца соединения. В \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"streamable-http\">Streamable HTTP\u003C/span> сервер мог ещё и назначить сессию заголовком \u003Ccode>Mcp-Session-Id\u003C/code>.\u003C/p>\n\u003Cp>SEP-2575 называет три следствия. Балансировщик с распределением по кругу (round-robin) использовать нельзя: следующий запрос может попасть на экземпляр без сессии, поэтому нужна привязка клиента к экземпляру (sticky sessions). При сбое экземпляра его сессии теряются, и клиенты повторяют рукопожатие.\u003C/p>\n\u003Cp>SEP-2567 добавляет наблюдения о реальных клиентах. Одни хосты (hosts) открывают новую сессию на каждый вызов инструмента (tool), другие держат одну на всё время работы приложения, и почти никто не возобновляет сессию после перезапуска. Автор сервера не может предсказать, чему соответствует сессия. Поскольку \u003Ccode>tools/list\u003C/code> мог отличаться между сессиями, клиенты не могли повторно использовать сохранённый список.\u003C/p>\n\u003Cp>Запросы от сервера к клиенту обходились так же дорого. Чтобы во время вызова инструмента задать вопрос пользователю, сервер держал открытым поток Server-Sent Events, а ответ мог прийти на другой экземпляр. По данным SEP-2322, из-за этого удалённые серверы почти не использовали \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"elicitation\">elicitation\u003C/span>, sampling и roots или не могли их использовать.\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>18 июня 2025\u003C/td>\n\u003Ctd>Создан SEP-2575 «Make MCP Stateless»\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>25 ноября 2025\u003C/td>\n\u003Ctd>Спецификация 2025-11-25, последняя версия с рукопожатием \u003Ccode>initialize\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>19 декабря 2025\u003C/td>\n\u003Ctd>Мейнтейнеры рабочей группы по транспортам публикуют «Exploring the Future of MCP Transports»\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>3 февраля 2026\u003C/td>\n\u003Ctd>Создан SEP-2322 «Multi Round-Trip Requests»\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>11 марта 2026\u003C/td>\n\u003Ctd>Создан SEP-2567 «Sessionless MCP via Explicit State Handles»\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>28 июля 2026\u003C/td>\n\u003Ctd>Спецификация 2026-07-28. Её поддерживают SDK для TypeScript, Python, Go и C#, SDK для Rust - в бета-версии\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>28 июля 2027 или позже\u003C/td>\n\u003Ctd>Первая версия, из которой можно удалить roots, sampling, logging и Dynamic Client Registration\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Ch2 id=\"sep-версии\" class=\"wiki-heading\">SEP версии\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"sep-версии\" 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>В таблице - SEP, которые определяют модель без состояния и её прямые следствия.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>SEP\u003C/th>\n\u003Cth>Название\u003C/th>\n\u003Cth>Что меняет\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>SEP-2575\u003C/td>\n\u003Ctd>Make MCP Stateless\u003C/td>\n\u003Ctd>Удаляет \u003Ccode>initialize\u003C/code>; добавляет поля \u003Ccode>_meta\u003C/code>, \u003Ccode>server/discover\u003C/code>, \u003Ccode>subscriptions/listen\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>SEP-2567\u003C/td>\n\u003Ctd>Sessionless MCP via Explicit State Handles\u003C/td>\n\u003Ctd>Удаляет сессии и \u003Ccode>Mcp-Session-Id\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>SEP-2322\u003C/td>\n\u003Ctd>Multi Round-Trip Requests\u003C/td>\n\u003Ctd>Заменяет запросы сервера результатами \u003Ccode>input_required\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>SEP-2549\u003C/td>\n\u003Ctd>TTL for List Results\u003C/td>\n\u003Ctd>Добавляет \u003Ccode>ttlMs\u003C/code> и \u003Ccode>cacheScope\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>SEP-2243\u003C/td>\n\u003Ctd>HTTP Header Standardization for Streamable HTTP Transport\u003C/td>\n\u003Ctd>Добавляет \u003Ccode>Mcp-Method\u003C/code> и \u003Ccode>Mcp-Name\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>SEP-2663\u003C/td>\n\u003Ctd>Tasks Extension\u003C/td>\n\u003Ctd>Выносит задачи из ядра\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>SEP-2577\u003C/td>\n\u003Ctd>Deprecate Roots, Sampling, and Logging\u003C/td>\n\u003Ctd>Объявляет устаревшими три функции\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>SEP-2596\u003C/td>\n\u003Ctd>Specification Feature Lifecycle and Deprecation Policy\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\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>initialize\u003C/code>, уведомления \u003Ccode>notifications/initialized\u003C/code> и заголовка \u003Ccode>Mcp-Session-Id\u003C/code> больше нет. Первым сообщением клиента может быть любой запрос. Спецификация прямо называет следствие: открытое соединение, в том числе процесс \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"stdio\">stdio\u003C/span>, не является ни диалогом, ни сессией. Клиент может чередовать в одном соединении несвязанные запросы, а сервер не должен делать выводов из предыдущих запросов.\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\u003Cul>\n\u003Cli>\u003Ccode>ping\u003C/code> удалён в обе стороны.\u003C/li>\n\u003Cli>\u003Ccode>logging/setLevel\u003C/code> удалён; уровень журнала задаётся в \u003Ccode>_meta\u003C/code> каждого запроса.\u003C/li>\n\u003Cli>\u003Ccode>resources/subscribe\u003C/code>, \u003Ccode>resources/unsubscribe\u003C/code> и поток HTTP GET заменены на \u003Ccode>subscriptions/listen\u003C/code>.\u003C/li>\n\u003Cli>\u003Ccode>notifications/roots/list_changed\u003C/code> удалено.\u003C/li>\n\u003Cli>Возобновление потоков через \u003Ccode>Last-Event-ID\u003C/code> удалено. Если поток ответа оборвался, клиент отправляет запрос заново с новым идентификатором.\u003C/li>\n\u003Cli>Уведомление \u003Ccode>notifications/elicitation/complete\u003C/code> и поле \u003Ccode>elicitationId\u003C/code> из версии 2025-11-25 удалены.\u003C/li>\n\u003C/ul>\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>Каждый запрос несёт зарезервированные ключи в \u003Ccode>params._meta\u003C/code>. В таблице они перечислены вместе со связанными ключами результатов и уведомлений.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-4\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Ключ\u003C/th>\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>io.modelcontextprotocol/protocolVersion\u003C/code>\u003C/td>\n\u003Ctd>Запрос\u003C/td>\n\u003Ctd>Да\u003C/td>\n\u003Ctd>Версия протокола этого запроса\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>io.modelcontextprotocol/clientCapabilities\u003C/code>\u003C/td>\n\u003Ctd>Запрос\u003C/td>\n\u003Ctd>Да\u003C/td>\n\u003Ctd>Возможности клиента для этого запроса; \u003Ccode>{}\u003C/code> - никаких\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>io.modelcontextprotocol/clientInfo\u003C/code>\u003C/td>\n\u003Ctd>Запрос\u003C/td>\n\u003Ctd>Рекомендуется\u003C/td>\n\u003Ctd>Имя и версия клиента\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>io.modelcontextprotocol/logLevel\u003C/code>\u003C/td>\n\u003Ctd>Запрос\u003C/td>\n\u003Ctd>Нет, устарел\u003C/td>\n\u003Ctd>Минимальный уровень журнала для запроса\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>progressToken\u003C/code>\u003C/td>\n\u003Ctd>Запрос\u003C/td>\n\u003Ctd>Нет\u003C/td>\n\u003Ctd>Включает уведомления о прогрессе\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>traceparent\u003C/code>, \u003Ccode>tracestate\u003C/code>, \u003Ccode>baggage\u003C/code>\u003C/td>\n\u003Ctd>Любое \u003Ccode>_meta\u003C/code>\u003C/td>\n\u003Ctd>Нет\u003C/td>\n\u003Ctd>Контекст трассировки OpenTelemetry\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>io.modelcontextprotocol/serverInfo\u003C/code>\u003C/td>\n\u003Ctd>Результат\u003C/td>\n\u003Ctd>Рекомендуется\u003C/td>\n\u003Ctd>Имя и версия сервера\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>io.modelcontextprotocol/subscriptionId\u003C/code>\u003C/td>\n\u003Ctd>Уведомление\u003C/td>\n\u003Ctd>В потоках подписки\u003C/td>\n\u003Ctd>Идентификатор запроса \u003Ccode>subscriptions/listen\u003C/code>\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\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;method&quot;: &quot;resources/read&quot;,\n  &quot;params&quot;: {\n    &quot;uri&quot;: &quot;file:///project/README.md&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;: { &quot;elicitation&quot;: { &quot;form&quot;: {} } },\n      &quot;progressToken&quot;: &quot;read-7&quot;,\n      &quot;traceparent&quot;: &quot;00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01&quot;\n    }\n  }\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Запрос без обязательного ключа отклоняется с ошибкой \u003Ccode>-32602\u003C/code> (Invalid params), в HTTP - со статусом \u003Ccode>400 Bad Request\u003C/code>. Сервер не должен брать возможности клиента из предыдущих запросов. Если для обработки нужна возможность, которую запрос не объявил, сервер возвращает \u003Ccode>MissingRequiredClientCapabilityError\u003C/code> с кодом \u003Ccode>-32021\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;: 8,\n  &quot;error&quot;: {\n    &quot;code&quot;: -32021,\n    &quot;message&quot;: &quot;Missing required client capability&quot;,\n    &quot;data&quot;: { &quot;requiredCapabilities&quot;: { &quot;elicitation&quot;: {} } }\n  }\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Значения \u003Ccode>clientInfo\u003C/code> и \u003Ccode>serverInfo\u003C/code> никто не проверяет. Спецификация предназначает их для отображения, журналов и отладки, а не для решений о безопасности.\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>\u003Ccode>server/discover\u003C/code> возвращает поддерживаемые версии протокола, возможности и данные о сервере. Этот метод обязан реализовать каждый сервер. Клиент может вызвать его первым либо сразу отправить любой запрос и обработать ошибку версии. Параметров у запроса нет, кроме \u003Ccode>_meta\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;: &quot;discover-1&quot;,\n  &quot;method&quot;: &quot;server/discover&quot;,\n  &quot;params&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>instructions\u003C/code> - текст для модели о том, как работать с сервером, - и поддерживаемые расширения (extensions):\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;: &quot;discover-1&quot;,\n  &quot;result&quot;: {\n    &quot;resultType&quot;: &quot;complete&quot;,\n    &quot;supportedVersions&quot;: [&quot;2026-07-28&quot;, &quot;2025-11-25&quot;],\n    &quot;capabilities&quot;: {\n      &quot;tools&quot;: { &quot;listChanged&quot;: true },\n      &quot;prompts&quot;: {},\n      &quot;extensions&quot;: { &quot;io.modelcontextprotocol/tasks&quot;: {} }\n    },\n    &quot;instructions&quot;: &quot;Issue tracker server. Search issues before creating new ones.&quot;,\n    &quot;_meta&quot;: {\n      &quot;io.modelcontextprotocol/serverInfo&quot;: { &quot;name&quot;: &quot;example-tracker&quot;, &quot;version&quot;: &quot;2.4.0&quot; }\n    },\n    &quot;ttlMs&quot;: 3600000,\n    &quot;cacheScope&quot;: &quot;public&quot;\n  }\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>На неизвестную или неподдерживаемую версию сервер отвечает ошибкой \u003Ccode>UnsupportedProtocolVersionError\u003C/code> с кодом \u003Ccode>-32022\u003C/code>. Клиент выбирает версию из \u003Ccode>data.supported\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;: 1,\n  &quot;error&quot;: {\n    &quot;code&quot;: -32022,\n    &quot;message&quot;: &quot;Unsupported protocol version&quot;,\n    &quot;data&quot;: { &quot;supported&quot;: [&quot;2026-07-28&quot;, &quot;2025-11-25&quot;], &quot;requested&quot;: &quot;1900-01-01&quot; }\n  }\n}\u003C/code>\u003C/pre>\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\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>Multi Round-Trip Requests (MRTR)\u003C/strong>, многоэтапные запросы, позволяют серверу получить данные от клиента, не отправляя собственного запроса. Промежуточный результат допустим только в ответ на \u003Ccode>tools/call\u003C/code>, \u003Ccode>resources/read\u003C/code> и \u003Ccode>prompts/get\u003C/code>.\u003C/p>\n\u003Col>\n\u003Cli>Клиент отправляет запрос, например \u003Ccode>tools/call\u003C/code>.\u003C/li>\n\u003Cli>Серверу не хватает данных, и он возвращает \u003Ccode>resultType: &quot;input_required&quot;\u003C/code>.\u003C/li>\n\u003Cli>Клиент выполняет перечисленные запросы, например спрашивает пользователя.\u003C/li>\n\u003Cli>Клиент повторяет исходный запрос с новым \u003Ccode>id\u003C/code> JSON-RPC, ответами и состоянием сервера.\u003C/li>\n\u003Cli>Любой экземпляр сервера обрабатывает повтор и возвращает итоговый результат или снова \u003Ccode>input_required\u003C/code>.\u003C/li>\n\u003C/ol>\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>resultType\u003C/code>: \u003Ccode>&quot;complete&quot;\u003C/code> для итогового результата, \u003Ccode>&quot;input_required&quot;\u003C/code> для промежуточного. Расширения могут добавлять свои значения. Неизвестное значение клиент считает недопустимым, а отсутствующее поле, которое присылают серверы прежних версий, - равным \u003Ccode>&quot;complete&quot;\u003C/code>.\u003C/p>\n\u003Cp>Промежуточный результат содержит \u003Ccode>inputRequests\u003C/code>, \u003Ccode>requestState\u003C/code> или оба поля. \u003Ccode>inputRequests\u003C/code> - словарь: ключи выбирает сервер, значения - запросы \u003Ccode>elicitation/create\u003C/code>, \u003Ccode>sampling/createMessage\u003C/code> или \u003Ccode>roots/list\u003C/code>. \u003Ccode>requestState\u003C/code>, состояние запроса, - непрозрачная строка, которую клиент обязан вернуть без изменений и не должен разбирать. Ответы клиент кладёт в \u003Ccode>inputResponses\u003C/code> под теми же ключами. Результат \u003Ccode>input_required\u003C/code> показан в статье \u003Ca href=\"/ru/wiki/mcp/what-is-mcp\" class=\"wiki-link wiki-link--article\">Что такое MCP\u003C/a>; повторный запрос выглядит так:\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;: 2,\n  &quot;method&quot;: &quot;tools/call&quot;,\n  &quot;params&quot;: {\n    &quot;name&quot;: &quot;create_repository&quot;,\n    &quot;arguments&quot;: { &quot;name&quot;: &quot;demo&quot; },\n    &quot;inputResponses&quot;: {\n      &quot;github_login&quot;: { &quot;action&quot;: &quot;accept&quot;, &quot;content&quot;: { &quot;name&quot;: &quot;octocat&quot; } }\n    },\n    &quot;requestState&quot;: &quot;eyJzdGVwIjoyfQ.signature&quot;,\n    &quot;_meta&quot;: {\n      &quot;io.modelcontextprotocol/protocolVersion&quot;: &quot;2026-07-28&quot;,\n      &quot;io.modelcontextprotocol/clientCapabilities&quot;: { &quot;elicitation&quot;: { &quot;form&quot;: {} } }\n    }\n  }\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Сервер может запрашивать только то, что объявил запрос: без возможности \u003Ccode>elicitation\u003C/code> в \u003Ccode>inputRequests\u003C/code> не должно быть \u003Ccode>elicitation/create\u003C/code>. Если ответов не хватает, серверу следует снова вернуть \u003Ccode>input_required\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>requestState\u003C/code>. SEP-2322 описывает сброс нагрузки: перегруженный экземпляр прекращает обработку и возвращает накопленное состояние, а немедленный повтор клиента продолжает работу на другом экземпляре.\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;: 5,\n  &quot;result&quot;: {\n    &quot;resultType&quot;: &quot;input_required&quot;,\n    &quot;requestState&quot;: &quot;gAAAAABn-checkpoint-42&quot;\n  }\n}\u003C/code>\u003C/pre>\u003C/div>\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>Состояние проходит через клиента, поэтому сервер обязан считать его данными, которые контролирует атакующий. Если от него зависят авторизация, доступ к ресурсам или бизнес-логика, сервер обязан защищать его целостность, например HMAC или аутентифицированным шифрованием (AEAD), и отклонять состояние, не прошедшее проверку. Против повторного использования защищённые данные должны содержать аутентифицированного субъекта, короткий срок действия и идентификатор исходного запроса. Эти меры не делают состояние одноразовым; одноразовость обеспечивается на стороне сервера. Другие атаки разобраны в статье \u003Ca href=\"/ru/wiki/mcp/mcp-security\" 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\u003Cp>На состояние, которое охватывает несколько вызовов, ссылается явный идентификатор, передаваемый в каждом запросе. Для состояния приложения спецификация описывает приём проектирования инструментов, а не элемент протокола. \u003Cstrong>Идентификатор состояния (state handle)\u003C/strong> - идентификатор, который возвращает инструмент создания объекта и который модель передаёт аргументом в следующих вызовах:\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;: 11,\n  &quot;result&quot;: {\n    &quot;resultType&quot;: &quot;complete&quot;,\n    &quot;content&quot;: [{ &quot;type&quot;: &quot;text&quot;, &quot;text&quot;: &quot;Created basket bsk_a1b2c3&quot; }],\n    &quot;structuredContent&quot;: { &quot;basket_id&quot;: &quot;bsk_a1b2c3&quot; }\n  }\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Следующий вызов, \u003Ccode>add_item\u003C/code>, получает аргументы \u003Ccode>{ &quot;basket_id&quot;: &quot;bsk_a1b2c3&quot;, &quot;sku&quot;: &quot;shoes&quot; }\u003C/code>. Сервер хранит корзину под этим ключом. Спецификация даёт рекомендации по устройству идентификаторов:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Авторизация.\u003C/strong> На сервере с аутентификацией идентификатор - это имя, и при каждом вызове сервер проверяет права вызывающего на объект. Без аутентификации идентификатор работает как токен на предъявителя, поэтому ему нужна достаточная энтропия, например UUIDv4, и ограниченный срок жизни.\u003C/li>\n\u003Cli>\u003Cstrong>Непрозрачность.\u003C/strong> Идентификатор с видимой внутренней структурой провоцирует разбор и угадывание.\u003C/li>\n\u003Cli>\u003Cstrong>Срок жизни.\u003C/strong> Правило хранения записывают в описание инструмента создания, где его видит модель.\u003C/li>\n\u003Cli>\u003Cstrong>Ошибки истечения.\u003C/strong> Вызов с истёкшим идентификатором возвращает \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"tool-execution-error\">ошибку выполнения инструмента\u003C/span>, которая прямо об этом говорит.\u003C/li>\n\u003C/ul>\n\u003Cp>То же правило действует для списков. Результат \u003Ccode>tools/list\u003C/code> может меняться со временем и зависеть от авторизации запроса, но не от соединения и не от других запросов. Инструмент, который раньше появлялся после \u003Ccode>connect_database\u003C/code>, теперь есть в списке сразу и принимает аргумент \u003Ccode>connection_id\u003C/code>. Проектирование инструментов разобрано в статье \u003Ca href=\"/ru/wiki/mcp/mcp-tools\" 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\u003Cp>Уведомления, не связанные с одним запросом, приходят в поток, который открывает \u003Ccode>subscriptions/listen\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;: 1,\n  &quot;method&quot;: &quot;subscriptions/listen&quot;,\n  &quot;params&quot;: {\n    &quot;notifications&quot;: {\n      &quot;toolsListChanged&quot;: true,\n      &quot;resourceSubscriptions&quot;: [&quot;file:///project/config.json&quot;]\n    },\n    &quot;_meta&quot;: {\n      &quot;io.modelcontextprotocol/protocolVersion&quot;: &quot;2026-07-28&quot;,\n      &quot;io.modelcontextprotocol/clientCapabilities&quot;: {}\n    }\n  }\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Поля фильтра - \u003Ccode>toolsListChanged\u003C/code>, \u003Ccode>promptsListChanged\u003C/code>, \u003Ccode>resourcesListChanged\u003C/code> и \u003Ccode>resourceSubscriptions\u003C/code>. Первым сообщением в потоке должно быть \u003Ccode>notifications/subscriptions/acknowledged\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/subscriptions/acknowledged&quot;,\n  &quot;params&quot;: {\n    &quot;notifications&quot;: { &quot;toolsListChanged&quot;: true },\n    &quot;_meta&quot;: { &quot;io.modelcontextprotocol/subscriptionId&quot;: 1 }\n  }\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Каждое уведомление в потоке содержит \u003Ccode>io.modelcontextprotocol/subscriptionId\u003C/code>, равный идентификатору запроса подписки, поэтому несколько подписок могут делить один канал. Сервер не хранит состояние подписок между переподключениями, и после потери канала клиент отправляет запрос заново. Уведомления одного запроса, например \u003Ccode>notifications/progress\u003C/code>, по-прежнему приходят в поток ответа на этот запрос.\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>Результаты \u003Ccode>server/discover\u003C/code>, \u003Ccode>tools/list\u003C/code>, \u003Ccode>prompts/list\u003C/code>, \u003Ccode>resources/list\u003C/code>, \u003Ccode>resources/templates/list\u003C/code> и \u003Ccode>resources/read\u003C/code> обязаны содержать два поля. \u003Ccode>ttlMs\u003C/code> - сколько миллисекунд результат остаётся актуальным; \u003Ccode>0\u003C/code> означает, что он устаревает сразу. \u003Ccode>cacheScope\u003C/code> равно \u003Ccode>&quot;public&quot;\u003C/code>, если в результате нет данных пользователя и его могут хранить шлюзы, или \u003Ccode>&quot;private&quot;\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;: 3,\n  &quot;result&quot;: {\n    &quot;resultType&quot;: &quot;complete&quot;,\n    &quot;tools&quot;: [\n      { &quot;name&quot;: &quot;search_issues&quot;, &quot;description&quot;: &quot;Search issues by text&quot;, &quot;inputSchema&quot;: { &quot;type&quot;: &quot;object&quot; } }\n    ],\n    &quot;nextCursor&quot;: &quot;page-2&quot;,\n    &quot;ttlMs&quot;: 300000,\n    &quot;cacheScope&quot;: &quot;private&quot;\n  }\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Ключ кеша - метод вместе с параметрами, которые влияют на результат, например \u003Ccode>uri\u003C/code> или \u003Ccode>cursor\u003C/code>. Каждая страница кешируется отдельно. TTL - подсказка об актуальности, а не интервал опроса, и уведомление об изменении сразу делает сохранённый результат устаревшим. Серверу следует возвращать инструменты в детерминированном порядке; спецификация связывает это с кешем клиента и кешем промптов (prompt cache) модели.\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>SEP-2596 определяет три состояния функции. \u003Cstrong>Active\u003C/strong> - функция входит в текущую версию. \u003Cstrong>Deprecated\u003C/strong> - функция остаётся в спецификации с описанным путём миграции, а новым реализациям не следует её использовать. \u003Cstrong>Removed\u003C/strong> - функции нет в следующей версии. Между объявлением устаревшей и правом на удаление проходит не меньше двенадцати месяцев, считая от выхода версии, которая её объявила; при активной угрозе безопасности срок можно сократить до девяноста дней.\u003C/p>\n\u003Cp>В таблице - функции, объявленные устаревшими в 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>Roots\u003C/td>\n\u003Ctd>Параметры инструментов, URI ресурсов или конфигурация сервера\u003C/td>\n\u003Ctd>Первая версия 28 июля 2027 года или позже\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Sampling\u003C/td>\n\u003Ctd>Прямые вызовы API провайдеров моделей\u003C/td>\n\u003Ctd>Первая версия 28 июля 2027 года или позже\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Logging\u003C/td>\n\u003Ctd>\u003Ccode>stderr\u003C/code> для stdio, OpenTelemetry\u003C/td>\n\u003Ctd>Первая версия 28 июля 2027 года или позже\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Dynamic Client Registration\u003C/td>\n\u003Ctd>Client ID Metadata Documents\u003C/td>\n\u003Ctd>Первая версия 28 июля 2027 года или позже\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>SEP-2577 называет причины: низкое распространение, размытый смысл roots, сложность sampling и наличие стандартных средств журналирования. В реестре также есть транспорт \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"http-sse-transport\">HTTP+SSE\u003C/span>, устаревший с версии 2025-03-26 и переклассифицированный по новой политике. В течение срока формат сообщений не меняется. SDK уровня Tier 1 обязаны помечать устаревшие API штатным механизмом своего языка.\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>Спецификация называет версии с метаданными в каждом запросе (2026-07-28 и новее) \u003Cstrong>современными (modern)\u003C/strong>, а версии с рукопожатием \u003Ccode>initialize\u003C/code> (2025-11-25 и раньше) - \u003Cstrong>прежними (legacy)\u003C/strong>. Реализация, которая поддерживает и те и другие, - \u003Cstrong>реализация обеих эпох (dual-era)\u003C/strong>. В таблице - исход каждого сочетания.\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>Современный\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>Прежний\u003C/td>\n\u003Ctd>Работает после перехода на \u003Ccode>initialize\u003C/code>\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\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Клиент обеих эпох определяет эпоху сервера по правилам транспорта. В stdio он первым отправляет \u003Ccode>server/discover\u003C/code>: \u003Ccode>DiscoverResult\u003C/code> или распознанная современная ошибка означают современный сервер, любая другая ошибка или отсутствие ответа - прежний. В HTTP клиент отправляет современный запрос и перед откатом изучает тело ответа \u003Ccode>400 Bad Request\u003C/code>. Результат клиенту следует запомнить на время жизни процесса сервера или для его origin.\u003C/p>\n\u003Cp>Сервер обеих эпох выбирает режим по первому сообщению: современные поля \u003Ccode>_meta\u003C/code> означают обработку без состояния, \u003Ccode>initialize\u003C/code> включает прежнюю семантику. Серверу только с современными версиями следует перечислять поддерживаемые версии в ошибке, которую он возвращает на \u003Ccode>initialize\u003C/code>.\u003C/p>\n\u003Ch2 id=\"миграция-с-2025-11-25\" class=\"wiki-heading\">Миграция с 2025-11-25\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"миграция-с-2025-11-25\" 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>Анонс ожидает основные затраты у приложений, которые зависели от идентификаторов сессий. SEP-2567 приводит автоматический анализ 1000 серверов с открытым кодом: у 90% не было обращений к идентификатору сессии на уровне приложения, у 2,5% состояние приложения хранилось по этому идентификатору.\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\u003Col>\n\u003Cli>Реализовать \u003Ccode>server/discover\u003C/code> с версиями, возможностями, \u003Ccode>serverInfo\u003C/code> и \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"caching-hints\">подсказками для кеширования\u003C/span>.\u003C/li>\n\u003Cli>Читать версию и возможности из \u003Ccode>_meta\u003C/code> каждого запроса; возвращать \u003Ccode>-32602\u003C/code>, \u003Ccode>-32022\u003C/code> или \u003Ccode>-32021\u003C/code>, как описано выше.\u003C/li>\n\u003Cli>Добавить \u003Ccode>resultType\u003C/code> в каждый результат.\u003C/li>\n\u003Cli>Перестать выдавать \u003Ccode>Mcp-Session-Id\u003C/code>. Перенести состояние, привязанное к сессии, на идентификаторы состояния или на аутентифицированного субъекта.\u003C/li>\n\u003Cli>Сделать списки независимыми от соединения, упорядочить их детерминированно и добавить \u003Ccode>ttlMs\u003C/code> и \u003Ccode>cacheScope\u003C/code>.\u003C/li>\n\u003Cli>Заменить запросы к клиенту результатами \u003Ccode>input_required\u003C/code> и защитить \u003Ccode>requestState\u003C/code>.\u003C/li>\n\u003Cli>Обслуживать \u003Ccode>subscriptions/listen\u003C/code> вместо потока GET и \u003Ccode>resources/subscribe\u003C/code>.\u003C/li>\n\u003Cli>Перенести экспериментальные задачи в расширение \u003Ccode>io.modelcontextprotocol/tasks\u003C/code>.\u003C/li>\n\u003Cli>Сохранить ветку \u003Ccode>initialize\u003C/code>, если прежние клиенты должны продолжать работать.\u003C/li>\n\u003C/ol>\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\u003Col>\n\u003Cli>Добавлять \u003Ccode>protocolVersion\u003C/code>, \u003Ccode>clientCapabilities\u003C/code> и \u003Ccode>clientInfo\u003C/code> в \u003Ccode>_meta\u003C/code> каждого запроса.\u003C/li>\n\u003Cli>Обрабатывать \u003Ccode>-32022\u003C/code> повтором с поддерживаемой версией или заранее вызывать \u003Ccode>server/discover\u003C/code>.\u003C/li>\n\u003Cli>Разбирать результат по \u003Ccode>resultType\u003C/code> и реализовать цикл \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"mrtr\">MRTR\u003C/span> с новым \u003Ccode>id\u003C/code> и неизменённым \u003Ccode>requestState\u003C/code>.\u003C/li>\n\u003Cli>Открывать \u003Ccode>subscriptions/listen\u003C/code> для уведомлений об изменениях и открывать заново после потери канала.\u003C/li>\n\u003Cli>Кешировать списки по \u003Ccode>ttlMs\u003C/code> и \u003Ccode>cacheScope\u003C/code> и сбрасывать кеш по уведомлениям.\u003C/li>\n\u003Cli>Повторять запрос с новым идентификатором, если его поток ответа оборвался.\u003C/li>\n\u003Cli>Перестать отправлять \u003Ccode>ping\u003C/code>, \u003Ccode>logging/setLevel\u003C/code> и \u003Ccode>Mcp-Session-Id\u003C/code>.\u003C/li>\n\u003Cli>Сохранять идентификаторы состояния в контексте при сжатии диалога.\u003C/li>\n\u003C/ol>\n\u003Cp>Проверка изменений контракта между версиями описана в статье \u003Ca href=\"/ru/wiki/mcp/mcp-server-regression-testing\" 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\u003Cp>Отсутствие состояния относится к протоколу, а не к приложениям. SEP-2575 сравнивает это с HTTP: приложения хранят состояние, а запрос несёт само состояние или ссылку на него. В таблице такие ссылки сравниваются с удалённой сессией.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-4\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Механизм\u003C/th>\n\u003Cth>Где хранится состояние\u003C/th>\n\u003Cth>Срок жизни\u003C/th>\n\u003Cth>Кто передаёт ссылку\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Сессия протокола, удалена\u003C/td>\n\u003Ctd>Сервер, под \u003Ccode>Mcp-Session-Id\u003C/code>\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\u003Ctd>Модель, аргументом инструмента\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>requestState\u003C/code>\u003C/td>\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>\u003Ccode>ttlMs\u003C/code> задачи\u003C/td>\n\u003Ctd>Клиент, в \u003Ccode>tasks/get\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Подписка\u003C/td>\n\u003Ctd>Открытый поток\u003C/td>\n\u003Ctd>До отмены или разрыва\u003C/td>\n\u003Ctd>Идентификатор запроса подписки\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Сессия давала одну область на соединение. Идентификаторы дают столько областей, сколько создаст модель, и каждую можно разделить или изолировать: по данным SEP-2567, субагенты могут пользоваться одной корзиной и отдельными контекстами браузера. Идентификаторы задач относятся к расширению Tasks, описанному в статье \u003Ca href=\"/ru/wiki/mcp/mcp-extensions\" 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>Протокол, в котором каждый запрос содержит всё нужное для его обработки\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>server/discover\u003C/code>\u003C/td>\n\u003Ctd>Обязательный метод сервера, который возвращает поддерживаемые версии, возможности и данные о сервере\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>resultType\u003C/code>\u003C/td>\n\u003Ctd>Поле результата, которое помечает результат как итоговый, промежуточный или тип расширения\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Состояние запроса\u003C/td>\n\u003Ctd>Непрозрачная строка с ходом обработки, которую клиент возвращает без изменений при повторе\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Идентификатор состояния\u003C/td>\n\u003Ctd>Идентификатор, который возвращает инструмент и передаёт обратно модель, чтобы сослаться на состояние на сервере\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Подсказки для кеширования\u003C/td>\n\u003Ctd>Поля \u003Ccode>ttlMs\u003C/code> и \u003Ccode>cacheScope\u003C/code>: как долго и кто может кешировать результат\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>Не меньше двенадцати месяцев между объявлением функции устаревшей и правом на её удаление\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\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Спецификация Model Context Protocol, версия 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\">Key Changes, спецификация 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\">Overview: отсутствие состояния и \u003Ccode>_meta\u003C/code>, спецификация 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/versioning\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Versioning and Compatibility, спецификация 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/server/discover\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Discovery, спецификация 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/mrtr\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Multi Round-Trip Requests, спецификация 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/server/utilities/caching\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Caching, спецификация 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/server/tools\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Tools, спецификация 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\">Deprecated Features, спецификация 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/community/feature-lifecycle\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Feature Lifecycle and Deprecation Policy\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/seps/2575-stateless-mcp\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">SEP-2575: Make MCP Stateless\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/seps/2567-sessionless-mcp\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">SEP-2567: Sessionless MCP via Explicit State Handles\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/seps/2322-MRTR\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">SEP-2322: Multi Round-Trip Requests\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/seps/2577-deprecate-roots-sampling-and-logging\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">SEP-2577: Deprecate Roots, Sampling, and Logging\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\u003Cli>\u003Ca href=\"https://blog.modelcontextprotocol.io/posts/2025-12-19-mcp-transport-future/\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Exploring the Future of MCP Transports, блог MCP, 19 декабря 2025\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,26,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84],{"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},"sep-версии","SEP версии",{"id":24,"level":12,"text":25},"что-удалено","Что удалено",{"id":27,"level":28,"text":29},"рукопожатие-и-сессия",3,"Рукопожатие и сессия",{"id":31,"level":28,"text":32},"удалённые-методы-и-механизмы","Удалённые методы и механизмы",{"id":34,"level":12,"text":35},"метаданные-запроса","Метаданные запроса",{"id":37,"level":12,"text":38},"обнаружение-возможностей-и-выбор-версии","Обнаружение возможностей и выбор версии",{"id":40,"level":12,"text":41},"многоэтапные-запросы","Многоэтапные запросы",{"id":43,"level":28,"text":44},"как-проходит-обмен","Как проходит обмен",{"id":46,"level":28,"text":47},"поля","Поля",{"id":49,"level":28,"text":50},"состояние-без-хранилища-на-сервере","Состояние без хранилища на сервере",{"id":52,"level":28,"text":53},"целостность-состояния-запроса","Целостность состояния запроса",{"id":55,"level":12,"text":56},"явные-идентификаторы-состояния","Явные идентификаторы состояния",{"id":58,"level":12,"text":59},"подписки-и-уведомления","Подписки и уведомления",{"id":61,"level":12,"text":62},"подсказки-для-кеширования","Подсказки для кеширования",{"id":64,"level":12,"text":65},"вывод-из-употребления-и-жизненный-цикл-функций","Вывод из употребления и жизненный цикл функций",{"id":67,"level":12,"text":68},"совместимость-версий","Совместимость версий",{"id":70,"level":12,"text":71},"миграция-с-2025-11-25","Миграция с 2025-11-25",{"id":73,"level":28,"text":74},"серверы","Серверы",{"id":76,"level":28,"text":77},"клиенты","Клиенты",{"id":79,"level":12,"text":80},"состояние-в-протоколе-без-состояния","Состояние в протоколе без состояния",{"id":82,"level":12,"text":83},"термины","Термины",{"id":85,"level":12,"text":86},"источники","Источники",2635,1793718889028]