Resend MCP, Resend's official MCP server
Lets your AI assistant send email, read your Resend inboxes, and manage contacts, broadcasts, domains and templates in your Resend account.
This is Resend's own server. It connects Claude, ChatGPT, Cursor and other assistants to your Resend account so they can send and receive email and manage contacts, broadcasts, domains, templates and webhooks. The easiest way in is Resend's hosted version, where you sign in with your Resend account and install nothing. Know before you start that sends are real: an email or broadcast goes out the moment the assistant calls it.
Good for
- Developers who want Claude Code or Cursor to send test emails and debug why one bounced
- Teams running newsletters who want to draft, schedule and check broadcasts from chat
- People handling replies in a Resend inbox who want help reading, labelling and answering threads
- Anyone setting up a sending domain who wants DNS records and verification checked for them
Works in
10 supported · 4 should work
Tap an app to see how to set it up and any known problems.
Resend's docs cover it: add the hosted URL, then run /mcp to sign in to Resend. resend.com
Add the hosted URL as a custom connector in Claude's settings, or use the local setup. resend.com
Resend's docs cover it: add the hosted URL in Cursor's MCP settings and sign in. resend.com
Resend's docs show the hosted URL for Copilot in VS Code's settings file. resend.com
Resend's docs show the hosted URL for Windsurf's MCP config. resend.com
Install Resend's Codex plugin, or add the hosted URL with one command. resend.com
Resend's docs cover both the hosted and the local setup. resend.com
Install Resend's official ChatGPT plugin and sign in with your Resend account. resend.com
Resend's docs cover both the hosted and the local setup. resend.com
Resend's docs cover both the hosted and the local setup. resend.com
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports hosted MCP servers.
Install Resend MCP
Claude Code
- 1
Copy this prompt.
Add the Resend MCP server to Claude Code. Run this command: claude mcp add --transport http resend https://mcp.resend.com/mcp Ask me for RESEND_API_KEY and only put the values in that config, nowhere else. Then check that it loaded and tell me if I need to sign in or restart.
- 2
Paste it into Claude Code. It shows the change and asks before running it.
Requires Resend account.
Pick the hosted option unless you need to run it yourself: you sign in to Resend in a browser and install nothing. On a server or in CI where a browser sign-in is not possible, send a Resend API key instead with an Authorization: Bearer re_... header.
The local option needs a Resend API key and a verified sending domain. You can add SENDER_EMAIL_ADDRESS to set a default From address, and --allowed-file-dirs to limit which folders attachments can be read from.
To keep it from managing your account, create the API key with sending access only.
From the project README. Source.
Tools
Sends an email right away or at a scheduled time
Sends a transactional email with HTML or text, attachments, CC/BCC, reply-to, tags and an optional send time. It goes out for real.
Try: “Email sam@example.com from hello@mydomain.com saying the report is ready.”
Write ·
send-emailSends up to 100 separate emails in one go
Sends many individual transactional emails at once, each with its own recipient and content.
Try: “Send each of these 20 customers their own renewal reminder.”
Write ·
send-batch-emailsLists the emails you sent recently and their status
Shows recently sent transactional emails with recipient, subject, delivery status and time.
Try: “Which emails did we send in the last hour?”
Read ·
list-emailsShows the full details of one sent email
Returns one sent email's content, status and message ID.
Try: “Show me the email we sent to sam@example.com this morning.”
Read ·
get-emailShows delivery and open rates for a date range
Reports sent, delivered, bounced, opened and clicked counts for your account over a period.
Try: “How many emails bounced last week?”
Read ·
get-email-metricsChanges the send time of a scheduled email
Reschedules an email that has not gone out yet.
Try: “Move tomorrow's scheduled email to 9 am Friday.”
Write ·
update-emailCancels a scheduled email before it goes out
Stops an email that was scheduled for later and has not been sent.
Try: “Cancel the email scheduled for tonight.”
Write ·
cancel-emailMakes a shareable link to an email
Creates a link anyone can open to view a sent or received email, without a Resend login.
Try: “Give me a link to share the welcome email with my designer.”
Write ·
share-emailLists the attachments on a sent email
Shows the files attached to a sent email, with download links.
Try: “What files were attached to the invoice email?”
Read ·
list-sent-email-attachmentsGets a download link for a sent attachment
Returns one attachment from a sent email with a temporary download link.
Try: “Get the PDF attached to that invoice email.”
Read ·
get-sent-email-attachmentLists emails that arrived at your receiving address
Shows incoming email received by your Resend receiving address.
Try: “What emails did I get today?”
Read ·
list-received-emailsReads one received email in full
Returns a received email's content, headers and a raw download link.
Try: “Open the latest email from support@vendor.com.”
Read ·
get-received-emailLists the attachments on a received email
Shows files attached to an incoming email, with temporary download links.
Try: “Which attachments came with that customer email?”
Read ·
list-received-email-attachmentsGets a download link for a received attachment
Returns one attachment from a received email with a temporary download link.
Try: “Download the screenshot the customer sent.”
Read ·
get-received-email-attachmentLists your Resend inboxes and their unread counts
Shows the inboxes on your account, the addresses they receive at and how much is unread.
Try: “Which inboxes have unread mail?”
Read ·
list-inboxesShows one inbox's address and unread threads
Returns an inbox's details, such as its address and unread thread count.
Try: “How many unread threads are in support@mydomain.com?”
Read ·
get-inboxCreates an inbox that receives mail at an address
Sets up an inbox on one of your domains that collects incoming mail into threads.
Try: “Create an inbox for help@mydomain.com.”
Write ·
create-inboxRenames an inbox or changes its display name
Changes an inbox's internal name or the sender name on mail it sends.
Try: “Change the support inbox's display name to Acme Support.”
Write ·
update-inboxDeletes an inbox and all its threads
Removes an inbox along with every thread in it.
Try: “Delete the old sales inbox.”
Delete ·
remove-inboxLists the conversations in an inbox
Browses threads in an inbox by folder, label or read state.
Try: “Show unread threads in the support inbox.”
Read ·
list-inbox-threadsSearches an inbox's conversations by text
Finds threads in an inbox by words, sender or subject.
Try: “Find threads in support mentioning a refund.”
Read ·
search-inbox-threadsShows one conversation and its messages
Returns a thread and the list of its emails, oldest first.
Try: “Show me the thread with Dana about the delayed order.”
Read ·
get-inbox-threadLists the messages in a conversation
Lists the emails in one thread without their bodies.
Try: “How many messages are in this thread?”
Read ·
list-inbox-thread-emailsReads one message in a conversation
Returns one message from a thread with its body, addresses and attachments.
Try: “Read Dana's last message in that thread.”
Read ·
get-inbox-thread-emailMarks a conversation read or moves it to a folder
Marks a thread read or unread, or moves it to another folder.
Try: “Mark the refund thread as read and archive it.”
Write ·
update-inbox-threadAdds labels to a conversation
Tags a thread with one or more labels, keeping existing ones.
Try: “Label this thread urgent.”
Write ·
add-inbox-thread-labelsReplaces all labels on a conversation
Sets a thread's labels to exactly the ones given.
Try: “Set this thread's labels to billing only.”
Write ·
set-inbox-thread-labelsTakes one label off a conversation
Removes a single label from one thread; the label still exists elsewhere.
Try: “Remove the urgent label from this thread.”
Delete ·
remove-inbox-thread-labelMoves a conversation to the trash
Moves a whole thread to trash, where it is scheduled for deletion.
Try: “Trash the spam thread from yesterday.”
Delete ·
remove-inbox-threadReplies to a message in an inbox
Sends a real reply from the inbox's address to the message's author, right away.
Try: “Reply to Dana that her order ships tomorrow.”
Write ·
reply-to-inbox-thread-emailForwards a message from an inbox
Forwards a message from a thread to someone else, sent immediately.
Try: “Forward Dana's message to ops@mydomain.com.”
Write ·
forward-inbox-thread-emailSends a new email from an inbox, starting a thread
Sends a new message from an inbox's address and opens a thread for replies.
Try: “From support, email lee@example.com to ask for their order number.”
Write ·
send-new-inbox-emailLists the labels in an inbox
Shows the labels threads in an inbox can carry.
Try: “What labels does the support inbox have?”
Read ·
list-inbox-labelsCreates a new label in an inbox
Adds a label that threads in the inbox can be tagged with.
Try: “Create a label called VIP in the support inbox.”
Write ·
create-inbox-labelRenames or recolours a label
Changes a label's name or colour everywhere it is used.
Try: “Rename the label urgent to priority.”
Write ·
update-inbox-labelDeletes a label from an inbox
Removes a label and takes it off every thread; threads stay.
Try: “Delete the old promo label.”
Delete ·
remove-inbox-labelLists unsent drafts in an inbox
Shows the drafts saved in an inbox but not sent.
Try: “Which drafts are waiting in the support inbox?”
Read ·
list-inbox-draftsReads one draft in full
Returns a draft's recipients, subject, body and attachments.
Try: “Show me the draft reply to Dana.”
Read ·
get-inbox-draftSaves a draft in an inbox without sending it
Creates a message in an inbox that is saved for later and not sent.
Try: “Draft a reply to Dana but don't send it yet.”
Write ·
create-inbox-draftEdits a saved draft
Changes a draft's recipients, subject, body or attachments.
Try: “Make the draft to Dana a bit friendlier.”
Write ·
update-inbox-draftDeletes a draft
Throws away a draft that was never sent.
Try: “Delete the draft to Lee.”
Delete ·
remove-inbox-draftSends a saved draft
Sends a draft from the inbox's address to its recipients, right away.
Try: “Send the draft reply to Dana now.”
Write ·
send-inbox-draftShows the AI agent settings of an inbox
Returns the instructions, tone and allowed actions of an inbox's AI agent.
Try: “What is the support inbox's agent allowed to do?”
Read ·
get-inbox-agentChanges the AI agent settings of an inbox
Updates the instructions, tone or allowed actions of an inbox's AI agent.
Try: “Tell the support inbox agent to reply in a formal tone.”
Write ·
update-inbox-agentLists your email templates
Shows your templates with their names, status and aliases.
Try: “Which email templates do we have?”
Read ·
list-templatesShows one template in full
Returns a template's subject, sender, HTML and variables.
Try: “Show me the password reset template.”
Read ·
get-templateCreates a new email template as a draft
Creates a template with placeholders that you publish before use.
Try: “Create a welcome email template with a first-name variable.”
Write ·
create-templateEdits a template's subject, sender, HTML or variables
Changes a template's details; republish it afterwards.
Try: “Change the welcome template's subject to Welcome aboard.”
Write ·
update-templateSets a template's content for the visual editor
Writes a template's content in the format the Resend dashboard editor uses.
Try: “Lay out the welcome template so I can edit it in the dashboard.”
Write ·
compose-templatePublishes a template so emails can use it
Makes a template, or its latest changes, available for sending.
Try: “Publish the updated welcome template.”
Write ·
publish-templateCopies a template into a new draft
Creates a new draft copy of an existing template.
Try: “Duplicate the welcome template for our Spanish version.”
Write ·
duplicate-templateDeletes a template
Removes an email template.
Try: “Delete the old holiday template.”
Delete ·
remove-templateLists your broadcast campaigns
Shows newsletters and bulk sends with their audience, status and dates.
Try: “Which broadcasts are scheduled?”
Read ·
list-broadcastsShows one broadcast in full
Returns a broadcast's content, audience and status.
Try: “Show me last month's newsletter.”
Read ·
get-broadcastCreates a broadcast for a segment
Creates a newsletter or bulk email draft aimed at a segment, with sender and content.
Try: “Create a broadcast to the beta segment announcing the new feature.”
Write ·
create-broadcastEdits a broadcast's subject, sender, content or audience
Changes the details of a broadcast before it is sent.
Try: “Change the newsletter's subject line.”
Write ·
update-broadcastSets a broadcast's content for the visual editor
Writes a broadcast's content in the format the dashboard editor uses.
Try: “Lay out this newsletter so I can tweak it in the dashboard.”
Write ·
compose-broadcastSends or schedules a broadcast
Sends an existing broadcast to its segment now or at a set time.
Try: “Send the November newsletter tomorrow at 10 am.”
Write ·
send-broadcastCancels a queued or scheduled broadcast
Stops a broadcast that is queued or scheduled, without deleting it.
Try: “Cancel the newsletter scheduled for Friday.”
Write ·
cancel-broadcastCopies a broadcast into a new draft
Creates a new draft broadcast with the same audience and content.
Try: “Duplicate last month's newsletter as a starting point.”
Write ·
duplicate-broadcastDeletes a broadcast
Removes a broadcast campaign.
Try: “Delete the test broadcast.”
Delete ·
remove-broadcastShows which links in a broadcast got clicked
Ranks the links in a broadcast by number of clicks.
Try: “Which link in the newsletter got the most clicks?”
Read ·
list-broadcast-clicked-linksLists who opened, clicked or bounced a broadcast
Lists a broadcast's recipients for one event, such as opened or bounced.
Try: “Who bounced from yesterday's newsletter?”
Read ·
list-broadcast-recipientsLists your contacts, optionally in one segment
Shows contacts and their emails, optionally filtered by segment.
Try: “List the contacts in the beta segment.”
Read ·
list-contactsLooks up one contact by email or ID
Returns a contact's details.
Try: “Look up sam@example.com in our contacts.”
Read ·
get-contactAdds a new contact
Creates a contact and can add them to segments and topics.
Try: “Add lee@example.com as a contact in the customers segment.”
Write ·
create-contactUpdates a contact's details
Changes a contact's name, properties or unsubscribe status.
Try: “Mark sam@example.com as unsubscribed.”
Write ·
update-contactDeletes a contact
Removes a contact from your account.
Try: “Delete the contact test@example.com.”
Delete ·
remove-contactAdds a contact to a segment
Puts a contact into a segment.
Try: “Add sam@example.com to the VIP segment.”
Write ·
add-contact-to-segmentRemoves a contact from a segment
Takes a contact out of a segment.
Try: “Remove sam@example.com from the beta segment.”
Delete ·
remove-contact-from-segmentShows which segments a contact is in
Lists every segment a contact belongs to.
Try: “Which segments is sam@example.com in?”
Read ·
list-contact-segmentsShows a contact's topic subscriptions
Lists which subscription topics a contact is opted in or out of.
Try: “What is sam@example.com subscribed to?”
Read ·
list-contact-topicsChanges a contact's topic subscriptions
Opts a contact in or out of subscription topics.
Try: “Unsubscribe sam@example.com from product updates.”
Write ·
update-contact-topicsImports contacts from a CSV file
Starts a bulk import of contacts from a CSV file and returns an ID to track it.
Try: “Import the contacts in customers.csv.”
Write ·
create-contact-importChecks the progress of a contact import
Shows the status and counts of an import.
Try: “Has the CSV import finished?”
Read ·
get-contact-importLists past and running contact imports
Shows contact imports, optionally by status.
Try: “Did any imports fail this week?”
Read ·
list-contact-importsLists your custom contact fields
Shows the custom attributes, like plan or company, set up for contacts.
Try: “Which custom contact fields do we have?”
Read ·
list-contact-propertiesShows one custom contact field
Returns the details of a custom contact attribute.
Try: “Show the plan_tier property.”
Read ·
get-contact-propertyAdds a custom contact field
Creates a custom attribute you can set on contacts.
Try: “Add a company_name field to contacts.”
Write ·
create-contact-propertyChanges a contact field's fallback value
Updates the default value of a custom contact attribute.
Try: “Set the default plan_tier to free.”
Write ·
update-contact-propertyDeletes a custom contact field
Removes a custom contact attribute.
Try: “Delete the old referral_code field.”
Delete ·
remove-contact-propertyLists your audience segments
Shows the groups of contacts you can target with broadcasts.
Try: “Which segments do we have?”
Read ·
list-segmentsShows one segment
Returns a segment's details.
Try: “Show me the beta segment.”
Read ·
get-segmentCreates an audience segment
Creates a group of contacts to target with broadcasts.
Try: “Create a segment called Early adopters.”
Write ·
create-segmentRenames a segment
Changes a segment's name.
Try: “Rename the beta segment to Pilot users.”
Write ·
update-segmentDeletes a segment
Removes an audience segment.
Try: “Delete the old test segment.”
Delete ·
remove-segmentLists your subscription topics
Shows the email types contacts can subscribe to or opt out of.
Try: “Which subscription topics exist?”
Read ·
list-topicsShows one subscription topic
Returns a topic's details.
Try: “Show me the product updates topic.”
Read ·
get-topicCreates a subscription topic
Adds a type of email contacts can opt in or out of.
Try: “Create a topic for monthly newsletters.”
Write ·
create-topicEdits a subscription topic
Changes a topic's name or description.
Try: “Rename the news topic to Monthly digest.”
Write ·
update-topicDeletes a subscription topic
Removes a subscription topic.
Try: “Delete the old promotions topic.”
Delete ·
remove-topicLists addresses that will never be emailed
Shows the suppression list, optionally by reason such as bounce or complaint.
Try: “Which addresses are suppressed for bouncing?”
Read ·
list-suppressionsChecks whether an address is suppressed and why
Looks up one address on the suppression list.
Try: “Is sam@example.com blocked from our emails?”
Read ·
get-suppressionStops all email to an address
Adds an address to the suppression list so it never receives your mail.
Try: “Never email lee@example.com again.”
Write ·
add-suppressionStops email to many addresses at once
Adds several addresses to the suppression list in one call.
Try: “Suppress all the addresses in this do-not-contact list.”
Write ·
batch-add-suppressionsLets a suppressed address receive email again
Takes an address off the suppression list.
Try: “Unblock sam@example.com, they fixed their mailbox.”
Delete ·
remove-suppressionLets many suppressed addresses receive email again
Removes several entries from the suppression list at once.
Try: “Remove these five addresses from the suppression list.”
Delete ·
batch-remove-suppressionsLists your sending domains and their status
Shows your domains with verification status, region and capabilities.
Try: “Which of my domains are verified?”
Read ·
list-domainsShows a domain and the DNS records it needs
Returns a domain's details, including the DNS records for verification.
Try: “What DNS records do I need for mail.example.com?”
Read ·
get-domainAdds a sending domain
Adds a domain and returns the DNS records to set at your DNS provider.
Try: “Add mail.example.com as a sending domain.”
Write ·
create-domainChanges tracking, TLS or sending settings for a domain
Updates a domain's click and open tracking, TLS mode or sending and receiving options.
Try: “Turn on click tracking for mail.example.com.”
Write ·
update-domainStarts DNS verification for a domain
Asks Resend to check a domain's DNS records.
Try: “Check if mail.example.com is verified now.”
Write ·
verify-domainDeletes a sending domain
Removes a domain from your account.
Try: “Remove the old domain example.net.”
Delete ·
remove-domainClaims a domain another Resend account verified
Starts moving a domain verified elsewhere into your account, with new DKIM keys.
Try: “Claim mydomain.com from our old Resend account.”
Write ·
create-domain-claimChecks the status of a domain claim
Shows a domain claim's status and the TXT record it needs.
Try: “How is the mydomain.com claim going?”
Read ·
get-domain-claimStarts verification of a domain claim
Asks Resend to check DNS and transfer a claimed domain.
Try: “Verify the mydomain.com claim.”
Write ·
verify-domain-claimCreates an automation triggered by events
Builds an email workflow that runs steps when an event happens.
Try: “When a user signs up, send a welcome email, then a tips email 3 days later.”
Write ·
create-automationShows one automation or lists them all
Returns an automation and its workflow, or lists all automations.
Try: “Show me our onboarding automation.”
Read ·
get-automationRenames, enables, disables or edits an automation
Changes an automation's name, on or off status, or workflow.
Try: “Pause the onboarding automation.”
Write ·
update-automationCopies an automation
Creates a copy of an automation with its steps.
Try: “Duplicate the onboarding automation for trial users.”
Write ·
duplicate-automationDeletes an automation
Removes an automation.
Try: “Delete the old drip automation.”
Delete ·
remove-automationShows the runs of an automation
Lists when an automation ran or shows one run's details.
Try: “Did the onboarding automation run for sam@example.com?”
Read ·
get-automation-runsFires an event that triggers automations for a contact
Sends an event for a contact, starting any automation that listens for it.
Try: “Send a trial_ended event for sam@example.com.”
Write ·
send-eventCreates, lists, edits or deletes event types
Manages the named events your app sends to start automations.
Try: “Create an event type called trial_ended.”
Delete ·
manage-eventsLists your webhooks
Shows your webhook endpoints and the events they receive.
Try: “Which webhooks are set up?”
Read ·
list-webhooksShows a webhook and its signing secret
Returns a webhook's details, including the secret used to verify payloads.
Try: “Show me the signing secret for our delivery webhook.”
Read ·
get-webhookCreates a webhook for email events
Sends notifications to your URL when events like delivered or bounced happen.
Try: “Send bounce events to https://api.example.com/hooks/resend.”
Write ·
create-webhookChanges a webhook's URL, events or on/off state
Updates where a webhook points, what it listens to, or disables it.
Try: “Add opened events to our webhook.”
Write ·
update-webhookDeletes a webhook
Removes a webhook endpoint.
Try: “Delete the old staging webhook.”
Delete ·
remove-webhookLists the events sent to a webhook
Shows recent events delivered to a webhook and whether each succeeded.
Try: “Did our webhook receive yesterday's bounces?”
Read ·
list-webhook-eventsShows the exact payload sent to a webhook
Returns one webhook event with the payload Resend sent.
Try: “Show me the payload of the last failed event.”
Read ·
get-webhook-eventShows delivery attempts for a webhook event
Lists each attempt to deliver an event and what your endpoint returned.
Try: “Why did that webhook event fail?”
Read ·
list-webhook-event-attemptsRe-sends a webhook event to your endpoint
Queues another delivery of a webhook event, like the dashboard's Replay button.
Try: “Replay the failed bounce event.”
Write ·
replay-webhook-eventReplaces a webhook's signing secret
Issues a new signing secret for a webhook; update your app to match.
Try: “Rotate the signing secret on our webhook.”
Write ·
rotate-webhook-signing-secretLists your Resend API keys
Shows API key names and when they were created.
Try: “Which API keys do we have?”
Read ·
list-api-keysCreates a new API key
Creates an API key; the token is shown only once.
Try: “Create a sending-only API key for our staging app.”
Write ·
create-api-keyRenames an API key
Changes an API key's name.
Try: “Rename the key prod to production.”
Write ·
update-api-keyDeletes an API key
Removes an API key, so anything using it stops working.
Try: “Delete the old test API key.”
Delete ·
remove-api-keyLists apps signed in to your Resend team
Shows the apps you have authorised to act for your team.
Try: “Which apps have access to our Resend account?”
Read ·
list-oauth-grantsRevokes an app's access to your team
Removes an authorised app's access.
Try: “Revoke access for the old Zapier connection.”
Delete ·
revoke-oauth-grantLists recent API requests on your account
Shows API request logs to review activity or debug errors.
Try: “Show failed API requests from the last hour.”
Read ·
list-logsShows one API request with its full request and response
Returns a logged API request with its request and response bodies.
Try: “Show me the full error for that failed send.”
Read ·
get-logShows your usage against plan limits
Reports emails sent and received, contacts, broadcasts and other usage against your quota.
Try: “How close are we to this month's sending limit?”
Read ·
get-usageUsed by the assistant behind the scenes
Reads a broadcast or template's editor content
Fetches the visual editor content of a broadcast or template so it can be edited.
Try: “Read the newsletter's editor content.”
Read ·
get-tiptap-json-contentShows the assistant as present in the dashboard editor
Displays an agent avatar in the Resend editor while it works on a draft.
Try: “Join the editor while you update the newsletter.”
Write ·
connect-to-editorLeaves the dashboard editor
Removes the agent avatar from the Resend editor when done.
Try: “Leave the editor.”
Write ·
disconnect-from-editor
Read from the source code
Pros and cons
Good
- Made and maintained by Resend.
- Hosted version with Resend sign-in, so there is nothing to install.
- Covers nearly all of Resend, including inboxes, broadcasts, templates, domains, webhooks and logs.
- Official ChatGPT and Codex plugin as well as setup docs for most coding assistants.
- Can run locally with the same open-source code if you prefer.
- Sign-in access can be revoked from your Resend Team settings.
Watch out
- No read-only mode; the closest is a sending-only API key.
- Sends and broadcasts go out immediately, with no draft step unless you use inbox drafts.
- Broadcasts need a segment; sending to all contacts is not supported yet.
- The local server needs Node.js 22 or later.
Permissions
high risk · 5 things to watch
High risk
The assistant can email your contacts and delete domains, templates and API keys, and every send goes out right away. Keep tool approval on, and connect with a sending-only API key if sending is all you need.
What it can do
- Read your data
- Create and change things
- Delete things
- Read-only mode
Watch out for
It sends real email to real people
Send, reply, forward and broadcast tools email recipients the moment they run, including whole segments. Read the recipients before you approve a send. github.com
It can delete domains, contacts and API keys
With sign-in or a full-access key it can remove domains, contacts, templates, webhooks and API keys. The assistant is told to confirm first, but keep tool approval on. github.com
Local mode can attach any file on your disk
On the local server, attachments and contact imports can read any file unless you limit them to chosen folders. Set the allowed folders option. github.com
A sending-only key limits the damage
Resend keys can be limited to sending, and to a single domain. Use one when you only need the assistant to send. resend.com
You can revoke sign-in access
Connections made by signing in show up in your Resend Team settings, where you can revoke them. resend.com
Security advisories
No published security advisories as of Nov 1, 2026.
Technical details
| Turning on read-only | No read-only switch. To limit it, connect with a Resend API key created with sending_access (optionally restricted to one domain) instead of OAuth or a full_access key. |
|---|---|
| Talks to | Resend API |
| Sign-in and keys | Hosted: OAuth grant held by Resend, revocable in Team settings. Local: RESEND_API_KEY in your client config. |
| Scopes |
|
Alternatives
Use Resend's own server: it is hosted, signs you in with your Resend account and covers far more than the community options. The others only make sense if you need a specific add-on, such as extra deliverability checks.
| Server | Official | Runs | Sign-in | Can change things | Weekly downloads |
|---|---|---|---|---|---|
| Resend MCP ServerThis page | Official | HostedLocal | Account | Yes | – |
| Resend Email MCP | Community | Local | – | – | 106/wk |
| mcp-send-email | Community | Local | – | – | – |
Questions
What is the Resend MCP server URL?
https://mcp.resend.com/mcp. Your assistant opens a browser so you can sign in to Resend and approve access. Where a browser sign-in is not possible, send a Resend API key as a Bearer token instead.
Is the Resend MCP server free?
Yes, the server costs nothing and is open source. The emails it sends count toward your Resend plan like any other send.
Should I use the hosted server or run it myself?
Use the hosted server unless you have a reason not to. It needs no install and uses your Resend sign-in. Run it yourself if you want to use an API key only, or to control which local folders it can attach files from.
Can I stop it from deleting things?
There is no read-only mode. Connect with a Resend API key that has sending access only, which blocks the management tools, and keep tool approval on in your assistant.
Do I need a verified domain?
Yes, to send from your own address. The assistant can add the domain, show you the DNS records and check verification for you.
Can it read and reply to incoming email?
Yes. It can read received emails and work with Resend inboxes, including threads, labels and drafts. Replies and forwards send immediately.
Does it work in ChatGPT?
Yes, through Resend's official plugin for ChatGPT and Codex. Search for Resend under Plugins, connect, and sign in with your Resend account.
Can it send a broadcast to all my contacts?
Not yet. Broadcasts need a segment, so put your contacts in one first.
How do I add it to Claude or Cursor?
Use the steps in the install box above. The hosted option only needs the server URL and a Resend sign-in.
Examples
Send a transactional email without leaving the conversation
SourceFind out why an email bounced from the logs
Why did the welcome email to sam@example.com bounce yesterday?
Draft, schedule and send a broadcast to a segment
SourceCheck a sending domain's status and DNS records
Is mail.example.com verified? Show me any DNS records still missing.
Information
updated Nov 1, 2026
- Publisher
- Resend (official)
- Package
resend-mcp- Registry
- npm
- Endpoint
https://mcp.resend.com/mcp- Transport
- stdio, Streamable HTTP
- Auth
- OAuth
- Version
- 2.27.2
- License
- MIT
- Last commit
- Oct 30, 2026
Other Resend MCP servers
Sources
Docs, issue trackers and discussions this page is built from. Issues, quotes and findings above link to their own source.
Show all 8Hide
- github.com · github.com
- resend.com · resend.com
- resend.com · resend.com
- github.com · github.com
- resend.com · resend.com
- github.com · github.com
- github.com · github.com
- registry.npmjs.org · registry.npmjs.org