Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Automate Gmail tasks via Rube MCP (Composio): send/reply, search, labels, drafts, attachments. Always search tools first for current schemas.
.claude/skills/davepoon-gmail-automation/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 258% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 262% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 311% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 488% | 0% |
| case-05 | ✓→✗ | ▼ Worse | 439% | 0% |
Automate Gmail operations through Composio's Gmail toolkit via Rube MCP.
Toolkit docs: composio.dev/toolkits/gmail
RUBE_MANAGE_CONNECTIONS with toolkit gmailRUBE_SEARCH_TOOLS first to get current tool schemasGet 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.
RUBE_SEARCH_TOOLS respondsRUBE_MANAGE_CONNECTIONS with toolkit gmailWhen 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 be true if body contains HTML markupcc/bcc: Arrays of email addressesattachment: Object with {s3key, mimetype, name} from prior downloadPitfalls:
recipient_email, cc, or bcc requiredsubject or body requiredmimetype MUST contain '/' (e.g., 'application/pdf', not 'pdf')from_email only for verified aliases in Gmail 'Send mail as' settingsWhen 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: Set true for HTML contentPitfalls:
thread_id must be hex string; prefixes like 'msg-f:' are auto-strippedWhen 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: Set true to get full message contentids_only: Set true for just message IDspage_token: For pagination (from nextPageToken)Pitfalls:
nextPageToken via page_token until absentresultSizeEstimate is approximate, not exact countinclude_payload=true on broad searches creates huge responses; default to metadataWhen 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 operationsPitfalls:
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 operationsPitfalls:
message_id must be 15-16 char hex, NOT UUIDs or web UI IDsWhen 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: Set true for HTML contentattachment: Object with {s3key, mimetype, name}thread_id: For reply drafts (leave subject empty to stay in thread)Pitfalls:
data.id (draft_id) AND data.message.id; use data.id for draft operationsLabel 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 responseThread ID from search:
1. Call GMAIL_FETCH_EMAILS or GMAIL_LIST_THREADS
2. Extract threadId (15-16 char hex string)max_results up to 500 per pagenextPageTokenpage_token in next requestnextPageToken is absent or empty stringresultSizeEstimate is approximate, not exactOperators:
from:sender@example.com - Emails from senderto:recipient@example.com - 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 categoryCombinators:
AND - Both conditions (default)OR - Either conditionNOT - Exclude condition() - Group conditionsExamples:
from:boss@company.com 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 BobID Formats:
Query Syntax:
Rate Limits:
Response Parsing:
data_preview or data.messagesmessageTimestamp uses RFC3339 with 'Z' suffixAttachments:
s3key from prior download may expire| 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 | recipient_email, subject, body, thread_id | | Send draft | GMAIL_SEND_DRAFT | draft_id | | Get attachment | GMAIL_GET_ATTACHMENT | message_id, attachment_id | | Search contacts | GMAIL_SEARCH_PEOPLE | query | | Get profile | GMAIL_GET_PROFILE | (none) |
Powered by Composio
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 10,372 | 5,733 | -45% | 1 | 1 | 0% | 2,228 | 3,463 | +55% | 0 | 0 | — |
case-02 | fail→fail | 11,014 | 3,650 | -67% | 1 | 1 | 0% | 1,342 | 3,351 | +150% | 0 | 0 | — |
case-18 | pass→pass | 6,827 | 4,521 | -34% | 1 | 1 | 0% | 1,344 | 3,936 | +193% | 0 | 0 | — |
case-03 | fail→fail | 3,395 | 5,267 | +55% | 1 | 1 | 0% | 307 | 3,564 | +1061% | 0 | 0 | — |
case-04 | pass→pass | 10,200 | 13,426 | +32% | 1 | 1 | 0% | 2,166 | 5,380 | +148% | 0 | 0 | — |
case-05 | pass→fail | 3,804 | 4,828 | +27% | 1 | 1 | 0% | 620 | 3,343 | +439% | 0 | 0 | — |
case-06 | pass→fail | 7,490 | 5,122 | -32% | 1 | 1 | 0% | 1,493 | 3,404 | +128% | 0 | 0 | — |
case-07 | fail→pass | 5,225 | 2,875 | -45% | 1 | 1 | 0% | 1,017 | 3,638 | +258% | 0 | 0 | — |
case-08 | fail→pass | 5,436 | 2,554 | -53% | 1 | 1 | 0% | 989 | 3,583 | +262% | 0 | 0 | — |
case-09 | pass→pass | 4,888 | 2,936 | -40% | 1 | 1 | 0% | 909 | 3,601 | +296% | 0 | 0 | — |
case-10 | pass→pass | 3,408 | 2,681 | -21% | 1 | 1 | 0% | 585 | 3,555 | +508% | 0 | 0 | — |
case-11 | pass→pass | 8,143 | 4,160 | -49% | 1 | 1 | 0% | 1,367 | 3,804 | +178% | 0 | 0 | — |
case-12 | pass→pass | 2,936 | 2,672 | -9% | 1 | 1 | 0% | 561 | 3,600 | +542% | 0 | 0 | — |
case-13 | pass→pass | 8,868 | 4,723 | -47% | 1 | 1 | 0% | 1,875 | 4,062 | +117% | 0 | 0 | — |
case-14 | pass→pass | 6,615 | 4,947 | -25% | 1 | 1 | 0% | 1,251 | 3,318 | +165% | 0 | 0 | — |
case-15 | fail→pass | 4,595 | 3,122 | -32% | 1 | 1 | 0% | 895 | 3,678 | +311% | 0 | 0 | — |
case-16 | pass→pass | 5,229 | 6,747 | +29% | 1 | 1 | 0% | 869 | 3,792 | +336% | 0 | 0 | — |
case-17 | pass→pass | 3,868 | 2,573 | -33% | 1 | 1 | 0% | 726 | 3,521 | +385% | 0 | 0 | — |
case-19 | pass→pass | 3,882 | 1,740 | -55% | 1 | 1 | 0% | 705 | 3,367 | +378% | 0 | 0 | — |
case-20 | fail→fail | 5,279 | 4,921 | -7% | 1 | 1 | 0% | 1,174 | 4,014 | +242% | 0 | 0 | — |
case-21 | pass→pass | 5,621 | 3,789 | -33% | 1 | 1 | 0% | 911 | 3,750 | +312% | 0 | 0 | — |
case-22 | fail→pass | 3,819 | 3,027 | -21% | 1 | 1 | 0% | 625 | 3,675 | +488% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 17 counted toward the lift figure. The other 5 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +9 percentage points is the difference between those two pass rates over the 17 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.