Beta — Google OAuth approval pending, by-invite access
Open Source · Local-first · Zero Config

Connect AI to Your
Google Workspace

Give Claude access to your Gmail, Drive, and Calendar. Set up in one command. Runs locally on your machine — your data never leaves your computer.

65 Tools
3 Google Services
8 Capabilities
MIT Open Source

Up and running in seconds

No Google Cloud project needed. Install, connect your account, done.

Terminal claude mcp add proGoogleMCP -- npx -y @procedure-tech/mcp-google
claude_desktop_config.json
{
  "mcpServers": {
    "proGoogleMCP": {
      "command": "npx",
      "args": ["-y", "@procedure-tech/mcp-google"]
    }
  }
}

Then use the google_add_account tool to connect your Google account.

Everything you need

Full access to Gmail, Drive, and Calendar with safety gates built in.

Gmail

Search, read, draft, send, and bulk-download attachments. Emails are always drafted first — nothing sends without your explicit confirmation.

📁

Google Drive

Search files by name or content, preview documents without context overload, download to disk, upload from disk, and manage sharing. Read reviewer comments on a Doc — who said what, and the exact text they highlighted — or export to .docx or .pdf to keep comments and formatting intact.

📅

Google Calendar

Check your schedule, find free slots, create events, and RSVP — across all your calendars and accounts.

👥

Multi-Account

Connect work, personal, and shared Google accounts. Name them with aliases like "work" or "personal" and add descriptions — no UUIDs to remember.

🔒

Local & Secure

Runs 100% on your machine. Tokens stored locally. Every API call goes directly from your computer to Google — no middleman, no analytics, no telemetry.

Granular Capabilities

Grant read, compose, or manage access to mail, Drive, and calendar independently — pick a preset like read-only, or choose exactly the capabilities you need. You control what the AI can do.

Three steps to get started

1

Install

One command. No Google Cloud project, no API keys, no config files. Just npx and go.

2

Connect

OAuth opens in your browser. Authorize your Google account. Tokens stay on your machine.

3

Use

Ask Claude to read emails, search Drive, check your calendar. It just works.

What's new

Latest updates and improvements.

v0.9.0 Latest September 2026
  • fixCalendar events now come back with their video call attached. calendar_get_event, calendar_list_events and calendar_search_events return hangoutLink and the full conference details — the Meet URL, dial-in numbers and PIN. A meeting created in Google Calendar with a Meet link previously arrived through this server with no way to join it; Google had been sending the link all along
  • featCreate meetings with a Google Meet link. Pass addMeet: true to calendar_create_event or calendar_update_event and a new conference is generated and attached. No re-authorisation needed — the existing calendar permission already covers it
  • featAttach an existing meeting code with meetingCode, taking either a code like abc-defg-hij or a full Meet URL — the same thing as editing the meeting ID in the Calendar UI. It asks for confirmation first, because a reused conference keeps its access tied to the original event's guest list: people from that meeting may reach this one's recordings and chat. calendar_update_event also takes removeConferencing to drop a call from an event
  • fixcalendar_list_calendars now says which calendars you can actually write to, with a canEdit flag alongside the raw access role — so a shared calendar you can only read is no longer indistinguishable from one you can schedule on. It also shows your own name for a shared calendar, and pages properly: accounts subscribed to more than 100 calendars were silently losing the rest
  • breakingcalendar_list_calendars returns an object with a calendars array rather than a bare array, so that paging is possible. Anything reading the result directly as a list needs to read .calendars instead
v0.8.0 September 2026
  • fixReading a message no longer hides who else was on it. gmail_get_message, gmail_get_thread and gmail_get_messages_batch now return cc, bcc, replyTo, messageId and inReplyTo alongside the sender, recipient, subject and date they already returned. Those headers were being fetched from Gmail and then thrown away, at every format — so a message copied to five people came back looking like a private note to one
  • fixAll four read paths now share one list of which headers to surface. Each handler previously kept its own copy, and three of them drifted — which is why gmail_get_draft returned the Cc on a draft while every other tool dropped it from the same message
  • featNew optional metadataHeaders parameter on those three tools. With format: "metadata" it limits Gmail to the headers you name and hands them back verbatim, so headers outside the standard set — List-Unsubscribe, References, Authentication-Results — are reachable for the first time
v0.7.0 August 2026
  • fixEmails composed as plain text now render correctly in web clients. Bullet lists, numbered lists, postal addresses and sign-offs kept collapsing into one run-on line, because the server joined every line in a paragraph to stop Gmail breaking sentences mid-way. Messages are now sent as multipart/alternative — your text untouched, alongside a generated HTML version — so line breaks survive and paragraphs still reflow to the window
  • fixThe bodyFormat tool description never mentioned that line breaks were being discarded, so the workaround was to tell every agent to pass bodyFormat: "html". That is no longer needed: "text" is correct for almost every case, and "html" is only for callers writing their own markup
  • breakingAuthors now own their wrapping. Prose that you hard-wrap yourself renders with those breaks rather than being joined — send unwrapped paragraphs and let the reader's client reflow them. Note that indentation in a plain-text body does not survive into HTML; use bodyFormat: "html" with <pre> if you need it
v0.6.0 August 2026
  • featOAuth now uses PKCE (RFC 7636). Previously the authorization code was protected only by arriving on a fixed local port, so another process on the same machine that claimed that port first could have intercepted it. The verifier never leaves the server, making an intercepted code useless
  • breakingThe OAuth callback now binds an OS-assigned port on 127.0.0.1 instead of a fixed localhost:8089. Nothing to configure, and "port 8089 already in use" is gone — but a firewall or proxy rule pinned to port 8089 or to the hostname localhost no longer applies
  • breakingFor anyone importing this package as a library: AccountStore.startAddAccount and startReauthAccount now return promises and must be awaited. No MCP tool signature or response changed
  • fixOn the OAuth client secret published in this package, which automated scanners flag: it belongs to a Google "Desktop app" client, which is a public client under RFC 8252 where the secret is not confidential — the same pattern used by gcloud and the GitHub CLI. It is intentional and was not rotated. Your credentials were never exposed and no action is required. See SECURITY.md
v0.5.1 August 2026
  • fixThe per-service capability gates introduced in v0.5.0 were too strict and refused calls Google actually authorizes. Eight of the nine Drive read tools now accept drive:appfiles as well as drive:read; mail:modify now implies mail:compose; gmail_list_labels no longer demands write access
  • featCapability presets — read-only, inbox-assistant, scheduler — for one-step account setup instead of picking every capability individually
  • featWidening an account's Drive access on reauth now requires confirm: true, mirroring the existing confirmation for narrowing
  • fixErrors now suggest the narrowest capability that would fix them, instead of the full set of alternatives; Drive responses on a drive:appfiles-only account carry a coverage note when the view is partial instead of failing silently incomplete
v0.4.3 May 2026
  • featShared Drive (Team Drive) support — drive_search_files, drive_list_files, file content/download, upload, and permission tools now find and act on Shared Drive items (previously returned empty results or "File not found")
  • featNew drive_list_shared_drives tool to discover the Shared Drives an account is a member of
  • featNew optional driveId parameter on drive_search_files to scope a search to a single Shared Drive
v0.4.2 May 2026
  • featNew google_reauth_account tool — re-run OAuth on an existing account when a refresh token is invalidated, or to upgrade scope tiers, without losing the account ID, alias, description, or labels
  • featReauth verifies the authorized Google account matches the existing email, preventing accidental account swaps
v0.4.1 May 2026
  • fixNon-ASCII subjects (em-dash, smart quotes, accents) now RFC 2047 encoded so recipients see them correctly instead of mojibake like â€"
  • fixPlain-text bodies no longer render with visible mid-sentence line breaks in Gmail — hard-wrapped paragraphs are unwrapped before send so clients reflow to the viewport
  • featNew bodyFormat: "text" | "html" parameter on gmail_create_draft, gmail_update_draft, gmail_create_draft_with_attachment, and gmail_reply_in_thread for HTML-formatted email
v0.4.0 April 2026
  • featSmart file previews — drive_get_file_content now returns truncated content (default 10k chars) to protect AI context windows from overload
  • featNew drive_get_full_file_content tool for when you genuinely need the complete file
  • featNew drive_download_file tool — download files from Drive directly to local disk
  • featFull-text search shorthand — use content:keyword in drive_search_files to search inside file contents
v0.3.3 April 2026
  • fixAttachment downloads now work reliably — fixed a bug where Gmail's ephemeral attachment IDs caused every download to fail
  • fixgmail_get_attachment now saves files directly to disk instead of returning binary data in the response
  • fixgmail_bulk_save_attachments no longer fails due to the same stale ID issue
v0.3.0 March 2026
  • featFile path support for attachments and uploads — the server reads large files directly from disk, bypassing AI context window limits
  • featGmail drafts with attachments now accept local file paths (PDFs, images, any file up to 25MB)
  • featDrive file uploads accept local file paths (up to 50MB)
v0.2.4 March 2026
  • fixMade keytar optional to fix slow npx startup times
  • fixConfigured OIDC trusted publishing for npm
v0.2.0 March 2026
  • featGitHub Actions CI/CD pipeline for automated npm publishing
  • featAccount aliases — name accounts "work" or "personal" instead of UUIDs
  • featAccount descriptions for human-readable context
  • featBulk attachment download to local disk
  • featAuto-open browser for OAuth flow
v0.1.3 March 2026
  • featGoogle Calendar support — 10 tools for events, scheduling, RSVP
  • featGoogle Drive support — 12 tools for files, folders, sharing
  • featShorthand query syntax for Drive search
  • fixParam coercion for MCP client compatibility
v0.1.1 February 2026
  • featZero-config OAuth — no Google Cloud project needed
  • featGmail read, draft, send with confirmation gates
  • featInbox management — labels, archive, trash
  • featTiered permission scopes (readonly, compose, full)
  • featStatic site with privacy policy and terms
🛠

Open source under MIT License. View the code, report issues, and contribute on GitHub. Built by Procedure.