Gmail MCP Server
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.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kushal45/GmailMcpServer'
If you have feedback or need assistance with the MCP directory API, please join our Discord server