ワンクリックで
gmail
Read, search and send emails via Gmail API. Requires Google OAuth. Tools: gmail_send, http.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Read, search and send emails via Gmail API. Requires Google OAuth. Tools: gmail_send, http.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Search, subscribe, and listen to podcasts. Download RSS feeds, manage episodes, and play audio with position tracking. Tools: http, file_storage, media_queue, play_audio.
Manage local lists (shopping, to-do, etc.) stored as files. Add, remove, check and read items. Tools: file_storage.
Read, create, update and delete Google Calendar events. Requires Google OAuth. Tools: http.
Search contacts by name and retrieve phone numbers. Use before calling or sending SMS. Tools: query.
Start navigation, get directions and route info via Google Maps app. Tools: intent, http (optional, requires Maps API key for traffic/route details).
Read, create, complete and delete tasks via Google Tasks API. Requires Google OAuth. Tools: http.
| name | gmail |
| description | Read, search and send emails via Gmail API. Requires Google OAuth. Tools: gmail_send, http. |
Read and send emails via the Gmail API.
✅ RECOMMENDED for sending emails - Only available when Gmail is enabled and configured.
The gmail_send tool automatically handles email formatting and encoding. Simply provide email parameters (to, subject, body, etc.) and the tool handles the rest. See the "Send email" section below for details.
All requests require auth_provider: "google".
For sending emails: Use the gmail_send tool (see above).
Gmail sorts emails into categories. Not all accounts have the same category labels. Common label IDs:
CATEGORY_PRIMARY or CATEGORY_PERSONAL - Important, personal emails (the main inbox tab). Which one exists varies by account.CATEGORY_SOCIAL - Social network notificationsCATEGORY_PROMOTIONS - Marketing, newsletters, dealsCATEGORY_UPDATES - Automated notifications, confirmations, receiptsCATEGORY_FORUMS - Mailing lists, discussion groupsIMPORTANT - Emails Gmail considers important (can overlap with any category)Use q=category:primary to reliably filter for important emails regardless of which label the account uses:
{
"method": "GET",
"url": "https://gmail.googleapis.com/gmail/v1/users/me/messages?maxResults=10&q=category:primary",
"auth_provider": "google"
}
Fallback: If the above returns 0 results, fall back to fetching from INBOX without category filter:
{
"method": "GET",
"url": "https://gmail.googleapis.com/gmail/v1/users/me/messages?maxResults=10&labelIds=INBOX",
"auth_provider": "google"
}
Only when the user explicitly asks for promotions, social, updates, etc.:
{
"method": "GET",
"url": "https://gmail.googleapis.com/gmail/v1/users/me/messages?maxResults=10&q=category:promotions",
"auth_provider": "google"
}
Replace promotions with social, updates, or forums as needed.
{
"method": "GET",
"url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{MESSAGE_ID}?format=full",
"auth_provider": "google"
}
{
"method": "GET",
"url": "https://gmail.googleapis.com/gmail/v1/users/me/messages?q={SEARCH_TERM}&maxResults=5",
"auth_provider": "google"
}
Example search terms:
from:boss@company.com - From a specific personsubject:Meeting - Subject contains "Meeting"is:unread - Unread emailsnewer_than:1d - Emails from the last 24 hoursnewer_than:7d - Emails from the last 7 daysnewer_than:1m - Emails from the last monthnewer_than:1y - Emails from the last yearolder_than:5d - Emails older than 5 daysafter:1388552400 - After a date/time (Unix timestamp in seconds). Use datetime tool with action: "absolute" to calculate timestamps.before:1391230800 - Before a date/time (Unix timestamp in seconds)after:2024/01/01 - After a date (YYYY/MM/DD, uses PST - may miss emails in other timezones)before:2024/01/31 - Before a date (YYYY/MM/DD, uses PST)category:primary - Primary/personal emails onlycategory:promotions - Promotions onlyFor accurate timezone handling, use Unix timestamps with the datetime tool:
Use datetime tool with action: "absolute" to get Unix timestamps in local timezone:
{
"action": "absolute",
"base": "today",
"output_unit": "seconds"
}
Available base values:
"today", "yesterday", "tomorrow", "next_monday"–"next_sunday", "next_january"–"next_december""2024-03-15", "2024-03-15T14:00:00", "2024-03-15T14:00:00Z")Optional parameters:
time: "HH:MM" or "HH:MM:SS" format (e.g., "09:00")anchor: "beginofday", "endofday", "beginofweek", "endofweek", "beginofmonth", "endofmonth"output_unit: "seconds" (default) or "milliseconds"Date filtering examples:
datetime with {"action": "absolute", "base": "today", "output_unit": "seconds"}, then use q=after:{TIMESTAMP} category:primaryq=newer_than:1d category:primaryq=newer_than:7d category:primarydatetime with {"action": "absolute", "base": "yesterday", "output_unit": "seconds"}, then use q=after:{TIMESTAMP} category:primaryNote: Date formats like after:YYYY/MM/DD use PST timezone and may miss emails in other timezones. Always use Unix timestamps for accurate filtering.
Use the gmail_send tool (only available when Gmail is enabled and configured).
The gmail_send tool handles all email formatting and encoding automatically. Simply provide the email parameters:
{
"to": "recipient@example.com",
"subject": "Subject here",
"body": "Message body here",
"cc": "cc@example.com",
"bcc": "bcc@example.com"
}
For replies, include thread information:
{
"to": "sender@example.com",
"subject": "Re: Original subject",
"body": "Reply text here",
"threadId": "{THREAD_ID_OF_ORIGINAL_EMAIL}",
"inReplyTo": "<message-id@mail.gmail.com>",
"references": "<message-id@mail.gmail.com>"
}
Use the gmail_send tool.
When replying to an email using gmail_send:
to = sender of the original email (= value of the From: header of the received email). NOT the recipient.subject = Re: {ORIGINAL_SUBJECT} (only prepend if not already starting with "Re:").inReplyTo and references to the Message-ID from the original email (including angle brackets, e.g. <abc123@mail.gmail.com>).threadId from the original email.Example:
{
"to": "sender@example.com",
"subject": "Re: Original subject",
"body": "Reply text here.",
"threadId": "{THREAD_ID_OF_ORIGINAL_EMAIL}",
"inReplyTo": "<message-id@mail.gmail.com>",
"references": "<message-id@mail.gmail.com>"
}
Find the Message-ID (for inReplyTo/references) and threadId in the email details fetch (format=full) under payload.headers and threadId respectively.
If an API call fails or returns unexpected results, never tell the user about label names, API errors, HTTP status codes, or internal implementation details. Simply retry silently with a fallback strategy, or say something generic like "Let me check that again" before retrying.
When the user asks to read, check, or show emails the content MUST be summarized in your own words - short, concise and in the language the user speaks. Only when the user explicitly requests a literal/word-for-word reading (e.g. "read it verbatim", "read the exact text", "read it word for word") should you output the full original email body.
When the user asks for their emails, new messages, or inbox updates, only fetch primary/personal emails (use q=category:primary). Promotions, social notifications, updates, and forums are excluded by default.
Only fetch from other categories when the user explicitly asks for them (e.g. "Do I have any promotions?", "Check my spam", "Show me social emails").
If the user asks for "all emails" or "everything", fetch from INBOX (all categories) but clearly separate primary emails from the rest in the response: present primary emails first, then mention how many promotional/social/other emails there are without reading them in detail.
When presenting an email, always state how many attachments it has.
Detect attachments by checking payload.parts - any part whose filename field is non-empty counts as an attachment.
When the user asks for a general inbox update (e.g. "What's new?", "Check my inbox", "Any new emails?"):
q=category:primary (IDs), e.g. last 10. If 0 results, fall back to labelIds=INBOX.format=metadata, with metadataHeaders=From,Subject,Date).From header)When the user then asks about a specific email from the overview (e.g. "What did Georg write?", "Tell me about Karl's email"):
format=full).Only if the user then explicitly asks for a verbatim/word-for-word reading, output the full original text.
q=category:primary (fall back to labelIds=INBOX).tts tool.is:unread category:primary, fetch details, summarize each + TTSdatetime with {"action": "absolute", "base": "today", "output_unit": "seconds"}, then search q=after:{TIMESTAMP} category:primary, fetch details, summarize eachq=newer_than:1d category:primary, fetch details, summarize eachq=newer_than:7d category:primary, present overviewq=category:promotions, present overviewfrom:bankformat=metadata (with metadataHeaders=From,Subject,Date) for the overview to save bandwidth; use format=full only when the user drills down into a specific emailq=category:primary for default inbox queries (works regardless of account label setup); fall back to labelIds=INBOX if no resultsdatetime tool with action: "absolute": {"action": "absolute", "base": "today", "output_unit": "seconds"}. Returns Unix timestamp in local timezone. Use with after:{TIMESTAMP} or before:{TIMESTAMP}. Reference: Gmail API filtering