Integrate Gmail MCP server into your Slack workspace for instant access to your AI agent.
Tools that your AI agent can use through this MCP server to interact with Gmail
Update the signature for the primary email address. See the documentation
Update the signature for a specific email address in an organization. A Google Cloud service account with delegated domain-wide authority is required for this action. See the documentation
Send a new email OR reply to an existing thread from the authenticated Gmail account. For a fresh message, set to/subject/body; leave inReplyToMessageId blank. To reply to a thread, pass the id of any message in that thread as inReplyToMessageId — the tool preserves threading (References, In-Reply-To, threadId) and auto-prefixes Re: on the subject. Use Find Emails or Get Thread to locate the message ID. Set replyAll: true to fan-out to the original From/To/Cc (minus the user's own address); otherwise only the original sender is addressed. bodyType controls whether body is treated as plain text (default) or HTML. To send to yourself, pass "me" in to — the action resolves it to the authenticated user's email address. No pre-call to Get Current User required. Attachments: for small inline content (the common case in MCP / cloud runs), set attachmentContent to the file's text contents and attachmentFilename to its name. For files already on disk (Pipedream workflows, File Stash), use attachments[] + attachmentFilenames[] instead. See the documentation.
Add and/or remove labels on one or more Gmail messages in a single call. In Gmail, most inbox-state operations are label mutations under the hood, so this one tool covers archive / trash / untrash / star / unstar / mark-read / mark-unread / apply-label / remove-label.
Common recipes (pass these in addLabels / removeLabels):
removeLabels: ["INBOX"]addLabels: ["TRASH"]removeLabels: ["TRASH"], addLabels: ["INBOX"]addLabels: ["STARRED"]removeLabels: ["STARRED"]removeLabels: ["UNREAD"]addLabels: ["UNREAD"]addLabels: ["Clients/Acme"] (pass the name or the label ID)addLabels: ["Clients/Acme"], removeLabels: ["INBOX"]addLabels and removeLabels accept either raw label IDs (system labels like INBOX, STARRED, UNREAD, TRASH) or user-visible label names — names are resolved via List Labels before the API call. Use Create Label first if you need to apply a brand-new label that doesn't yet exist. See the documentation.
Fetch an entire Gmail thread (conversation) by thread ID — returns every message in order with headers, decoded body text, and attachment metadata. Use this after Find Emails when the user wants the full conversation rather than a single message. Each result from Find Emails includes a threadId you can pass here. With format: full (default) each message includes decoded text/html bodies and attachment metadata. Use format: metadata to skip bodies and get only headers + labelIds — useful for large threads. Responses are hard-capped at 100k characters — oversized threads fall back to metadata-level detail (or are further truncated from the tail) with a [truncated] marker so the caller knows to narrow the request. See the documentation.
Retrieves available options for the Signature field.
List all send as aliases for the authenticated user. See the documentation
List every label in the authenticated user's mailbox (system labels like INBOX, SENT, TRASH, STARRED, UNREAD and user-created labels). Call this before Modify Labels or Find Emails when you need to target a label that the user named rather than an obvious system label — it resolves a name like Clients/Acme to its opaque label ID. User labels are returned first, then system labels. See the documentation.
Retrieves available options for the Send as a Delegate field.
Get a send as alias for the authenticated user. See the documentation
Returns the authenticated Gmail user's name, email address, and mailbox stats (total messages and threads). Call this first when the user says 'my emails', 'my inbox', or needs identity context. Use the returned emailAddress to identify the user's own messages in Find Emails results. See the documentation.
Search the user's Gmail mailbox with Gmail's native query syntax and return matching messages (headers + snippet by default; full bodies when requested). Use this tool for every "find", "search", "list my", or "show me" email intent. The q parameter accepts the full Gmail search operator set — combine operators freely: from:[email protected] is:unread newer_than:7d has:attachment subject:"DNA sequences". Common operators: from:, to:, subject:, has:attachment, filename:pdf, is:unread, is:starred, label:INBOX, newer_than:7d, older_than:1m, after:2025/01/01, before:2025/12/31, category:primary. labelIds accepts either raw label IDs (INBOX, STARRED) or user-visible names (Clients/Acme) — names are resolved server-side via List Labels. Each returned message carries id, threadId, labelIds, the decoded subject/sender/recipient/date, and a snippet. With format: "full" the decoded body text and payload.parts[].body.attachmentId + filename + mimeType are also included — feed those into Download Attachment, or feed threadId into Get Thread for the whole conversation. format defaults to metadata (headers + snippet only) to keep the response small; set it to full only when you actually need body text or attachment IDs. Responses are hard-capped at 100k characters — anything beyond is truncated with a [truncated] marker so the caller knows to narrow the query. See the documentation and Gmail search operators.
Download a Gmail message attachment to /tmp and return its path + metadata. File Stash syncs the file and exposes a presigned download URL so the caller can retrieve it. Call Find Emails (with format: "full") or Get Thread first — attachment IDs only appear in full-format message reads; each returned message's payload.parts[] enumerates attachments as { body.attachmentId, filename, mimeType }. Pass the enclosing message's id as messageId and the part's body.attachmentId as attachmentId. If filename is omitted, the action looks up the attachment's filename from the message payload. Set convertToPdf: true to convert image / HTML / plain-text / DOCX attachments to PDF during download; other MIME types are rejected. See the documentation.
Immediately and permanently delete a user-created label from the authenticated Gmail mailbox, removing it from every message and thread it was applied to. Only user-created labels can be deleted — Gmail's built-in system labels (INBOX, SENT, SPAM, TRASH, etc.) cannot. This deletes the label definition itself; to merely detach a label from specific messages without removing it, use Modify Labels with removeLabels instead. See the documentation.
Create a new user label in the authenticated Gmail mailbox and return its ID. Call this before Modify Labels whenever the label the user wants to apply doesn't yet exist — List Labels will tell you what's already there. Idempotent: if a label with the same name already exists, the action swallows the 409, looks it up by name, and returns the existing label with alreadyExisted: true so the caller can proceed. Nested labels are expressed with / — e.g. Clients/Acme creates or targets a sub-label under Clients. color is optional; when provided, both textColor and backgroundColor must be supplied together and must come from Gmail's fixed palette. See the documentation.
Create an unsent draft in the authenticated Gmail account. Same parameter shape as Send Email — the difference is the message is saved to Drafts instead of being sent. For a reply-draft, pass inReplyToMessageId (from Find Emails / Get Thread); the subject, References, In-Reply-To, and threadId are derived from the referenced message. bodyType controls whether body is treated as plain text (default) or HTML. To draft to yourself, pass "me" in to — the action resolves it to the authenticated user's email address. No pre-call to Get Current User required. Attachments use file-ref inputs and require matching attachmentFilenames[] entries. See the documentation.
Suspend the workflow until approved by email. See the documentation
Archive multiple emails at once. See the documentation
Remove label(s) from an email message. See the docs
Moves the specified message to the trash. See the documentation
Archive an email message. See the documentation
Add label(s) to an email message. See the docs