Title: feat: public API for runtime handler registration/deregistration by BabyChrist666 · Pull Request #2146 · modelcontextprotocol/python-sdk · GitHub
Open Graph Title: feat: public API for runtime handler registration/deregistration by BabyChrist666 · Pull Request #2146 · modelcontextprotocol/python-sdk
X Title: feat: public API for runtime handler registration/deregistration by BabyChrist666 · Pull Request #2146 · modelcontextprotocol/python-sdk
Description: Summary Adds public methods for registering and deregistering request/notification handlers at runtime on the low-level Server class: add_request_handler(method, handler) — register a request handler remove_request_handler(method) — deregister a request handler add_notification_handler(method, handler) — register a notification handler remove_notification_handler(method) — deregister a notification handler has_handler(method) — check if a handler exists for a given method 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 (feature flags, hot-reloading, test fixtures). Also refactors ExperimentalHandlers to 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: str as the key — this aligns with the current internal architecture where _request_handlers is a dict[str, ...] keyed by JSON-RPC method names. The private _add_request_handler and _has_handler methods remain for backward compatibility but the public API is the recommended path forward. Test plan 12 new tests covering add/remove/has for both request and notification handlers Existing lowlevel server tests pass (24/24) Experimental handler tests pass (217 passed, 96 skipped) CI passes Fixes #2135 🤖 Generated with Claude Code
Open Graph Description: Summary Adds public methods for registering and deregistering request/notification handlers at runtime on the low-level Server class: add_request_handler(method, handler) — register a request hand...
X Description: Summary Adds public methods for registering and deregistering request/notification handlers at runtime on the low-level Server class: add_request_handler(method, handler) — register a request hand...
Opengraph URL: https://github.com/modelcontextprotocol/python-sdk/pull/2146
X: @github
Domain: github.com
| route-pattern | /:user_id/:repository/pull/:id/files(.:format) |
| route-controller | pull_requests |
| route-action | files |
| fetch-nonce | v2:b1f74d36-edc7-52a7-c371-a42831cc027b |
| current-catalog-service-hash | ae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b |
| request-id | EA46:33F12C:983542:CD3769:6A5B4989 |
| html-safe-nonce | 6837e94d783d5331d400756477ec15c95ec08fbf2bd3461270dbf990f2cc5b26 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFQTQ2OjMzRjEyQzo5ODM1NDI6Q0QzNzY5OjZBNUI0OTg5IiwidmlzaXRvcl9pZCI6IjE0Mjk0Mzg4MTk1MzE5NjY4NTciLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 0ff19790d1114631d29740379818e350123adc5c7c5fe8bc2822eee74c8c8701 |
| hovercard-subject-tag | pull_request:3326888648 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/modelcontextprotocol/python-sdk/pull/2146/files |
| twitter:image | https://avatars.githubusercontent.com/u/251679698?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/251679698?s=400&v=4 |
| og:image:alt | Summary Adds public methods for registering and deregistering request/notification handlers at runtime on the low-level Server class: add_request_handler(method, handler) — register a request hand... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5290d7e14309ad1e76106a9c4237bd1041517e83ea182c8ab756752cb0c6940b |
| turbo-cache-control | no-preview |
| diff-view | unified |
| go-import | github.com/modelcontextprotocol/python-sdk git https://github.com/modelcontextprotocol/python-sdk.git |
| octolytics-dimension-user_id | 182288589 |
| octolytics-dimension-user_login | modelcontextprotocol |
| octolytics-dimension-repository_id | 862584018 |
| octolytics-dimension-repository_nwo | modelcontextprotocol/python-sdk |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 862584018 |
| octolytics-dimension-repository_network_root_nwo | modelcontextprotocol/python-sdk |
| turbo-body-classes | logged-out env-production page-responsive full-width |
| disable-turbo | true |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 9c975978430e9ad293956f2bbdaf153b1bd84a99 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width