claude-2-mail
Local MCP server for reading/sending email via Gmail and managing Google Calendar events, enabling an AI agent to handle email and calendar operations through natural language.
README
claude-2-mail
Local MCP server for Gmail + Google Calendar. Lets your AI agent read/send email and manage your calendar — runs locally via stdio.
Tools
| Tool | What it does |
|---|---|
mail_list |
List recent emails (folder, count, unread filter) |
mail_read |
Read full email by UID |
mail_search |
Search by sender, subject, body, date range |
mail_draft |
Draft a reply or new email |
mail_send |
Send an approved email |
mail_auto_reply |
Auto-reply to whitelisted senders |
calendar_list |
List upcoming events |
calendar_create |
Create a new event |
calendar_update |
Update or delete an event |
Prerequisites
- Python 3.10+
- A Google account
- An MCP-compatible client (Claude Code, Cursor, etc.)
Setup
Auth Pipeline (Overview)
There are two separate auth systems:
| System | Used for | How it works |
|---|---|---|
| Gmail App Password | IMAP (read) + SMTP (send) | 16-char password from Google Account settings |
| Google OAuth2 | Calendar API | Browser-based consent flow, saves a token file |
You need both. App Password for email, OAuth2 for calendar.
1. Install Dependencies
pip install mcp google-api-python-client google-auth-httplib2 google-auth-oauthlib
2. Create a Gmail App Password (for Email)
Gmail uses IMAP/SMTP with an App Password — NOT your real Google password.
Steps:
- Go to Google Account Security
- Enable 2-Step Verification (required — App Passwords won't work without it)
- Go to App Passwords
- Select app: Mail, device: Other (Custom name) → type "claude-2-mail"
- Click Generate → copy the 16-character password (e.g.
abcd efgh ijkl mnop)
Why: Google blocks "less secure apps". App Passwords are per-app tokens that bypass this.
3. Create a Google Cloud Project (for Calendar)
Calendar needs OAuth2. This is a multi-step process — follow in order:
Step A — Create project + enable API:
- Go to Google Cloud Console
- Click Select a project → New Project → name it → Create
- Select your new project
- Go to APIs & Services → Library
- Search "Google Calendar API" → click it → Enable
Step B — Configure OAuth consent screen:
- Go to APIs & Services → OAuth consent screen
- User type: External → Create
- Fill in: App name, User support email, Developer contact email
- Save and Continue through scopes (add nothing) → Back to Dashboard
- Under Test users → Add users → add your own email address
Why Test users: Until your app is published, only test users can authorize it. Without this step, OAuth will fail with "access_blocked".
Step C — Create OAuth credentials:
- Go to APIs & Services → Credentials
- Create Credentials → OAuth client ID
- Application type: Desktop app → name it → Create
- Click Download JSON → save the file
Why Desktop app: MCP servers run locally. "Desktop app" type doesn't need a redirect URI — it uses localhost callback.
4. Configure
mkdir -p ~/.config/claude-2-mail
cp config/config.template.json ~/.config/claude-2-mail/config.json
cp config/.secrets.template ~/.config/claude-2-mail/.secrets
cp config/credentials.json.template ~/.config/claude-2-mail/credentials.json
Edit each file:
~/.config/claude-2-mail/config.json — your email, display name, settings.
~/.config/claude-2-mail/.secrets — your App Password:
export GMAIL_APP_PASSWORD="abcd efgh ijkl mnop"
~/.config/claude-2-mail/credentials.json — paste the downloaded OAuth JSON.
Lock permissions:
chmod 600 ~/.config/claude-2-mail/config.json
chmod 600 ~/.config/claude-2-mail/.secrets
chmod 600 ~/.config/claude-2-mail/credentials.json
5. Source the Secrets
Add to ~/.bashrc or ~/.zshrc:
[ -f ~/.config/claude-2-mail/.secrets ] && source ~/.config/claude-2-mail/.secrets
Reload: source ~/.bashrc
6. Register in Your MCP Client
Claude Code (~/.mcp.json):
{
"mcpServers": {
"gmail-calendar": {
"command": "python",
"args": ["/path/to/claude-2-mail/gmail_calendar_mcp.py"],
"env": {
"GMAIL_MAIL_CONFIG": "/home/YOUR_USER/.config/claude-2-mail/config.json"
}
}
}
}
7. First Run
First Calendar use opens a browser for OAuth approval. One-time — token saves for future.
Troubleshooting
| Problem | Fix |
|---|---|
AUTHENTICATIONFAILED (IMAP) |
Regenerate App Password. 2FA must be on. |
invalid_client (OAuth) |
Check credentials.json is Desktop app type. |
access_blocked (OAuth) |
Add your email as Test user in OAuth consent screen. |
Token expired |
Delete calendar_token.json, re-auth. |
Config not found |
Check GMAIL_MAIL_CONFIG env var path. |
CredentialsWithRegionalAccessBoundary.refresh() missing argument |
Update google-auth: pip install --upgrade google-auth |
| Missing pip libs | pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib |
Testing
pip install -e ".[dev]"
pytest tests/ -v
Security
- App Password in
.secrets(chmod 600), NOT in config.json or shell rc - OAuth tokens stored chmod 600
- Logging redacts emails/tokens/passwords at INFO level
- IMAP input escaped to prevent injection
- Narrow OAuth scopes only
License
MIT.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。