or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

agent.mdagentos.mdeval.mdexceptions.mdguardrails.mdindex.mdknowledge.mdmedia.mdmemory.mdmodels.mdsessions.mdstorage.mdteam.mdtools.mdworkflow.md
tile.json

tools.mddocs/

Tools API

100+ pre-built toolkits and custom tool creation.

Capabilities

Creating Custom Tools

from agno.tools import tool, Function, Toolkit
from typing import Optional

@tool
def search_web(query: str, num_results: int = 5) -> str:
    """
    Search the web for information.
    
    Args:
        query: The search query
        num_results: Number of results to return
    
    Returns:
        str: Search results
    """
    # Implementation
    return results

# Using Function class directly
function = Function(
    name="get_weather",
    description="Get current weather for a location",
    parameters={
        "type": "object",
        "properties": {
            "location": {"type": "string", "description": "City name"},
            "units": {"type": "string", "enum": ["celsius", "fahrenheit"]}
        },
        "required": ["location"]
    },
    entrypoint=lambda location, units="celsius": f"Weather for {location}"
)

# Creating a Toolkit
class MyTools(Toolkit):
    def __init__(self):
        super().__init__(name="my_tools")
        self.register(self.tool1)
        self.register(self.tool2)
    
    def tool1(self, arg: str) -> str:
        """Tool 1 description"""
        return f"Result: {arg}"
    
    def tool2(self, arg: int) -> int:
        """Tool 2 description"""
        return arg * 2

Web & Search Tools

from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.tavily import TavilyTools
from agno.tools.exa import ExaTools
from agno.tools.firecrawl import FirecrawlTools
from agno.tools.website import WebsiteTools

# DuckDuckGo search
class DuckDuckGoTools(Toolkit):
    def __init__(
        self,
        search: bool = True,
        news: bool = True,
        fixed_max_results: Optional[int] = None,
        **kwargs
    ): ...

# Tavily search
class TavilyTools(Toolkit):
    def __init__(
        self,
        api_key: Optional[str] = None,
        search: bool = True,
        max_results: int = 5,
        **kwargs
    ): ...

Data & Analysis Tools

from agno.tools.yfinance import YFinanceTools
from agno.tools.duckdb import DuckDbTools
from agno.tools.pandas import PandasTools

# Yahoo Finance
class YFinanceTools(Toolkit):
    def __init__(
        self,
        stock_price: bool = True,
        company_info: bool = True,
        analyst_recommendations: bool = True,
        **kwargs
    ): ...

# DuckDB
class DuckDbTools(Toolkit):
    def __init__(
        self,
        db_path: Optional[str] = None,
        init_commands: Optional[List[str]] = None,
        **kwargs
    ): ...

AI & ML Tools

from agno.tools.dalle import DalleTools
from agno.tools.elevenlabs import ElevenLabsTools
from agno.tools.replicate import ReplicateTools

# DALL-E image generation
class DalleTools(Toolkit):
    def __init__(
        self,
        model: str = "dall-e-3",
        size: str = "1024x1024",
        quality: str = "standard",
        **kwargs
    ): ...

# ElevenLabs text-to-speech
class ElevenLabsTools(Toolkit):
    def __init__(
        self,
        api_key: Optional[str] = None,
        voice_id: Optional[str] = None,
        **kwargs
    ): ...

Development Tools

from agno.tools.github import GithubTools
from agno.tools.shell import ShellTools
from agno.tools.python import PythonTools

# GitHub
class GithubTools(Toolkit):
    def __init__(
        self,
        access_token: Optional[str] = None,
        **kwargs
    ): ...

# Shell commands
class ShellTools(Toolkit):
    def __init__(
        self,
        allowed_commands: Optional[List[str]] = None,
        **kwargs
    ): ...

Collaboration Tools

from agno.tools.slack import SlackTools
from agno.tools.gmail import GmailTools
from agno.tools.notion import NotionTools

# Slack
class SlackTools(Toolkit):
    def __init__(
        self,
        token: Optional[str] = None,
        **kwargs
    ): ...

Model Context Protocol (MCP)

from agno.tools.mcp import MCPTools, MultiMCPTools

class MCPTools(Toolkit):
    def __init__(
        self,
        transport: str,  # "stdio", "sse", or "streamable-http"
        command: Optional[str] = None,  # For stdio
        args: Optional[List[str]] = None,  # For stdio
        url: Optional[str] = None,  # For sse/http
        env: Optional[Dict[str, str]] = None,
        **kwargs
    ): ...

class MultiMCPTools(Toolkit):
    def __init__(
        self,
        servers: List[Dict[str, Any]],
        **kwargs
    ): ...

Usage Examples

Using Built-in Tools

from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.yfinance import YFinanceTools

agent = Agent(
    model=OpenAIChat(id="gpt-4"),
    tools=[
        DuckDuckGoTools(),
        YFinanceTools()
    ],
    instructions=["Use tools to find accurate information"]
)

response = agent.run("What's the current price of Apple stock?")

Custom Tools

from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools import tool

@tool
def calculate_tip(bill_amount: float, tip_percentage: float = 15.0) -> dict:
    """
    Calculate tip amount and total bill.
    
    Args:
        bill_amount: The bill amount in dollars
        tip_percentage: Tip percentage (default 15%)
    
    Returns:
        dict: Tip amount and total
    """
    tip = bill_amount * (tip_percentage / 100)
    total = bill_amount + tip
    return {"tip": tip, "total": total}

agent = Agent(
    model=OpenAIChat(id="gpt-4"),
    tools=[calculate_tip]
)

response = agent.run("Calculate a 20% tip on a $50 bill")

Tool Confirmation

from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools import tool

@tool
def send_email(to: str, subject: str, body: str) -> str:
    """Send an email (requires confirmation)"""
    # Send email logic
    return f"Email sent to {to}"

# Mark tool as requiring confirmation
send_email_func = send_email
send_email_func.requires_confirmation = True

agent = Agent(
    model=OpenAIChat(id="gpt-4"),
    tools=[send_email_func]
)

# Run will pause and return requirements
response = agent.run("Send an email to john@example.com saying hello")

if response.is_paused:
    # User reviews and approves
    print(f"Confirm: {response.tools_requiring_confirmation}")
    
    # Continue after approval
    final_response = agent.continue_run(response)

MCP Integration

from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.tools.mcp import MCPTools

agent = Agent(
    model=Claude(id="claude-sonnet-4-5"),
    tools=[
        MCPTools(
            transport="streamable-http",
            url="https://docs.agno.com/mcp"
        )
    ]
)

response = agent.run("Search the documentation for agentic RAG")