Skip to main content

McpClientHandler

Struct McpClientHandler 

Source
pub struct McpClientHandler<S> { /* private fields */ }
Available on non-target_family=wasm only.
Expand description

Registers MCP tools in a ManagedToolSink and refreshes them on list changes. Refreshes replace or remove only registrations still owned by this handler, preserving newer same-name registrations. Self::connect performs the initial fetch and returns the service that keeps the connection alive.

Implementations§

Source§

impl<S> McpClientHandler<S>
where S: ManagedToolSink + Send + Sync + 'static,

Source

pub fn new(client_info: ClientInfo, sink: S) -> Self

Create a new handler with the given client info and tool sink.

With rig-agent, pass a clone of the agent’s ToolServerHandle so tool updates are reflected in agent requests. Registered tools get DEFAULT_MCP_TOOL_TIMEOUT; change it with McpClientHandler::with_timeout.

Source

pub fn with_timeout(self, timeout: impl Into<Option<Duration>>) -> Self

Set (or clear) the per-call timeout applied to every MCP tool this handler registers. Pass a Duration to bound calls, or None to disable.

This applies the same setting to every tool managed by the handler.

Source

pub fn with_refresh_timeout(self, timeout: Duration) -> Self

Set the deadline for initial and list-changed tool-list fetches.

Source

pub async fn connect<T, E, A>( self, transport: T, ) -> Result<RunningService<RoleClient, Self>, McpClientError>
where T: IntoTransport<RoleClient, E, A>, E: Error + Send + Sync + 'static,

Connect to an MCP server, fetch the initial tool list, and register all tools with the tool server.

Returns the running MCP service. The connection stays alive as long as the returned RunningService is held. When the server sends notifications/tools/list_changed, this handler automatically re-fetches and re-registers tools into the sink.

§Errors

Returns McpClientError if the connection or initial tool fetch fails.

Trait Implementations§

Source§

impl<S> ClientHandler for McpClientHandler<S>
where S: ManagedToolSink + Send + Sync + 'static,

Source§

fn get_info(&self) -> ClientInfo

Source§

async fn on_tool_list_changed(&self, context: NotificationContext<RoleClient>)

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. Read more
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_prompt_list_changed( &self, context: NotificationContext<RoleClient>, ) -> impl Future<Output = ()> + MaybeSendFuture

Source§

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

Source§

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

Source§

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

Auto Trait Implementations§

§

impl<S> !RefUnwindSafe for McpClientHandler<S>

§

impl<S> !UnwindSafe for McpClientHandler<S>

§

impl<S> Freeze for McpClientHandler<S>
where S: Freeze,

§

impl<S> Send for McpClientHandler<S>
where S: Send,

§

impl<S> Sync for McpClientHandler<S>
where S: Sync,

§

impl<S> Unpin for McpClientHandler<S>
where S: Unpin,

§

impl<S> UnsafeUnpin for McpClientHandler<S>
where S: UnsafeUnpin,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<R, S> DynService<R> for S
where R: ServiceRole, S: Service<R>,

Source§

fn handle_request( &self, request: <R as ServiceRole>::PeerReq, context: RequestContext<R>, ) -> Pin<Box<dyn Future<Output = Result<<R as ServiceRole>::Resp, ErrorData>> + Send + '_>>

Source§

fn handle_notification( &self, notification: <R as ServiceRole>::PeerNot, context: NotificationContext<R>, ) -> Pin<Box<dyn Future<Output = Result<(), ErrorData>> + Send + '_>>

Source§

fn get_info(&self) -> <R as ServiceRole>::Info

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<H> Service<RoleClient> for H
where H: ClientHandler,

Source§

impl<S> ServiceExt<RoleClient> for S
where S: Service<RoleClient>,

Source§

fn serve_with_ct<T, E, A>( self, transport: T, ct: CancellationToken, ) -> impl Future<Output = Result<RunningService<RoleClient, S>, ClientInitializeError>> + MaybeSendFuture
where T: IntoTransport<RoleClient, E, A>, E: Error + Send + Sync + 'static, S: Sized,

Source§

fn into_dyn(self) -> Box<dyn DynService<R>>

Convert this service to a dynamic boxed service Read more
Source§

fn serve<T, E, A>( self, transport: T, ) -> impl Future<Output = Result<RunningService<R, Self>, <R as ServiceRole>::InitializeError>> + MaybeSendFuture
where T: IntoTransport<R, E, A>, E: Error + Send + Sync + 'static, Self: Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WasmCompatSend for T
where T: Send,

Source§

impl<T> WasmCompatSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more