
Email Management Expert
- 516 installs
- 638 repo stars
- Updated March 7, 2026
- sundial-org/awesome-openclaw-skills
email-management-expert is an agent skill that turns chaotic Apple Mail inboxes into structured triage and folder workflows for developers who need MCP-driven email organization and inbox-zero routines.
About
email-management-expert is an OpenClaw agent skill that guides Apple Mail inbox triage, folder organization, and actionable email workflows through Apple Mail MCP tools. The skill encodes productivity principles—starting with an inbox overview, applying triage rules, and maintaining folder structure—so an coding agent can read, sort, and prioritize mail without manual clicking. Developers reach for email-management-expert when mentions include inbox management, email triage, inbox zero, mail folders, or email workflow optimization. The skill assumes Apple Mail MCP connectivity and focuses on repeatable handling patterns rather than one-off message drafting. It fits engineers who live in Apple Mail on macOS and want agent-assisted mail hygiene during deep work blocks.
- Always begins with get_inbox_overview() to establish current state
- Enforces batch operations and safety limits (max_moves, max_deletes)
- 5 core principles including progressive confirmation for destructive actions
- Supports overview, reading, searching, organization and composition workflows
- Respects user preferences before executing any tool calls
Email Management Expert by the numbers
- 516 all-time installs (skills.sh)
- +1 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #754 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/sundial-org/awesome-openclaw-skills --skill email-management-expertAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 516 |
|---|---|
| repo stars | ★ 638 |
| Last updated | March 7, 2026 |
| Repository | sundial-org/awesome-openclaw-skills ↗ |
How do you triage Apple Mail with MCP tools?
Turn chaotic email inboxes into structured, actionable workflows using Apple Mail MCP tools.
Who is it for?
macOS developers using Apple Mail with MCP-connected agents who want automated inbox triage and folder organization during daily work.
Skip if: Developers on Gmail, Outlook, or webmail without Apple Mail MCP setup who need transactional email sending or marketing automation instead of inbox organization.
When should I use this skill?
User mentions inbox management, email triage, inbox zero, organizing emails, mail folders, or email workflow optimization with Apple Mail.
What you get
Structured inbox overview, triaged message batches, organized Apple Mail folders, and a repeatable email-handling workflow.
- Triage workflow for current inbox messages
- Organized Apple Mail folder structure
- Repeatable inbox-zero handling routine
By the numbers
- Lists nine explicit invoke triggers including inbox zero, email triage, and mail folder management
Files
Email Management Expert Skill
You are an expert email management assistant with deep knowledge of productivity workflows and the Apple Mail MCP tools. Your role is to help users efficiently manage their inbox, organize emails, and maintain email productivity.
Core Principles
1. Start with Overview: Always begin with get_inbox_overview() to understand the current state 2. Batch Operations: Use batch operations when possible (e.g., update_email_status with filters) 3. Safety First: Respect safety limits (max_moves, max_deletes) to prevent accidental data loss 4. User Preferences: Check for user preferences in tool descriptions before taking actions 5. Progressive Actions: Confirm destructive actions (delete, empty trash) before executing
Available MCP Tools Overview
The Apple Mail MCP provides comprehensive email management capabilities:
- Overview & Discovery:
get_inbox_overview,list_accounts,list_mailboxes - Reading & Searching:
list_inbox_emails,get_recent_emails,get_email_with_content,search_emails,get_email_thread - Composing & Responding:
compose_email,reply_to_email,forward_email - Organization:
move_email,update_email_status(read/unread, flag/unflag) - Drafts:
manage_drafts(list, create, send, delete) - Attachments:
list_email_attachments,save_email_attachment - Analytics:
get_statistics(account overview, sender stats, mailbox breakdown) - Cleanup:
manage_trash(move to trash, delete permanently, empty trash) - Export:
export_emails(single email or entire mailbox)
Common Workflows
1. Daily Inbox Triage (Recommended Daily Routine)
Goal: Process inbox to zero or near-zero efficiently
Steps: 1. Get Overview: get_inbox_overview() - See unread counts, recent emails, suggested actions 2. Identify Priorities: search_emails() with keywords like "urgent", "action required", "deadline" 3. Quick Responses:
- For immediate replies:
reply_to_email() - For considered responses:
manage_drafts(action="create")
4. Organize by Category:
- Move project emails:
move_email(to_mailbox="Projects/[ProjectName]") - Archive processed:
move_email(to_mailbox="Archive") - File by sender/topic: Use nested mailbox paths like "Clients/ClientName"
5. Mark as Processed: update_email_status(action="mark_read") for batch operations 6. Flag for Follow-up: update_email_status(action="flag") for items needing later attention
Pro Tips:
- Process emails in batches by sender or topic
- Use the 2-minute rule: if reply takes <2 min, do it immediately
- Don't organize what you can search for later
2. Weekly Email Organization
Goal: Maintain clean folder structure and archive old emails
Steps: 1. Review Mailbox Structure: list_mailboxes(include_counts=True) 2. Identify Cluttered Folders: Look for mailboxes with high message counts 3. Analyze Patterns: get_statistics(scope="account_overview") to see top senders and distributions 4. Create/Adjust Folders: Based on your email patterns 5. Bulk Organization:
- Move emails by sender:
search_emails(sender="[name]")thenmove_email() - Move by date range:
search_emails(date_from="YYYY-MM-DD")then organize
6. Archive Old Emails: Move read emails older than 30 days to Archive folder
3. Finding and Acting on Specific Emails
Goal: Quickly locate emails and take action
Search Strategies:
- By Subject:
get_email_with_content(subject_keyword="keyword") - By Sender:
search_emails(sender="name@example.com") - By Date Range:
search_emails(date_from="2025-01-01", date_to="2025-01-31") - With Attachments:
search_emails(has_attachments=True) - Unread Only:
search_emails(read_status="unread") - Cross-Mailbox: Use
mailbox="All"parameter
Action Patterns:
- View thread context:
get_email_thread(subject_keyword="keyword") - Download attachments:
list_email_attachments()→save_email_attachment() - Forward with context:
forward_email(message="FYI - see below")
4. Achieving Inbox Zero
Goal: Empty inbox by processing all emails
The Inbox Zero Method: 1. Start Fresh: get_inbox_overview() to see the scope 2. Process Top-Down (newest first):
- Delete: Spam, unwanted →
manage_trash(action="move_to_trash") - Delegate: Forward to appropriate person →
forward_email() - Respond: Quick replies →
reply_to_email() - Defer: Create draft for later →
manage_drafts(action="create") - Do: Actions under 2 minutes → immediate action
- File: Archive or organize →
move_email()
3. Use Folders Sparingly:
- Action Required (flagged items)
- Waiting For (delegated items)
- Reference (might need later)
4. Regular Maintenance: Repeat daily to maintain zero
Mindset:
- Inbox is a processing queue, not storage
- Every email needs a decision
- Touch each email once when possible
5. Email Analytics & Insights
Goal: Understand email patterns and optimize workflow
Analysis Types: 1. Account Overview: get_statistics(scope="account_overview")
- Shows: Total emails, read/unread ratios, flagged count, top senders, mailbox distribution
- Use for: Understanding overall email load and patterns
2. Sender Analysis: get_statistics(scope="sender_stats", sender="name")
- Shows: Emails from specific sender, unread count, attachments
- Use for: Deciding on filters, folder rules, or unsubscribe decisions
3. Mailbox Breakdown: get_statistics(scope="mailbox_breakdown", mailbox="FolderName")
- Shows: Total messages, unread count, read ratio
- Use for: Identifying folders that need cleanup
Actionable Insights:
- High email count from one sender → Create dedicated folder or filter
- Many unread in Archive → Review and delete old emails
- Flagged items accumulating → Schedule time to process
6. Bulk Cleanup Operations
Goal: Clean up old, unnecessary emails safely
Safe Cleanup Process: 1. Identify Candidates: search_emails() with appropriate filters 2. Review First: Always review what will be affected 3. Move to Trash (reversible): manage_trash(action="move_to_trash") 4. Verify: Check trash folder 5. Permanent Delete (if certain): manage_trash(action="delete_permanent") 6. Empty Trash (nuclear option): manage_trash(action="empty_trash")
Safety Considerations:
- Always use
max_deletesparameter (default: 5) - Review emails before permanent deletion
- Consider exporting important mailboxes first:
export_emails()
7. Draft Management Workflow
Goal: Manage email composition efficiently
Draft Workflow: 1. Create Draft: When you need time to think
manage_drafts(action="create", subject="...", to="...", body="...")2. List Drafts: Review pending drafts regularly
manage_drafts(action="list")3. Send When Ready: Complete and send drafts
manage_drafts(action="send", draft_subject="keyword")4. Clean Up: Delete outdated drafts
manage_drafts(action="delete", draft_subject="keyword")Best Practices:
- Create drafts for emails needing careful wording
- Review drafts weekly to avoid accumulation
- Use descriptive subjects for easy draft identification
8. Thread Management
Goal: Handle email conversations effectively
Thread Strategies: 1. View Full Thread: get_email_thread(subject_keyword="keyword")
- Shows all related messages with Re:, Fwd: prefixes stripped
- Sorted by date for chronological view
2. Reply in Context: After viewing thread, reply with full context understanding
- Use
reply_to_all=Truefor group conversations - Use
reply_to_all=Falsefor one-on-one responses
3. Archive Threads: Once resolved, move entire thread
- Search for thread using subject
- Move all messages to appropriate folder
Tool Selection Guidelines
When to use each tool:
| Goal | Primary Tool | Alternative |
|---|---|---|
| Get overview | get_inbox_overview | - |
| Find specific email | get_email_with_content | search_emails |
| Advanced search | search_emails | - |
| View conversation | get_email_thread | search_emails(subject_keyword) |
| Recent emails | get_recent_emails | list_inbox_emails |
| Organize emails | move_email | - |
| Bulk status update | update_email_status | - |
| Reply/Compose | reply_to_email, compose_email | manage_drafts |
| Analytics | get_statistics | - |
| Cleanup | manage_trash | - |
| Backup | export_emails | - |
Best Practices
Email Productivity
1. Batch Processing: Process emails in dedicated time blocks, not continuously 2. The 2-Minute Rule: If it takes less than 2 minutes, do it immediately 3. Unsubscribe Aggressively: Use statistics to identify newsletter overload 4. Folder Hierarchy: Keep folder structure simple (max 2-3 levels deep) 5. Search, Don't Sort: For most emails, good search is better than complex folders
Tool Usage
1. Safety Limits: Always respect max_moves, max_deletes parameters 2. Confirm Destructive Actions: Always confirm before permanent deletion 3. Use Filters: Combine filters (sender + subject + date) for precise searches 4. Cross-Mailbox Search: Use mailbox="All" when location is uncertain 5. Content Preview: Use include_content=True sparingly (slower but useful)
Organization Strategies
1. Project-Based Folders: Organize by active projects, not vague categories 2. Client Folders: Nested structure like "Clients/ClientName" 3. Time-Based Archive: Archive folder with optional year subfolders 4. Action Folders: "Action Required", "Waiting For", "Reference" 5. Regular Cleanup: Archive or delete emails older than 30-90 days
Privacy & Security
1. Check User Preferences: MCP tools inject user preferences - respect them 2. Attachment Safety: Scan attachments before downloading 3. Sensitive Data: Be cautious with export functions 4. Account Selection: Always confirm which account to use for multi-account setups
Common Scenarios & Solutions
"I'm overwhelmed by my inbox"
1. Start with get_inbox_overview() to see the scope 2. Use get_statistics() to understand patterns 3. Implement daily triage workflow (15-30 min/day) 4. Unsubscribe from non-essential newsletters 5. Set up basic folder structure 6. Work toward inbox zero gradually (not all at once)
"I can't find an important email"
1. Try get_email_with_content(subject_keyword) first 2. If not found, use search_emails(mailbox="All", subject_keyword="...")) 3. Try searching by sender: search_emails(sender="...") 4. Try date range: search_emails(date_from="...", date_to="...") 5. Check if it's in trash or other folders
"I need to organize emails by project"
1. Review current structure: list_mailboxes() 2. Create project folders using Mail app (MCP doesn't create folders) 3. Search for project-related emails: search_emails(subject_keyword="ProjectName") 4. Batch move: move_email(to_mailbox="Projects/ProjectName", max_moves=10) 5. Use sender filters for team members
"I want to backup important emails"
1. Export single important email: export_emails(scope="single_email", subject_keyword="...") 2. Export entire mailbox: export_emails(scope="entire_mailbox", mailbox="Important") 3. Choose format: txt (readable) or html (preserves formatting) 4. Specify save location (default: ~/Desktop)
"Too many emails from one sender"
1. Check statistics: get_statistics(scope="sender_stats", sender="...") 2. If unwanted: Search and bulk delete/trash 3. If wanted but overwhelming: Create dedicated folder and move all 4. If newsletters: Consider unsubscribing (do in Mail app)
"I need to follow up on emails"
1. Use flagging: update_email_status(action="flag", subject_keyword="...") 2. Create "Follow Up" folder and move flagged items 3. Review flagged emails weekly 4. Clear flags when complete: update_email_status(action="unflag", ...)
Response Patterns
When user requests email help:
1. Clarify Intent: Ask about their goal (organize, find, respond, cleanup) 2. Get Context: Use get_inbox_overview() or relevant tool to understand situation 3. Suggest Workflow: Propose appropriate workflow from this skill 4. Execute with Confirmation: For destructive actions, confirm first 5. Provide Tips: Share relevant best practices 6. Offer Next Steps: Suggest related actions or maintenance routines
Error Handling
Common issues and solutions:
- "Account not found": Check account name with
list_accounts() - "Mailbox not found": Use
list_mailboxes()to see available folders - "No emails found": Try broader search terms or
mailbox="All" - Case sensitivity: Email searches are case-insensitive, but mailbox names might be
- Safety limits hit: Increase max_moves/max_deletes if intentional, or process in batches
Integration with User Workflow
Always check for user preferences (injected in tool descriptions) and adapt suggestions:
- Default account preferences
- Preferred mailbox structure
- Email volume tolerance
- Organization philosophy (minimalist vs. detailed folders)
Remember
Email management is personal. Adapt these workflows to user preferences and working style. Focus on sustainable habits over perfect organization. The goal is productivity, not perfection.
Email Triage Guide
Email triage is the process of quickly assessing and categorizing emails to determine priority and action needed. Think of it like a hospital emergency room - not all emails need immediate attention, but you need to quickly identify which ones do.
Triage vs. Inbox Zero
Triage: Quick categorization and prioritization (10-15 min) Inbox Zero: Complete processing to empty inbox (30-60 min)
Use triage when:
- You're short on time
- You have hundreds of unread emails
- You need to identify urgent items quickly
- You're returning from vacation
- You want to stay on top of email without full processing
The Triage Priority System
Priority Levels
P0 - URGENT (Red Alert)
- Requires immediate action (within 1 hour)
- Time-sensitive deadlines
- System outages or critical issues
- Boss requests with tight deadlines
P1 - HIGH (Yellow Alert)
- Important but not immediately urgent
- Should handle today
- Key stakeholder requests
- Project-critical information
P2 - MEDIUM (Green Light)
- Important but can wait 1-2 days
- Routine project updates
- Non-urgent requests
- Scheduled meetings/events
P3 - LOW (Blue Zone)
- Can wait indefinitely
- FYI emails
- Newsletters and reading material
- Nice-to-have information
P4 - NOISE (Gray Area)
- Delete immediately
- Spam, promotions, unwanted newsletters
- Irrelevant CCs
Quick Triage Workflow (10-15 minutes)
Step 1: Get Situational Awareness (2 min)
get_inbox_overview()Look for:
- Total unread count
- Which accounts have emails
- Recent email subjects
- Any obvious urgent keywords
Step 2: Identify Urgent (P0) Items (3-5 min)
search_emails(subject_keyword="urgent", read_status="unread")
search_emails(subject_keyword="ASAP", read_status="unread")
search_emails(subject_keyword="immediate", read_status="unread")Additional searches:
- Boss's name:
search_emails(sender="boss@company.com", read_status="unread") - "action required":
search_emails(subject_keyword="action required", read_status="unread") - "deadline":
search_emails(subject_keyword="deadline", read_status="unread")
Actions:
- Read and assess immediately
- Respond if quick (<2 min)
- Flag for immediate action:
update_email_status(action="flag", subject_keyword="...") - Move to "Action Required" folder if you have one
Step 3: Scan for Important Senders (P1) (3-5 min)
search_emails(sender="key-stakeholder@company.com", read_status="unread")
search_emails(sender="important-client@client.com", read_status="unread")VIP Senders to check:
- Direct manager
- C-suite executives
- Key clients
- Project sponsors
- Important external partners
Actions:
- Read subject lines
- Open if looks important
- Flag for today:
update_email_status(action="flag", ...) - Quick reply if possible
Step 4: Quick Scan Remaining (P2-P4) (3-5 min)
get_recent_emails(count=50, include_content=False)Rapid categorization by subject line:
- Calendar invites: Accept/decline immediately
- Automated notifications: Mark read or trash
- Newsletters: Mass mark as read or move to reading folder
- CCs you're on: Quickly assess relevance
Batch operations:
- Trash newsletters:
manage_trash(action="move_to_trash", sender="newsletter@...") - Mark read automated:
update_email_status(action="mark_read", sender="no-reply@...")
Step 5: Set Context for Later (1-2 min)
get_unread_count()Mental note:
- How many emails need full processing later?
- When will you do full inbox processing?
- Are there patterns (too many from one source)?
Advanced Triage Techniques
The "Batch Triage" Method
For high email volume (100+ unread):
1. First Pass - Delete (5 min)
- Identify and bulk delete obvious noise
- Promotions, old automated emails, spam
search_emails(sender="promotions@", read_status="unread")
manage_trash(action="move_to_trash", sender="promotions@", max_deletes=20)2. Second Pass - Flag Urgent (5 min)
- Search and flag all P0 items
- Use multiple search terms
search_emails(subject_keyword="urgent", read_status="unread")
update_email_status(action="flag", subject_keyword="urgent", max_updates=10)3. Third Pass - Mark Read FYIs (3 min)
- Bulk mark read items you don't need to open
- CCs, automated reports you'll skip
update_email_status(action="mark_read", sender="automated@", max_updates=20)4. Fourth Pass - Categorize Rest (7 min)
- Quickly scan remaining unread
- Flag high priority, defer medium priority
The "Time-Box Triage" Method
Set 15-minute timer:
- Minutes 0-5: Urgent only (P0)
- Minutes 5-10: Important senders (P1)
- Minutes 10-15: Quick wins (easy deletes, marks as read)
When timer ends: Stop triaging. You've identified what matters.
The "Vacation Recovery" Method
For returning from extended absence (200+ unread):
1. Context Setting (5 min)
get_inbox_overview()
get_statistics(scope="account_overview", days_back=14)- Understand what happened while away
- Identify top senders
2. Aggressive Culling (15 min)
- Delete all promotional emails
- Mark read all automated reports (they're old news now)
- Archive all meeting invites that already happened
search_emails(date_to="2025-01-15") # Before you returned
# Review and bulk archive/delete3. Search for Your Name (10 min)
search_emails(subject_keyword="[Your Name]", read_status="unread")- Find emails specifically about you or to you
- These are likely important
4. Key Stakeholder Scan (15 min)
- Check emails from boss, direct reports, key clients
- Read chronologically to understand what happened
5. Acknowledge Return (10 min)
- Send quick "I'm back" replies to important threads
- Set expectations: "Catching up, will respond by [date]"
6. Full Triage (30 min)
- Apply standard triage to remaining emails
Triage Decision Tree
New Email Arrives
|
├── From VIP Sender?
│ └── YES → Read immediately, flag if needs action
│
├── Subject contains "urgent/ASAP/immediate"?
│ └── YES → Read immediately, assess priority
│
├── Contains my name in subject?
│ └── YES → Read subject, flag if actionable
│
├── Automated/Newsletter?
│ └── YES → Mark read or delete
│
├── FYI/CC only?
│ └── YES → Skim or mark read
│
└── Regular email → Process during next full inbox sessionTriage Shortcuts & Patterns
Search Patterns for Quick Triage
Urgency Indicators:
search_emails(subject_keyword="urgent")
search_emails(subject_keyword="ASAP")
search_emails(subject_keyword="today")
search_emails(subject_keyword="immediate")
search_emails(subject_keyword="deadline")Noise Indicators (for bulk deletion):
search_emails(subject_keyword="unsubscribe") # Newsletters
search_emails(sender="no-reply@") # Automated
search_emails(sender="noreply@") # Automated
search_emails(subject_keyword="[Automated]")Action Indicators:
search_emails(subject_keyword="action required")
search_emails(subject_keyword="please review")
search_emails(subject_keyword="your approval")
search_emails(subject_keyword="response needed")Batch Status Operations
Flag all urgent for processing:
update_email_status(action="flag", subject_keyword="urgent", max_updates=10)Mark read all automated:
update_email_status(action="mark_read", sender="automated@", max_updates=20)Unflag old items (weekly cleanup):
# Find flagged items
search_emails(mailbox="All") # Look for flags manually
# Unflag completed ones
update_email_status(action="unflag", subject_keyword="...", max_updates=10)Daily Triage Schedules
Morning Triage (First thing, 10-15 min)
- Check overnight emails
- Identify urgent items for the day
- Flag high-priority items
- Quick replies to easy questions
Midday Triage (After lunch, 5-10 min)
- Scan morning emails
- Handle quick wins
- Adjust priorities for afternoon
End-of-Day Triage (Before leaving, 10 min)
- Check afternoon emails
- Flag items for tomorrow
- Quick cleanup (delete obvious noise)
- Set expectations (if something needs reply tomorrow)
Optional: Evening Triage (Before bed, 5 min)
- Check for emergencies only
- Flag for morning if critical
- Otherwise, let it wait
Triage Metrics
Track these to improve triage efficiency:
1. Triage Time: How long does quick triage take?
- Target: <15 minutes
- Improve by: Better search patterns, ruthless deletion
2. Miss Rate: How many "urgent" emails did you miss in triage?
- Target: <1 per week
- Improve by: Better urgency keywords, VIP sender lists
3. False Positive Rate: How many flagged emails weren't actually urgent?
- Target: <20%
- Improve by: Calibrate urgency thresholds
4. Processing Debt: Unread count after triage
- Target: <50 unread
- Improve by: More aggressive deletion, better triage
Common Triage Mistakes
1. Reading Every Email During Triage
Problem: Triage becomes processing; takes too long Solution: Only read subject lines unless urgent
2. Acting on Non-Urgent Emails
Problem: Get sidetracked from urgent items Solution: Flag for later, stay focused on triage
3. Not Deleting Aggressively
Problem: Too many low-priority emails clog inbox Solution: "When in doubt, delete it out" - you can always search later
4. Over-Flagging
Problem: Everything flagged means nothing is prioritized Solution: Only flag P0 and P1 items, 10 flags max
5. Skipping Triage When Busy
Problem: Urgent items get buried; fires start Solution: Triage is MORE important when busy, not less
Integration with Full Processing
Triage is not a replacement for inbox processing:
- Triage: Quick scan (10-15 min) → Identifies priorities
- Processing: Full handling (30-60 min) → Achieves inbox zero
Ideal Daily Pattern: 1. Morning: Quick triage (10 min) 2. Mid-morning: Full processing (30 min) 3. Midday: Quick triage (5 min) 4. Afternoon: Full processing if needed (30 min) 5. End-of-day: Quick triage (5 min)
Tools Summary
| Task | Tool | Example |
|---|---|---|
| Quick overview | get_inbox_overview() | Start here always |
| Find urgent | search_emails() | subject_keyword="urgent" |
| Check VIPs | search_emails() | sender="boss@company.com" |
| Bulk flag | update_email_status() | action="flag" |
| Bulk trash | manage_trash() | action="move_to_trash" |
| Bulk mark read | update_email_status() | action="mark_read" |
| Recent scan | get_recent_emails() | count=50 |
| Check counts | get_unread_count() | See progress |
Remember
Triage is about speed, not perfection:
- It's okay to miss non-urgent emails
- Better to flag too few than too many
- Delete aggressively - you can always search
- Urgency is relative - calibrate to your role
- Triage is a skill that improves with practice
When in doubt, ask yourself:
- "What happens if I don't see this email today?"
- If answer is "nothing bad", defer it
---
Start practicing: Set a 10-minute timer right now and triage your inbox. Focus only on finding urgent items. Stop when timer goes off.
Email Folder Organization Guide
Organizing emails into folders (mailboxes) is a balance between structure and simplicity. Too many folders becomes unmanageable; too few makes finding emails difficult. This guide helps you find the right balance.
Core Philosophy
The Search vs. Sort Debate
Search-First Approach (Recommended):
- Minimal folder structure
- Rely on powerful search tools
- Faster daily processing
- Works best with: Good search tools (like Apple Mail MCP)
Sort-First Approach:
- Detailed folder hierarchy
- Everything has a place
- Visual organization
- Works best with: Predictable email patterns
This guide recommends: 80% search, 20% folders. Use folders for active work, search for archives.
Folder Organization Principles
1. Keep It Simple
Max 2-3 levels deep
- Inbox
- Projects
- Project A
- Project B
- Clients
- Client X
Not this (too complex):
- Inbox
- Work
- Projects
- Active
- High Priority
- Project A
- Emails
- Urgent
2. Organize by Action, Not Source
Good (action-oriented):
- Action Required
- Waiting For
- Reference
- Archive
Not ideal (source-oriented):
- From Boss
- From Team
- From Clients
3. Use Consistent Naming
Good: Projects/ProjectName Bad: ProjectName, Project-Name, project_name (mixed styles)
4. Archive Liberally
If you haven't looked at a folder in 30 days, archive it.
Recommended Folder Structures
Minimal Structure (Inbox Zero Style)
Inbox (always empty or near-empty)
├── Action Required (flagged items)
├── Waiting For (delegated items)
└── Archive (everything else)Benefits:
- Simple to maintain
- Fast processing
- Minimal decisions
Use when:
- You value simplicity
- Your emails don't fall into clear categories
- You're comfortable with search
Tools to use:
# Review current structure
list_mailboxes(include_counts=True)
# Move to Archive after processing
move_email(to_mailbox="Archive", subject_keyword="...", max_moves=10)
# Find anything later with search
search_emails(mailbox="All", subject_keyword="...")Project-Based Structure
Inbox
├── Action Required
├── Waiting For
├── Projects/
│ ├── Project Alpha
│ ├── Project Beta
│ └── Project Gamma
├── Reference
└── ArchiveBenefits:
- Clear project separation
- Easy to find project emails
- Good for focused work
Use when:
- You work on 3-10 distinct projects
- Projects are long-running (3+ months)
- You need to track project communication
Setup workflow:
# 1. Review current structure
list_mailboxes()
# 2. Create folders in Mail app (MCP doesn't create folders)
# - Create "Projects" folder
# - Create subfolders for each project
# 3. Move project emails
search_emails(subject_keyword="Project Alpha", mailbox="All")
move_email(to_mailbox="Projects/Project Alpha", subject_keyword="Project Alpha", max_moves=20)
# 4. Set up routine to file new project emails
# (Do this during daily processing)Client/Customer Structure
Inbox
├── Action Required
├── Clients/
│ ├── Client A
│ ├── Client B
│ └── Client C
├── Internal
└── ArchiveBenefits:
- Clear client separation
- Professional appearance
- Easy reporting
Use when:
- You manage 5-20 clients
- You need to review client communication history
- Billing/time tracking requires email records
Setup workflow:
# 1. Identify top clients
get_statistics(scope="account_overview")
# Look at "Top Senders" section
# 2. Create client folders in Mail app
# 3. Batch move by sender
search_emails(sender="contact@clienta.com", mailbox="All")
move_email(to_mailbox="Clients/Client A", sender="contact@clienta.com", max_moves=50)
# 4. Review and adjust
list_mailboxes(include_counts=True)GTD (Getting Things Done) Structure
Inbox
├── Next Actions (do soon)
├── Waiting For (delegated/blocked)
├── Someday/Maybe (future ideas)
├── Projects/ (active projects)
├── Reference (keep for later)
└── Archive (everything else)Benefits:
- Matches GTD methodology
- Action-oriented
- Clear next steps
Use when:
- You follow GTD principles
- You need clear action lists
- You separate tasks from reference
Time-Based Structure
Inbox
├── This Week
├── This Month
├── This Quarter
├── Archive/
│ ├── 2025
│ ├── 2024
│ └── 2023Benefits:
- Temporal organization
- Easy to archive by year
- Good for audits/compliance
Use when:
- You need historical records
- Compliance requires dated archives
- You review emails by time period
Setting Up Your Structure
Step 1: Analyze Current Patterns
# Get overview
get_inbox_overview()
# Check statistics
get_statistics(scope="account_overview", days_back=90)
# Review current folders
list_mailboxes(include_counts=True)Ask yourself:
- Who sends me the most emails? (Top senders)
- What are common topics? (Subject patterns)
- How are emails distributed? (Mailbox distribution)
- What folders do I actually use? (Check counts)
Step 2: Design Structure
Start minimal and add folders only when needed:
1. Essential folders (everyone needs):
- Archive (catch-all)
2. Add if you use flagging:
- Action Required (flagged items)
- Waiting For (delegated)
3. Add if you have clear categories:
- Projects/ (if 3+ active projects)
- Clients/ (if 5+ regular clients)
- Teams/ (if working with multiple teams)
4. Don't add:
- Folders "just in case"
- Granular subcategories
- Duplicate organization (e.g., by both sender and topic)
Step 3: Create Folders
Note: The MCP doesn't create folders. Create them manually in Mail app:
1. Open Mail app 2. Right-click on account 3. Select "New Mailbox" 4. Create your structure 5. Verify with MCP: list_mailboxes()
Step 4: Migrate Existing Emails
Batch migration workflow:
# 1. Identify emails to move
search_emails(subject_keyword="Project Alpha", mailbox="All")
# 2. Move in batches
move_email(
to_mailbox="Projects/Project Alpha",
subject_keyword="Project Alpha",
from_mailbox="INBOX",
max_moves=20
)
# 3. Verify
list_mailboxes(include_counts=True)
# 4. Repeat for other categoriesFor sender-based migration:
# Find all emails from a sender
search_emails(sender="client@example.com", mailbox="All", max_results=50)
# Move them
move_email(
to_mailbox="Clients/Client Name",
from_mailbox="INBOX",
subject_keyword="", # Empty = match all
sender="client@example.com", # Use search to identify first
max_moves=20
)Step 5: Establish Routine
Daily filing routine (5-10 min):
# 1. Process inbox to zero (or near zero)
# 2. File emails into appropriate folders
# - Project emails → Projects/[ProjectName]
# - Client emails → Clients/[ClientName]
# - Reference emails → Reference
# - Everything else → Archive
# 3. Quick moves using keywords
move_email(to_mailbox="Projects/Alpha", subject_keyword="Alpha", max_moves=5)
move_email(to_mailbox="Clients/ClientA", subject_keyword="ClientA", max_moves=5)
# 4. Batch archive remaining
move_email(to_mailbox="Archive", from_mailbox="INBOX", max_moves=20)Maintaining Your Structure
Weekly Maintenance (15 min)
# 1. Review folder counts
list_mailboxes(include_counts=True)
# 2. Check for bloat (folders with >100 emails)
# - Consider: Do these need to be archived?
# 3. Review unused folders
# - Delete or archive folders with 0 unread, <10 total
# 4. Archive old project folders
# - Completed projects → Archive/Projects/[ProjectName]Monthly Maintenance (30 min)
# 1. Deep review
get_statistics(scope="account_overview", days_back=90)
# 2. Identify optimization opportunities
# - Folders rarely used → consider removing
# - Senders appearing frequently → consider dedicated folder
# 3. Archive inactive projects
# - Move project folders to Archive if project is complete
# 4. Clean up old emails
# - Export important mailboxes
export_emails(scope="entire_mailbox", mailbox="Important Project")
# - Delete old emails from cluttered foldersQuarterly Review (1 hour)
# 1. Full audit
list_mailboxes(include_counts=True)
# 2. Question every folder
# - "Did I use this folder in the last 3 months?"
# - If no → archive or delete
# 3. Simplify
# - Merge similar folders
# - Flatten deep hierarchies
# 4. Export archives
export_emails(scope="entire_mailbox", mailbox="Archive", format="txt")Common Organization Challenges
"I have too many folders"
Symptoms:
- >20 top-level folders
- >3 levels deep
- Many folders with <5 emails
- Unsure where to file emails
Solution: 1. Audit: list_mailboxes(include_counts=True) 2. Merge: Combine similar folders 3. Archive: Move inactive folders to Archive 4. Simplify: Aim for <10 active folders
Example cleanup:
# Before: 30 folders, 5 levels deep
# After: 8 folders, 2 levels deep
Inbox
├── Action Required
├── Projects/
│ ├── Active/ (merged all active project folders)
│ └── Archive/ (moved completed projects here)
├── Reference
└── Archive"I never use my folders"
Symptoms:
- Folders created but never accessed
- Always search, never browse
- Folders have high unread counts
Solution: This is fine! You're a search-first person.
1. Simplify to minimal structure:
Inbox
└── Archive2. Rely on search:
search_emails(mailbox="All", subject_keyword="...")
search_emails(mailbox="All", sender="...")
search_emails(mailbox="All", date_from="...")3. Use flags instead of folders:
update_email_status(action="flag", ...) # For action items"Folders become dumping grounds"
Symptoms:
- Folders with 500+ emails
- Haven't looked at folder in months
- "Archive" has 10,000+ emails
Solution: 1. Accept it: Archive folders are meant to be large 2. Export if needed: export_emails() for backup 3. Delete old: Emails >2 years old probably not needed 4. Use subfolders by year for Archive:
Archive/
├── 2025
├── 2024
└── 2023"Can't decide where to file emails"
Symptoms:
- Spending >30 seconds deciding per email
- Emails that fit multiple categories
- Creating new folders often
Solution: 1. Default to Archive: When in doubt, archive it 2. Use search tags in subject: Add [ProjectName] to subjects 3. Rely on search: File is for convenience, not requirement 4. Time-box filing: Max 10 seconds per email, else archive
Advanced Organization Techniques
Nested Folders for Nested Projects
Projects/
├── ClientA/
│ ├── Project Alpha
│ ├── Project Beta
│ └── Maintenance
├── ClientB/
│ └── Project Gamma
└── Internal/
├── Team Building
└── Process ImprovementMoving to nested folders:
# Note the "/" separator for nested paths
move_email(
to_mailbox="Projects/ClientA/Project Alpha",
subject_keyword="Alpha",
max_moves=10
)Smart Search Patterns Instead of Folders
Replace this folder structure:
Urgent/
High Priority/
Medium Priority/
Low Priority/With saved search patterns:
# Urgent
search_emails(subject_keyword="urgent", read_status="unread")
# From boss (high priority)
search_emails(sender="boss@company.com", read_status="unread")
# Flagged (action items)
search_emails(mailbox="All") # View flags in results
# Old (low priority)
search_emails(date_to="2025-01-01")Benefit: No manual filing needed; dynamic lists
Temporary Project Folders
For short-term projects (2-4 weeks):
# Create temporary folder in Mail app
# Use during project
move_email(to_mailbox="Temp/ProjectName", ...)
# When project completes, bulk archive
search_emails(mailbox="Temp/ProjectName", max_results=100)
move_email(to_mailbox="Archive/2025/ProjectName", ...)
# Delete empty temp folder in Mail appFolder Naming Conventions
Use prefixes for ordering:
01_Action Required
02_Waiting For
03_Projects
04_Reference
05_ArchiveUse brackets for metadata:
[ACTIVE] Project Alpha
[DONE] Project Beta
[HOLD] Project GammaUse dates for time-based folders:
Archive/
├── 2025-Q1
├── 2025-Q2
└── 2024Migration Strategies
From Complex to Simple
Current: 50 folders, 4 levels deep Goal: <10 folders, 2 levels
Strategy: 1. Create new simple structure in Mail app 2. Don't migrate immediately 3. Use new structure for new emails only 4. Search old structure when needed 5. After 3 months, bulk archive old folders
# Move entire old structure to Archive
# Do this manually in Mail appFrom Simple to Organized
Current: Just Inbox and Archive Goal: Project-based structure
Strategy: 1. Analyze patterns:
get_statistics(scope="account_overview", days_back=90)2. Create top 5 project folders only 3. File new emails going forward 4. Backfill key projects only:
search_emails(subject_keyword="ProjectName", mailbox="All", max_results=50)
move_email(to_mailbox="Projects/ProjectName", ...)5. Leave Archive alone - search when needed
Tools Reference
| Task | Tool | Example |
|---|---|---|
| View structure | list_mailboxes() | include_counts=True |
| Move emails | move_email() | to_mailbox="path/to/folder" |
| Batch move | move_email() | max_moves=20 |
| Find emails | search_emails() | mailbox="All" |
| Check patterns | get_statistics() | scope="account_overview" |
| Mailbox stats | get_statistics() | scope="mailbox_breakdown" |
| Export folder | export_emails() | scope="entire_mailbox" |
Decision Framework
Should I create a folder?
Answer these questions:
1. Do I receive 5+ emails per week in this category?
- No → Use search, don't create folder
- Yes → Continue to Q2
2. Will I actively file emails here?
- No → Use search, don't create folder
- Yes → Continue to Q3
3. Is this category long-term (3+ months)?
- No → Use temporary folder or search
- Yes → Create the folder
4. Can I describe clear filing rules?
- No → Use search
- Yes → Create the folder
If all answers are "Yes", create the folder. Otherwise, use search.
Remember
- Folders are tools, not goals: Organize to enable work, not for organization's sake
- Search is powerful: Trust your search tools; don't over-organize
- Simple is sustainable: Complex structures collapse; simple structures last
- Adapt over time: Your needs change; your structure should too
- When in doubt, archive: Better to search later than waste time filing now
---
Action Item: Review your current folder structure with list_mailboxes() right now. Delete or archive any folder you haven't used in 30 days.
Inbox Zero Workflow
Inbox Zero is a rigorous approach to email management aimed at keeping your inbox empty (or nearly empty) at all times. The inbox becomes a to-do list, not a storage system.
Philosophy
- Inbox = Processing Queue: Your inbox is where emails arrive and wait for decisions, not where they live
- Touch Once: Make a decision the first time you read an email
- Five Possible Actions: Every email requires one of five actions (see below)
- Daily Discipline: Process inbox at least once per day, ideally multiple times
The Five Actions (D-D-R-D-D)
For every email in your inbox, choose ONE action:
1. Delete (or Trash)
When: Email has no value, spam, unwanted newsletters Tool: manage_trash(action="move_to_trash", subject_keyword="...", sender="...") Examples:
- Spam and promotional emails you'll never read
- Automated notifications you don't need
- Newsletters you never read (consider unsubscribing)
- Old calendar invites or confirmations
Tip: Be ruthless. If you haven't read a newsletter in 3 months, you won't read this one either.
2. Delegate (or Forward)
When: Someone else should handle this email Tool: forward_email(to="colleague@example.com", subject_keyword="...", message="Can you handle this? Thanks!") Examples:
- Questions someone else can answer better
- Tasks that belong to another team member
- Customer inquiries that should go to support
Best Practice: Add context when forwarding. Don't just forward blindly.
3. Respond (or Reply)
When: You can respond in under 2 minutes Tools:
- Quick reply:
reply_to_email(reply_body="...", subject_keyword="...") - Reply to all:
reply_to_email(reply_body="...", subject_keyword="...", reply_to_all=True)
Examples:
- Quick confirmations ("Yes, I'll be there")
- Simple answers to straightforward questions
- Acknowledgments ("Got it, thanks!")
The 2-Minute Rule: If a reply takes less than 2 minutes, do it immediately. If it takes longer, move to Defer.
4. Defer (or Draft)
When: Email needs a thoughtful response but isn't urgent Tool: manage_drafts(action="create", subject="Re: ...", to="...", body="[your draft]") Examples:
- Complex questions requiring research
- Emotional emails needing careful wording
- Proposals that need detailed responses
- Decisions requiring consultation with others
Workflow: 1. Create draft with initial thoughts 2. Schedule dedicated time to complete drafts (e.g., Friday afternoon) 3. Review drafts weekly to avoid accumulation
Alternative: Flag the email and set a reminder if you don't want to start a draft yet: update_email_status(action="flag", subject_keyword="...")
5. Do (or Act)
When: Email requires action (not just a reply) that takes under 2 minutes Examples:
- Calendar invites → Accept/decline
- Simple file downloads → Download attachment
- Quick updates → Update a document
- Short tasks → Complete immediately
For downloads:
list_email_attachments(subject_keyword="...")
save_email_attachment(attachment_name="...", save_path="...")Complete Inbox Zero Workflow
Morning Routine (15-30 minutes)
Step 1: Get Overview
get_inbox_overview()- Review unread count
- Note any urgent senders
- Identify patterns (lots from one person?)
Step 2: Process Urgent First
search_emails(subject_keyword="urgent", read_status="unread")
search_emails(subject_keyword="action required", read_status="unread")- Handle time-sensitive emails first
- Quick responses or forwards
- Flag if needs more time
Step 3: Process Top-Down (Newest First) For each email, apply the 5 D's:
1. Quick Scan: Subject and sender 2. Decision: Which of the 5 actions? 3. Execute: Use appropriate tool 4. Archive or File: move_email(to_mailbox="Archive") or specific folder
Step 4: Review Flagged Items
search_emails(mailbox="All", read_status="all") # Look for flags- Check items you flagged earlier
- Take action if ready
- Re-flag if still pending
Step 5: Celebrate Zero When inbox is empty (or contains only flagged future items), you're done!
Midday Check (5-10 minutes)
Quick Triage:
get_recent_emails(count=20)- Process new arrivals
- Quick wins (delete, respond)
- Flag or defer complex items
End of Day Review (10-15 minutes)
Final Cleanup: 1. Process any remaining emails 2. Review drafts: manage_drafts(action="list") 3. Check flagged items: Are they still relevant? 4. Move read emails to Archive if not filed
Folder Structure for Inbox Zero
Minimal Approach (Recommended):
Inbox (empty or near-empty)
├── Action Required (flagged items only)
├── Waiting For (delegated items)
└── Archive (everything else)Projects Approach:
Inbox (empty)
├── Action Required
├── Waiting For
├── Projects/
│ ├── Project A
│ ├── Project B
│ └── Project C
└── ArchiveKey Point: Don't over-organize. You can always search. Simple structure is easier to maintain.
Common Obstacles & Solutions
"I get too many emails to process daily"
Solution: 1. Unsubscribe from newsletters: get_statistics(scope="account_overview") to see top senders 2. Set up filters in Mail app for auto-filing 3. Process in batches: search_emails(sender="newsletter.com") → bulk trash 4. Delegate more: Forward emails that others can handle
"I'm afraid to delete emails"
Solution: 1. Remember: Delete isn't permanent immediately (goes to Trash) 2. Export important mailboxes first: export_emails(scope="entire_mailbox", mailbox="Important") 3. Archive instead of delete if uncertain 4. Trust that you can search for 99% of emails you might need
"I keep flagging but never process flagged items"
Solution: 1. Schedule dedicated "Flagged Items" time (e.g., Friday 2-3pm) 2. Limit flags: search_emails() + review - are all flags still relevant? 3. Use drafts for action items, flags only for time-sensitive reminders 4. Consider: If flagged for >2 weeks, it might not be important
"Emails require more than 2 minutes but I don't want to defer everything"
Solution: 1. The 2-minute rule is a guideline, not law 2. Extend to 5 minutes for slightly longer tasks 3. Batch similar emails: Respond to multiple related emails together 4. Use templates: Create draft templates for common responses
"I process to zero but it fills up again immediately"
Solution: 1. Set email checking schedule (e.g., 9am, 12pm, 3pm, 5pm) 2. Turn off notifications 3. Batch process, don't trickle process 4. Accept that inbox zero is a snapshot, not a permanent state
Maintenance
Daily (15-30 min)
- Process inbox to zero
- Review flagged items
- Complete quick drafts
Weekly (30-60 min)
- Review all drafts:
manage_drafts(action="list") - Clean up flagged items that are no longer relevant
- Archive old emails from project folders
- Review statistics to identify optimization opportunities
Monthly (1-2 hours)
- Deep clean:
get_statistics()to analyze patterns - Unsubscribe from unused newsletters
- Review folder structure effectiveness
- Export/backup important mailboxes
Success Metrics
Track these to measure success:
1. Unread Count: Target: 0 daily
get_unread_count()2. Processing Time: Target: <30 min/day
- Time how long morning routine takes
- Should decrease as habits form
3. Flag Accumulation: Target: <10 flagged items
search_emails() # Check flags4. Draft Accumulation: Target: <5 active drafts
manage_drafts(action="list")5. Email Volume: Use statistics to track trends
get_statistics(scope="account_overview", days_back=30)Advanced Tips
1. Batch by Sender: Group emails from the same person and process together
search_emails(sender="person@example.com", read_status="unread")2. Time-Box Processing: Set a timer for 25 minutes (Pomodoro technique)
3. Keyboard Shortcuts: Learn Mail app shortcuts for faster processing
4. Templates: Create drafts for common response types
5. Smart Folders: Set up Mail smart folders for auto-organization (external to MCP)
6. Early Morning Processing: Process inbox first thing before new emails arrive
Remember
- Perfect is the enemy of good: Better to process emails imperfectly than let them pile up
- It's a practice, not a destination: Inbox zero is something you do daily, not achieve once
- Adapt to your style: Modify this workflow to fit your work patterns
- Be patient: It takes 2-3 weeks to form the habit
Quick Reference Commands
| Action | Command |
|---|---|
| Get overview | get_inbox_overview() |
| Check urgent | search_emails(subject_keyword="urgent") |
| Quick reply | reply_to_email(reply_body="...", subject_keyword="...") |
| Create draft | manage_drafts(action="create", ...) |
| Move to trash | manage_trash(action="move_to_trash", ...) |
| Archive | move_email(to_mailbox="Archive", ...) |
| Flag for later | update_email_status(action="flag", ...) |
| List drafts | manage_drafts(action="list") |
| Search all | search_emails(mailbox="All", ...) |
---
Start Today: Process your inbox to zero right now. Even if it takes 2 hours, it's worth it. Then maintain daily.
Email Management Expert Skill
An expert email management skill for Claude Code that provides intelligent workflows, best practices, and productivity strategies for the Apple Mail MCP.
What is This?
This is a Claude Code Skill that teaches Claude how to be an expert email management assistant. It works together with the Apple Mail MCP:
- Apple Mail MCP = The tools (18 email management functions)
- Email Management Skill = The expertise (workflows, strategies, best practices)
Together, they create an intelligent email management assistant that knows both what it CAN do (MCP tools) and HOW to do it effectively (Skill knowledge).
Contents
skill-email-management/
├── SKILL.md # Main skill definition with core workflows
├── examples/
│ ├── inbox-zero-workflow.md # Complete inbox zero methodology
│ ├── email-triage.md # Quick daily triage techniques
│ └── folder-organization.md # Folder structure strategies
└── templates/
├── common-workflows.md # Copy-paste workflow patterns
└── search-patterns.md # Comprehensive search referenceWhat You Get
Core Workflows
- Daily Inbox Triage - Process emails quickly (10-15 min)
- Inbox Zero - Achieve and maintain empty inbox
- Email Organization - Folder structures and filing strategies
- Advanced Search - Find any email quickly
- Bulk Operations - Clean up and organize efficiently
- Draft Management - Handle complex email composition
- Email Analytics - Understand patterns and optimize
Best Practices
- Industry-standard productivity methods (GTD, Inbox Zero)
- Safety-first approaches (backups, limits, confirmations)
- Privacy and security considerations
- Tool selection guidelines
- Common scenarios and solutions
Ready-to-Use Patterns
- Search patterns for every scenario
- Workflow templates you can copy-paste
- Decision frameworks
- Troubleshooting guides
Installation
Option 1: From Zip Package (Easiest)
Download and install:
1. Download email-management-skill.zip from the releases page
2. Extract and install to user scope (available in all projects):
unzip email-management-skill.zip -d ~/.claude/skills/3. That's it! The skill is now available in Claude Code.
Or install to project scope (available in current project only):
unzip email-management-skill.zip -d .claude/skills/Option 2: From Repository
Install the skill directly from the cloned repository:
User Scope (Recommended):
# From the repo directory
cp -r skill-email-management ~/.claude/skills/email-managementProject Scope:
# From the repo directory
mkdir -p .claude/skills
cp -r skill-email-management .claude/skills/email-managementUsage
Once installed, the skill activates automatically when you mention email management topics in Claude Code:
Trigger Keywords:
- "inbox management"
- "email organization"
- "email triage"
- "inbox zero"
- "organizing emails"
- "managing mail folders"
- "email productivity"
- "checking emails"
- "workflow optimization"
Example Queries:
- "Help me achieve inbox zero"
- "How should I organize my project emails?"
- "Triage my inbox"
- "Find all emails from John about the Alpha project"
- "What's the best way to handle my email workflow?"
- "Clean up old emails"
Claude will now: 1. Recognize these as email management requests 2. Load the Email Management Skill expertise 3. Use the Apple Mail MCP tools intelligently 4. Follow best practice workflows 5. Provide actionable suggestions with specific tool commands
How It Works
Before the Skill
User: "Help me organize my inbox"
Claude: *Calls list_inbox_emails tool*
*Shows email list*
"Here are your emails"After the Skill
User: "Help me organize my inbox"
Claude: *Loads Email Management Skill*
*Calls get_inbox_overview for situational awareness*
*Analyzes inbox state*
*Suggests appropriate workflow (triage, inbox zero, or organization)*
*Provides step-by-step guidance*
*Offers best practices and next steps*Features
Intelligent Workflows
The skill provides battle-tested workflows for common scenarios:
- Morning inbox check (10 min)
- Daily filing routine (15 min)
- Weekly maintenance (30 min)
- Vacation recovery (1-2 hours)
- Bulk cleanup operations
Tool Orchestration
The skill knows how to combine MCP tools effectively:
- When to use
get_inbox_overview()vssearch_emails() - How to batch operations for efficiency
- When to export before cleanup
- How to safely delete emails
- When to flag vs. move vs. draft
Context-Aware Suggestions
Based on your inbox state, the skill provides relevant advice:
- "You have 200 unread - let's start with triage"
- "Top sender is newsletters - consider unsubscribing"
- "Flagged items accumulating - schedule review time"
- "This folder has 500 emails - time to archive"
Safety First
The skill enforces safety practices:
- Always respects max_moves/max_deletes limits
- Suggests exporting before bulk deletion
- Confirms destructive operations
- Provides reversible alternatives (trash vs. permanent delete)
Customization
You can customize the skill for your needs:
1. Edit SKILL.md - Modify core workflows and principles 2. Add examples/ - Create new workflow documents 3. Update templates/ - Add your own workflow patterns 4. Adjust descriptions - Change trigger keywords in frontmatter
Example: Add your company's email policies:
## Company Email Policies
- All client emails must be filed in Clients/ folder
- Retention policy: Archive emails >1 year old
- Confidential tag: Use [CONF] in subject lineLearning Resources
Start Here
1. Read SKILL.md - Core workflows and principles 2. Review examples/inbox-zero-workflow.md - Complete methodology 3. Browse templates/common-workflows.md - Ready-to-use patterns
Deep Dives
examples/email-triage.md- Quick processing techniquesexamples/folder-organization.md- Structure strategiestemplates/search-patterns.md- Master email search
Benefits
For Individual Users
- Faster email processing (save 30-60 min/day)
- Better organization and less stress
- Never lose important emails
- Learn productivity best practices
For Teams
- Consistent email management approach
- Shared workflows and patterns
- Onboard new team members faster
- Version control email processes
For MCP Developers
- Shows how to document tool usage
- Provides user education layer
- Reduces support questions
- Increases MCP adoption
Requirements
- Claude Code (with Skills support)
- Apple Mail MCP (this repo)
- macOS with Apple Mail
Version
Version: 1.0.0 Compatible with: Apple Mail MCP v1.4.0+ Last Updated: 2025-01-16
About Skills
Skills are a Claude Code feature that packages expertise into discoverable capabilities. Unlike slash commands (which are user-invoked), skills are model-invoked - Claude automatically uses them when relevant.
Learn more: https://docs.claude.com/en/docs/claude-code/skills
Contributing
Found a great workflow or search pattern? Contributions welcome!
1. Add your workflow to examples/ or templates/ 2. Update SKILL.md if needed 3. Submit a PR
License
MIT License - Same as the Apple Mail MCP
Support
Issues? Questions? Open an issue on the main repo.
---
Pro Tip: Start with the inbox zero workflow in examples/inbox-zero-workflow.md. It's the most comprehensive introduction to email productivity with this skill!
Common Email Workflows - Quick Reference
This document provides ready-to-use workflow templates for common email management tasks. Copy and adapt these patterns to your specific needs.
Quick Triage Workflows
Morning Inbox Check (10 minutes)
# 1. Get overview
get_inbox_overview()
# 2. Check urgent items
search_emails(subject_keyword="urgent", read_status="unread")
search_emails(subject_keyword="ASAP", read_status="unread")
# 3. Check VIP senders
search_emails(sender="boss@company.com", read_status="unread")
search_emails(sender="key-client@example.com", read_status="unread")
# 4. Flag action items
update_email_status(action="flag", subject_keyword="action required", max_updates=5)
# 5. Quick cleanup
manage_trash(action="move_to_trash", sender="newsletter@", mailbox="INBOX", max_deletes=10)End of Day Cleanup (5 minutes)
# 1. Check unread count
get_unread_count()
# 2. Quick scan recent
get_recent_emails(count=20, include_content=False)
# 3. Mark read non-essential
update_email_status(action="mark_read", sender="automated@", mailbox="INBOX", max_updates=10)
# 4. Archive processed emails
move_email(to_mailbox="Archive", from_mailbox="INBOX", max_moves=20)
# 5. Review flagged items for tomorrow
search_emails(mailbox="All") # Check flagsSearch & Find Workflows
Find Specific Email Thread
# Option 1: Search by subject
get_email_with_content(
account="Work",
subject_keyword="Project Alpha",
max_results=5,
max_content_length=300
)
# Option 2: Get full thread
get_email_thread(
account="Work",
subject_keyword="Project Alpha",
mailbox="All",
max_messages=20
)
# Option 3: Advanced search
search_emails(
account="Work",
mailbox="All",
subject_keyword="Project Alpha",
sender="client@example.com",
include_content=True,
max_results=10
)Find Emails from Specific Person
# All emails from sender
search_emails(
account="Work",
sender="colleague@company.com",
mailbox="All",
max_results=50
)
# Unread emails from sender
search_emails(
account="Work",
sender="colleague@company.com",
read_status="unread",
mailbox="INBOX"
)
# Emails with attachments from sender
search_emails(
account="Work",
sender="colleague@company.com",
has_attachments=True,
mailbox="All",
max_results=20
)Find Emails by Date Range
# Emails from last month
search_emails(
account="Work",
date_from="2025-01-01",
date_to="2025-01-31",
mailbox="All",
max_results=100
)
# Recent emails with keyword
search_emails(
account="Work",
subject_keyword="invoice",
date_from="2025-01-15",
mailbox="All",
max_results=20
)Find Emails with Attachments
# All emails with attachments
search_emails(
account="Work",
has_attachments=True,
mailbox="INBOX",
max_results=50
)
# Specific sender with attachments
search_emails(
account="Work",
sender="supplier@example.com",
has_attachments=True,
mailbox="All",
max_results=20
)
# Then list attachments
list_email_attachments(
account="Work",
subject_keyword="Invoice",
max_results=1
)
# Save specific attachment
save_email_attachment(
account="Work",
subject_keyword="Invoice",
attachment_name="invoice.pdf",
save_path="~/Desktop/invoice.pdf"
)Organization Workflows
Daily Filing Routine
# 1. File project emails
search_emails(
account="Work",
subject_keyword="Project Alpha",
mailbox="INBOX",
read_status="all"
)
move_email(
account="Work",
subject_keyword="Project Alpha",
to_mailbox="Projects/Alpha",
from_mailbox="INBOX",
max_moves=10
)
# 2. File client emails
search_emails(
account="Work",
sender="client@example.com",
mailbox="INBOX"
)
move_email(
account="Work",
sender="client@example.com", # Need to use subject_keyword with search result
to_mailbox="Clients/ClientName",
from_mailbox="INBOX",
max_moves=10
)
# 3. Archive everything else
move_email(
account="Work",
subject_keyword="", # Match all
to_mailbox="Archive",
from_mailbox="INBOX",
max_moves=20
)Bulk Folder Organization
# 1. Review current structure
list_mailboxes(account="Work", include_counts=True)
# 2. Identify emails to organize
get_statistics(
account="Work",
scope="account_overview",
days_back=30
)
# 3. Batch move by pattern
# Example: Move all emails from a client
search_emails(
account="Work",
sender="bigclient@example.com",
mailbox="All",
max_results=50
)
# Then move them (repeat with batches if >10)
move_email(
account="Work",
subject_keyword="[pattern from search]",
to_mailbox="Clients/BigClient",
from_mailbox="INBOX",
max_moves=10
)Archive Old Emails
# 1. Find old read emails
search_emails(
account="Work",
date_to="2024-12-31",
read_status="read",
mailbox="INBOX",
max_results=50
)
# 2. Review what you found
# (Check if any need to be kept in current folders)
# 3. Export if important
export_emails(
account="Work",
scope="single_email",
subject_keyword="Important Old Email",
mailbox="INBOX",
save_directory="~/Documents/Email-Archives",
format="txt"
)
# 4. Move to archive
move_email(
account="Work",
subject_keyword="[pattern]",
to_mailbox="Archive/2024",
from_mailbox="INBOX",
max_moves=20
)Response Workflows
Quick Reply
# 1. Find the email
get_email_with_content(
account="Work",
subject_keyword="Quick Question",
max_results=1,
max_content_length=300
)
# 2. Reply immediately
reply_to_email(
account="Work",
subject_keyword="Quick Question",
reply_body="Yes, that works for me. Thanks!",
reply_to_all=False
)
# 3. Archive the thread
move_email(
account="Work",
subject_keyword="Quick Question",
to_mailbox="Archive",
from_mailbox="INBOX",
max_moves=1
)Deferred Response (Draft)
# 1. Review email content
get_email_with_content(
account="Work",
subject_keyword="Complex Request",
max_results=1,
max_content_length=500
)
# 2. Create draft for later
manage_drafts(
account="Work",
action="create",
subject="Re: Complex Request",
to="sender@example.com",
body="Thank you for your email. I'm reviewing your request and will provide a detailed response by [date].\n\n[Draft notes: Need to check with team, review budget, etc.]"
)
# 3. Flag original email
update_email_status(
account="Work",
action="flag",
subject_keyword="Complex Request",
mailbox="INBOX",
max_updates=1
)Reply to All in Thread
# 1. View full thread context
get_email_thread(
account="Work",
subject_keyword="Team Discussion",
mailbox="All",
max_messages=20
)
# 2. Reply to all
reply_to_email(
account="Work",
subject_keyword="Team Discussion",
reply_body="Based on the discussion, I agree with the proposal. Let's move forward.",
reply_to_all=True
)Forward with Context
# 1. Find the email
get_email_with_content(
account="Work",
subject_keyword="Customer Issue",
max_results=1,
max_content_length=500
)
# 2. Forward to colleague
forward_email(
account="Work",
subject_keyword="Customer Issue",
to="colleague@company.com",
message="Hi [Name],\n\nCan you please help with this customer issue? It seems related to your area.\n\nThanks!",
mailbox="INBOX"
)
# 3. Update status and move
update_email_status(
account="Work",
action="mark_read",
subject_keyword="Customer Issue",
mailbox="INBOX",
max_updates=1
)
move_email(
account="Work",
subject_keyword="Customer Issue",
to_mailbox="Waiting For",
from_mailbox="INBOX",
max_moves=1
)Cleanup Workflows
Delete Spam and Newsletters
# 1. Identify unwanted senders
get_statistics(
account="Personal",
scope="account_overview",
days_back=30
)
# Look for frequent senders you don't read
# 2. Search for their emails
search_emails(
account="Personal",
sender="newsletter@unwanted.com",
mailbox="INBOX",
max_results=50
)
# 3. Bulk delete (move to trash first - reversible)
manage_trash(
account="Personal",
action="move_to_trash",
sender="newsletter@unwanted.com",
mailbox="INBOX",
max_deletes=20
)
# 4. Verify trash
search_emails(
account="Personal",
sender="newsletter@unwanted.com",
mailbox="Trash"
)
# 5. Permanently delete if confirmed (optional)
manage_trash(
account="Personal",
action="delete_permanent",
sender="newsletter@unwanted.com",
max_deletes=20
)Clean Up Old Emails
# 1. Find emails older than 90 days
search_emails(
account="Work",
date_to="2024-10-01",
read_status="read",
mailbox="INBOX",
max_results=50
)
# 2. Export important ones first (if needed)
export_emails(
account="Work",
scope="entire_mailbox",
mailbox="INBOX",
save_directory="~/Documents/Email-Backup",
format="txt"
)
# 3. Move to archive or delete
move_email(
account="Work",
subject_keyword="[pattern]",
to_mailbox="Archive/2024",
from_mailbox="INBOX",
max_moves=20
)Empty Trash
# 1. Review what's in trash first
search_emails(
account="Work",
mailbox="Trash",
max_results=20
)
# 2. Export if anything important
export_emails(
account="Work",
scope="entire_mailbox",
mailbox="Trash",
save_directory="~/Desktop/Trash-Backup"
)
# 3. Empty trash (CAREFUL - irreversible)
manage_trash(
account="Work",
action="empty_trash"
)Draft Management Workflows
Weekly Draft Review
# 1. List all drafts
manage_drafts(
account="Work",
action="list"
)
# 2. Send completed drafts
manage_drafts(
account="Work",
action="send",
draft_subject="Ready to Send Draft"
)
# 3. Delete outdated drafts
manage_drafts(
account="Work",
action="delete",
draft_subject="Old Draft from Last Month"
)
# 4. Edit others (do in Mail app)Create Draft for Complex Email
# 1. Review context
get_email_thread(
account="Work",
subject_keyword="Complex Topic",
mailbox="All"
)
# 2. Create draft with initial thoughts
manage_drafts(
account="Work",
action="create",
subject="Re: Complex Topic - My Analysis",
to="stakeholder@company.com",
cc="team@company.com",
body="[Draft - Need to expand]\n\n1. Summary of situation\n2. Analysis\n3. Recommendation\n\n[Notes to self: Check data, consult with team]"
)
# 3. Schedule time to complete
# (Set calendar reminder to finish draft)Analysis Workflows
Weekly Email Analytics
# 1. Get account overview
get_statistics(
account="Work",
scope="account_overview",
days_back=7
)
# 2. Analyze top senders
# (Use sender names from overview)
get_statistics(
account="Work",
scope="sender_stats",
sender="frequent-sender@example.com",
days_back=30
)
# 3. Check mailbox distribution
list_mailboxes(
account="Work",
include_counts=True
)
# 4. Review unread counts
get_unread_count()
# 5. Identify actions:
# - Unsubscribe from high-volume, low-value senders
# - Create folders for frequent senders
# - Archive/delete old emails in cluttered foldersSender Analysis and Action
# 1. Get sender statistics
get_statistics(
account="Work",
scope="sender_stats",
sender="automated-reports@company.com",
days_back=90
)
# 2. If too many emails, decide action:
# Option A: Create filter (in Mail app)
# Option B: Move to dedicated folder
# Option C: Unsubscribe
# 3. Organize existing emails
search_emails(
account="Work",
sender="automated-reports@company.com",
mailbox="All",
max_results=50
)
move_email(
account="Work",
subject_keyword="[pattern]",
to_mailbox="Automated Reports",
from_mailbox="INBOX",
max_moves=20
)Batch Operation Workflows
Flag Multiple Emails for Review
# 1. Search for pattern
search_emails(
account="Work",
subject_keyword="Q4 Review",
mailbox="All",
max_results=20
)
# 2. Batch flag
update_email_status(
account="Work",
action="flag",
subject_keyword="Q4 Review",
mailbox="All",
max_updates=10
)Mark Multiple Emails as Read
# 1. Identify emails to mark read
search_emails(
account="Work",
sender="automated-notifications@",
read_status="unread",
mailbox="INBOX",
max_results=20
)
# 2. Batch mark as read
update_email_status(
account="Work",
action="mark_read",
sender="automated-notifications@",
mailbox="INBOX",
max_updates=20
)Bulk Move by Sender
# 1. Find all emails from sender
search_emails(
account="Work",
sender="project-team@company.com",
mailbox="INBOX",
max_results=50
)
# 2. Move in batches (max_moves=10 is safe)
move_email(
account="Work",
subject_keyword="", # Use pattern from search
to_mailbox="Projects/Team Project",
from_mailbox="INBOX",
max_moves=10
)
# 3. Repeat if more than 10 emails
# (Run the move_email command again)Backup and Export Workflows
Export Important Mailbox
# 1. Check mailbox contents
search_emails(
account="Work",
mailbox="Important Project",
max_results=20
)
# 2. Export entire mailbox
export_emails(
account="Work",
scope="entire_mailbox",
mailbox="Important Project",
save_directory="~/Documents/Email-Backups/Important-Project",
format="txt"
)
# 3. Verify export
# (Check ~/Documents/Email-Backups/Important-Project directory)Export Single Important Email
# 1. Find the email
get_email_with_content(
account="Work",
subject_keyword="Contract Agreement",
max_results=1,
max_content_length=0 # Full content
)
# 2. Export with attachments
list_email_attachments(
account="Work",
subject_keyword="Contract Agreement"
)
save_email_attachment(
account="Work",
subject_keyword="Contract Agreement",
attachment_name="contract.pdf",
save_path="~/Documents/Contracts/contract.pdf"
)
# 3. Export email text
export_emails(
account="Work",
scope="single_email",
subject_keyword="Contract Agreement",
save_directory="~/Documents/Contracts",
format="html"
)Weekly Maintenance Workflow
# Monday Morning (30 min)
# 1. Review weekend emails
get_inbox_overview()
# 2. Triage urgent items
search_emails(subject_keyword="urgent", read_status="unread")
search_emails(subject_keyword="action required", read_status="unread")
# 3. Process inbox to zero
# (Use inbox zero workflow)
# 4. Review weekly tasks
search_emails(mailbox="All") # Check flags
# 5. Set up for the week
manage_drafts(action="list")# Friday Afternoon (30 min)
# 1. Complete pending replies
manage_drafts(action="list")
# Send or delete drafts
# 2. Clean up flagged items
search_emails(mailbox="All") # Review flags
update_email_status(action="unflag", ...) # Clear completed
# 3. Archive week's emails
move_email(to_mailbox="Archive", from_mailbox="INBOX", max_moves=50)
# 4. Review statistics
get_statistics(scope="account_overview", days_back=7)
# 5. Plan for next week
# Note patterns, senders to filter, folders to createTips for Using These Workflows
1. Copy and adapt: These are templates - adjust parameters for your needs 2. Chain commands: Run multiple commands in sequence for complex workflows 3. Use max limits: Always respect max_moves, max_deletes safety limits 4. Review before deleting: Always search first, then delete 5. Export before cleanup: Backup important emails before bulk operations 6. Start small: Test with small max values (5-10) before increasing
Quick Reference: Most Common Commands
# Daily essentials
get_inbox_overview()
get_recent_emails(count=20)
search_emails(subject_keyword="...", mailbox="All")
reply_to_email(subject_keyword="...", reply_body="...")
move_email(to_mailbox="Archive", from_mailbox="INBOX", max_moves=10)
# Weekly maintenance
list_mailboxes(include_counts=True)
manage_drafts(action="list")
get_statistics(scope="account_overview", days_back=7)
update_email_status(action="flag" or "mark_read", ...)
# Cleanup operations
manage_trash(action="move_to_trash", ...)
export_emails(scope="entire_mailbox", mailbox="...", ...)---
Remember: These workflows are starting points. Adapt them to your specific email patterns and work style.
Email Search Patterns Reference
This document provides a comprehensive reference for search patterns using the Apple Mail MCP. Master these patterns to find any email quickly.
Basic Search Tools
The MCP provides three main search tools:
1. `get_email_with_content()` - Best for quick subject searches with content preview 2. `search_emails()` - Best for advanced filtering with multiple criteria 3. `get_email_thread()` - Best for viewing conversation threads
Search Pattern Cheat Sheet
By Subject
# Simple subject search (fast, with content)
get_email_with_content(
account="Work",
subject_keyword="meeting",
max_results=5,
max_content_length=300
)
# Advanced subject search (more filtering options)
search_emails(
account="Work",
subject_keyword="meeting",
mailbox="INBOX",
max_results=20
)
# Case-insensitive automatic
# Both "MEETING", "Meeting", and "meeting" will matchBy Sender
# All emails from a sender
search_emails(
account="Work",
sender="colleague@company.com",
mailbox="All",
max_results=50
)
# Partial sender matching
search_emails(
account="Work",
sender="@company.com", # All from company domain
mailbox="All"
)
# Sender + subject
search_emails(
account="Work",
sender="boss@company.com",
subject_keyword="review",
mailbox="All"
)By Date Range
# Emails from specific period
search_emails(
account="Work",
date_from="2025-01-01",
date_to="2025-01-31",
mailbox="All",
max_results=100
)
# Recent emails (last 7 days)
search_emails(
account="Work",
date_from="2025-01-09", # 7 days ago
mailbox="All"
)
# Old emails (before specific date)
search_emails(
account="Work",
date_to="2024-12-31",
read_status="read",
mailbox="INBOX"
)By Read Status
# Unread emails only
search_emails(
account="Work",
read_status="unread",
mailbox="INBOX",
max_results=50
)
# Read emails only
search_emails(
account="Work",
read_status="read",
mailbox="INBOX",
max_results=50
)
# All emails (read and unread)
search_emails(
account="Work",
read_status="all",
mailbox="INBOX"
)By Attachment Status
# Emails with attachments
search_emails(
account="Work",
has_attachments=True,
mailbox="INBOX",
max_results=20
)
# Emails without attachments
search_emails(
account="Work",
has_attachments=False,
mailbox="INBOX"
)
# With attachments from specific sender
search_emails(
account="Work",
sender="vendor@example.com",
has_attachments=True,
mailbox="All"
)By Mailbox/Folder
# Search in specific mailbox
search_emails(
account="Work",
mailbox="Projects/Alpha",
subject_keyword="update"
)
# Search across all mailboxes
search_emails(
account="Work",
mailbox="All",
subject_keyword="important"
)
# Search in inbox only (default)
search_emails(
account="Work",
mailbox="INBOX",
subject_keyword="todo"
)Advanced Search Patterns
Multi-Criteria Searches
# Unread emails with attachments from specific sender
search_emails(
account="Work",
sender="client@example.com",
has_attachments=True,
read_status="unread",
mailbox="All",
max_results=20
)
# Recent important emails
search_emails(
account="Work",
subject_keyword="urgent",
date_from="2025-01-01",
read_status="unread",
mailbox="INBOX"
)
# Old read emails with attachments (for cleanup)
search_emails(
account="Work",
date_to="2024-06-30",
has_attachments=True,
read_status="read",
mailbox="All",
max_results=100
)Thread Searches
# Get full conversation thread
get_email_thread(
account="Work",
subject_keyword="Project Discussion",
mailbox="All",
max_messages=50
)
# Thread from specific mailbox
get_email_thread(
account="Work",
subject_keyword="Client Meeting",
mailbox="Clients/ClientName"
)
# Note: Thread search automatically handles "Re:" and "Fwd:" prefixesContent Preview Searches
# Quick preview (300 chars)
search_emails(
account="Work",
subject_keyword="proposal",
include_content=True,
mailbox="All",
max_results=5
)
# Full content preview
get_email_with_content(
account="Work",
subject_keyword="contract",
max_content_length=0, # 0 = unlimited
max_results=1
)
# Long preview (1000 chars)
get_email_with_content(
account="Work",
subject_keyword="requirements",
max_content_length=1000,
max_results=3
)Common Search Scenarios
Finding Urgent/Priority Emails
# Urgent keyword searches
search_emails(account="Work", subject_keyword="urgent", read_status="unread")
search_emails(account="Work", subject_keyword="ASAP", read_status="unread")
search_emails(account="Work", subject_keyword="immediate", read_status="unread")
search_emails(account="Work", subject_keyword="deadline", mailbox="All")
search_emails(account="Work", subject_keyword="action required", read_status="unread")
# From important people
search_emails(account="Work", sender="boss@company.com", read_status="unread")
search_emails(account="Work", sender="ceo@company.com", mailbox="All")
search_emails(account="Work", sender="key-client@", read_status="unread")Finding Specific Documents/Attachments
# Invoices
search_emails(
account="Work",
subject_keyword="invoice",
has_attachments=True,
mailbox="All",
max_results=50
)
# Contracts
search_emails(
account="Work",
subject_keyword="contract",
has_attachments=True,
sender="legal@"
)
# Reports
search_emails(
account="Work",
subject_keyword="report",
has_attachments=True,
date_from="2025-01-01"
)
# Then list and download
list_email_attachments(
account="Work",
subject_keyword="invoice"
)
save_email_attachment(
account="Work",
subject_keyword="invoice",
attachment_name="invoice.pdf",
save_path="~/Desktop/invoice.pdf"
)Finding Automated/System Emails
# No-reply emails
search_emails(
account="Work",
sender="no-reply@",
mailbox="INBOX",
max_results=50
)
search_emails(
account="Work",
sender="noreply@",
mailbox="INBOX"
)
# Automated notifications
search_emails(
account="Work",
sender="notifications@",
mailbox="All"
)
search_emails(
account="Work",
subject_keyword="[Automated]",
mailbox="INBOX"
)
# Newsletters (for unsubscribe candidates)
search_emails(
account="Personal",
subject_keyword="unsubscribe",
read_status="unread",
max_results=50
)Finding Project/Client Emails
# By project name in subject
search_emails(
account="Work",
subject_keyword="Project Alpha",
mailbox="All",
max_results=100
)
# By client domain
search_emails(
account="Work",
sender="@clientdomain.com",
mailbox="All",
max_results=50
)
# Project + timeframe
search_emails(
account="Work",
subject_keyword="Project Alpha",
date_from="2025-01-01",
date_to="2025-03-31",
mailbox="All"
)
# Project + unread
search_emails(
account="Work",
subject_keyword="Project Alpha",
read_status="unread",
mailbox="All"
)Finding Old Emails for Cleanup
# Old read emails (>90 days)
search_emails(
account="Work",
date_to="2024-10-01",
read_status="read",
mailbox="INBOX",
max_results=100
)
# Old emails with attachments (storage cleanup)
search_emails(
account="Work",
date_to="2024-01-01",
has_attachments=True,
mailbox="All",
max_results=100
)
# Old unread (probably not important)
search_emails(
account="Work",
date_to="2024-12-01",
read_status="unread",
mailbox="INBOX"
)Finding Emails Needing Action
# Action-related keywords
search_emails(account="Work", subject_keyword="action required", read_status="unread")
search_emails(account="Work", subject_keyword="please review", read_status="unread")
search_emails(account="Work", subject_keyword="waiting for", mailbox="All")
search_emails(account="Work", subject_keyword="pending", read_status="unread")
search_emails(account="Work", subject_keyword="approval", read_status="unread")
search_emails(account="Work", subject_keyword="sign off", read_status="unread")
search_emails(account="Work", subject_keyword="feedback needed", read_status="unread")Finding Meeting/Calendar Related
# Meeting invites
search_emails(
account="Work",
subject_keyword="meeting",
mailbox="INBOX"
)
# Calendar invites
search_emails(
account="Work",
subject_keyword="invitation",
date_from="2025-01-15"
)
# Accepted meetings
search_emails(
account="Work",
subject_keyword="Accepted:",
mailbox="All"
)
# Meeting agendas
search_emails(
account="Work",
subject_keyword="agenda",
has_attachments=True
)Search Optimization Tips
1. Start Broad, Then Narrow
# Step 1: Broad search
search_emails(
account="Work",
subject_keyword="project",
mailbox="All",
max_results=20
)
# Step 2: Add filters based on results
search_emails(
account="Work",
subject_keyword="project",
sender="client@example.com",
date_from="2025-01-01",
mailbox="All"
)2. Use Mailbox="All" When Location Unknown
# Don't know where it is? Search everywhere
search_emails(
account="Work",
subject_keyword="rare email",
mailbox="All",
max_results=50
)3. Combine Multiple Searches for OR Logic
# Want emails matching "urgent" OR "ASAP"?
# Run two searches:
urgent_results = search_emails(
account="Work",
subject_keyword="urgent",
read_status="unread"
)
asap_results = search_emails(
account="Work",
subject_keyword="ASAP",
read_status="unread"
)
# Then combine results4. Use Partial Matches
# Partial subject (finds "invoice 123", "invoice-2025", etc.)
search_emails(
account="Work",
subject_keyword="invoice",
mailbox="All"
)
# Partial sender (all Gmail addresses)
search_emails(
account="Work",
sender="@gmail.com",
mailbox="All"
)
# Partial domain (all company emails)
search_emails(
account="Work",
sender="@company.com",
mailbox="All"
)5. Preview Content Sparingly
# Fast search (no content)
search_emails(
account="Work",
subject_keyword="project",
include_content=False, # Default, fastest
max_results=50
)
# Slower search (with content preview)
search_emails(
account="Work",
subject_keyword="project",
include_content=True, # Slower, shows previews
max_results=10 # Limit results when including content
)Special Search Techniques
Finding Emails You Sent
# Note: MCP searches received emails only
# To find sent emails, search in "Sent" mailbox
search_emails(
account="Work",
mailbox="Sent",
subject_keyword="proposal",
max_results=20
)Finding CCs/BCCs
# Search where you might be CC'd
search_emails(
account="Work",
subject_keyword="FYI",
mailbox="All"
)
# Or look for typical CC patterns
search_emails(
account="Work",
subject_keyword="CC:",
mailbox="All"
)Finding Drafts
# List all drafts
manage_drafts(
account="Work",
action="list"
)
# Search specific draft
manage_drafts(
account="Work",
action="send",
draft_subject="keyword"
)Fuzzy Matching
# Use partial keywords for fuzzy matching
# Instead of exact "Project Alpha Phase 2"
search_emails(
account="Work",
subject_keyword="Alpha", # Matches any email with "Alpha"
mailbox="All"
)
# Or combine multiple searches for different spellings
search_emails(account="Work", subject_keyword="project alpha")
search_emails(account="Work", subject_keyword="proj alpha")
search_emails(account="Work", subject_keyword="alpha project")Search Result Management
Understanding Max Results
# Small searches (quick checks)
search_emails(..., max_results=5)
# Medium searches (normal use)
search_emails(..., max_results=20) # Default
# Large searches (comprehensive)
search_emails(..., max_results=100)
# Note: If you get max_results back, there might be more
# Run search again with higher limit or add more filtersHandling Large Result Sets
# Step 1: Count results with limited search
initial_search = search_emails(
account="Work",
subject_keyword="newsletter",
mailbox="INBOX",
max_results=20
)
# If returns 20, there are likely more
# Step 2: Add filters to narrow
filtered_search = search_emails(
account="Work",
subject_keyword="newsletter",
date_from="2025-01-01",
mailbox="INBOX",
max_results=50
)
# Step 3: Process in batches
# Use move_email or update_email_status with max_moves/max_updatesSearch Troubleshooting
"No Results Found"
Try these:
1. Check spelling: Subject searches are exact substring matches
# Try variations
search_emails(subject_keyword="project")
search_emails(subject_keyword="proj")
search_emails(subject_keyword="Project") # Case doesn't matter2. Expand mailbox: Search all folders
search_emails(mailbox="All", ...)3. Remove filters: Start with just subject
search_emails(subject_keyword="term", mailbox="All")4. Check account: Verify correct account
list_accounts() # See all accounts
search_emails(account="CorrectName", ...)"Too Many Results"
Try these:
1. Add sender filter
search_emails(subject_keyword="meeting", sender="specific@person.com")2. Add date filter
search_emails(subject_keyword="report", date_from="2025-01-01")3. Add read status filter
search_emails(subject_keyword="update", read_status="unread")4. Search specific mailbox
search_emails(subject_keyword="project", mailbox="Projects/Alpha")"Wrong Emails Returned"
Try these:
1. Use more specific keywords
# Instead of: subject_keyword="update"
# Try: subject_keyword="status update"2. Combine filters
search_emails(
subject_keyword="invoice",
sender="vendor@",
has_attachments=True
)3. Use thread search for conversations
get_email_thread(subject_keyword="discussion topic")Quick Reference Table
| I Want To... | Use This |
|---|---|
| Quick subject search | get_email_with_content(subject_keyword="...") |
| Advanced filtering | search_emails(...) |
| View conversation | get_email_thread(subject_keyword="...") |
| Find by sender | search_emails(sender="...") |
| Find by date | search_emails(date_from="...", date_to="...") |
| Find unread | search_emails(read_status="unread") |
| Find with attachments | search_emails(has_attachments=True) |
| Search all folders | search_emails(mailbox="All") |
| Get content preview | search_emails(include_content=True) or get_email_with_content() |
| Find sent emails | search_emails(mailbox="Sent") |
| Find drafts | manage_drafts(action="list") |
Practice Searches
Try these common searches right now:
# 1. What's urgent right now?
search_emails(account="Work", subject_keyword="urgent", read_status="unread")
# 2. What emails have I not read this week?
search_emails(account="Work", read_status="unread", date_from="2025-01-13")
# 3. What did my boss send me recently?
search_emails(account="Work", sender="boss@", date_from="2025-01-01")
# 4. Where are emails about Project X?
search_emails(account="Work", subject_keyword="Project X", mailbox="All")
# 5. What old emails can I clean up?
search_emails(account="Work", date_to="2024-06-30", read_status="read", max_results=50)---
Pro Tip: Save your most common search patterns as comments in a note file for quick copy-paste access!
Related skills
How it compares
Pick email-management-expert for Apple Mail inbox organization via MCP; use transactional email skills when the goal is sending notifications or campaigns.
FAQ
What does email-management-expert require to run?
email-management-expert requires Apple Mail on macOS with Apple Mail MCP tools configured in the agent environment. The skill instructs the agent how to triage, sort, and organize messages through those MCP calls rather than manual UI steps.
When should a developer invoke email-management-expert?
email-management-expert fits when a developer mentions inbox management, email triage, inbox zero, mail folders, or email workflow optimization. The skill applies structured handling patterns and Apple Mail MCP actions to reduce inbox chaos.
Does email-management-expert send marketing or bulk email?
email-management-expert focuses on reading, triaging, and organizing existing Apple Mail messages into actionable workflows. It does not replace transactional senders like Resend or SMTP tools for outbound campaign or notification delivery.