Gmail
Search and read Gmail messages including email content, attachments, and metadata.
Overview
This skill provides comprehensive access to Gmail for:
- Email Search: Search using Gmail's powerful query syntax
- Email Reading: Get full email content including body and headers
- Recent Emails: List recent inbox messages
- Meeting Invites: Search specifically for calendar/meeting invitations
Prerequisites
Required:
- Google Cloud Project with Gmail API enabled
- OAuth credentials in
~/.config/opencode/.mcp-credentials.json(requires 'gmail' section) - First run will prompt for OAuth authorization
Verify Credentials:
cat ~/.config/opencode/.mcp-credentials.json
If not configured:
# Enable Gmail API in Google Cloud Console:
# https://console.cloud.google.com/apis/library/gmail.googleapis.com
Usage
CLI Commands
# Search Gmail
~/.config/opencode/skills/comms/gmail/scripts/gmail.py search '<query>' [max_results]
# Read specific email by search query
~/.config/opencode/skills/comms/gmail/scripts/gmail.py get '<query>' [index]
# List recent emails from inbox
~/.config/opencode/skills/comms/gmail/scripts/gmail.py list [count]
# Search for meeting invites
~/.config/opencode/skills/comms/gmail/scripts/gmail.py invites [days_forward] [max_results]
Command Examples
Search for emails from a specific sender:
~/.config/opencode/skills/comms/gmail/scripts/gmail.py search "from:john@example.com"
Search for emails with specific subject:
~/.config/opencode/skills/comms/gmail/scripts/gmail.py search "subject:project update"
Search for emails with attachments:
~/.config/opencode/skills/comms/gmail/scripts/gmail.py search "has:attachment"
Search with date range:
~/.config/opencode/skills/comms/gmail/scripts/gmail.py search "after:2024/12/01 before:2024/12/31"
Read first matching email:
~/.config/opencode/skills/comms/gmail/scripts/gmail.py get "important" 0
List 10 most recent emails:
~/.config/opencode/skills/comms/gmail/scripts/gmail.py list 10
Search for meeting invites in next 7 days:
~/.config/opencode/skills/comms/gmail/scripts/gmail.py invites 7 20
Authentication
On first run, script will:
- Open a browser window for OAuth authorization
- Save token to
~/.config/opencode/skills/comms/gmail/gmail_token.json
To re-authenticate:
rm ~/.config/opencode/skills/comms/gmail/gmail_token.json
~/.config/opencode/skills/comms/gmail/scripts/gmail.py list
Gmail Search Syntax
The search command supports Gmail's full search syntax:
| Operator | Example | Description |
|---|---|---|
from: | from:john@example.com | From specific sender |
to: | to:team@example.com | To specific recipient |
subject: | subject:project | Subject contains text |
in: | in:inbox, in:sent | Search specific folder |
is: | is:unread, is:starred | Filter by status |
has:attachment | has:attachment | Has attachments |
after: | after:2024/12/01 | After date |
before: | before:2024/12/31 | Before date |
OR | from:a OR from:b | Boolean OR |
- | project -update | Exclude word |
Complex Examples
# Unread emails from boss with attachments
~/.config/opencode/skills/comms/gmail/scripts/gmail.py search "is:unread from:boss@example.com has:attachment"
# Emails sent this week
~/.config/opencode/skills/comms/gmail/scripts/gmail.py search "in:sent after:2025-01-01"
# Subject or body contains "urgent", not from newsletter
~/.config/opencode/skills/comms/gmail/scripts/gmail.py search "urgent -from:newsletter"
Output Format
Search output:
Found 3 emails:
1. From: john@example.com
Subject: Project Update
Date: Thu, 2 Jan 2025 10:30:45 +0000
Preview: Hi team, I wanted to share the latest updates on our project...
2. From: support@service.com
Subject: Your ticket has been resolved
Date: Thu, 2 Jan 2025 09:15:20 +0000
Preview: Thank you for contacting us. Your support ticket...
Get email output:
From: john@example.com
To: team@example.com
Cc: manager@example.com
Subject: Project Update
Date: Thu, 2 Jan 2025 10:30:45 +0000
Hi team,
I wanted to share the latest updates on our project.
## Progress
- Phase 1 is complete
- Phase 2 is 80% done
## Next Steps
1. Review the attached report
2. Schedule follow-up meeting
3. Update stakeholders
Best,
John
List recent output:
Recent 10 emails from inbox:
1. john@example.com: Project Update
Thu, 2 Jan 2025 10:30:45 +0000
Hi team, I wanted to share the latest updates on our project...
2. support@service.com: Your ticket has been resolved
Thu, 2 Jan 2025 09:15:20 +0000
Thank you for contacting us. Your support ticket...
Meeting invites output:
Found 3 meeting invites in next 7 days:
1. From: calendar-team@company.com
Subject: Inviting you to: Team Standup
Date: Thu, 2 Jan 2025 09:00:00 +0000
Preview: *Invitation* You are invited to Team Standup on...
Error Handling
-
OAuth credentials not found
- Error:
OAuth credentials not found at ~/.config/opencode/.mcp-credentials.json - Solution: Create credentials file with Gmail OAuth credentials
- Error:
-
API not enabled
- Error:
API is not enabled for this project - Solution: Enable Gmail API in Google Cloud Console
- Error:
-
No emails found
- Error:
No emails found matching: <query> - Solution: Try different search terms or check date range
- Error:
-
Email not found by index
- Error:
Email not found (tried index 1 of 1 results) - Solution: Index is out of range, use smaller index number
- Error:
Examples
Example 1: Search for Urgent Emails
User Request: "Find urgent emails I need to respond to"
Command:
~/.config/opencode/skills/comms/gmail/scripts/gmail.py search "urgent is:unread"
Example 2: Read Specific Email
User Request: "Read the latest email from John"
Command:
~/.config/opencode/skills/comms/gmail/scripts/gmail.py get "from:john@example.com" 0
Example 3: Check Recent Activity
User Request: "What's in my inbox?"
Command:
~/.config/opencode/skills/comms/gmail/scripts/gmail.py list 10
Example 4: Find Meeting Invites
User Request: "Check if I have any meeting invites for next week"
Command:
~/.config/opencode/skills/comms/gmail/scripts/gmail.py invites 7 20
Example 5: Search with Date Range
User Request: "Find emails about project sent last month"
Command:
~/.config/opencode/skills/comms/gmail/scripts/gmail.py search "project after:2024/12/01 before:2025/01/01"
Notes
- Email content is extracted from text/plain or stripped from text/html
- Special characters and encoding issues are handled with UTF-8 fallback
- Search uses Gmail's query language (same as Gmail web search)
- Snippets are truncated to ~100-150 characters
- Full email body is retrieved when using
getcommand
