Support elicitation/create per MCP specification#312
Open
koic wants to merge 1 commit intomodelcontextprotocol:mainfrom
Open
Support elicitation/create per MCP specification#312koic wants to merge 1 commit intomodelcontextprotocol:mainfrom
elicitation/create per MCP specification#312koic wants to merge 1 commit intomodelcontextprotocol:mainfrom
Conversation
3c50f76 to
ef739d9
Compare
## Motivation and Context The MCP specification (2025-11-25) defines elicitation as a server-to-client request mechanism that allows servers to request user input during tool execution: https://modelcontextprotocol.io/specification/2025-11-25/client/elicitation This aligns with the Python SDK, which also exposes separate methods for form and URL mode elicitation. Three methods are added following the Python SDK's API design: - `create_form_elicitation`: collects structured data via JSON Schema - `create_url_elicitation`: directs users to external URLs for sensitive interactions (OAuth, credentials, etc.) - `notify_elicitation_complete`: notifies the client that a URL mode interaction has completed `URLElicitationRequiredError` (error code `-32042`) is defined as a subclass of `RequestHandlerError` with its own `error_code` and `error_data` attributes. `JsonRpcHandler#handle_request_error` is extended to check for these attributes so that MCP-specific error codes can be propagated without embedding MCP knowledge in the generic JSON-RPC layer. ## How Has This Been Tested? - Unit tests for `ServerSession` form/URL mode, capability checks, nil capabilities, notification, and `URLElicitationRequiredError` - `ServerContext` delegation tests for all three elicitation methods - `JsonRpcHandler` tests for custom error code and fallback behavior - `Methods` capability test for `NOTIFICATIONS_ELICITATION_COMPLETE` - Conformance tests pass (40/40), including `tools-call-elicitation`, `elicitation-sep1034-defaults`, and `elicitation-sep1330-enums` - All tests pass (`rake test`), RuboCop is clean - Verified form mode elicitation end-to-end with a sample MCP server running in Claude Code ## Breaking Changes None. This is a new feature addition.
ef739d9 to
985fd03
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation and Context
The MCP specification (2025-11-25) defines elicitation as a server-to-client request mechanism that allows servers to request user input during tool execution: https://modelcontextprotocol.io/specification/2025-11-25/client/elicitation
This aligns with the Python SDK, which also exposes separate methods for form and URL mode elicitation. Three methods are added following the Python SDK's API design:
create_form_elicitation: collects structured data via JSON Schemacreate_url_elicitation: directs users to external URLs for sensitive interactions (OAuth, credentials, etc.)notify_elicitation_complete: notifies the client that a URL mode interaction has completedURLElicitationRequiredError(error code-32042) is defined as a subclass ofRequestHandlerErrorwith its ownerror_codeanderror_dataattributes.JsonRpcHandler#handle_request_erroris extended to check for these attributes so that MCP-specific error codes can be propagated without embedding MCP knowledge in the generic JSON-RPC layer.How Has This Been Tested?
ServerSessionform/URL mode, capability checks, nil capabilities, notification, andURLElicitationRequiredErrorServerContextdelegation tests for all three elicitation methodsJsonRpcHandlertests for custom error code and fallback behaviorMethodscapability test forNOTIFICATIONS_ELICITATION_COMPLETEtools-call-elicitation,elicitation-sep1034-defaults, andelicitation-sep1330-enumsrake test), RuboCop is cleanBreaking Changes
None. This is a new feature addition.
Types of changes
Checklist