Skip to main content

Tool

Trait Tool 

Source
pub trait Tool: Send + Sync {
    // Required methods
    fn name(&self) -> &'static str;
    fn description(&self) -> &'static str;
    fn schema(&self) -> Value;
    fn call<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 self,
        args: &'life1 Value,
        ctx: &'life2 ToolContext,
    ) -> Pin<Box<dyn Future<Output = Result<Vec<Content>, AgentError>> + Send + 'async_trait>>
       where 'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait,
             Self: 'async_trait;

    // Provided methods
    fn timeout_ms(&self) -> Option<u64> { ... }
    fn metadata(&self) -> ToolMetadata { ... }
    fn exposure(&self) -> ToolExposure { ... }
    fn should_activate(&self, _ctx: &ActivationContext) -> bool { ... }
}

Required Methods§

Source

fn name(&self) -> &'static str

Source

fn description(&self) -> &'static str

Human-readable description of what this tool does and when to use it.

Source

fn schema(&self) -> Value

JSON Schema for the tool’s input arguments (MCP inputSchema shape, without the provider envelope).

Source

fn call<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, args: &'life1 Value, ctx: &'life2 ToolContext, ) -> Pin<Box<dyn Future<Output = Result<Vec<Content>, AgentError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: 'async_trait,

Provided Methods§

Source

fn timeout_ms(&self) -> Option<u64>

Timeout for this tool in milliseconds.

Returns Some(ms) to enforce a timeout, or None to use the framework’s default timeout from ToolConfig.default_tool_timeout_ms. Tools that need more or less time should override this method.

Source

fn metadata(&self) -> ToolMetadata

Machine-readable metadata for tool introspection.

The default implementation derives name and description from Tool::name and Tool::description, sets origin to "custom", and leaves requirements empty. Tool authors are encouraged to override this to provide an accurate origin and version.

Source

fn exposure(&self) -> ToolExposure

Visibility level for this tool. Default: Direct (always visible).

Override to return Deferred (conditionally visible) or Hidden (never visible to the model). Deferred tools are only included when Tool::should_activate returns true.

Source

fn should_activate(&self, _ctx: &ActivationContext) -> bool

Activation condition for Deferred tools.

Called once per turn for each Deferred tool. Return true to include this tool in the model’s tool list this turn. Ignored for Direct and Hidden tools.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl Tool for EditFileTool

Source§

fn name(&self) -> &'static str

Source§

fn description(&self) -> &'static str

Source§

fn schema(&self) -> Value

Source§

fn metadata(&self) -> ToolMetadata

Source§

fn call<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, args: &'life1 Value, _ctx: &'life2 ToolContext, ) -> Pin<Box<dyn Future<Output = Result<Vec<Content>, AgentError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, EditFileTool: 'async_trait,

Source§

impl Tool for GatedTool

Source§

fn name(&self) -> &'static str

Source§

fn description(&self) -> &'static str

Source§

fn schema(&self) -> Value

Source§

fn call<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, args: &'life1 Value, ctx: &'life2 ToolContext, ) -> Pin<Box<dyn Future<Output = Result<Vec<Content>, AgentError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, GatedTool: 'async_trait,

Source§

impl Tool for ListFilesTool

Source§

fn name(&self) -> &'static str

Source§

fn description(&self) -> &'static str

Source§

fn schema(&self) -> Value

Source§

fn metadata(&self) -> ToolMetadata

Source§

fn call<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, args: &'life1 Value, ctx: &'life2 ToolContext, ) -> Pin<Box<dyn Future<Output = Result<Vec<Content>, AgentError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, ListFilesTool: 'async_trait,

Source§

impl Tool for McpToolAdapter

Source§

fn name(&self) -> &'static str

Source§

fn description(&self) -> &'static str

Source§

fn schema(&self) -> Value

Source§

fn call<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, args: &'life1 Value, _ctx: &'life2 ToolContext, ) -> Pin<Box<dyn Future<Output = Result<Vec<Content>, AgentError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, McpToolAdapter: 'async_trait,

Source§

impl Tool for ReadFileTool

Source§

fn name(&self) -> &'static str

Source§

fn description(&self) -> &'static str

Source§

fn schema(&self) -> Value

Source§

fn metadata(&self) -> ToolMetadata

Source§

fn call<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, args: &'life1 Value, ctx: &'life2 ToolContext, ) -> Pin<Box<dyn Future<Output = Result<Vec<Content>, AgentError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, ReadFileTool: 'async_trait,

Source§

impl Tool for WriteFileTool

Source§

fn name(&self) -> &'static str

Source§

fn description(&self) -> &'static str

Source§

fn schema(&self) -> Value

Source§

fn metadata(&self) -> ToolMetadata

Source§

fn call<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, args: &'life1 Value, _ctx: &'life2 ToolContext, ) -> Pin<Box<dyn Future<Output = Result<Vec<Content>, AgentError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, WriteFileTool: 'async_trait,

Implementors§

Source§

impl Tool for AutoContinueTool

Source§

impl Tool for UpdatePlanTool

Source§

impl<T> Tool for T
where T: TypedTool + Send + Sync + 'static,