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
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。
mcp-server-qdrant
这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。