| name | ez-google |
| description | Use when asked to send email, check inbox, read emails, check calendar, schedule meetings, create events, search Google Drive, create Google Docs, read or write spreadsheets, find contacts, or any task involving Gmail, Google Calendar, Drive, Docs, Sheets, Slides, or Contacts. Agent-friendly with hosted OAuth - no API keys needed. |
| metadata | {"openclaw":{"emoji":"📧"}} |
ez-google
Agent-friendly Google Workspace tools. Simple CLI scripts with hosted OAuth - users just click a link and paste back a token. No API keys or credentials needed.
Run all commands with: uv run scripts/<script>.py <command> [args]
Auth (do this first)
auth.py status
auth.py login
auth.py save '<TOKEN>'
Auth flow: status → if not authenticated → login → user clicks link, copies token → save '<TOKEN>'
Gmail
gmail.py list [-n 10] [-q "query"]
gmail.py search "query"
gmail.py get MESSAGE_ID
gmail.py send "to" "subject" "body"
gmail.py draft "to" "subject" "body"
gmail.py labels
gmail.py bulk-label "query" --add LABEL --remove LABEL
gmail.py bulk-trash "query" [-y]
Bulk examples:
gmail.py bulk-label "from:newsletter@example.com" --add ARCHIVE --remove INBOX
gmail.py bulk-trash "subject:alert older_than:30d" -y
gmail.py bulk-label "category:promotions" --add Label_3
Calendar
gcal.py list [DATE]
gcal.py create "title" "START" "END"
gcal.py get EVENT_ID
gcal.py delete EVENT_ID
gcal.py calendars
Drive
drive.py list [-n 20]
drive.py search "query"
drive.py get FILE_ID
drive.py download FILE_ID
drive.py create-folder "name"
Docs
docs.py create "title"
docs.py get DOC_ID
docs.py find "query"
docs.py append DOC_ID "text"
docs.py insert DOC_ID "text"
docs.py replace DOC_ID "old" "new"
Sheets
sheets.py create "title"
sheets.py get ID "Sheet!A1:D10"
sheets.py info ID
sheets.py find "query"
sheets.py write ID "Sheet!A1" "a,b;c,d"
sheets.py append ID "Sheet!A:B" "a,b;c,d"
Slides
slides.py find "query"
slides.py get PRESENTATION_ID
slides.py text PRESENTATION_ID
slides.py create "title"
People/Contacts
people.py me
people.py contacts [-n 100]
people.py search "name"
people.py get CONTACT_ID
Chat (Workspace only)
chat.py spaces
chat.py messages SPACE_ID [-n 20]
chat.py send SPACE_ID "text"
chat.py get SPACE_ID
Note: After adding new services, run auth.py logout then login again to grant new permissions.