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
Core traits and types.
Always available regardless of feature flags. Includes:
Agent- The fundamental trait for all agentsTool/Toolset- For extending agents with capabilitiesSession/State- For managing conversation contextEvent- For streaming agent responsesAdkError/Result- Unified error handling 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§
Sourcefn description(&self) -> &str
fn description(&self) -> &str
Returns a human-readable description of what this tool does.
Provided Methods§
Sourcefn declaration(&self) -> Value
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"
}
})
}Sourcefn enhanced_description(&self) -> String
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.
Sourcefn is_long_running(&self) -> bool
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.
Sourcefn is_builtin(&self) -> bool
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.
Sourcefn parameters_schema(&self) -> Option<Value>
fn parameters_schema(&self) -> Option<Value>
Returns the JSON Schema for this tool’s parameters, if any.
Sourcefn response_schema(&self) -> Option<Value>
fn response_schema(&self) -> Option<Value>
Returns the JSON Schema for this tool’s response, if any.
Sourcefn required_scopes(&self) -> &[&str]
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"]
}Sourcefn is_read_only(&self) -> bool
fn is_read_only(&self) -> bool
Indicates whether this tool performs no side effects. Read-only tools may be executed concurrently in Auto mode.
Sourcefn is_concurrency_safe(&self) -> bool
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".