Drive

Google Drive Tools

Core examples: read-only agent, full-access agent with upload and download.

basic.py
"""
Google Drive Tools
==================
Core examples: read-only agent, full-access agent with upload and download.

All five Drive tools are demonstrated: list_files, search_files,
read_file, upload_file, download_file.

Setup:
1. Create OAuth credentials at https://console.cloud.google.com (enable Google Drive API)
2. Export GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_PROJECT_ID env vars
3. pip install openai google-api-python-client google-auth-httplib2 google-auth-oauthlib
4. First run opens browser for OAuth consent, saves token.json for reuse
"""

from agno.agent import Agent
from agno.models.openai import OpenAIResponses
from agno.tools.google.drive import GoogleDriveTools

# ---------------------------------------------------------------------------
# Create Agents
# ---------------------------------------------------------------------------

# Read-only agent (default -- upload and download disabled)
read_only_agent = Agent(
    name="Drive Reader",
    model=OpenAIResponses(id="gpt-5.5"),
    tools=[GoogleDriveTools()],
    instructions=[
        "When listing or searching files, show the file ID, name, type, and last modified date.",
        "When reading files, summarize the content briefly.",
        "Google Docs and Slides are exported as plain text, Sheets as CSV.",
    ],
    markdown=True,
)

# Full-access agent with upload and download enabled
full_agent = Agent(
    name="Drive Agent",
    model=OpenAIResponses(id="gpt-5.5"),
    tools=[GoogleDriveTools(upload_file=True, download_file=True)],
    instructions=[
        "When uploading files, confirm the file path with the user first.",
        "When downloading files, ask for the destination path.",
        "Show file metadata in a structured markdown format.",
    ],
    markdown=True,
)

# ---------------------------------------------------------------------------
# Run Demo
# ---------------------------------------------------------------------------

if __name__ == "__main__":
    # list_files
    read_only_agent.print_response(
        "List the 5 most recent files in my Google Drive",
        stream=True,
    )

    # search_files
    read_only_agent.print_response(
        "Search my Google Drive for spreadsheets",
        stream=True,
    )

    # read_file
    # read_only_agent.print_response(
    #     "Read the file with ID <FILE_ID> and summarize it",
    #     stream=True,
    # )

    # upload_file (requires full_agent)
    # full_agent.print_response(
    #     "Upload the file at /path/to/document.pdf to my Google Drive",
    #     stream=True,
    # )

    # download_file (requires full_agent)
    # full_agent.print_response(
    #     "Download the file with ID <FILE_ID> to /tmp/report.csv",
    #     stream=True,
    # )

The script runs only the two reader prompts; the upload and download examples are commented. Download destinations are configured with GoogleDriveTools(download_file=True, download_dir="/tmp"); download_file uses the Drive file's name and cannot accept an arbitrary destination filename from the prompt. Uploads accept a local file path and create the file in Drive's root.

Run the Example

Set up your virtual environment

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

Install dependencies

uv pip install -U agno google-api-python-client google-auth google-auth-httplib2 google-auth-oauthlib openai openpyxl python-docx python-pptx

Configure Google OAuth

Enable the Google API used by this example, configure the consent screen, and create a Desktop OAuth client in your Cloud project. Export its GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and GOOGLE_PROJECT_ID, or place the downloaded client JSON at credentials.json in the directory where you run Python. Google's Python quickstart shows the Desktop client setup.

The first tool call opens a browser for consent and caches credentials in token.json. Use a separate token_path when switching accounts. Passing an Agno user_id does not switch the authenticated Google account.

Export environment variables

export GOOGLE_CLIENT_ID="your_google_client_id_here"
export GOOGLE_CLIENT_SECRET="your_google_client_secret_here"
export GOOGLE_PROJECT_ID="your_google_project_id_here"
export OPENAI_API_KEY="your_openai_api_key_here"

Run the example

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

python basic.py

Full source: cookbook/91_tools/google/drive/basic.py