| Crates.io | resend-mcp |
| lib.rs | resend-mcp |
| version | 0.3.0 |
| created_at | 2025-12-11 02:04:07.603238+00 |
| updated_at | 2025-12-11 03:51:27.145915+00 |
| description | MCP server for the Resend email API |
| homepage | https://github.com/psu3d0/resend-mcp |
| repository | https://github.com/psu3d0/resend-mcp |
| max_upload_size | |
| id | 1979014 |
| size | 1,004,119 |

MCP server for the Resend email API. Exposes 49 tools for sending emails, managing domains, contacts, templates, broadcasts, webhooks, and more.
cargo install --path .
docker pull ghcr.io/psu3d0/resend-mcp:latest
docker run -p 8080:8080 -e RESEND_API_KEY=re_xxx ghcr.io/psu3d0/resend-mcp:latest
Download from GitHub Releases.
# Start server with stdio transport (default)
RESEND_API_KEY=re_xxx resend-mcp
# Or via CLI flag
resend-mcp --api-key re_xxx
# Use HTTP transport
resend-mcp --api-key re_xxx --transport http
# Custom bind address (HTTP mode)
resend-mcp --api-key re_xxx --transport http --bind-address 0.0.0.0 --port 3000
# Custom base URL (for proxies or testing)
resend-mcp --api-key re_xxx --base-url https://custom.api.com
# Disable startup health check
resend-mcp --api-key re_xxx --no-health-check
# Debug logging
RESEND_MCP_LOG=debug resend-mcp --api-key re_xxx
{
"mcpServers": {
"resend": {
"command": "resend-mcp",
"env": {
"RESEND_API_KEY": "re_xxx"
}
}
}
}
{
"mcpServers": {
"resend": {
"command": "docker",
"args": ["run", "--rm", "-p", "8080:8080", "-e", "RESEND_API_KEY=re_xxx", "ghcr.io/psu3d0/resend-mcp:latest"]
}
}
}
sendEmail - Send an emailsendBatchEmails - Send up to 100 emails at oncegetEmail - Retrieve a single emailupdateEmail - Update a scheduled emailcancelScheduledEmail - Cancel a scheduled emaillistEmailAttachments - List attachments for a sent emailgetEmailAttachment - Get a single attachmentlistReceivedEmails - List received emailsgetReceivedEmail - Get a single received emaillistReceivedEmailAttachments - List attachments for a received emailgetReceivedEmailAttachment - Get a received email attachmentcreateDomain - Create a new domainlistDomains - List all domainsgetDomain - Get a single domainupdateDomain - Update a domaindeleteDomain - Delete a domainverifyDomain - Verify a domaincreateApiKey - Create a new API keylistApiKeys - List all API keysdeleteApiKey - Delete an API keycreateAudience - Create an audiencelistAudiences - List all audiencesgetAudience - Get a single audiencedeleteAudience - Delete an audiencecreateContact - Create a contactlistContacts - List contacts in an audiencegetContactByEmail / getContactById - Get a contactupdateContactByEmail / updateContactById - Update a contactdeleteContactByEmail / deleteContactById - Delete a contactcreateBroadcast - Create a broadcastlistBroadcasts - List all broadcastsgetBroadcast - Get a single broadcastdeleteBroadcast - Delete a draft broadcastsendBroadcast - Send or schedule a broadcastcreateTemplate - Create a templatelistTemplates - List all templatesgetTemplate - Get a single templateupdateTemplate - Update a templatedeleteTemplate - Delete a templateduplicateTemplate - Duplicate a templatepublishTemplate - Publish a templatecreateWebhook - Create a webhooklistWebhooks - List all webhooksgetWebhook - Get a single webhookupdateWebhook - Update a webhookdeleteWebhook - Delete a webhookAll options can be set via CLI flags or environment variables.
| CLI Flag | Env Variable | Default | Description |
|---|---|---|---|
--api-key |
RESEND_API_KEY |
required | Resend API key |
--transport |
TRANSPORT |
stdio |
Transport mode (stdio or http) |
--base-url |
RESEND_BASE_URL |
https://api.resend.com |
Resend API base URL |
--bind-address |
BIND_ADDRESS |
127.0.0.1 |
Server bind address (HTTP mode) |
--port |
PORT |
8080 |
Server port (HTTP mode) |
--no-health-check |
- | false |
Disable startup health check |
| - | RESEND_MCP_LOG |
info |
Log level (error, warn, info, debug, trace) |
On startup, the server calls listDomains to verify API key validity. This can be disabled with --no-health-check. A failed health check logs a warning but does not prevent startup.
# Build
cargo build
# Run with debug logging
RESEND_MCP_LOG=debug cargo run -- --api-key re_xxx
# Format and lint
cargo fmt && cargo clippy
# Update OpenAPI spec from upstream
python scripts/transform_spec.py /path/to/upstream/resend.yaml src/specs/resend.yaml
The spec is automatically synced from resend/resend-openapi daily via GitHub Actions. The transform script adds operationId fields and fixes YAML parsing issues.
Apache-2.0