Skip to main content

Client

Struct Client 

Source
pub struct Client { /* private fields */ }
Expand description

Cheaply-cloneable MCP client. Cloning shares the same underlying transport via Arc. After Client::shutdown the transport is gone and further calls return ClientError::Request.

Implementations§

Source§

impl Client

Source

pub async fn connect(target: &Target) -> Result<Self>

Source

pub async fn reconnect(&self) -> Result<()>

Tears down the current transport and opens a new one. Other tasks holding a &self reference will see the new transport on their next call. Phase E1 changed this from &mut self to &self so callers can recover after a fault without exclusive ownership of the Client.

Source

pub async fn list_tools(&self) -> Result<Vec<Tool>>

Source

pub async fn server_capabilities(&self) -> Option<ServerCapabilities>

Returns a clone of the server’s announced ServerCapabilities from the initial initialize handshake, or None if the client has been shut down or the handshake hadn’t completed.

Per MCP spec, clients should not call resources/list or prompts/list against a server that didn’t declare the corresponding capability — doing so produces a noisy -32601 method not found from compliant servers. Use this to gate optional listing calls.

Source

pub async fn list_resources(&self) -> Result<Vec<Resource>>

Lists the server’s resources. Returns Ok(vec![]) (silently) when the server didn’t declare the resources capability at init time — this avoids spamming a -32601 method not found failure for servers that legitimately don’t expose resources. Callers needing to distinguish “not advertised” from “empty” should check Self::server_capabilities first.

Source

pub async fn list_prompts(&self) -> Result<Vec<Prompt>>

Lists the server’s prompts. Same capability-aware short-circuit as Self::list_resources: returns Ok(vec![]) when the server didn’t declare the prompts capability.

Source

pub async fn call_tool( &self, name: &str, arguments: Value, timeout: Duration, ) -> CallOutcome

Source

pub async fn shutdown(&self) -> Result<()>

Shuts the underlying transport down. After this call other clones of this Client keep working semantically but return ProtocolError on every method (the transport is gone).

Source

pub fn target(&self) -> &Target

Trait Implementations§

Source§

impl Clone for Client

Source§

fn clone(&self) -> Client

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl McpExec for Client

Source§

fn list_tools<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<Vec<Tool>, ClientError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Lists every tool exposed by the server.
Source§

fn call_tool<'life0, 'life1, 'async_trait>( &'life0 self, name: &'life1 str, arguments: Value, timeout: Duration, ) -> Pin<Box<dyn Future<Output = CallOutcome> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Calls a tool, applying timeout. Returns a CallOutcome that the caller pattern-matches; this method itself never errors.
Source§

fn reconnect<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<(), ClientError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Tears down the transport and rebuilds it. Used after a hang/crash so subsequent calls can succeed. Concurrent callers see either the old or the new transport, never a torn state.

Auto Trait Implementations§

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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