Strands Agents Typescript SDK
    Preparing search index...

    Interface InvokableTool<TInput, TReturn>

    Extended tool interface that supports direct invocation with type-safe input and output. This interface is useful for testing and standalone tool execution.

    interface InvokableTool<TInput, TReturn> {
        name: string;
        description: string;
        toolSpec: ToolSpec;
        stream(toolContext: ToolContext): ToolStreamGenerator;
        invoke(input: TInput, context?: ToolContext): Promise<TReturn>;
    }

    Type Parameters

    • TInput

      Type for the tool's input parameters

    • TReturn

      Type for the tool's return value

    Hierarchy (View Summary)

    Index

    Properties

    name: string

    The unique name of the tool. This MUST match the name in the toolSpec.

    description: string

    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: ToolSpec

    OpenAPI JSON specification for the tool. Defines the tool's name, description, and input schema.

    Methods

    • Executes the tool with streaming support. Yields zero or more ToolStreamEvents during execution, then returns exactly one ToolResultBlock as the final value.

      Parameters

      • toolContext: ToolContext

        Context information including the tool use request and invocation state

      Returns ToolStreamGenerator

      Async generator that yields ToolStreamEvents and returns a ToolResultBlock

      const context = {
      toolUse: {
      name: 'calculator',
      toolUseId: 'calc-123',
      input: { operation: 'add', a: 5, b: 3 }
      },
      }

      // The return value is only accessible via explicit .next() calls
      const 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)
    • Invokes the tool directly with type-safe input and returns the unwrapped result.

      Unlike stream(), this method:

      • Returns the raw result (not wrapped in ToolResult)
      • Consumes async generators and returns only the final value
      • Lets errors throw naturally (not wrapped in error ToolResult)

      Parameters

      • input: TInput

        The input parameters for the tool

      • Optionalcontext: ToolContext

        Optional tool execution context

      Returns Promise<TReturn>

      The unwrapped result