[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6G121QK615QAVWAMKMY3BZP":3,"skill-same:01M6G121QK615QAVWAMKMY3BZP":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":14,"repositoryHtmlUrl":51,"repositoryHomepageUrl":6,"ownerHtmlUrl":52,"ownerBlogUrl":53,"ownerDescription":54,"updatedAt":55,"install":56,"resources":69},"01M6G121QK615QAVWAMKMY3BZP","gmail-automation",null,"Automate Gmail tasks via Rube MCP (Composio): send\u002Freply, search, labels, drafts, attachments. Always search tools first for current schemas.","reikiplanet\u002Fdaoskills","reikiplanet","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F96377599?v=4","01M6CVWCMD740YHQDK7E9QYBW4","Reiki Planet","01M6CVWCS4KXVA2CWFVJ43EAXK",0,"MIT","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fskills\u002Fautomation\u002Fgmail-automation\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"gmail","automation","gmail automation","MCP","tasks","search","attachments","Tools","first","automate","reply","community","composio","via","drafts","2026-11-10 10:12:30",false,"---\nname: gmail-automation\ndescription: \"Automate Gmail tasks via Rube MCP (Composio): send\u002Freply, search, labels, drafts, attachments. Always search tools first for current schemas.\"\nrequires:\n  mcp: [rube]\nrisk: unknown\nsource: community\n---\n\n# Gmail Automation via Rube MCP\n\nAutomate Gmail operations through Composio's Gmail toolkit via Rube MCP.\n\n## Prerequisites\n\n- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)\n- Active Gmail connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `gmail`\n- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas\n\n## Setup\n\n**Get Rube MCP**: Add `https:\u002F\u002Frube.app\u002Fmcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.\n\n\n1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds\n2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `gmail`\n3. If connection is not ACTIVE, follow the returned auth link to complete Google OAuth\n4. Confirm connection status shows ACTIVE before running any workflows\n\n## Core Workflows\n\n### 1. Send an Email\n\n**When to use**: User wants to compose and send a new email\n\n**Tool sequence**:\n1. `GMAIL_SEARCH_PEOPLE` - Resolve contact name to email address [Optional]\n2. `GMAIL_SEND_EMAIL` - Send the email [Required]\n\n**Key parameters**:\n- `recipient_email`: Email address or 'me' for self\n- `subject`: Email subject line\n- `body`: Email content (plain text or HTML)\n- `is_html`: Must be `true` if body contains HTML markup\n- `cc`\u002F`bcc`: Arrays of email addresses\n- `attachment`: Object with `{s3key, mimetype, name}` from prior download\n\n**Pitfalls**:\n- At least one of `recipient_email`, `cc`, or `bcc` required\n- At least one of `subject` or `body` required\n- Attachment `mimetype` MUST contain '\u002F' (e.g., 'application\u002Fpdf', not 'pdf')\n- Total message size limit ~25MB after base64 encoding\n- Use `from_email` only for verified aliases in Gmail 'Send mail as' settings\n\n### 2. Reply to a Thread\n\n**When to use**: User wants to reply to an existing email conversation\n\n**Tool sequence**:\n1. `GMAIL_FETCH_EMAILS` - Find the email\u002Fthread to reply to [Prerequisite]\n2. `GMAIL_REPLY_TO_THREAD` - Send reply within the thread [Required]\n\n**Key parameters**:\n- `thread_id`: Hex string from FETCH_EMAILS (e.g., '169eefc8138e68ca')\n- `message_body`: Reply content\n- `recipient_email`: Reply recipient\n- `is_html`: Set `true` for HTML content\n\n**Pitfalls**:\n- `thread_id` must be hex string; prefixes like 'msg-f:' are auto-stripped\n- Legacy Gmail web UI IDs (e.g., 'FMfcgz...') are NOT supported\n- Subject is inherited from original thread; setting it creates a new thread instead\n- Do NOT include subject parameter to stay within thread\n\n### 3. Search and Filter Emails\n\n**When to use**: User wants to find specific emails by sender, subject, date, label, etc.\n\n**Tool sequence**:\n1. `GMAIL_FETCH_EMAILS` - Search with Gmail query syntax [Required]\n2. `GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID` - Get full message details for selected results [Optional]\n\n**Key parameters**:\n- `query`: Gmail search syntax (from:, to:, subject:, is:unread, has:attachment, after:YYYY\u002FMM\u002FDD, before:YYYY\u002FMM\u002FDD)\n- `max_results`: 1-500 messages per page\n- `label_ids`: System IDs like 'INBOX', 'UNREAD'\n- `include_payload`: Set `true` to get full message content\n- `ids_only`: Set `true` for just message IDs\n- `page_token`: For pagination (from `nextPageToken`)\n\n**Pitfalls**:\n- Returns max ~500 per page; follow `nextPageToken` via `page_token` until absent\n- `resultSizeEstimate` is approximate, not exact count\n- Use 'is:' for states (is:unread, is:snoozed, is:starred)\n- Use 'label:' ONLY for user-created labels\n- Common mistake: 'label:snoozed' is WRONG — use 'is:snoozed'\n- `include_payload=true` on broad searches creates huge responses; default to metadata\n- Custom labels require label ID (e.g., 'Label_123'), NOT label name\n\n### 4. Manage Labels\n\n**When to use**: User wants to create, modify, or organize labels\n\n**Tool sequence**:\n1. `GMAIL_LIST_LABELS` - List all labels to find IDs and detect conflicts [Required]\n2. `GMAIL_CREATE_LABEL` - Create a new label [Optional]\n3. `GMAIL_PATCH_LABEL` - Rename or change label colors\u002Fvisibility [Optional]\n4. `GMAIL_DELETE_LABEL` - Delete a user-created label (irreversible) [Optional]\n\n**Key parameters**:\n- `label_name`: Max 225 chars, no commas, '\u002F' for nesting (e.g., 'Work\u002FProjects')\n- `background_color`\u002F`text_color`: Hex values from Gmail's predefined palette\n- `id`: Label ID for PATCH\u002FDELETE operations\n\n**Pitfalls**:\n- 400\u002F409 error if name is blank, duplicate, or reserved (INBOX, SPAM, CATEGORY_*)\n- Color specs must use Gmail's predefined palette of 102 hex values\n- DELETE is permanent and removes label from all messages\n- Cannot delete system labels (INBOX, SENT, DRAFT, etc.)\n\n### 5. Apply\u002FRemove Labels on Messages\n\n**When to use**: User wants to label, archive, or mark emails as read\u002Funread\n\n**Tool sequence**:\n1. `GMAIL_LIST_LABELS` - Get label IDs for custom labels [Prerequisite]\n2. `GMAIL_FETCH_EMAILS` - Find target messages [Prerequisite]\n3. `GMAIL_BATCH_MODIFY_MESSAGES` - Bulk add\u002Fremove labels (up to 1000 messages) [Required]\n4. `GMAIL_ADD_LABEL_TO_EMAIL` - Single-message label changes [Fallback]\n\n**Key parameters**:\n- `messageIds`: Array of message IDs (max 1000)\n- `addLabelIds`: Array of label IDs to add\n- `removeLabelIds`: Array of label IDs to remove\n- `message_id`: 15-16 char hex string for single operations\n\n**Pitfalls**:\n- Max 1000 messageIds per BATCH call; chunk larger sets\n- Use 'CATEGORY_UPDATES' not 'UPDATES'; full prefix required for category labels\n- SENT, DRAFT, CHAT are immutable — cannot be added\u002Fremoved\n- To mark as read: REMOVE 'UNREAD'. To archive: REMOVE 'INBOX'\n- `message_id` must be 15-16 char hex, NOT UUIDs or web UI IDs\n\n### 6. Handle Drafts and Attachments\n\n**When to use**: User wants to create, edit, or send email drafts, possibly with attachments\n\n**Tool sequence**:\n1. `GMAIL_CREATE_EMAIL_DRAFT` - Create a new draft [Required]\n2. `GMAIL_UPDATE_DRAFT` - Edit draft content [Optional]\n3. `GMAIL_LIST_DRAFTS` - List existing drafts [Optional]\n4. `GMAIL_SEND_DRAFT` - Send a draft (requires explicit user approval) [Optional]\n5. `GMAIL_GET_ATTACHMENT` - Download attachment from existing message [Optional]\n\n**Key parameters**:\n- `recipient_email`: Draft recipient\n- `subject`: Draft subject (omit for reply drafts to stay in thread)\n- `body`: Draft content\n- `is_html`: Set `true` for HTML content\n- `attachment`: Object with `{s3key, mimetype, name}`\n- `thread_id`: For reply drafts (leave subject empty to stay in thread)\n\n**Pitfalls**:\n- Response includes `data.id` (draft_id) AND `data.message.id`; use `data.id` for draft operations\n- Setting subject on a thread reply draft creates a NEW thread instead\n- Attachment capped at ~25MB; base64 overhead can push near-limit files over\n- UPDATE_DRAFT replaces entire content, not patches; include all fields you want to keep\n- HTTP 429 on bulk draft creation; use exponential backoff\n\n## Common Patterns\n\n### ID Resolution\n\n**Label name → Label ID**:\n```\n1. Call GMAIL_LIST_LABELS\n2. Find label by name in response\n3. Extract id field (e.g., 'Label_123')\n```\n\n**Contact name → Email**:\n```\n1. Call GMAIL_SEARCH_PEOPLE with query=contact_name\n2. Extract emailAddresses from response\n```\n\n**Thread ID from search**:\n```\n1. Call GMAIL_FETCH_EMAILS or GMAIL_LIST_THREADS\n2. Extract threadId (15-16 char hex string)\n```\n\n### Pagination\n\n- Set `max_results` up to 500 per page\n- Check response for `nextPageToken`\n- Pass token as `page_token` in next request\n- Continue until `nextPageToken` is absent or empty string\n- `resultSizeEstimate` is approximate, not exact\n\n### Gmail Query Syntax\n\n**Operators**:\n- `from:sender@example.com` - Emails from sender\n- `to:recipient@example.com` - Emails to recipient\n- `subject:\"exact phrase\"` - Subject contains exact phrase\n- `is:unread` - Unread messages\n- `is:starred` - Starred messages\n- `is:snoozed` - Snoozed messages\n- `has:attachment` - Has attachments\n- `after:2024\u002F01\u002F01` - After date (YYYY\u002FMM\u002FDD)\n- `before:2024\u002F12\u002F31` - Before date\n- `label:custom_label` - User-created label (use label ID)\n- `in:sent` - In sent folder\n- `category:primary` - Primary category\n\n**Combinators**:\n- `AND` - Both conditions (default)\n- `OR` - Either condition\n- `NOT` - Exclude condition\n- `()` - Group conditions\n\n**Examples**:\n- `from:boss@company.com is:unread` - Unread emails from boss\n- `subject:invoice has:attachment after:2024\u002F01\u002F01` - Invoices with attachments this year\n- `(from:alice OR from:bob) is:starred` - Starred emails from Alice or Bob\n\n## Known Pitfalls\n\n**ID Formats**:\n- Custom label operations require label IDs (e.g., 'Label_123'), not display names\n- Always call LIST_LABELS first to resolve names to IDs\n- Message IDs are 15-16 char hex strings\n- Do NOT use UUIDs, web UI IDs, or 'thread-f:' prefixes\n\n**Query Syntax**:\n- Use 'is:' for states (unread, snoozed, starred)\n- Use 'label:' ONLY for user-created labels\n- System labels use 'is:' or 'in:' (e.g., 'is:sent', 'in:inbox')\n\n**Rate Limits**:\n- BATCH_MODIFY_MESSAGES max 1000 messages per call\n- Heavy use triggers 403\u002F429 rate limits\n- Implement exponential backoff for bulk operations\n\n**Response Parsing**:\n- Response data may be nested under `data_preview` or `data.messages`\n- Parse defensively with fallbacks\n- Timestamp `messageTimestamp` uses RFC3339 with 'Z' suffix\n- Normalize to '+00:00' for parsing if needed\n\n**Attachments**:\n- Attachment `s3key` from prior download may expire\n- Use promptly after retrieval\n- Mimetype must include '\u002F' separator\n\n## Quick Reference\n\n| Task | Tool Slug | Key Params |\n|------|-----------|------------|\n| Send email | GMAIL_SEND_EMAIL | recipient_email, subject, body, is_html |\n| Reply to thread | GMAIL_REPLY_TO_THREAD | thread_id, message_body, recipient_email |\n| Search emails | GMAIL_FETCH_EMAILS | query, max_results, label_ids, page_token |\n| Get message details | GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID | message_id |\n| List labels | GMAIL_LIST_LABELS | (none) |\n| Create label | GMAIL_CREATE_LABEL | label_name, background_color, text_color |\n| Modify labels bulk | GMAIL_BATCH_MODIFY_MESSAGES | messageIds, addLabelIds, removeLabelIds |\n| Create draft | GMAIL_CREATE_EMAIL_DRAFT | recipient_email, subject, body, thread_id |\n| Send draft | GMAIL_SEND_DRAFT | draft_id |\n| Get attachment | GMAIL_GET_ATTACHMENT | message_id, attachment_id |\n| Search contacts | GMAIL_SEARCH_PEOPLE | query |\n| Get profile | GMAIL_GET_PROFILE | (none) |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Gmail Automation via Rube MCP\n\nAutomate Gmail operations through Composio's Gmail toolkit via Rube MCP.\n\n## Prerequisites\n\n- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)\n- Active Gmail connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `gmail`\n- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas\n\n## Setup\n\n**Get Rube MCP**: Add `https:\u002F\u002Frube.app\u002Fmcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.\n\n\n1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds\n2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `gmail`\n3. If connection is not ACTIVE, follow the returned auth link to complete Google OAuth\n4. Confirm connection status shows ACTIVE before running any workflows\n\n## Core Workflows\n\n### 1. Send an Email\n\n**When to use**: User wants to compose and send a new email\n\n**Tool sequence**:\n1. `GMAIL_SEARCH_PEOPLE` - Resolve contact name to email address [Optional]\n2. `GMAIL_SEND_EMAIL` - Send the email [Required]\n\n**Key parameters**:\n- `recipient_email`: Email address or 'me' for self\n- `subject`: Email subject line\n- `body`: Email content (plain text or HTML)\n- `is_html`: Must be `true` if body contains HTML markup\n- `cc`\u002F`bcc`: Arrays of email addresses\n- `attachment`: Object with `{s3key, mimetype, name}` from prior download\n\n**Pitfalls**:\n- At least one of `recipient_email`, `cc`, or `bcc` required\n- At least one of `subject` or `body` required\n- Attachment `mimetype` MUST contain '\u002F' (e.g., 'application\u002Fpdf', not 'pdf')\n- Total message size limit ~25MB after base64 encoding\n- Use `from_email` only for verified aliases in Gmail 'Send mail as' settings\n\n### 2. Reply to a Thread\n\n**When to use**: User wants to reply to an existing email conversation\n\n**Tool sequence**:\n1. `GMAIL_FETCH_EMAILS` - Find the email\u002Fthread to reply to [Prerequisite]\n2. `GMAIL_REPLY_TO_THREAD` - Send reply within the thread [Required]\n\n**Key parameters**:\n- `thread_id`: Hex string from FETCH_EMAILS (e.g., '169eefc8138e68ca')\n- `message_body`: Reply content\n- `recipient_email`: Reply recipient\n- `is_html`: Set `true` for HTML content\n\n**Pitfalls**:\n- `thread_id` must be hex string; prefixes like 'msg-f:' are auto-stripped\n- Legacy Gmail web UI IDs (e.g., 'FMfcgz...') are NOT supported\n- Subject is inherited from original thread; setting it creates a new thread instead\n- Do NOT include subject parameter to stay within thread\n\n### 3. Search and Filter Emails\n\n**When to use**: User wants to find specific emails by sender, subject, date, label, etc.\n\n**Tool sequence**:\n1. `GMAIL_FETCH_EMAILS` - Search with Gmail query syntax [Required]\n2. `GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID` - Get full message details for selected results [Optional]\n\n**Key parameters**:\n- `query`: Gmail search syntax (from:, to:, subject:, is:unread, has:attachment, after:YYYY\u002FMM\u002FDD, before:YYYY\u002FMM\u002FDD)\n- `max_results`: 1-500 messages per page\n- `label_ids`: System IDs like 'INBOX', 'UNREAD'\n- `include_payload`: Set `true` to get full message content\n- `ids_only`: Set `true` for just message IDs\n- `page_token`: For pagination (from `nextPageToken`)\n\n**Pitfalls**:\n- Returns max ~500 per page; follow `nextPageToken` via `page_token` until absent\n- `resultSizeEstimate` is approximate, not exact count\n- Use 'is:' for states (is:unread, is:snoozed, is:starred)\n- Use 'label:' ONLY for user-created labels\n- Common mistake: 'label:snoozed' is WRONG — use 'is:snoozed'\n- `include_payload=true` on broad searches creates huge responses; default to metadata\n- Custom labels require label ID (e.g., 'Label_123'), NOT label name\n\n### 4. Manage Labels\n\n**When to use**: User wants to create, modify, or organize labels\n\n**Tool sequence**:\n1. `GMAIL_LIST_LABELS` - List all labels to find IDs and detect conflicts [Required]\n2. `GMAIL_CREATE_LABEL` - Create a new label [Optional]\n3. `GMAIL_PATCH_LABEL` - Rename or change label colors\u002Fvisibility [Optional]\n4. `GMAIL_DELETE_LABEL` - Delete a user-created label (irreversible) [Optional]\n\n**Key parameters**:\n- `label_name`: Max 225 chars, no commas, '\u002F' for nesting (e.g., 'Work\u002FProjects')\n- `background_color`\u002F`text_color`: Hex values from Gmail's predefined palette\n- `id`: Label ID for PATCH\u002FDELETE operations\n\n**Pitfalls**:\n- 400\u002F409 error if name is blank, duplicate, or reserved (INBOX, SPAM, CATEGORY_*)\n- Color specs must use Gmail's predefined palette of 102 hex values\n- DELETE is permanent and removes label from all messages\n- Cannot delete system labels (INBOX, SENT, DRAFT, etc.)\n\n### 5. Apply\u002FRemove Labels on Messages\n\n**When to use**: User wants to label, archive, or mark emails as read\u002Funread\n\n**Tool sequence**:\n1. `GMAIL_LIST_LABELS` - Get label IDs for custom labels [Prerequisite]\n2. `GMAIL_FETCH_EMAILS` - Find target messages [Prerequisite]\n3. `GMAIL_BATCH_MODIFY_MESSAGES` - Bulk add\u002Fremove labels (up to 1000 messages) [Required]\n4. `GMAIL_ADD_LABEL_TO_EMAIL` - Single-message label changes [Fallback]\n\n**Key parameters**:\n- `messageIds`: Array of message IDs (max 1000)\n- `addLabelIds`: Array of label IDs to add\n- `removeLabelIds`: Array of label IDs to remove\n- `message_id`: 15-16 char hex string for single operations\n\n**Pitfalls**:\n- Max 1000 messageIds per BATCH call; chunk larger sets\n- Use 'CATEGORY_UPDATES' not 'UPDATES'; full prefix required for category labels\n- SENT, DRAFT, CHAT are immutable — cannot be added\u002Fremoved\n- To mark as read: REMOVE 'UNREAD'. To archive: REMOVE 'INBOX'\n- `message_id` must be 15-16 char hex, NOT UUIDs or web UI IDs\n\n### 6. Handle Drafts and Attachments\n\n**When to use**: User wants to create, edit, or send email drafts, possibly with attachments\n\n**Tool sequence**:\n1. `GMAIL_CREATE_EMAIL_DRAFT` - Create a new draft [Required]\n2. `GMAIL_UPDATE_DRAFT` - Edit draft content [Optional]\n3. `GMAIL_LIST_DRAFTS` - List existing drafts [Optional]\n4. `GMAIL_SEND_DRAFT` - Send a draft (requires explicit user approval) [Optional]\n5. `GMAIL_GET_ATTACHMENT` - Download attachment from existing message [Optional]\n\n**Key parameters**:\n- `recipient_email`: Draft recipient\n- `subject`: Draft subject (omit for reply drafts to stay in thread)\n- `body`: Draft content\n- `is_html`: Set `true` for HTML content\n- `attachment`: Object with `{s3key, mimetype, name}`\n- `thread_id`: For reply drafts (leave subject empty to stay in thread)\n\n**Pitfalls**:\n- Response includes `data.id` (draft_id) AND `data.message.id`; use `data.id` for draft operations\n- Setting subject on a thread reply draft creates a NEW thread instead\n- Attachment capped at ~25MB; base64 overhead can push near-limit files over\n- UPDATE_DRAFT replaces entire content, not patches; include all fields you want to keep\n- HTTP 429 on bulk draft creation; use exponential backoff\n\n## Common Patterns\n\n### ID Resolution\n\n**Label name → Label ID**:\n```\n1. Call GMAIL_LIST_LABELS\n2. Find label by name in response\n3. Extract id field (e.g., 'Label_123')\n```\n\n**Contact name → Email**:\n```\n1. Call GMAIL_SEARCH_PEOPLE with query=contact_name\n2. Extract emailAddresses from response\n```\n\n**Thread ID from search**:\n```\n1. Call GMAIL_FETCH_EMAILS or GMAIL_LIST_THREADS\n2. Extract threadId (15-16 char hex string)\n```\n\n### Pagination\n\n- Set `max_results` up to 500 per page\n- Check response for `nextPageToken`\n- Pass token as `page_token` in next request\n- Continue until `nextPageToken` is absent or empty string\n- `resultSizeEstimate` is approximate, not exact\n\n### Gmail Query Syntax\n\n**Operators**:\n- `from:sender@example.com` - Emails from sender\n- `to:recipient@example.com` - Emails to recipient\n- `subject:\"exact phrase\"` - Subject contains exact phrase\n- `is:unread` - Unread messages\n- `is:starred` - Starred messages\n- `is:snoozed` - Snoozed messages\n- `has:attachment` - Has attachments\n- `after:2024\u002F01\u002F01` - After date (YYYY\u002FMM\u002FDD)\n- `before:2024\u002F12\u002F31` - Before date\n- `label:custom_label` - User-created label (use label ID)\n- `in:sent` - In sent folder\n- `category:primary` - Primary category\n\n**Combinators**:\n- `AND` - Both conditions (default)\n- `OR` - Either condition\n- `NOT` - Exclude condition\n- `()` - Group conditions\n\n**Examples**:\n- `from:boss@company.com is:unread` - Unread emails from boss\n- `subject:invoice has:attachment after:2024\u002F01\u002F01` - Invoices with attachments this year\n- `(from:alice OR from:bob) is:starred` - Starred emails from Alice or Bob\n\n## Known Pitfalls\n\n**ID Formats**:\n- Custom label operations require label IDs (e.g., 'Label_123'), not display names\n- Always call LIST_LABELS first to resolve names to IDs\n- Message IDs are 15-16 char hex strings\n- Do NOT use UUIDs, web UI IDs, or 'thread-f:' prefixes\n\n**Query Syntax**:\n- Use 'is:' for states (unread, snoozed, starred)\n- Use 'label:' ONLY for user-created labels\n- System labels use 'is:' or 'in:' (e.g., 'is:sent', 'in:inbox')\n\n**Rate Limits**:\n- BATCH_MODIFY_MESSAGES max 1000 messages per call\n- Heavy use triggers 403\u002F429 rate limits\n- Implement exponential backoff for bulk operations\n\n**Response Parsing**:\n- Response data may be nested under `data_preview` or `data.messages`\n- Parse defensively with fallbacks\n- Timestamp `messageTimestamp` uses RFC3339 with 'Z' suffix\n- Normalize to '+00:00' for parsing if needed\n\n**Attachments**:\n- Attachment `s3key` from prior download may expire\n- Use promptly after retrieval\n- Mimetype must include '\u002F' separator\n\n## Quick Reference\n\n| Task | Tool Slug | Key Params |\n|------|-----------|------------|\n| Send email | GMAIL_SEND_EMAIL | recipient_email, subject, body, is_html |\n| Reply to thread | GMAIL_REPLY_TO_THREAD | thread_id, message_body, recipient_email |\n| Search emails | GMAIL_FETCH_EMAILS | query, max_results, label_ids, page_token |\n| Get message details | GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID | message_id |\n| List labels | GMAIL_LIST_LABELS | (none) |\n| Create label | GMAIL_CREATE_LABEL | label_name, background_color, text_color |\n| Modify labels bulk | GMAIL_BATCH_MODIFY_MESSAGES | messageIds, addLabelIds, removeLabelIds |\n| Create draft | GMAIL_CREATE_EMAIL_DRAFT | recipient_email, subject, body, thread_id |\n| Send draft | GMAIL_SEND_DRAFT | draft_id |\n| Get attachment | GMAIL_GET_ATTACHMENT | message_id, attachment_id |\n| Search contacts | GMAIL_SEARCH_PEOPLE | query |\n| Get profile | GMAIL_GET_PROFILE | (none) |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":44,"source":35,"requires":45,"description":7},"unknown",{"mcp":46},[47],"rube","master","dff58085da947e81e8418c922055644bf0082b1b","skills\u002Fautomation\u002Fgmail-automation","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills","https:\u002F\u002Fgithub.com\u002Freikiplanet","https:\u002F\u002Fwww.reiki-planet.com","Reiki Planet Game","2026-03-29 06:02:29",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add reikiplanet\u002Fdaoskills --skill gmail-automation",{"tool":62,"command":63},"bunx","bunx skills add reikiplanet\u002Fdaoskills --skill gmail-automation",{"tool":65,"command":66},"pnpm","pnpm dlx skills add reikiplanet\u002Fdaoskills --skill gmail-automation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fskills\u002Fautomation\u002Fgmail-automation\u002FSKILL.md",true,[],[71,97,109,124,144,167],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":39},"01M6G614JTEQJHPT8AKK3YQ18S","web-games","Web browser game development principles. Framework selection, WebGPU, optimization, PWA.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fweb-games\u002FSKILL.md",[],[78,79,80,81,82,83,35,84,85,86,87,88,89,90,91,92,93,94,95,96],"games","web games","web","grep","principles","selection","framework selection","edit","write","read","pwa","game","web browser","game development","Optimization","framework","browser","development","webgpu",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":39},"01M6G611H2YGV0GZFP90D38ZMJ","vr-ar","VR\u002FAR development principles. Comfort, interaction, performance requirements.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fvr-ar\u002FSKILL.md",[],[104,105,95,106,107,35,85,86,87,81,108,82],"ar","vr ar","interaction","requirements","performance",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":39},"01M6G60XNMHAMV1SV0EJ1CX0AY","templates","Project scaffolding templates for new applications. Use when creating new projects from scratch. Contains 12 templates for various tech stacks.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Ftemplates\u002FSKILL.md",[],[111,116,117,118,119,120,35,121,87,122,123,81],"project scaffolding","From Scratch","tech","project","scaffolding","use","projects","applications",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":39},"01M6G60T0GATMK3Q5H8GDC1Z8S","wcag-audit-patterns","Conduct WCAG 2.2 accessibility audits with automated testing, manual verification, and remediation guidance. Use when auditing websites for accessibility, fixing WCAG violations, or implementing ac...","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fskills\u002Fsecurity\u002Fwcag-audit-patterns\u002FSKILL.md",[],[131,132,133,134,135,35,136,137,138,139,121,140,141,142,143],"wcag audit patterns","wcag audit","patterns","WCAG","audit","manual","with","automated testing","guidance","remediation","verification","accessibility","testing",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":150,"publishedAt":39},"01M6G60PMCHW1FRZ63F931QK3R","vulnerability-scanner","Advanced vulnerability analysis principles. OWASP 2025, Supply Chain Security, attack surface mapping, risk prioritization.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fskills\u002Fsecurity\u002Fvulnerability-scanner\u002FSKILL.md",[],[151,152,153,154,155,156,157,158,35,87,81,159,82,160,161,162,163,164,165,166],"scanner","vulnerability scanner","vulnerability","prioritization","2025","mapping","chain","supply chain","Bash","analysis","risk","owasp","supply chain security","security","supply","advanced",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":173,"publishedAt":39},"01M6G60JZBB8DK0W3DSG1WNMZK","threat-modeling-expert","Expert in threat modeling methodologies, security architecture review, and risk assessment. Masters STRIDE, PASTA, attack trees, and security requirement extraction. Use for security architecture r...","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fskills\u002Fsecurity\u002Fthreat-modeling-expert\u002FSKILL.md",[],[174,175,176,177,178,179,180,181,164,121,182,183,184,35,185,186,187,161,188,189],"modeling","threat modeling expert","threat modeling","expert","threat","risk assessment","architecture review","architecture","security architecture review","trees","security architecture","security requirement extraction","assessment","extraction","review","stride"]