# Gmail MCP connector

The Gmail connector lets Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent read, draft, label, and send email from a person's own Gmail inbox, with every action logged and limited to what that person can already do.

Source: https://elaichi.ai/connectors/gmail/

## Facts

| | |
| --- | --- |
| Application | Gmail |
| Category | Email |
| AI tools | 57 |
| Authentication | Connects over OAuth |
| Needs your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. 57 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once Gmail is connected

- Summarize unread threads in the shared support inbox today.
- Draft a reply to the latest message from Acme.
- List drafts older than a week and who owns them.

## Connect Gmail in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Gmail.
2. Optionally set Share with, then press Connect.
3. Approve it in Gmail. Gmail's own window opens. Whoever approves it decides what this connection can reach.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Gmail tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect Gmail to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect Gmail to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect Gmail to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Gmail to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Gmail tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Gmail through Elaichi

### Catch up on a prospect thread before a call

Sales. Ask for everything a prospect has said across the whole thread, get the open questions pulled out, and have a reply drafted ready to review before you dial.

### Triage the shared inbox each morning

Support. Have the overnight messages sorted by urgency, labeled by issue type, and a first reply drafted for each, so the desk starts the day with a plan instead of a pile.

### Draft candidate follow-ups after interviews

Recruiting. Pull the interview thread, write a follow-up for each candidate in your own tone, and leave it in drafts for you to read and send.

### Find every invoice that arrived this month

Finance. Search the inbox for supplier invoices and receipts, list the attachments, and label them so nothing is missed at close.

### Clear the inbox of newsletters and notices

Operations. Label or trash the automated notices, subscriptions, and calendar noise in one pass so the messages that need a person stay visible.

### Summarize a long thread and reply for review

Executive assistant. Get a plain summary of a thirty-message thread, a proposed reply saved as a draft, and the thread labeled for follow-up, all without opening each message.

## Frequently asked questions

### How do I connect Gmail to Claude?

Connect Gmail in Elaichi first: pick Gmail from the catalog, click connect, and sign in with your Google account when Google's own sign-in page appears. There is no OAuth application to register and no client ID or secret to generate. Then open Claude, go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp as the address. Sign in to Elaichi when Claude asks, and Gmail is ready to use.

### Does Gmail work with ChatGPT and Cursor as well as Claude?

Yes. Once Gmail is connected in Elaichi, the same address, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client, and the Elaichi Agent. You connect Gmail once and every client you use picks it up.

### What can an AI agent actually do with my Gmail data?

With Gmail connected, an agent can search and read your messages and threads, open attachments, summarize a long conversation, and write replies as drafts for you to check before sending. It can also send a draft, apply and manage labels, mark messages, and move email to the trash. Short, concrete asks such as "find the invoice from Acme last week" work better than long paragraphs of instruction.

### Does connecting Gmail give the AI my whole inbox?

An agent working through Gmail sees only what the person who signed in can see in their own Google account, nothing more. Elaichi can narrow that further, for example read-only access to Gmail with no sending or trashing, but it can never widen what Google already allows. Access follows the person, not the tool.

### Can my team share one Gmail connection?

Yes. One person connects a Gmail account, such as a shared support or sales inbox, and shares it with a team in Elaichi. Teammates work through that Gmail connection without ever handling a password or token, and each of them still signs in to Elaichi as themselves, so the audit log records exactly who read or sent each message.

### Can I stop an agent from deleting or changing things in Gmail?

Yes. Restrictions in Elaichi apply per action, so you can allow reading and drafting in Gmail while blocking sending, trashing messages, or deleting labels. A blocked action is never shown to Claude, ChatGPT, Cursor, or any other client at all, so no prompt, however worded, can reach it.

### What happens to a Gmail connection when someone leaves?

Offboarding a person in Elaichi ends their access to Gmail through every client at once. If they connected a shared Gmail inbox, that connection keeps working for everyone else on the team. Disconnecting Gmail once in Elaichi removes it from Claude, ChatGPT, Cursor, and every other client in one step.

## All 57 Gmail tools

Every tool below is callable through https://api.elaichi.ai/mcp once Gmail is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Gmail messages** (List). Search and list Gmail messages matching a query. Use when locating specific emails by sender, subject, label, or unread state. Pass q with Gmail search syntax (from:, to:, subject:, label:, is:unread, has:attachment, after:, before:). Results are summaries (id and threadId only); hydrate via this resource's get with format=metadata. For conversation previews with snippets, prefer threads list instead. Returns one page; pass the response's next_cursor to fetch subsequent pages.
- **Get single Gmail message by ID** (Get). Read a single Gmail message: sender, subject, date, and snippet by default via format=metadata. Use when you know the exact message to inspect. Pass format=full only when you need the body to reply or summarize — metadata is faster and usually enough. Obtain id from messages list or threads get.
- **Create a Gmail message** (Create). Send a Gmail message on behalf of the authenticated user. Provide the email as plain-text RFC 2822 MIME in the raw field (headers + blank line + body); Truto base64url-encodes it before sending, so do NOT pre-encode. For attachments, build a multipart/mixed MIME and pass the whole thing as raw. Returns the sent message resource including its id and threadId.
- **Update a Gmail message by ID** (Update). Modify labels on a Gmail message (addLabelIds / removeLabelIds) without changing the body. Use when starring, marking read/unread, archiving (remove INBOX), or applying user labels. Does NOT edit subject or body — use drafts for composition. Obtain id from messages.
- **Gmail messages trash** (Action). Move a Gmail message to Trash (recoverable). Use when the user asks to delete an email and a soft delete is acceptable. Prefer this over messages delete. Obtain id from messages.
- **List all Gmail threads** (List). Search and list Gmail conversations (threads) with a preview snippet per thread. Use when browsing recent correspondence or getting a conversation overview. Pass q with Gmail search syntax. For pinpointing one specific email, use messages list instead. Use threads get only when you need every message in the conversation. Returns one page; pass the response's next_cursor to fetch subsequent pages.
- **Get single Gmail thread by ID** (Get). Read a full Gmail conversation (thread) including its messages. Use when summarizing or replying in-thread and you need the complete exchange. For a single message, use messages get instead. Obtain id from threads.
- **Update a Gmail thread by ID** (Update). Modify labels on every message in a Gmail thread. Use when archiving, starring, or labeling a whole conversation at once. Obtain id from threads.
- **Gmail threads trash** (Action). Move an entire Gmail conversation (thread) to Trash, including all messages. Use when the user wants to discard a whole thread. Prefer this over threads delete. Obtain id from threads.
- **Create a Gmail batch** (Create). The batch endpoint allows you to group multiple Gmail API requests (such as sending messages, modifying labels, deleting drafts, etc.) into a single HTTP request. Each request is executed independently, and its responses are returned in a multipart response. This is especially useful for bulk operations such as modifying labels on many messages or sending multiple emails at once.  
- **List all Gmail userinfo** (List). Retrieves basic profile information about the authenticated user in Google Calendar. The response includes essential details such as the user's unique identifier (sub), full name (name), first name (given_name), last name (family_name), profile picture URL (picture), and email address (email).
- **Get single Gmail attachment by ID** (Get). Get a specific attachment from a Gmail message by attachment id. Returns the attachment payload including its base64url-encoded data and size. Required: message_id and id. user_id defaults to "me" (the authenticated user).
- **List all Gmail drafts** (List). List Gmail drafts with each draft id and underlying message/thread ids (no body). Use when browsing unsent mail or resolving a draft to edit or send. Results are summaries; fetch content via this resource's get method. Pass q with Gmail search syntax when filtering. Returns one page; pass the response's next_cursor to fetch subsequent pages.
- **Get single Gmail draft by ID** (Get). Read one Gmail draft including its message headers and snippet (format=metadata) or full MIME (format=full). Use when reviewing or editing an unsent message before send. Obtain id from drafts.
- **Create a Gmail draft** (Create). Create a Gmail draft (an unsent message saved in the mailbox). Pass the email as plain-text RFC 2822 MIME in message.raw and Truto base64url-encodes it before saving. Do not pre-encode. Returns the created draft including its id.
- **Update a Gmail draft by ID** (Update). Update an existing Gmail draft by its id, replacing its content. Pass the email as plain-text RFC 2822 MIME in message.raw and Truto base64url-encodes it before saving. Do not pre-encode. Returns the updated draft.
- **Delete a Gmail draft by ID** (Delete). Permanently delete a Gmail draft by id (not moved to Trash). Use when discarding an unsent message. This delete is permanent and cannot be undone; confirm the exact id and get explicit user confirmation before calling. Obtain id from drafts.
- **Gmail drafts send** (Send). Send an existing Gmail draft by its id. Obtain the id from create draft or list drafts. Returns the sent message including its id and threadId.
- **List all Gmail history** (List). List the history of all changes to the mailbox for user_id after the specified startHistoryId in Gmail. Returns history records with id, messages, messagesAdded, messagesDeleted, labelsAdded, and labelsRemoved fields.
- **List all Gmail labels** (List). List all Gmail labels (system and user-created) in one response. Use when resolving a label name to its id before filtering mail or applying labels. Gmail does not paginate this endpoint. To apply labels to mail, use messages update or threads update — not this method.
- **Get single Gmail label by ID** (Get). Read one Gmail label: name, type, and visibility settings. Use when inspecting a known label id. Obtain id from labels.
- **Create a Gmail label** (Create). Create a user-defined Gmail label. Use when the user wants a new mailbox label for organizing mail. Returns the created label including its id. System labels cannot be created this way.
- **Delete a Gmail label by ID** (Delete). Permanently delete a user-created Gmail label by its immutable id (e.g. Label_31 from labels). Use when removing a custom label. System labels (INBOX, STARRED, …) cannot be deleted — remove them from messages via messages update instead. This delete is permanent and cannot be undone; confirm the exact id and get explicit user confirmation before calling. Obtain id from labels.
- **Update a Gmail label by ID** (Update). Update a user-created Gmail label's name or visibility. Use when renaming a label. Obtain id from labels. System labels cannot be renamed.
- **List all Gmail settings sendas** (List). List send-as aliases for the specified user_id in Gmail. Returns the primary send-as address and any custom 'from' aliases in the sendAs array.
- **Get single Gmail settings senda by ID** (Get). Get the specified send-as alias for user_id in Gmail. Returns the send-as alias details including email address and configuration. Fails with 404 if alias is not found.
- **Create a Gmail settings senda** (Create). Create a custom 'from' send-as alias for user_id in Gmail. Returns the created alias with fields including verification status and sanitized signature if provided.
- **Update a Gmail settings senda by ID** (Update). Update a send-as alias for user_id and id in Gmail. Returns the updated send-as alias including fields like signature and email address. Note: Only service account clients with domain-wide authority can update non-primary addresses.
- **Delete a Gmail settings senda by ID** (Delete). Delete the specified send-as alias for user_id in Gmail. Revokes any verification required for using the alias. Returns an empty JSON object on success.
- **List all Gmail settings filters** (List). Get message filters for a Gmail user with user_id. Returns a list of filters including criteria and actions for each filter.
- **Get single Gmail settings filter by ID** (Get). Get a filter by id for the user identified by user_id in Gmail. Returns the filter's id, criteria, and action fields.
- **Create a Gmail settings filter** (Create). Create a filter for the user identified by user_id in Gmail. Returns the created filter including its id, criteria, and action. Note: maximum of 1,000 filters can be created.
- **Delete a Gmail settings filter by ID** (Delete). Delete a filter by id for the user_id in Gmail. Returns an empty JSON object on success.
- **List all Gmail settings forwarding addresses** (List). Get the list of forwarding addresses for the specified user_id in Gmail. Returns forwardingAddresses array containing addresses that may be used for forwarding.
- **Get single Gmail settings forwarding address by ID** (Get). Get the specified forwarding address for user_id in Gmail. Returns forwardingEmail and verification status fields.
- **Create a Gmail settings forwarding address** (Create). Create a forwarding address for user_id in Gmail. Returns the forwarding address resource including verification status which may be 'pending' if ownership verification is required.
- **Delete a Gmail settings forwarding address by ID** (Delete). Delete the specified forwarding address for user_id in Gmail. Returns an empty JSON object on success. Requires forwardingEmail as id.
- **List all Gmail settings delegates** (List). List delegates for the specified userId in Gmail. Returns delegates array with delegate details including verification status.
- **Get single Gmail settings delegate by ID** (Get). Get the specified delegate for user_id in Gmail. Returns delegate's email and related delegate information. Note: delegateEmail must be the primary email address.
- **Create a Gmail settings delegate** (Create). Create a delegate for the user identified by user_id in Gmail. Returns the delegate's email address and verification status. The delegate must be in the same Google Workspace organization and is added with status accepted without verification email.
- **Delete a Gmail settings delegate by ID** (Delete). Remove the specified delegate by delegate_email for the user identified by user_id in Gmail. The delegate user must be referred to by their primary email address. Response is an empty JSON object.
- **List all Gmail settings cse keypairs** (List). List client-side encryption key pairs for a user in Gmail. Requires user_id. Returns cseKeyPairs array with key pair details and nextPageToken for pagination.
- **Get single Gmail settings cse keypair by ID** (Get). Get an existing client-side encryption key pair by user_id and id in Gmail. Returns key pair details including encryption keys and metadata.
- **Create a Gmail settings cse keypair** (Create). Create and upload a client-side encryption S/MIME public key certificate chain and private key metadata for the authenticated user in Gmail. Requires user_id. Returns the created CseKeyPair including public key certificate chain and metadata.
- **List all Gmail settings cse identities** (List). List client-side encrypted identities for a user in Gmail. Requires user_id. Returns cseIdentities array with identity details and nextPageToken for pagination.
- **Get single Gmail settings cse identity by ID** (Get). Get client-side encryption identity configuration for user_id and id in Gmail. Returns fields of the CseIdentity resource.
- **Create a Gmail settings cse identity** (Create). Create and configure a client-side encryption identity authorized to send mail from the user account in Gmail. Requires user_id. Returns the created CseIdentity with its configuration details.
- **Update a Gmail settings cse identity by ID** (Update). Update a client-side encryption identity in Gmail by associating a different key pair. Requires user_id and id (emailAddress). Returns the updated CseIdentity fields including emailAddress and key_pair_configuration.
- **Delete a Gmail settings cse identity by ID** (Delete). Delete a client-side encryption identity for the authenticated user in Gmail. Requires user_id and cse_email_address. The identity cannot be restored after deletion.
- **Get single Gmail settings auto forwarding by ID** (Get). Get the auto-forwarding setting for the specified account in Gmail. Requires user_id. Returns auto-forwarding configuration including enabled status, email address, and disposition.
- **Update a Gmail settings auto forwarding by ID** (Update). Update the auto-forwarding setting for the specified user_id in Gmail. Requires a verified forwarding address when auto-forwarding is enabled. Returns the updated AutoForwarding configuration.
- **Get single Gmail settings imap by ID** (Get). Get IMAP settings for the user identified by user_id in Gmail. Returns fields including enabled status, auto-expunge, and folder size limits.
- **Update a Gmail settings imap by ID** (Update). Update IMAP settings for a user in Gmail. Requires userId as the user's email address or 'me'. Returns the updated ImapSettings object.
- **Get single Gmail settings language by ID** (Get). Get language settings for a user in Gmail. Requires user_id. Returns language code and display name fields in the response.
- **Update a Gmail settings language by ID** (Update). Update language settings for a user in Gmail using user_id. Returns the saved displayLanguage which may differ from the requested value if a close variant is used.
- **Get single Gmail settings pop by ID** (Get). Get POP settings for a user in Gmail. Requires user_id. Returns fields including accessWindow, disposition, and enable status.
- **Update a Gmail settings pop by ID** (Update). Update POP settings for the user identified by user_id in Gmail. Returns the updated PopSettings including access window and disposition fields.
