Add it if your agent sends or answers email through Resend and you would rather call tools than write API glue. It replaces custom wrapper code for the Resend API. Start with the hosted server and an OAuth login; restrict file access and reply rights before pointing it at an inbox strangers can write to.
What changed
The Resend MCP Server is Resend's official, MIT-licensed Model Context Protocol connector, available hosted at mcp.resend.com or as the resend-mcp npm package. It exposes Resend's email, inbox, domain, webhook and log APIs as tools, so MCP clients such as Claude Code, Cursor and Codex can send mail and work inbox threads.
Maker: Resend · Protocol: MCP · Auth: oauth
Compatible agents: Claude Code, Claude (web and desktop), Cursor, Codex, GitHub Copilot in VS Code, Windsurf, Warp, Gemini CLI, OpenCode, Devin
Required runtime: Node.js with npx (local server only), Any MCP client supporting Streamable HTTP (remote server)
About Resend MCP Server
The Resend MCP Server is how an agent talks to Resend over the Model Context Protocol (MCP), maintained by Resend on GitHub under the MIT licence and published to npm as resend-mcp. It is a skill rather than a product: it does nothing on its own, but once an agent registers it, the agent can call Resend as named tools instead of writing API code. The source registers 136 tools across emails, received emails, Inboxes, templates, contacts, broadcasts, automations, domains, suppressions, webhooks, logs, usage and API keys.
There are two ways to run it. Resend hosts the same code as a remote server reached over Streamable HTTP, where the client opens a browser for an OAuth login, or accepts a Resend key in the Authorization header on a headless machine. The local package runs through npx over stdio by default, or over HTTP on port 3000, with your key in an environment variable and an optional default sender and reply-to address.
Its most useful job for agents is the Inboxes set. An agent can create an inbox, list or search threads by text, sender, date or label, read a thread, reply or forward with attachments, keep drafts, and change the instructions and allowed actions of the inbox's built-in triage agent. Send and reply tools accept idempotency keys, so a retried call does not mail someone twice. Documented clients include Claude Code, Cursor, GitHub Copilot, Windsurf, Codex, Gemini CLI, OpenCode, Warp and Devin.
The server itself is free; what you pay is your Resend plan, and every message it sends or an inbox receives draws on that plan's email quota. Builders comparing agent email options can read our roundup of MCP servers, and those who want one connector for many apps rather than a single vendor can weigh Composio instead. Builders who need many agent inboxes on a dedicated service will find AgentMail ships its own hosted MCP.
The services it connects to are compared in Hokai's email services directory, and our guide to approval gates explains how to make an agent ask before it sends. Agents that also need a phone line are covered in what AgentPhone is for, and Postmark and Amazon SES are the send-only alternatives if you do not need inboxes.
Key Features
- Remote or local: Hosted at mcp.resend.com over Streamable HTTP with nothing to install, or run locally from the resend-mcp npm package over stdio or HTTP.
- Inbox tools: Thirty inbox tools cover threads, labels, drafts, replies, forwards and the inbox agent's settings.
- Idempotent sending: Send, reply, forward and draft tools take an idempotency key so a retry cannot mail the same person twice.
- File access guard: The --allowed-file-dirs option limits which folders attachments can be read from; over HTTP, local file reads are off unless you opt in.
- Account-wide coverage: Beyond mail, it manages domains, webhooks, suppressions, templates, broadcasts, automations, logs and usage from the same connection.
Use Cases
- Support triage agent: An agent lists unread threads in a support inbox, drafts replies for common questions, labels the rest and leaves them for a person.
- Agent with its own address: A personal or ops agent creates an inbox on your domain and receives tasks, approvals and updates there, replying in the same thread.
- Delivery debugging from the editor: A developer asks Claude Code or Cursor why a message bounced, and the agent reads email status, suppressions and API logs instead of the developer opening the dashboard.
- Transactional sends from a coding session: An agent scaffolding an app verifies a domain, creates a template and sends a test email without leaving the IDE.
Install
claude mcp add --transport http resend https://mcp.resend.com/mcp
Requirements
- A Resend account (Free works), with a verified domain before sending to anyone else
- For the remote server: an MCP client that supports Streamable HTTP, then an OAuth login in the browser
- For headless or CI use: a Resend API key passed as a Bearer token or as RESEND_API_KEY
- For Inboxes: a domain with receiving enabled, or inbox forwarding set up
Actions
Send Email
Sends one transactional email to up to 50 recipients now or at a scheduled time.
{
"tool": "send-email",
"arguments": {
"to": ["ops@example.com"],
"subject": "Nightly report ready",
"text": "The report finished at 02:00."
}
}to(array) — required: Recipient addresses, 1 to 50.subject(string) — required: Subject line.text(string) — required: Plain text body.html(string): HTML body; the text body must also be provided.cc(array): CC addresses; the schema tells the agent to ask the user rather than invent them.bcc(array): BCC addresses; the agent must ask the user for them.scheduledAt(string): When to send instead of now.attachments(array): Files from a local path, URL or base64 content.tags(array): Name and value tags for tracking.topicId(string): Subscription topic for topic-based sending.headers(object): Custom email headers.idempotencyKey(string): Key that stops a retried call from sending twice.from(string): Sender address; required when no default sender is configured.
Create Inbox
Creates an inbox at an address on a domain verified for receiving, or one fed by forwarding.
{
"tool": "create-inbox",
"arguments": {
"emailAddress": "agent@example.com",
"name": "Ops agent"
}
}emailAddress(string) — required: The inbox address on one of your domains.name(string): Display name for the inbox, up to 64 characters.forwarding(boolean): Use forwarding from an existing mailbox instead of receiving on the domain.fromName(string): Sender name shown on mail sent from the inbox.
List Inbox Threads
Lists the conversations in one inbox, filtered exactly by folder, label and read state.
{
"tool": "list-inbox-threads",
"arguments": {
"read": false,
"limit": 20,
"inboxId": "inb_support_01"
}
}inboxId(string) — required: The inbox to read.folders(array): Folders such as inbox, archive, spam or trash.labels(array): Label filters, exact match.read(boolean): Only read or only unread threads.limit(number): Page size.after(string): Cursor for the next page; cannot be combined with before.before(string): Cursor for the previous page.
Search Inbox Threads
Finds threads in one inbox by text, people, attachments and dates.
{
"tool": "search-inbox-threads",
"arguments": {
"query": "refund",
"hasAttachment": true,
"inboxId": "inb_billing_02"
}
}inboxId(string) — required: The inbox to search.query(string): Free-text search.from(string): Sender filter.to(string): To-recipient filter.cc(string): CC-recipient filter.bcc(string): BCC-recipient filter.hasAttachment(boolean): Only threads with attachments.startDate(string): Earliest date.endDate(string): Latest date.limit(number): Maximum results.
Reply to Inbox Thread Email
Sends a real reply from the inbox address to one message in a thread, or to everyone on it.
{
"tool": "reply-to-inbox-thread-email",
"arguments": {
"threadId": "thr_123",
"emailId": "em_456",
"inboxId": "inb_sales_04",
"text": "Thanks, your refund is approved.",
"idempotencyKey": "refund-thr_123"
}
}inboxId(string) — required: The inbox the thread belongs to.threadId(string) — required: Thread ID.emailId(string) — required: The message being answered.html(string): HTML reply; html or text is required.text(string): Plain text reply; html or text is required.subject(string): Override the reply subject.cc(array): Extra CC addresses.bcc(array): Extra BCC addresses.replyAll(boolean): Reply to everyone on the message.attachments(array): Attachments from base64 content or a URL.headers(object): Custom headers.idempotencyKey(string): Prevents a duplicate reply on retry.
Update Inbox Agent
Changes the instructions, tone and allowed actions of an inbox's built-in triage agent.
{
"tool": "update-inbox-agent",
"arguments": {
"instructions": "Answer refund questions yourself. Escalate legal threats.",
"actions": ["draft_reply", "add_labels"],
"inboxId": "inb_ops_03"
}
}inboxId(string) — required: The inbox whose agent you configure.instructions(string): How the agent should handle mail, up to 4,000 characters.tone(string): concise_professional, concise_casual, expanded_professional or expanded_casual.actions(array): Replaces the whole set of actions the agent may take.
List Received Emails
Lists inbound emails received on your domains through receiving, outside Inboxes.
{
"tool": "list-received-emails",
"arguments": { "limit": 10 }
}limit(number): How many received emails to return.after(string): Pagination cursor: return emails after this ID.before(string): Pagination cursor: return emails before this ID.
How to Invoke
Exposed as MCP tools (send-email, create-inbox, list-inbox-threads, search-inbox-threads, reply-to-inbox-thread-email and 131 more) that the agent calls by name once the remote or local server is registered.
Pricing
The server is free and MIT-licensed, whether hosted by Resend or run locally. Usage is billed through your Resend plan: messages it sends, and mail its inboxes receive, count against that plan's monthly email quota.
Strengths
- OAuth login on the hosted server means no API key has to be pasted into a chat client.
- Inbox tools give an agent stored threads to read, which most email MCP servers lack because their vendors do not store mail.
- The README documents setup for ten clients, so most coding and chat agents work without guesswork.
Weaknesses
- With well over a hundred tools, a client that loads them all spends context on tools the agent will never call.
- Tool descriptions steer the model, but nothing in the server stops a prompt-injected agent from replying to whatever an inbound email asks.
- It only reaches Resend; an agent that also needs Gmail or Outlook needs another connector.
Frequently Asked Questions
What does the Resend MCP Server cost to run?
Nothing in itself: the code is MIT-licensed and Resend hosts the remote server at no charge. You pay for your Resend plan, and everything the agent sends, plus everything its inboxes receive, uses that plan's email quota. On the Free plan that quota is small enough for a test agent, not a busy one.
Which agents and MCP clients can use the Resend MCP Server?
Its README gives step-by-step setup for ten clients, from Anthropic's Claude apps and Claude Code to OpenAI's Codex, Google's Gemini CLI and Cognition's Devin. Any client that speaks Streamable HTTP can use the hosted server, and any that launches stdio servers can run the local package. Agent frameworks that load MCP servers can use it the same way.
What should you use instead of the Resend MCP Server?
AgentMail runs its own hosted MCP server for its agent inboxes, which suits fleets of agent addresses. Postmark publishes an official MCP server with 24 annotated tools for sending and delivery diagnostics, but no inbox. Composio is the choice when an agent needs Gmail, Slack and many other apps through one connector.
Is the Resend MCP Server safe to point at a public inbox?
Only with limits. Mail from strangers can carry instructions aimed at your agent, and the server will send whatever the agent decides, so restrict which actions the agent may take and review replies to unknown senders. Set --allowed-file-dirs on a local server so an injected instruction cannot attach files from elsewhere on disk.
How do you connect the Resend MCP Server to Claude Code?
Add the hosted server with the install command, then run /mcp in Claude Code and pick resend to finish the OAuth login in your browser. On a server or in CI, pass a Resend API key as a Bearer header instead. For the local version, run npx -y resend-mcp with RESEND_API_KEY set.
Top Alternatives
- Composio: Pick the Resend MCP Server for deep Resend and inbox control; pick Composio when one agent needs many apps through a single connector.
Hokai guides that mention Resend MCP Server
- Best Email APIs for AI Agents in 2026: Inbox or Webhook?: Six email APIs for AI agents compared: which give an agent a real inbox, what 10,000 emails each way cost, free-plan catches, retention and safety controls.