# Gmail connector

[Product](https://paperclip.ing/product/) / [Connectors](https://paperclip.ing/product/connectors/) / Gmail

Search and read mail and prepare drafts for review.

Category: [Communication](/product/connectors/?category=communication)
Tools from: [Gmail](https://developers.google.com/workspace/gmail/api/reference/mcp)
Sign-in: Google authorization
Works as: Agent tool

List recorded: Sep 30, 2026

## Overview

Paperclip’s Gmail connector gives your AI agents tools to search and read mail and create drafts through Google’s MCP server. Each tool can be Allowed, Ask first or Off.

Complete Google authorization and review quarantined tools before using search and read actions. To create drafts, connect with the Read & create drafts group. Label changes, Trash and Spam actions remain disabled in Paperclip.

## What agents can do with Gmail

- Find a conversation and read its messages (`search_threads`, `get_thread`, `get_message`)
- Prepare a reply with the Read & create drafts group (`get_thread`, `create_draft`, `get_draft`)
- Review drafts before editing them in Gmail (`list_drafts`, `get_draft`)

## How to connect Gmail

1. In Paperclip, open Connectors, find Gmail and select Connect.
2. On the Access step, choose whose mailbox to connect and which agents may use it.
3. Choose Connect with Paperclip where offered or Use your own Google OAuth app. Select a capability group and complete Google authorization; follow the setup guide for registration requirements.

[Setup guide](https://docs.paperclip.ing/connectors/gmail-setup/)

## Gmail tools for agents (23)



### Read (6)

<div data-tool-name="get_draft" data-tool-class="read">
<code>get_draft</code>
<p class="c4-description-summary">Retrieves a specific draft email from the authenticated user's Gmail account by ID, including its viewUrl for viewing and editing in the Gmail Web UI.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for get_draft">Full description</summary>

<pre class="faq-answer c4-description-text">Retrieves a specific draft email from the authenticated user's Gmail account by ID, including its `viewUrl` for viewing and editing in the Gmail Web UI.

The optional `messageFormat` parameter controls the format of the draft returned. Use `MINIMAL` to return snippet and key headers, `METADATA_ONLY` to exclude snippet, subject, and body, `FULL_CONTENT` for the complete draft, or `RAW` for the raw MIME message content.</pre>
</details>
</div>

<div data-tool-name="get_message" data-tool-class="read">
<code>get_message</code>
<p class="c4-description-summary">Retrieves a specific email message from the authenticated user's Gmail account by its unique message ID, including its viewUrl.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for get_message">Full description</summary>

<pre class="faq-answer c4-description-text">Retrieves a specific email message from the authenticated user's Gmail account by its unique message ID, including its `viewUrl`.

Use this tool to inspect a single, individual email when you already know its message ID. If the user wants to read a specific email in detail, check the exact wording of a message, or examine attachment metadata for a single email, this is the right tool. It is not suitable for retrieving entire conversations or viewing back-and-forth discussion threads; use the 'get_thread' tool instead.
Note: This tool does not support retrieving draft messages. To view drafts, use the 'list_drafts' tool instead.
Key indicators include if the user asks for the full content of a specific message ID returned by a previous search, or if the query asks to inspect a specific individual email rather than an entire thread.
Example user prompts are: &quot;Get the full text of message ID 18f123456789abcd.&quot;, &quot;Read the latest message in that thread from Alice.&quot;, and &quot;What are the attachment names in the email I just received from HR?&quot;&#32;

The optional `messageFormat` parameter controls the format of the message returned. By default (or with `FULL_CONTENT`), it returns the full content of the message. We recommend using `PLAIN_TEXT`, which returns the plain text body without the HTML body. Use `MINIMAL` to include only subject and snippet (excluding body). Use `METADATA_ONLY` to include only basic metadata (message ID, thread ID, viewUrl, labels, timestamp, and size estimate).</pre>
</details>
</div>

<div data-tool-name="get_thread" data-tool-class="read">
<code>get_thread</code>
<p class="c4-description-summary">Retrieves a specific email thread from the authenticated user's Gmail account, including its viewUrl and a list of its messages (each with their own viewUrl).</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for get_thread">Full description</summary>

<pre class="faq-answer c4-description-text">Retrieves a specific email thread from the authenticated user's Gmail account, including its `viewUrl` and a list of its messages (each with their own `viewUrl`).

Note: This tool does not support retrieving drafts. Any draft messages within a thread are omitted. To view drafts, use the `list_drafts` tool instead.

The optional `messageFormat` parameter controls the format of the messages returned. By default (or with `FULL_CONTENT`), it returns the full content of messages. We recommend using `PLAIN_TEXT`, which returns the plain text body without the HTML body. Use `MINIMAL` to include only subject and snippet (excluding body). Use `METADATA_ONLY` to include only basic metadata (message ID, thread ID, viewUrl, labels, timestamp, and size estimate).</pre>
</details>
</div>

<div data-tool-name="list_drafts" data-tool-class="read">
<code>list_drafts</code>
<p class="c4-description-summary">Lists draft emails from the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for list_drafts">Full description</summary>

<pre class="faq-answer c4-description-text">Lists draft emails from the authenticated user's Gmail account.

This tool can filter drafts based on a query string and supports pagination. It returns a list of drafts, including their IDs, subjects (unless `view` is set to `DRAFT_VIEW_METADATA_ONLY`), and `viewUrl`. `page_token` can be used to paginate the results. To retrieve subsequent pages of results, use the `page_token` returned in the previous response.

The `view` parameter controls which fields are populated in the response. By default (or with `DRAFT_VIEW_FULL`), it returns full content. Use `DRAFT_VIEW_METADATA_ONLY` to exclude sensitive content like subject and body.

Note: An empty JSON object `{}` represents zero matching items, not an error.</pre>
</details>
</div>

<div data-tool-name="list_labels" data-tool-class="read">
<code>list_labels</code>
<p class="c4-description-summary">Lists all labels available in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for list_labels">Full description</summary>

<pre class="faq-answer c4-description-text">Lists all labels available in the authenticated user's Gmail account. Use this tool to discover the `id` of a label before calling `label_thread`, `unlabel_thread`, `label_message`, or `unlabel_message`. Note: the system labels, `DRAFT` and `SENT`, cannot be set on messages and are read only.

Note: An empty JSON object `{}` represents zero matching items, not an error.</pre>
</details>
</div>

<div data-tool-name="search_threads" data-tool-class="read">
<code>search_threads</code>
<p class="c4-description-summary">Lists email threads from the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for search_threads">Full description</summary>

<pre class="faq-answer c4-description-text">Lists email threads from the authenticated user's Gmail account.

This tool can filter threads based on a query string and supports pagination. It returns a list of threads, including their IDs, `viewUrl`, and related messages (each with their own `viewUrl`). Each related message contains details like a snippet of the message body, the subject, the sender, the recipients etc. The `view` parameter controls which fields are populated in the related messages. By default (or with `THREAD_VIEW_MINIMAL`), it includes subject and snippet. Use `THREAD_VIEW_METADATA_ONLY` to exclude subject and snippet. Note that the full message bodies are not returned by this tool; use the 'get_thread' tool with a thread ID to fetch the full message body if needed. Threads with excluded criteria may still appear in the results. This occurs because Gmail identifies matching messages first. For example, if you search for -is:starred, Gmail will find an entire thread if it contains at least one unstarred message, even if other emails in that same conversation are starred.

Note: An empty JSON object `{}` represents zero matching items, not an error.</pre>
</details>
</div>

### Write (17)

<div data-tool-name="apply_sensitive_message_label" data-tool-class="write">
<code>apply_sensitive_message_label</code>
<p class="c4-description-summary">Prefer trash_message or mark_message_spam instead.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for apply_sensitive_message_label">Full description</summary>

<pre class="faq-answer c4-description-text">Prefer `trash_message` or `mark_message_spam` instead.

Adds a sensitive label (Trash or Spam) to a single message in the authenticated user's Gmail account.

Use `apply_sensitive_message_label` when applying Trash or Spam to exactly 1 message. To apply sensitive labels to multiple messages, use `batch_apply_sensitive_message_labels` instead. If the message belongs to a thread that should be labeled as a whole, prefer `trash_thread` or `mark_thread_spam`.

To find the message ID, use tools like `search_threads` or `get_thread`. To find the draft message ID, use tools like `list_drafts`.</pre>
</details>
</div>

<div data-tool-name="apply_sensitive_thread_label" data-tool-class="write">
<code>apply_sensitive_thread_label</code>
<p class="c4-description-summary">Prefer trash_thread or mark_thread_spam instead.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for apply_sensitive_thread_label">Full description</summary>

<pre class="faq-answer c4-description-text">Prefer `trash_thread` or `mark_thread_spam` instead.

Adds a sensitive label (Trash or Spam) to a single thread in the authenticated user's Gmail account. This operation affects all messages currently in the thread.

Use `apply_sensitive_thread_label` when applying Trash or Spam to exactly 1 thread. To apply sensitive labels to multiple threads, use `batch_apply_sensitive_thread_labels` instead.

To find the thread ID, use the `search_threads` tool first.</pre>
</details>
</div>

<div data-tool-name="create_draft" data-tool-class="write">
<code>create_draft</code>
<p class="c4-description-summary">Creates a new draft email in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for create_draft">Full description</summary>

<pre class="faq-answer c4-description-text">Creates a new draft email in the authenticated user's Gmail account.

This tool takes recipient addresses (`to`, `cc`, `bcc`), a `subject`, and body content as inputs. Plain text body content can be provided in `body` (do NOT format `body` with Markdown), and rich-text HTML content can be provided in `htmlBody` (use valid HTML tags for formatting; if both are provided, `body` serves as the plain-text alternative). If the draft is created as a reply to an existing message, the ID of the original message should be passed to the tool in the `replyToMessageId` field.

Returns a Draft object with the `id`, `threadId`, and `viewUrl` fields populated.</pre>
</details>
</div>

<div data-tool-name="create_label" data-tool-class="write">
<code>create_label</code>
<p class="c4-description-summary">Creates a new label in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for create_label">Full description</summary>

<pre class="faq-answer c4-description-text">Creates a new label in the authenticated user's Gmail account.
Supports creating nested labels (sub-labels) using a forward slash (e.g., 'Projects/Alpha/Sprint-1').
By default, parent labels will be automatically created if they do not exist.</pre>
</details>
</div>

<div data-tool-name="label_message" data-tool-class="write">
<code>label_message</code>
<p class="c4-description-summary">Adds one or more labels to a specific message in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for label_message">Full description</summary>

<pre class="faq-answer c4-description-text">Adds one or more labels to a specific message in the authenticated user's Gmail account.

To find the message ID, use tools like `search_threads` or `get_thread`. If unsure of a user label's ID, use the `list_labels` tool first to discover available labels and their IDs.
To move a specific message to Trash or mark it as Spam, please use the `trash_message` or `mark_message_spam` tool instead.</pre>
</details>
</div>

<div data-tool-name="label_thread" data-tool-class="write">
<code>label_thread</code>
<p class="c4-description-summary">Adds labels to an entire thread in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for label_thread">Full description</summary>

<pre class="faq-answer c4-description-text">Adds labels to an entire thread in the authenticated user's Gmail account. This operation affects all messages currently in the thread and any future messages added to it.

If unsure of the thread ID, use the `search_threads` tool first.

If unsure of a user label's ID, use the `list_labels` tool first to discover available labels and their IDs. To move a thread to Trash or mark it as Spam, please use the `trash_thread` or `mark_thread_spam` tool instead.</pre>
</details>
</div>

<div data-tool-name="mark_message_spam" data-tool-class="write">
<code>mark_message_spam</code>
<p class="c4-description-summary">Marks a specific message as Spam in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for mark_message_spam">Full description</summary>

<pre class="faq-answer c4-description-text">Marks a specific message as Spam in the authenticated user's Gmail account.

To find the message ID, use tools like `search_threads` or `get_thread`.</pre>
</details>
</div>

<div data-tool-name="mark_thread_spam" data-tool-class="write">
<code>mark_thread_spam</code>
<p class="c4-description-summary">Marks an entire thread as Spam in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for mark_thread_spam">Full description</summary>

<pre class="faq-answer c4-description-text">Marks an entire thread as Spam in the authenticated user's Gmail account. This operation affects all messages currently in the thread.

Use `mark_thread_spam` when marking a thread as spam, even if it currently contains only 1 message. Marking spam at the thread level ensures all current messages in the thread are marked as Spam. If unsure of the thread ID, use the `search_threads` tool first.</pre>
</details>
</div>

<div data-tool-name="trash_message" data-tool-class="write">
<code>trash_message</code>
<p class="c4-description-summary">Moves a specific message to the Trash in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for trash_message">Full description</summary>

<pre class="faq-answer c4-description-text">Moves a specific message to the Trash in the authenticated user's Gmail account.

Use `trash_message` when targeting a specific message within a thread. To trash an entire thread or a single-message thread, prefer `trash_thread`.

To find the message ID, use tools like `search_threads` or `get_thread`. To find the draft message ID, use tools like `list_drafts`.</pre>
</details>
</div>

<div data-tool-name="trash_thread" data-tool-class="write">
<code>trash_thread</code>
<p class="c4-description-summary">Moves an entire thread to the Trash in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for trash_thread">Full description</summary>

<pre class="faq-answer c4-description-text">Moves an entire thread to the Trash in the authenticated user's Gmail account. This operation affects all messages currently in the thread.

Use `trash_thread` when trashing a thread, even if it currently contains only 1 message. Trashing at the thread level ensures all current messages in the thread are moved to Trash. If unsure of the thread ID, use the `search_threads` tool first.</pre>
</details>
</div>

<div data-tool-name="unlabel_message" data-tool-class="write">
<code>unlabel_message</code>
<p class="c4-description-summary">Removes one or more labels from a specific message in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for unlabel_message">Full description</summary>

<pre class="faq-answer c4-description-text">Removes one or more labels from a specific message in the authenticated user's Gmail account. To find the message ID, use tools like `search_threads` or `get_thread`. If unsure of a user label's ID, use the `list_labels` tool first to discover available labels and their IDs.</pre>
</details>
</div>

<div data-tool-name="unlabel_thread" data-tool-class="write">
<code>unlabel_thread</code>
<p class="c4-description-summary">Removes labels from an entire thread in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for unlabel_thread">Full description</summary>

<pre class="faq-answer c4-description-text">Removes labels from an entire thread in the authenticated user's Gmail account. If unsure of the thread ID, use the `search_threads` tool first. If unsure of a user label's ID, use the `list_labels` tool first.</pre>
</details>
</div>

<div data-tool-name="unmark_message_spam" data-tool-class="write">
<code>unmark_message_spam</code>
<p class="c4-description-summary">Unmarks a specific message as Spam in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for unmark_message_spam">Full description</summary>

<pre class="faq-answer c4-description-text">Unmarks a specific message as Spam in the authenticated user's Gmail account.

To find the message ID, use tools like `search_threads` or `get_thread`.</pre>
</details>
</div>

<div data-tool-name="unmark_thread_spam" data-tool-class="write">
<code>unmark_thread_spam</code>
<p class="c4-description-summary">Unmarks an entire thread as Spam in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for unmark_thread_spam">Full description</summary>

<pre class="faq-answer c4-description-text">Unmarks an entire thread as Spam in the authenticated user's Gmail account.

If unsure of the thread ID, use the `search_threads` tool first.</pre>
</details>
</div>

<div data-tool-name="untrash_message" data-tool-class="write">
<code>untrash_message</code>
<p class="c4-description-summary">Removes a specific message from the Trash in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for untrash_message">Full description</summary>

<pre class="faq-answer c4-description-text">Removes a specific message from the Trash in the authenticated user's Gmail account.

To find the message ID, use tools like `search_threads` or `get_thread`.</pre>
</details>
</div>

<div data-tool-name="untrash_thread" data-tool-class="write">
<code>untrash_thread</code>
<p class="c4-description-summary">Removes an entire thread from the Trash in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for untrash_thread">Full description</summary>

<pre class="faq-answer c4-description-text">Removes an entire thread from the Trash in the authenticated user's Gmail account.

If unsure of the thread ID, use the `search_threads` tool first.</pre>
</details>
</div>

<div data-tool-name="update_message_labels" data-tool-class="write">
<code>update_message_labels</code>
<p class="c4-description-summary">Atomically adds and/or removes labels from a specific message in the authenticated user's Gmail account.</p>
<details class="faq-item c4-tool-description">
<summary class="faq-header" aria-label="Full description for update_message_labels">Full description</summary>

<pre class="faq-answer c4-description-text">Atomically adds and/or removes labels from a specific message in the authenticated user's Gmail account.

Requires at least one of `addLabelIds` or `removeLabelIds` to be provided. Moving an email between labels can be accomplished in a single call by specifying the target label in `addLabelIds` and the current label in `removeLabelIds`.</pre>
</details>
</div>

Recorded active: `list_labels`

Recorded quarantined: `create_draft`, `get_draft`, `get_message`, `get_thread`, `list_drafts`, `search_threads`

Recorded disabled: `apply_sensitive_message_label`, `apply_sensitive_thread_label`, `create_label`, `label_message`, `label_thread`, `mark_message_spam`, `mark_thread_spam`, `trash_message`, `trash_thread`, `unlabel_message`, `unlabel_thread`, `unmark_message_spam`, `unmark_thread_spam`, `untrash_message`, `untrash_thread`, `update_message_labels`

The list includes all 23 tools from Google’s catalog. Paperclip keeps label changes, Trash and Spam actions disabled in both capability groups. Google authorization does not remove that restriction.

These lists show actions from a connected account when the list was recorded. On this website, evidence that an action changes data or submits information elsewhere puts it in Write, even when the account originally grouped it as Read. The original account grouping is retained separately. Read describes the reviewed evidence; it does not guarantee that an action has no side effects. Account groupings and available actions can change.



### Connection policies

On managed connections, new or changed actions are normally held back on refresh. Safe defaults can exempt actions classified as read. Anything Google adds outside Paperclip’s reviewed Gmail list comes back disabled, however the connection was created. Review the list after each refresh. You can set any tool to Ask first or Off. Sending mail is not enabled.

## Gmail connector FAQ

### What can agents do with my mail?

After Google authorization and review of quarantined tools, agents can search and read mail. Creating drafts also requires the Read & create drafts group. Sending mail is not enabled through this connector. A person reviews and sends drafts from Gmail. Label changes, Trash and Spam actions remain disabled in both groups. Read tools can expose message and draft content.

### Which mailbox can an agent reach?

One connection reaches one mailbox. A personal connection is used for runs where its owner is responsible; an organization identity can be shared with eligible agents and a human audience.

### What do I need before connecting?

The signing-in Workspace account must be registered for Google Workspace Developer Preview. Your own OAuth app also needs its Cloud project registered. Google app verification is pending and account or administrator restrictions can prevent authorization.


Ways to connect

- Connect with Paperclip
  - Read only: Paperclip-managed Google authorization for the Read only group, where offered.
  - Read & create drafts: Paperclip-managed Google authorization for the Read & create drafts group, where offered.
- Use your own Google OAuth app
  - Read only: Your own Google OAuth app for the Read only group.
  - Read & create drafts: Your own Google OAuth app for the Read & create drafts group.

Server: `https://gmailmcp.googleapis.com/mcp/v1`

[Gmail connector](https://docs.paperclip.ing/connectors/gmail/)

[Setup guide](https://docs.paperclip.ing/connectors/gmail-setup/)

## Related connectors

- [Google Calendar](https://paperclip.ing/product/connectors/google-calendar/): Review calendars and manage events.
- [Google Drive](https://paperclip.ing/product/connectors/google-drive/): Search and read files and create or copy files.
- [Google Workspace Search](https://paperclip.ing/product/connectors/google-workspace-search/): Search across Gmail, Drive, Calendar and Chat.

## Give your agents Gmail.

Join the Paperclip waitlist to connect Gmail and choose what your agents can do.

[Join the waitlist](https://paperclip.ing/waitlist/)
