Protocol Revision: 2025-11-25
- Form mode: Servers can request structured data from users with optional JSON schemas to validate responses
- URL mode: Servers can direct users to external URLs for sensitive interactions that must not pass through the MCP client
User Interaction Model
Elicitation in MCP allows servers to implement interactive workflows by enabling user input requests to occur nested inside other MCP server features. Implementations are free to expose elicitation through any interface pattern that suits their needs—the protocol itself does not mandate any specific user interaction model.Capabilities
Clients that support elicitation MUST declare theelicitation capability during
initialization:
form mode only:
elicitation capability MUST support at least one mode (form or url).
Servers MUST NOT send elicitation requests with modes that are not supported by the client.
Protocol Messages
Elicitation Requests
To request information from a user, servers send anelicitation/create request.
All elicitation requests MUST include the following parameters:
| Name | Type | Options | Description |
|---|---|---|---|
mode | string | form, url | The mode of the elicitation. Optional for form mode (defaults to "form" if omitted). |
message | string | A human-readable message explaining why the interaction is needed. |
mode parameter specifies the type of elicitation:
"form": In-band structured data collection with optional schema validation. Data is exposed to the client."url": Out-of-band interaction via URL navigation. Data (other than the URL itself) is not exposed to the client.
mode field for form mode elicitation requests. Clients MUST treat requests without a mode field as form mode.
Form Mode Elicitation Requests
Form mode elicitation allows servers to collect structured data directly through the MCP client. Form mode elicitation requests MUST either specifymode: "form" or omit the mode field, and include these additional parameters:
| Name | Type | Description |
|---|---|---|
requestedSchema | object | A JSON Schema defining the structure of the expected response. |
Requested Schema
TherequestedSchema parameter allows servers to define the structure of the expected
response using a restricted subset of JSON Schema.
To simplify client user experience, form mode elicitation schemas are limited to flat objects
with primitive properties only.
The schema is restricted to these primitive types:
-
String Schema
Supported formats:
email,uri,date,date-time -
Number Schema
-
Boolean Schema
-
Enum Schema
Single-select enum (without titles):
Single-select enum (with titles):Multi-select enum (without titles):Multi-select enum (with titles):
- Generate appropriate input forms
- Validate user input before sending
- Provide better guidance to users
Example: Simple Text Request
Request:Example: Structured Data Request
Request:URL Mode Elicitation Requests
New feature: URL mode elicitation is introduced in the
2025-11-25 version of the MCP specification. Its design and implementation may change in future protocol revisions.mode: "url", a message, and include these additional parameters:
| Name | Type | Description |
|---|---|---|
url | string | The URL that the user should navigate to. |
elicitationId | string | A unique identifier for the elicitation. |
url parameter MUST contain a valid URL.
Important: URL mode elicitation is not for authorizing the MCP client’s
access to the MCP server (that’s handled by MCP
authorization). Instead, it’s used when the MCP
server needs to obtain sensitive information or third-party authorization on
behalf of the user. The MCP client’s bearer token remains unchanged. The
client’s only responsibility is to provide the user with context about the
elicitation URL the server wants them to open.
Example: Request Sensitive Data
This example shows a URL mode elicitation request directing the user to a secure URL where they can provide sensitive information (an API key, for example). The same request could direct the user into an OAuth authorization flow, or a payment flow. The only difference is the URL and the message. Request:action: "accept" indicates that the user has consented to the
interaction. It does not mean that the interaction is complete. The interaction occurs out
of band and the client is not aware of the outcome until and unless the server sends a notification indicating completion.
Completion Notifications for URL Mode Elicitation
Servers MAY send anotifications/elicitation/complete notification when an
out-of-band interaction started by URL mode elicitation is completed. This allows clients to react programmatically if appropriate.
Servers sending notifications:
- MUST only send the notification to the client that initiated the elicitation request.
- MUST include the
elicitationIdestablished in the originalelicitation/createrequest.
- MUST ignore notifications referencing unknown or already-completed IDs.
- MAY wait for this notification to automatically retry requests that received a URLElicitationRequiredError, update the user interface, or otherwise continue an interaction.
- SHOULD still provide manual controls that let the user retry or cancel the original request (or otherwise resume interacting with the client) if the notification never arrives.
Example
URL Elicitation Required Error
When a request cannot be processed until an elicitation is completed, the server MAY return aURLElicitationRequiredError (code -32042) to indicate to the client that a URL mode elicitation is required. The server MUST NOT return this error except when URL mode elicitation is required.
The error MUST include a list of elicitations that are required to complete before the original can be retried.
Any elicitations returned in the error MUST be URL mode elicitations and have an elicitationId property.
Error Response:
Message Flow
Form Mode Flow
URL Mode Flow
URL Mode With Elicitation Required Error Flow
Response Actions
Elicitation responses use a three-action model to clearly distinguish between different user actions. These actions apply to both form and URL elicitation modes.-
Accept (
action: "accept"): User explicitly approved and submitted with data- For form mode: The
contentfield contains the submitted data matching the requested schema - For URL mode: The
contentfield is omitted - Example: User clicked “Submit”, “OK”, “Confirm”, etc.
- For form mode: The
-
Decline (
action: "decline"): User explicitly declined the request- The
contentfield is typically omitted - Example: User clicked “Reject”, “Decline”, “No”, etc.
- The
-
Cancel (
action: "cancel"): User dismissed without making an explicit choice- The
contentfield is typically omitted - Example: User closed the dialog, clicked outside, pressed Escape, browser failed to load, etc.
- The
- Accept: Process the submitted data
- Decline: Handle explicit decline (e.g., offer alternatives)
- Cancel: Handle dismissal (e.g., prompt again later)
Implementation Considerations
Statefulness
Most practical uses of elicitation require that the server maintain state about users:- Whether required information has been collected (e.g., the user’s display name via form mode elicitation)
- Status of resource access (e.g., API keys or a payment flow via URL mode elicitation)
- State MUST NOT be associated with session IDs alone
- State storage MUST be protected against unauthorized access
- For remote MCP servers, user identification MUST be derived from credentials acquired via MCP authorization when possible (e.g.
subclaim)
The examples in this section are non-normative and illustrate potential uses
of elicitation. Implementers should adapt these patterns to their specific
requirements while maintaining security best practices.
URL Mode Elicitation for Sensitive Data
For servers that interact with external APIs requiring sensitive information (e.g., credentials, payment information), URL mode elicitation provides a secure mechanism for users to provide this information without exposing it to the MCP client. In this pattern:- The server directs users to a secure web page (served over HTTPS)
- The page presents a branded form UI on a domain the user trusts
- Users enter sensitive credentials directly into the secure form
- The server stores credentials securely, bound to the user’s identity
- Subsequent MCP requests use these stored credentials for API access
URL Mode Elicitation for OAuth Flows
URL mode elicitation enables a pattern where MCP servers act as OAuth clients to third-party resource servers. Authorization with external APIs enabled by URL mode elicitation is separate from MCP authorization. MCP servers MUST NOT rely on URL mode elicitation to authorize users for themselves.Understanding the Distinction
- MCP Authorization: Required OAuth flow between the MCP client and MCP server (covered in the authorization specification)
- External (third-party) Authorization: Optional authorization between the MCP server and a third-party resource server, initiated via URL mode elicitation
- An OAuth resource server (to the MCP client)
- An OAuth client (to the third-party resource server)
- An MCP client connects to an MCP server
- The MCP server integrates with various different third-party services
- When the MCP client calls a tool that requires access to a third-party service, the MCP server needs credentials for that service
- The third-party credentials MUST NOT transit through the MCP client: The client must never see third-party credentials to protect the security boundary
- The MCP server MUST NOT use the client’s credentials for the third-party service: That would be token passthrough, which is forbidden
- The user MUST authorize the MCP server directly: The interaction happens outside the MCP protocol, without involving the MCP client
- The MCP server is responsible for tokens: The MCP server is responsible for storing and managing the third-party tokens obtained through the URL mode elicitation (in other words, the MCP server must be stateful).
For additional background, refer to the token passthrough
section of the Security
Best Practices document to understand why MCP servers cannot act as
pass-through proxies.
Implementation Pattern
When implementing external authorization via URL mode elicitation:- The MCP server generates an authorization URL, acting as an OAuth client to the third-party service
- The MCP server stores internal state that associates (binds) the elicitation request with the user’s identity.
- The MCP server sends a URL mode elicitation request to the client with a URL that can start the authorization flow.
- The user completes the OAuth flow directly with the third-party authorization server
- The third-party authorization server redirects back to the MCP server
- The MCP server securely stores the third-party tokens, bound to the user’s identity
- Future MCP requests can leverage these stored tokens for API access to the third-party resource server
Error Handling
Servers MUST return standard JSON-RPC errors for common failure cases:- When a request cannot be processed until an elicitation is completed:
-32042(URLElicitationRequiredError)
- Server sends an
elicitation/createrequest with a mode not declared in client capabilities:-32602(Invalid params)
Security Considerations
- Servers MUST bind elicitation requests to the client and user identity
- Clients MUST provide clear indication of which server is requesting information
- Clients SHOULD implement user approval controls
- Clients SHOULD allow users to decline elicitation requests at any time
- Clients SHOULD implement rate limiting
- Clients SHOULD present elicitation requests in a way that makes it clear what information is being requested and why
Safe URL Handling
MCP servers requesting elicitation:- MUST NOT include sensitive information about the end-user, including credentials, personal identifiable information, etc., in the URL sent to the client in a URL elicitation request.
- MUST NOT provide a URL which is pre-authenticated to access a protected resource, as the URL could be used to impersonate the user by a malicious client.
- SHOULD NOT include URLs intended to be clickable in any field of a form mode elicitation request.
- SHOULD use HTTPS URLs for non-development environments.
- MUST NOT automatically pre-fetch the URL or any of its metadata.
- MUST NOT open the URL without explicit consent from the user.
- MUST show the full URL to the user for examination before consent.
- MUST open the URL provided by the server in a secure manner that does not enable the client or LLM to inspect the content or user inputs. For example, on iOS, SFSafariViewController is good, but WkWebView is not.
- SHOULD highlight the domain of the URL to mitigate subdomain spoofing.
- SHOULD have warnings for ambiguous/suspicious URIs (i.e., containing Punycode).
- SHOULD NOT render URLs as clickable in any field of an elicitation request, except for the
urlfield in a URL elicitation request (with the restrictions detailed above).
Identifying the User
Servers MUST NOT rely on client-provided user identification without server verification, as this can be forged. Instead, servers SHOULD follow security best practices. Non-normative examples:- Incorrect: Treat user input like “I am joe@example.com” as authoritative
- Correct: Rely on authorization to identify the user
Form Mode Security
- Servers MUST NOT request sensitive information (passwords, API keys, etc.) via form mode
- Clients SHOULD validate all responses against the provided schema
- Servers SHOULD validate received data matches the requested schema
Phishing
URL mode elicitation returns a URL that an attacker can use to send to a victim. The MCP Server MUST verify the identity of the user who opens the URL before accepting information. Typically identity verification is done by leveraging the MCP authorization server to identify the user, through a session cookie or equivalent in the browser. For example, URL mode elicitation may be used to perform OAuth flows where the server acts as an OAuth client of another resource server. Without proper mitigation, the following phishing attack is possible:- A malicious user (Alice) connected to a benign server triggers an elicitation request
- The benign server generates an authorization URL, acting as an OAuth client of a third-party authorization server
- Alice’s client displays the URL and asks for consent
- Instead of clicking on the link, Alice tricks a victim user (Bob) of the same benign server into clicking it
- Bob opens the link and completes the authorization, thinking they are authorizing their own connection to the benign server
- The benign server receives a callback/redirect form the third-party authorization server, and assumes it’s Alice’s request
- The tokens for the third-party server are bound to Alice’s session and identity, instead of Bob’s, resulting in an account takeover
https://mcp.example.com/connect?elicitationId=... rather than the third-party authorization endpoint.
This “connect URL” must ensure the user who opened the page is the same user who the elicitation was generated for.
It would, for example, check that the user has a valid session cookie and that the session cookie is for the same user who was using the MCP client to generate the URL mode elicitation.
This could be done by comparing the authoritative subject (sub claim) from the MCP server’s authorization server to the subject from the session cookie.
Once that page ensures the same user, it can send the user to the third-party authorization server at https://example.com/authorize?... where a normal OAuth flow can be completed.
In other cases, the server may not be accessible via the web and may not be able to use a session cookie to identify the user.
In this case, the server must use a different mechanism to identify the user who opens the elicitation URL is the same user who the elicitation was generated for.
In all implementations, the server MUST ensure that the mechanism to determine the user’s identity is resilient to attacks where an attacker can modify the elicitation URL.