feat: public API for runtime handler registration/deregistration#2146
Open
BabyChrist666 wants to merge 1 commit intomodelcontextprotocol:mainfrom
Open
feat: public API for runtime handler registration/deregistration#2146BabyChrist666 wants to merge 1 commit intomodelcontextprotocol:mainfrom
BabyChrist666 wants to merge 1 commit intomodelcontextprotocol:mainfrom
Conversation
Add add_request_handler(), remove_request_handler(), add_notification_handler(), remove_notification_handler(), and has_handler() as public methods on the low-level Server class. This enables frameworks and advanced use cases to register handlers for protocol extensions or custom methods after server construction, and to remove or replace handlers dynamically. Refactors ExperimentalHandlers to use the new public API instead of receiving private method references, validating the API with its first internal consumer. Fixes modelcontextprotocol#2135 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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.
Summary
Adds public methods for registering and deregistering request/notification handlers at runtime on the low-level
Serverclass:add_request_handler(method, handler)— register a request handlerremove_request_handler(method)— deregister a request handleradd_notification_handler(method, handler)— register a notification handlerremove_notification_handler(method)— deregister a notification handlerhas_handler(method)— check if a handler exists for a given methodThis enables frameworks and advanced use cases to register handlers for protocol extensions or custom methods after server construction, and to remove or replace handlers dynamically (feature flags, hot-reloading, test fixtures).
Also refactors
ExperimentalHandlersto use the new public API instead of receiving private method references, validating the API with its first internal consumer.Design note
The issue proposed
method: stras the key — this aligns with the current internal architecture where_request_handlersis adict[str, ...]keyed by JSON-RPC method names. The private_add_request_handlerand_has_handlermethods remain for backward compatibility but the public API is the recommended path forward.Test plan
Fixes #2135
🤖 Generated with Claude Code