pub trait ClientHandler:
Sized
+ Send
+ Sync
+ 'static {
Show 16 methods
// Provided methods
fn ping(
&self,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_ { ... }
fn create_message(
&self,
params: CreateMessageRequestParams,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<CreateMessageResult, McpError>> + MaybeSendFuture + '_ { ... }
fn list_roots(
&self,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<ListRootsResult, McpError>> + MaybeSendFuture + '_ { ... }
fn create_elicitation(
&self,
request: ElicitRequestParams,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<ElicitResult, McpError>> + MaybeSendFuture + '_ { ... }
fn on_custom_request(
&self,
request: CustomRequest,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<CustomResult, McpError>> + 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) -> ClientInfo { ... }
}Available on crate feature
client and non-crate feature local only.Provided Methods§
fn ping( &self, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_
fn create_message( &self, params: CreateMessageRequestParams, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<CreateMessageResult, McpError>> + MaybeSendFuture + '_
fn list_roots( &self, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<ListRootsResult, McpError>> + MaybeSendFuture + '_
Sourcefn create_elicitation(
&self,
request: ElicitRequestParams,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<ElicitResult, McpError>> + MaybeSendFuture + '_
fn create_elicitation( &self, request: ElicitRequestParams, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<ElicitResult, McpError>> + 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, McpError>> + 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) -> ClientInfo
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> ClientHandler for Arc<T>
impl<T: ClientHandler> ClientHandler for Arc<T>
Source§fn ping(
&self,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_
fn ping( &self, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn create_message(
&self,
params: CreateMessageRequestParams,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<CreateMessageResult, McpError>> + MaybeSendFuture + '_
fn create_message( &self, params: CreateMessageRequestParams, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<CreateMessageResult, McpError>> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn list_roots(
&self,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<ListRootsResult, McpError>> + MaybeSendFuture + '_
fn list_roots( &self, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<ListRootsResult, McpError>> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn create_elicitation(
&self,
request: ElicitRequestParams,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<ElicitResult, McpError>> + MaybeSendFuture + '_
fn create_elicitation( &self, request: ElicitRequestParams, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<ElicitResult, McpError>> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_custom_request(
&self,
request: CustomRequest,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<CustomResult, McpError>> + MaybeSendFuture + '_
fn on_custom_request( &self, request: CustomRequest, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<CustomResult, McpError>> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_cancelled(
&self,
params: CancelledNotificationParam,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_cancelled( &self, params: CancelledNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_progress(
&self,
params: ProgressNotificationParam,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_progress( &self, params: ProgressNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_logging_message(
&self,
params: LoggingMessageNotificationParam,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_logging_message( &self, params: LoggingMessageNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_resource_updated(
&self,
params: ResourceUpdatedNotificationParam,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_resource_updated( &self, params: ResourceUpdatedNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_resource_list_changed(
&self,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_resource_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_tool_list_changed(
&self,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_tool_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_prompt_list_changed(
&self,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_prompt_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_subscriptions_acknowledged(
&self,
params: SubscriptionsAcknowledgedNotificationParams,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_subscriptions_acknowledged( &self, params: SubscriptionsAcknowledgedNotificationParams, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_task_status(
&self,
params: TaskStatusNotificationParams,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_task_status( &self, params: TaskStatusNotificationParams, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_custom_notification(
&self,
notification: CustomNotification,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_custom_notification( &self, notification: CustomNotification, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn get_info(&self) -> ClientInfo
fn get_info(&self) -> ClientInfo
Available on non-crate feature
local only.Source§impl<T: ClientHandler> ClientHandler for Box<T>
impl<T: ClientHandler> ClientHandler for Box<T>
Source§fn ping(
&self,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_
fn ping( &self, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<(), McpError>> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn create_message(
&self,
params: CreateMessageRequestParams,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<CreateMessageResult, McpError>> + MaybeSendFuture + '_
fn create_message( &self, params: CreateMessageRequestParams, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<CreateMessageResult, McpError>> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn list_roots(
&self,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<ListRootsResult, McpError>> + MaybeSendFuture + '_
fn list_roots( &self, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<ListRootsResult, McpError>> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn create_elicitation(
&self,
request: ElicitRequestParams,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<ElicitResult, McpError>> + MaybeSendFuture + '_
fn create_elicitation( &self, request: ElicitRequestParams, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<ElicitResult, McpError>> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_custom_request(
&self,
request: CustomRequest,
context: RequestContext<RoleClient>,
) -> impl Future<Output = Result<CustomResult, McpError>> + MaybeSendFuture + '_
fn on_custom_request( &self, request: CustomRequest, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<CustomResult, McpError>> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_cancelled(
&self,
params: CancelledNotificationParam,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_cancelled( &self, params: CancelledNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_progress(
&self,
params: ProgressNotificationParam,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_progress( &self, params: ProgressNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_logging_message(
&self,
params: LoggingMessageNotificationParam,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_logging_message( &self, params: LoggingMessageNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_resource_updated(
&self,
params: ResourceUpdatedNotificationParam,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_resource_updated( &self, params: ResourceUpdatedNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_resource_list_changed(
&self,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_resource_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_tool_list_changed(
&self,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_tool_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_prompt_list_changed(
&self,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_prompt_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_subscriptions_acknowledged(
&self,
params: SubscriptionsAcknowledgedNotificationParams,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_subscriptions_acknowledged( &self, params: SubscriptionsAcknowledgedNotificationParams, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_task_status(
&self,
params: TaskStatusNotificationParams,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_task_status( &self, params: TaskStatusNotificationParams, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn on_custom_notification(
&self,
notification: CustomNotification,
context: NotificationContext<RoleClient>,
) -> impl Future<Output = ()> + MaybeSendFuture + '_
fn on_custom_notification( &self, notification: CustomNotification, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture + '_
Available on non-crate feature
local only.Source§fn get_info(&self) -> ClientInfo
fn get_info(&self) -> ClientInfo
Available on non-crate feature
local only.Implementors§
impl ClientHandler for ClientInfo
Do nothing, with a specific client info.