Gmail Runtime Skill
SkillSearchOperate the user's connected Gmail account through the Gmail MCP. Use when the user asks to read, search, summarize, send, reply to, draft, label, archive, or triage email on their Gmail / Google Mail account.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Gmail Runtime Skill skill
What this skill tells your AI
The instructions your AI receives, as published by manor-os/manor-ai in packages/core/ai/skills/mcp_gmail/SKILL.md and read by ahel’s review.
Use this skill to operate the user's connected Gmail account through the Gmail MCP (mcp__gmail__*). Do not use web_search, web_fetch, or a browser to read or send mail when this account is connected — these tools are the source of truth for the user's inbox.
When To Use
Use Gmail when the user names Gmail / Google Mail, or asks to read, search, summarize, triage, send, reply, draft, label, or archive email and a Gmail integration is connected. For non-Gmail IMAP/SMTP accounts use the email MCP; for Outlook use the outlook MCP — the tool surfaces differ, do not mix them.
Connection
If a tool returns an auth error (token expired, insufficient scope, account not connected), stop and tell the user to reconnect Gmail in Integrations. Do not fall back to scraping mail through a browser. mcp__gmail__get_profile is a cheap way to confirm the connected address before acting on "my email".
Core Tools
Read / search:
list_messages— search with Gmail query syntax (required:query, e.g.is:unread newer_than:7d,from:x@y.com). Returns IDs only.get_message— full headers + body bymessage_id.list_threads/get_thread— work at thread granularity for conversations.download_attachment— fetch an attachment by message + attachment id.list_labels/get_profile— labels and the connected address.
Write / send (high-impact — see Guardrails):
send_message— required:to,subject,body; optionalcc,bcc,reply_to_message_id.reply_to_message— required:message_id,body(replies in-thread).list_drafts/get_draft,create_draft/update_draft/delete_draft, thensend_draft— inspect and stage mail before sending; preferred when the user should review first.
Triage:
mark_read/mark_unread,archive_message,trash_message(reversible ~30d viauntrash_message),mark_spam.trash_thread— move a whole conversation to Trash after confirming the thread.batch_modify— add/remove labels across up to 1000message_idsin one call; use for bulk triage instead of looping single calls.create_label/delete_label,add_label/remove_label— manage custom labels and apply them to messages.
Common Recipes
Summarize unread inbox
list_messageswithquery: "is:unread in:inbox newer_than:7d".get_message(formatmetadataorfull) for each returned ID.- Summarize; do not mark read unless the user asked.
Reply to a specific email
list_messagesto locate it (e.g.from:... subject:...), thenget_messageto read full context.- Draft the reply text, show it to the user, and get confirmation (see Guardrails).
reply_to_messagewith thatmessage_idandbody— keeps the thread.
Bulk triage / clean up
list_messageswith a precise query (e.g.from:newsletter@x.com older_than:30d).- Confirm the count and the action with the user.
batch_modify(e.g. addTRASH/ removeINBOX) over the collected IDs — one call.
Guardrails
- Never send or reply without explicit user confirmation of the recipient(s) and the body. Default to
create_draftand show the draft when intent is ambiguous; onlysend_message/send_draftafter the user approves. - Verify recipients before sending — re-read
to/cc/bcc; do not invent addresses. Usebccfor multi-recipient external sends to avoid leaking address lists. - Bulk operations (
batch_modify, mass trash) require an explicit count + confirmation. Preferarchive_message/trash_message(reversible) overmark_spamor hard deletes. - Privacy: only read messages relevant to the task. Do not dump full inbox contents into other tools or external channels.
Edge Cases & Errors
list_messagesreturns IDs only — you mustget_messageto read content; don't assume the query result has bodies.- Empty result ≠ error: report "no matching messages" rather than retrying with broader queries unprompted.
- Pagination: use the returned
page_tokento continue; don't raisemax_resultspast 100. trash_messageis reversible (~30 days) viauntrash_message; there is no separate permanent-delete tool here — say so if the user expects hard deletion.- Auth / scope errors → stop and ask the user to reconnect; do not work around with a browser.
Signals
- GitHub stars
- 171
- Forks
- 52
- Last commit
- Sep 2026
ahel review
S4info
community integration — published by manor-os, not gmail
Automated review, not a security audit. Ruleset v1.
Advanced
- Catalog kind
- skill
- Gateway key
mcp-gmail- Source
- github.com/manor-os/manor-ai