pub struct McpClient { /* private fields */ }Expand description
MCP client with a background message loop.
Unlike previous versions, this type is not generic over the transport.
The transport is consumed during connect() and moved
into a background Tokio task that handles message multiplexing.
All public methods take &self, enabling concurrent use from multiple
tasks.
§Construction
use tower_mcp::client::{McpClient, StdioClientTransport};
// Simple: no handler for server-initiated requests
let transport = StdioClientTransport::spawn("server", &[]).await?;
let client = McpClient::connect(transport).await?;
// With configuration
use tower_mcp::protocol::Root;
let transport = StdioClientTransport::spawn("server", &[]).await?;
let client = McpClient::builder()
.with_roots(vec![Root::new("file:///project")])
.connect_simple(transport)
.await?;Implementations§
Source§impl McpClient
impl McpClient
Sourcepub async fn connect<T: ClientTransport>(transport: T) -> Result<Self>
pub async fn connect<T: ClientTransport>(transport: T) -> Result<Self>
Connect with default settings and no handler.
Shorthand for McpClient::builder().connect_simple(transport).
Sourcepub async fn connect_with_handler<T, H>(
transport: T,
handler: H,
) -> Result<Self>where
T: ClientTransport,
H: ClientHandler,
pub async fn connect_with_handler<T, H>(
transport: T,
handler: H,
) -> Result<Self>where
T: ClientTransport,
H: ClientHandler,
Connect with a handler for server-initiated requests.
Sourcepub fn builder() -> McpClientBuilder
pub fn builder() -> McpClientBuilder
Create a builder for advanced configuration.
Sourcepub fn is_initialized(&self) -> bool
pub fn is_initialized(&self) -> bool
Check if the client has been initialized.
Sourcepub fn is_connected(&self) -> bool
pub fn is_connected(&self) -> bool
Check if the transport is still connected.
Sourcepub fn server_info(&self) -> Option<&InitializeResult>
pub fn server_info(&self) -> Option<&InitializeResult>
Get the server info (available after initialization).
Sourcepub async fn initialize(
&self,
client_name: &str,
client_version: &str,
) -> Result<&InitializeResult>
pub async fn initialize( &self, client_name: &str, client_version: &str, ) -> Result<&InitializeResult>
Initialize the MCP connection.
Sends the initialize request and notifications/initialized notification.
Must be called before any other operations.
Sourcepub async fn list_tools(&self) -> Result<ListToolsResult>
pub async fn list_tools(&self) -> Result<ListToolsResult>
List available tools.
Sourcepub async fn call_tool(
&self,
name: &str,
arguments: Value,
) -> Result<CallToolResult>
pub async fn call_tool( &self, name: &str, arguments: Value, ) -> Result<CallToolResult>
Call a tool.
Sourcepub async fn list_resources(&self) -> Result<ListResourcesResult>
pub async fn list_resources(&self) -> Result<ListResourcesResult>
List available resources.
Sourcepub async fn read_resource(&self, uri: &str) -> Result<ReadResourceResult>
pub async fn read_resource(&self, uri: &str) -> Result<ReadResourceResult>
Read a resource.
Sourcepub async fn list_prompts(&self) -> Result<ListPromptsResult>
pub async fn list_prompts(&self) -> Result<ListPromptsResult>
List available prompts.
Sourcepub async fn list_tools_with_cursor(
&self,
cursor: Option<String>,
) -> Result<ListToolsResult>
pub async fn list_tools_with_cursor( &self, cursor: Option<String>, ) -> Result<ListToolsResult>
List tools with an optional pagination cursor.
Sourcepub async fn list_resources_with_cursor(
&self,
cursor: Option<String>,
) -> Result<ListResourcesResult>
pub async fn list_resources_with_cursor( &self, cursor: Option<String>, ) -> Result<ListResourcesResult>
List resources with an optional pagination cursor.
Sourcepub async fn list_resource_templates(
&self,
) -> Result<ListResourceTemplatesResult>
pub async fn list_resource_templates( &self, ) -> Result<ListResourceTemplatesResult>
List resource templates.
Sourcepub async fn list_resource_templates_with_cursor(
&self,
cursor: Option<String>,
) -> Result<ListResourceTemplatesResult>
pub async fn list_resource_templates_with_cursor( &self, cursor: Option<String>, ) -> Result<ListResourceTemplatesResult>
List resource templates with an optional pagination cursor.
Sourcepub async fn list_prompts_with_cursor(
&self,
cursor: Option<String>,
) -> Result<ListPromptsResult>
pub async fn list_prompts_with_cursor( &self, cursor: Option<String>, ) -> Result<ListPromptsResult>
List prompts with an optional pagination cursor.
Sourcepub async fn list_all_tools(&self) -> Result<Vec<ToolDefinition>>
pub async fn list_all_tools(&self) -> Result<Vec<ToolDefinition>>
List all tools, following pagination cursors until exhausted.
Sourcepub async fn list_all_resources(&self) -> Result<Vec<ResourceDefinition>>
pub async fn list_all_resources(&self) -> Result<Vec<ResourceDefinition>>
List all resources, following pagination cursors until exhausted.
Sourcepub async fn list_all_resource_templates(
&self,
) -> Result<Vec<ResourceTemplateDefinition>>
pub async fn list_all_resource_templates( &self, ) -> Result<Vec<ResourceTemplateDefinition>>
List all resource templates, following pagination cursors until exhausted.
Sourcepub async fn list_all_prompts(&self) -> Result<Vec<PromptDefinition>>
pub async fn list_all_prompts(&self) -> Result<Vec<PromptDefinition>>
List all prompts, following pagination cursors until exhausted.
Sourcepub async fn call_tool_text(
&self,
name: &str,
arguments: Value,
) -> Result<String>
pub async fn call_tool_text( &self, name: &str, arguments: Value, ) -> Result<String>
Call a tool and return the concatenated text content.
Returns the text from all Text items joined together.
If the tool result indicates an error (is_error is true), returns
an error with the text content as the message.
For more control over the result, use call_tool().
Sourcepub async fn get_prompt(
&self,
name: &str,
arguments: Option<HashMap<String, String>>,
) -> Result<GetPromptResult>
pub async fn get_prompt( &self, name: &str, arguments: Option<HashMap<String, String>>, ) -> Result<GetPromptResult>
Get a prompt.
Sourcepub async fn complete(
&self,
reference: CompletionReference,
argument_name: &str,
argument_value: &str,
) -> Result<CompleteResult>
pub async fn complete( &self, reference: CompletionReference, argument_name: &str, argument_value: &str, ) -> Result<CompleteResult>
Request completion suggestions from the server.
Sourcepub async fn complete_prompt_arg(
&self,
prompt_name: &str,
argument_name: &str,
argument_value: &str,
) -> Result<CompleteResult>
pub async fn complete_prompt_arg( &self, prompt_name: &str, argument_name: &str, argument_value: &str, ) -> Result<CompleteResult>
Request completion for a prompt argument.
Sourcepub async fn complete_resource_uri(
&self,
resource_uri: &str,
argument_name: &str,
argument_value: &str,
) -> Result<CompleteResult>
pub async fn complete_resource_uri( &self, resource_uri: &str, argument_name: &str, argument_value: &str, ) -> Result<CompleteResult>
Request completion for a resource URI.
Sourcepub async fn request<P: Serialize, R: DeserializeOwned>(
&self,
method: &str,
params: &P,
) -> Result<R>
pub async fn request<P: Serialize, R: DeserializeOwned>( &self, method: &str, params: &P, ) -> Result<R>
Send a raw typed request to the server.
Sourcepub async fn notify<P: Serialize>(&self, method: &str, params: &P) -> Result<()>
pub async fn notify<P: Serialize>(&self, method: &str, params: &P) -> Result<()>
Send a raw typed notification to the server.
Sourcepub async fn set_roots(&self, roots: Vec<Root>) -> Result<()>
pub async fn set_roots(&self, roots: Vec<Root>) -> Result<()>
Set roots and notify the server if initialized.
Sourcepub async fn add_root(&self, root: Root) -> Result<()>
pub async fn add_root(&self, root: Root) -> Result<()>
Add a root and notify the server if initialized.
Sourcepub async fn remove_root(&self, uri: &str) -> Result<bool>
pub async fn remove_root(&self, uri: &str) -> Result<bool>
Remove a root by URI and notify the server if initialized.
Sourcepub async fn list_roots(&self) -> ListRootsResult
pub async fn list_roots(&self) -> ListRootsResult
Get the roots list result (for responding to server’s roots/list request).