google-mcp-server: Read and Write Google Workspace from LLMs

·4 min read

google-mcp-server is an MCP server I built that lets Claude and other MCP clients read and write Google Calendar, Drive, Gmail, Sheets, Docs, and Slides.

It’s a single Go binary, installable via Homebrew:

brew tap ngs/tap
brew install google-mcp-server

Motivation

I originally wrote this for myself last year, but recently a certain project put it to a real test.

I wanted a shared Google Spreadsheet to work as a TODO sheet that both humans and LLMs read and write.

The claude.ai Google Drive connector could read the spreadsheet, but couldn’t write cell values.

Google’s official Sheets MCP API looked promising, but it’s in Developer Preview, covers Sheets only, and wasn’t something I could plug in right away in my environment.

So I deployed my own google-mcp-server instead — and promptly hit a few bugs in production use, including diagnostics leaking into stdout and corrupting the JSON-RPC stream. I fixed them on the spot and shipped v0.4.0 and v0.5.0.

Now that it has survived a real project, it feels worth a proper introduction.

How it compares

There are roughly three ways to let an LLM touch Google Workspace:

claude.ai Google connectorsGoogle’s Sheets MCP APIgoogle-mcp-server
ServicesDrive / Gmail / Calendar, etc.Sheets onlyCalendar / Drive / Gmail / Sheets / Docs / Slides
Cell-level writesNo (as of 2026-08, in my environment)YesYes
HostingBuilt into claude.aiGoogle-hosted, HTTP + OAuthLocal stdio, single binary
StatusGenerally availableDeveloper PreviewOSS (MIT)
SetupConnect from the UIEnable APIs in GCP + per-client redirect URICreate an OAuth client in GCP + drop in the binary
Multiple accountsOne connection per accountOne server, automatic account selection

The claude.ai connectors are by far the easiest to set up. If all you need is Drive search, file reading, and browsing mail and calendars, they’re enough. They don’t offer spreadsheet cell updates or Slides manipulation, though.

Google’s Sheets MCP API is a managed MCP server you reach over HTTP + OAuth 2.0 after enabling sheetsmcp.googleapis.com. It provides tools like get_values, update_values, update_formulas, and insert_dimension. Google hosts it, so there’s nothing to run — but it’s Developer Preview, Sheets-only, and each MCP client needs its own redirect URI registered.

google-mcp-server runs locally over stdio and covers all six services in one binary. It uses an OAuth client from your own GCP project, so tokens and data stay between your machine and Google’s APIs.

Usage

Once registered with an MCP client, requests like these work in plain language:

  • “Append today’s work to this TODO sheet and update the status column” (sheets_values_get / sheets_values_update)
  • “Turn this Markdown meeting note into a Google Doc in the shared Drive folder” (drive_markdown_upload)
  • “Find three free slots next week” (calendar_freebusy_query)
  • “Build a slide deck from this Markdown and export it as PDF” (slides_markdown_create / slides_export_pdf)

You can authenticate multiple Google accounts, and the server picks the right account automatically from email addresses or domains mentioned in your request.

Say “add this to my work calendar” and it calls the API with that account’s token. There are also cross-account tools like calendar_events_list_all_accounts.

Setup

You need your own Google Cloud project and an OAuth 2.0 client (Desktop app type).

(1) Create a project in Google Cloud Console and enable the APIs you plan to use (Google Sheets API, Google Drive API, and so on).

(2) Under “APIs & Services > Credentials”, create an OAuth client ID with the “Desktop app” type.

(3) Pass the client ID and secret via environment variables or config.json:

export GOOGLE_CLIENT_ID="YOUR_CLIENT_ID.apps.googleusercontent.com"
export GOOGLE_CLIENT_SECRET="YOUR_CLIENT_SECRET"

(4) Register it with your MCP client.

The path below is the Apple Silicon Homebrew prefix; substitute whatever brew --prefix prints on your machine.

For Claude Code:

claude mcp add google -- /opt/homebrew/bin/google-mcp-server

For Claude Desktop, add this to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "google": {
      "command": "/opt/homebrew/bin/google-mcp-server"
    }
  }
}

On first run it opens a browser for the OAuth consent flow. Once you grant access, tokens are stored and refreshed automatically.

To add more accounts, just ask your client to “add a Google account” — the accounts_add tool returns an authorization URL.

Feedback welcome

I’m still fixing things as real-world usage surfaces them, so bug reports, feature requests, and pull requests are all welcome.

Feel free to open an issue on the GitHub repository.