[{"data":1,"prerenderedAt":100},["ShallowReactive",2],{"wiki-mcp-mcp-server-for-existing-api-ru":3},{"meta":4,"html":8,"headings":9,"words":99},{"title":5,"description":6,"published":7,"updated":7,"sourceUpdated":7},"MCP-сервер поверх существующего API","MCP-сервер поверх существующего API приспосабливает API для модели: выбор инструментов, описания, параметры, размер ответа, ошибки, авторизация, состояние.","2026-11-03","\u003Cp>\u003Cstrong>MCP-сервер поверх существующего API\u003C/strong> - \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"mcp-server\">MCP-сервер\u003C/span>, который даёт языковой модели доступ к сервису через уже существующий интерфейс этого сервиса: REST, GraphQL или RPC. Сервер не копирует API один к одному. Он отбирает операции, которые стоит открыть, превращает их в инструменты (tools), которые модель может правильно выбрать и заполнить, и приводит результаты к виду, удобному для контекста модели.\u003C/p>\n\u003Cp>Спецификация MCP не определяет, как проектировать такой сервер. Она задаёт формат инструментов, разделение ошибок, подсказки кеширования и требования безопасности; остальное - рекомендации по проектированию. Статья опирается на версию спецификации \u003Cstrong>2026-07-28\u003C/strong> и руководство «Writing effective tools for agents», которое Anthropic опубликовала в сентябре 2025 года. Базовые понятия протокола описаны в статье \u003Ca href=\"/ru/wiki/mcp/what-is-mcp\" class=\"wiki-link wiki-link--article\">Что такое MCP\u003C/a>, поля определения инструмента - в статье \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\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-сервер, который служит обёрткой над API существующего сервиса\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>Спецификация 2026-07-28: инструменты, кеширование, авторизация, Security Best Practices\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Рекомендации по проектированию\u003C/td>\n\u003Ctd>«Writing effective tools for agents», Anthropic, сентябрь 2025 года\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>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>API рассчитан на программы. Разработчик один раз читает документацию и пишет код, который вызывает эндпоинты в заданном порядке, хранит идентификаторы, проходит все страницы списка и переводит числовые коды в значения.\u003C/p>\n\u003Cp>Модель выбирает инструмент в каждом разговоре заново - по именам, описаниям и схемам входных параметров в своём контексте. Каждое определение инструмента и каждый результат занимают место в этом контексте. Длинный список похожих инструментов усложняет выбор, страница сырого JSON расходует токены, а непрозрачный идентификатор легко спутать с другим.\u003C/p>\n\u003Cp>Руководство Anthropic называет инструменты, которые просто оборачивают существующие эндпоинты, частой ошибкой и советует несколько инструментов под конкретные важные сценарии. MCP-сервер становится слоем адаптации между моделью и неизменным 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>В таблице - изменения спецификации, важные для проектирования инструментов.\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>26 марта 2025\u003C/td>\n\u003Ctd>Спецификация 2025-03-26: аннотации инструментов, которые описывают их поведение\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>18 июня 2025\u003C/td>\n\u003Ctd>Спецификация 2025-06-18: структурированный результат инструмента (\u003Ccode>outputSchema\u003C/code>, \u003Ccode>structuredContent\u003C/code>), ссылки на ресурсы в результатах, поле \u003Ccode>title\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>11 сентября 2025\u003C/td>\n\u003Ctd>Anthropic публикует руководство «Writing effective tools for agents»\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>25 ноября 2025\u003C/td>\n\u003Ctd>Спецификация 2025-11-25: ошибки проверки входных данных возвращаются как ошибки выполнения инструмента (SEP-1303)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>28 июля 2026\u003C/td>\n\u003Ctd>Спецификация 2026-07-28: протокол без состояния, явные идентификаторы состояния, подсказки кеширования \u003Ccode>ttlMs\u003C/code> и \u003Ccode>cacheScope\u003C/code>, детерминированный порядок инструментов\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>Инструмент закрывает задачу, о которой просит пользователь, а не отдельный HTTP-вызов. В примерах руководства Anthropic один инструмент \u003Ccode>schedule_event\u003C/code> находит свободное время и создаёт событие вместо отдельных инструментов для списка пользователей, списка событий и создания события, а \u003Ccode>search_logs\u003C/code> возвращает только нужные строки вместо \u003Ccode>read_logs\u003C/code>.\u003C/p>\n\u003Cp>Инструмент, который объединяет несколько вызовов API, переносит логику с модели на сервер: сервер выполняет вызовы в правильном порядке и сводит данные. Руководство также предупреждает, что слишком много инструментов или инструменты с пересекающимся назначением отвлекают модель от эффективных стратегий. Поиск с фильтрами оно предпочитает полному списку, который заставляет модель читать записи, не нужные для задачи.\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\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\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>\u003Ccode>title\u003C/code>\u003C/td>\n\u003Ctd>Название инструмента для человека\u003C/td>\n\u003Ctd>нет\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>readOnlyHint\u003C/code>\u003C/td>\n\u003Ctd>Инструмент не меняет своё окружение\u003C/td>\n\u003Ctd>\u003Ccode>false\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>destructiveHint\u003C/code>\u003C/td>\n\u003Ctd>Инструмент может выполнять разрушающие изменения; \u003Ccode>false\u003C/code> означает только добавление\u003C/td>\n\u003Ctd>\u003Ccode>true\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>idempotentHint\u003C/code>\u003C/td>\n\u003Ctd>Повторный вызов с теми же аргументами не даёт дополнительного эффекта\u003C/td>\n\u003Ctd>\u003Ccode>false\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>openWorldHint\u003C/code>\u003C/td>\n\u003Ctd>Инструмент работает с открытым миром внешних сущностей, например с вебом\u003C/td>\n\u003Ctd>\u003Ccode>true\u003C/code>\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>\u003Ccode>destructiveHint\u003C/code> и \u003Ccode>idempotentHint\u003C/code> имеют смысл, только когда \u003Ccode>readOnlyHint\u003C/code> равно \u003Ccode>false\u003C/code>. Значения по умолчанию описывают самый осторожный случай, поэтому сервер ставит \u003Ccode>readOnlyHint: true\u003C/code> инструментам, которые только читают, и \u003Ccode>destructiveHint: false\u003C/code> инструментам, которые только добавляют данные.\u003C/p>\n\u003Cblockquote>\n\u003Cp>Аннотации - подсказки. Клиенты обязаны считать их недоверенными, если сервер не доверенный, а аннотация не заменяет контроль доступа на сервере.\u003C/p>\n\u003C/blockquote>\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>search\u003C/code>, и спецификация допускает, что клиенты добавляют к имени префикс с идентификатором сервера. Руководство Anthropic советует использовать пространства имён (namespacing) и на стороне сервера: по сервису (\u003Ccode>asana_search\u003C/code>, \u003Ccode>jira_search\u003C/code>) и по ресурсу (\u003Ccode>asana_projects_search\u003C/code>, \u003Ccode>asana_users_search\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>Описание - главный источник, из которого модель узнаёт, когда применять инструмент; схема называет его подсказкой для модели. Руководство Anthropic советует описывать инструмент так, как его объясняли бы новому сотруднику команды. То, что опытный пользователь API знает неявно, записывается явно: форматы запросов, термины предметной области, связи между сущностями, ограничения. По данным руководства, даже небольшие уточнения описаний могут заметно улучшить то, как модель пользуется инструментами.\u003C/p>\n\u003Cp>Сведения о сервере в целом, а не об одном инструменте, можно поместить в поле \u003Ccode>instructions\u003C/code> результата \u003Ccode>server/discover\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>user_id\u003C/code> понятнее, чем \u003Ccode>user\u003C/code>. У каждого параметра есть своё поле \u003Ccode>description\u003C/code> с ожидаемым форматом и примером. Схема с \u003Ccode>additionalProperties: false\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\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>API часто принимает коды и флаги, понятные только с документацией. В инструменте они становятся явным выбором: статус, который API кодирует числом, превращается в \u003Ccode>enum\u003C/code> из понятных значений, а сервер переводит их в коды. Модель выбирает из закрытого списка, а не угадывает.\u003C/p>\n\u003Cp>Параметры, которые не нужны в большинстве вызовов, получают значения по умолчанию. Ключевое слово JSON Schema \u003Ccode>default\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>API обозначают объекты внутренними идентификаторами, часто UUID. По данным руководства Anthropic, замена UUID осмысленными названиями или даже простой нумерацией заметно повышает точность модели в задачах поиска и уменьшает число галлюцинаций.\u003C/p>\n\u003Cp>Поэтому сервер поверх API принимает идентификаторы, которыми пользуются люди: ключ проекта, ключ задачи вида \u003Ccode>WEB-142\u003C/code>, имя пользователя, слово «me» для текущего пользователя. Во внутренние идентификаторы их переводит сам сервер.\u003C/p>\n\u003Ch2 id=\"размер-ответа\" class=\"wiki-heading\">Размер ответа\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"размер-ответа\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Ch3 id=\"фильтры-и-ограничения\" 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>Инструмент, который может вернуть много данных, ограничивает их: постраничной выдачей, выбором диапазона, фильтрами или усечением, с разумными значениями по умолчанию. По данным руководства, в Claude Code ответы инструментов по умолчанию ограничены 25 000 токенов.\u003C/p>\n\u003Cp>Протокол определяет постраничную выдачу по курсору только для списочных операций, таких как \u003Ccode>tools/list\u003C/code>, а не для содержимого результата \u003Ccode>tools/call\u003C/code>. Поэтому у инструмента поиска свои параметры, например лимит и курсор, который результат возвращает для следующего вызова.\u003C/p>\n\u003Ch3 id=\"усечение-с-подсказкой\" class=\"wiki-heading\">Усечение с подсказкой\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"усечение-с-подсказкой\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Если результат обрезан, инструмент сообщает об этом и объясняет, как получить остальное: сузить фильтр, запросить следующую страницу, найти конкретный элемент. Руководство советует такой текст, чтобы направить модель к небольшим точным поискам вместо одного широкого.\u003C/p>\n\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>response_format\u003C/code> со значениями \u003Ccode>&quot;concise&quot;\u003C/code> и \u003Ccode>&quot;detailed&quot;\u003C/code>. Краткий формат возвращает только то, что нужно модели для ответа, например текст сообщений. Подробный добавляет идентификаторы и поля, нужные для следующих вызовов. В примере из руководства краткий ответ занял около трети токенов подробного.\u003C/p>\n\u003Cp>Поля ответа выбираются для модели, а не копируются из API: руководство предпочитает \u003Ccode>name\u003C/code> и \u003Ccode>file_type\u003C/code> полям \u003Ccode>uuid\u003C/code> и \u003Ccode>mime_type\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>Спецификация отделяет \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"protocol-error\">ошибки протокола\u003C/span>, например неизвестный инструмент, от \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"tool-execution-error\">ошибок выполнения инструмента\u003C/span>: сбоя API, ошибки бизнес-логики, неверных аргументов. Вторые возвращаются в результате инструмента с \u003Ccode>isError: true\u003C/code>, и спецификация описывает их как обратную связь, по которой модель может исправить вызов.\u003C/p>\n\u003Cp>Поэтому сервер поверх API переводит ошибки API. HTTP-статус с внутренним кодом мало что говорит модели; текст, который называет неверное значение и допустимые, позволяет ей исправиться. Руководство советует конкретные сообщения с указанием, что делать, вместо непрозрачных кодов ошибок и трассировок стека.\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"json\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">JSON\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Скопировано\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Копировать\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Скопировано\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>{\n  &quot;jsonrpc&quot;: &quot;2.0&quot;,\n  &quot;id&quot;: 7,\n  &quot;result&quot;: {\n    &quot;resultType&quot;: &quot;complete&quot;,\n    &quot;content&quot;: [\n      {\n        &quot;type&quot;: &quot;text&quot;,\n        &quot;text&quot;: &quot;Project \\&quot;WEBB\\&quot; not found. Available project keys: WEB, API, MOBILE. Call tracker_search_issues again with one of these keys in the project parameter.&quot;\n      }\n    ],\n    &quot;isError&quot;: true\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\u003Cp>Как MCP-сервер по HTTP получает и проверяет токены, описано в статье \u003Ca href=\"/ru/wiki/mcp/mcp-authorization\" class=\"wiki-link wiki-link--article\">Авторизация в MCP\u003C/a>. Для сервера поверх API важнее всего два правила спецификации.\u003C/p>\n\u003Cp>Первое: сервер принимает только токены, выданные для него, и проверяет каждый входящий токен. Пользователь определяется по проверенному токену, а не по аргументу инструмента. Список инструментов может зависеть от авторизации запроса, например от выданных прав (scopes).\u003C/p>\n\u003Cp>Второе: сервер не должен пересылать в API токен, полученный от клиента (\u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"token-passthrough\">token passthrough\u003C/span>). Обращаясь к API, сервер может выступать OAuth-клиентом этого API и использует отдельный токен, выданный собственным \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"authorization-server\">сервером авторизации\u003C/span> API. Как сервер получает этот токен и как связывает пользователя с учётной записью в API, спецификация не определяет.\u003C/p>\n\u003Cp>Сервер, который подключает клиентов к стороннему API с одним статическим идентификатором клиента, в документе Security Best Practices называется \u003Cstrong>MCP-прокси-сервером\u003C/strong> (MCP proxy server). Такой сервер подвержен проблеме \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"confused-deputy\">confused deputy\u003C/span>, и документ требует от него хранить согласие пользователя для каждого клиента отдельно и проверять его до начала авторизации у третьей стороны. Документ также советует минимальный начальный набор прав; дополнительные права запрашиваются, когда впервые нужна привилегированная операция. Риски безопасности описаны в статье \u003Ca href=\"/ru/wiki/mcp/mcp-security\" class=\"wiki-link wiki-link--article\">Безопасность MCP\u003C/a>. Локальный сервер на \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"stdio\">stdio\u003C/span> берёт учётные данные, например ключ 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 в протоколе нет сессии; изменения описаны в статье \u003Ca href=\"/ru/wiki/mcp/stateless-mcp\" class=\"wiki-link wiki-link--article\">MCP без состояния\u003C/a>. Сервер, которому нужно состояние между вызовами, например черновик или открытая транзакция, возвращает явный \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"state-handle\">идентификатор состояния\u003C/span> (handle) из инструмента, который это состояние создаёт, и принимает его как аргумент следующих вызовов. Передавать идентификатор дальше - задача модели.\u003C/p>\n\u003Cp>Спецификация даёт ненормативные рекомендации для идентификаторов состояния:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Авторизация.\u003C/strong> На сервере с аутентификацией идентификатор - имя, а не право доступа: сервер при каждом вызове проверяет права вызывающего на этот идентификатор.\u003C/li>\n\u003Cli>\u003Cstrong>Непрозрачность.\u003C/strong> Идентификатор не кодирует внутреннюю структуру, которую можно разобрать или угадать.\u003C/li>\n\u003Cli>\u003Cstrong>Срок жизни.\u003C/strong> Срок хранения указывается в описании инструмента, который создаёт состояние, например «drafts expire after 24 hours of inactivity», чтобы модель его видела.\u003C/li>\n\u003Cli>\u003Cstrong>Истечение.\u003C/strong> Вызов с просроченным или неизвестным идентификатором возвращает ошибку выполнения инструмента с объяснением, и модель может создать новый идентификатор.\u003C/li>\n\u003C/ul>\n\u003Cp>Security Best Practices добавляет, что обладание идентификатором не является аутентификацией. Идентификаторы создаются криптостойким генератором случайных чисел и привязываются на сервере к пользователю из проверенного токена, например через хранение состояния под ключом \u003Ccode>&lt;user_id&gt;:&lt;handle&gt;\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>outputSchema\u003C/code> - JSON Schema своего результата. \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"structured-content\">Структурированный результат\u003C/span> возвращается в \u003Ccode>structuredContent\u003C/code> и обязан соответствовать схеме; для совместимости инструменту следует вернуть и сериализованный JSON в текстовом блоке. Сами поля описаны в статье \u003Ca href=\"/ru/wiki/mcp/mcp-tools\" class=\"wiki-link wiki-link--article\">Инструменты в MCP\u003C/a>.\u003C/p>\n\u003Cp>Для сервера поверх API схема результата - отдельный контракт, а не копия ответа 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 результаты \u003Ccode>server/discover\u003C/code>, списочных методов и \u003Ccode>resources/read\u003C/code> несут подсказки кеширования: \u003Ccode>ttlMs\u003C/code> - время в миллисекундах, в течение которого результат считается свежим, и \u003Ccode>cacheScope\u003C/code>. Результатов \u003Ccode>tools/call\u003C/code> в этом списке нет.\u003C/p>\n\u003Cp>\u003Ccode>cacheScope: &quot;public&quot;\u003C/code> означает, что в результате нет данных конкретного пользователя и любой общий кеш может отдавать его любому пользователю. \u003Ccode>&quot;private&quot;\u003C/code> разрешает повторное использование только в том же контексте авторизации, поэтому список инструментов, который зависит от прав токена, помечается \u003Ccode>&quot;private&quot;\u003C/code>. \u003Ccode>cacheScope\u003C/code> не заменяет контроль доступа. Инструменты возвращаются в детерминированном порядке; по данным спецификации, это ещё и повышает долю попаданий в кеш промптов модели.\u003C/p>\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>В примере - вымышленный API трекера задач по адресу \u003Ccode>api.tracker.example\u003C/code>. Это не настоящий сервис. У API четыре эндпоинта:\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>GET /v2/projects/{project_id}/issues\u003C/code>\u003C/td>\n\u003Ctd>Список задач; фильтры \u003Ccode>state\u003C/code> (код 1, 2 или 3) и \u003Ccode>assignee_id\u003C/code> (UUID); \u003Ccode>page\u003C/code>, \u003Ccode>per_page\u003C/code>; каждая задача со всеми полями\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST /v2/projects/{project_id}/issues\u003C/code>\u003C/td>\n\u003Ctd>Создаёт задачу\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST /v2/issues/{issue_id}/transitions\u003C/code>\u003C/td>\n\u003Ctd>Меняет статус по идентификатору перехода\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>DELETE /v2/issues/{issue_id}\u003C/code>\u003C/td>\n\u003Ctd>Удаляет задачу\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\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>Прямое зеркало даёт по инструменту на эндпоинт. Имена повторяют пути, описания повторяют HTTP-метод, а параметры требуют UUID и числовых кодов, которые модель может только угадать.\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  {\n    &quot;name&quot;: &quot;get_v2_projects_project_id_issues&quot;,\n    &quot;description&quot;: &quot;GET /v2/projects/{project_id}/issues&quot;,\n    &quot;inputSchema&quot;: {\n      &quot;type&quot;: &quot;object&quot;,\n      &quot;properties&quot;: {\n        &quot;project_id&quot;: { &quot;type&quot;: &quot;string&quot; },\n        &quot;state&quot;: { &quot;type&quot;: &quot;integer&quot; },\n        &quot;assignee_id&quot;: { &quot;type&quot;: &quot;string&quot; },\n        &quot;page&quot;: { &quot;type&quot;: &quot;integer&quot; },\n        &quot;per_page&quot;: { &quot;type&quot;: &quot;integer&quot; }\n      },\n      &quot;required&quot;: [&quot;project_id&quot;]\n    }\n  },\n  {\n    &quot;name&quot;: &quot;post_v2_issues_issue_id_transitions&quot;,\n    &quot;description&quot;: &quot;POST /v2/issues/{issue_id}/transitions&quot;,\n    &quot;inputSchema&quot;: {\n      &quot;type&quot;: &quot;object&quot;,\n      &quot;properties&quot;: {\n        &quot;issue_id&quot;: { &quot;type&quot;: &quot;string&quot; },\n        &quot;transition_id&quot;: { &quot;type&quot;: &quot;string&quot; }\n      },\n      &quot;required&quot;: [&quot;issue_id&quot;, &quot;transition_id&quot;]\n    }\n  },\n  {\n    &quot;name&quot;: &quot;delete_v2_issues_issue_id&quot;,\n    &quot;description&quot;: &quot;DELETE /v2/issues/{issue_id}&quot;,\n    &quot;inputSchema&quot;: {\n      &quot;type&quot;: &quot;object&quot;,\n      &quot;properties&quot;: {\n        &quot;issue_id&quot;: { &quot;type&quot;: &quot;string&quot; }\n      },\n      &quot;required&quot;: [&quot;issue_id&quot;]\n    }\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>У переработанного сервера три инструмента с префиксом \u003Ccode>tracker_\u003C/code>. Они принимают ключи проектов и задач, понятные статусы и имена пользователей; сервер сам переводит их в идентификаторы, коды и переходы и сам проходит страницы API. Удаление не открыто и остаётся в собственном интерфейсе трекера.\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  {\n    &quot;name&quot;: &quot;tracker_search_issues&quot;,\n    &quot;title&quot;: &quot;Search issues&quot;,\n    &quot;description&quot;: &quot;Search issues in one project of the tracker. Returns at most `limit` issues, newest first. Use the concise format to answer questions and the detailed format when you need issue fields for a follow-up call. If more issues match, the result says so; narrow the query instead of raising the limit.&quot;,\n    &quot;inputSchema&quot;: {\n      &quot;type&quot;: &quot;object&quot;,\n      &quot;properties&quot;: {\n        &quot;project&quot;: {\n          &quot;type&quot;: &quot;string&quot;,\n          &quot;description&quot;: &quot;Project key, for example WEB&quot;\n        },\n        &quot;status&quot;: {\n          &quot;type&quot;: &quot;string&quot;,\n          &quot;enum&quot;: [&quot;open&quot;, &quot;in_progress&quot;, &quot;done&quot;],\n          &quot;description&quot;: &quot;Filter by status. Omit to search all statuses&quot;\n        },\n        &quot;assignee&quot;: {\n          &quot;type&quot;: &quot;string&quot;,\n          &quot;description&quot;: &quot;Username of the assignee, or me for the current user&quot;\n        },\n        &quot;query&quot;: {\n          &quot;type&quot;: &quot;string&quot;,\n          &quot;description&quot;: &quot;Words to find in the title or description&quot;\n        },\n        &quot;limit&quot;: {\n          &quot;type&quot;: &quot;integer&quot;,\n          &quot;minimum&quot;: 1,\n          &quot;maximum&quot;: 50,\n          &quot;default&quot;: 20\n        },\n        &quot;response_format&quot;: {\n          &quot;type&quot;: &quot;string&quot;,\n          &quot;enum&quot;: [&quot;concise&quot;, &quot;detailed&quot;],\n          &quot;default&quot;: &quot;concise&quot;\n        }\n      },\n      &quot;required&quot;: [&quot;project&quot;],\n      &quot;additionalProperties&quot;: false\n    },\n    &quot;outputSchema&quot;: {\n      &quot;type&quot;: &quot;object&quot;,\n      &quot;properties&quot;: {\n        &quot;issues&quot;: {\n          &quot;type&quot;: &quot;array&quot;,\n          &quot;items&quot;: {\n            &quot;type&quot;: &quot;object&quot;,\n            &quot;properties&quot;: {\n              &quot;key&quot;: { &quot;type&quot;: &quot;string&quot; },\n              &quot;title&quot;: { &quot;type&quot;: &quot;string&quot; },\n              &quot;status&quot;: { &quot;type&quot;: &quot;string&quot; },\n              &quot;assignee&quot;: { &quot;type&quot;: &quot;string&quot; }\n            },\n            &quot;required&quot;: [&quot;key&quot;, &quot;title&quot;, &quot;status&quot;]\n          }\n        },\n        &quot;truncated&quot;: { &quot;type&quot;: &quot;boolean&quot; }\n      },\n      &quot;required&quot;: [&quot;issues&quot;, &quot;truncated&quot;]\n    },\n    &quot;annotations&quot;: {\n      &quot;readOnlyHint&quot;: true,\n      &quot;openWorldHint&quot;: false\n    }\n  },\n  {\n    &quot;name&quot;: &quot;tracker_create_issue&quot;,\n    &quot;title&quot;: &quot;Create issue&quot;,\n    &quot;description&quot;: &quot;Create an issue in a project. Returns the key of the new issue, for example WEB-143. Each call creates a new issue, so do not repeat a call that succeeded.&quot;,\n    &quot;inputSchema&quot;: {\n      &quot;type&quot;: &quot;object&quot;,\n      &quot;properties&quot;: {\n        &quot;project&quot;: { &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Project key, for example WEB&quot; },\n        &quot;title&quot;: { &quot;type&quot;: &quot;string&quot;, &quot;maxLength&quot;: 200 },\n        &quot;description&quot;: { &quot;type&quot;: &quot;string&quot; },\n        &quot;priority&quot;: {\n          &quot;type&quot;: &quot;string&quot;,\n          &quot;enum&quot;: [&quot;low&quot;, &quot;medium&quot;, &quot;high&quot;],\n          &quot;default&quot;: &quot;medium&quot;\n        }\n      },\n      &quot;required&quot;: [&quot;project&quot;, &quot;title&quot;],\n      &quot;additionalProperties&quot;: false\n    },\n    &quot;annotations&quot;: {\n      &quot;readOnlyHint&quot;: false,\n      &quot;destructiveHint&quot;: false,\n      &quot;idempotentHint&quot;: false,\n      &quot;openWorldHint&quot;: false\n    }\n  },\n  {\n    &quot;name&quot;: &quot;tracker_change_issue_status&quot;,\n    &quot;title&quot;: &quot;Change issue status&quot;,\n    &quot;description&quot;: &quot;Move an issue to another status. The previous status is replaced. Moving an issue to the status it already has changes nothing.&quot;,\n    &quot;inputSchema&quot;: {\n      &quot;type&quot;: &quot;object&quot;,\n      &quot;properties&quot;: {\n        &quot;issue&quot;: { &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Issue key, for example WEB-142&quot; },\n        &quot;status&quot;: { &quot;type&quot;: &quot;string&quot;, &quot;enum&quot;: [&quot;open&quot;, &quot;in_progress&quot;, &quot;done&quot;] }\n      },\n      &quot;required&quot;: [&quot;issue&quot;, &quot;status&quot;],\n      &quot;additionalProperties&quot;: false\n    },\n    &quot;annotations&quot;: {\n      &quot;readOnlyHint&quot;: false,\n      &quot;destructiveHint&quot;: true,\n      &quot;idempotentHint&quot;: true,\n      &quot;openWorldHint&quot;: false\n    }\n  }\n]\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Аннотации следуют определениям схемы. Создание только добавляет данные и не идемпотентно, потому что каждый вызов создаёт новую задачу. Смена статуса заменяет прежнее значение, а это не добавление, поэтому \u003Ccode>destructiveHint\u003C/code> остаётся \u003Ccode>true\u003C/code>; повторный вызов с тем же статусом ничего не меняет, поэтому инструмент идемпотентен. Трекер - закрытая предметная область, поэтому \u003Ccode>openWorldHint\u003C/code> равно \u003Ccode>false\u003C/code>.\u003C/p>\n\u003Ch2 id=\"эндпоинт-rest-api-и-инструмент-mcp\" class=\"wiki-heading\">Эндпоинт REST API и инструмент MCP\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"эндпоинт-rest-api-и-инструмент-mcp\" 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>Таблица сравнивает типичный эндпоинт существующего API с инструментом сервера, спроектированного поверх него.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003C/th>\n\u003Cth>Эндпоинт REST API\u003C/th>\n\u003Cth>Инструмент MCP поверх API\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>Один ресурс и один HTTP-метод\u003C/td>\n\u003Ctd>Одна задача, возможно несколько вызовов API\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Описание интерфейса\u003C/td>\n\u003Ctd>Документация, OpenAPI\u003C/td>\n\u003Ctd>Имя, описание, \u003Ccode>inputSchema\u003C/code>, которые читает модель\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Идентификаторы\u003C/td>\n\u003Ctd>Внутренние, часто UUID\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>HTTP-статус и код ошибки\u003C/td>\n\u003Ctd>\u003Ccode>isError: true\u003C/code> с текстом, который объясняет исправление\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Побочные эффекты\u003C/td>\n\u003Ctd>Описаны в документации\u003C/td>\n\u003Ctd>Аннотации \u003Ccode>readOnlyHint\u003C/code>, \u003Ccode>destructiveHint\u003C/code>, \u003Ccode>idempotentHint\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Учётные данные\u003C/td>\n\u003Ctd>Токен API\u003C/td>\n\u003Ctd>Токен, выданный для MCP-сервера; отдельный токен для API\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Состояние\u003C/td>\n\u003Ctd>Ресурсы и идентификаторы API\u003C/td>\n\u003Ctd>Явные идентификаторы, передаваемые как аргументы\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Эндпоинт остаётся основой: логика сервиса, проверки и контроль доступа остаются в API. Инструмент добавляет слой, который нужен модели: выбор операций, формулировки, упрощение и ограничения.\u003C/p>\n\u003Cp>Два интерфейса развиваются раздельно: новое описание инструмента может изменить поведение модели без единого изменения в API, поэтому инструменты проверяют на моделях, как описано в статье \u003Ca href=\"/ru/wiki/mcp/testing-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\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>MCP-сервер поверх существующего API\u003C/td>\n\u003Ctd>MCP-сервер, который даёт модели доступ к сервису через его существующий API и превращает его операции в инструменты\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Аннотации инструмента\u003C/td>\n\u003Ctd>Необязательные подсказки о поведении инструмента в его определении: \u003Ccode>readOnlyHint\u003C/code>, \u003Ccode>destructiveHint\u003C/code>, \u003Ccode>idempotentHint\u003C/code>, \u003Ccode>openWorldHint\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Пространство имён инструментов (namespacing)\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>isError: true\u003C/code> и текстом, по которому модель может исправить вызов\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Передача токена дальше (token passthrough)\u003C/td>\n\u003Ctd>Пересылка токена клиента в другой сервис; запрещена спецификацией\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>MCP-прокси-сервер\u003C/td>\n\u003Ctd>MCP-сервер, который подключает клиентов к стороннему API и выступает единственным OAuth-клиентом этого API\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/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/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/utilities/pagination\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Pagination, спецификация 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/authorization/security-considerations\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Authorization: Security Considerations, спецификация 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://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/schema/2026-07-28/schema.ts\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Схема спецификации 2026-07-28 (schema.ts), 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://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://blog.modelcontextprotocol.io/posts/2026-03-16-tool-annotations/\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Tool Annotations as Risk Vocabulary: What Hints Can and Can't Do, блог MCP, 16 марта 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://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\u003Cli>\u003Ca href=\"https://json-schema.org/draft/2020-12/json-schema-validation\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">JSON Schema Validation, draft 2020-12\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,63,66,69,72,75,78,81,84,87,90,93,96],{"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":12,"text":35},"описания-и-имена","Описания и имена",{"id":37,"level":25,"text":38},"имена-инструментов","Имена инструментов",{"id":40,"level":25,"text":41},"описания-инструментов","Описания инструментов",{"id":43,"level":25,"text":44},"имена-параметров","Имена параметров",{"id":46,"level":12,"text":47},"параметры","Параметры",{"id":49,"level":25,"text":50},"перечисления-и-значения-по-умолчанию","Перечисления и значения по умолчанию",{"id":52,"level":25,"text":53},"понятные-идентификаторы","Понятные идентификаторы",{"id":55,"level":12,"text":56},"размер-ответа","Размер ответа",{"id":58,"level":25,"text":59},"фильтры-и-ограничения","Фильтры и ограничения",{"id":61,"level":25,"text":62},"усечение-с-подсказкой","Усечение с подсказкой",{"id":64,"level":25,"text":65},"краткий-и-подробный-форматы","Краткий и подробный форматы",{"id":67,"level":12,"text":68},"ошибки-понятные-модели","Ошибки, понятные модели",{"id":70,"level":12,"text":71},"авторизация-и-пользователь","Авторизация и пользователь",{"id":73,"level":12,"text":74},"состояние-между-вызовами","Состояние между вызовами",{"id":76,"level":12,"text":77},"структурированный-результат","Структурированный результат",{"id":79,"level":12,"text":80},"подсказки-кеширования","Подсказки кеширования",{"id":82,"level":12,"text":83},"пример-с-api-трекера-задач","Пример с API трекера задач",{"id":85,"level":25,"text":86},"до-переработки","До переработки",{"id":88,"level":25,"text":89},"после-переработки","После переработки",{"id":91,"level":12,"text":92},"эндпоинт-rest-api-и-инструмент-mcp","Эндпоинт REST API и инструмент MCP",{"id":94,"level":12,"text":95},"термины","Термины",{"id":97,"level":12,"text":98},"источники","Источники",2338,1793718889575]