Zoom
List Zoom meetings with Server-to-Server OAuth and understand the scheduling adapter limitation.
Enable Agno agents with Zoom and allow them to:
- Schedule new meetings
- Get meeting details
- List all meetings
- Get upcoming meetings
- Delete meetings
- Get meeting recordings
Prerequisites
- Visit https://marketplace.zoom.us/
- Create a new app. Go to Develop -> Build App -> Server-to-Server OAuth.
- Add required scopes:
- meeting:write:admin
- meeting:read:admin
- cloud_recording:read:admin
- Copy Account ID, Client ID, and Client Secret
export ZOOM_ACCOUNT_ID=your_account_id
export ZOOM_CLIENT_ID=your_client_id
export ZOOM_CLIENT_SECRET=your_client_secretimport os
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.zoom import ZoomTools
# ---------------------------------------------------------------------------
# Create Agent
# ---------------------------------------------------------------------------
# Get environment variables
ACCOUNT_ID = os.getenv("ZOOM_ACCOUNT_ID")
CLIENT_ID = os.getenv("ZOOM_CLIENT_ID")
CLIENT_SECRET = os.getenv("ZOOM_CLIENT_SECRET")
# Initialize Zoom tools with credentials
zoom_tools = ZoomTools(
account_id=ACCOUNT_ID, client_id=CLIENT_ID, client_secret=CLIENT_SECRET
)
# Create an agent with Zoom capabilities
agent = Agent(
name="Zoom Meeting Manager",
id="zoom-meeting-manager",
model=OpenAIChat(id="gpt-4"),
tools=[zoom_tools],
markdown=True,
instructions=[
"You are an expert at managing Zoom meetings using the Zoom API.",
"You can:",
"1. Schedule new meetings (schedule_meeting)",
"2. Get meeting details (get_meeting)",
"3. List all meetings (list_meetings)",
"4. Get upcoming meetings (get_upcoming_meetings)",
"5. Delete meetings (delete_meeting)",
"6. Get meeting recordings (get_meeting_recordings)",
"",
"For recordings, you can:",
"- Retrieve recordings for any past meeting using the meeting ID",
"- Include download tokens if needed",
"- Get recording details like duration, size, download link and file types",
"",
"Guidelines:",
"- Use ISO 8601 format for dates (e.g., '2024-12-28T10:00:00Z')",
"- Accept and use user's timezone (e.g., 'America/New_York', 'Asia/Tokyo', 'UTC')",
"- If no timezone is specified, default to UTC",
"- Ensure meeting times are in the future",
"- Provide meeting details after scheduling (ID, URL, time)",
"- Handle errors gracefully",
"- Confirm successful operations",
],
)
# Example usage - uncomment the ones you want to try
# ---------------------------------------------------------------------------
# Run Agent
# ---------------------------------------------------------------------------
if __name__ == "__main__":
agent.print_response(
"Schedule a meeting titled 'Team Sync' for tomorrow at 2 PM UTC for 45 minutes"
)
# More examples (uncomment to use):
# agent.print_response("What meetings do I have coming up?")
# agent.print_response("List all my scheduled meetings")
# agent.print_response("Get details for my most recent meeting")
# agent.print_response("Get the recordings for my last team meeting")
# agent.print_response("Delete the meeting titled 'Team Sync'")
# agent.print_response("Schedule daily standup meetings for next week at 10 AM UTC")Run with Server-to-Server OAuth
The supplied scheduling method hardcodes /users/me/meetings. Zoom’s API authentication guidance requires an explicit user ID or email with Server-to-Server OAuth, and schedule_meeting has no argument to supply one. Use the following listing agent in place of the scheduling agent and its run block until that adapter is updated:
from os import environ
from agno.agent import Agent
from agno.tools.zoom import ZoomTools
agent = Agent(tools=[ZoomTools(include_tools=["list_meetings", "get_meeting"])])
agent.print_response(
f"List scheduled meetings for Zoom user {environ['ZOOM_USER_ID']}.",
markdown=True,
)Export ZOOM_USER_ID with the host’s user ID or email. Grant the activated app the scopes for the endpoints you use; the listing example needs meeting-read access. Listing returns one page of meetings. The wrapper also discards the download-access token requested by include_download_token=True, so that flag does not supply a usable token in its returned JSON.
Access tokens are obtained internally by the meeting methods. The restricted toolkit keeps the separate get_access_token method, which returns the credential itself, out of the model’s tools.
Run the Example
Set up your virtual environment
uv venv --python 3.12
source .venv/bin/activateInstall dependencies
uv pip install -U agno openai requestsExport your API keys
export ZOOM_ACCOUNT_ID="your_account_id"
export ZOOM_CLIENT_ID="your_client_id"
export ZOOM_CLIENT_SECRET="your_client_secret"
export OPENAI_API_KEY="your_openai_api_key_here"Run the example
Save the code above as zoom_tools.py, then run:
python zoom_tools.pyFull source: cookbook/91_tools/zoom_tools.py