Skip to main content

Tool

Struct Tool 

Source
pub struct Tool {
    pub name: String,
    pub title: Option<String>,
    pub description: Option<String>,
    pub output_schema: Option<Value>,
    pub icons: Option<Vec<ToolIcon>>,
    pub annotations: Option<ToolAnnotations>,
    /* private fields */
}
Expand description

A complete tool definition with service-based execution.

Tools are implemented as Tower services internally, enabling middleware composition via the builder’s .layer() method. The service is wrapped in ToolCatchError to convert any errors (from handlers or middleware) into CallToolResult::error() responses.

Fields§

§name: String

Tool name (must be 1-128 chars, alphanumeric/underscore/hyphen/dot only)

§title: Option<String>

Human-readable title for the tool

§description: Option<String>

Description of what the tool does

§output_schema: Option<Value>

JSON Schema for the tool’s output (optional)

§icons: Option<Vec<ToolIcon>>

Icons for the tool

§annotations: Option<ToolAnnotations>

Tool annotations (hints about behavior)

Implementations§

Source§

impl Tool

Source

pub fn builder(name: impl Into<String>) -> ToolBuilder

Create a new tool builder

Source

pub fn definition(&self) -> ToolDefinition

Get the tool definition for tools/list

Source

pub fn call(&self, args: Value) -> BoxFuture<'static, CallToolResult>

Call the tool without context

Creates a dummy request context. For full context support, use call_with_context.

Source

pub fn call_with_context( &self, ctx: RequestContext, args: Value, ) -> BoxFuture<'static, CallToolResult>

Call the tool with request context

The context provides progress reporting, cancellation support, and access to client requests (for sampling, etc.).

§Note

This method returns CallToolResult directly (not Result<CallToolResult>). Any errors from the handler or middleware are converted to CallToolResult::error() with is_error: true.

Source

pub fn with_name_prefix(&self, prefix: &str) -> Self

Create a new tool with a prefixed name.

This creates a copy of the tool with its name prefixed by the given string and a dot separator. For example, if the tool is named “query” and the prefix is “db”, the new tool will be named “db.query”.

This is used internally by McpRouter::nest() to namespace tools.

§Example
use tower_mcp::{ToolBuilder, CallToolResult};
use schemars::JsonSchema;
use serde::Deserialize;

#[derive(Debug, Deserialize, JsonSchema)]
struct Input { value: String }

let tool = ToolBuilder::new("query")
    .description("Query the database")
    .handler(|i: Input| async move { Ok(CallToolResult::text(&i.value)) })
    .build()
    .unwrap();

let prefixed = tool.with_name_prefix("db");
assert_eq!(prefixed.name, "db.query");

Trait Implementations§

Source§

impl Debug for Tool

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Filterable for Tool

Source§

fn name(&self) -> &str

Returns the name of this capability.
Source§

impl Send for Tool

Source§

impl Sync for Tool

Auto Trait Implementations§

§

impl Freeze for Tool

§

impl !RefUnwindSafe for Tool

§

impl Unpin for Tool

§

impl !UnwindSafe for Tool

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> 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, 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<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