Skip to main content
Glama
sandraschi
by sandraschi

Email MCP Server

A full-featured email server for MCP clients. Send and receive mail through SMTP/IMAP, transactional APIs (SendGrid, Mailgun, Resend), local test servers (MailHog), and webhooks (Slack, Discord). Includes a web dashboard with AI-assisted compose, a throwaway SMTP lab, folder management, contact import, background mail watching, and creative AI workflows (love letters, complaints, ASCII art, SVG cards).

v0.4.1 -- 188 tests passing, 42 MCP tools, FastMCP 3.4+, dual transport (stdio + HTTP).


Quick Start

.\start.ps1

Opens the web dashboard at http://localhost:10812. Backend runs on port 10813.

Requirements: Python 3.12+, uv. Start configuring services from the Settings page.

For Claude Desktop setup, MCPB packaging, and manual configuration see docs/quickstart.md.

Related MCP server: io.github.p-w-4-z/inbox-mcp

Supported Email Systems

Type

Providers

Guide

Microsoft Graph

Personal Outlook/Hotmail (basic SMTP/IMAP auth disabled)

docs/outlook.md

SMTP/IMAP

Gmail, Outlook/M365, Yahoo, iCloud, ProtonMail

docs/gmail.md, docs/outlook.md, docs/protonmail.md

Transactional APIs

SendGrid, Mailgun, Resend, Amazon SES

docs/api-services.md

Local Testing

MailHog, Mailpit, MailCatcher, Inbucket

docs/local-testing.md

Webhooks

Slack, Discord, Telegram

docs/webhook-integrations.md

Documentation

Document

Contents

docs/quickstart.md

Installation, Claude Desktop setup, first email

docs/configuration.md

All env vars, mailing lists, dynamic config

docs/TOOLS.md

Full 39-tool reference with REST surface

docs/DEVELOPMENT.md

Architecture, commands, contribution patterns

docs/TROUBLESHOOTING.md

Symptom lookup, diagnostics endpoints

docs/safety-hardening.md

Prompt injection defense architecture

docs/mail-watcher.md

Background IMAP polling + webhook notifications

docs/robofang-integration.md

Integrate with robofang for TTS/light alerts

docs/gmail.md

Gmail app password setup

docs/outlook.md

Outlook/Hotmail — Graph API (OAuth) + SMTP/IMAP

docs/connectors.md

aiwatcher + robofang fleet event connectors

docs/protonmail.md

ProtonMail Bridge & direct access

docs/api-services.md

SendGrid, Mailgun, Resend, SES

docs/local-testing.md

MailHog, Mailpit for dev

docs/webhook-integrations.md

Slack, Discord, Telegram

Features

  • 42 MCP tools: send, receive, search, delete, move, copy, forward, mark-read, folder CRUD, manage email services, contacts, auto-respond, workflows, mail lab, fleet connectors

  • Web dashboard: full React SPA at localhost:10812

  • Microsoft Graph support: send/receive for personal Outlook/Hotmail via Graph REST API (OAuth device flow, public client ID — no Azure registration)

  • Folder treeview: expandable sidebar with unread badges + inline folder CRUD

  • AI assistant: natural language email commands (Ollama, OpenAI, Anthropic, Google)

  • AI Improve: rewrite email body with style/length/mood controls

  • AI Assist: describe a service in plain language, LLM fills the config form

  • Auto-Respond: rule-based + AI-powered auto-reply with spam detection and spoof mode

  • Bulk Send: paste email lists with rate limiting and anti-spam safeguards

  • Dual transport: stdio (Claude Desktop) + HTTP streamable (web)

  • Draft management: save/compose/send from the webapp

  • Toast notifications: live feedback for all actions

  • Prompt injection defense: two-layer sanitization (Unicode stripping + safety boundary wrapping)

  • Mail Lab: throwaway SMTP server for testing with AI-generated messages

  • Mail Watcher: background IMAP polling with webhook notifications for robofang/fleet-agent integration

  • Contact import: CSV, vCard, Google People API, Microsoft Graph API + curated lists (US Congress, EU, Austria)

  • Creative Workflows: 7 AI letter presets with ASCII art and SVG card output

  • Folder management: create, rename, delete IMAP folders from the webapp

  • Quick Setup: one-click Gmail/Outlook/Yahoo/iCloud/ProtonMail/Zoho/GMX/Fastmail with email+password

Web Dashboard

Page

Route

Purpose

Dashboard

/

KPI cards, recent activity, service health

Inbox

/inbox

Read, filter, delete, auto-refresh

Email Detail

/email

Full email with HTML body, reply/delete

Compose

/compose

Send with drafts, HTML toggle, AI Improve, AI subject, Expander, Bulk Send

Search

/search

Full-text IMAP search

AI Chat

/chat

Natural language email assistant with creative workflows

Mail Lab

/lab

Throwaway SMTP server, AI message generator, mail watcher

Contacts

/contacts

Import CSV/vCard/Google/Office 365, search, groups, curated lists

Auto-Reply

/auto-respond

Rule-based + AI auto-reply, spam detection, spoof mode, pending approval

Services

/services

Form-based add/remove/test with AI Assist presets

Tools

/tools

Execute MCP tools from the browser

Settings

/settings

AI provider config, email credentials

Help

/help

Tabbed documentation (6 tabs)

Tools

Tool

Description

send_email

Send via any service

check_inbox

Read IMAP inbox

fetch_email_detail

Get full email with body

search_emails

IMAP full-text search

delete_email

Remove email (IMAP)

move_email

Move between folders (COPY + DELETE)

copy_email

Copy to another folder, original stays

forward_email

Forward with optional comment

mark_email_read / mark_email_unread

Toggle read status

email_connector

Fleet events: aiwatcher ingest / robofang hook / status

email_status

Test connectivity

list_services

List configured services

configure_service / remove_service

Manage services

quick_setup

One-click Gmail/Outlook/Yahoo/iCloud

list_folders / create_folder / delete_folder / rename_folder

IMAP folder CRUD

email_help

Usage help and documentation

mailing_lists_catalog

List newsletter presets

mailing_list_latest

Fetch from a preset

suggest_email_subject

AI subject line (sampling)

email_agentic_assist

Multi-step email plan

add_contact / search_contacts

Contact management

start_watcher / stop_watcher / watcher_status

Background IMAP polling

run_workflow

Creative email generation

add_auto_rule / list_auto_rules / delete_auto_rule

Auto-respond rules

list_pending_replies / approve_reply / auto_respond_now

Pending reply management

Ports

Service

Port

Web dashboard frontend

10812

Backend API + MCP HTTP

10813

Native Desktop App (Tauri 2.0)

A standalone Windows desktop app is available, bundling the webapp + Python backend into a single installer (~15 MB).

# Build everything in one command:
just build-native

# Installer lands at:
# native/target/release/bundle/nsis/Email MCP_0.1.0_x64-setup.exe

Requires Rust, Node.js 20+, and Visual Studio Build Tools (for C++ compilation). The backend is compiled via PyInstaller and bundled as a Tauri sidecar -- no Python runtime needed.

Development

# Install all dependencies
uv sync --extra test --extra dev

# Start the web dashboard
.\start.ps1

# Run all backend tests
.venv\Scripts\pytest.exe tests -q

# Run Playwright e2e tests
cd webapp && npx playwright test && cd ..

# Full test suite
.venv\Scripts\pytest.exe tests -q && cd webapp && npx playwright test && cd ..

# Build MCPB package
uv run python build_mcpb.py

# Lint
uv run ruff check src

See docs/quickstart.md for full setup guide.

License

MIT

Available Tools

10 tools
check_inboxA

Check inbox via specified email service.

Retrieves emails from the specified service and folder. Supports IMAP-based services, local testing services with web APIs, and service-specific inbox checking.

Args: service: Email service to check. Options: - "default": Default IMAP service (from env vars) - "mailhog": Local MailHog testing service - "mailpit": Local Mailpit testing service - Custom service names that support inbox checking folder: Mail folder name to check. Default: "INBOX". Common folders: - "INBOX": Main inbox folder - "Sent": Sent items folder - "Drafts": Draft messages folder - "Trash": Deleted messages folder Folder names are case-sensitive and provider-specific. limit: Maximum number of emails to return. Default: 10. unread_only: If True, only returns unread emails. Default: False. from_contains: Optional case-insensitive substring filter on From (IMAP scans recent mail). subject_contains: Optional case-insensitive substring filter on Subject.

Returns: Dictionary with service-specific results: { "success": bool, # True if inbox check succeeded "emails": [ # List of email dictionaries { "id": str, # Message ID "subject": str, # Email subject "from": str, # Sender address "date": str, # Email date "read": bool # Read status } ], "count": int, # Number of emails returned "service": str, # Service used "folder": str, # Folder checked "error": str # Error message if success is False }

Examples: # Check default IMAP inbox check_inbox() # Returns: {"success": True, "emails": [...], "count": 10, "service": "default"}

# Check MailHog testing inbox
check_inbox(service="mailhog", limit=20)
# Returns emails from local testing service

# Check unread emails only
check_inbox(unread_only=True, limit=5)

Notes: - Not all services support inbox checking (API/webhook services typically don't) - Local testing services provide web UIs for viewing emails - IMAP services support standard folder names - Results are sorted with most recent first

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceNodefault
folderNoINBOX
limitNo
unread_onlyNo
from_containsNo
subject_containsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite no annotations, the description fully explains the return format, sorting order (most recent first), and limitations (e.g., non-supporting services). It does not cover authentication or rate limits, but given the tool's simplicity, the disclosure is substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat lengthy but well-structured with clear sections (Args, Returns, Examples, Notes). The opening sentence is direct, and each component serves a purpose. Minor redundancy could be trimmed, but overall it's efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (described in detail), 6 parameters, and zero annotations, the description completely covers usage, behavior, and return values. Examples and notes further enrich completeness, leaving no critical gaps for agent invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 6 parameters are thoroughly described with valid options, defaults, and behavior (e.g., case-insensitive filters for from_contains). Since schema description coverage is 0%, the description carries the full burden and excels, adding meaning far beyond the bare schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The tool description explicitly states 'Check inbox via specified email service' and details the retrieval of emails from a service and folder. It distinguishes itself from sibling tools like send_email and email_help by focusing solely on reading emails, with no overlap in functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear parameter options (services, folders) with defaults and examples. It notes that not all services support inbox checking, offering guidance on when the tool may not be applicable. However, it does not explicitly compare with alternatives like email_status or suggest_email_subject.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_serviceA

Configure a new email service dynamically.

Adds a new email service configuration at runtime. The service will be available for sending emails and inbox checking immediately.

Args: name: Unique name for the service (e.g., "my-sendgrid", "dev-mailhog") type: Service type - "smtp", "api", "local", or "webhook" config: Service-specific configuration dictionary enabled: Whether the service should be enabled (default: True)

Returns: Dictionary with configuration result: { "success": bool, "service": str, # Service name "type": str, # Service type "message": str # Success/error message }

Examples: # Configure SendGrid API service configure_service( name="my-sendgrid", type="api", config={ "api_key": "your-sendgrid-key", "api_url": "https://api.sendgrid.com/v3/mail/send", "from_email": "noreply@yourdomain.com", "service_type": "sendgrid" } )

# Configure local MailHog for testing
configure_service(
    name="local-testing",
    type="local",
    config={
        "smtp_server": "localhost",
        "smtp_port": 1025,
        "http_url": "http://localhost:8025",
        "service_type": "mailhog"
    }
)

Notes: - Service names must be unique - Configuration is stored in memory (not persisted) - Use list_services() to see available services

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
typeYes
configYes
enabledNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that configuration is stored in memory (not persisted) and becomes available immediately. It also notes service name uniqueness. Missing details on error handling if name duplicates or if type is invalid, but overall good transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Args, Returns, Examples, Notes). It is front-loaded with the purpose. While slightly lengthy due to examples, the structure and clarity justify the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 params, nested objects, output schema), the description covers parameters, return format, examples, and important notes. It mentions the output schema structure. Missing validation details for 'type' values (e.g., accepted strings) but examples cover common ones.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage. The description provides detailed parameter explanations in Args (name, type, config, enabled) and includes comprehensive examples. This adds substantial meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Configure a new email service dynamically.' with a specific verb and resource. It distinguishes from sibling tools like list_services, send_email, etc., by focusing on service configuration rather than usage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (to add a new email service) and provides notes on uniqueness and persistence. It references list_services() to see available services, implicitly suggesting when not to add a duplicate. However, it lacks explicit alternatives for modifying existing services.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

email_agentic_assistB

Plan a short multi-step email workflow using sampling (agentic assist).

Uses the host LLM via sampling when available; optional Anthropic fallback if configured.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses use of host LLM sampling and optional Anthropic fallback, which is behavioral info. However, it omits what the tool returns (plan vs. execution) and side effects, given no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with main purpose. No wasted words, but could be slightly more informative without lengthening.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Lacks essential details: output format (despite output schema existence), prerequisites, and clarification that it only plans, not executes. Given complexity of LLM-assisted planning, coverage is insufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has one 'goal' parameter with 0% description coverage. The description implies goal is the workflow objective, but provides no format guidance or examples, requiring compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states it plans a multi-step email workflow using sampling, which is a specific verb+resource. It distinguishes from siblings like send_email or check_inbox, but could be more explicit about what constitutes a workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No clear guidance on when to use this tool versus alternatives like send_email or suggest_email_subject. The description only explains technical behavior (sampling/fallback), not usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

email_helpA

Get help and usage information for email MCP tools and services.

Returns comprehensive help information including available tools, supported services, usage examples, configuration requirements, and common use cases.

Returns: Dictionary with service and tool information: { "server": str, # Server name "version": str, # Server version "description": str, # Server description "supported_services": { # Available service types "smtp": str, # Description of SMTP services "api": str, # Description of API services "local": str, # Description of local services "webhook": str # Description of webhook services }, "tools": [...], # List of available tools "examples": [...], # Usage examples "notes": [...] # Important notes and tips }

Examples: # Get comprehensive help email_help() # Returns full documentation for all services and tools

Notes: - Use list_services() to see currently configured services - Use email_status() to test service connectivity - Use configure_service() to add new services dynamically

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It describes the return structure and includes examples and notes, which gives good behavioral insight. However, it doesn't explicitly state that the tool is read-only or safe, which would be helpful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized: starts with purpose, then detailed return schema, examples, and notes. Every sentence adds value, and it is front-loaded with the core function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and an output schema provided in the description, the tool is fully explained. The description covers what it returns and provides usage context, making it complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description adds meaning by detailing the output structure, which goes beyond the empty input schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get help and usage information') and specific resource ('email MCP tools and services'). It distinguishes from sibling tools like list_services and email_status by noting they have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides context on when to use this tool (to get help) and mentions related tools (list_services, email_status, configure_service) for other tasks. However, it does not explicitly state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

email_statusA

Get email service status and test connectivity.

Tests connectivity for specified service or all configured services. Verifies that credentials are correct and services are reachable.

Args: service: Specific service to test, or None for all services.

Returns: Dictionary with service status information: { "server": str, # Server name "version": str, # Server version "services": { # Service-specific status "service_name": { "configured": bool, "connected": bool, "error": str, # Error message if connection failed "type": str # Service type (smtp, api, local, webhook) } }, "total_services": int, "configured_services": int, "connected_services": int }

Examples: # Check all services email_status() # Returns status for all configured services

# Check specific service
email_status(service="sendgrid")
# Returns status only for SendGrid service

Notes: - Tests actual connectivity, not just configuration presence - Connection tests are quick (timeout after 5-10 seconds) - API keys and passwords are not exposed in results

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully carries the burden of behavioral disclosure. It reveals that the tool tests actual connectivity, mentions timeout of 5-10 seconds, and states that API keys/passwords are not exposed. This provides complete transparency for a read-only diagnostic tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections: overall description, Args, Returns, Examples, Notes. Every sentence adds value, and the length is appropriate for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is fully complete given the presence of an output schema. It includes the return structure, notes on behavior, and usage examples. No gaps remain for the agent to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description thoroughly explains the single 'service' parameter: 'Specific service to test, or None for all services,' with examples. This adds significant meaning beyond the schema's type definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get email service status and test connectivity,' using specific verbs and resources. It distinguishes itself from sibling tools like check_inbox and list_services by emphasizing actual connectivity testing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance via Args and Examples, showing how to check all services or a specific service. It notes that it tests actual connectivity, not just configuration presence, which helps differentiate from list_services. However, it does not explicitly state when not to use or compare with siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_servicesA

List all configured email services.

Returns information about all available email services, their types, and configuration status.

Returns: Dictionary with service information: { "services": { "service_name": { "type": str, # Service type "enabled": bool, # Whether service is enabled "configured": bool, # Whether properly configured "description": str # Human-readable description } }, "count": int, # Total number of services "enabled_count": int, # Number of enabled services "types": [str] # List of available service types }

Examples: # List all services list_services() # Returns: { # "services": { # "default": {"type": "smtp", "enabled": true, "configured": true, "description": "Default SMTP/IMAP service"}, # "sendgrid": {"type": "api", "enabled": true, "configured": true, "description": "SendGrid transactional email"} # }, # "count": 2, # "enabled_count": 2, # "types": ["smtp", "api", "local", "webhook"] # }

Notes: - Shows both automatically configured and manually added services - Configuration status indicates if required credentials are available - Use email_status() to test actual connectivity

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully covers behavior: it details the return structure, includes examples, and explains that the tool shows both automatically configured and manually added services and that configuration status indicates credential availability.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections but is somewhat lengthy due to detailed output schema and examples. It is clear and front-loaded, but could be slightly more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete: it explains the tool's purpose, behavior, output format, and relationship to siblings. With zero parameters and no missing context, it fully covers what an agent needs to know.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters; the schema coverage is 100% and the description does not need to add parameter semantics. Baseline of 4 is appropriate for zero parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'List all configured email services' with a specific verb and resource. It clearly differentiates from the sibling tool email_status by noting that email_status tests actual connectivity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool vs alternatives, including 'Use email_status() to test actual connectivity.' It also notes what the tool shows and omits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mailing_list_latestA

MAILING_LIST_LATEST — Fetch newest messages for a preset id (see mailing_lists_catalog).

Loads folder/service/filters from EMAIL_MCP_MAILING_LISTS. Typical use: newsletter drops in a dedicated IMAP folder (Alpha Signal, etc.). Optional limit/unread_only override entry defaults.

Args: list_id: Preset id from catalog (e.g. alphasignal). limit: Override max messages (default: from preset, usually 5). unread_only: Override UNSEEN-only (default: from preset, usually True for newest drop).

Returns: Same shape as check_inbox plus list_id and preset fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
limitNo
unread_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It explains that it loads from EMAIL_MCP_MAILING_LISTS and allows overrides, but does not disclose whether the operation is read-only or has side effects (e.g., marking messages as read). The return shape is mentioned but not detailed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a title line, usage context, explicit Args section, and Returns note. It is concise, front-loaded with purpose, and every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, parameters, and return shape (referencing check_inbox). However, it omits error conditions, prerequisites beyond the catalog, and behavior when limit/unread_only are null. The existence of an output schema reduces the burden, but some gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema coverage, the description's Args section fully explains each parameter: list_id (preset id from catalog), limit (override max messages with default), and unread_only (override UNSEEN-only). This adds significant meaning beyond the schema's type-only definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Fetch newest messages for a preset id', which is specific and distinct from sibling tools like check_inbox and mailing_lists_catalog. The verb 'Fetch' and resource 'newest messages' are precise.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context on typical use (newsletter drops in a dedicated IMAP folder) and references the catalog for preset ids, but does not explicitly state when not to use this tool versus alternatives like check_inbox. No exclusion criteria or alternative tools are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mailing_lists_catalogA

MAILING_LISTS_CATALOG — List named mailing-list presets from EMAIL_MCP_MAILING_LISTS (JSON).

Configure labels/folders once (e.g. Gmail filter → IMAP folder), then use mailing_list_latest(id).

Returns: success, entries[] with id, service, folder, limit, unread_only, from_contains, subject_contains; or error if unset/invalid JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the behavior: it reads from a JSON configuration, lists presets, and returns specific fields or an error if unset/invalid. Since no annotations are provided, the description carries full burden, and it adequately explains the return structure and error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with each sentence adding value. It front-loads the purpose, then gives usage context, then outlines the return format. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and no annotations, the description is complete. It explains what the tool returns, how to use it (with reference to sibling tool), and potential errors. It fits well within the context of sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the input schema is an empty object. The description adds value by explaining the return fields and possible error, which is sufficient given no parameters need explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'List named mailing-list presets from EMAIL_MCP_MAILING_LISTS (JSON).' It uses a specific verb ('List') and resource ('mailing-list presets'), and distinguishes itself from the sibling tool 'mailing_list_latest' by mentioning it returns configuration that can be used with that tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides guidance on when to use this tool: 'Configure labels/folders once ... then use mailing_list_latest(id).' This implies the catalog should be used first to list presets before using the latest tool. However, it does not explicitly state when not to use it or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_emailA

Send an email via specified email service.

Sends an email using the specified email service. Supports SMTP, API-based services, local testing services, and webhook integrations. Automatically detects service capabilities and uses the appropriate sending method.

Args: to: Recipient email address(es). Can be: - Single address: "user@example.com" - Comma-separated: "user1@example.com, user2@example.com" - List: ["user1@example.com", "user2@example.com"] subject: Email subject line. Required. body: Plain text email body. Required. This serves as the fallback for email clients that don't support HTML. service: Email service to use. Options: - "default": Default SMTP/IMAP service (from env vars) - "sendgrid": SendGrid transactional email - "mailgun": Mailgun transactional email - "resend": Resend transactional email - "mailhog": Local MailHog testing service - "slack": Send to Slack webhook - "discord": Send to Discord webhook - Custom service names configured via EMAIL_SERVICES html: Optional HTML email body. If provided, the email will be sent as multipart/alternative with both text and HTML versions. Example: "TitleContent" cc: Optional CC (carbon copy) recipients. Same format as 'to'. bcc: Optional BCC (blind carbon copy) recipients. Same format as 'to'.

Returns: Dictionary with service-specific results: { "success": bool, # True if email sent successfully "status": str, # "sent" on success "service": str, # Service used "to": str, # Recipient address(es) "subject": str, # Email subject "error": str # Error message if success is False }

Examples: # Send via default SMTP service send_email( to="user@example.com", subject="Hello", body="This is a test email" )

# Send via SendGrid
send_email(
    to="user@example.com",
    subject="Welcome",
    body="Welcome to our service",
    service="sendgrid",
    html="<h1>Welcome!</h1><p>Thanks for joining.</p>"
)

# Send to Slack webhook
send_email(
    to="general",
    subject="Alert",
    body="System alert message",
    service="slack"
)

Notes: - Service availability depends on configuration - API services may have different rate limits and features - Local testing services don't send real emails - Webhook services convert emails to chat messages

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
subjectYes
bodyYes
serviceNodefault
htmlNo
ccNo
bccNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite no annotations, the description fully discloses behavior: supports multiple services, automatic detection, multipart emails, return format with success/error, and notes on service limitations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with Args, Returns, Examples, and Notes sections. It front-loads the main purpose and is appropriately detailed for a complex tool, though slightly verbose. Every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, 3 required, no annotations, and an output schema, the description covers all aspects: parameter details, return format, examples, and notes. It fully equips an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds extensive meaning beyond the schema's type/required fields: formats for email addresses, service options, HTML usage, and default values. It compensates for 0% schema description coverage with detailed parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Send an email via specified email service' and lists supported services. It distinguishes from sibling tools like check_inbox, configure_service, etc., by focusing on sending emails with various backends.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides detailed usage guidance with parameter formats, service options, and examples. It implicitly tells when to use different services (e.g., webhooks for chat). However, it lacks explicit 'when not to use' or alternatives for sibling tools, though the context makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_email_subjectA

Suggest 1–3 concise email subject lines for the given body (uses MCP sampling when available).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must disclose behavioral traits. It mentions that the tool uses MCP sampling when available, which is a key behavior. However, it does not state what happens when sampling is unavailable, nor does it clarify if the tool is read-only or has any side effects. The description is adequate but lacks full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with 14 words. It is front-loaded with the core action and concisely adds the sampling behavior. Every word contributes meaning without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one parameter, output schema exists), the description covers the key aspects: it suggests 1-3 subject lines and mentions sampling. The existence of an output schema reduces the need to describe return values. However, it could be improved by clarifying the expected input format (e.g., full email body).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, meaning the parameter 'body' is not described. The description says 'for the given body' but does not explain what constitutes a valid body (e.g., email content, plain text, length limits). This is insufficient compensation for the missing param descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to suggest 1–3 concise email subject lines for a given body. The verb 'suggest' and resource 'email subject lines' are specific, and it distinguishes itself from sibling tools like 'send_email' or 'check_inbox' by focusing on subject line generation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, conditions, or when not to use it. For example, it doesn't clarify if the tool is intended for drafting new emails or improving existing ones, nor does it compare with other email-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.8/5.0
Disambiguation4/5

Most tools have distinct purposes (send, receive, configure, status, help), but mailing_list_latest overlaps slightly with check_inbox as a specialized variant. Descriptions help differentiate.

Naming Consistency3/5

Uses snake_case consistently, but mixes verb-first (check_inbox, list_services) with noun-first (email_help, email_status) patterns. Also 'mailing_' prefix vs 'email_' adds inconsistency.

Tool Count5/5

10 tools cover essential email operations plus extras (help, subject suggestions, mailing list presets) without being overwhelming.

Completeness3/5

Core send/receive and service management are covered, but lacks email deletion, folder movement, and attachment support, which are common email tasks.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server for unified email management that supports both Gmail and IMAP accounts via a single interface. It enables users to search across multiple accounts, list, read, send, and archive emails with integrated health monitoring and secure authentication.
    1
  • A
    license
    A
    quality
    D
    maintenance
    Provider-agnostic email MCP server that connects any IMAP mailbox to AI assistants, enabling email management through natural language.
    8
    AGPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Cross-platform MCP server and CLI for email operations, including send, read, search, and contact management, compatible with Gmail, Outlook, Yahoo, and any IMAP/SMTP providers.
    32
    1
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables users to manage email accounts via IMAP/SMTP, including reading, searching, sending emails with attachments and calendar invites, all through natural language interactions with MCP-compatible clients.
    1
    4
    MIT

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/sandraschi/email-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server