[{"data":1,"prerenderedAt":64},["ShallowReactive",2],{"wiki-mcp-testing-mcp-servers-ru":3},{"meta":4,"html":8,"headings":9,"words":63},{"title":5,"description":6,"published":7,"updated":7,"sourceUpdated":7},"Тестирование MCP-серверов: основы","Как тестировать MCP-сервер: уровни тестирования, соответствие протоколу, MCP Inspector и набор тестов соответствия, безопасность и оценка на моделях.","2026-11-03","\u003Cp>\u003Cstrong>Тестирование MCP-сервера\u003C/strong> - проверка того, что сервер соблюдает спецификацию Model Context Protocol, его инструменты, ресурсы и промпты работают правильно, подключаться к нему безопасно, а языковые модели используют его так, как задумано. В статье разобраны основы: чем такое тестирование отличается от привычного, из каких уровней состоит, что требует спецификация и какие есть официальные инструменты.\u003C/p>\n\u003Cp>Требования в статье соответствуют версии спецификации \u003Cstrong>2026-07-28\u003C/strong>. Базовые понятия протокола (хост, клиент, сервер, примитивы, транспорты) описаны в статье \u003Ca href=\"/ru/wiki/mcp/what-is-mcp\" class=\"wiki-link wiki-link--article\">Что такое MCP\u003C/a>.\u003C/p>\n\u003Ch2 id=\"кратко\" class=\"wiki-heading\">Кратко\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"кратко\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Параметр\u003C/th>\n\u003Cth>Значение\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Объект тестирования\u003C/td>\n\u003Ctd>MCP-сервер: его поведение по протоколу, инструменты, ресурсы и промпты\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Уровни\u003C/td>\n\u003Ctd>Логика инструментов, соответствие протоколу, интеграция, безопасность, оценка на моделях\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Официальные инструменты\u003C/td>\n\u003Ctd>MCP Inspector (веб, CLI, TUI), набор тестов соответствия (conformance)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Источник требований\u003C/td>\n\u003Ctd>Спецификация MCP, Security Best Practices\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Версия спецификации\u003C/td>\n\u003Ctd>2026-07-28\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Ch2 id=\"чем-отличается-от-тестирования-api\" class=\"wiki-heading\">Чем отличается от тестирования API\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"чем-отличается-от-тестирования-api\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>\u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"mcp-server\">MCP-сервер\u003C/span> часто служит обёрткой над обычным API, и привычные методы тестирования API к нему применимы. Специфичны для MCP три вещи.\u003C/p>\n\u003Cp>\u003Cstrong>Потребитель - модель.\u003C/strong> API вызывает человек или программа по документации. Инструмент MCP выбирает модель - по имени, описанию и схеме входных параметров. Инструмент может возвращать правильные результаты и всё равно не работать на практике: модель не вызывает его, когда нужно, вызывает другой инструмент или неверно заполняет аргументы. Описания - часть интерфейса, и их тестируют наравне с кодом.\u003C/p>\n\u003Cp>\u003Cstrong>Есть уровень протокола.\u003C/strong> Кроме бизнес-логики, сервер обязан соблюдать правила MCP: выбор версии, обязательные поля каждого запроса, объявление возможностей, типы ошибок, поведение транспорта. Клиент другого производителя опирается на эти правила, а не на код сервера.\u003C/p>\n\u003Cp>\u003Cstrong>Поведение с моделью недетерминировано.\u003C/strong> Один и тот же запрос пользователя в разных запусках и на разных моделях может привести к разным последовательностям вызовов инструментов. Один прогон сценария показывает, что он может работать, но не что он работает надёжно. Этот уровень проверяют статистически: на наборах задач и повторных прогонах.\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-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>MCP Inspector, набор тестов соответствия\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Интеграция\u003C/td>\n\u003Ctd>Сервер запускается и работает по своему транспорту в реальном хосте, с конфигурацией и авторизацией\u003C/td>\n\u003Ctd>MCP Inspector, целевой хост, журналы\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Безопасность\u003C/td>\n\u003Ctd>Токены, доступ к данным и состоянию, проверка входных данных, поведение локального сервера\u003C/td>\n\u003Ctd>Проверки из Security Best Practices, стандартное тестирование безопасности\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>Нижние уровни быстрее и дешевле, поэтому их запускают при каждом изменении. Оценка на моделях идёт дольше и тратит ресурсы моделей, поэтому её запускают при изменении инструментов и их описаний и по расписанию.\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\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\u003Cul>\n\u003Cli>Каждый сервер обязан реализовать \u003Ccode>server/discover\u003C/code>. В ответе - поддерживаемые версии протокола (\u003Ccode>supportedVersions\u003C/code>) и возможности сервера (\u003Ccode>capabilities\u003C/code>).\u003C/li>\n\u003Cli>Запрос с версией, которую сервер не поддерживает, отклоняется ошибкой \u003Ccode>UnsupportedProtocolVersionError\u003C/code> (код \u003Ccode>-32022\u003C/code>); поддерживаемые версии перечислены в поле \u003Ccode>data\u003C/code> ошибки.\u003C/li>\n\u003Cli>Каждый запрос несёт в \u003Ccode>_meta\u003C/code> поля \u003Ccode>io.modelcontextprotocol/protocolVersion\u003C/code> и \u003Ccode>io.modelcontextprotocol/clientCapabilities\u003C/code>. Запрос без любого из них отклоняется с кодом \u003Ccode>-32602\u003C/code> (Invalid params).\u003C/li>\n\u003Cli>Если серверу нужна возможность клиента, которую запрос не объявил, например \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"elicitation\">elicitation\u003C/span>, сервер возвращает \u003Ccode>MissingRequiredClientCapabilityError\u003C/code> (код \u003Ccode>-32021\u003C/code>) с названиями недостающих возможностей.\u003C/li>\n\u003Cli>Сервер объявляет только те возможности, которые реализует: сервер, объявивший \u003Ccode>tools\u003C/code>, обязан отвечать на \u003Ccode>tools/list\u003C/code>.\u003C/li>\n\u003C/ul>\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\u003Cul>\n\u003Cli>Список, который возвращает \u003Ccode>tools/list\u003C/code>, не должен зависеть от соединения или от других запросов. Он может зависеть от авторизации запроса, например от прав (scopes) токена.\u003C/li>\n\u003Cli>Инструменты следует возвращать в детерминированном порядке: клиенты кешируют список, а порядок влияет на кеш промптов модели.\u003C/li>\n\u003Cli>\u003Ccode>inputSchema\u003C/code> обязана быть корректным объектом JSON Schema, а не \u003Ccode>null\u003C/code>. Диалект по умолчанию - JSON Schema 2020-12. Для инструмента без параметров спецификация рекомендует \u003Ccode>{ &quot;type&quot;: &quot;object&quot;, &quot;additionalProperties&quot;: false }\u003C/code>.\u003C/li>\n\u003Cli>Если инструмент объявляет \u003Ccode>outputSchema\u003C/code>, его \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"structured-content\">структурированные результаты\u003C/span> (\u003Ccode>structuredContent\u003C/code>) обязаны соответствовать этой схеме.\u003C/li>\n\u003Cli>Имя инструмента - от 1 до 128 символов, только латинские буквы, цифры, \u003Ccode>_\u003C/code>, \u003Ccode>-\u003C/code> и \u003Ccode>.\u003C/code>; в пределах сервера имена уникальны.\u003C/li>\n\u003C/ul>\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\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>Ошибка JSON-RPC (ошибка протокола)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Неверные аргументы, в том числе значения, которые проходят схему, но не проходят проверку в коде\u003C/td>\n\u003Ctd>Результат инструмента с \u003Ccode>isError: true\u003C/code> и текстовым пояснением\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Сбой внешнего API, ошибка бизнес-логики\u003C/td>\n\u003Ctd>Результат инструмента с \u003Ccode>isError: true\u003C/code>\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Разница важна для модели. \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"tool-execution-error\">Ошибку выполнения инструмента\u003C/span> хост передаёт модели, и модель может исправить вызов. \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"protocol-error\">Ошибку протокола\u003C/span> обычно обрабатывает приложение, и до модели она не доходит. До SEP-1303 реализации возвращали неверные аргументы по-разному; текущая спецификация возвращает все ошибки проверки входных данных как ошибки выполнения инструмента.\u003C/p>\n\u003Ch3 id=\"многоэтапные-запросы-mrtr\" class=\"wiki-heading\">Многоэтапные запросы (MRTR)\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"многоэтапные-запросы-mrtr\" 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: &quot;input_required&quot;\u003C/code>):\u003C/p>\n\u003Cul>\n\u003Cli>\u003Ccode>inputRequests\u003C/code> содержит только те типы запросов, которые клиент объявил в своих возможностях;\u003C/li>\n\u003Cli>каждый \u003Ccode>InputRequiredResult\u003C/code> содержит \u003Ccode>inputRequests\u003C/code>, \u003Ccode>requestState\u003C/code> или оба поля;\u003C/li>\n\u003Cli>изменённый или чужой \u003Ccode>requestState\u003C/code> отклоняется, если от него зависят авторизация, доступ к ресурсам или бизнес-логика;\u003C/li>\n\u003Cli>повторный запрос с ответами правильно обрабатывает любой экземпляр сервера.\u003C/li>\n\u003C/ul>\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\u003Cul>\n\u003Cli>\u003Cstrong>stdio:\u003C/strong> в стандартный поток вывода попадают только сообщения MCP. Любой другой вывод, например журнал или отладочная печать, ломает протокол. Журнал пишется в стандартный поток ошибок.\u003C/li>\n\u003Cli>\u003Cstrong>Streamable HTTP:\u003C/strong> сервер работает за балансировщиком нагрузки без привязки клиента к экземпляру, потому что с версии 2026-07-28 сессии протокола нет. Состояние, которое нужно между вызовами, передаётся в явных идентификаторах, и их отдельно проверяют на безопасность.\u003C/li>\n\u003C/ul>\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=\"mcp-inspector\" class=\"wiki-heading\">MCP Inspector\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"mcp-inspector\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>MCP Inspector - эталонный инструмент разработчика для тестирования и отладки MCP-серверов. Распространяется npm-пакетом \u003Ccode>@modelcontextprotocol/inspector\u003C/code>, требует Node.js 22.19.0 или новее и содержит три клиента:\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>\u003Ccode>npx @modelcontextprotocol/inspector\u003C/code>\u003C/td>\n\u003Ctd>Графический интерфейс: примитивы, вызовы инструментов, обмен сообщениями JSON-RPC\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>CLI\u003C/td>\n\u003Ctd>\u003Ccode>npx @modelcontextprotocol/inspector --cli\u003C/code>\u003C/td>\n\u003Ctd>Один запрос за запуск с машиночитаемым выводом, для скриптов и CI\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>TUI\u003C/td>\n\u003Ctd>\u003Ccode>npx @modelcontextprotocol/inspector --tui\u003C/code>\u003C/td>\n\u003Ctd>Интерактивный интерфейс в терминале\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Сервер передаётся командой, которая его запускает (\u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"stdio\">stdio\u003C/span>), или адресом (\u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"streamable-http\">Streamable HTTP\u003C/span>):\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"bash\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">Bash\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># Локальный сервер по stdio\nnpx @modelcontextprotocol/inspector node build/index.js\n\n# Удалённый сервер по Streamable HTTP\nnpx @modelcontextprotocol/inspector --server-url https://api.example.com/mcp --transport http\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>CLI выполняет один запрос (\u003Ccode>--method\u003C/code>) и завершается с кодом, по которому видно тип сбоя, поэтому скрипт или задача CI может на него опираться:\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Код\u003C/th>\n\u003Cth>Значение\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>0\u003C/code>\u003C/td>\n\u003Ctd>Успех\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>3\u003C/code>\u003C/td>\n\u003Ctd>Сервер требует аутентификации (HTTP 401 или 403)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>4\u003C/code>\u003C/td>\n\u003Ctd>Сервер недоступен\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>5\u003C/code>\u003C/td>\n\u003Ctd>Инструмент вернул \u003Ccode>isError: true\u003C/code> или не найден\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>6\u003C/code>\u003C/td>\n\u003Ctd>\u003Ccode>--strict\u003C/code> нашёл проблему уровня ошибки в схемах инструментов\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Минимальная дымовая проверка в CI: сервер запускается, отдаёт нужный инструмент, его схемы проходят строгую проверку, а вызов выполняется успешно.\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"bash\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">Bash\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>set -euo pipefail\n\n# The server starts and exposes the get_weather tool\nnpx @modelcontextprotocol/inspector --cli node build/index.js \\\n  --method tools/list --format json \\\n  | jq -e '.result.tools | map(.name) | index(&quot;get_weather&quot;)' &gt; /dev/null\n\n# Tool schemas have no error-level problems (exit code 6 otherwise)\nnpx @modelcontextprotocol/inspector --cli node build/index.js \\\n  --method tools/list --strict &gt; /dev/null\n\n# The call succeeds (exit code 5 if the result has isError: true)\nnpx @modelcontextprotocol/inspector --cli node build/index.js \\\n  --method tools/call --tool-name get_weather --tool-arg city=Boston &gt; /dev/null\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Для серверов с авторизацией у CLI есть флаг \u003Ccode>--stored-auth-only\u003C/code>: он использует сохранённый токен и сразу завершается с \u003Ccode>auth_required\u003C/code>, а не открывает браузер, которым задача CI воспользоваться не может.\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>\u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"test-suite\">Набор тестов\u003C/span> соответствия (conformance, репозиторий \u003Ccode>modelcontextprotocol/conformance\u003C/code>) проверяет реализации клиентов и серверов на соответствие спецификации. Для сервера он выступает клиентом: отправляет тестовые запросы, записывает ответы и проверяет их, в том числе сверяет каждое сообщение JSON-RPC с JSON-схемой спецификации.\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"bash\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">Bash\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># List the server scenarios\nnpx @modelcontextprotocol/conformance list --server\n\n# Run all server scenarios against a server over HTTP\nnpx @modelcontextprotocol/conformance server --url http://localhost:3000/mcp\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Результаты каждого сценария сохраняются в \u003Ccode>results/server-&lt;scenario&gt;-&lt;timestamp&gt;/checks.json\u003C/code> со статусом каждой проверки. Известные сбои можно записать в YAML-файл и передать флагом \u003Ccode>--expected-failures\u003C/code>, тогда CI падает только на новых.\u003C/p>\n\u003Cp>Набор служит ориентиром для официальных SDK: SDK уровня Tier 1 обязан проходить все тесты соответствия, SDK уровня Tier 2 - не меньше 80 процентов. С SEP-2484 изменение протокола с наблюдаемым поведением получает финальный статус только вместе со сценарием соответствия, который покрывает его требования. Сравнение контрактов между версиями сервера описано в статье \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>Спецификация и документ Security Best Practices описывают атаки, которые касаются MCP-серверов. Для каждой есть проверяемое требование:\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>Токены\u003C/td>\n\u003Ctd>Сервер принимает только токены, выданные для него, и отклоняет токены с другой аудиторией. На недействительный или просроченный токен - HTTP 401\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Передача токена дальше\u003C/td>\n\u003Ctd>Сервер не пересылает токен клиента в другие API; для них он получает собственные токены\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Идентификаторы состояния\u003C/td>\n\u003Ctd>Идентификатор (например, корзины или процесса) не считается аутентификацией. Идентификаторы случайные, не последовательные, привязаны к пользователю и проверяются при каждом вызове\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Права (scopes)\u003C/td>\n\u003Ctd>\u003Ccode>scopes_supported\u003C/code> содержит минимальный набор; дополнительные права запрашиваются, когда впервые нужна привилегированная операция\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Локальный сервер\u003C/td>\n\u003Ctd>Использует stdio или ограничивает доступ к своему HTTP-эндпоинту токеном или IPC. Локальный HTTP-сервер без защиты доступен другим процессам и через DNS rebinding\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>Описания содержат только описание инструмента. Текст для модели, спрятанный в описании или в данных, которые возвращает инструмент, - разновидность prompt injection\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Атаки, на которых основаны эти требования, описаны в статье \u003Ca href=\"/ru/wiki/mcp/mcp-security\" class=\"wiki-link wiki-link--article\">Безопасность MCP\u003C/a>, схема авторизации - в статье \u003Ca href=\"/ru/wiki/mcp/mcp-authorization\" class=\"wiki-link wiki-link--article\">Авторизация в MCP\u003C/a>, а \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"prompt-injection\">prompt injection\u003C/span> и способы его тестирования - в статье \u003Ca href=\"/ru/wiki/ai-testing/prompt-injection\" class=\"wiki-link wiki-link--article\">Prompt injection\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>Соответствие протоколу показывает, что клиент может работать с сервером. Может ли модель с ним выполнять задачи, показывает только запуск модели. Этот подход Anthropic описывает в руководстве по созданию инструментов для агентов.\u003C/p>\n\u003Col>\n\u003Cli>\u003Cstrong>Задачи.\u003C/strong> Набор реалистичных задач на реальных данных, у каждой проверяемый результат: точный ответ или проверка другой моделью. Хорошие задачи требуют нескольких вызовов инструментов.\u003C/li>\n\u003Cli>\u003Cstrong>Прогоны.\u003C/strong> Каждая задача выполняется в цикле: модель получает задачу и инструменты, вызывает их и получает результаты, пока не даст ответ.\u003C/li>\n\u003Cli>\u003Cstrong>Метрики.\u003C/strong> Точность ответов, время задач и вызовов инструментов, число вызовов инструментов, расход токенов и ошибки инструментов.\u003C/li>\n\u003Cli>\u003Cstrong>Анализ.\u003C/strong> Причины видны в стенограммах. Много повторных вызовов указывает на отсутствие постраничной выдачи или фильтров. Частые неверные аргументы указывают на неясные описания или названия параметров.\u003C/li>\n\u003Cli>\u003Cstrong>Итерации.\u003C/strong> После изменения инструментов или описаний тот же набор запускается снова. Часть задач держат отдельно, чтобы убедиться, что улучшение не ограничено задачами, на которых его настраивали.\u003C/li>\n\u003C/ol>\n\u003Cp>Поведение модели меняется от прогона к прогону, поэтому каждую задачу запускают несколько раз и сравнивают доли успешных прогонов. Модели и хосты по-разному выбирают инструменты, поэтому оценку проводят на тех моделях, с которыми работают пользователи сервера. Метод подробно описан в статье \u003Ca href=\"/ru/wiki/mcp/evaluating-mcp-servers\" class=\"wiki-link wiki-link--article\">Оценка MCP-сервера на моделях\u003C/a>, общие методы оценки приложений на языковых моделях - в статье \u003Ca href=\"/ru/wiki/ai-testing/testing-llm-applications\" class=\"wiki-link wiki-link--article\">Тестирование приложений на LLM\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\u003Cul>\n\u003Cli>Первый шаг - подключиться к серверу через MCP Inspector и вызвать инструменты напрямую, без модели и хоста.\u003C/li>\n\u003Cli>Сервер на stdio пишет журнал только в стандартный поток ошибок; хост этот поток перехватывает. Для HTTP-серверов журналы собирают на стороне сервера, например через OpenTelemetry.\u003C/li>\n\u003Cli>Хост может запускать stdio-сервер с неопределённым рабочим каталогом и ограниченным набором переменных окружения. Пути в конфигурации указывают абсолютные, а нужные серверу переменные задают явно в конфигурации хоста.\u003C/li>\n\u003Cli>Если подключение не работает, проверяют версию протокола и поля \u003Ccode>_meta\u003C/code>: \u003Ccode>server/discover\u003C/code> показывает, какие версии поддерживает сервер.\u003C/li>\n\u003C/ul>\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>Соответствие протоколу (conformance)\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>MCP Inspector\u003C/td>\n\u003Ctd>Официальный инструмент разработчика: подключается к серверу, вызывает его примитивы и показывает сообщения\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Ошибка протокола\u003C/td>\n\u003Ctd>Ошибка JSON-RPC: неизвестный инструмент, некорректный запрос, сбой сервера. Обычно не доходит до модели\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Ошибка выполнения инструмента\u003C/td>\n\u003Ctd>Результат инструмента с \u003Ccode>isError: true\u003C/code>: неверные аргументы, сбой API, ошибка бизнес-логики. Передаётся модели\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Оценка (eval)\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>Передача токена дальше (token passthrough)\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/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/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/docs/2026-07-28/tools/inspector\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">MCP Inspector\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/docs/2026-07-28/tools/inspector/cli\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">MCP Inspector, клиент CLI\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/docs/2026-07-28/tools/debugging\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Debugging\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/docs/2026-07-28/tutorials/security/security_best_practices\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Security Best Practices\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/1303-input-validation-errors-as-tool-execution-errors\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">SEP-1303: Input Validation Errors as Tool Execution Errors\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/2484-conformance-tests-required-for-final-seps\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">SEP-2484: Require Conformance Tests for Standards Track SEPs to Reach Final Status\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://github.com/modelcontextprotocol/conformance\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Набор тестов соответствия MCP, GitHub\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://www.anthropic.com/engineering/writing-tools-for-agents\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Writing effective tools for agents, Anthropic, 11 сентября 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,27,30,33,36,39,42,45,48,51,54,57,60],{"id":11,"level":12,"text":13},"кратко",2,"Кратко",{"id":15,"level":12,"text":16},"чем-отличается-от-тестирования-api","Чем отличается от тестирования API",{"id":18,"level":12,"text":19},"уровни-тестирования","Уровни тестирования",{"id":21,"level":12,"text":22},"соответствие-протоколу","Соответствие протоколу",{"id":24,"level":25,"text":26},"обнаружение-возможностей-и-версии",3,"Обнаружение возможностей и версии",{"id":28,"level":25,"text":29},"инструменты","Инструменты",{"id":31,"level":25,"text":32},"ошибки","Ошибки",{"id":34,"level":25,"text":35},"многоэтапные-запросы-mrtr","Многоэтапные запросы (MRTR)",{"id":37,"level":25,"text":38},"транспорты","Транспорты",{"id":40,"level":12,"text":41},"официальные-инструменты","Официальные инструменты",{"id":43,"level":25,"text":44},"mcp-inspector","MCP Inspector",{"id":46,"level":25,"text":47},"набор-тестов-соответствия","Набор тестов соответствия",{"id":49,"level":12,"text":50},"безопасность","Безопасность",{"id":52,"level":12,"text":53},"оценка-на-моделях","Оценка на моделях",{"id":55,"level":12,"text":56},"отладка","Отладка",{"id":58,"level":12,"text":59},"термины","Термины",{"id":61,"level":12,"text":62},"источники","Источники",1797,1793718889687]