Skip to main content

McpClient

Struct McpClient 

Source
pub struct McpClient<T: McpTransport> { /* private fields */ }
Available on crate feature mcp only.
Expand description

MCP client for communicating with MCP servers.

The client handles the MCP protocol, including initialization, tool discovery, and tool execution.

§Example

use agent_sdk::mcp::{McpClient, StdioTransport};

// Spawn server and create client
let transport = StdioTransport::spawn("npx", &["-y", "mcp-server"]).await?;
let client = McpClient::new(transport, "my-server".to_string()).await?;

// List available tools
let tools = client.list_tools().await?;

// Call a tool
let result = client.call_tool("tool_name", json!({"arg": "value"})).await?;

Implementations§

Source§

impl<T: McpTransport> McpClient<T>

Source

pub async fn new(transport: Arc<T>, server_name: String) -> Result<Self>

Create a new MCP client and initialize the connection.

§Arguments
  • transport - The transport to use for communication
  • server_name - A name to identify this server connection
§Errors

Returns an error if initialization fails.

Source

pub const fn new_uninitialized(transport: Arc<T>, server_name: String) -> Self

Create a client without initialization.

Use this if you need to control when initialization happens.

Source

pub async fn initialize(&mut self) -> Result<&InitializeResult>

Initialize the MCP connection.

This must be called before using other methods.

§Errors

Returns an error if the server rejects initialization.

Source

pub fn server_name(&self) -> &str

Get the server name.

Source

pub const fn server_info(&self) -> Option<&InitializeResult>

Get server info if initialized.

Source

pub fn protocol_version(&self) -> Option<&str>

The MCP protocol revision negotiated with the server.

Returns None until McpClient::initialize has completed. This is the revision the server selected, which may be older than PREFERRED_PROTOCOL_VERSION if the server is on a legacy build.

Source

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

List available tools from the server.

§Errors

Returns an error if the request fails.

Source

pub async fn call_tool( &self, name: &str, arguments: Value, ) -> Result<McpToolCallResult>

Call a tool on the server.

§Arguments
  • name - Tool name to call
  • arguments - Tool arguments as JSON
§Errors

Returns an error if the tool call fails.

Source

pub async fn call_tool_raw( &self, name: &str, arguments: Option<Value>, ) -> Result<McpToolCallResult>

Call a tool with raw Value arguments.

§Arguments
  • name - Tool name to call
  • arguments - Tool arguments as optional JSON
§Errors

Returns an error if the tool call fails.

Source

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

List resources exposed by the server (resources/list).

Resources are addressable data (files, database rows, API payloads) the server makes available for reading. Returns an empty list if the server did not advertise the resources capability.

§Errors

Returns an error if the request fails or the response cannot be parsed.

Source

pub async fn read_resource(&self, uri: &str) -> Result<ResourceReadResult>

Read a resource by URI (resources/read).

§Errors

Returns an error if the request fails or the response cannot be parsed.

Source

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

List prompts exposed by the server (prompts/list).

Returns an empty list if the server did not advertise the prompts capability.

§Errors

Returns an error if the request fails or the response cannot be parsed.

Source

pub async fn get_prompt( &self, name: &str, arguments: Option<Value>, ) -> Result<PromptGetResult>

Fetch and render a prompt by name (prompts/get).

§Arguments
  • name - Prompt name to fetch.
  • arguments - Optional arguments to interpolate into the template.
§Errors

Returns an error if the request fails or the response cannot be parsed.

Source

pub fn supports_resources(&self) -> bool

Whether the server advertised the resources capability.

Source

pub fn supports_prompts(&self) -> bool

Whether the server advertised the prompts capability.

Source

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

Close the client connection.

§Errors

Returns an error if the transport fails to close.

Auto Trait Implementations§

§

impl<T> Freeze for McpClient<T>

§

impl<T> RefUnwindSafe for McpClient<T>
where T: RefUnwindSafe,

§

impl<T> Send for McpClient<T>

§

impl<T> Sync for McpClient<T>

§

impl<T> Unpin for McpClient<T>

§

impl<T> UnsafeUnpin for McpClient<T>

§

impl<T> UnwindSafe for McpClient<T>
where T: RefUnwindSafe,

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
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: Sized + 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: Sized + 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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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