gmail — Claude Code skill: what it does, how to install
Searches, reads, and sends emails through Gmail directly from the agent interface. Helpful for triaging the inbox, managing drafts, and organizing labels.
npx skills add sanjay3290/ai-skills --skill gmail -a claude-codeWhat gmail does
This skill connects the agent directly to Gmail without requiring a full MCP server. All actions run through scripts/gmail.py, covering email search with Gmail query syntax, reading messages by ID, sending emails, and managing drafts. The tool also updates labels to archive threads, mark items as unread, or star messages.
Authentication relies on standalone OAuth handled by scripts/auth.py. It opens a browser during login and saves credentials into the system keyring. Tokens refresh automatically through a cloud function. Personal Gmail accounts are completely unsupported, so a Google Workspace account is strictly mandatory.
What it helps with
- search emails using native Gmail query syntax
- retrieve full message bodies or metadata by ID
- compose drafts and send plain text or HTML emails
- archive messages and organize labels in the inbox
Example prompts for the agent
- Find all unread emails from colleagues received this week
- Show the full content of the email with MESSAGE_ID
- Create a draft to [email protected] with the subject Team Update
How to install gmail
1Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill gmail -a claude-code2Manually: put the files in place
~/.claude/skills/gmail/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/gmail/
1Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill gmail -a codex2Manually: put the files in place
.agents/skills/gmail/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill gmail -a cursor2Manually: put the files in place
.cursor/skills/gmail/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install sanjay3290/ai-skills gmail2Manually: put the files in place
.github/skills/gmail/SKILL.md1Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill gmail -a gemini-cli2Platform CLI
gemini skills install https://github.com/sanjay3290/ai-skills --path skills/gmailManually: put the files in place
.devin/skills/gmail/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill gmail -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about gmail
How do I install gmail in Claude Code?
Install the skill by running npx skills add sanjay3290/ai-skills --skill gmail -a claude-code. The configuration is saved to ~/.claude/skills/gmail/SKILL.md.
What does the gmail skill do?
It allows agents to search, read, send emails, and manage drafts or labels in Gmail without running a dedicated MCP server.
Does this skill support personal Gmail accounts?
No, it only supports Google Workspace accounts. Personal accounts cannot be used with this skill.
Source text
SKILL.md · Apache-2.0
--- name: gmail description: | Interact with Gmail - search emails, read messages, send emails, create drafts, and manage labels. Use when user asks to: search email, read email, send email, create email draft, mark as read, archive email, star email, or manage Gmail labels. Lightweight alternative to full Google Workspace MCP server with standalone OAuth authentication. license: Apache-2.0 metadata: author: sanjay3290 version: "1.0" --- # Gmail Lightweight Gmail integration with standalone OAuth authentication. No MCP server required. > **⚠️ Requires Google Workspace account.** Personal Gmail accounts are not supported. ## First-Time Setup Authenticate with Google (opens browser): ```bash python scripts/auth.py login ``` Check authentication status: ```bash python scripts/auth.py status ``` Logout when needed: ```bash python scripts/auth.py logout ``` ## Commands All operations via `scripts/gmail.py`. Auto-authenticates on first use if not logged in. ### Search Emails ```bash # Search with Gmail query syntax python scripts/gmail.py search "from:[email protected] is:unread" # Search recent emails (no query returns all) python scripts/gmail.py search --limit 20 # Filter by label python scripts/gmail.py search --label INBOX --limit 10 # Include spam and trash python scripts/gmail.py search "subject:important" --include-spam-trash ``` ### Read Email Content ```bash # Get full message content python scripts/gmail.py get MESSAGE_ID # Get just metadata (headers) python scripts/gmail.py get MESSAGE_ID --format metadata # Get minimal response (IDs only) python scripts/gmail.py get MESSAGE_ID --format minimal ``` ### Send Emails ```bash # Send a simple email python scripts/gmail.py send --to "[email protected]" --subject "Hello" --body "Message body" # Send with CC and BCC python scripts/gmail.py send --to "[email protected]" --cc "[email protected]" --bcc "[email protected]" \ --subject "Team Update" --body "Update message" # Send from an alias (must be configured in Gmail settings) python scripts/gmail.py send --to "[email protected]" --subject "Hello" --body "Message" \ --from "Mile9 Accounts <[email protected]>" # Send HTML email python scripts/gmail.py send --to "[email protected]" --subject "HTML Email" \ --body "<h1>Hello</h1><p>HTML content</p>" --html ``` ### Draft Management ```bash # Create a draft python scripts/gmail.py create-draft --to "[email protected]" --subject "Draft Subject" \ --body "Draft content" # Send an existing draft python scripts/gmail.py send-draft DRAFT_ID ``` ### Modify Messages (Labels) ```bash # Mark as read (remove UNREAD label) python scripts/gmail.py modify MESSAGE_ID --remove-label UNREAD # Mark as unread python scripts/gmail.py modify MESSAGE_ID --add-label UNREAD # Archive (remove from INBOX) python scripts/gmail.py modify MESSAGE_ID --remove-label INBOX # Star a message python scripts/gmail.py modify MESSAGE_ID --add-label STARRED # Unstar a message python scripts/gmail.py modify MESSAGE_ID --remove-label STARRED # Mark as important python scripts/gmail.py modify MESSAGE_ID --add-label IMPORTANT # Multiple label changes at once python scripts/gmail.py modify MESSAGE_ID --remove-label UNREAD --add-label STARRED ``` ### List Labels ```bash # List all Gmail labels (system and user-created) python scripts/gmail.py list-labels ``` ## Gmail Query Syntax Gmail supports powerful search operators: | Query | Description | |-------|-------------| | `from:[email protected]` | Emails from a specific sender | | `to:[email protected]` | Emails to a specific recipient | | `subject:meeting` | Emails with "meeting" in subject | | `is:unread` | Unread emails | | `is:starred` | Starred emails | | `is:important` | Important emails | | `has:attachment` | Emails with attachments | | `after:2024/01/01` | Emails after a date | | `before:2024/12/31` | Emails before a date | | `newer_than:7d` | Emails from last 7 days | | `older_than:1m` | Emails older than 1 month | | `label:work` | Emails with a specific label | | `in:inbox` | Emails in inbox | | `in:sent` | Sent emails | | `in:trash` | Trashed emails | Combine with AND (space), OR, or - (NOT): ```bash python scripts/gmail.py search "from:[email protected] is:unread newer_than:1d" python scripts/gmail.py search "subject:urgent OR subject:important" python scripts/gmail.py search "from:[email protected] -is:starred" ``` ## Common Label IDs | Label | ID | |-------|-----| | Inbox | `INBOX` | | Sent | `SENT` | | Drafts | `DRAFT` | | Spam | `SPAM` | | Trash | `TRASH` | | Starred | `STARRED` | | Important | `IMPORTANT` | | Unread | `UNREAD` | ## Token Management Tokens stored securely using the system keyring: - **macOS**: Keychain - **Windows**: Windows Credential Locker - **Linux**: Secret Service API (GNOME Keyring, KDE Wallet, etc.) Service name: `gmail-skill-oauth` Tokens automatically refresh when expired using Google's cloud function.
© sanjay3290 · Apache-2.0 · sanjay3290/ai-skills