Skip to main content
Tools allow agents to take actions and interact with external systems. Agno includes 100+ built-in tools and makes it easy to create custom tools.

Using built-in tools

from agno.agent import Agent
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.yfinance import YFinanceTools

agent = Agent(
    tools=[
        DuckDuckGoTools(),
        YFinanceTools()
    ]
)

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

Web search

DuckDuckGoTools, TavilyTools, BraveSearch

Financial data

YFinanceTools for stock data and analysis

Developer tools

GithubTools, ShellTools, PythonTools

Database tools

PostgresTools, DuckDBTools

Creating custom tools

Use the @tool decorator:
from agno.tools import tool

@tool
def get_weather(city: str) -> str:
    """Get the weather for a city.
    
    Args:
        city: The name of the city
    """
    return f"Weather in {city}: Sunny, 72°F"

agent = Agent(
    tools=[get_weather]
)

Tool with dependencies

import requests

@tool
def search_arxiv(query: str) -> list:
    """Search arXiv for papers.
    
    Args:
        query: Search query
    """
    response = requests.get(
        "https://export.arxiv.org/api/query",
        params={"search_query": query}
    )
    # Parse and return results
    return results

Tool choice control

# Let agent choose when to use tools
agent = Agent(
    tools=[DuckDuckGoTools()],
    tool_choice="auto"
)

# Force a specific tool
agent = Agent(
    tools=[DuckDuckGoTools()],
    tool_choice={
        "type": "function",
        "function": {"name": "duckduckgo_search"}
    }
)

# Disable tools
agent = Agent(
    tools=[DuckDuckGoTools()],
    tool_choice="none"
)
See Tools documentation for the complete tool catalog and custom tools guide for creating your own.

Build docs developers (and LLMs) love