resend-email-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| RESEND_FROM | No | Default sender for send_email when from is omitted (must be a verified domain) | |
| RESEND_API_KEY | Yes | Your Resend API key | |
| RESEND_BASE_URL | No | Override API base URL (default https://api.resend.com). Must be https (http only for localhost) | |
| RESEND_READONLY | No | true blocks every mutating tool (send/create/update/delete). Safe exploration of production | |
| RESEND_REPLY_TO | No | Default Reply-To address | |
| RESEND_MAX_RETRIES | No | Retries on 429/5xx (default 3) | |
| RESEND_ATTACHMENTS_DIR | No | Directory that send_email's localPath attachments are restricted to. Unset = disk reads disabled (safe default; path traversal is blocked) |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {} |
| resources | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| send_emailA | Send a single email via Resend. Supports HTML/text, cc/bcc, reply-to, attachments, tags, custom headers, scheduling, and templates. Uses RESEND_FROM as the default sender when |
| send_batch_emailsA | Send up to 100 distinct emails in one call (one API request). Each entry is a full email object. Note: batch sends do NOT support attachments or scheduling per Resend limits. |
| get_emailA | Retrieve a single sent email by ID, including its current delivery status. |
| list_emailsA | List sent emails (paginated). Useful to find recent sends and their IDs. |
| update_emailA | Update a scheduled email — currently only the scheduled send time can be changed. |
| cancel_emailA | Cancel a scheduled email that has not been sent yet. |
| preview_emailA | Dry-run an email WITHOUT sending it. Resolves the final |
| list_email_attachmentsA | List the attachments of a sent email. |
| get_email_attachmentA | Retrieve a single attachment of a sent email by attachment ID (returns metadata / download info). |
| list_received_emailsA | List inbound (received) emails. Requires email receiving to be configured on your Resend account. |
| get_received_emailA | Retrieve a single received email by ID, including parsed headers and body. |
| list_received_attachmentsA | List the attachments of a received email. |
| get_received_attachmentA | Retrieve a single attachment of a received email by attachment ID. |
| create_domainA | Add a sending domain to Resend. Returns the DNS records (SPF, DKIM, optional DMARC) you must add to your DNS provider before verifying. |
| get_domainA | Retrieve a domain by ID, including verification status and the full list of DNS records with their current state. |
| list_domainsA | List all domains on the account with their verification status. |
| update_domainA | Update a domain's settings: open/click tracking and TLS enforcement. |
| delete_domainA | Permanently delete a domain from Resend. |
| verify_domainA | Trigger verification for a domain after adding its DNS records. Re-checks SPF/DKIM. Use diagnose_domain for a human-readable report of what is still missing. |
| create_api_keyA | Create a new Resend API key. The full key value is returned ONLY once — store it securely. Optionally scope it to sending-only and to a single domain. |
| list_api_keysA | List all API keys (metadata only — secret values are never returned). |
| delete_api_keyA | Permanently revoke an API key by ID. |
| create_broadcastA | Create a broadcast (newsletter / campaign) targeted at an audience or segment. Created as a draft — use send_broadcast to deliver or schedule it. |
| get_broadcastA | Retrieve a broadcast by ID, including its status (draft/scheduled/sent) and stats. |
| list_broadcastsA | List all broadcasts (paginated). |
| update_broadcastA | Update a draft broadcast's content or settings (from, subject, html, text, etc.). |
| send_broadcastA | Send a broadcast now, or schedule it for later. Omit scheduledAt to send immediately. |
| delete_broadcastA | Delete a broadcast (only drafts and scheduled broadcasts can be deleted). |
| create_contactA | Create a contact. Provide email plus optional name and custom properties. |
| get_contactA | Retrieve a contact by ID or by email address. |
| list_contactsB | List contacts (paginated). |
| update_contactB | Update a contact's name, subscription state, or custom properties. |
| delete_contactA | Delete a contact by ID or email address. |
| get_contact_topicsA | List the topic subscriptions of a contact. |
| update_contact_topicsA | Update a contact's topic subscriptions (opt-in / opt-out of specific topics). |
| list_contact_segmentsA | List the segments a contact belongs to. |
| add_contact_to_segmentB | Add a contact to a segment. |
| remove_contact_from_segmentC | Remove a contact from a segment. |
| create_contact_propertyA | Create a custom contact property (a field you can store on every contact, e.g. 'plan' or 'signup_date'). |
| get_contact_propertyA | Retrieve a contact property by ID. |
| list_contact_propertiesA | List all custom contact properties defined on the account. |
| update_contact_propertyA | Rename a contact property. |
| delete_contact_propertyB | Delete a contact property by ID. |
| create_segmentA | Create a segment — a saved, optionally rule-based grouping of contacts you can target with broadcasts. |
| get_segmentA | Retrieve a segment by ID. |
| list_segmentsA | List all segments. |
| delete_segmentA | Delete a segment by ID. |
| list_segment_contactsA | List the contacts that belong to a segment (paginated). |
| create_templateA | Create a reusable email template. Use {{variable}} placeholders in html/text and pass values via send_email's templateData. |
| get_templateA | Retrieve a template by ID. |
| list_templatesA | List all templates (paginated). |
| update_templateB | Update a template's name, subject, or body. Creates a new draft version. |
| delete_templateB | Delete a template by ID. |
| publish_templateA | Publish a template's draft so it becomes the live version used by sends. |
| duplicate_templateB | Duplicate an existing template into a new one. |
| create_topicA | Create a topic — a subscription category (e.g. 'Product updates', 'Promotions') contacts can opt in/out of independently. |
| get_topicA | Retrieve a topic by ID. |
| list_topicsA | List all topics. |
| update_topicB | Update a topic's name or description. |
| delete_topicA | Delete a topic by ID. |
| create_webhookA | Create a webhook endpoint that receives Resend events. Returns a signing secret used to verify payloads. |
| get_webhookA | Retrieve a webhook by ID (including its subscribed events and status). |
| list_webhooksA | List all configured webhooks. |
| update_webhookA | Update a webhook's endpoint URL, subscribed events, or enabled status. |
| delete_webhookA | Delete a webhook by ID. |
| list_logsA | List API request logs — every request made to your Resend account with status code, endpoint and timing. The backbone for debugging. For smart filtering use search_logs. |
| get_logA | Retrieve a single API request log entry by ID, with full request/response detail. |
| diagnose_domainA | Deep DNS/verification diagnosis for a sending domain. Fetches the domain, inspects every required DNS record (SPF, DKIM, DMARC, MX, Return-Path), reports what is verified vs. pending/missing, and gives concrete fix steps. Use this whenever sending fails with 'domain not verified' or before going live. |
| analyze_deliverabilityA | Aggregate the MOST RECENT sent emails (up to 100 — a single page, not the full history) into deliverability metrics: delivered / bounced / complained / suppressed / opened / clicked counts and rates, plus a health verdict and recommendations. Use to answer 'how is my email health?' or to investigate a recent drop in delivery. |
| inspect_emailA | Full lifecycle view of one email: fetches it and renders a readable timeline of its events (sent → delivered → opened → clicked, or bounced/complained), highlighting the final state and any problem. Use to answer 'what happened to this email?'. |
| explain_bounceA | Diagnose why an email bounced. Fetches the email, classifies the bounce as hard / soft / block / suppressed, explains it in plain language, and recommends the correct action (remove address, retry later, fix content, etc.). |
| audit_accountA | One-shot health check of the whole Resend account: lists domains (and whether they're verified), API keys, and recent deliverability (most recent 100 emails), then returns a prioritized list of problems and recommendations. Great first call when 'emails aren't working'. |
| search_logsA | Smart search over API request logs: fetch recent logs and filter by HTTP status, status class (e.g. only errors), endpoint path substring, and/or recipient. Returns matching entries plus a breakdown of error types. Use to find why requests are failing. |
| test_sendA | Validate your sending setup by sending to Resend's sandbox addresses, which deterministically simulate outcomes WITHOUT hurting your reputation. Choose 'delivered', 'bounced', or 'complained'. Returns the resulting email ID so you can inspect_email it. |
| resend_rawA | Advanced escape hatch — make a raw authenticated request to ANY Resend API endpoint not covered by a dedicated tool. Prefer specific tools when one exists. Mutating methods (POST/PATCH/PUT/DELETE) are blocked in readonly mode. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Resend account overview | Domains and API keys on the connected Resend account (read-only snapshot). |
| Resend domains | All sending domains with their verification status. |
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/helbertparanhos/resend-email-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server