Google Workspace MCP Servers
Three separate MCP servers handle Google Workspace services. They share the same Google Cloud project but use independent OAuth tokens.
Google Cloud Project
- Project:
claude-gmail-access-480619 - Console: https://console.cloud.google.com/apis/credentials?project=claude-gmail-access-480619
- OAuth Client ID:
502958235426-qrqo1mu0me79re757qntpkmn0smgbf2i - APIs enabled: Gmail API, Google Drive API, Google Calendar API, Google Sheets API, Google Docs API, Google Slides API
- OAuth consent: Test mode, Eric's account added as test user
Server: Gmail
| Field | Value |
|---|---|
| NPM package | @gongrzhe/server-gmail-autoauth-mcp |
| OAuth keys | ~/.gmail-mcp/gcp-oauth.keys.json |
| Tokens | ~/.gmail-mcp/credentials.json |
| Env vars | GMAIL_OAUTH_PATH, GMAIL_CREDENTIALS_PATH |
| Scopes | gmail.modify, gmail.settings.basic |
Tools available
- search_emails, read_email, send_email, draft_email
- modify_email, delete_email, batch_modify_emails, batch_delete_emails
- list_email_labels, create_label, update_label, delete_label
- create_filter, get_filter, list_filters, delete_filter
- download_attachment, get_or_create_label, create_filter_from_template
Server: Google Drive (Docs, Sheets, Slides)
| Field | Value |
|---|---|
| NPM package | @piotr-agier/google-drive-mcp |
| OAuth keys | ~/.claude/credentials/google-drive-oauth.json |
| Tokens | ~/.config/google-drive-mcp/tokens.json |
| Env vars | GOOGLE_DRIVE_OAUTH_CREDENTIALS, GOOGLE_DRIVE_MCP_TOKEN_PATH |
| Scopes | drive, drive.file, drive.readonly, presentations, documents, spreadsheets |
Tools available
- search, listFolder, createFolder, moveItem, renameItem, deleteItem, uploadFile
- createGoogleDoc, getGoogleDocContent, updateGoogleDoc, formatGoogleDocText, formatGoogleDocParagraph
- createGoogleSheet, getGoogleSheetContent, updateGoogleSheet, formatGoogleSheet*, mergeGoogleSheetCells, setGoogleSheetBorders, addGoogleSheetConditionalFormat
- createGoogleSlides, getGoogleSlidesContent, updateGoogleSlides, createGoogleSlidesTextBox, createGoogleSlidesShape, styleGoogleSlidesShape, formatGoogleSlides*, setGoogleSlidesBackground, getSpeakerNotes, updateSpeakerNotes
- createTextFile, updateTextFile
Note on updateGoogleDoc
This tool replaces ALL content and destroys formatting. For small text changes, there's no targeted replace. Either accept the limitation or avoid it for formatted docs.
Server: Google Calendar
| Field | Value |
|---|---|
| NPM package | @cocal/google-calendar-mcp (v2.4.1) |
| OAuth keys | ~/.claude/credentials/google-drive-oauth.json (shared with Drive) |
| Tokens | ~/.config/google-calendar-mcp/tokens.json |
| Env var | GOOGLE_OAUTH_CREDENTIALS |
| Scopes | calendar |
Tools available
- list-calendars, list-events, search-events, get-event
- create-event, update-event, delete-event
- get-freebusy, get-current-time
- respond-to-event, list-colors, manage-accounts
Setup date
February 23, 2026
Credential File Locations
All paths are explicit via environment variables so they don't rely on defaults.
~/.claude/credentials/
├── google-drive-oauth.json # OAuth client keys (used by Drive + Calendar)
├── gmail-credentials.json # STALE - old project, not used by current gmail server
└── gdrive-token.pickle # STALE - old token format, not used
~/.gmail-mcp/
├── gcp-oauth.keys.json # OAuth client keys (used by Gmail)
└── credentials.json # Gmail access/refresh tokens
~/.config/google-drive-mcp/
└── tokens.json # Drive access/refresh tokens
~/.config/google-calendar-mcp/
└── tokens.json # Calendar access/refresh tokens
OAuth Token Refresh
All three servers use refresh tokens that auto-renew. Access tokens expire ~1 hour but refresh tokens are long-lived. If a refresh token is revoked (e.g., from Google Account security settings), you'll need to re-authenticate:
- Delete the relevant tokens file
- Restart Claude Code
- The server will prompt for re-authentication via browser
Why Three Separate Servers?
There's no single unified Google Workspace MCP server that reliably handles all three services. Each package is maintained by a different author: - Gmail: @gongrzhe - Drive: @piotr-agier - Calendar: @cocal
This is the trade-off for having all three services available. The upside is each can be updated/fixed independently.