Provides comprehensive email management capabilities including intelligent categorization, advanced search and filtering, archiving and export (MBOX, JSON, CSV), automated cleanup policies, and detailed analytics for Gmail accounts through the Gmail API.
Integrates with Google Cloud Platform for OAuth2 authentication and Gmail API access, enabling secure email operations through Google Cloud credentials.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Gmail MCP Serverarchive all emails older than 2 years and show me the summary"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Gmail MCP Server
A comprehensive Model Context Protocol (MCP) server that integrates with Gmail API to provide intelligent email management capabilities. Features advanced email categorization, search, archiving, deletion, and automated cleanup with 25+ MCP tools for complete email lifecycle management.
π Key Features
π§ Intelligent Email Management
AI-Powered Categorization: Automatically categorize emails by importance (high/medium/low) using advanced analysis
Smart Search & Filtering: Advanced search with multiple criteria, saved searches, and filter combinations
Real-time Processing: Background job processing for long-running operations with progress tracking
ποΈ Archive & Export System
Smart Archiving: Archive emails based on rules with multiple export formats (MBOX, JSON, CSV)
Automated Rules Engine: Create and manage automatic archiving rules with scheduling
Restore Capability: Restore previously archived emails with full metadata
π§Ή Advanced Cleanup Automation
Policy-Based Cleanup: 13+ cleanup tools with configurable policies for automated email management
Access Pattern Tracking: Track email access patterns for intelligent cleanup decisions
Safety-First Design: Dry-run options, confirmation steps, and rollback capabilities
π Analytics & Monitoring
Comprehensive Statistics: Detailed email usage analytics by category, year, size, and more
System Health Monitoring: Real-time metrics, performance tracking, and system health reports
Cleanup Recommendations: AI-driven recommendations for optimal email management
π Security & Safety
OAuth2 Authentication: Secure Gmail API integration with encrypted token storage
Multi-layered Safety: Confirmation prompts, dry-run modes, and maximum deletion limits
Audit Logging: Complete operation logging and error tracking
π Table of Contents
π Quick Start
Prerequisites
Node.js 18+ and npm
Google Cloud Platform account with Gmail API enabled
OAuth2 credentials (Client ID and Client Secret)
Automated Setup
# Clone and install
git clone <repository-url>
cd gmail-mcp-server
npm run setup # Interactive setup wizard
npm install && npm run buildFirst Run
# Start the MCP server
npm start
# Authenticate with Gmail (run in your MCP client)
{
"tool": "authenticate"
}π¦ Installation
Method 1: Quick Setup (Recommended)
# 1. Clone repository
git clone <repository-url>
cd gmail-mcp-server
# 2. Run interactive setup
npm run setup
# 3. Install and build
npm install
npm run buildThe setup script will guide you through:
π Setting up Google Cloud credentials
π Creating necessary directories
βοΈ Configuring environment variables
π§ Initial configuration
Method 2: Manual Setup
Set up Google Cloud credentials:
Go to Google Cloud Console
Create project or select existing
Enable Gmail API
Create OAuth2 credentials (Desktop application)
Download
credentials.jsonto project root
Configure environment:
cp .env.example .env # Edit .env with your settingsCreate directories:
mkdir -p data logs archivesInstall and build:
npm install npm run build
π§ Configuration
MCP Client Setup
For Claude Desktop:
{
"mcpServers": {
"gmail": {
"command": "node",
"args": ["/path/to/gmail-mcp-server/build/index.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}For other MCP clients:
# Direct stdio connection
node /path/to/gmail-mcp-server/build/index.jsEnvironment Configuration
Key environment variables in .env:
GOOGLE_CLIENT_ID=your_client_id
GOOGLE_CLIENT_SECRET=your_client_secret
GOOGLE_REDIRECT_URI=http://localhost:3000/oauth2callback
STORAGE_PATH=./data
CACHE_TTL=3600
LOG_LEVEL=infoπ οΈ MCP Tools Reference
The Gmail MCP Server provides 25+ specialized tools organized into logical categories for comprehensive email management. Each tool includes safety features, parameter validation, and detailed error handling.
π Authentication Tools
authenticate
Initiates OAuth2 authentication flow with Gmail API.
Parameters:
scopes(array, optional): Additional OAuth scopes beyond Gmail read/write
Returns: Authentication status and user email
{
"tool": "authenticate",
"arguments": {
"scopes": ["https://www.googleapis.com/auth/gmail.modify"]
}
}π§ Email Management Tools
list_emails
List emails with comprehensive filtering and pagination.
Parameters:
category(string): Filter by importance level (high|medium|low)year(number): Filter by specific yearsize_min(number): Minimum size in bytessize_max(number): Maximum size in bytesarchived(boolean): Include archived emailshas_attachments(boolean): Filter by attachment presencelabels(array): Filter by Gmail labelsquery(string): Custom Gmail query stringlimit(number, default: 50): Maximum resultsoffset(number, default: 0): Skip first N results
{
"tool": "list_emails",
"arguments": {
"category": "high",
"year": 2024,
"has_attachments": true,
"limit": 25
}
}get_email_details
Retrieve complete email content and metadata.
Parameters:
id(string, required): Gmail message ID
Returns: Full email object with headers, body, attachments
{
"tool": "get_email_details",
"arguments": {
"id": "18c2e4f5d9a8b7c3"
}
}categorize_emails
Analyze and categorize emails by importance using AI algorithms.
Parameters:
year(number, required): Year to categorizeforce_refresh(boolean): Re-analyze already categorized emails
Returns: Categorization job status and statistics
{
"tool": "categorize_emails",
"arguments": {
"year": 2024,
"force_refresh": true
}
}π Search & Filter Tools
search_emails
Advanced multi-criteria email search with intelligent filtering.
Parameters:
query(string): Text search querycategory(string): Importance filter (high|medium|low)year_range(object): Date range withstartand/orendyearsize_range(object): Size range withminand/ormaxbytessender(string): Filter by sender email addresshas_attachments(boolean): Attachment presence filterarchived(boolean): Include archived emailslimit(number, default: 50): Maximum results
{
"tool": "search_emails",
"arguments": {
"query": "project deadline",
"category": "high",
"year_range": { "start": 2024 },
"size_range": { "min": 1048576 },
"sender": "manager@company.com"
}
}save_search
Save search criteria for quick reuse.
Parameters:
name(string, required): Name for saved searchcriteria(object, required): Search criteria to save
{
"tool": "save_search",
"arguments": {
"name": "Large Recent Emails",
"criteria": {
"size_range": { "min": 5242880 },
"year_range": { "start": 2024 }
}
}
}list_saved_searches
Retrieve all saved search queries.
Parameters: None
Returns: Array of saved searches with usage statistics
{
"tool": "list_saved_searches"
}π Archive & Export Tools
archive_emails
Archive emails using multiple methods and formats.
Parameters:
search_criteria(object): Email selection criteriacategory(string): Archive by importance levelyear(number): Archive emails from specific yearolder_than_days(number): Archive emails older than N daysmethod(string, required): Archive method (gmail|export)export_format(string): Format when exporting (mbox|json)export_path(string): Custom export destinationdry_run(boolean, default: false): Preview mode
{
"tool": "archive_emails",
"arguments": {
"category": "low",
"older_than_days": 180,
"method": "export",
"export_format": "mbox",
"dry_run": false
}
}restore_emails
Restore emails from previous archives.
Parameters:
archive_id(string): Specific archive to restore fromemail_ids(array): Individual email IDs to restorerestore_labels(array): Labels to apply to restored emails
{
"tool": "restore_emails",
"arguments": {
"archive_id": "archive_2023_low_priority",
"restore_labels": ["restored", "reviewed"]
}
}create_archive_rule
Create automated archiving rules with scheduling.
Parameters:
name(string, required): Descriptive rule namecriteria(object, required): Archiving conditionsaction(object, required): Archive method and formatschedule(string): Execution frequency (daily|weekly|monthly)
{
"tool": "create_archive_rule",
"arguments": {
"name": "Auto-archive old promotional emails",
"criteria": {
"category": "low",
"older_than_days": 90,
"labels": ["promotions"]
},
"action": {
"method": "gmail"
},
"schedule": "weekly"
}
}list_archive_rules
View all configured archive rules and their status.
Parameters:
active_only(boolean, default: false): Show only enabled rules
{
"tool": "list_archive_rules",
"arguments": {
"active_only": true
}
}export_emails
Export emails to external formats with cloud upload support.
Parameters:
search_criteria(object): Email selection filtersformat(string, required): Export format (mbox|json|csv)include_attachments(boolean, default: false): Include attachmentsoutput_path(string): Local output pathcloud_upload(object): Cloud storage configuration
{
"tool": "export_emails",
"arguments": {
"format": "json",
"search_criteria": { "year": 2023 },
"include_attachments": true,
"cloud_upload": {
"provider": "gdrive",
"path": "/backups/gmail-2023"
}
}
}ποΈ Delete & Cleanup Tools
delete_emails
Safely delete emails with comprehensive safety checks.
β οΈ Safety Note: Always use dry_run: true first to preview deletions
Parameters:
search_criteria(object): Email selection filterscategory(string): Delete by importance levelyear(number): Delete from specific yearsize_threshold(number): Delete emails larger than N bytesskip_archived(boolean, default: true): Skip archived emailsdry_run(boolean, default: false): Preview modemax_count(number, default: 10): Safety limit
{
"tool": "delete_emails",
"arguments": {
"category": "low",
"year": 2022,
"dry_run": true,
"max_count": 50
}
}empty_trash
Permanently delete all emails in Gmail trash folder.
β οΈ Destructive Operation: This permanently deletes emails
Parameters:
dry_run(boolean, default: false): Preview modemax_count(number, default: 10): Safety limit
{
"tool": "empty_trash",
"arguments": {
"dry_run": true,
"max_count": 100
}
}trigger_cleanup
Execute manual cleanup using specific policies.
Parameters:
policy_id(string, required): Cleanup policy to executedry_run(boolean, default: false): Preview modemax_emails(number): Processing limitforce(boolean, default: false): Execute even if policy disabled
{
"tool": "trigger_cleanup",
"arguments": {
"policy_id": "old_low_priority_emails",
"dry_run": true,
"max_emails": 500
}
}get_cleanup_status
Monitor cleanup automation system status.
Parameters: None
Returns: System status, active jobs, and health metrics
{
"tool": "get_cleanup_status"
}get_system_health
Get comprehensive system health and performance metrics.
Parameters: None
Returns: Performance metrics, storage usage, and system status
{
"tool": "get_system_health"
}create_cleanup_policy
Create advanced cleanup policies with detailed criteria.
Parameters:
name(string, required): Policy nameenabled(boolean, default: true): Policy statuspriority(number, default: 50): Execution priority (0-100)criteria(object, required): Cleanup conditionsaction(object, required): Action to takesafety(object, required): Safety configurationschedule(object): Optional scheduling
{
"tool": "create_cleanup_policy",
"arguments": {
"name": "Aggressive Low Priority Cleanup",
"priority": 80,
"criteria": {
"age_days_min": 90,
"importance_level_max": "low",
"spam_score_min": 0.7
},
"action": {
"type": "delete"
},
"safety": {
"max_emails_per_run": 100,
"require_confirmation": false,
"dry_run_first": true
}
}
}update_cleanup_policy
Modify existing cleanup policy configuration.
Parameters:
policy_id(string, required): Policy to updateupdates(object, required): Changes to apply
{
"tool": "update_cleanup_policy",
"arguments": {
"policy_id": "policy_123",
"updates": {
"enabled": false,
"safety": { "max_emails_per_run": 50 }
}
}
}list_cleanup_policies
View all cleanup policies and their configurations.
Parameters:
active_only(boolean, default: false): Show only enabled policies
{
"tool": "list_cleanup_policies",
"arguments": {
"active_only": true
}
}delete_cleanup_policy
Remove a cleanup policy permanently.
Parameters:
policy_id(string, required): Policy to delete
{
"tool": "delete_cleanup_policy",
"arguments": {
"policy_id": "outdated_policy_456"
}
}create_cleanup_schedule
Schedule automatic cleanup policy execution.
Parameters:
name(string, required): Schedule nametype(string, required): Schedule type (daily|weekly|monthly|interval|cron)expression(string, required): Schedule expressionpolicy_id(string, required): Policy to scheduleenabled(boolean, default: true): Schedule status
{
"tool": "create_cleanup_schedule",
"arguments": {
"name": "Nightly Low Priority Cleanup",
"type": "daily",
"expression": "02:00",
"policy_id": "low_priority_policy",
"enabled": true
}
}update_cleanup_automation_config
Update global cleanup automation settings.
Parameters:
config(object, required): Configuration updates
{
"tool": "update_cleanup_automation_config",
"arguments": {
"config": {
"continuous_cleanup": {
"enabled": true,
"target_emails_per_minute": 10
}
}
}
}get_cleanup_metrics
Retrieve cleanup system analytics and performance data.
Parameters:
hours(number, default: 24): History window in hours
{
"tool": "get_cleanup_metrics",
"arguments": {
"hours": 168
}
}get_cleanup_recommendations
Get AI-powered cleanup policy recommendations.
Parameters: None
Returns: Recommended policies based on email analysis
{
"tool": "get_cleanup_recommendations"
}π Statistics & Analytics Tools
get_email_stats
Comprehensive email usage statistics and analytics.
Parameters:
group_by(string): Grouping method (year|category|label|all)year(number): Filter by specific year
Returns: Detailed statistics by categories, years, sizes, and storage
{
"tool": "get_email_stats",
"arguments": {
"group_by": "all"
}
}βοΈ Job Management Tools
list_jobs
View all background jobs with filtering options.
Parameters:
limit(number, default: 50): Maximum resultsoffset(number, default: 0): Skip first N jobsstatus(string): Filter by status (pending|running|completed|failed)job_type(string): Filter by job type
{
"tool": "list_jobs",
"arguments": {
"status": "running",
"limit": 25
}
}get_job_status
Get detailed status of a specific background job.
Parameters:
id(string, required): Job ID to query
Returns: Job details, progress, and results
{
"tool": "get_job_status",
"arguments": {
"id": "categorization_job_789"
}
}cancel_job
Cancel a running background job.
Parameters:
id(string, required): Job ID to cancel
{
"tool": "cancel_job",
"arguments": {
"id": "cleanup_job_101112"
}
}Example Workflows
Initial Setup
// 1. Authenticate
{
"tool": "authenticate"
}
// 2. Categorize all emails
{
"tool": "categorize_emails",
"arguments": {
"force_refresh": true
}
}
// 3. View statistics
{
"tool": "get_email_stats",
"arguments": {
"group_by": "all"
}
}Clean Up Old Emails
// 1. Search for old large emails
{
"tool": "search_emails",
"arguments": {
"year_range": { "end": 2022 },
"size_range": { "min": 5242880 }
}
}
// 2. Archive them
{
"tool": "archive_emails",
"arguments": {
"year": 2022,
"size_threshold": 5242880,
"method": "export",
"export_format": "mbox"
}
}Automated Cleanup Setup
// 1. Start cleanup automation [TODO]
{
"tool": "start_cleanup_automation",
"arguments": {
"policies": ["old_emails", "large_attachments"],
"schedule": "daily"
}
}
// 2. Monitor cleanup status
{
"tool": "get_cleanup_status"
}Development
Project Structure
gmail-mcp-server/
βββ src/
β βββ auth/ # Authentication management
β βββ cache/ # Caching layer
β βββ categorization/ # Email categorization engine
β βββ cleanup/ # Cleanup automation
β βββ database/ # SQLite database management
β βββ delete/ # Email deletion logic
β βββ email/ # Email fetching and processing
β βββ search/ # Search functionality
β βββ archive/ # Archive management
β βββ tools/ # MCP tool definitions
β βββ types/ # TypeScript type definitions
β βββ utils/ # Utility functions
βββ build/ # Compiled JavaScript
βββ data/ # Local storage
βββ logs/ # Application logs
βββ archives/ # Email archivesRunning in Development
npm run watch # Watch mode for TypeScript
npm run dev # Run with tsx (hot reload)Testing with MCP Inspector
npm run inspectorTesting
The project includes comprehensive test suites to ensure reliability and correctness of all features.
Running Tests
# Run all tests
npm test
# Run with coverage
npm test -- --coverage
# Run specific test suite
npm test -- --testPathPattern=deleteIntegration Tests
Delete Email Tests
The delete functionality has extensive integration tests covering all scenarios:
# Run delete integration tests with the dedicated runner
node scripts/test-delete-integration.js
# With coverage report
node scripts/test-delete-integration.js --coverage
# Run specific test scenarios
node scripts/test-delete-integration.js --filter "delete by category"For detailed information about delete email testing, see Delete Email Testing Documentation.
Test Structure
tests/
βββ unit/ # Unit tests for individual components
βββ integration/ # Integration tests for complete features
β βββ delete/ # Delete email integration tests
βββ fixtures/ # Shared test data
βββ setup.ts # Test environment setupWriting Tests
Follow the existing test patterns
Use descriptive test names
Mock external dependencies
Test both success and error cases
Maintain test coverage above 80%
Security
OAuth2 tokens are encrypted at rest
All bulk operations require confirmation
Audit logging for all operations
Rate limiting implemented for Gmail API
Access pattern tracking for security monitoring
Troubleshooting
Authentication Issues
Ensure credentials.json is in the correct location
Check that Gmail API is enabled in GCP
Verify redirect URI matches your configuration
Performance
First categorization may take time for large mailboxes
Use pagination for large result sets
Enable caching in production
License
MIT
Contributing
Contributions are welcome! Please read our contributing guidelines before submitting PRs.
ποΈ Architecture Overview
The Gmail MCP Server follows a modular, layered architecture designed for scalability, maintainability, and extensibility.
Core Architecture
graph TB
subgraph "MCP Server Layer"
MCP[MCP Server] --> TR[Tool Registry]
TR --> AUTH[Auth Tools]
TR --> EMAIL[Email Tools]
TR --> SEARCH[Search Tools]
TR --> ARCHIVE[Archive Tools]
TR --> DELETE[Delete Tools]
TR --> JOB[Job Tools]
end
subgraph "Business Logic Layer"
AUTH --> AM[Auth Manager]
EMAIL --> EF[Email Fetcher]
EMAIL --> CE[Categorization Engine]
SEARCH --> SE[Search Engine]
ARCHIVE --> ARM[Archive Manager]
DELETE --> DM[Delete Manager]
JOB --> JS[Job Status Store]
end
subgraph "Data Layer"
AM --> DB[(SQLite Database)]
CE --> DB
SE --> DB
ARM --> DB
DM --> DB
JS --> DB
EF --> CACHE[Cache Manager]
end
subgraph "External Services"
AM --> OAUTH[Google OAuth2]
EF --> GMAIL[Gmail API]
ARM --> CLOUD[Cloud Storage]
endProject Structure
gmail-mcp-server/
βββ π src/
β βββ π auth/ # OAuth2 authentication & token management
β β βββ AuthManager.ts # Core authentication logic
β βββ π§ email/ # Email processing & fetching
β β βββ EmailFetcher.ts # Gmail API integration
β βββ π§ categorization/ # AI-powered email categorization
β β βββ CategorizationEngine.ts # Main categorization logic
β β βββ CategorizationWorker.ts # Background processing
β β βββ analyzers/ # Specialized analyzers
β β βββ ImportanceAnalyzer.ts
β β βββ DateSizeAnalyzer.ts
β β βββ LabelClassifier.ts
β βββ π search/ # Advanced search functionality
β β βββ SearchEngine.ts # Multi-criteria search
β βββ π archive/ # Email archiving & export
β β βββ ArchiveManager.ts # Archive operations
β βββ ποΈ delete/ # Safe email deletion
β β βββ DeleteManager.ts # Deletion with safety checks
β βββ π§Ή cleanup/ # Automated cleanup system
β β βββ CleanupAutomationEngine.ts
β β βββ CleanupPolicyEngine.ts
β β βββ StalenessScorer.ts
β β βββ SystemHealthMonitor.ts
β βββ π οΈ tools/ # MCP tool definitions
β β βββ ToolRegistry.ts # Tool registration system
β β βββ definitions/ # Tool definitions by category
β β βββ base/ # Tool builder utilities
β βββ πΎ database/ # Data persistence
β β βββ DatabaseManager.ts # SQLite management
β β βββ JobStatusStore.ts # Job tracking
β βββ β‘ cache/ # Performance caching
β β βββ CacheManager.ts # In-memory & persistent cache
β βββ π types/ # TypeScript definitions
β βββ index.ts # Comprehensive type system
βββ π tests/ # Comprehensive test suite
β βββ unit/ # Unit tests
β βββ integration/ # Integration tests
β βββ performance/ # Performance tests
βββ π docs/ # Documentation
βββ π scripts/ # Utility scripts
βββ π examples/ # Usage examplesKey Design Patterns
π§ Modular Architecture: Each component has a single responsibility
π Factory Pattern: Tool creation and configuration management
π¦ Repository Pattern: Data access abstraction
π Observer Pattern: Event-driven cleanup automation
π‘οΈ Strategy Pattern: Multiple categorization algorithms
β‘ Caching Strategy: Multi-level caching for performance
Data Flow
Authentication: OAuth2 flow with secure token storage
Email Fetching: Batch processing with Gmail API rate limiting
Categorization: Multi-analyzer pipeline with ML-like scoring
Search: Indexed search with complex filter combinations
Operations: Safe execution with dry-run and confirmation steps
π§ Development & Contributing
Development Setup
# Clone and setup
git clone <repository-url>
cd gmail-mcp-server
npm install
# Development mode
npm run dev # Hot reload with tsx
npm run watch # TypeScript watch mode
# Testing
npm test # Run all tests
npm run test:watch # Watch mode testing
npm run inspector # MCP Inspector for testing toolsDevelopment Workflow
π Feature Development
# Create feature branch git checkout -b feature/new-tool-name # Make changes # Add tests # Update documentation # Test thoroughly npm test npm run buildπ§ͺ Testing Strategy
Unit Tests: Individual component testing
Integration Tests: End-to-end workflow testing
Performance Tests: Load and stress testing
Manual Testing: MCP Inspector validation
π Documentation
Update README.md for new tools
Add JSDoc comments for public APIs
Include usage examples
Update architecture diagrams
Adding New MCP Tools
Create Tool Definition
// src/tools/definitions/my-category.tools.ts export const myToolConfigs: ToolConfig[] = [ { name: 'my_new_tool', description: 'Description of what the tool does', category: 'my_category', parameters: { required_param: ParameterTypes.string('Required parameter'), optional_param: ParameterTypes.boolean('Optional parameter', false) }, required: ['required_param'] } ];Implement Tool Handler
// src/tools/handlers/my-tool.handler.ts export async function handleMyNewTool(args: MyToolArgs): Promise<MyToolResult> { // Implementation }Register Tool
// src/tools/definitions/index.ts import { myToolConfigs } from './my-category.tools.js'; export function registerAllTools() { myToolConfigs.forEach(config => { toolRegistry.registerTool(ToolBuilder.fromConfig(config), config.category); }); }Add Tests
// tests/unit/tools/my-tool.test.ts describe('my_new_tool', () => { it('should handle valid input', async () => { // Test implementation }); });
Code Quality Standards
π TypeScript: Strict type checking with comprehensive interfaces
π ESLint: Code style and quality enforcement
π― Testing: >80% test coverage requirement
π Documentation: JSDoc for all public APIs
π Security: Input validation and sanitization
β‘ Performance: Efficient algorithms and caching
Architecture Guidelines
ποΈ Separation of Concerns: Each module has a single responsibility
π Dependency Injection: Loose coupling between components
π Scalability: Designed for large email datasets
π‘οΈ Error Handling: Comprehensive error handling and logging
π Async Operations: Non-blocking I/O with proper resource cleanup
Contributing Guidelines
π― Issues & Feature Requests
Use issue templates
Provide detailed descriptions
Include use cases and examples
π» Pull Requests
Follow PR template
Include tests and documentation
Ensure CI passes
Request reviews
π Code Review Checklist
β Tests pass and coverage maintained
β Documentation updated
β Type safety maintained
β Security considerations addressed
β Performance implications considered
Extension Points
The server is designed for extensibility:
π§ Custom Tools: Add domain-specific tools
π§ Analyzers: Implement custom categorization algorithms
π Exporters: Add new export formats
π Search Providers: Integrate external search engines
βοΈ Storage Backends: Add cloud storage providers
π Example Workflows
π Initial Setup & Email Organization
// 1. Authenticate with Gmail
{
"tool": "authenticate"
}
// 2. Get initial statistics
{
"tool": "get_email_stats",
"arguments": {
"group_by": "all"
}
}
// 3. Categorize all emails (this may take time for large mailboxes)
{
"tool": "categorize_emails",
"arguments": {
"year": 2024,
"force_refresh": false
}
}
// 4. Review categorization results
{
"tool": "list_emails",
"arguments": {
"category": "high",
"limit": 20
}
}π§Ή Advanced Cleanup Workflow
// 1. Analyze old emails (dry run first)
{
"tool": "search_emails",
"arguments": {
"year_range": { "end": 2022 },
"size_range": { "min": 5242880 },
"category": "low"
}
}
// 2. Create archive rule for old large emails
{
"tool": "create_archive_rule",
"arguments": {
"name": "Old Large Low Priority",
"criteria": {
"category": "low",
"older_than_days": 365,
"size_greater_than": 5242880
},
"action": {
"method": "export",
"export_format": "mbox"
},
"schedule": "monthly"
}
}
// 3. Archive old emails (with dry run first)
{
"tool": "archive_emails",
"arguments": {
"year": 2022,
"category": "low",
"method": "export",
"export_format": "mbox",
"dry_run": true
}
}
// 4. Execute actual archival after reviewing dry run
{
"tool": "archive_emails",
"arguments": {
"year": 2022,
"category": "low",
"method": "export",
"export_format": "mbox",
"dry_run": false
}
}π€ Automated Cleanup Policy Setup
// 1. Create aggressive cleanup policy for spam
{
"tool": "create_cleanup_policy",
"arguments": {
"name": "Spam Cleanup",
"priority": 90,
"criteria": {
"age_days_min": 30,
"importance_level_max": "low",
"spam_score_min": 0.8
},
"action": {
"type": "delete"
},
"safety": {
"max_emails_per_run": 200,
"dry_run_first": true
}
}
}
// 2. Create moderate policy for old promotional emails
{
"tool": "create_cleanup_policy",
"arguments": {
"name": "Old Promotions Archive",
"priority": 50,
"criteria": {
"age_days_min": 90,
"importance_level_max": "low",
"promotional_score_min": 0.7
},
"action": {
"type": "archive",
"method": "gmail"
},
"safety": {
"max_emails_per_run": 100
}
}
}
// 3. Schedule nightly cleanup
{
"tool": "create_cleanup_schedule",
"arguments": {
"name": "Nightly Cleanup",
"type": "daily",
"expression": "02:00",
"policy_id": "spam_cleanup_policy_id"
}
}
// 4. Monitor cleanup status
{
"tool": "get_cleanup_status"
}π Advanced Search & Analysis
// 1. Save frequently used searches
{
"tool": "save_search",
"arguments": {
"name": "Large Recent Important",
"criteria": {
"category": "high",
"year_range": { "start": 2024 },
"size_range": { "min": 1048576 }
}
}
}
// 2. Search for specific patterns
{
"tool": "search_emails",
"arguments": {
"query": "invoice OR receipt OR payment",
"category": "high",
"year_range": { "start": 2023 },
"has_attachments": true
}
}
// 3. Export search results
{
"tool": "export_emails",
"arguments": {
"search_criteria": {
"query": "invoice OR receipt",
"year_range": { "start": 2023 }
},
"format": "csv",
"include_attachments": false
}
}π Analytics & Monitoring
// 1. Get comprehensive statistics
{
"tool": "get_email_stats",
"arguments": {
"group_by": "all"
}
}
// 2. Monitor system health
{
"tool": "get_system_health"
}
// 3. Get cleanup recommendations
{
"tool": "get_cleanup_recommendations"
}
// 4. View cleanup metrics
{
"tool": "get_cleanup_metrics",
"arguments": {
"hours": 168
}
}π Security & Safety
π‘οΈ Authentication & Authorization
OAuth2 Flow: Secure Google OAuth2 implementation
Token Encryption: All tokens encrypted at rest using AES-256
Scope Limitation: Minimal required Gmail API scopes
Token Rotation: Automatic token refresh and rotation
Session Management: Secure session handling with expiration
π Data Protection
Local Storage: Encrypted SQLite database for metadata
No Email Content Storage: Only metadata stored locally
Audit Logging: Comprehensive operation logging
Data Isolation: User data completely isolated
Secure Communication: HTTPS/TLS for all API communications
β οΈ Safety Mechanisms
Dry Run Mode: All destructive operations support preview mode
Confirmation Prompts: Multi-step confirmation for bulk operations
Safety Limits: Configurable maximum deletion/modification limits
Backup Integration: Automatic backup before major operations
Rollback Capability: Ability to restore from archives
π¨ Risk Mitigation
Rate Limiting: Gmail API rate limit compliance
Error Handling: Comprehensive error recovery
Validation: Input sanitization and validation
Monitoring: Real-time operation monitoring
Alerts: Automatic alerts for critical issues
π Security Best Practices
// Always use dry run first for destructive operations
{
"tool": "delete_emails",
"arguments": {
"category": "low",
"dry_run": true // β Always start with dry run
}
}
// Limit operations with max_count
{
"tool": "empty_trash",
"arguments": {
"max_count": 50, // β Safety limit
"dry_run": true
}
}
// Use specific criteria instead of broad deletions
{
"tool": "delete_emails",
"arguments": {
"year": 2022, // β Specific year
"category": "low", // β Specific category
"size_threshold": 10485760, // β Specific size
"max_count": 100, // β Safety limit
"dry_run": true
}
}β Troubleshooting
π Authentication Issues
Problem: Authentication failed or Invalid credentials
# Solutions:
1. Verify credentials.json location (project root)
2. Check Gmail API is enabled in Google Cloud Console
3. Verify OAuth2 redirect URI matches configuration
4. Clear cached tokens: rm -rf data/tokens/
5. Re-run authentication: authenticate toolProblem: Token expired errors
# Solutions:
1. Tokens auto-refresh, but if persistent:
2. Clear token cache: rm -rf data/tokens/
3. Re-authenticate: use authenticate tool
4. Check system clock is accurateπ§ Email Processing Issues
Problem: Categorization taking too long
# Solutions:
1. Use year-specific categorization:
{ "tool": "categorize_emails", "arguments": { "year": 2024 } }
2. Monitor progress:
{ "tool": "list_jobs", "arguments": { "status": "running" } }
3. Increase timeout in .env: CATEGORIZATION_TIMEOUT=300000Problem: Search results incomplete
# Solutions:
1. Check Gmail API quota limits
2. Increase search limit: "limit": 500
3. Use pagination: "offset": 0, "limit": 100
4. Clear search cache: restart serverποΈ Deletion & Cleanup Issues
Problem: Deletion failed or Cleanup stuck
# Solutions:
1. Always start with dry_run: true
2. Check job status: get_job_status
3. Cancel stuck jobs: cancel_job
4. Reduce max_count limits
5. Check Gmail API rate limitsProblem: Archives not restoring
# Solutions:
1. Check archive location exists
2. Verify archive format compatibility
3. Check available storage space
4. Use smaller batch sizesβ‘ Performance Issues
Problem: Slow search or categorization
# Solutions:
1. Enable caching: CACHE_ENABLED=true
2. Increase cache TTL: CACHE_TTL=7200
3. Use specific filters to reduce result sets
4. Consider database optimization: VACUUMProblem: High memory usage
# Solutions:
1. Reduce batch sizes in operations
2. Clear cache periodically
3. Restart server regularly for large operations
4. Monitor with: get_system_healthπ Database Issues
Problem: Database locked or SQLite errors
# Solutions:
1. Check for multiple server instances
2. Restart server to release locks
3. Check file permissions: data/ directory
4. Backup and recreate database if corruptedπ§ Development Issues
Problem: MCP Inspector not working
# Solutions:
1. Install inspector: npm install -g @modelcontextprotocol/inspector
2. Build project first: npm run build
3. Run inspector: npm run inspector
4. Check server logs for errorsProblem: TypeScript compilation errors
# Solutions:
1. Clear build cache: rm -rf build/
2. Reinstall dependencies: npm ci
3. Check TypeScript version: npx tsc --version
4. Update dependencies: npm updateπ Getting Help
π Documentation: Check
docs/directory for detailed guidesπ Issues: Create detailed issue reports on GitHub
π¬ Discussions: Join community discussions
π Debugging: Enable debug logging:
LOG_LEVEL=debug
π¨ Emergency Procedures
If you accidentally delete important emails:
Check Gmail Trash folder first
Use
restore_emailsif archivedCheck local database for metadata
Contact Gmail support for account recovery
If system is unresponsive:
Cancel all running jobs:
cancel_jobRestart server:
npm startCheck system health:
get_system_healthClear caches if needed:
rm -rf data/cache/
π License
MIT License - see LICENSE file for details.
π€ Contributing
We welcome contributions! Please see our Contributing Guidelines for details on:
π Bug reports and feature requests
π» Code contributions and pull requests
π Documentation improvements
π§ͺ Testing and quality assurance
π Community support and discussions
β Star this project if you find it useful!
To run the test suite efficiently, always set the environment variable NODE_ENV=test before running tests. This enables fast mode, which:
Skips artificial delays (e.g., between batches)
Reduces logging output for cleaner and faster test runs
Uses smaller data sets in most tests for speed (except explicit performance tests)
Example:
NODE_ENV=test npm testOr with jest directly:
NODE_ENV=test npx jestCI/CD:
Your CI pipeline should always set NODE_ENV=test to ensure the fastest possible test execution.