Gmail
| Metadata | Value |
|---|---|
| Category | comms |
| Capabilities | http |
| Website | https://mail.google.com |
Returns shapes
Section titled “Returns shapes”conversation— fromget_conversationconversation[]— fromlist_conversationsemail— fromget_email,get_draft,send_email,reply_email,forward_email,modify_email,trash_email,untrash_email,create_draft,update_draft,send_draftemail[]— fromlist_email_stubs,list_emails,search_emails,list_draftsfile— fromget_attachmenttag— fromcreate_label,update_labeltag[]— fromlist_labels
Connections
Section titled “Connections”gmailsync
Readme
Section titled “Readme”Full-featured email via the Gmail REST API — read, search, send, reply, forward, label, archive, draft, attachments, filters, and batch operations.
Agent Guidance
Section titled “Agent Guidance”Use email.list for everything. list_emails returns full emails — subject, snippet, headers, body — in one call. No need to call get_email separately per message. Use search_emails for query-driven searches; it also returns full content.
Always default to inbox. When the user asks to check email or see unread messages, ALWAYS scope to the inbox first using query: "in:inbox is:unread". Do NOT use bare is:unread — that searches all mail including Promotions, Updates, and Spam and will return hundreds of irrelevant messages. After showing inbox results, briefly note counts for other categories if there are any (e.g. “Also 50+ unread in Promotions — want me to show those?”).
Folder query syntax — use the query param, not label_ids:
- Inbox:
in:inbox - Spam:
in:spam - Promotions:
category:promotions - Updates:
category:updates - Social:
category:social
Do not pass label_ids as an array param — it causes a 400 error from the API.
Auth — Google OAuth via provides: google
Section titled “Auth — Google OAuth via provides: google”When some integration already holds Google OAuth tokens (often via macOS Keychain) and declares provides: google with a credential_get path, this skill can reuse those tokens — no separate Gmail API project for the user.
How it works:
- A provider stores OAuth material in a system-specific way (Keychain entry shape depends on the app).
- The provider’s
provides/credential_getsurface is matched by the runtime. - This skill declares
connections.gmail.oauth.service: google. - The resolver injects the configured auth headers on REST calls.
- If multiple providers satisfy
google, the agent should ask the user which one to use.
Without a matching provider: complete the standard OAuth flow at GET /sys/oauth/authorize/gmail.
Capabilities
Section titled “Capabilities”OPERATION DESCRIPTION──────────────────── ───────────────────────────────────────────────────conversation.list Browse threads with snippets (best for browsing)conversation.get Full thread with all messages, headers, bodyemail.get Full email with body, headers, attachment metadataemail.list List emails with full content (subject, snippet, body)email.search Search emails with full content (Gmail query syntax)email.send Compose and send a new email (text or HTML)email.reply Reply to an email (keeps it in the thread)email.forward Forward an email to another recipientemail.modify Mark read/unread, star, archive, label, spamemail.trash Move to trashemail.untrash Restore from trashemail.batch_modify Bulk label/read/archive (up to 1000 messages)email.batch_delete Permanently delete in bulk (IRREVERSIBLE)list_drafts List draftsget_draft Get a draft with full contentcreate_draft Create a new draftupdate_draft Update an existing draftsend_draft Send a draftdelete_draft Permanently delete a draftget_profile Account info (email, message count, history ID)list_labels All labels with IDscreate_label Create a new labelupdate_label Update label name or visibilitydelete_label Delete a labellist_filters List server-side filters/rulescreate_filter Create a filter (auto-label, skip inbox, forward)delete_filter Delete a filterget_attachment Download an attachment by IDget_raw Full RFC 2822 raw message sourceget_history Incremental changes since a history ID (for sync)get_vacation Vacation/auto-reply settingsset_vacation Set or disable vacation auto-replylist_send_as List send-as aliasesGmail Query Syntax
Section titled “Gmail Query Syntax”is:unread Unread messagesis:starred Starred messagesis:important Important messagesfrom:boss@company.com From a specific senderto:me Sent directly to mesubject:invoice Subject contains "invoice"after:2026/01/01 Messages after a datebefore:2026/02/01 Messages before a datehas:attachment Messages with attachmentsfilename:pdf Attachments with specific typelabel:INBOX is:unread Unread inbox messagesin:sent Sent mailin:trash Trashed messagesin:spam Spam messagescategory:social Social categorycategory:promotions Promotions categorylarger:5M Messages larger than 5MBAccounts
Section titled “Accounts”Each Gmail address is a separate account. Pass account: "user@example.com" to
target a specific address. See the Configured Accounts section above for available accounts.