pub trait Tool<Ctx>: Send + Sync {
type Name: ToolName;
// Required methods
fn name(&self) -> Self::Name;
fn display_name(&self) -> &'static str;
fn description(&self) -> &'static str;
fn input_schema(&self) -> Value;
fn execute(
&self,
ctx: &ToolContext<Ctx>,
input: Value,
) -> impl Future<Output = Result<ToolResult>> + Send;
// Provided method
fn tier(&self) -> ToolTier { ... }
}Expand description
Definition of a tool that can be called by the agent.
Tools have a strongly-typed Name associated type that determines
how the tool name is serialized for LLM communication.
§Native Async Support
This trait uses Rust’s native async functions in traits (stabilized in Rust 1.75).
You do NOT need the async_trait crate to implement this trait.
Required Associated Types§
Required Methods§
Sourcefn display_name(&self) -> &'static str
fn display_name(&self) -> &'static str
Human-readable display name for UI (e.g., “Read File” vs “read”).
Defaults to empty string. Override for better UX.
Sourcefn description(&self) -> &'static str
fn description(&self) -> &'static str
Human-readable description of what the tool does.
Sourcefn input_schema(&self) -> Value
fn input_schema(&self) -> Value
JSON schema for the tool’s input parameters.
Sourcefn execute(
&self,
ctx: &ToolContext<Ctx>,
input: Value,
) -> impl Future<Output = Result<ToolResult>> + Send
fn execute( &self, ctx: &ToolContext<Ctx>, input: Value, ) -> impl Future<Output = Result<ToolResult>> + Send
Provided Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.