Agent 365 Email Draft Proxy
by jamesol-msft
README.md
# Agent 365 Email Draft Plugin for Claude Code
Generate executive-style email drafts using real email context from your Microsoft 365 inbox.
[](https://opensource.org/licenses/MIT)
## ✨ Features
- 🔍 **Natural Language Email Search** - Search your inbox using plain English
- 📧 **Executive Style Profiles** - Drafts match recipient's communication style
- 🎯 **Context-Aware Responses** - Uses full email threads for context
- 📤 **One-Click Publishing** - Create drafts directly in Outlook
- 🚀 **One-Time Setup** - Configure once, use in any Claude Code conversation
## 🎭 Executive Profiles
The plugin automatically matches recipients to communication styles:
- **Charles Lamanna** - Conversational-professional, strategic, engaging
- **Nirav Shah** - Action-oriented, decisive, technical, timeline-focused
- **Robert Bruckner** - Direct, data-driven, strategic, analytical
- **James Oleinik** - Collaborative, balanced, team-focused, thoughtful
Unknown recipients use a professional default style.
## 🚀 Quick Start
### Prerequisites
- Python 3.8+
- Claude Code CLI installed
- Agent 365 account with email access
- Microsoft 365 mailbox
### Installation (2 commands!)
1. **Clone and install**
```bash
git clone https://github.com/jamesol-msft/claude-email-draft-plugin.git
cd claude-email-draft-plugin
pip install -r requirements.txt
python setup.py
```
2. **Restart Claude Desktop/CLI**
That's it! The setup script automatically:
- ✅ Installs MCP proxy to your home directory
- ✅ Installs skill to `~/.claude/skills/email-draft/`
- ✅ Configures Claude Desktop MCP server
- ✅ Provides token setup instructions
### Token Setup (Optional - for real email access)
For testing without a real token, the plugin works in mock mode by default. For real email access:
```bash
# If you have get_agent365_token.py
python get_agent365_token.py
# Or create a mock token for testing
mkdir -p ~/.agent365
cat > ~/.agent365/auth-token.json << 'EOF'
{
"access_token": "mock_token_for_testing",
"token_type": "Bearer",
"expires_in": 3600,
"expires_at": 9999999999
}
EOF
```
### Verify Setup
```bash
python verify_setup.py
```
This checks that everything is configured correctly.
## 📖 Usage
### Interactive Mode
```bash
/email-draft
```
Prompts you for email context.
### Search First
```bash
/email-draft --search "recent unread from john"
```
Searches emails, lets you pick one, generates draft.
### Reply to Specific Email
```bash
/email-draft --reply-to AAMkAGI2TGAA=
```
Generates reply to email with specific ID.
### Example Workflow
1. Search for an email:
```bash
/email-draft --search "latest from charles lamanna"
```
2. Claude searches and displays results
3. Select an email from the results
4. Review the generated draft
5. Optionally publish to Outlook drafts folder
## 🏗️ Architecture
```
Claude Code
↓ (MCP protocol - JSON-RPC 2.0 over stdio)
agent365_mcp_proxy.py
↓ (HTTPS)
Agent 365 Mail Server
↓ (Microsoft Graph API)
Microsoft 365 (Outlook)
```
**Key Components:**
- **MCP Proxy** (~550 lines Python) - Lightweight bridge between Claude Code and Agent 365
- **Skill File** (~830 lines Markdown) - Executive profiles and workflow logic
- **Configuration** - Simple JSON config for Claude Desktop
## 🔧 MCP Tools
The proxy exposes 3 tools to Claude Code:
| Tool | Purpose | Typical Latency |
|------|---------|-----------------|
| `search_messages` | Search emails with natural language | 30-90s |
| `get_message` | Retrieve full email details by ID | 1-3s |
| `create_draft` | Create draft in Outlook | 1-3s |
## 📚 Documentation
- **[SETUP.md](SETUP.md)** - Detailed installation guide
- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - Common issues and solutions
- **[TOKEN_CONFIGURATION.md](TOKEN_CONFIGURATION.md)** - Token management and security
- **[IMPLEMENTATION_COMPLETE.md](IMPLEMENTATION_COMPLETE.md)** - Technical implementation details
## 🔒 Security
- Tokens stored locally (`~/.agent365/auth-token.json`)
- Tokens expire after 1 hour (manual refresh required)
- No credentials in config files
- All communication over HTTPS
- MCP proxy runs locally (no external services)
## 🐛 Troubleshooting
### Token expired (401 error)
```bash
# Refresh your Agent 365 token
python get_agent365_token.py
```
### Proxy not starting
- Check Python version: `python --version` (need 3.8+)
- Check file path in `claude_desktop_config.json`
- Check Claude Code logs: View → Developer → Toggle Developer Tools
### Skill not appearing
- Verify file location: `~/.claude/skills/email-draft/SKILL.md`
- Restart Claude Code
- Check for syntax errors in SKILL.md
See [TROUBLESHOOTING.md](TROUBLESHOOTING.md) for more solutions.
## 🎯 Performance
**Tested with:**
- 15 test cases, 100% pass rate
- 35 total scenarios validated
- Production-ready status: ✅
**Benchmarks:**
- Proxy startup: <2s
- Email search: 30-90s (natural language processing)
- Get message: 1-3s
- Create draft: 1-3s
## 🛣️ Roadmap
- [ ] Automatic token refresh
- [ ] Additional executive profiles
- [ ] Calendar integration (meeting prep)
- [ ] Teams integration (chat context)
- [ ] Profile customization UI
## 🤝 Contributing
Contributions welcome! Please:
1. Fork the repository
2. Create a feature branch
3. Commit your changes
4. Open a pull request
## 📄 License
MIT License - see LICENSE file for details
## 🙏 Acknowledgments
Built with:
- [Model Context Protocol (MCP)](https://modelcontextprotocol.io/)
- [Agent 365](https://agent365.microsoft.com/)
- [Claude Code](https://claude.ai/claude-code)
---
**Wave 5** of the skillsIQ project
**Status**: ✅ Production Ready
**Test Pass Rate**: 100% (35/35 scenarios)
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues