send_emailLABSCO SUMMARY
Batch operations are the reason to pick it.
Anything can send an email; what this adds is bulk inbox work — label changes and deletes across many messages, chunked to stay inside API limits, with failures retried individually and reported per item rather than as one opaque error. The default batch size is 50 and can be lowered when you hit rate limiting. Note that delete_email is a permanent delete, not a move to trash.
What it is
An MCP server for Gmail with an authentication flow built in. It covers the whole mailbox: sending and drafting, reading with proper MIME handling, Gmail-syntax search, label management, and batch operations over many messages at once.
What you get
- Send or draft mail with recipients, cc, bcc and international characters in subject and body —
send_email,draft_email - Read one message by ID, with the plain-text body extracted from nested MIME parts and attachment filenames, types and sizes reported —
read_email - Search with Gmail's own operators —
from:,to:,subject:,has:attachment,after:,before:,is:,label:— combined in one query —search_emails - Move, archive and delete by changing labels on a message —
modify_email,delete_email - Full label management: list, create, update, delete, and get-or-create by name, with
messageListVisibilityandlabelListVisibilityunder your control —list_email_labels,create_label,update_label,delete_label,get_or_create_label - Batch label changes and deletes across many messages, chunked automatically with per-item success and failure reported —
batch_modify_emails,batch_delete_emails
Requirements
A Google Cloud project with the Gmail API enabled and OAuth 2.0 credentials — Desktop app or Web application both work — downloaded and renamed to token.json. The README's npx commands name @raghavared/gmail-mcp, which is not on npm, so run it from a clone: npm install builds it and npm run auth does the one-off sign-in. The flow itself is a one-off auth run: it opens a browser, completes Google sign-in and saves credentials to ~/.gmail-mcp/credentials.json, after which any directory can use them. Web application credentials need http://localhost:3000/v2/auth/google/callback in the authorized redirect URIs, and port 3000 must be free during authentication. A Docker path and a cloud callback form (auth {domain}/v2/auth/google/callback) are documented for headless hosts.
Setup effort
Build from source — git clone https://github.com/raghavared/gmail-mcp
USE CASES
Clearing a backlog of newsletters
Search with Gmail operators, then apply one batch label change or delete across everything that matched.
Filing mail into a project label
Get or create the label by name and move messages onto it without leaving the conversation.
Drafting a reply you want to review first
Create it as a draft so it sits in Gmail until you send it yourself.
Finding an attachment you cannot name
Search with has:attachment and a date window, then read the message to see filenames, types and sizes.
Reorganising labels
List every system and user label, then rename or change visibility on the ones you keep.
13 tools
Listed in project docs. Your client may show a different list.
draft_emailread_emailsearch_emailsmodify_emaildelete_emaillist_email_labelscreate_labelupdate_labeldelete_labelget_or_create_labelbatch_modify_emailsbatch_delete_emailsBEFORE YOU INSTALL
What to know first
Tools you get
13 tools named in the project's documentation.
Requires
node on PATH
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
git clone https://github.com/raghavared/gmail-mcp
cd gmail-mcp && npm installPut the OAuth keys file you downloaded and renamed to token.json in ~/.gmail-mcp:
mkdir -p ~/.gmail-mcp && mv token.json ~/.gmail-mcp/Sign in once — this opens a browser and saves ~/.gmail-mcp/credentials.json:
npm run authMCP Clients
Claude Desktop
{
"mcpServers": {
"gmail": {
"command": "node",
"args": [
"<YOUR_PATH_TO_GMAIL_MCP>/dist/index.js"
]
}
}
}<YOUR_PATH_TO_GMAIL_MCP> is the full path of the gmail-mcp folder you cloned — npm install builds dist/index.js there. The server uses the credentials npm run auth saved in ~/.gmail-mcp.