Skip to main content

Tool

Trait Tool 

Source
pub trait Tool: Send + Sync {
    // Required methods
    fn name(&self) -> &str;
    fn description(&self) -> &str;
    fn execute<'life0, 'async_trait>(
        &'life0 self,
        ctx: Arc<dyn ToolContext>,
        args: Value,
    ) -> Pin<Box<dyn Future<Output = Result<Value, AdkError>> + Send + 'async_trait>>
       where 'life0: 'async_trait,
             Self: 'async_trait;

    // Provided methods
    fn declaration(&self) -> Value { ... }
    fn enhanced_description(&self) -> String { ... }
    fn is_long_running(&self) -> bool { ... }
    fn is_builtin(&self) -> bool { ... }
    fn parameters_schema(&self) -> Option<Value> { ... }
    fn response_schema(&self) -> Option<Value> { ... }
    fn required_scopes(&self) -> &[&str] { ... }
    fn is_read_only(&self) -> bool { ... }
    fn is_concurrency_safe(&self) -> bool { ... }
}
Expand description

The core trait for all tools that agents can invoke.

Tools extend agent capabilities with custom functions. Each tool has a name, description, optional parameter schema, and an async execute method.

Required Methods§

Source

fn name(&self) -> &str

Returns the unique name of this tool.

Source

fn description(&self) -> &str

Returns a human-readable description of what this tool does.

Source

fn execute<'life0, 'async_trait>( &'life0 self, ctx: Arc<dyn ToolContext>, args: Value, ) -> Pin<Box<dyn Future<Output = Result<Value, AdkError>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Executes the tool with the given context and arguments.

Provided Methods§

Source

fn declaration(&self) -> Value

Returns the tool declaration that should be exposed to model providers.

The default implementation produces the standard ADK function-tool declaration (name, description, optional parameters, optional response). Provider-specific built-in tools may override this to attach additional metadata that the provider adapters understand.

§Example
fn declaration(&self) -> serde_json::Value {
    serde_json::json!({
        "name": self.name(),
        "description": self.description(),
        "x-adk-openai-tool": {
            "type": "web_search_2025_08_26"
        }
    })
}
Source

fn enhanced_description(&self) -> String

Returns an enhanced description that may include additional notes. For long-running tools, this includes a warning not to call the tool again if it has already returned a pending status. Default implementation returns the base description.

Source

fn is_long_running(&self) -> bool

Indicates whether the tool is a long-running operation. Long-running tools typically return a task ID immediately and complete the operation asynchronously.

Source

fn is_builtin(&self) -> bool

Indicates whether this tool is a built-in server-side tool (e.g., google_search, url_context).

Built-in tools are executed server-side by the model provider and should not be executed locally by the agent. The default implementation returns false.

Source

fn parameters_schema(&self) -> Option<Value>

Returns the JSON Schema for this tool’s parameters, if any.

Source

fn response_schema(&self) -> Option<Value>

Returns the JSON Schema for this tool’s response, if any.

Source

fn required_scopes(&self) -> &[&str]

Returns the scopes required to execute this tool.

When non-empty, the framework can enforce that the calling user possesses all listed scopes before dispatching execute(). The default implementation returns an empty slice (no scopes required).

§Example
fn required_scopes(&self) -> &[&str] {
    &["finance:write", "verified"]
}
Source

fn is_read_only(&self) -> bool

Indicates whether this tool performs no side effects. Read-only tools may be executed concurrently in Auto mode.

Source

fn is_concurrency_safe(&self) -> bool

Indicates whether this tool is safe for concurrent execution. Used by the Parallel strategy to validate dispatch safety.

Dyn Compatibility§

This trait is dyn compatible.

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

Implementors§