pub trait ClientHandler:
Sized
+ Send
+ Sync
+ 'static {
Show 16 methods
// Provided methods
fn ping(
&self,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture { ... }
fn create_message(
&self,
params: CreateMessageRequestParams,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<CreateMessageResult, ErrorData>> + MaybeSendFuture { ... }
fn list_roots(
&self,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<ListRootsResult, ErrorData>> + MaybeSendFuture { ... }
fn create_elicitation(
&self,
request: ElicitRequestParams,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<ElicitResult, ErrorData>> + MaybeSendFuture { ... }
fn on_custom_request(
&self,
request: CustomRequest,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<CustomResult, ErrorData>> + MaybeSendFuture { ... }
fn on_cancelled(
&self,
params: CancelledNotificationParam,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture { ... }
fn on_progress(
&self,
params: ProgressNotificationParam,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture { ... }
fn on_logging_message(
&self,
params: LoggingMessageNotificationParam,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture { ... }
fn on_resource_updated(
&self,
params: ResourceUpdatedNotificationParam,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture { ... }
fn on_resource_list_changed(
&self,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture { ... }
fn on_tool_list_changed(
&self,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture { ... }
fn on_prompt_list_changed(
&self,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture { ... }
fn on_subscriptions_acknowledged(
&self,
params: SubscriptionsAcknowledgedNotificationParams,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture { ... }
fn on_task_status(
&self,
params: TaskStatusNotificationParams,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture { ... }
fn on_custom_notification(
&self,
notification: CustomNotification,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture { ... }
fn get_info(&self) -> InitializeRequestParams { ... }
}Available on crate feature
client and crate feature mcp and crate feature tools and non-crate feature local only.Provided Methods§
fn ping( &self, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn create_message( &self, params: CreateMessageRequestParams, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<CreateMessageResult, ErrorData>> + MaybeSendFuture
fn list_roots( &self, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<ListRootsResult, ErrorData>> + MaybeSendFuture
Sourcefn create_elicitation(
&self,
request: ElicitRequestParams,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<ElicitResult, ErrorData>> + MaybeSendFuture
fn create_elicitation( &self, request: ElicitRequestParams, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<ElicitResult, ErrorData>> + MaybeSendFuture
Handle an elicitation request from a server asking for user input.
This method is called when a server needs interactive input from the user during tool execution. Implementations should present the message to the user, collect their input according to the requested schema, and return the result.
§Arguments
request- The elicitation request with message and schemacontext- The request context
§Returns
The user’s response including action (accept/decline/cancel) and optional data
§Default Behavior
The default implementation automatically declines all elicitation requests. Real clients should override this to provide user interaction.
§Example
use rmcp::{
ClientHandler,
model::{
ElicitRequestParams, ElicitResult, ElicitationAction, ElicitationSchema,
ErrorData as McpError,
},
service::{RequestContext, RoleClient},
};
impl ClientHandler for MyClient {
async fn create_elicitation(
&self,
request: ElicitRequestParams,
_context: RequestContext<RoleClient>,
) -> Result<ElicitResult, McpError> {
match request {
ElicitRequestParams::FormElicitationParams {
message,
requested_schema,
..
} => {
let input = get_user_input(message, requested_schema).await?;
Ok(ElicitResult::new(ElicitationAction::Accept).with_content(input))
}
ElicitRequestParams::UrlElicitationParams { url, .. } => {
open_url_in_browser(url).await?;
Ok(ElicitResult::new(ElicitationAction::Accept))
}
_ => Ok(ElicitResult::new(ElicitationAction::Decline)),
}
}
}fn on_custom_request( &self, request: CustomRequest, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<CustomResult, ErrorData>> + MaybeSendFuture
fn on_cancelled( &self, params: CancelledNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_progress( &self, params: ProgressNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_logging_message( &self, params: LoggingMessageNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_resource_updated( &self, params: ResourceUpdatedNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_resource_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_tool_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_prompt_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_subscriptions_acknowledged( &self, params: SubscriptionsAcknowledgedNotificationParams, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_task_status( &self, params: TaskStatusNotificationParams, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_custom_notification( &self, notification: CustomNotification, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn get_info(&self) -> InitializeRequestParams
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
impl ClientHandler for ()
Do nothing, with default client info.
Source§impl<T> ClientHandler for Box<T>where
T: ClientHandler,
impl<T> ClientHandler for Box<T>where
T: ClientHandler,
fn ping( &self, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn create_message( &self, params: CreateMessageRequestParams, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<CreateMessageResult, ErrorData>> + MaybeSendFuture
fn list_roots( &self, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<ListRootsResult, ErrorData>> + MaybeSendFuture
fn create_elicitation( &self, request: ElicitRequestParams, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<ElicitResult, ErrorData>> + MaybeSendFuture
fn on_custom_request( &self, request: CustomRequest, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<CustomResult, ErrorData>> + MaybeSendFuture
fn on_cancelled( &self, params: CancelledNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_progress( &self, params: ProgressNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_logging_message( &self, params: LoggingMessageNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_resource_updated( &self, params: ResourceUpdatedNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_resource_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_tool_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_prompt_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_subscriptions_acknowledged( &self, params: SubscriptionsAcknowledgedNotificationParams, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_task_status( &self, params: TaskStatusNotificationParams, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_custom_notification( &self, notification: CustomNotification, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn get_info(&self) -> InitializeRequestParams
Implementors§
impl ClientHandler for AdkClientHandler
impl ClientHandler for InitializeRequestParams
Do nothing, with a specific client info.