Skip to content

Connect Resend to Claude: Manage Domains, Templates, and Delivery

Learn how to connect Resend to Claude using Truto's managed MCP server. This guide covers setup, domain verification, contact management, and tool calling.

Uday Gajavalli Uday Gajavalli · · 9 min read
Connect Resend to Claude: Manage Domains, Templates, and Delivery

If you need to connect Resend to Claude to automate email infrastructure, orchestrate marketing campaigns, or debug delivery logs, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's tool calls and Resend's REST APIs. You can either build and maintain this infrastructure yourself, or use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL. If your team uses ChatGPT, check out our guide on connecting Resend to ChatGPT or explore our broader architectural overview on connecting Resend to AI Agents.

Giving a Large Language Model (LLM) read and write access to your production email infrastructure is an engineering challenge. You have to manage API key lifecycles, map Resend's nested JSON schemas to MCP tool definitions, and deal with exact rate limits. Every time an endpoint updates, you have to rewrite your server code, redeploy, and test the integration. This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Resend, connect it natively to Claude, and execute complex email operations using natural language.

The Engineering Reality of the Resend API

A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, the reality of implementing it against vendor APIs is painful. You are not just integrating "email" - you are integrating an infrastructure product with specific architectural quirks. Utilizing a managed MCP for Claude allows you to bypass these complexities by providing full SaaS API access without the standard security overhead.

If you decide to build a custom MCP server for Resend, you own the entire API lifecycle. Here are the specific challenges you will face:

Asynchronous Domain Verification Domain management in Resend is not a single API call. When you create a domain, the API returns a complex payload containing SPF, DKIM, and tracking CNAME records. These must be manually added to a DNS provider. The verification endpoint then initiates an asynchronous check. If you expose these raw parameters directly to Claude without context, the model will struggle to understand the dependency graph between domain creation, DNS propagation, and verification triggering.

Payload Asymmetry in Batch vs Single Sending The Resend API imposes strict structural differences depending on how you send emails. The single create_a_resend_email endpoint supports attachments and delayed delivery via scheduled_at. However, the bulk sending endpoint (resend_emails_bulk_create) explicitly drops support for attachments and scheduling. An LLM building a tool call will often hallucinate and try to pass a scheduled_at timestamp into a bulk payload, resulting in a 400 Bad Request. Your MCP layer must explicitly define these schema differences.

Strict Rate Limits and IETF Headers Resend enforces strict rate limits (e.g., 10 requests per second on base tiers). When an AI agent gets stuck in a loop or attempts to process a massive contact list sequentially, it will hit a 429 Too Many Requests error. Truto does not retry, throttle, or apply backoff on rate limit errors. Instead, when Resend returns a 429, Truto passes that error directly to the caller and normalizes the rate limit information into standardized IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). The caller (your LLM agent or framework) is strictly responsible for reading the ratelimit-reset header and implementing its own retry and backoff logic.

How to Generate a Resend MCP Server with Truto

Truto dynamically generates MCP tools from Resend's API documentation and OpenAPI schemas. The resulting MCP server is scoped to a single connected Resend workspace.

You can generate this server using either the Truto UI or the Truto API.

Method 1: Via the Truto UI

If you are setting this up manually for an internal Claude Desktop instance, the UI is the fastest path.

  1. Navigate to the integrated account page for your Resend connection in the Truto dashboard.
  2. Click the MCP Servers tab.
  3. Click Create MCP Server.
  4. Select your desired configuration. You can filter the server to only expose read tools, restrict it to specific tags (like contacts or domains), and set an expiration date.
  5. Copy the generated MCP server URL (e.g., https://api.truto.one/mcp/a1b2c3d4...).

Method 2: Via the Truto API

If you are dynamically provisioning workspaces for your own users, you should generate the MCP server programmatically. This approach follows our recommended 2026 architecture for generating MCP servers for SaaS users. Make a POST request to /integrated-account/:id/mcp.

curl -X POST https://api.truto.one/integrated-account/YOUR_ACCOUNT_ID/mcp \
  -H "Authorization: Bearer YOUR_TRUTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Resend Infrastructure Ops",
    "config": {
      "methods": ["read", "write"],
      "tags": ["domains", "emails", "webhooks"]
    },
    "expires_at": "2026-12-31T23:59:59Z"
  }'

The API provisions the underlying edge infrastructure and returns a payload containing the secure URL. This URL contains a cryptographic token that dictates exactly which Resend workspace the server queries. Keep this URL secure.

Connecting the MCP Server to Claude

Once you have your Truto MCP URL, you need to register it as a tool server in your AI client. You can do this via the Claude UI or via a manual configuration file.

Method A: Via the Claude UI

If you are using Claude Desktop or an enterprise workspace that supports UI-based custom connectors:

  1. Open Settings in Claude.
  2. Navigate to Integrations (or Connectors depending on your tier).
  3. Click Add MCP Server.
  4. Give the connection a name (e.g., "Resend Truto Layer").
  5. Paste the Truto MCP URL into the connection field and click Add.

Claude will immediately ping the /initialize endpoint, fetch the available Resend tools, and register them in the context window.

Method B: Via the Configuration File

For local development or headless deployments, you can add the server to your claude_desktop_config.json file. Because Truto uses Server-Sent Events (SSE) for remote MCP connections, you will use the official @modelcontextprotocol/server-sse transport.

{
  "mcpServers": {
    "resend-ops": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sse",
        "https://api.truto.one/mcp/YOUR_TRUTO_TOKEN"
      ]
    }
  }
}

Restart Claude Desktop. The model will parse the configuration, establish the JSON-RPC connection, and load the Resend tools.

Hero Tools for Resend Operations

Truto exposes the entirety of the Resend API as MCP tools. The following "hero tools" represent the most high-leverage operations for IT teams, DevOps, and marketing operations.

create_a_resend_domain

Creates a new sending domain. This tool is critical because it returns the exact DNS records (SPF, DKIM, tracking CNAME) that must be configured in your DNS provider before the domain can be verified.

"I need to spin up a new sending domain for 'updates.mycompany.com' in Resend. Create the domain, then format the required DNS records into a markdown table so I can hand them off to the IT team for Cloudflare configuration."

resend_domains_verify

Triggers the verification process for a specific domain. You must run this after the DNS records have propagated.

"The IT team just confirmed they added the DNS records for the 'updates.mycompany.com' domain. Get the domain ID and trigger the verification process. Let me know what the current status is after the verification call returns."

create_a_resend_broadcast

Creates a marketing broadcast. This tool defaults to a draft state. If you want to send it immediately, pass send: true. If you want to schedule it, pass both send: true and a valid ISO scheduled_at timestamp.

"Create a new broadcast campaign to the 'Q3 Webinar Attendees' segment. The subject should be 'Your recording is ready' and the sender should be hello@mycompany.com. Draft the HTML based on our standard webinar template, and schedule it to go out tomorrow at 9:00 AM UTC."

create_a_resend_contact

Adds a new contact to your Resend marketing audience. This tool accepts email, name fields, and a list of segment_id arrays to automatically categorize the user upon creation.

"Take this list of five emails from the conference scanner and add them as contacts in Resend. Make sure their first and last names are mapped correctly, and add all of them to the 'Enterprise Leads' segment."

list_all_resend_logs

Fetches paginated request logs for your Resend account. Truto handles the cursor normalization, providing a standard limit and next_cursor interface so the LLM can cleanly iterate through pages of logs during debugging.

"We had a spike in email bounces yesterday between 2 PM and 4 PM. Pull the Resend logs for that time period and look for any 4xx or 5xx response statuses. Summarize the endpoints that failed."

get_single_resend_emails_receiving_by_id

Retrieves a single inbound email. This returns the full payload including html, text, headers, and raw attachment data URLs, making it highly effective for AI agents tasked with processing inbound support or administrative mail.

"Retrieve the inbound email with ID 'e_12345'. Extract the text body and summarize the user's issue. If there are any attachments, list their filenames and content types."

To see the complete inventory of available Resend operations - including templates, webhooks, and custom tracking configurations - visit the Resend integration page.

Workflows in Action

Exposing tools is only the first step. The real power of an MCP server is orchestrating multi-step workflows. Here is how Claude combines these tools in the real world.

1. Provisioning a New Infrastructure Domain

DevOps engineers frequently need to spin up dedicated sending domains for new services. Claude can handle the initial setup and return a clean checklist.

"We are launching a new billing service. Create a sending domain in Resend for 'billing.acmecorp.com'. Once it is created, give me the exact DNS records I need to add to Route53. Do not trigger verification yet."

Execution flow:

  1. Claude calls create_a_resend_domain with name: "billing.acmecorp.com".
  2. The Resend API returns the domain ID and an array of records (TXT for SPF, TXT for DKIM, CNAME for tracking).
  3. Claude parses the raw JSON response and formats it into a human-readable table for the engineer.

2. Marketing Operations Automation

Marketing teams manage complex audience segmentation and delayed sends. Claude can handle the entire orchestration layer.

"Create a new contact segment called 'Churn Risk'. Add user1@example.com and user2@example.com to it. Then, draft a broadcast email targeting this segment with a discount offer. Schedule the broadcast to send next Tuesday at 10 AM."

Execution flow:

  1. Claude calls create_a_resend_segment to create 'Churn Risk'.
  2. Claude calls create_a_resend_contact for both emails, passing the newly created segment ID.
  3. Claude calls create_a_resend_broadcast with segment_id, send: true, and a scheduled_at timestamp calculated for next Tuesday.
  4. Claude returns a summary of the operations and the scheduled broadcast ID.

3. Debugging Delivery Failures

When a transactional email fails to reach a customer, IT support needs to audit the logs without opening the Resend dashboard.

"A user at 'admin@client.com' claims they never received their password reset email today. Check the Resend logs to see if we attempted to send it, and if it failed, tell me why."

Execution flow:

  1. Claude calls list_all_resend_logs to retrieve recent API requests.
  2. Claude filters the returned list for the POST /emails endpoint where the request body contains 'admin@client.com'.
  3. Claude identifies a log with a response_status of 403 or 422.
  4. Claude calls get_single_resend_log_by_id to retrieve the full response_body and explains the exact error (e.g., "Domain not verified" or "Rate limit exceeded") to the user.

Security and Access Control

Connecting an LLM to your production email infrastructure requires strict security boundaries. Truto provides four critical controls to limit blast radius:

  • Method Filtering (config.methods): Restrict an MCP server to only allow specific operation categories. Setting methods: ["read"] ensures the LLM can query logs and view contacts, but physically cannot send emails or delete domains.
  • Tag Filtering (config.tags): Scope access by functional area. You can create an MCP server restricted solely to the domains tag, keeping the LLM entirely walled off from marketing contacts and templates.
  • Enforced API Authentication (require_api_token_auth): By default, the Truto MCP URL acts as a bearer token. For higher security environments, setting this flag to true requires the connecting client to also pass a valid Truto API token in the Authorization header.
  • Time-to-Live (expires_at): Automatically revoke server access after a specific date. This is ideal for granting a contractor or temporary AI agent short-lived access to debug Resend logs without leaving a permanent backdoor.

Taking the Next Step

Integrating Resend with Claude transforms your AI model from a simple text generator into a capable infrastructure operator. Instead of manually clicking through the Resend dashboard to check DNS statuses, pull logs, or update contact segments, your engineers and marketing teams can execute complex operations through natural language.

By leveraging a managed infrastructure layer, you bypass the boilerplate of OAuth lifecycles, JSON schema mapping, and pagination normalization. You get a secure, filtered, and documented MCP server that connects natively to Claude in minutes.

FAQ

Does Truto automatically retry Resend rate limits?
No. Truto passes HTTP 429 errors straight through to the caller. Truto normalizes the upstream rate limit data into standard IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). Your AI agent is responsible for reading these headers and handling backoff.
Can I restrict the LLM to only read Resend logs without sending emails?
Yes. When creating the Truto MCP server, you can use method filtering (e.g., methods: ["read"]) to ensure the AI agent can only execute GET requests, preventing it from sending emails or modifying domains.
How do I add the Truto MCP URL to Claude Desktop?
Open the claude_desktop_config.json file and add an entry under mcpServers using the npx @modelcontextprotocol/server-sse command with your secure Truto MCP URL. Restart Claude to load the Resend tools.
Can Claude verify a Resend domain automatically?
Claude can trigger the verification process via the resend_domains_verify tool, but a human or external script must first physically add the provided SPF, DKIM, and CNAME records to your DNS provider.

More from our Blog