Calcom Tools

Use Calcom scheduling with Agno Agents.

calcom_tools.py
"""
Calcom Tools
=============================

Demonstrates calcom tools.
"""

from datetime import datetime

from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.calcom import CalComTools

# ---------------------------------------------------------------------------
# Create Agent
# ---------------------------------------------------------------------------


"""
Example showing how to use the Cal.com Tools with Agno.

Requirements:
- Cal.com API key (get from cal.com/settings/developer/api-keys)
- Event Type ID from Cal.com
- uv pip install requests pytz

Usage:
- Set the following environment variables:
    export CALCOM_API_KEY="your_api_key"
    export CALCOM_EVENT_TYPE_ID="your_event_type_id"

- Or provide them when creating the CalComTools instance
"""

INSTRUCTONS = f"""You're scheduing assistant. Today is {datetime.now()}.
You can help users by:
    - Finding available time slots
    - Creating new bookings
    - Managing existing bookings (view, reschedule, cancel)
    - Getting booking details
    - IMPORTANT: In case of rescheduling or cancelling booking, call the get_upcoming_bookings function to get the booking uid. check available slots before making a booking for given time
    Always confirm important details before making bookings or changes.
"""


# Example 1: Include specific Cal.com functions for booking management
booking_agent = Agent(
    name="Booking Assistant",
    instructions=[INSTRUCTONS],
    model=OpenAIChat(id="gpt-4"),
    tools=[
        CalComTools(
            user_timezone="America/New_York",
        )
    ],
    markdown=True,
)

# Example 2: Exclude cancellation functions for safety
safe_calendar_agent = Agent(
    name="Safe Calendar Assistant",
    instructions=[INSTRUCTONS],
    model=OpenAIChat(id="gpt-4"),
    tools=[
        CalComTools(
            user_timezone="America/New_York",
        )
    ],
    markdown=True,
)

# Example 3: Full Cal.com functionality (default)
agent = Agent(
    name="Full Calendar Assistant",
    instructions=[INSTRUCTONS],
    model=OpenAIChat(id="gpt-4"),
    tools=[CalComTools(user_timezone="America/New_York")],
    markdown=True,
)

# Example usage

# ---------------------------------------------------------------------------
# Run Agent
# ---------------------------------------------------------------------------
if __name__ == "__main__":
    agent.print_response("What are my bookings for tomorrow?")

Restrict the scheduling tools

The three configurations currently enable the same five operations. To match Example 2's no-cancellation label, add enable_cancel_booking=False to its CalComTools call. Instructions asking for confirmation do not enforce a pause; use requires_confirmation_tools=["create_booking", "reschedule_booking", "cancel_booking"] with Agno's confirmation flow when you need an application approval step.

Set CALCOM_EVENT_TYPE_ID to the numeric ID of an existing event type. Replace America/New_York with your calendar's intended timezone. The final prompt only asks to list bookings, but the default agent also has tools that can change them.

Run the Example

Set up your virtual environment

uv venv --python 3.12
source .venv/bin/activate

Install dependencies

uv pip install -U agno openai pytz requests

Export environment variables

export CALCOM_API_KEY="your_calcom_api_key_here"
export CALCOM_EVENT_TYPE_ID="your_calcom_event_type_id_here"
export OPENAI_API_KEY="your_openai_api_key_here"

Run the example

Save the code above as calcom_tools.py, then run:

python calcom_tools.py

Full source: cookbook/91_tools/calcom_tools.py