Skip to main content
Glama
wojkos

MCP Email Server with SendGrid

by wojkos

βœ‰οΈ MCP Email Server with SendGrid

A Model Context Protocol (MCP) server that provides email sending capabilities through SendGrid. This server enables AI applications like Claude Desktop, Langflow, and other MCP clients to send emails programmatically.

πŸš€ Features

  • πŸ“§ Basic Email Sending - Send text or HTML emails

  • 🎨 Template Support - Use SendGrid dynamic templates

  • πŸ“Ž File Attachments - Attach files to emails

  • πŸ‘₯ CC/BCC Support - Send copies to multiple recipients

  • 🐳 Docker Ready - Containerized deployment

  • πŸ”’ Secure - Environment-based configuration

πŸ“‹ Prerequisites

  • Python 3.10 or higher

  • SendGrid account and API key (Sign up here)

  • Verified sender email address in SendGrid

  • Docker (optional, for containerized deployment)

πŸ› οΈ Installation

Option 1: Local Python Setup

  1. Clone or navigate to the repository:

    cd d:\repos\mcp_mail
  2. Create and activate virtual environment:

    python -m venv venv
    .\venv\Scripts\activate  # Windows
  3. Install dependencies:

    pip install -e .
  4. Configure environment variables:

    copy .env.example .env

    Edit .env and add your credentials:

    SENDGRID_API_KEY=your_actual_sendgrid_api_key
    DEFAULT_FROM_EMAIL=your-verified-email@example.com
    DEFAULT_FROM_NAME=Your Name

Option 2: Docker Deployment

  1. Configure environment:

    copy .env.example .env
    # Edit .env with your credentials
  2. Build and run with Docker Compose:

    docker-compose up -d

    Or build manually:

    docker build -t mcp-email-server .
    docker run --env-file .env mcp-email-server

πŸ”§ Configuration

SendGrid Setup

  1. Create a SendGrid account at sendgrid.com

  2. Generate an API key:

    • Go to Settings β†’ API Keys

    • Click "Create API Key"

    • Select "Full Access" or "Restricted Access" with Mail Send permissions

    • Copy the API key (you'll only see it once!)

  3. Verify sender email:

    • Go to Settings β†’ Sender Authentication

    • Verify the email address you'll use as the sender

    • This is required by SendGrid to prevent spam

Environment Variables

Variable

Required

Description

SENDGRID_API_KEY

Yes

Your SendGrid API key

DEFAULT_FROM_EMAIL

Yes

Default sender email (must be verified in SendGrid)

DEFAULT_FROM_NAME

No

Default sender name displayed to recipients

πŸ“– Usage

Running the Server

Local:

python server.py

Docker:

docker-compose up

The server communicates via stdio (standard input/output) using the MCP protocol.

Available MCP Tools

1. send_email

Send a basic email with text or HTML content.

Parameters:

  • to_email (required): Recipient email address

  • subject (required): Email subject line

  • body (required): Email content (text or HTML)

  • from_email (optional): Sender email (uses DEFAULT_FROM_EMAIL if not provided)

  • from_name (optional): Sender name

  • cc_emails (optional): List of CC recipients

  • bcc_emails (optional): List of BCC recipients

  • is_html (optional): Set to true for HTML emails (default: false)

Example:

{
  "to_email": "recipient@example.com",
  "subject": "Hello from MCP",
  "body": "<h1>Welcome!</h1><p>This is a test email.</p>",
  "is_html": true
}

2. send_email_with_template

Send an email using a SendGrid dynamic template.

Parameters:

  • to_email (required): Recipient email address

  • template_id (required): SendGrid template ID

  • dynamic_data (required): Dictionary of template variables

  • from_email (optional): Sender email

  • from_name (optional): Sender name

  • subject (optional): Override template subject

Example:

{
  "to_email": "user@example.com",
  "template_id": "d-1234567890abcdef",
  "dynamic_data": {
    "username": "John",
    "action_url": "https://example.com/verify"
  }
}

3. send_email_with_attachments

Send an email with file attachments.

Parameters:

  • to_email (required): Recipient email address

  • subject (required): Email subject line

  • body (required): Email content

  • attachment_paths (required): List of file paths to attach

  • from_email (optional): Sender email

  • from_name (optional): Sender name

  • is_html (optional): HTML email flag

Example:

{
  "to_email": "recipient@example.com",
  "subject": "Report Attached",
  "body": "Please find the report attached.",
  "attachment_paths": ["/path/to/report.pdf", "/path/to/data.csv"]
}

πŸ”Œ Integration Examples

Claude Desktop

Add to your Claude Desktop config file (claude_desktop_config.json):

{
  "mcpServers": {
    "email": {
      "command": "python",
      "args": ["d:\\repos\\mcp_mail\\server.py"],
      "env": {
        "SENDGRID_API_KEY": "your_api_key",
        "DEFAULT_FROM_EMAIL": "your-email@example.com",
        "DEFAULT_FROM_NAME": "Your Name"
      }
    }
  }
}

Or using Docker:

{
  "mcpServers": {
    "email": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "--env-file", "d:\\repos\\mcp_mail\\.env", "mcp-email-server"]
    }
  }
}

Langflow Integration

  1. Install an MCP client component in Langflow (if available) or use a custom Python component

  2. Configure the MCP server connection with the email server's stdio transport

  3. Call the email tools from your Langflow flows

See examples/langflow_integration.md for detailed instructions.

Python Client Example

from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

server_params = StdioServerParameters(
    command="python",
    args=["d:/repos/mcp_mail/server.py"],
    env={
        "SENDGRID_API_KEY": "your_key",
        "DEFAULT_FROM_EMAIL": "your@email.com"
    }
)

async with stdio_client(server_params) as (read, write):
    async with ClientSession(read, write) as session:
        await session.initialize()
        
        # Call the send_email tool
        result = await session.call_tool("send_email", {
            "to_email": "recipient@example.com",
            "subject": "Test Email",
            "body": "Hello from MCP!",
            "is_html": False
        })
        
        print(result)

πŸ§ͺ Testing

Run the test script to verify functionality:

python test_server.py

This will test the email sending functions with mocked SendGrid responses.

πŸ› Troubleshooting

"SendGrid client not initialized"

  • Ensure SENDGRID_API_KEY is set in your .env file

  • Verify the API key is valid and has Mail Send permissions

"403 Forbidden" error

  • Your sender email address must be verified in SendGrid

  • Go to SendGrid Settings β†’ Sender Authentication

"No from_email provided"

  • Set DEFAULT_FROM_EMAIL in your .env file, or

  • Provide from_email parameter in each request

Attachments not working

  • Ensure the file paths are absolute and accessible

  • Check file permissions

  • Verify files exist at the specified paths

πŸ“š Resources

πŸ“„ License

MIT License - feel free to use this in your projects!

🀝 Contributing

Contributions welcome! Feel free to submit issues or pull requests.

-
security - not tested
F
license - not found
-
quality - not tested

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/wojkos/mcp_sg_mail'

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