feat: add support for custom client notifications (#556)
MCP servers, particularly ones that offer "experimental" capabilities, may wish to handle custom client notifications that are not part of the standard MCP specification. This change introduces a new `CustomClientNotification` type that allows a server to process such custom notifications. - introduces `CustomClientNotification` to carry arbitrary methods/params while still preserving meta/extensions; wires it into the `ClientNotification` union and `serde` so `params` can be decoded with `params_as` - allows server handlers to receive custom notifications via a new `on_custom_notification` hook - adds integration coverage that sends a custom client notification end-to-end and asserts the server sees the method and payload Test: ```shell cargo test -p rmcp --features client test_custom_client_notification_reaches_server ```
This commit is contained in:
parent
b6dcb282d9
commit
4ef1a163f4
1 changed files with 263 additions and 7 deletions
|
|
@ -90,6 +90,9 @@ impl<H: ServerHandler> Service<RoleServer> for H {
|
|||
ClientNotification::RootsListChangedNotification(_notification) => {
|
||||
self.on_roots_list_changed(context).await
|
||||
}
|
||||
ClientNotification::CustomClientNotification(notification) => {
|
||||
self.on_custom_notification(notification, context).await
|
||||
}
|
||||
};
|
||||
Ok(())
|
||||
}
|
||||
|
|
@ -225,6 +228,14 @@ pub trait ServerHandler: Sized + Send + Sync + 'static {
|
|||
) -> impl Future<Output = ()> + Send + '_ {
|
||||
std::future::ready(())
|
||||
}
|
||||
fn on_custom_notification(
|
||||
&self,
|
||||
notification: CustomClientNotification,
|
||||
context: NotificationContext<RoleServer>,
|
||||
) -> impl Future<Output = ()> + Send + '_ {
|
||||
let _ = (notification, context);
|
||||
std::future::ready(())
|
||||
}
|
||||
|
||||
fn get_info(&self) -> ServerInfo {
|
||||
ServerInfo::default()
|
||||
|
|
|
|||
Loading…
Reference in a new issue