У инструмента стоит метка «только чтение», и помощник предлагает передать ему текст документа. Такая метка ещё не отвечает на вопрос, куда попадёт документ. Сначала выясните, что инструмент читает, кому отправляет параметры и каким доступом располагает сервер. Отсутствие записи в источник и отсутствие передачи данных — разные условия.

В MCP разработчик может добавить к инструменту annotations — подсказки о его поведении. Одна из них, readOnlyHint, описывает чтение без изменения окружения. Она не выдаёт и не ограничивает права доступа. Спецификация предупреждает: эти подсказки могут неточно описывать поведение, а сведения от недоверенного сервера нельзя использовать как основание для решения о вызове. Поэтому метку полезно сопоставить с документацией и настройками, а неизвестное оставить неизвестным.

Условная схема: рядом с меткой readOnlyHint: true запрос выходит из локальной области к внешнему справочнику.
Учебная иллюстрация: инструмент может читать внешний справочник и передавать ему строку запроса. Метка «только чтение» не означает работу без внешней передачи.

Что означают четыре подсказки

В спецификации MCP 2025-11-25 они относятся к описанию инструмента, а не к проверке его кода.

Подсказка Заявленный смысл Чего из неё не следует
readOnlyHint: true Инструмент не изменяет своё окружение. Что параметры остаются на вашем компьютере или что ключ технически лишён права записи.
destructiveHint: false Для инструмента с readOnlyHint: false заявлены только добавляющие изменения. Что изменений вообще нет: добавление записи тоже меняет данные.
idempotentHint: true Для инструмента с readOnlyHint: false повтор с теми же аргументами не даёт дополнительного эффекта на окружение. Что любой повтор безопасен и его можно разрешить без разбора операции.
openWorldHint: false Область взаимодействия инструмента замкнута. Что инструмент работает без сети или не обращается к внешнему сервису.

Если поля отсутствуют, спецификация задаёт значения по умолчанию: readOnlyHint — false, destructiveHint — true, idempotentHint — false, openWorldHint — true. Это правила трактовки отсутствующих подсказок, а не результаты проверки поведения. В частности, readOnlyHint: false сам по себе не доказывает, что инструмент удаляет данные.

Чтение тоже может передавать параметры

Представьте учебный инструмент поиска по внешнему справочнику. Его описание говорит, что он отправляет строку запроса сервису справочника и возвращает найденные записи. Он может не менять записи справочника, но строка запроса всё равно покидает компьютер. Если вставить в неё внутренний документ, метка «только чтение» не превращает такую передачу в локальный поиск.

Ниже — сокращённый учебный фрагмент описания. Он не относится к серверу из каталога и не является командой для запуска:

JSON
{
  "name": "lookup_reference",
  "description": "Передаёт query внешнему справочнику и возвращает найденные записи",
  "annotations": {
    "readOnlyHint": true,
    "openWorldHint": true
  }
}

Из этого фрагмента известно заявленное назначение и то, что запрос передаётся наружу. Неизвестны получатель, правила хранения, фактические полномочия сервера и соответствие реализации описанию. Чтобы разрешить передачу внутренних данных, этих сведений недостаточно. Проверять догадку отправкой документа не нужно.

Что сверить до выбора инструмента

Откройте документацию конкретного сервера по ссылке издателя. Найдите имя инструмента, описание входных параметров и ожидаемого действия. Названия вроде «поиск» или «проверка» недостаточно: важно понять, какой текст или идентификатор уйдёт в запросе и какая система его получит.

Затем сопоставьте три вещи:

  • Описание операции. Только чтение, добавление, изменение существующей записи или отправка сообщения? Если описание и подсказки расходятся, сохраните расхождение для разработчика.
  • Реально известный доступ. Какие области доступа выданы при входе, какой ключ используется, какие файлы доступны локальному процессу? Если интерфейс этого не показывает, не заменяйте ответ значением readOnlyHint.
  • Получатель данных. К какому сервису обращается инструмент и что получает этот сервис? Закрытый набор адресов всё ещё может находиться вне вашего компьютера.

За настройкой ключей и областей доступа можно обратиться к руководству «Ключи и права MCP». Эта статья помогает разобраться с описанием поведения; руководство — с самим доступом. Одно не подменяет другое.

Когда сведений не хватает

Зафиксируйте имя сервера и инструмента, ссылку на документацию, версию при её наличии и спорное поле. Не прикладывайте ключи или реальные данные к вопросу. Например:

У инструмента lookup_reference указан readOnlyHint: true, а описание говорит о передаче query внешнему справочнику. Какой сервис получает запрос? Какие поля передаются и сохраняются ли они? Какими правами располагает сервер? Где описано это поведение для используемой версии?

Если нужен только поиск, а инструмент умеет ещё создавать записи, уточните возможность ограничить доступ или выбрать отдельную операцию. Не проверяйте удаление, отправку или запись «ради пробы». Если назначение, доступ или получатель остаются неизвестными, сначала получите пояснение, а затем решайте, подходит ли инструмент для ваших данных.

Когда эти вопросы разобраны, первая контрольная проверка MCP поможет сверить один узкий запрос с известным результатом. Она проверяет выбранный сценарий; метка и удачный единичный ответ не подтверждают поведение всех остальных инструментов сервера.

Источники