Перейти к содержимому
Выберите тему

Elicitation: вопрос пользователю

Elicitation в MCP 2026-07-28 - как сервер запрашивает данные у пользователя, режимы form и url, три варианта ответа, запрет на секреты в форме и правила работы со ссылками

описана редакция 2026-07-28, сверено со спецификацией 4 октября 2026

Источник - страница Elicitation спецификации.

Сервер не отправляет вопрос отдельным запросом. Он возвращает результат «нужны данные», внутри которого лежит elicitation/create, а клиент присылает ответ в повторе исходного запроса. Весь порядок описан на странице «Многошаговые запросы».

Клиент, который умеет задавать вопросы пользователю, объявляет возможность elicitation в _meta каждого запроса.

{
"_meta": {
"io.modelcontextprotocol/clientCapabilities": {
"elicitation": { "form": {}, "url": {} }
}
}
}

Пустой объект "elicitation": {} означает поддержку только режима form. Сервер не должен использовать режим, который клиент не объявил.

Параметр Значение
mode form или url; если не указан, считается form
message понятное человеку объяснение, зачем нужны данные

Сервер присылает схему ожидаемого ответа в параметре requestedSchema.

Вопрос
{
"method": "elicitation/create",
"params": {
"mode": "form",
"message": "Please provide your GitHub username",
"requestedSchema": {
"type": "object",
"properties": { "name": { "type": "string" } },
"required": ["name"]
}
}
}
Ответ клиента
{
"action": "accept",
"content": { "name": "octocat" }
}

Схема намеренно ограничена: только плоский объект с простыми полями. Вложенные объекты и списки объектов не поддерживаются.

Тип поля Что можно задать
строка длину, формат (email, uri, date, date-time), значение по умолчанию
число или целое минимум, максимум, значение по умолчанию
логическое значение по умолчанию
выбор одного перечень значений, с подписями или без
выбор нескольких список из перечня, с ограничением количества

Сервер присылает ссылку. Пользователь открывает её и вводит данные на странице, которой доверяет. Клиент видит только саму ссылку.

Вопрос
{
"method": "elicitation/create",
"params": {
"mode": "url",
"url": "https://mcp.example.com/ui/set_api_key",
"message": "Please provide your API key to continue."
}
}
Ответ клиента
{ "action": "accept" }

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

Режим url не служит для доступа клиента к самому серверу MCP - этим занимается авторизация. Он нужен, когда серверу требуются секреты пользователя или разрешение в стороннем сервисе.

Действие Что произошло Поле content
accept пользователь согласился и отправил данные в режиме form - данные; в режиме url - отсутствует
decline пользователь явно отказался обычно отсутствует
cancel пользователь закрыл окно, не выбрав обычно отсутствует

Серверу не следует рассчитывать, что вопрос всегда получит ответ. Отказ и отмену он обязан обрабатывать.

  • Формой нельзя запрашивать пароли, ключи API, токены и платёжные данные. Для них обязателен режим url.
  • Имя, почту и другие обычные сведения запрашивать формой не запрещено.
  • Вопрос обязан быть привязан к клиенту и пользователю.
  • Нельзя полагаться на сведения о личности пользователя, полученные от клиента, без собственной проверки. Пример из спецификации: ответ «я joe@example.com» ничего не доказывает, личность определяется через авторизацию.
  • В ссылке не должно быть чувствительных сведений о пользователе (учётных и персональных данных) и готового доступа к защищённому ресурсу.
  • Сервер обязан убедиться, что ссылку открыл тот же пользователь, для которого она создана. Иначе возможна подмена: ссылку передают другому человеку, и его разрешение привязывается к чужой учётной записи.
  • Учётные данные стороннего сервиса не должны проходить через клиента и не должны ему передаваться.
  • Показывать, какой сервер задаёт вопрос.
  • Давать понятные варианты «отказаться» и «отменить».
  • В режиме form - позволить просмотреть и исправить ответ до отправки.
  • В режиме url: не загружать ссылку заранее, не открывать без явного согласия, показывать адрес целиком и открывать так, чтобы ни клиент, ни модель не видели содержимое страницы и ввод пользователя.
  • Не следует делать нажимаемыми ссылки из других полей вопроса: это рекомендация, остальные пункты списка - требования.