feat(client): Add capability_extensions parameter to ClientSession #1901
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.
Summary
Add a new
capability_extensionsparameter toClientSession.__init__()that allows clients to include additional capability fields in the initialize request.Motivation
Currently, if a client wants to advertise protocol extensions (like
io.modelcontextprotocol/uifor UI rendering) in the initialize request, they must override the entireinitialize()method and duplicate its internal logic. This is error-prone and creates maintenance burden when the SDK'sinitialize()implementation changes.This PR provides a clean escape hatch for clients to extend capabilities without subclassing.
Example Usage
Implementation
The extensions are merged into
ClientCapabilitiesusing Pydantic's extra fields feature (model_config = {'extra': 'allow'}onMCPModel).Testing
Added a test that verifies capability extensions are properly included in the initialize request.