Tool
Defined in: src/tools/tool.ts:92
Interface for tool implementations. Tools are used by agents to interact with their environment and perform specific actions.
The Tool interface provides a streaming execution model where tools can yield progress events during execution before returning a final result.
Most implementations should use FunctionTool rather than implementing this interface directly.
Extended by
Section titled “Extended by”Constructors
Section titled “Constructors”Constructor
Section titled “Constructor”new Tool(): Tool;Returns
Section titled “Returns”Tool
Properties
Section titled “Properties”abstract name: string;Defined in: src/tools/tool.ts:97
The unique name of the tool. This MUST match the name in the toolSpec.
description
Section titled “description”abstract description: string;Defined in: src/tools/tool.ts:104
Human-readable description of what the tool does. This helps the model understand when to use the tool.
This MUST match the description in the toolSpec.description.
toolSpec
Section titled “toolSpec”abstract toolSpec: ToolSpec;Defined in: src/tools/tool.ts:109
OpenAPI JSON specification for the tool. Defines the tool’s name, description, and input schema.
Methods
Section titled “Methods”stream()
Section titled “stream()”abstract stream(toolContext): ToolStreamGenerator;Defined in: src/tools/tool.ts:144
Executes the tool with streaming support. Yields zero or more ToolStreamEvents during execution, then returns exactly one ToolResultBlock as the final value.
Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
toolContext | ToolContext | Context information including the tool use request and invocation state |
Returns
Section titled “Returns”Async generator that yields ToolStreamEvents and returns a ToolResultBlock
Example
Section titled “Example”const context = { toolUse: { name: 'calculator', toolUseId: 'calc-123', input: { operation: 'add', a: 5, b: 3 } },}
// The return value is only accessible via explicit .next() callsconst generator = tool.stream(context)for await (const event of generator) { // Only yields are captured here console.log('Progress:', event.data)}// Or manually handle the return value:let result = await generator.next()while (!result.done) { console.log('Progress:', result.value.data) result = await generator.next()}console.log('Final result:', result.value.status)