Send Emails via SMTP
An MCP server that lets an AI assistant send emails via SMTP, with per-call or environment-based credentials and attachment support.
1.0.0Add to Favorites
Why it matters
Enable AI assistants to send emails programmatically via SMTP. Supports plain text, HTML, attachments, CC/BCC, and multiple recipients.
Outcomes
What it gets done
Send plain text and HTML emails with attachments.
Configure and send emails using Gmail, Outlook, or custom SMTP servers.
Test SMTP connection and email sending functionality.
Send emails to multiple recipients with CC and BCC.
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/vb-email-smtp | bash Capabilities
Tools your agent gets
Quick email sending using environment variable configuration with recipient, subject, and message text.
Send emails with full control including multiple recipients, CC/BCC, file attachments, and HTML formatting.
Verify email settings and SMTP connection before sending important messages.
Overview
Email SMTP MCP Server
Gives an AI assistant three SMTP tools - simple send, full custom send with attachments/CC/BCC, and connection testing - configurable via environment variables or per-call credentials for Gmail, Outlook, Yahoo, or iCloud. Use when an assistant needs to send email through an existing SMTP account, including attachments; per-call smtp_config makes it suitable for sending from multiple accounts without server reconfiguration.
What it does
Email MCP Server lets an AI assistant send email via SMTP through three tools. send_simple_email sends a quick text or HTML email, accepting an optional smtp_config override. send_custom_email gives full control - CC, BCC, and attachments - also accepting an optional smtp_config. test_smtp_connection verifies SMTP settings before actually sending anything, letting credentials be checked without generating a real email.
SMTP credentials can be supplied two ways. Environment variables set SMTP_HOST, SMTP_USER, SMTP_PASS, and SMTP_FROM as required fields, with SMTP_PORT (default 587) and SMTP_SECURE (default false, meaning STARTTLS rather than implicit SSL/TLS) as optional overrides - these can live in a .env file or be passed through the MCP client's env block. Alternatively, a smtp_config object can be passed directly in any individual tool call, specifying host, port, secure, username, password, and from_email; when supplied this way, environment variables are ignored entirely for that call, which allows sending through different SMTP accounts per request without reconfiguring the server.
When to use - and when NOT to
Use this when an AI assistant needs to send transactional or ad hoc email - notifications, reports, or messages with attachments - directly through a standard SMTP account rather than a dedicated email API service. Documented provider settings cover Gmail (smtp.gmail.com, requiring an app password with 2FA enabled), Outlook (smtp-mail.outlook.com, accepting a regular or app password), Yahoo (smtp.mail.yahoo.com, requiring an app password with 2FA), and iCloud (smtp.mail.me.com, requiring an app password with 2FA) - all four use port 587 with STARTTLS rather than implicit TLS. Because credentials can be supplied per call, it also fits scenarios needing to send from multiple accounts without restarting or reconfiguring the server between requests.
Capabilities
The server supports two transports: stdio for direct MCP client integration, and streamable HTTP on port 8000 for clients that connect over HTTP rather than spawning the process. It ships with a pytest test suite, runnable via uv run pytest.
How to install
Setup uses uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
cd email-mcp-server
uv sync --extra dev
After configuring SMTP credentials, the server runs via uv run python -m email_mcp_server.server for stdio, or with a --http flag for streamable HTTP. Client-specific setup is documented for Claude Code (via claude mcp add), and JSON-based configuration for Claude Desktop, Cursor, VS Code, Windsurf, and Zed, each with its own config file path and top-level key (mcpServers, servers, or context_servers depending on the client).
Who it's for
Developers and teams who want an AI assistant to send email through an existing SMTP account - Gmail, Outlook, Yahoo, iCloud, or a custom SMTP server - including support for attachments and CC/BCC, without integrating a separate transactional email API.
Source README
Email MCP Server
An MCP (Model Context Protocol) server that lets your AI assistant send emails via SMTP.
Features
send_simple_email- Send a quick email (text or HTML); accepts optionalsmtp_configsend_custom_email- Full control: CC/BCC, attachments; accepts optionalsmtp_configtest_smtp_connection- Verify your SMTP settings before sending; accepts optionalsmtp_config
Quick Start
# Install uv if you don't have it
curl -LsSf https://astral.sh/uv/install.sh | sh
cd email-mcp-server
uv sync --extra dev
Configure SMTP (see next section), then run:
# stdio transport (for MCP clients)
uv run python -m email_mcp_server.server
# Streamable HTTP transport (port 8000)
uv run python -m email_mcp_server.server --http
Run tests:
uv run pytest
SMTP Configuration
You can configure SMTP credentials in two ways - use one or both.
Option A: Environment variables
Copy the example and fill in your credentials:
cp env.example .env
# Required
SMTP_HOST=smtp.gmail.com
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password
SMTP_FROM=your-email@gmail.com
# Optional (defaults shown)
# SMTP_PORT=587
# SMTP_SECURE=false
Alternatively, pass them via the client's env block (see Client Configuration below).
Option B: Per-call payload
Pass smtp_config directly in any tool call - environment variables are ignored for that call:
{
"smtp_config": {
"host": "smtp.gmail.com",
"port": 587,
"secure": false,
"username": "your-email@gmail.com",
"password": "your-app-password",
"from_email": "your-email@gmail.com"
}
}
| Field | Type | Description |
|---|---|---|
host |
string | SMTP server hostname |
port |
integer | SMTP server port (usually 587) |
secure |
boolean | Use SSL/TLS (false for STARTTLS) |
username |
string | Auth username |
password |
string | Auth password |
from_email |
string | Sender email address |
Client Configuration
Claude Code
# stdio
claude mcp add email-server -- uv --directory /absolute/path/to/email-mcp-server run python -m email_mcp_server.server
# streamable HTTP (start the server first with --http)
claude mcp add --transport http email-server http://localhost:8000/mcp
JSON-based clients (Claude Desktop, Cursor, VS Code, Windsurf, Zed)
Use the generic example below and adjust the top-level key and config file path for your client:
{
"<top-level-key>": {
"email-server": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/email-mcp-server", "run", "python", "-m", "email_mcp_server.server"],
"env": {
"SMTP_HOST": "smtp.gmail.com",
"SMTP_PORT": "587",
"SMTP_SECURE": "false",
"SMTP_USER": "your-email@gmail.com",
"SMTP_FROM": "your-email@gmail.com",
"SMTP_PASS": "your-app-password"
}
}
}
}
| Client | Config file path | Top-level key | Notes |
|---|---|---|---|
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json |
mcpServers |
Windows: %APPDATA%\Claude\... |
| Cursor | ~/.cursor/mcp.json |
mcpServers |
Or .cursor/mcp.json (project) |
| VS Code | .vscode/mcp.json |
servers |
Add "type": "stdio" inside the server entry |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
mcpServers |
|
| Zed | ~/.config/zed/settings.json |
context_servers |
Streamable HTTP (any client)
Start the server with uv run python -m email_mcp_server.server --http, then:
| Client | Config |
|---|---|
| Claude Code | claude mcp add --transport http email-server http://localhost:8000/mcp |
| Claude Desktop | { "type": "http", "url": "http://localhost:8000/mcp" } |
| Cursor | { "url": "http://localhost:8000/mcp" } |
| VS Code | { "type": "http", "url": "http://localhost:8000/mcp" } |
| Windsurf | { "serverUrl": "http://localhost:8000/mcp" } |
| Zed | { "url": "http://localhost:8000/mcp" } |
Provider Settings
| Provider | Host | Notes |
|---|---|---|
| Gmail | smtp.gmail.com |
Requires app password with 2FA enabled |
| Outlook | smtp-mail.outlook.com |
Regular password or app password |
| Yahoo | smtp.mail.yahoo.com |
Requires app password with 2FA enabled |
| iCloud | smtp.mail.me.com |
Requires app password with 2FA enabled |
All providers use port 587 with SMTP_SECURE=false (STARTTLS).
FAQ
Common questions
Trust
How it checks out
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.