Google Workspace MCP — Gmail, Calendar, Drive, Docs

Wednesday vede în Gmail, scrie pe Calendar, caută în Drive, citeşte Docs, modifică Sheets — toate prin contul tău Google ([email protected] şi conturile linked). MCP-ul ăsta e cea mai capabilă punte cu viaţa reală (afară de TickTick).

Ce face

Server Python care wrapps gws CLI (Google Workspace CLI) + apeluri directe Python la API-urile Google. Suportă OAuth full pentru toate serviciile Google clasice. Refresh token-ul stă local, deci după primul login nu mai trebuie să te autentifici interactiv.

Mai există un al doilea client OAuth pentru Home Assistant (web client type, separate). Vezi google_workspace_ha.env — alt scope, alt URL de redirect, dar acelaşi proiect Google Cloud.

Tool-uri exposed

Gmail

  • gmail_search <query> — Gmail search syntax (from:, subject:, is:unread, etc.)
  • gmail_list_messages — listă recente
  • gmail_get_message <id> — corpul + headers
  • gmail_label_message <id> <label> — apply label
  • gmail_list_labels

Calendar

  • calendar_list_calendars — toate calendarele (primary + shared)
  • calendar_list_events <calendar_id> <time_range> — eventuri în interval
  • calendar_search_events <query> — caută peste toate
  • calendar_create_event <calendar_id> <event> — adaugă event

Drive

  • drive_list_files <query> — listă cu query opţional
  • drive_search_files <query> — căutare full-text + metadata
  • drive_get_file_metadata <id> — info despre fişier

Maps / Traffic (bonus, prin acelaşi project)

  • traffic_eta <origin> <destination> <departure_time> — ETA cu trafic
  • traffic_compare_routes <origin> <destination> — alegere între rute

Exemple de prompts

  • “Wednesday, am vreun email nou cu factură din ultima săptămână?” → gmail_search query="invoice newer_than:7d is:unread"
  • “Ce am pe calendar mâine?” → calendar_list_events time_range="tomorrow"
  • “Adaugă pe calendar ‘Coffee with Andrei’ joi 18:00” → calendar_create_event
  • “Caută în Drive după ‘tax return 2025’” → drive_search_files
  • “Cât face de la mine la birou acum?” → traffic_eta (dacă ai un origin/destination set)
  • “Marchează emailul ăsta ca Important” → gmail_label_message

Credenţiale

_infra/config/.credentials/google_workspace_mcp.env (simlink din _infra/mcp/servers/google-workspace/.env).

Conţine:

  • OAuth client_id + client_secret (Desktop App OAuth, project 155798281545)
  • GOOGLE_REFRESH_TOKEN — refresh token long-lived
  • Scope-uri: gmail.modify, calendar, drive.readonly, docs, sheets

Al doilea OAuth (Web Client, pentru Home Assistant): google_workspace_ha.env — DIFERIT, separat.

Maps/Traffic API key: shared cu YouTube Data API (youtube_api.envGOOGLE_MAPS_API_KEY — acelaşi proiect Google Cloud).

Sub-skill-ul google-workspace

Pentru flow-uri rapide din Telegram/CLI există skill-ul google-workspace (separat de MCP) care expune comenzi via gws CLI direct. MCP-ul e pentru când Wednesday alege singură ce tool, skill-ul e pentru când vrei o comandă scurtă.

Gotchas

  • Refresh token-ul expiră dacă nu e folosit ≥6 luni — atunci trebuie re-auth interactiv. Wednesday îţi spune când vede error.
  • Gmail rate limit — 250 quota units/user/second. Dacă faci 100+ gmail_search rapid, primeşti 429. Wednesday backoff automat.
  • Drive results sunt limitate la 100/page default — pentru searches mari, foloseşte paginaţia (page_token în response)
  • Calendar create_event vrea ISO 8601 timezones — “thursday 18:00 Europe/Bucharest” trebuie convertit. Wednesday face conversia, dar dacă vezi event scheduled la oră ciudată, e UTC mismatch.
  • NU folosi pentru bulk-send email — există email-send MCP separat (iCloud SMTP, email_send_mcp.env) pentru asta. Politica de outbound default e iCloud [email protected], nu Gmail (vezi feedback_email_outbound_policy în memorie).
  • Scope-ul gmail.modify permite delete — Wednesday nu va şterge fără confirmare explicită, dar capability-ul e acolo
  • HA OAuth client (web) NU se foloseşte din Claude Code — e pentru Home Assistant integrations. Nu confunda.