Skip to main content

Google Workspace CLI for Claude Code — Calendar, Gmail, Drive with multi-account OAuth support

Project description

gw-cli

PyPI version Python versions License: MIT CI

Google Workspace CLI for Claude Code — manage Calendar, Gmail, and Drive across multiple Google accounts.

gw-cli is a Claude Code plugin that brings Google Workspace into your terminal. Register multiple OAuth accounts, switch between them instantly, and let Claude Code operate your calendar, email, and files through natural language.

60-second quickstart

Before you start: gw auth login needs an OAuth credentials.json that you create once in Google Cloud (Desktop-app OAuth client). It is not shipped with the package. New here? Run /gw-setup in Claude Code for a guided walkthrough, or follow Setup below. (Running gw auth login without it prints these same instructions.)

# In any Claude Code session:
/plugin marketplace add JFK/gw-cli
/plugin install gw-cli

# One-time setup — see "Setup" below to obtain credentials.json first:
gw auth login --credentials /path/to/credentials.json

# Then use naturally:
"Show me my unread emails"
"Schedule a meeting tomorrow at 10am with Meet"
"What's on my calendar this week?"

Features

  • Multi-account support — Register multiple Google accounts (personal, work, client projects) and switch between them instantly
  • Calendar — List, create, update, delete events. Google Meet setup. Free/busy check across accounts
  • Gmail — Search, read, send, reply. Label management. Mark read/unread. Attachment download and save to Drive
  • Drive — List, search, upload, create Google Docs/Sheets/Slides. Share/unshare files
  • Claude Code integration — All commands support --json output for seamless skill parsing
  • Periodic monitoring — Use with /loop for unread email checks, calendar reminders
  • WSL2 compatible — Automatic fallback to manual OAuth flow when localhost callback is unreachable

Required dependencies

Tool Required Why
Python 3.10+ yes Runtime
pip yes Package installation
gcloud CLI recommended GCP project setup and API enablement
Claude Code recommended Plugin integration and natural language interface

Install

As a Claude Code plugin (recommended)

/plugin marketplace add JFK/gw-cli
/plugin install gw-cli

The plugin auto-installs the Python CLI and registers 7 skills:

Skill Description
/gw-setup Guided first-time Google Cloud setup
/gw-auth Account management (login, switch, list, remove)
/gw-calendar Calendar operations
/gw-mail Gmail operations
/gw-drive Drive operations
/gw-workflow Cross-service workflows (email attachment to Drive, etc.)
/gw-loop Periodic monitoring setup

Standalone CLI

pip install google-workspace-cli

Published on PyPI as google-workspace-cli (the gw-cli name was already taken). The installed command is still gw.

Latest from source:

pip install git+https://github.com/JFK/gw-cli.git

Or clone and install locally:

git clone https://github.com/JFK/gw-cli.git
cd gw-cli
pip install -e .

Setup

1. Create GCP Project

gcloud projects create gw-cli-$(date +%Y%m%d) --name="gw-cli"
gcloud config set project gw-cli-YYYYMMDD

2. Enable APIs

gcloud services enable calendar-json.googleapis.com gmail.googleapis.com drive.googleapis.com --project=PROJECT_ID

3. OAuth Consent Screen

Open in browser: https://console.cloud.google.com/apis/credentials/consent?project=PROJECT_ID

  • User Type: External
  • App name: gw-cli
  • Add your email as a test user (required, otherwise login fails with 403)

4. Create OAuth Client

Open in browser: https://console.cloud.google.com/apis/credentials/oauthclient?project=PROJECT_ID

  • Application type: Desktop app
  • Download the JSON file

5. Login

gw auth login --credentials ./credentials.json

On WSL2/remote environments, the tool automatically falls back to manual URL paste mode when the localhost callback is unreachable.

6. Verify

gw auth status
gw cal list --days 3
gw mail list --query "is:unread" --limit 5

Usage

Available commands

gw auth     login, list, status, switch, remove
gw cal      list, get, create, update, delete, free
gw mail     list, read, send, reply, labels, label, mark, attachments, download, to-drive
gw drive    list, upload, create, share, unshare
gw config   show, set

Calendar

gw cal list --days 7
gw cal create --title "Meeting" --start "2026-04-17 10:00" --end "2026-04-17 11:00" --meet
gw cal create --title "1on1" --start "2026-04-18 14:00" --end "2026-04-18 14:30" --meet --attendee colleague@example.com
gw cal free --date 2026-04-17
gw cal delete EVENT_ID

Gmail

gw mail list --query "is:unread"
gw mail read MESSAGE_ID
gw mail send --to "user@example.com" --subject "Hello" --body "Hi there"
gw mail reply MESSAGE_ID --body "Thanks!"
gw mail mark MESSAGE_ID --read
gw mail attachments MESSAGE_ID
gw mail to-drive MESSAGE_ID --attachment-id ATT_ID --folder FOLDER_ID

Drive

gw drive list
gw drive list --query "name contains 'report'"
gw drive upload ./file.pdf
gw drive create --type doc --title "New Document"
gw drive share FILE_ID --email user@example.com --role writer
gw drive unshare FILE_ID --email user@example.com

Multi-account

gw auth login --credentials ./work-credentials.json    # Add another account
gw auth list                                            # Show all accounts
gw auth switch work@company.com                         # Switch active account
gw mail list                                            # Uses active account
gw mail list --account personal@gmail.com               # Override for one command

Config

gw config show
gw config set defaults.calendar.days 14
gw config set defaults.mail.limit 50

Output

All commands support --json for machine-readable output:

gw cal list --json
gw mail list --query "is:unread" --json

Human-readable output always shows the active account:

[fumikazu.kiyota@gmail.com]
  evt1 | Team standup | 2026-04-17T10:00:00+09:00 | ...

Periodic Monitoring

Use with the /loop skill for continuous monitoring:

/loop 5m gw mail list --query "is:unread" --json
/loop 30m gw cal list --days 1 --json

Config storage

Config stored at ~/.config/google-workspace-cli/config.json.

Credentials and tokens are stored per account:

~/.config/google-workspace-cli/
├── config.json
├── credentials/
│   └── user@gmail.com.json
└── tokens/
    └── user@gmail.com.json

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

google_workspace_cli-0.1.1.tar.gz (85.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

google_workspace_cli-0.1.1-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

File details

Details for the file google_workspace_cli-0.1.1.tar.gz.

File metadata

  • Download URL: google_workspace_cli-0.1.1.tar.gz
  • Upload date:
  • Size: 85.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for google_workspace_cli-0.1.1.tar.gz
Algorithm Hash digest
SHA256 65da91d74316796aa7794ab0c1ca7b7013c4103074902ad2eee61b69ca60f9cf
MD5 2ea8f0be4fd351c48f4a8921dfb71876
BLAKE2b-256 ffe53be2a329f5edb969b1f32a624b9552dea35c5466bd718c28b770d9af4c7a

See more details on using hashes here.

Provenance

The following attestation bundles were made for google_workspace_cli-0.1.1.tar.gz:

Publisher: publish.yml on JFK/gw-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file google_workspace_cli-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for google_workspace_cli-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6c1c48303cc5e6acbc04ef70444b5946a2c8825253a43df856d3a04567d8477e
MD5 85ad77ca8b936dfa21e36bf868acf188
BLAKE2b-256 adfedf1e48d84dc7da63842873f84f8b5d58d577ef1a9596f9c563d4c107f61d

See more details on using hashes here.

Provenance

The following attestation bundles were made for google_workspace_cli-0.1.1-py3-none-any.whl:

Publisher: publish.yml on JFK/gw-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page