{
  "markdown": "# resend-email-mcp\n\n**The most complete [Resend](https://resend.com) 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.\n\nWorks with **Claude Code, Cursor, Claude Desktop**, and any other MCP client.\n\n[![npm version](https://img.shields.io/npm/v/resend-email-mcp.svg?style=flat-square)](https://www.npmjs.com/package/resend-email-mcp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](LICENSE)\n[![GitHub Stars](https://img.shields.io/github/stars/helbertparanhos/resend-email-mcp?style=flat-square)](https://github.com/helbertparanhos/resend-email-mcp/stargazers)\n[![GitHub Forks](https://img.shields.io/github/forks/helbertparanhos/resend-email-mcp?style=flat-square)](https://github.com/helbertparanhos/resend-email-mcp/network/members)\n[![GitHub Issues](https://img.shields.io/github/issues/helbertparanhos/resend-email-mcp?style=flat-square)](https://github.com/helbertparanhos/resend-email-mcp/issues)\n[![Glama Quality](https://glama.ai/mcp/servers/helbertparanhos/resend-email-mcp/badges/score.svg)](https://glama.ai/mcp/servers/helbertparanhos/resend-email-mcp)\n\n[![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)\n[![Node.js](https://img.shields.io/badge/Node.js-339933?style=flat-square&logo=nodedotjs&logoColor=white)](https://nodejs.org/)\n[![MCP](https://img.shields.io/badge/MCP-Model%20Context%20Protocol-000000?style=flat-square)](https://modelcontextprotocol.io/)\n[![Claude Code](https://img.shields.io/badge/Claude%20Code-D97706?style=flat-square)](https://claude.ai/code)\n[![Cursor](https://img.shields.io/badge/Cursor-Compatible-4F46E5?style=flat-square)](https://cursor.sh)\n[![Claude Desktop](https://img.shields.io/badge/Claude%20Desktop-Compatible-D97706?style=flat-square)](https://claude.ai/download)\n\n[![Instagram](https://img.shields.io/badge/@helbertparanhos-E4405F?style=flat-square&logo=instagram&logoColor=white)](https://www.instagram.com/helbertparanhos)\n[![YouTube](https://img.shields.io/badge/stratacademy-FF0000?style=flat-square&logo=youtube&logoColor=white)](https://www.youtube.com/@stratacademy)\n[![LinkedIn](https://img.shields.io/badge/helbert--paranhos-0077B5?style=flat-square&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/helbert-paranhos/)\n[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-FFDD00?style=flat-square&logo=buy-me-a-coffee&logoColor=black)](https://buymeacoffee.com/helbertparanhos)\n[![Strat Academy](https://img.shields.io/badge/Strat%20Academy-8B5CF6?style=flat-square)](https://stratacademy.com.br)\n\n---\n\n## Why this MCP\n\n| | resend-email-mcp | Official `resend-mcp` | Minimal MCPs |\n|---|:---:|:---:|:---:|\n| Send / batch / schedule | ✅ | ✅ | partial |\n| Domains, contacts, broadcasts, templates, segments, topics, webhooks | ✅ | ✅ | ❌ |\n| API request **logs** tools | ✅ | ❌ | ❌ |\n| **Debug layer** (diagnose, analyze, inspect, explain, audit) | ✅ **7 tools** | ❌ | ❌ |\n| Readonly safety mode | ✅ | ❌ | ❌ |\n| Raw escape hatch for new endpoints | ✅ | ❌ | ❌ |\n| Idempotency-key support | ✅ | partial | ❌ |\n\n**75 tools + 2 resources.**\n\n---\n\n## Quick start\n\n### 1. Get a Resend API key\nCreate one at **https://resend.com/api-keys**.\n\n### 2. Add to your MCP client\n\n#### Claude Code (CLI)\n```bash\nclaude mcp add resend -e RESEND_API_KEY=re_xxxxxxxx -- npx -y resend-email-mcp\n```\n\n#### Cursor / Claude Desktop / generic (`mcp.json` / `claude_desktop_config.json`)\n```json\n{\n  \"mcpServers\": {\n    \"resend\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"resend-email-mcp\"],\n      \"env\": {\n        \"RESEND_API_KEY\": \"re_xxxxxxxx\",\n        \"RESEND_FROM\": \"Acme <hello@acme.com>\"\n      }\n    }\n  }\n}\n```\n\nConfig file locations:\n- **Claude Desktop (Windows):** `%APPDATA%\\Claude\\claude_desktop_config.json`\n- **Claude Desktop (macOS):** `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Cursor:** `~/.cursor/mcp.json` (or per-project `.cursor/mcp.json`)\n\nRestart the client and ask: *\"Send a test email to delivered@resend.dev\"* or *\"Audit my Resend account.\"*\n\n---\n\n## Configuration\n\n| Env var | Required | Description |\n|---------|:---:|-------------|\n| `RESEND_API_KEY` | ✅ | Your Resend API key |\n| `RESEND_FROM` | – | Default sender for `send_email` when `from` is omitted (must be a verified domain) |\n| `RESEND_REPLY_TO` | – | Default Reply-To address |\n| `RESEND_READONLY` | – | `true` blocks every mutating tool (send/create/update/delete). Safe exploration of production |\n| `RESEND_ATTACHMENTS_DIR` | – | Directory that `send_email`'s `localPath` attachments are restricted to. **Unset = disk reads disabled** (safe default; path traversal is blocked) |\n| `RESEND_BASE_URL` | – | Override API base URL (default `https://api.resend.com`). Must be https (http only for localhost) |\n| `RESEND_MAX_RETRIES` | – | Retries on 429/5xx (default `3`) |\n\n---\n\n## Tools\n\n### Emails\n`send_email` · `send_batch_emails` · `get_email` · `list_emails` · `update_email` · `cancel_email` · `preview_email`\n\n> `send_email` accepts attachments by base64 `content`, public `path` (URL), or **`localPath`** (a file on disk, read and base64-encoded automatically — only enabled when `RESEND_ATTACHMENTS_DIR` is set, and restricted to that directory). `preview_email` dry-runs a message — resolving the final sender, sizing attachments, and surfacing warnings — **without sending**.\n\n### Attachments (sent & received)\n`list_email_attachments` · `get_email_attachment` · `list_received_emails` · `get_received_email` · `list_received_attachments` · `get_received_attachment`\n\n### Domains\n`create_domain` · `get_domain` · `list_domains` · `update_domain` · `delete_domain` · `verify_domain`\n\n### API keys\n`create_api_key` · `list_api_keys` · `delete_api_key`\n\n### Broadcasts\n`create_broadcast` · `get_broadcast` · `list_broadcasts` · `update_broadcast` · `send_broadcast` · `delete_broadcast`\n\n### Contacts\n`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`\n\n### Contact properties\n`create_contact_property` · `get_contact_property` · `list_contact_properties` · `update_contact_property` · `delete_contact_property`\n\n### Segments\n`create_segment` · `get_segment` · `list_segments` · `delete_segment` · `list_segment_contacts`\n\n### Templates\n`create_template` · `get_template` · `list_templates` · `update_template` · `delete_template` · `publish_template` · `duplicate_template`\n\n### Topics\n`create_topic` · `get_topic` · `list_topics` · `update_topic` · `delete_topic`\n\n### Webhooks\n`create_webhook` · `get_webhook` · `list_webhooks` · `update_webhook` · `delete_webhook`\n\n### Logs\n`list_logs` · `get_log`\n\n### 🔍 Debug & diagnostics (the differentiator)\n| Tool | What it does |\n|------|--------------|\n| `diagnose_domain` | Inspects every DNS record (SPF/DKIM/DMARC) and reports what's missing + how to fix it |\n| `analyze_deliverability` | Aggregates recent sends into delivery/bounce/complaint rates with a health verdict |\n| `inspect_email` | Renders one email's full lifecycle timeline and flags problems |\n| `explain_bounce` | Classifies a bounce (hard/soft/block) and recommends the action |\n| `audit_account` | One-shot health check of domains, keys, and deliverability |\n| `search_logs` | Smart filtering of API logs by status/path/recipient to find failures |\n| `test_send` | Safely simulates delivered/bounced/complained via Resend sandbox addresses |\n\n### Escape hatch\n`resend_raw` — call any Resend endpoint not yet wrapped in a dedicated tool.\n\n## Resources\n\nBeyond tools, the server exposes two read-only **MCP resources** so a client can pull account context without spending a tool call:\n\n| URI | Content |\n|-----|---------|\n| `resend://account` | Domains + API keys snapshot |\n| `resend://domains` | All sending domains with verification status |\n\nEvery tool is annotated with MCP hints (`readOnlyHint`, `destructiveHint`, `idempotentHint`) so clients can show which operations are safe and which need confirmation.\n\n---\n\n## Example prompts\n\n- *\"Diagnose why acme.com isn't verified.\"* → `diagnose_domain`\n- *\"How healthy is my email sending this week?\"* → `analyze_deliverability`\n- *\"What happened to email re_abc123?\"* → `inspect_email`\n- *\"Why did that email bounce and what should I do?\"* → `explain_bounce`\n- *\"Something's wrong with my Resend setup — check everything.\"* → `audit_account`\n- *\"Send our launch newsletter to the 'beta' segment.\"* → `create_broadcast` + `send_broadcast`\n\n---\n\n## Testing safely\n\nUse Resend's sandbox addresses (no reputation impact):\n- `delivered@resend.dev` — simulates delivery\n- `bounced@resend.dev` — simulates a hard bounce\n- `complained@resend.dev` — simulates a spam complaint\n\nOr just run `test_send` and then `inspect_email` on the returned ID.\n\nEnable `RESEND_READONLY=true` to explore a production account without any risk of sending or deleting.\n\n---\n\n## Troubleshooting\n\nThis MCP is built to debug itself — when something fails, reach for the diagnostic tools instead of guessing.\n\n| Symptom / error | Likely cause | What to run |\n|-----------------|--------------|-------------|\n| `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` |\n| Emails send but never arrive | Deliverability / reputation issue | `analyze_deliverability` then `inspect_email` on a sample ID |\n| `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 |\n| `restricted_api_key` / `not_authorized` (403) | Key scoped to sending-only or one domain | Use a `full_access` key (`list_api_keys` to inspect) |\n| `rate_limit_exceeded` (429) | Too many requests | The client auto-retries with backoff; reduce volume |\n| `daily_quota_exceeded` | Plan send limit reached | Upgrade plan or wait for reset |\n| A specific email bounced | Invalid/blocking recipient | `explain_bounce` (classifies hard/soft/block + action) |\n| \"Is anything wrong with my setup?\" | — | `audit_account` (one-shot health check) |\n| Request fails for unknown reason | — | `search_logs` with `only_errors: true` |\n\nEvery error returned by this server includes the HTTP status, Resend's error name, and an actionable **Hint** line.\n\n---\n\n## Local development\n\n```bash\ngit clone https://github.com/helbertparanhos/resend-email-mcp.git\ncd resend-email-mcp\nnpm install\nnpm run build\ncp .env.example .env   # add your RESEND_API_KEY\nnpm run inspector      # opens the MCP Inspector against the built server\n```\n\n---\n\n## License\n\nMIT © [Helbert Paranhos / Strat Academy](https://stratacademy.com.br)\n\nBuilt with the [Model Context Protocol](https://modelcontextprotocol.io). Not affiliated with Resend.\n",
  "bytes": 11190,
  "sha": "e0256187c9074f5e1d53bcc63e2ba8fbbf9309a1d749e600a222f91fbdabda39",
  "repo_slug": "helbertparanhos/resend-email-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_helbertparanhos_resend_email_m_25e25f34/readme"
}