Skip to content
Conduit

skill

awesome-imap-mcp

Batteries-included MCP server for email — local cache, operation queue with undo, web dashboard, OAuth2 sign-in, LLM analysis. Works with Gmail, Outlook, Yahoo, Zoho, Fastmail, ProtonMail, and any IMA

shahabmokhtari/awesome-imap-mcpcommunitylistedunreviewed

Set up

Skills are installed by placing their folder where your agent loads skills.

The download comes from github.com/shahabmokhtari/awesome-imap-mcp itself, not from our server, so what you get is exactly what its author published.

Install instructions come from the README

Skills do not use an MCP config. Follow the steps in the README below.

README

synced Oct 23, 2026

Awesome IMAP MCP

A batteries-included MCP server for email. Works with any IMAP provider (Gmail, Outlook, Fastmail, ProtonMail, Yahoo, Zoho, self-hosted, etc.).

Unlike every other email MCP server out there, this one has a local cache, an operation queue with undo, a web dashboard with setup wizard, OAuth2 sign-in, LLM-powered email analysis, and 44 MCP tools covering search, compose, organize, attachments, labels, duplicates, reports, and more.

Built with .NET 10 and MailKit for maximum performance and cross-platform support.

Why This Exists

Every existing IMAP MCP server hits the IMAP server on every single tool call. No caching, no queuing, no UI, no intelligence. This project fixes all of that.

Key Features

  • OAuth2 sign-in - one-click sign-in for Gmail, Outlook, and Yahoo via PKCE (no client secrets needed). App passwords also supported for all providers
  • Web dashboard with setup wizard - guided first-run setup, account management, message browsing with bulk operations, an analytics page (volume charts, top senders, label distribution), editable settings, sync monitoring, queue viewer, duplicate detection, and direct tool execution
  • Local SQLite cache with full-text search - instant search, no IMAP round-trips
  • IMAP IDLE + polling - real-time inbox sync, configurable per folder
  • Operation queue - all writes are queued with priority tiers, retry logic, and undo
  • Send with undo - emails are queued, not sent immediately. Cancel within a configurable window
  • LLM analysis - spam scoring, category labeling, priority detection, custom rules (via API, ACP, or in-context)
  • Bulk operations with preview - query emails by any criteria (including LLM scores), preview results, then execute
  • Mailbox reports - volume trends, top senders, category breakdown, spam analysis
  • Multi-account - first-class support for multiple email accounts
  • Thread reconstruction - groups messages into conversations from headers
  • Attachments - list, search, inspect, and download attachments across all accounts
  • Labels & keywords - configurable label vocabulary, local storage fallback for servers without keyword support (Yahoo, etc.)
  • Duplicate detection - cross-account duplicate detection with selective bulk deletion via queue
  • Provider quirk profiles - auto-adapts folder names, auth methods, and search capabilities per provider
  • Per-account connection throttling - configurable max IMAP connections per account (default 5)
  • Token budget awareness - configurable response sizes so you don't blow context windows
  • Email security - DOMPurify HTML sanitization, script stripping, remote resource blocking, default plain text view
  • Full observability - metrics, logs, and tracing (OpenTelemetry export optional)
  • HTTP+SSE transport - run as stdio (default) or HTTP server for remote MCP clients, or both
  • Multi-instance support - leader election via heartbeat coordination; primary/secondary proxy architecture
  • Port standby - multiple instances share a port gracefully; standby processes auto-take over when the primary exits
  • Single-file binaries - download one file per platform, no runtime dependencies
  • Multiple SQLite databases - cache.db, health.db, labels.db, metrics.db, logs.db with WAL mode

Installation

Option 1: Single Binary (no dependencies)

Download a self-contained binary for your platform — no .NET SDK required.

# One-liner install (Linux/macOS)
curl -fsSL https://raw.githubusercontent.com/shahabmokhtari/awesome-imap-mcp/main/install.sh | bash

Or download manually from the releases page:

PlatformBinary
Linux x64awesome-imap-mcp-linux-x64
Linux arm64awesome-imap-mcp-linux-arm64
macOS x64 (Intel)awesome-imap-mcp-osx-x64
macOS arm64 (Apple Silicon)awesome-imap-mcp-osx-arm64
Windows x64awesome-imap-mcp-win-x64.exe
Windows arm64awesome-imap-mcp-win-arm64.exe
# After downloading, make it executable and run
chmod +x awesome-imap-mcp-*
./awesome-imap-mcp-osx-arm64 --config ./config.json

Option 2: .NET Global Tool

Requires .NET 10 SDK.

dotnet tool install -g awesome-imap-mcp

Option 3: From Source

git clone https://github.com/shahabmokhtari/awesome-imap-mcp.git
cd awesome-imap-mcp
dotnet build

Option 4: Docker

docker build -t awesome-imap-mcp .
docker compose up -d

Quick Start

Option A: Use the Setup Wizard (recommended)

The easiest way to get started is with the dashboard's built-in setup wizard:

awesome-imap-mcp --dashboard --dashboard-auto-open

This opens the dashboard in your browser. The wizard walks you through:

  1. Optional PIN protection for the dashboard
  2. Adding your first email account (OAuth sign-in or app password)

Option B: Manual configuration

1. Create a configuration file

mkdir -p ~/.awesome-imap-mcp
cp config.example.json ~/.awesome-imap-mcp/config.json

Edit ~/.awesome-imap-mcp/config.json with your email account details.

2. Set up authentication

OAuth2 (Gmail, Outlook, Yahoo) — Use the dashboard wizard or the OAuth flow in the Accounts page. No manual token management needed.

App Password (all providers) — Reference environment variables in config using ${ENV_VAR} syntax:

{
  "password": "${ACCOUNT_PERSONAL_PASSWORD}"
}
export ACCOUNT_PERSONAL_PASSWORD="your-app-password"

3. Run the server

# With default config (~/.awesome-imap-mcp/config.json)
awesome-imap-mcp

# With dashboard enabled
awesome-imap-mcp --dashboard

# With a specific config file
awesome-imap-mcp --config ./config.json

# HTTP transport for multi-client setups
awesome-imap-mcp --transport both --dashboard

4. Run from source

dotnet run --project src/AwesomeImapMcp.McpServer -- --config ./config.example.json --dashboard

5. Run with Docker

docker run -v ./config.json:/app/config.json -v imap-cache:/data -p 3847:3847 awesome-imap-mcp

Adding to MCP Clients

Claude Code

claude mcp add awesome-imap-mcp -- awesome-imap-mcp

Or with dashboard and HTTP transport for multi-client use:

claude mcp add awesome-imap-mcp -- awesome-imap-mcp --transport both --dashboard

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "awesome-imap-mcp": {
      "command": "awesome-imap-mcp",
      "args": ["--config", "/path/to/config.json"]
    }
  }
}

Cursor

Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "awesome-imap-mcp": {
      "command": "awesome-imap-mcp",
      "args": ["--config", "/path/to/config.json"]
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "awesome-imap-mcp": {
      "command": "awesome-imap-mcp",
      "args": ["--config", "/path/to/config.json"]
    }
  }
}

HTTP+SSE (any client)

awesome-imap-mcp --transport http --port 3846

Connect your client to http://localhost:3846/sse.


CLI Arguments

ArgumentDescription
--config <path>Path to config file (default: ~/.awesome-imap-mcp/config.json)
--port <number>Override the HTTP+SSE transport port (default: 3846)
--dashboard-port <number>Override the web dashboard port (default: 3847)
--transport <mode>Override transport mode: stdio, http, or both
--dashboardEnable the web dashboard
--dashboard-auto-openEnable dashboard and auto-open it in the browser on first launch

CLI arguments take precedence over values in the config file. You can also set the config path via the AIMAP_CONFIG_PATH environment variable.

Port standby: If the HTTP or dashboard port is already in use (e.g., another instance is running), the server runs in standby mode and automatically takes over when the port is released. This means multiple MCP clients can each launch their own server process — the first one claims the HTTP port, and the others wait in standby. If the primary goes down, a standby instance takes over seamlessly.


MCP Tools (44)

Search & Read

ToolDescription
search_emailsFull-text search with advanced filters (from, to, subject, date range, folder). Searches local cache by default; set server_search=true for IMAP server search. Supports fetchBodies to auto-fetch bodies inline
list_emailsBrowse a folder sorted by date with pagination. For keyword search, use search_emails
get_messageGet a single message with full body, headers, and attachment list. Auto-fetches body from server if not cached
get_threadGet all messages in a conversation thread, ordered by date

Compose (all queued with undo)

ToolDescription
send_emailCompose and send a new email. Queued with configurable undo window. Returns pending_id
reply_toReply to an existing email. Supports reply_all. Original message automatically quoted
forwardForward an email to new recipients with optional preamble text

Organize (all queued with undo)

ToolDescription
delete_messagesDelete one or more messages by UID (moved to trash on most servers)
move_messagesMove messages between folders (e.g., INBOX to Archive)
mark_readMark messages as read
mark_unreadMark messages as unread
flag_messagesFlag or unflag messages (starred/important marker)
label_messagesAdd or remove a label (IMAP keyword) from messages

Attachments

ToolDescription
list_attachmentsList all attachments for a specific message
search_attachmentsSearch attachments across all messages with filters (filename, content type, date, size)
get_attachment_infoGet detailed information about a specific attachment
download_attachmentDownload an attachment from the IMAP server and save to disk

Folders

ToolDescription
list_foldersList all folders with message counts, unread counts, and sync status
get_folder_statsGet detailed statistics for a specific folder
create_folderCreate a new IMAP folder on the server (supports nested paths)

Labels (vocabulary management)

ToolDescription
list_labelsList the configured label vocabulary with descriptions and categories
add_labelAdd a new label to the vocabulary (must be a valid IMAP keyword)
update_labelUpdate a label's description or category
remove_labelRemove a label from the vocabulary (does not remove from messages)

LLM Analysis

ToolDescription
analyze_emailAnalyze a single email: summary, spam_score, category, priority, or custom prompt
analyze_folderBatch-analyze emails in a folder (respects daily token budget)
get_analysisRetrieve stored LLM analysis results, filtered by account or type
get_analysis_budgetCheck daily token usage and monthly cost against configured limits

Reports

ToolDescription
mailbox_reportPer-folder volume stats, attachment counts, and total storage used
top_sendersTop email senders ranked by message count
category_breakdownEmail category distribution from LLM analysis results

Batch Operations

ToolDescription
fetch_bodiesBatch-fetch message bodies for given UIDs (skips already-cached)
detect_duplicatesFind emails that exist in multiple IMAP accounts (cross-account deduplication)
delete_duplicatesDelete duplicate emails from a specific account, keeping copies in other accounts. Dry run by default

Account Management

ToolDescription
list_accountsList all configured email accounts with connection status
get_account_statusGet detailed status for an account (config, sync progress, folder counts)
add_account_imapAdd a new IMAP email account (password encrypted before storage)
add_account_oauthStart the OAuth2 flow for Gmail, Outlook, or Yahoo (requires dashboard)
start_dashboardGet the dashboard URL or status message

Sync

ToolDescription
sync_nowTrigger immediate IMAP sync for one folder or all folders
get_sync_statusGet real-time sync status for all folders (last sync time, message counts, state)

Queue Management

ToolDescription
confirm_sendConfirm a pending send operation for immediate execution
cancel_operationCancel a pending or confirmed operation before it executes
list_pendingList all pending and confirmed operations, optionally filtered by account

Web Dashboard

Enable with --dashboard flag or "dashboard_enabled": true in config. The dashboard runs on dashboard_port (default: 3847).

Setup Wizard

On first launch (no accounts configured), the dashboard shows a guided setup wizard:

  1. PIN Setup (optional) — protect the dashboard with a 4-6 digit PIN
  2. Add Account — select your provider, sign in with OAuth or enter an app password
  3. Done — server starts syncing immediately

Dashboard Pages

  • Overview — account count, sync status, queue summary, system stats
  • Messages — browse and search emails across all accounts and folders. Features include:
    • Advanced search operators: from:, to:, subject:, label:, has:attachments, before:, after:
    • Search result pagination (50 per page, Prev/Next)
    • Multi-select checkboxes with a bulk action bar (delete / move to trash / archive on selected messages)
    • "Delete all search results" with optional move to trash or archive (chunked into 50-UID batches under the hood)
    • Read/unread/delete actions on individual messages
    • Account + folder displayed in the message detail header (so cross-account search results are unambiguous)
    • View full message headers
    • Open messages in a new window
    • HTML email rendering with DOMPurify sanitization, script stripping, and remote image blocking
    • Default plain text view with HTML as an opt-in toggle
    • Label display with color coding
    • Body-cached indicator
    • Keyboard navigation
  • Analytics — visual mailbox insights and bulk cleanup tools:
    • Summary cards (total messages, accounts, attachments, storage)
    • Per-month volume chart (CSS bar chart with auto-scroll to most recent, hover dates)
    • Account breakdown (messages per account)
    • Label distribution (counts and percentages)
    • Top senders table with toggle for received/sent/all and time-window filter (last 3 / 6 / 12 / 24 months)
    • Per-row delete dialog with action toggle (Delete / Move to Trash / Move to Archive), chunked into 50-UID batches automatically
  • Accounts — add (IMAP/OAuth), edit settings (connection limits, sync config, queue settings), test connection, enable/disable, delete accounts. accounts.json is watched on disk and changes made by other processes are picked up automatically.
  • Duplicates — cross-account duplicate detection, selectable copies per duplicate group, bulk delete via queue, page-size selector
  • Queue — view pending operations with account names, confirm or cancel sends
  • Sync — per-folder real-time sync status, trigger manual syncs
  • Settings — edit all configuration in-browser. Changes saved to config.json automatically
  • Tools — direct MCP tool execution from the dashboard UI
  • Logs — live log viewer with level filtering

Dashboard Authentication

dashboard_auth valueBehavior
null (default)Open access — no authentication required
"pin"PIN protected — set a PIN on first access, required for all API calls

Configuration

Configuration is loaded from config.json. The default path is ~/.awesome-imap-mcp/config.json. Override with --config <path> or AIMAP_CONFIG_PATH env var.

All settings can also be edited from the dashboard's Settings page — changes are persisted to config.json automatically.

See config.example.json for a full example.

Server

{
  "server": {
    "transport": "stdio",
    "http_port": 3846,
    "dashboard_port": 3847,
    "dashboard_enabled": false,
    "dashboard_auth": null,
    "dashboard_auto_open": false,
    "log_level": "Information",
    "log_file": null
  }
}
FieldDefaultDescription
transport"stdio"MCP transport mode: "stdio", "http", or "both"
http_port3846Port for HTTP+SSE MCP transport (overridable via --port)
dashboard_port3847Port for the web dashboard (overridable via --dashboard-port)
dashboard_enabledfalseEnable the web dashboard
dashboard_authnullDashboard auth mode: "pin" (requires PIN) or null (open access)
dashboard_auto_openfalseAutomatically open dashboard in browser on first launch
log_level"Information"Minimum log level: Trace, Debug, Information, Warning, Error, Critical
log_filenullPath to a log file (in addition to stderr)

Accounts

{
  "accounts": [
    {
      "name": "my-gmail",
      "imap_host": "imap.gmail.com",
      "imap_port": 993,
      "smtp_host": "smtp.gmail.com",
      "smtp_port": 465,
      "smtp_use_ssl": true,
      "username": "user@example.com",
      "auth_type": "app_password",
      "password": "${ACCOUNT_PERSONAL_PASSWORD}",
      "provider": "gmail",
      "confirm_mode": "implicit",
      "undo_window_seconds": 10,
      "sync": {
        "max_connections": 5,
        "idle_folders": ["INBOX"],
        "poll_interval": 300,
        "max_messages_per_sync": 500,
        "folders": [
          { "path": "INBOX", "cache_window_days": 60 },
          { "path": "[Gmail]/Sent Mail", "cache_window_days": 14 }
        ]
      }
    }
  ]
}
FieldDefaultDescription
name-Unique name for this account (used in tool calls)
imap_host-IMAP server hostname
imap_port993IMAP server port
smtp_host-SMTP server hostname
smtp_port587SMTP server port
smtp_use_sslfalseUse SSL for SMTP connection
username-Email account username
auth_type"app_password"Auth method: "app_password" or "oauth2"
password-Password or ${ENV_VAR} reference (for app_password auth)
provider"generic"Provider profile: "gmail", "outlook", "fastmail", "protonmail", "yahoo", "zoho", "icloud", "generic"
confirm_mode"implicit"Send confirmation: "implicit" (auto-send after delay) or "explicit" (wait for confirm)
undo_window_seconds10Seconds before implicit sends execute

Per-Account Sync Settings

FieldDefaultDescription
sync.max_connections5Maximum concurrent IMAP connections for this account
sync.idle_folders["INBOX"]Folders to monitor with IMAP IDLE for real-time updates
sync.poll_interval300Seconds between poll-based syncs for non-IDLE folders
sync.max_messages_per_sync500Maximum messages to sync per cycle
sync.folders-Per-folder sync configuration with path and cache_window_days

Per-Account Queue Settings

FieldDefaultDescription
confirm_mode"implicit""implicit" auto-sends after undo window; "explicit" waits for confirm_send
undo_window_seconds10Seconds to wait before executing implicit sends

Authentication Methods

OAuth2 (recommended for Gmail, Outlook, Yahoo): Use the dashboard to sign in with your email provider. The server handles token exchange and automatic refresh via PKCE — no client secrets or manual token management needed. Built-in OAuth client IDs are provided for Gmail and Outlook.

App Password (all providers): Generate an app-specific password from your email provider and set it in the config. Required for providers that don't support OAuth (iCloud, Fastmail, Zoho, ProtonMail via Bridge).

Provider-Specific Setup

Gmail: OAuth sign-in via dashboard, or use an App Password. Set provider: "gmail".

Outlook/Hotmail/Live.com: OAuth sign-in via dashboard, or use an App Password. Set provider: "outlook".

Zoho: Use an App Password. Set provider: "zoho".

Yahoo: OAuth sign-in via dashboard, or use an App Password. Set provider: "yahoo".

Fastmail: Use an App Password. Set provider: "fastmail".

ProtonMail: Requires ProtonMail Bridge + app password. Set provider: "protonmail".

iCloud: Use an App-Specific Password. Set provider: "icloud".

OAuth Providers

Override or add OAuth client IDs for providers. Built-in client IDs are provided for Gmail and Outlook. You can override them or add your own providers:

{
  "oauth_providers": {
    "gmail": {
      "client_id": "your-google-client-id.apps.googleusercontent.com"
    },
    "outlook": {
      "client_id": "your-azure-app-client-id"
    },
    "custom_provider": {
      "client_id": "your-client-id",
      "client_secret": "your-client-secret",
      "auth_url": "https://provider.com/oauth/authorize",
      "token_url": "https://provider.com/oauth/token",
      "scopes": ["imap", "smtp"]
    }
  }
}
FieldDescription
client_idOAuth client ID (required)
client_secretOAuth client secret (optional, not needed for PKCE public clients)
auth_urlAuthorization endpoint (overrides built-in default)
token_urlToken exchange endpoint (overrides built-in default)
scopesOAuth scopes (overrides built-in default)

Cache

{
  "cache": {
    "db_path": "~/.awesome-imap-mcp/cache.db",
    "max_size_mb": 500,
    "default_window_days": 0,
    "max_body_age_days": 0,
    "imap_fallback_ttl_hours": 1
  }
}
FieldDefaultDescription
db_path"~/.awesome-imap-mcp/cache.db"Path to the SQLite database
max_size_mb500Maximum cache size in MB
default_window_days0Default number of days to cache (0 = unlimited)
max_body_age_days0Auto-evict message bodies older than N days (0 = keep forever)
imap_fallback_ttl_hours1Hours before a cache miss triggers IMAP fallback

Queue

{
  "queue": {
    "p0_flush_interval": 2,
    "p1_flush_interval": 30,
    "p2_flush_interval": 300,
    "send_undo_window": 10,
    "max_retries": 3
  }
}
FieldDefaultDescription
p0_flush_interval2Seconds between P0 (critical) queue flushes
p1_flush_interval30Seconds between P1 (normal) queue flushes
p2_flush_interval300Seconds between P2 (bulk) queue flushes
send_undo_window10Seconds before queued sends execute (undo window)
max_retries3Maximum retry attempts for failed operations

LLM Analysis

{
  "llm": {
    "enabled": false,
    "provider": "anthropic",
    "model": "claude-haiku-4-5-20251001",
    "api_key_env": "ANTHROPIC_API_KEY",
    "daily_token_budget": 1000000,
    "monthly_cost_limit": 5.00,
    "auto_analyze_new": false
  }
}
FieldDefaultDescription
enabledfalseEnable LLM-powered email analysis
provider"openai"LLM provider: "anthropic", "openai", "acp_claude", "acp_copilot", "in_context"
model"gpt-4o-mini"Model name for the chosen provider
api_key_env-Environment variable name containing the API key
daily_token_budget0Maximum tokens per day (0 = unlimited)
monthly_cost_limit0Maximum monthly cost in USD (0 = unlimited)
auto_analyze_newfalseAutomatically analyze newly synced emails

Labels

{
  "labels": {
    "allow_cli_edits": true,
    "items": [
      { "name": "Important", "description": "High-priority messages", "category": "Priority" },
      { "name": "Follow-Up", "description": "Needs a response", "category": "Status" }
    ]
  }
}
FieldDefaultDescription
allow_cli_editstrueAllow MCP tools to add/update/remove labels
items[]List of label definitions with name, description, and category

Labels are stored as IMAP keywords where supported. For providers without keyword support (e.g., Yahoo), labels are stored locally in labels.db.

Metrics

{
  "metrics": {
    "enabled": false,
    "port": 9090,
    "path": "/metrics",
    "internal_retention_days": 7,
    "otlp_endpoint": null,
    "otlp_protocol": "grpc",
    "export_interval_seconds": 15
  }
}
FieldDefaultDescription
enabledfalseEnable the Prometheus metrics endpoint
port9090Metrics endpoint port
path"/metrics"Metrics endpoint path
internal_retention_days7Days to retain internal metrics in SQLite
otlp_endpointnullOpenTelemetry collector endpoint
otlp_protocol"grpc"OTLP protocol: "grpc" or "http"
export_interval_seconds15Seconds between metric exports

Architecture

Claude / MCP Client
    |
    v
[MCP Server] -- stdio or HTTP+SSE
    |
    +-- SearchTools, ComposeTools, OrganizeTools, AttachmentTools, ...  (44 tools)
    |
    +-- [Core]
    |     +-- SQLite (cache.db, health.db, labels.db, metrics.db, logs.db) + FTS5
    |     +-- CredentialEncryptor
    |     +-- ProviderProfileRegistry
    |     +-- OAuth (PKCE token service, auto-refresh)
    |     +-- Leader election + heartbeat coordination
    |
    +-- [ImapClient]
    |     +-- MailKit IMAP/SMTP (password + OAuth2 SASL)
    |     +-- SyncManager (IDLE + polling)
    |     +-- Per-account connection throttling (configurable max_connections)
    |
    +-- [Queue]
    |     +-- QueueManager (P0/P1/P2 priorities)
    |     +-- Send/Delete/Move/Flag/Label executors
    |
    +-- [LLM]
    |     +-- API (OpenAI/Anthropic) / ACP (Claude, Copilot) / InContext
    |     +-- BudgetTracker (daily tokens + monthly cost)
    |
    +-- [Dashboard]
          +-- Kestrel + React SPA (Vite + TailwindCSS)
          +-- SignalR real-time updates
          +-- OAuth callback handler
          +-- Setup wizard
          +-- Email security (DOMPurify, script stripping, remote resource blocking)

Key Design Decisions

  • Cache is just a cache — all write operations go through the IMAP server via the operation queue. The SQLite database is a local cache only.
  • Messages are deduplicated across folders via the message_folders junction table. A message with copies in INBOX and Archive has one messages row and two message_folders rows.
  • Sync boundaries are derived from actual DB data (GetMaxUid/GetMinUid), not stored columns, ensuring consistency.
  • Queue-based writes — all CRUD operations (send, delete, move, flag, label) are enqueued with priority tiers (P0 critical, P1 normal, P2 bulk) and support undo/cancel before execution.

Claude Code Plugin

This repository includes a Claude Code plugin with skills for email management. The plugin teaches Claude how to effectively use the MCP tools.

Installation

Add this repository as a plugin source in Claude Code:

claude plugin add https://github.com/shahabmokhtari/awesome-imap-mcp

Or reference the plugin directory directly if you've cloned the repo:

claude plugin add /path/to/awesome-imap-mcp/plugin

Included Skills

SkillDescription
email-analysisAnalyze, categorize, and report on emails using LLM analysis and statistical tools
email-searchSearch emails with advanced filters — from, to, subject, date, labels, attachments
email-managementManage emails — send, reply, forward, delete, move, flag, organize, and bulk operations

Plugin Structure

plugin/
├── plugin.json              # Plugin manifest
└── skills/
    ├── email-analysis.md    # LLM analysis, labeling, reports workflow
    ├── email-search.md      # Advanced search operators and examples
    └── email-management.md  # CRUD operations, queue, sync, accounts

Usage Examples

Once the plugin is installed, Claude Code can use the skills automatically:

> Analyze my inbox and categorize the last 50 emails
  (uses email-analysis skill → analyze_folder + label_messages)

> Find all emails from boss@company.com with attachments since March
  (uses email-search skill → search_emails with from: and has:attachments)

> Delete all duplicate emails from my Yahoo account
  (uses email-management skill → detect_duplicates + delete_messages)

Documentation

Migrating from ultimate-imap-mcp

This project was renamed from ultimate-imap-mcp to awesome-imap-mcp. If you were using the old name:

  1. Move your data directory (one-line):
    mv ~/.ultimate-imap-mcp ~/.awesome-imap-mcp
    
    This preserves accounts.json, all SQLite caches (cache.db, health.db, labels.db, metrics.db, logs.db), and the logs/ folder.
  2. Rename environment variables: UIMAP_CONFIG_PATH → AIMAP_CONFIG_PATH, UIMAP_PASSPHRASE → AIMAP_PASSPHRASE.
  3. Update the binary name in any wrapper scripts: ultimate-imap-mcp → awesome-imap-mcp.
  4. Reinstall via dotnet tool install -g awesome-imap-mcp or curl -fsSL https://raw.githubusercontent.com/shahabmokhtari/awesome-imap-mcp/main/install.sh | bash.
  5. Update MCP client configs to point at the new command name.

The old GitHub URL github.com/shahabmokhtari/ultimate-imap-mcp redirects to the new one, but it's worth updating any pinned references.

License

MIT

↑↓ navigate openesc close