gmail-automation
Automate common Gmail tasks like sending emails and searching inboxes through Rube MCP.
Install
mkdir -p .claude/skills/gmail-automation-saminrules && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/14258" && unzip -o skill.zip -d .claude/skills/gmail-automation-saminrules && rm skill.zipInstalls to .claude/skills/gmail-automation-saminrules
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Automate Gmail tasks via Rube MCP (Composio): send/reply, search, labels, drafts, attachments. Always search tools first for current schemas.Key capabilities
- →Send new emails with attachments
- →Reply to existing email threads
- →Search and filter emails by various criteria
- →Manage Gmail labels (create, modify, delete)
- →Apply and remove labels on messages
- →Create and send email drafts
How it works
The skill automates Gmail operations through Composio's Gmail toolkit via Rube MCP. It provides specific tool sequences for sending, replying, searching, and managing emails and labels.
Inputs & outputs
When to use gmail-automation
- →Send automated email updates
- →Search for emails from a specific user
- →Handle email attachments
About this skill
Gmail Automation via Rube MCP
Automate Gmail operations through Composio's Gmail toolkit via Rube MCP.
Prerequisites
- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
- Active Gmail connection via
RUBE_MANAGE_CONNECTIONSwith toolkitgmail - Always call
RUBE_SEARCH_TOOLSfirst to get current tool schemas
Setup
Get Rube MCP: Add https://rube.app/mcp as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.
- Verify Rube MCP is available by confirming
RUBE_SEARCH_TOOLSresponds - Call
RUBE_MANAGE_CONNECTIONSwith toolkitgmail - If connection is not ACTIVE, follow the returned auth link to complete Google OAuth
- Confirm connection status shows ACTIVE before running any workflows
Core Workflows
1. Send an Email
When to use: User wants to compose and send a new email
Tool sequence:
GMAIL_SEARCH_PEOPLE- Resolve contact name to email address [Optional]GMAIL_SEND_EMAIL- Send the email [Required]
Key parameters:
recipient_email: Email address or 'me' for selfsubject: Email subject linebody: Email content (plain text or HTML)is_html: Must betrueif body contains HTML markupcc/bcc: Arrays of email addressesattachment: Object with{s3key, mimetype, name}from prior download
Pitfalls:
- At least one of
recipient_email,cc, orbccrequired - At least one of
subjectorbodyrequired - Attachment
mimetypeMUST contain '/' (e.g., 'application/pdf', not 'pdf') - Total message size limit ~25MB after base64 encoding
- Use
from_emailonly for verified aliases in Gmail 'Send mail as' settings
2. Reply to a Thread
When to use: User wants to reply to an existing email conversation
Tool sequence:
GMAIL_FETCH_EMAILS- Find the email/thread to reply to [Prerequisite]GMAIL_REPLY_TO_THREAD- Send reply within the thread [Required]
Key parameters:
thread_id: Hex string from FETCH_EMAILS (e.g., '169eefc8138e68ca')message_body: Reply contentrecipient_email: Reply recipientis_html: Settruefor HTML content
Pitfalls:
thread_idmust be hex string; prefixes like 'msg-f:' are auto-stripped- Legacy Gmail web UI IDs (e.g., 'FMfcgz...') are NOT supported
- Subject is inherited from original thread; setting it creates a new thread instead
- Do NOT include subject parameter to stay within thread
3. Search and Filter Emails
When to use: User wants to find specific emails by sender, subject, date, label, etc.
Tool sequence:
GMAIL_FETCH_EMAILS- Search with Gmail query syntax [Required]GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID- Get full message details for selected results [Optional]
Key parameters:
query: Gmail search syntax (from:, to:, subject:, is:unread, has:attachment, after:YYYY/MM/DD, before:YYYY/MM/DD)max_results: 1-500 messages per pagelabel_ids: System IDs like 'INBOX', 'UNREAD'include_payload: Settrueto get full message contentids_only: Settruefor just message IDspage_token: For pagination (fromnextPageToken)
Pitfalls:
- Returns max ~500 per page; follow
nextPageTokenviapage_tokenuntil absent resultSizeEstimateis approximate, not exact count- Use 'is:' for states (is:unread, is:snoozed, is:starred)
- Use 'label:' ONLY for user-created labels
- Common mistake: 'label:snoozed' is WRONG — use 'is:snoozed'
include_payload=trueon broad searches creates huge responses; default to metadata- Custom labels require label ID (e.g., 'Label_123'), NOT label name
4. Manage Labels
When to use: User wants to create, modify, or organize labels
Tool sequence:
GMAIL_LIST_LABELS- List all labels to find IDs and detect conflicts [Required]GMAIL_CREATE_LABEL- Create a new label [Optional]GMAIL_PATCH_LABEL- Rename or change label colors/visibility [Optional]GMAIL_DELETE_LABEL- Delete a user-created label (irreversible) [Optional]
Key parameters:
label_name: Max 225 chars, no commas, '/' for nesting (e.g., 'Work/Projects')background_color/text_color: Hex values from Gmail's predefined paletteid: Label ID for PATCH/DELETE operations
Pitfalls:
- 400/409 error if name is blank, duplicate, or reserved (INBOX, SPAM, CATEGORY_*)
- Color specs must use Gmail's predefined palette of 102 hex values
- DELETE is permanent and removes label from all messages
- Cannot delete system labels (INBOX, SENT, DRAFT, etc.)
5. Apply/Remove Labels on Messages
When to use: User wants to label, archive, or mark emails as read/unread
Tool sequence:
GMAIL_LIST_LABELS- Get label IDs for custom labels [Prerequisite]GMAIL_FETCH_EMAILS- Find target messages [Prerequisite]GMAIL_BATCH_MODIFY_MESSAGES- Bulk add/remove labels (up to 1000 messages) [Required]GMAIL_ADD_LABEL_TO_EMAIL- Single-message label changes [Fallback]
Key parameters:
messageIds: Array of message IDs (max 1000)addLabelIds: Array of label IDs to addremoveLabelIds: Array of label IDs to removemessage_id: 15-16 char hex string for single operations
Pitfalls:
- Max 1000 messageIds per BATCH call; chunk larger sets
- Use 'CATEGORY_UPDATES' not 'UPDATES'; full prefix required for category labels
- SENT, DRAFT, CHAT are immutable — cannot be added/removed
- To mark as read: REMOVE 'UNREAD'. To archive: REMOVE 'INBOX'
message_idmust be 15-16 char hex, NOT UUIDs or web UI IDs
6. Handle Drafts and Attachments
When to use: User wants to create, edit, or send email drafts, possibly with attachments
Tool sequence:
GMAIL_CREATE_EMAIL_DRAFT- Create a new draft [Required]GMAIL_UPDATE_DRAFT- Edit draft content [Optional]GMAIL_LIST_DRAFTS- List existing drafts [Optional]GMAIL_SEND_DRAFT- Send a draft (requires explicit user approval) [Optional]GMAIL_GET_ATTACHMENT- Download attachment from existing message [Optional]
Key parameters:
recipient_email: Draft recipientsubject: Draft subject (omit for reply drafts to stay in thread)body: Draft contentis_html: Settruefor HTML contentattachment: Object with{s3key, mimetype, name}thread_id: For reply drafts (leave subject empty to stay in thread)
Pitfalls:
- Response includes
data.id(draft_id) ANDdata.message.id; usedata.idfor draft operations - Setting subject on a thread reply draft creates a NEW thread instead
- Attachment capped at ~25MB; base64 overhead can push near-limit files over
- UPDATE_DRAFT replaces entire content, not patches; include all fields you want to keep
- HTTP 429 on bulk draft creation; use exponential backoff
Common Patterns
ID Resolution
Label name → Label ID:
1. Call GMAIL_LIST_LABELS
2. Find label by name in response
3. Extract id field (e.g., 'Label_123')
Contact name → Email:
1. Call GMAIL_SEARCH_PEOPLE with query=contact_name
2. Extract emailAddresses from response
Thread ID from search:
1. Call GMAIL_FETCH_EMAILS or GMAIL_LIST_THREADS
2. Extract threadId (15-16 char hex string)
Pagination
- Set
max_resultsup to 500 per page - Check response for
nextPageToken - Pass token as
page_tokenin next request - Continue until
nextPageTokenis absent or empty string resultSizeEstimateis approximate, not exact
Gmail Query Syntax
Operators:
from:[email protected]- Emails from senderto:[email protected]- Emails to recipientsubject:"exact phrase"- Subject contains exact phraseis:unread- Unread messagesis:starred- Starred messagesis:snoozed- Snoozed messageshas:attachment- Has attachmentsafter:2024/01/01- After date (YYYY/MM/DD)before:2024/12/31- Before datelabel:custom_label- User-created label (use label ID)in:sent- In sent foldercategory:primary- Primary category
Combinators:
AND- Both conditions (default)OR- Either conditionNOT- Exclude condition()- Group conditions
Examples:
from:[email protected] is:unread- Unread emails from bosssubject:invoice has:attachment after:2024/01/01- Invoices with attachments this year(from:alice OR from:bob) is:starred- Starred emails from Alice or Bob
Known Pitfalls
ID Formats:
- Custom label operations require label IDs (e.g., 'Label_123'), not display names
- Always call LIST_LABELS first to resolve names to IDs
- Message IDs are 15-16 char hex strings
- Do NOT use UUIDs, web UI IDs, or 'thread-f:' prefixes
Query Syntax:
- Use 'is:' for states (unread, snoozed, starred)
- Use 'label:' ONLY for user-created labels
- System labels use 'is:' or 'in:' (e.g., 'is:sent', 'in:inbox')
Rate Limits:
- BATCH_MODIFY_MESSAGES max 1000 messages per call
- Heavy use triggers 403/429 rate limits
- Implement exponential backoff for bulk operations
Response Parsing:
- Response data may be nested under
data_previewordata.messages - Parse defensively with fallbacks
- Timestamp
messageTimestampuses RFC3339 with 'Z' suffix - Normalize to '+00:00' for parsing if needed
Attachments:
- Attachment
s3keyfrom prior download may expire - Use promptly after retrieval
- Mimetype must include '/' separator
Quick Reference
| Task | Tool Slug | Key Params |
|---|---|---|
| Send email | GMAIL_SEND_EMAIL | recipient_email, subject, body, is_html |
| Reply to thread | GMAIL_REPLY_TO_THREAD | thread_id, message_body, recipient_email |
| Search emails | GMAIL_FETCH_EMAILS | query, max_results, label_ids, page_token |
| Get message details | GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID | message_id |
| List labels | GMAIL_LIST_LABELS | (none) |
| Create label | GMAIL_CREATE_LABEL | label_name, background_color, text_color |
| Modify labels bulk | GMAIL_BATCH_MODIFY_MESSAGES | messageIds, addLabelIds, removeLabelIds |
| Create draft | GMAIL_CREATE_EMAIL_DRAFT | re |
Content truncated.
When not to use it
- →When Rube MCP is not connected or active
- →When Gmail connection is not active via `RUBE_MANAGE_CONNECTIONS`
- →When using legacy Gmail web UI IDs for thread replies
Prerequisites
Limitations
- →Legacy Gmail web UI IDs are NOT supported for thread replies
- →Cannot delete system labels (INBOX, SENT, DRAFT, etc.)
- →Max 1000 messageIds per BATCH_MODIFY_MESSAGES call
How it compares
This skill provides a programmatic interface for Gmail through Rube MCP, enabling automated email workflows, bulk actions, and label management that are not easily performed manually within the Gmail interface.
Compared to similar skills
gmail-automation side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| gmail-automation (this skill) | 0 | 5mo | No flags | Intermediate |
| gmail-manager | 27 | 4mo | Review | Intermediate |
| mailchimp-automation | 2 | 4mo | No flags | Intermediate |
| action-creator | 2 | 9mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by SaminRules
View all by SaminRules →You might also like
gmail-manager
jeffvincent
Manage Gmail - send, read, search emails, manage labels and drafts. Use when user wants to interact with their Gmail account for email operations.
mailchimp-automation
sickn33
Automate Mailchimp email marketing including campaigns, audiences, subscribers, segments, and analytics via Rube MCP (Composio). Always search tools first for current schemas.
action-creator
anthropics
Creates user-specific one-click action templates that execute email operations when clicked in the chat interface. Use when user wants reusable actions for their specific workflows (send payment reminder to ACME Corp, forward bugs to engineering, archive old newsletters from specific sources).
gmcli
badlogic
Gmail CLI for searching emails, reading threads, sending messages, managing drafts, and handling labels/attachments.
convertkit-automation
Zidong-LLC
Automate ConvertKit (Kit) tasks via Rube MCP (Composio): manage subscribers, tags, broadcasts, and broadcast stats. Always search tools first for current schemas.
send-message
gitduk
Send a message to a Telegram chat via the Bot API directly. Self-contained — reads its own .env at the skill root and has no dependency on any Telegram plugin. Use when the user asks to push a Telegram notification to their phone, test the bot token, send from a hook or one-shot script, or 给 telegra