kushal45/GmailMcpServer
If you are the rightful owner of GmailMcpServer and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The Gmail MCP Server is a robust Model Context Protocol server designed to integrate seamlessly with the Gmail API, offering advanced email management capabilities.
authenticate
Initiates OAuth2 authentication flow with Gmail API.
list_emails
List emails with comprehensive filtering and pagination.
get_email_details
Retrieve complete email content and metadata.
categorize_emails
Analyze and categorize emails by importance using AI algorithms.
search_emails
Advanced multi-criteria email search with intelligent filtering.
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
- ๐ฆ Installation
- ๐ง Configuration
- ๐ ๏ธ MCP Tools Reference
- ๐๏ธ Architecture Overview
- ๐ง Development & Contributing
- ๐ Example Workflows
- ๐ Security & Safety
- โ Troubleshooting
๐ 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 build
First 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 build
The 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.json
to project root
-
Configure environment:
cp .env.example .env # Edit .env with your settings
-
Create directories:
mkdir -p data logs archives
-
Install 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.js
Environment 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 withstart
and/orend
yearsize_range
(object): Size range withmin
and/ormax
bytessender
(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 archives
Running in Development
npm run watch # Watch mode for TypeScript
npm run dev # Run with tsx (hot reload)
Testing with MCP Inspector
npm run inspector
Testing
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=delete
Integration 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 .
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 setup
Writing 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]
end
Project 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 examples
Key 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 tools
Development 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 tool
Problem: 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=300000
Problem: 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 limits
Problem: 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: VACUUM
Problem: 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 errors
Problem: 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 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_emails
if archived - Check local database for metadata
- Contact Gmail support for account recovery
If system is unresponsive:
- Cancel all running jobs:
cancel_job
- Restart server:
npm start
- Check system health:
get_system_health
- Clear caches if needed:
rm -rf data/cache/
๐ License
MIT License - see file for details.
๐ค Contributing
We welcome contributions! Please see our for details on:
- ๐ Bug reports and feature requests
- ๐ป Code contributions and pull requests
- ๐ Documentation improvements
- ๐งช Testing and quality assurance
- ๐ Community support and discussions
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 test
Or with jest
directly:
NODE_ENV=test npx jest
CI/CD:
Your CI pipeline should always set NODE_ENV=test
to ensure the fastest possible test execution.