Google Tools MCP

One login.
Every Google app.

160 tools across Drive, Docs, Sheets, Gmail, Calendar, Slides, Forms, and Tasks. One OAuth flow, one server process, one line in your config.

npx -y google-tools-mcp setup

An MCP server is how an agent reaches software it doesn’t own.

What MCP is

Model Context Protocol is the standard way an AI agent reaches software it does not own. An MCP server publishes a set of tools; the agent reads that list and calls the ones it needs. Claude Code, Codex, Claude Desktop, and most agent clients speak it.

What this one does

It publishes your Google account as tools. Reading a thread, sending a reply, rewriting a section of a doc, filling a range of a sheet, booking against real free time. The agent works in the account you already use, not a copy of it.

Where it runs

On your machine, against a Google Cloud project you own, holding a token only you have. There is no hosted middle tier, no account to create, and nothing reporting what you did with it.

Why this exists

Wiring an agent into Google is usually four servers and four sign-ins.

What happens

One server for Drive, another for Gmail, a third for Calendar. Each one wants its own OAuth app, its own consent screen, and its own token. Half of them cover a slice of the product and stop.

How it feels

You spend an evening in a cloud console you’ve never opened, get one of them connected, and then find out the tool you needed isn’t in it. So you stop asking the agent for anything that touches your real files.

What it costs

The work stays manual. And the setups that do go through are the risky kind: an agent with write access to documents it never read, one confident edit away from overwriting something a colleague was in the middle of.

What sets it apart

Eight claims, each one checkable in the source.

Every line below points at something specific in the repository, because a list of adjectives is worth nothing when you are handing a program your email.

01

One login covers all of it

A single OAuth consent screen grants Drive, Docs, Sheets, Gmail, Calendar, Slides, Forms, and Tasks together. One server process, one token, one entry in your client config, instead of one of each per Google product.

Tokens live in ~/.config/google-tools-mcp/, and GOOGLE_MCP_PROFILE splits work and personal accounts into separate directories.

02

It will not write to a file it has not read

Every Docs, Sheets, and Drive mutation is refused unless this session read the file first, and the write is pinned to the revision that was read. If a collaborator touched the document in between, the write fails and names what changed instead of landing on top of their edit.

Fifteen Docs tools open a lease through beginDocsMutation; three Sheets tools and deleteFile call the guard directly. Over HTTP the read has to present a server-minted handle bound to the credential, profile, file, tab, revision, and document structure.

03

The wizard does the Google Cloud part

The step that stops most people is not the install. It is enabling eight APIs and configuring an OAuth consent screen in a console they have never opened. The setup command walks that, opens the right pages, saves the credentials, and registers the server with Claude Code or Codex when their CLIs are present.

Setup is idempotent: run it again and it repairs the existing client entry instead of appending a second one. The doctor subcommand reports the same findings without changing anything.

04

Built to beat a 30-second connection timeout

Claude Code gives an stdio MCP server a fixed 30 seconds to connect, and a server that loads slowly loses that race intermittently, which reads as random disconnection. The umbrella googleapis dependency was replaced with the ten per-API packages the server actually uses, and setup points your client at a global install rather than npx.

Installed size went from 195 MB across 1,823 files to 8.1 MB across 148, and cold import from roughly 1,120 ms to 149 ms.

05

Tested against real Google, not only mocks

Unit tests mock the Google API, and a mock cannot reject a malformed field mask or refuse a write. So there is a second layer that runs real calls against a real Drive: one scenario per filed issue, plus a goal-driven agent loop that has to finish a whole multi-step task in one process.

The live harness found five fixes that were reported as done and had passing unit tests. A coverage command reports how many tools are driven live versus unit-tested only, so the gap is a number instead of a feeling.

06

The security work is specific and already done

The OAuth callback carries state and PKCE, so a page you happen to visit mid-sign-in cannot hand the server somebody else’s authorization code. Shell interpolation was removed from the two places that had it. The token file is written atomically at 0600 inside a 0700 directory.

Shared HTTP mode is bearer-token gated on every route including its 404s, binds to loopback only, and rejects a foreign browser Origin.

07

It does not flood the context window

Asking a 160-tool server for help used to return the whole manual, roughly 39,000 characters, which is enough to push an agent into skipping discovery and guessing argument names. Ask about one tool now and you get that tool’s description and argument schema, around 3,000.

The per-tool help renders the schema exactly the way tools/list publishes it, so what help calls optional matches what the client sees.

08

MIT, no telemetry, nothing phoning home

No tracking, no analytics, no usage reporting. The one outbound call the server makes on its own is a 2-second version check against the npm registry, at most once a day, which you can turn off and which is skipped automatically in CI.

GOOGLE_MCP_NO_UPDATE_CHECK or NO_UPDATE_NOTIFIER disables it. Everything else runs on your machine against your own Google Cloud project.

The surface

160 tools, 13 groups, all loaded at once.

See every tool by name →

Files

27

Google Drive

Find, move, copy, share, and read files. PDFs, Word documents, and spreadsheets are read directly, with no conversion step in between.

Documents

26

Google Docs

Read a document as markdown, as plain text, or as a structural index of every element and its character range. Write back a whole body, one section, or one run of text.

Spreadsheets

30

Google Sheets

Values, structure, and formatting. Ranges and named tables, conditional formatting, validation, charts, and row grouping.

Email

16

Gmail

Messages and drafts. Sending, replying, and forwarding assemble standards-compliant MIME, so a non-ASCII subject or a Unicode attachment name survives the trip.

Email threads

6

Gmail

Thread-level reads and moves, so a conversation is handled as one object instead of message by message.

Email labels

1

Gmail

Label management, folded into one dispatch tool that takes an action rather than five near-identical tools.

Email settings

6

Gmail

Account configuration: IMAP and POP, vacation responder, language, forwarding, delegates, send-as identities, S/MIME, and filters.

Calendar

8

Google Calendar

Events, recurring instances, calendar management, and free/busy lookups for scheduling against real availability.

Slides

16

Google Slides

Build a deck and then edit it: text and paragraph formatting, shapes, backgrounds, speaker notes, slide order, and thumbnail export.

Tasks

8

Google Tasks

Task lists and the tasks inside them, including due dates, notes, and completion.

Forms

6

Google Forms

Create and edit a form, read its responses, and control who can see it.

Maps

6

Google Maps Platform

Geocoding both directions, nearby and text place search, place details, and directions.

Utilities

4

The server itself

Ask the server what it can do, read its own diagnostics, file an issue, or drop the saved token.

Three steps, about five minutes.

Anywhere Node.js 20 or newer is installed.

npx -y google-tools-mcp setup
01

Run setup

The wizard opens the Google Cloud pages you need, enables the APIs, saves your credentials, and registers the server with Claude Code or Codex if they are installed.

02

Restart your client

It picks up the new server and lists the tools. Nothing has asked you to sign in yet, because authorization is deferred until it is needed.

03

Ask for something

The first tool call opens one Google consent screen. Approve it once and the token is saved. Every tool in every category works from that point on.

Prefer to do the Google Cloud part yourself, or running a client with no CLI? The setup guide has the manual credential steps, every client’s registration command, the full environment variable reference, and the fix for the connection timeout people hit most often.

Before you install it

What it doesn’t do yet, written down instead of discovered.

Four tools fail closed over shared HTTP

writeSpreadsheet, batchWrite, clearSpreadsheetRange, and deleteFile have no read-handle wiring yet, so they refuse to run in HTTP mode rather than write without a guard. Use stdio for those, which is the default transport anyway.

Maps needs its own API key

The Maps tools run on a Google Maps Platform key, not on your OAuth credentials, and the setup wizard does not create one. You enable the Geocoding API, Places API (New), and Routes API yourself, then set GOOGLE_MAPS_API_KEY.

One process serves one Google account

Profiles keep accounts separate, but a single running server is bound to one of them. Two accounts at once means two server entries. Horizontal scale is out of scope.

The old snake_case tool names are opt-in

Every pre-3.0 Gmail and Calendar name still works as an alias, but registering all 72 of them by default would grow the tool surface the rename existed to shrink. Set GOOGLE_MCP_ENABLE_LEGACY_ALIASES=true if something you wrote still calls them.

One shade of black does not round-trip

Text this server inserts carries an explicit near-black, #000001, because Google’s API drops an all-zero color value. Reading a document back suppresses that one shade, so text a person deliberately colored #000001 exports without its color span. Every other color survives.

google-tools-mcp is MIT licensed and open source. It was built by Karthik, and I maintain it with them: I shipped version 3, which moved the server onto the official MCP SDK and protocol 2026-07-28, added the read handles, and cut the startup cost. The changelog records every release, one entry per pull request, with what changed and who contributed it.

Bugs and feature requests go in GitHub issues, and CONTRIBUTING.md states the rules a change has to follow before it lands. Pull requests are welcome.