multi-google-calendar-gmail-mcp
Enables multi-account Gmail and Google Calendar access through MCP, allowing operations across multiple Google accounts with a single tool call.
README
multi-google-calendar-gmail-mcp
One small Python file that gives Claude (or any MCP client) Gmail and
Google Calendar across as many Google accounts as you want — a personal
Gmail, three Workspace domains, whatever. Each account gets a nickname;
every tool takes a nickname or "all" to sweep the whole fleet in one call.
"find every unread invoice across all five inboxes and label them Bookkeeping" — one tool call.
Why this one
- Multi-account is the whole design, not a bolt-on. Most self-hosted Gmail MCPs authenticate one account. Here, connecting another account is one command + one browser click, and cross-account operations are native.
- Minimal. One readable
server.py, three dependencies. If you want to know what it does, you can just read it. - Bring your own credentials. Nothing is hosted, nothing phones home. You create your own (free) Google Cloud OAuth client, and your account keys live in a git-ignored folder on your machine. This repo never sees them.
Pairs naturally with apple-suite-mcp: that one reads whatever your Mac's built-in apps already see (zero setup, macOS only); this one speaks Google's APIs directly (real labels, batch operations up to 500 messages, drafts, calendar invites with attendees) and runs anywhere Python runs — including a headless Linux box.
Setup
Requires uv (brew install uv on macOS).
git clone https://github.com/travisthetrashpanda/multi-google-calendar-gmail-mcp.git ~/multi-google-calendar-gmail-mcp
- One-time Google Cloud setup (~15 min, free): follow
SETUP.md — create a Cloud project, enable the Gmail and
Calendar APIs, publish the consent screen (avoids 7-day token expiry),
create a Desktop-app OAuth client, and drop
credentials.jsonin this folder. Heads-up: Google rejects app names containing the word "Google". - Connect the accounts you choose (repeat per account, any alias you
like — only accounts you connect are ever visible):
Changed your mind?cd ~/multi-google-calendar-gmail-mcp uv run python server.py connect work uv run python server.py connect personaluv run python server.py disconnect workdeletes that account's key. - Verify:
uv run python server.py check - Register with your MCP client — e.g. Claude Code:
or in a JSON MCP config:claude mcp add --scope user google -- uv run --directory ~/multi-google-calendar-gmail-mcp python server.py{ "mcpServers": { "google": { "command": "uv", "args": ["run", "--directory", "/Users/YOU/multi-google-calendar-gmail-mcp", "python", "server.py"] } } }
Tools
| Area | Tools |
|---|---|
| Accounts | accounts_list, check |
| Gmail | gmail_search (full Gmail query syntax), gmail_read, gmail_labels, gmail_modify (batch label/archive/mark-read, ≤500 ids), gmail_draft, gmail_send |
| Calendar | calendar_list, calendar_events, calendar_create_event (with attendee invitations) |
Test any tool from the command line:
uv run python server.py test gmail_search '{"query": "is:unread", "account": "all", "limit": 5}'
Scoping access (optional)
You already control access by choosing what to connect — but if you want a
client to see only a subset of connected accounts (or to remove tools
entirely), copy config.example.json to config.json:
{
"accounts": ["work", "personal"],
"disabled_tools": ["gmail_send"]
}
Accounts not listed become invisible to every tool; tools in
disabled_tools are never even registered with the MCP client. Omit a key
(or the whole file) to allow everything. check reports active scoping.
Safety notes
- There is deliberately no delete/trash tool — the most destructive operation is archiving (removing from inbox), which is reversible.
gmail_sendand attendee invitations send real email; MCP clients should confirm with the user first.credentials.jsonandtokens/are git-ignored. Treat thetokens/folder like passwords — don't put it in cloud-synced directories.
Credits
Sibling project of apple-suite-mcp; the two split the work of giving an AI assistant a complete view of your accounts — locally-visible vs. API-native.
Say thanks
This project is free to use, no strings attached. If it's useful to you, a ⭐ on this repo or a shout-out to @travisthetrashpanda is always appreciated — and if you build something on top of it, a link back here helps others find it.
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.