Перейти до основного вмісту
Просунутий8 хв1359 слів

MCP form vs URL elicitation: як безпечно запитувати дані користувача

Практичний вибір між form і URL elicitation у MCP: capability negotiation, sensitive data, third-party OAuth, completion, phishing controls, тести та rollout.

Зміст статті
  1. 01Коротка відповідь: form збирає несекретні поля, URL ізолює sensitive interaction
  2. 02Capability negotiation визначає доступний UX до першого request
  3. 03Form mode потребує мінімальної схеми, preview і подвійної валідації
  4. 04URL mode розділяє consent to navigate і завершення зовнішнього flow
  5. 05Third-party authorization не можна плутати з MCP client authorization
  6. 06Тестова матриця перевіряє privacy, association і recovery
  7. 07Rollout починається з read-only form і одного allowlisted URL flow

Передумови

Коротка відповідь: form збирає несекретні поля, URL ізолює sensitive interaction

Form mode використовуйте для невеликого набору несекретних структурованих відповідей, які користувач може переглянути й надіслати у MCP client: назва середовища, формат звіту, діапазон дат або підтвердження параметрів. URL mode потрібен, коли взаємодія містить пароль, API key, access token, платіжні реквізити або third-party authorization. Такі дані вводяться поза client і не повертаються в ElicitResult content.

Elicitation не є дозволом моделі діяти й не замінює authorization. Вона лише дає server контрольований спосіб попросити участь користувача під час originating request. Після відповіді server знову перевіряє identity, scope, business policy та актуальний стан об'єкта. Якщо дані вже відомі з authoritative system або питання не потрібне для виконання, не викликайте elicitation: зайвий prompt збільшує friction і phishing surface.

  • Несекретні primitive fields → form mode.
  • Credentials, payment або external OAuth → URL mode.
  • Approval consequential action → окремий policy/approval gate, не довільне поле форми.
  • Client не оголосив потрібний mode → контрольований fallback або відмова.
  • Authoritative value уже доступне → прочитайте його з system of record.

architecture

Карта системи: MCP form vs URL elicitation: як безпечно запитувати дані користувача

Схема побудована з ключових секцій статті та показує послідовність або архітектурні блоки, які потрібно опрацювати.

comparison

Критерії вибору й порівняння

Візуалізація використовує тези, приклади та наступні кроки статті як перевірювані контрольні точки, а не декоративні елементи.

Capability negotiation визначає доступний UX до першого request

Client оголошує elicitation capability під час initialization і підтримувані form та/або url modes. Порожній elicitation object сумісний із form-only поведінкою; server не повинен трактувати його як URL support. Зберігайте session capability manifest разом із negotiated protocol version та implementation version, а перед elicitation/create перевіряйте потрібний mode. Назва застосунку або наявність кнопки в одному client не доводить сумісність іншого deployment.

Server-to-client elicitation має бути пов'язана з originating client request, наприклад tools/call або resources/read. Не будуйте незалежний канал unsolicited prompts. Router визначає requirement до запуску side effect: form-supported, url-supported, no-elicitation fallback або blocked. Якщо workflow без URL mode не може безпечно отримати credential, правильний fallback — setup link поза workflow чи чітка відмова, а не запит secret через text field.

Form mode потребує мінімальної схеми, preview і подвійної валідації

Form request містить human-readable message і restricted JSON Schema: flat object із primitive properties. Обмеження корисне — воно утримує elicitation як коротку взаємодію, а не приховану application form platform. Назви, descriptions, defaults, enum labels і required fields мають пояснювати наслідок відповіді. Не вставляйте clickable URL у поля форми й не просіть секрети навіть тоді, коли schema технічно приймає string.

Client дозволяє користувачу переглянути, змінити, accept, decline або cancel відповідь і валідовує content за schema. Server повторює schema та domain validation: range, tenant membership, object existence, current version і дозволені transitions. Accept означає, що користувач надіслав значення; це не автоматичне схвалення наступної високоризикової дії. Decline завершує запит без прихованого default, а cancel не слід інтерпретувати як негативну business decision.

  • Збирайте лише поля, необхідні для поточного request.
  • Відокремлюйте schema validity від business authorization.
  • Не логайте повний content без retention purpose і data classification.
  • Після decline/cancel не повторюйте prompt у нескінченному agent loop.

Third-party authorization не можна плутати з MCP client authorization

MCP authorization захищає доступ client до MCP server. URL elicitation вирішує іншу задачу: server просить користувача підключити downstream service або виконати secure out-of-band interaction. Bearer token між client і MCP server через цей flow не змінюється. Не передавайте downstream token назад через model context, tool result чи form content; server зберігає credential у керованому vault і прив'язує його до перевіреної identity та scope.

Connect URL має протистояти phishing relay. Server перевіряє, що browser user є тією самою authoritative особою, для якої створено elicitation, а не довіряє email або ім'ю з query parameter. State/nonce одноразовий, короткоживучий і прив'язаний до provider та redirect target. Callback перевіряє issuer, audience, state і дозволені redirect URI. Повторне відкриття, зміна користувача або протермінований record завершуються без credential attachment.

  • MCP token → client-to-server access.
  • Downstream grant → server-to-third-party access для конкретного user/tenant.
  • elicitationId → correlation handle, не доказ identity чи completion.
  • Browser session + verified subject → authoritative binding.

Тестова матриця перевіряє privacy, association і recovery

Contract tests покривають initialization з form-only, url-only, обома modes і без elicitation; omitted mode як form; unsupported mode; accept, decline, cancel; schema rejection; unknown/duplicate completion ID та request association. URL cases перевіряють, що client не prefetch-ить адресу, показує host, вимагає consent і не повертає external content у protocol result. Form cases блокують password, token, API key і payment fixtures незалежно від їхньої назви.

Security tests намагаються змінити elicitationId, tenant, provider, redirect, state і browser subject; повторити callback; використати expired URL; підставити Punycode host; прочитати secret у logs або traces. Recovery tests гублять accept response, completion notification і originating retry. Assertions вимагають idempotent resume: повторний tool request спершу reconcile-ить elicitation state й downstream connection, а не створює другий OAuth grant або payment.

  • Hard gate → secret у form, automatic navigation, identity mismatch або credential leakage.
  • Protocol gate → request без association чи mode без capability.
  • Recovery gate → lost notification не створює duplicate external effect.
  • UX gate → server, purpose, domain і decline/cancel зрозумілі до consent.

Rollout починається з read-only form і одного allowlisted URL flow

Спочатку запустіть form mode для reversible read-only workflow з двома-трьома несекретними полями. Вимірюйте completion, decline/cancel, validation failures, repeated prompts і time-to-resume без запису raw values у загальну telemetry. Далі додайте один URL flow до allowlisted HTTPS origin із pinned redirect policy, verified identity binding, expiry, replay protection, vault storage, audit evidence та kill switch.

Canary просувають після contract, privacy, phishing, recovery й accessibility gates. Rollback блокує нові elicitation requests, залишає reconciliation для in-flight records, відкликає незавершені state handles і повертає documented manual setup path. Retest потрібен після зміни MCP revision, SDK/client, capability manifest, browser container, identity provider, downstream OAuth configuration або data classification. Verdict завжди стосується конкретної client-server-flow комбінації, а не універсальної безпеки URL mode.

Практичні приклади

Form для параметрів read-only export

Tool бракує формату та періоду звіту. Server просить enum format і date range, client показує preview, а server повторно перевіряє range та tenant. Decline завершує export без side effect; жодних credentials форма не збирає.

URL для підключення CRM

Server створює короткоживучий elicitation record і показує allowlisted HTTPS URL. Browser user проходить third-party OAuth, callback перевіряє subject і state, а token потрапляє прямо у server vault. Client отримує completion signal, але ніколи не бачить credential.

FAQ

Чи можна просити API key через form elicitation?

Ні. Специфікація забороняє form mode для passwords, API keys, access tokens і payment credentials. Використовуйте URL mode із secure out-of-band flow.

Чи accept у URL mode означає, що OAuth завершено?

Ні. Це згода перейти за URL. Завершення підтверджує server-side flow; completion notification може повідомити client, але потрібні retry та reconciliation.

Чи URL elicitation замінює MCP authorization?

Ні. MCP authorization контролює client-to-server access. URL elicitation може отримати third-party grant для server, не змінюючи bearer token client.

Що робити, якщо client підтримує лише form mode?

Не надсилайте URL request. Запропонуйте безпечний manual setup поза workflow, інший сумісний client або завершіть операцію з чіткою помилкою; не збирайте secret у form як fallback.

Пов’язані матеріали

Model Context Protocol: архітектура і безпечна інтеграція

Як MCP стандартизує зв’язок між AI-хостом і серверами інструментів, які ролі мають host, client і server та де проходять межі довіри.

Authorization у MCP

Authorization у MCP визначає, хто й за яких умов може звертатися до захищених capabilities. Стаття пояснює OAuth-базований потік, resource indicators, audience binding, consent, захист токенів і перевірку повноважень на кожній операції.

MCP security checklist: як безпечно запустити server і client

Практичний security checklist для Model Context Protocol: trust boundaries, OAuth, token audience, SSRF, session binding, tool permissions, local-server sandbox, негативні тести, audit evidence і rollback.

Розробка MCP client

MCP client відкриває capabilities серверів для AI-застосунку та відповідає за discovery, consent, маршрутизацію і безпечне виконання. Розглядаємо життєвий цикл сесії, роботу зі схемами, ізоляцію результатів, сумісність і відмовостійкість.

Розробка MCP server

MCP server перетворює дані й операції системи на типізовані ресурси, промпти та інструменти. Матеріал показує, як спроєктувати вузький контракт, валідовувати запити, обмежувати повноваження і тестувати сервер незалежно від конкретної моделі.

Deployment MCP server

Розгортання MCP server — це керування transport, identity, конфігурацією, масштабуванням і сумісністю протоколу. Розбираємо локальний stdio та віддалений HTTP, ізоляцію, health signals, zero-downtime rollout і перевірний rollback.

Тестування MCP-інтеграцій

Тестування MCP-інтеграцій має перевіряти не лише happy path, а й negotiation, schema compatibility, authorization, недовірені результати та невизначені side effects. Будуємо багаторівневу стратегію від unit-тестів до end-to-end eval.

Observability для MCP

Observability для MCP пов’язує protocol session, запит моделі, tool call, policy-рішення і downstream effect. Матеріал визначає корисні метрики, безпечні traces, кореляцію помилок, SLO та діагностику без витоку prompt, токенів і персональних даних.

Human-in-the-loop для AI

Human-in-the-loop для AI — практичний розбір production-архітектури: залучення людини в конкретній точці ризику з достатнім контекстом для реального, а не формального контролю. Матеріал охоплює контракти, межі повноважень, failure modes, оцінювання та контрольований rollout.

Secrets management в AI-системах

AI-системи торкаються model APIs, vector stores, datasets і tools, тому витік одного ключа може мати широкий вплив. Розбираємо inventory, least privilege, короткі identity, rotation, redaction, аудит та incident response.

Retries, rate limits та idempotency

Як повторювати тимчасові збої без retry storm, обробляти 429, використовувати exponential backoff, jitter, retry budget та idempotency keys для безпечних операцій.

MCP Tasks vs synchronous tool calls: як виконувати довгі операції

Практичний вибір між звичайним MCP tools/call і експериментальними MCP Tasks для довгих операцій: capability negotiation, стани, polling, cancellation, безпека, тести та rollout.

Джерела

  1. Elicitation — MCP specification 2025-11-25первинне
  2. Lifecycle — MCP specification 2025-11-25первинне
  3. Authorization — MCP specification 2025-11-25первинне
  4. MCP 2025-11-25 changelogпервинне
  5. SEP-1036 — URL Mode Elicitationпервинне