Gives Claude direct access to the Gmail API across multiple accounts simultaneously. You get the full search syntax, thread-aware replies, draft creation, and label management without switching contexts. Useful when you're juggling personal, work, and side project inboxes and need to triage, respond, or batch organize from a single conversation. OAuth tokens live in a local SQLite database and refresh automatically. Ships with a CLI for adding accounts outside of Claude, then exposes 19 tools covering everything from search and send to archiving and marking read. If you're already using Claude Desktop for email-heavy workflows, this turns it into a multi-account client.
A Model Context Protocol (MCP) server that lets Claude Desktop manage multiple Gmail accounts simultaneously. Listed on the official Anthropic MCP registry and published on npm.

~/.gmail-mcp-tokens.db — never committed to gitnpm install -g multi-gmail-mcp
This registers two global commands: gmail-mcp (the MCP server) and gmail-mcp-cli (account manager).
You only need to do this once.
gmail.readonly, gmail.send, gmail.modify, gmail.labels~/.gmail-mcp-oauth.jsonAlternatively, set environment variables in the Claude Desktop config (see below).
# Add accounts (opens browser for Google sign-in)
gmail-mcp-cli add personal@gmail.com
gmail-mcp-cli add work@company.com
# List authenticated accounts
gmail-mcp-cli list
# Remove an account
gmail-mcp-cli remove work@company.com
Tokens are saved to ~/.gmail-mcp-tokens.db and refreshed automatically.
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"multi-gmail": {
"command": "gmail-mcp"
}
}
}
If you prefer environment variables over ~/.gmail-mcp-oauth.json:
{
"mcpServers": {
"multi-gmail": {
"command": "gmail-mcp",
"env": {
"GOOGLE_CLIENT_ID": "your-client-id.apps.googleusercontent.com",
"GOOGLE_CLIENT_SECRET": "your-client-secret"
}
}
}
}
Restart Claude Desktop after saving. Click the hammer icon to confirm 19 tools are loaded.
| Tool | Description |
|---|---|
list_accounts | List all authenticated Gmail accounts |
initiate_auth | Start OAuth flow — returns a URL to open in browser |
complete_auth | Finalize auth after completing Google sign-in |
remove_account | Remove an account and its stored credentials |
| Tool | Description |
|---|---|
search_emails | Search with Gmail syntax (is:unread, from:, after:, etc.) |
get_email | Fetch full email content by message ID |
| Tool | Description |
|---|---|
send_email | Send an email (supports To, CC, BCC) |
reply_to_email | Reply in thread, preserving References headers |
create_draft | Save an email as a draft |
| Tool | Description |
|---|---|
list_labels | List all Gmail labels for an account |
add_label | Add one or more labels to a message |
remove_label | Remove one or more labels from a message |
archive_email | Remove from Inbox |
mark_as_read | Remove the UNREAD label |
mark_as_unread | Add the UNREAD label |
List all my authenticated Gmail accounts.
Search my work@company.com inbox for unread emails from this week.
Reply to that email from my personal account saying I'll be there Saturday.
Send an email from personal@gmail.com to friend@example.com
with subject "Dinner plans" and body "Are you free Saturday?"
Archive everything older than a week in my side-project inbox that's already read.
Check both my accounts for emails from GitHub and summarize them.
~/.gmail-mcp-oauth.json and ~/.gmail-mcp-tokens.db live in your home directory — outside the project, never committed.gitignore excludes *.db, .gmail-mcp-oauth.json, and .envSee SECURITY.md for full details: token storage, network behavior, scope rationale, revocation steps, and how to report a vulnerability.
Listed on the official Anthropic MCP registry:
io.github.gx-55/multi-gmail-mcp
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.gx-55"
multi-gmail-mcp/
├── bin/
│ ├── gmail-mcp.js # Entry point for the MCP server command
│ └── gmail-mcp-cli.js # Entry point for the CLI command
├── src/
│ ├── server.js # MCP server — all 19 tools
│ ├── gmail-client.js # Gmail API wrapper
│ ├── auth.js # OAuth2 flow with auto-refresh
│ ├── db.js # SQLite token storage (node:sqlite)
│ └── cli.js # Account management CLI
└── package.json
"No OAuth credentials found"
Make sure ~/.gmail-mcp-oauth.json exists or set GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET in the Claude Desktop config.
"Account not found. Authenticate it first"
Run gmail-mcp-cli add your@gmail.com before using that account in Claude.
Tools not appearing in Claude Desktop
Confirm gmail-mcp is in your PATH (which gmail-mcp) and restart Claude Desktop.
Token expired errors
Tokens auto-refresh if a valid refresh token is stored. If refresh fails, remove the account and re-authenticate: gmail-mcp-cli remove your@gmail.com && gmail-mcp-cli add your@gmail.com.
GOOGLE_CLIENT_IDGoogle OAuth2 client ID from your Google Cloud project (alternative to ~/.gmail-mcp-oauth.json)
GOOGLE_CLIENT_SECRETsecretGoogle OAuth2 client secret from your Google Cloud project (alternative to ~/.gmail-mcp-oauth.json)
io.github.mindstone/mcp-server-microsoft-teams
com.mintmcp/outlook-email
helbertparanhos/resend-email-mcp
marlinjai/email-mcp
io.github.mindstone/mcp-server-email-imap
io.github.osamahassouna/email-playbook-mcp