resend-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 <hello@acme.com>"
}
}
}
}
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 delivered@resend.dev" 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):
delivered@resend.devβ simulates deliverybounced@resend.devβ simulates a hard bouncecomplained@resend.devβ 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.











