pub struct McpToolset<S = ()>{ /* private fields */ }Available on crate feature
tools only.Expand description
MCP Toolset - connects to an MCP server and exposes its tools as ADK tools.
This toolset implements the ADK Toolset trait and bridges the gap between
MCP servers and ADK agents. It:
- Connects to an MCP server via the provided transport
- Discovers available tools from the server
- Converts MCP tools to ADK-compatible
Toolimplementations - Proxies tool execution calls to the MCP server
§Example
ⓘ
use adk_tool::McpToolset;
use rmcp::{ServiceExt, transport::TokioChildProcess};
use tokio::process::Command;
// Create MCP client connection to a local server
let client = ().serve(TokioChildProcess::new(
Command::new("npx")
.arg("-y")
.arg("@modelcontextprotocol/server-everything")
)?).await?;
// Create toolset from the client
let toolset = McpToolset::new(client);
// Add to agent
let agent = LlmAgentBuilder::new("assistant")
.toolset(Arc::new(toolset))
.build()?;Implementations§
Source§impl<S> McpToolset<S>
impl<S> McpToolset<S>
Sourcepub fn new(client: RunningService<RoleClient, S>) -> McpToolset<S>
pub fn new(client: RunningService<RoleClient, S>) -> McpToolset<S>
Create a new MCP toolset from a running MCP client service.
The client should already be connected and initialized.
Use rmcp::ServiceExt::serve() to create the client.
§Example
ⓘ
use rmcp::{ServiceExt, transport::TokioChildProcess};
use tokio::process::Command;
let client = ().serve(TokioChildProcess::new(
Command::new("my-mcp-server")
)?).await?;
let toolset = McpToolset::new(client);Sourcepub fn with_name(self, name: impl Into<String>) -> McpToolset<S>
pub fn with_name(self, name: impl Into<String>) -> McpToolset<S>
Set a custom name for this toolset.
Sourcepub fn with_filter<F>(self, filter: F) -> McpToolset<S>
pub fn with_filter<F>(self, filter: F) -> McpToolset<S>
Sourcepub fn with_tools(self, tool_names: &[&str]) -> McpToolset<S>
pub fn with_tools(self, tool_names: &[&str]) -> McpToolset<S>
Sourcepub async fn cancellation_token(&self) -> RunningServiceCancellationToken
pub async fn cancellation_token(&self) -> RunningServiceCancellationToken
Get a cancellation token that can be used to shutdown the MCP server.
Call cancel() on the returned token to cleanly shutdown the MCP server.
This should be called before exiting to avoid EPIPE errors.
§Example
ⓘ
let toolset = McpToolset::new(client);
let cancel_token = toolset.cancellation_token().await;
// ... use the toolset ...
// Before exiting:
cancel_token.cancel();Trait Implementations§
Source§impl<S> Toolset for McpToolset<S>
impl<S> Toolset for McpToolset<S>
Auto Trait Implementations§
impl<S> Freeze for McpToolset<S>
impl<S = ()> !RefUnwindSafe for McpToolset<S>
impl<S> Send for McpToolset<S>
impl<S> Sync for McpToolset<S>
impl<S> Unpin for McpToolset<S>
impl<S = ()> !UnwindSafe for McpToolset<S>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request