Skip to main content

ClientHandler

Trait ClientHandler 

Source
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§

Source

fn ping( &self, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture

Source

fn create_message( &self, params: CreateMessageRequestParams, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<CreateMessageResult, ErrorData>> + MaybeSendFuture

Source

fn list_roots( &self, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<ListRootsResult, ErrorData>> + MaybeSendFuture

Source

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 schema
  • context - 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)),
        }
    }
}
Source

fn on_custom_request( &self, request: CustomRequest, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<CustomResult, ErrorData>> + MaybeSendFuture

Source

fn on_cancelled( &self, params: CancelledNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source

fn on_progress( &self, params: ProgressNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source

fn on_logging_message( &self, params: LoggingMessageNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source

fn on_resource_updated( &self, params: ResourceUpdatedNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source

fn on_resource_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source

fn on_tool_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source

fn on_prompt_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source

fn on_subscriptions_acknowledged( &self, params: SubscriptionsAcknowledgedNotificationParams, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source

fn on_task_status( &self, params: TaskStatusNotificationParams, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source

fn on_custom_notification( &self, notification: CustomNotification, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source

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§

Source§

impl ClientHandler for ()

Do nothing, with default client info.

Source§

impl<T> ClientHandler for Box<T>
where T: ClientHandler,

Source§

fn ping( &self, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture

Source§

fn create_message( &self, params: CreateMessageRequestParams, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<CreateMessageResult, ErrorData>> + MaybeSendFuture

Source§

fn list_roots( &self, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<ListRootsResult, ErrorData>> + MaybeSendFuture

Source§

fn create_elicitation( &self, request: ElicitRequestParams, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<ElicitResult, ErrorData>> + MaybeSendFuture

Source§

fn on_custom_request( &self, request: CustomRequest, context: RequestContext<RoleClient>, ) -> impl Future<Output = Result<CustomResult, ErrorData>> + MaybeSendFuture

Source§

fn on_cancelled( &self, params: CancelledNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source§

fn on_progress( &self, params: ProgressNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source§

fn on_logging_message( &self, params: LoggingMessageNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source§

fn on_resource_updated( &self, params: ResourceUpdatedNotificationParam, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source§

fn on_resource_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source§

fn on_tool_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source§

fn on_prompt_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source§

fn on_subscriptions_acknowledged( &self, params: SubscriptionsAcknowledgedNotificationParams, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source§

fn on_task_status( &self, params: TaskStatusNotificationParams, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source§

fn on_custom_notification( &self, notification: CustomNotification, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source§

fn get_info(&self) -> InitializeRequestParams

Implementors§

Source§

impl ClientHandler for AdkClientHandler

Source§

impl ClientHandler for InitializeRequestParams

Do nothing, with a specific client info.

Source§

impl<T> ClientHandler for Arc<T>
where T: ClientHandler,