Add Gmail integration design for PA agent
Design for read-only Gmail access via MCP server, including: - Architecture using theposch/gmail-mcp - Gmail skill with search, check-unread, check-urgent patterns - Content-based urgency detection - Implementation phases with user/agent ownership 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
135
docs/plans/2025-12-29-gmail-integration-design.md
Normal file
135
docs/plans/2025-12-29-gmail-integration-design.md
Normal file
@@ -0,0 +1,135 @@
|
||||
# Gmail Integration for Personal Assistant
|
||||
|
||||
**Date:** 2025-12-29
|
||||
**Status:** Approved
|
||||
|
||||
## Overview
|
||||
|
||||
Integrate Gmail read access into the Personal Assistant agent via MCP server, enabling email search, unread checking, and urgency detection.
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ Personal Assistant │
|
||||
│ (Opus) │
|
||||
└─────────────────────────┬───────────────────────────────┘
|
||||
│
|
||||
┌───────────────┼───────────────┐
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌──────────┐ ┌──────────┐ ┌──────────┐
|
||||
│ Gmail │ │ Other │ │ Master │
|
||||
│ Skill │ │ Skills │ │ Orch │
|
||||
└────┬─────┘ └──────────┘ └──────────┘
|
||||
│
|
||||
▼
|
||||
┌───────────────┐
|
||||
│ Gmail MCP │ ← theposch/gmail-mcp (Python)
|
||||
│ Server │ ← OAuth: gmail.readonly scope
|
||||
└───────┬───────┘
|
||||
│
|
||||
▼
|
||||
Gmail API
|
||||
```
|
||||
|
||||
## Key Decisions
|
||||
|
||||
| Aspect | Decision | Rationale |
|
||||
|--------|----------|-----------|
|
||||
| Access level | Read-only | Start minimal, upgrade later if needed |
|
||||
| Integration | MCP Server | Native Claude Code mechanism |
|
||||
| Server | theposch/gmail-mcp | Python-based, well-documented, maintained |
|
||||
| OAuth scope | gmail.readonly | Enforce read-only at OAuth level |
|
||||
| Config location | ~/.claude/mcp/ | Dedicated directory for MCP servers |
|
||||
| Tool access | Raw tools + skill | Flexibility + common patterns |
|
||||
| Urgency detection | Content-based | Keywords in subject/body, no VIP list needed |
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
~/.claude/
|
||||
├── mcp/
|
||||
│ ├── servers.json # MCP server registry
|
||||
│ └── gmail/
|
||||
│ ├── config.json # Gmail-specific config
|
||||
│ └── venv/ # Python virtualenv
|
||||
├── skills/
|
||||
│ └── gmail/
|
||||
│ └── SKILL.md # Gmail skill definition
|
||||
│
|
||||
~/.gmail-mcp/
|
||||
├── credentials.json # Google OAuth client (user provides)
|
||||
└── token.json # Refresh token (auto-managed)
|
||||
```
|
||||
|
||||
## MCP Server Configuration
|
||||
|
||||
**servers.json:**
|
||||
|
||||
```json
|
||||
{
|
||||
"gmail": {
|
||||
"command": "~/.claude/mcp/gmail/venv/bin/python",
|
||||
"args": ["-m", "gmail_mcp"],
|
||||
"env": {
|
||||
"GMAIL_CREDENTIALS_PATH": "~/.gmail-mcp/credentials.json",
|
||||
"GMAIL_TOKEN_PATH": "~/.gmail-mcp/token.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Gmail Skill
|
||||
|
||||
**Location:** `~/.claude/skills/gmail/SKILL.md`
|
||||
|
||||
### Patterns
|
||||
|
||||
| Pattern | Description |
|
||||
|---------|-------------|
|
||||
| check-unread | Count and summarize unread emails (limit 20, group by sender/thread) |
|
||||
| check-urgent | Find emails with urgency signals in content |
|
||||
| search \<query\> | Translate natural language to Gmail query syntax |
|
||||
|
||||
### Urgency Detection
|
||||
|
||||
Content-based signals:
|
||||
- **Subject keywords:** urgent, asap, action required, immediate, deadline, time-sensitive, critical, important
|
||||
- **Body phrases:** "by end of day", "by EOD", "as soon as possible", "please respond", "awaiting your reply"
|
||||
|
||||
### Policy
|
||||
|
||||
Read-only enforced at OAuth scope level. No send, delete, or modify operations available.
|
||||
|
||||
## Implementation Plan
|
||||
|
||||
| Phase | Owner | Description |
|
||||
|-------|-------|-------------|
|
||||
| 1. Google Cloud Setup | User | Create project, enable Gmail API, create OAuth credentials, download credentials.json |
|
||||
| 2. MCP Server Installation | PA/Agent | Create directories, set up Python venv, install gmail-mcp |
|
||||
| 3. OAuth Flow | User | Run auth command, complete browser consent |
|
||||
| 4. Claude Code Integration | PA/Agent | Configure MCP in settings, verify tools appear |
|
||||
| 5. Skill Creation | PA/Agent | Create Gmail skill with patterns |
|
||||
| 6. PA Integration | PA/Agent | Update PA docs, test end-to-end |
|
||||
|
||||
## Security Model
|
||||
|
||||
- Read-only enforced at OAuth level (not just policy)
|
||||
- Tokens stored locally in ~/.gmail-mcp/, never transmitted
|
||||
- Can revoke access anytime via Google account settings
|
||||
- MCP server runs locally, emails never pass through third parties
|
||||
|
||||
## Upgrade Path
|
||||
|
||||
To add write capabilities later:
|
||||
|
||||
1. Re-run OAuth flow with `gmail.modify` scope
|
||||
2. Add send/manage patterns to Gmail skill
|
||||
3. Update skill policy documentation
|
||||
4. No server changes needed
|
||||
|
||||
## Sources
|
||||
|
||||
- [theposch/gmail-mcp](https://github.com/theposch/gmail-mcp) - MCP server implementation
|
||||
- [GongRzhe/Gmail-MCP-Server](https://github.com/GongRzhe/Gmail-MCP-Server) - Alternative implementation
|
||||
Reference in New Issue
Block a user