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
First Run
π¦ Installation
Method 1: Quick Setup (Recommended)
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.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:
For other MCP clients:
Environment Configuration
Key environment variables in .env:
π οΈ 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
π§ 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
get_email_details
Retrieve complete email content and metadata.
Parameters:
id(string, required): Gmail message ID
Returns: Full email object with headers, body, attachments
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
π 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
save_search
Save search criteria for quick reuse.
Parameters:
name(string, required): Name for saved searchcriteria(object, required): Search criteria to save
list_saved_searches
Retrieve all saved search queries.
Parameters: None
Returns: Array of saved searches with usage statistics
π 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
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
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)
list_archive_rules
View all configured archive rules and their status.
Parameters:
active_only(boolean, default: false): Show only enabled rules
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
ποΈ 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
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
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
get_cleanup_status
Monitor cleanup automation system status.
Parameters: None
Returns: System status, active jobs, and health metrics
get_system_health
Get comprehensive system health and performance metrics.
Parameters: None
Returns: Performance metrics, storage usage, and system status
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
update_cleanup_policy
Modify existing cleanup policy configuration.
Parameters:
policy_id(string, required): Policy to updateupdates(object, required): Changes to apply
list_cleanup_policies
View all cleanup policies and their configurations.
Parameters:
active_only(boolean, default: false): Show only enabled policies
delete_cleanup_policy
Remove a cleanup policy permanently.
Parameters:
policy_id(string, required): Policy to delete
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
update_cleanup_automation_config
Update global cleanup automation settings.
Parameters:
config(object, required): Configuration updates
get_cleanup_metrics
Retrieve cleanup system analytics and performance data.
Parameters:
hours(number, default: 24): History window in hours
get_cleanup_recommendations
Get AI-powered cleanup policy recommendations.
Parameters: None
Returns: Recommended policies based on email analysis
π 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
βοΈ 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
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
cancel_job
Cancel a running background job.
Parameters:
id(string, required): Job ID to cancel
Example Workflows
Initial Setup
Clean Up Old Emails
Automated Cleanup Setup
Development
Project Structure
Running in Development
Testing with MCP Inspector
Testing
The project includes comprehensive test suites to ensure reliability and correctness of all features.
Running Tests
Integration Tests
Delete Email Tests
The delete functionality has extensive integration tests covering all scenarios:
For detailed information about delete email testing, see Delete Email Testing Documentation.
Test Structure
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
Project Structure
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
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
π§Ή Advanced Cleanup Workflow
π€ Automated Cleanup Policy Setup
π Advanced Search & Analysis
π Analytics & Monitoring
π 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
β Troubleshooting
π Authentication Issues
Problem: Authentication failed or Invalid credentials
Problem: Token expired errors
π§ Email Processing Issues
Problem: Categorization taking too long
Problem: Search results incomplete
ποΈ Deletion & Cleanup Issues
Problem: Deletion failed or Cleanup stuck
Problem: Archives not restoring
β‘ Performance Issues
Problem: Slow search or categorization
Problem: High memory usage
π Database Issues
Problem: Database locked or SQLite errors
π§ Development Issues
Problem: MCP Inspector not working
Problem: TypeScript compilation errors
π 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:
Or with jest directly:
CI/CD:
Your CI pipeline should always set NODE_ENV=test to ensure the fastest possible test execution.