About Resend Email MCP
Resend Email MCP provides tools for Resend email, domain, contact, campaign, template, and webhook operations, with diagnostics for deliverability and account issues. It is intended for users managing Resend through MCP clients.
Key features
- 01Send, batch, schedule, and preview email
- 02Manage domains, contacts, and broadcasts
- 03Work with templates, segments, and topics
- 04Inspect API logs and email lifecycles
- 05Diagnose DNS and deliverability issues
- 06Read-only mode and raw endpoint access
Use cases
- 01Send email or a broadcast through Resend
- 02Investigate a bounced email or delivery problem
- 03Check sending-domain DNS configuration
- 04Audit a Resend account without making changes
MCP support
The MCP server exposes 75 tools and two read-only resources for Resend operations and diagnostics. It supports read-only safety mode and includes a raw endpoint tool for API operations without dedicated wrappers.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y resend-email-mcpRESEND_API_KEYSecretResend API key (https://resend.com/api-keys)RESEND_FROMDefault sender address (verified domain), e.g. 'Acme <[email protected]>'RESEND_REPLY_TODefault Reply-To addressRESEND_READONLYSet to 'true' to block every mutating toolRESEND_ATTACHMENTS_DIRDirectory that local-file attachments are restricted to (disk reads disabled unless set)Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
75Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| cc | any | No | Recipient address(es), e.g. "[email protected]" or ["[email protected]","[email protected]"] |
| to | any | Yes | Recipient address(es), e.g. "[email protected]" or ["[email protected]","[email protected]"] |
| bcc | any | No | Recipient address(es), e.g. "[email protected]" or ["[email protected]","[email protected]"] |
| from | string | No | Sender, e.g. "Acme <[email protected]>". Falls back to RESEND_FROM. Domain must be verified. |
| html | string | No | HTML body (provide html and/or text) |
| tags | array | No | |
| text | string | No | Plain-text body (provide html and/or text) |
| headers | object | No | Custom headers, e.g. {"X-Entity-Ref-ID": "123"} |
| replyTo | any | No | Reply-To address(es). Falls back to RESEND_REPLY_TO. |
| subject | string | Yes | Email subject line |
| templateId | string | No | Send using a saved template instead of html/text |
| attachments | array | No | |
| scheduledAt | string | No | Schedule for later: ISO-8601 or natural language like "in 1 hour" / "tomorrow at 9am" |
| templateData | object | No | Variables to interpolate into the template |
| idempotencyKey | string | No | Optional Idempotency-Key to make retries safe (avoids duplicate sends) |
Details
From the project READMEresend-email-mcp
The most complete Resend MCP server — full coverage of the Resend API (emails, domains, contacts, broadcasts, templates, segments, topics, webhooks, logs) plus a unique debug/diagnostics layer no other Resend MCP offers: deliverability analysis, DNS troubleshooting, email lifecycle inspection, bounce explanation, and account auditing.
Works with Claude Code, Cursor, Claude Desktop, and any other MCP client.
Why this MCP
| resend-email-mcp | Official resend-mcp | Minimal MCPs | |
|---|---|---|---|
| Send / batch / schedule | ✅ | ✅ | partial |
| Domains, contacts, broadcasts, templates, segments, topics, webhooks | ✅ | ✅ | ❌ |
| API request logs tools | ✅ | ❌ | ❌ |
| Debug layer (diagnose, analyze, inspect, explain, audit) | ✅ 7 tools | ❌ | ❌ |
| Readonly safety mode | ✅ | ❌ | ❌ |
| Raw escape hatch for new endpoints | ✅ | ❌ | ❌ |
| Idempotency-key support | ✅ | partial | ❌ |
75 tools + 2 resources.
Quick start
1. Get a Resend API key
Create one at https://resend.com/api-keys.
2. Add to your MCP client
Claude Code (CLI)
claude mcp add resend -e RESEND_API_KEY=re_xxxxxxxx -- npx -y resend-email-mcp
Cursor / Claude Desktop / generic (mcp.json / claude_desktop_config.json)
{
"mcpServers": {
"resend": {
"command": "npx",
"args": ["-y", "resend-email-mcp"],
"env": {
"RESEND_API_KEY": "re_xxxxxxxx",
"RESEND_FROM": "Acme <[email protected]>"
}
}
}
}
Config file locations:
- Claude Desktop (Windows):
%APPDATA%\Claude\claude_desktop_config.json - Claude Desktop (macOS):
~/Library/Application Support/Claude/claude_desktop_config.json - Cursor:
~/.cursor/mcp.json(or per-project.cursor/mcp.json)
Restart the client and ask: "Send a test email to [email protected]" or "Audit my Resend account."
Configuration
| Env var | Required | Description |
|---|---|---|
RESEND_API_KEY | ✅ | Your Resend API key |
RESEND_FROM | – | Default sender for send_email when from is omitted (must be a verified domain) |
RESEND_REPLY_TO | – | Default Reply-To address |
RESEND_READONLY | – | true blocks every mutating tool (send/create/update/delete). Safe exploration of production |
RESEND_ATTACHMENTS_DIR | – | Directory that send_email's localPath attachments are restricted to. Unset = disk reads disabled (safe default; path traversal is blocked) |
RESEND_BASE_URL | – | Override API base URL (default https://api.resend.com). Must be https (http only for localhost) |
RESEND_MAX_RETRIES | – | Retries on 429/5xx (default 3) |
Tools
Emails
send_email · send_batch_emails · get_email · list_emails · update_email · cancel_email · preview_email
send_emailaccepts attachments by base64content, publicpath(URL), orlocalPath(a file on disk, read and base64-encoded automatically — only enabled whenRESEND_ATTACHMENTS_DIRis set, and restricted to that directory).preview_emaildry-runs a message — resolving the final sender, sizing attachments, and surfacing warnings — without sending.
Attachments (sent & received)
list_email_attachments · get_email_attachment · list_received_emails · get_received_email · list_received_attachments · get_received_attachment
Domains
create_domain · get_domain · list_domains · update_domain · delete_domain · verify_domain
API keys
create_api_key · list_api_keys · delete_api_key
Broadcasts
create_broadcast · get_broadcast · list_broadcasts · update_broadcast · send_broadcast · delete_broadcast
Contacts
create_contact · get_contact · list_contacts · update_contact · delete_contact · get_contact_topics · update_contact_topics · list_contact_segments · add_contact_to_segment · remove_contact_from_segment
Contact properties
create_contact_property · get_contact_property · list_contact_properties · update_contact_property · delete_contact_property
Segments
create_segment · get_segment · list_segments · delete_segment · list_segment_contacts
Templates
create_template · get_template · list_templates · update_template · delete_template · publish_template · duplicate_template
Topics
create_topic · get_topic · list_topics · update_topic · delete_topic
Webhooks
create_webhook · get_webhook · list_webhooks · update_webhook · delete_webhook
Logs
list_logs · get_log
🔍 Debug & diagnostics (the differentiator)
| Tool | What it does |
|---|---|
diagnose_domain | Inspects every DNS record (SPF/DKIM/DMARC) and reports what's missing + how to fix it |
analyze_deliverability | Aggregates recent sends into delivery/bounce/complaint rates with a health verdict |
inspect_email | Renders one email's full lifecycle timeline and flags problems |
explain_bounce | Classifies a bounce (hard/soft/block) and recommends the action |
audit_account | One-shot health check of domains, keys, and deliverability |
search_logs | Smart filtering of API logs by status/path/recipient to find failures |
test_send | Safely simulates delivered/bounced/complained via Resend sandbox addresses |
Escape hatch
resend_raw — call any Resend endpoint not yet wrapped in a dedicated tool.
Resources
Beyond tools, the server exposes two read-only MCP resources so a client can pull account context without spending a tool call:
| URI | Content |
|---|---|
resend://account | Domains + API keys snapshot |
resend://domains | All sending domains with verification status |
Every tool is annotated with MCP hints (readOnlyHint, destructiveHint, idempotentHint) so clients can show which operations are safe and which need confirmation.
Example prompts
- "Diagnose why acme.com isn't verified." →
diagnose_domain - "How healthy is my email sending this week?" →
analyze_deliverability - "What happened to email re_abc123?" →
inspect_email - "Why did that email bounce and what should I do?" →
explain_bounce - "Something's wrong with my Resend setup — check everything." →
audit_account - "Send our launch newsletter to the 'beta' segment." →
create_broadcast+send_broadcast
Testing safely
Use Resend's sandbox addresses (no reputation impact):
[email protected]— simulates delivery[email protected]— simulates a hard bounce[email protected]— simulates a spam complaint
Or just run test_send and then inspect_email on the returned ID.
Enable RESEND_READONLY=true to explore a production account without any risk of sending or deleting.
Troubleshooting
This MCP is built to debug itself — when something fails, reach for the diagnostic tools instead of guessing.
| Symptom / error | Likely cause | What to run |
|---|---|---|
validation_error: from domain is not verified | Your from/RESEND_FROM domain isn't verified | list_domains → diagnose_domain (shows missing DNS records + fixes) → verify_domain |
| Emails send but never arrive | Deliverability / reputation issue | analyze_deliverability then inspect_email on a sample ID |
missing_api_key / invalid_api_key (HTTP 401) | RESEND_API_KEY unset or wrong | Check the .env; create a key at resend.com/api-keys |
restricted_api_key / not_authorized (403) | Key scoped to sending-only or one domain | Use a full_access key (list_api_keys to inspect) |
rate_limit_exceeded (429) | Too many requests | The client auto-retries with backoff; reduce volume |
daily_quota_exceeded | Plan send limit reached | Upgrade plan or wait for reset |
| A specific email bounced | Invalid/blocking recipient | explain_bounce (classifies hard/soft/block + action) |
| "Is anything wrong with my setup?" | — | audit_account (one-shot health check) |
| Request fails for unknown reason | — | search_logs with only_errors: true |
Every error returned by this server includes the HTTP status, Resend's error name, and an actionable Hint line.
Local development
git clone https://github.com/helbertparanhos/resend-email-mcp.git
cd resend-email-mcp
npm install
npm run build
cp .env.example .env # add your RESEND_API_KEY
npm run inspector # opens the MCP Inspector against the built server
License
MIT © Helbert Paranhos / Strat Academy
Built with the Model Context Protocol. Not affiliated with Resend.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.