Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Resend MCP server

Vendor MCP
Open markdown

The Resend MCP connector routes your AI agent's tool calls to Resend's own MCP server through Scalekit. Each user connects their own Resend access token once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 137 tools.

Tools
137
What they doRead · write · destructive
57 · 56 · 2457 read56 write24 destructive
Users sign in with

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Resend MCP connection

    In AgentKit > Connections, create a Resend MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'resendmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Resend MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'resendmcp_get_automation',
    toolInput: { context: 'Retrieving a customer\'s recent orders to investigate a billing issue and help support determine the appropriate resolution.', llm_model: 'claude-opus-4-8' },
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user opens the link once and enters their Resend credentials there. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • resendmcp_get_automation**Purpose:** Get details of a specific automation (with its workflow) or list all automations.Read-only

    Get Automation

    **Purpose:** Get details of a specific automation (with its workflow) or list all automations. **Modes:** - With `id`: Returns full automation details including the workflow definition. - Without `id`: Lists all automations with optional status filter and pagination. **When to use:** - User asks "show me my automations" or "what automations do I have?" - User wants to inspect a specific automation's workflow - Before update-automation, to see the current workflow

    Inputs

    contextstringrequired
    Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution."
    llm_modelstringrequired
    The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.
    afterstring
    Cursor for forward pagination (for list mode).
    beforestring
    Cursor for backward pagination (for list mode).
    conversation_idstring
    Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.
    idstring
    Automation ID or Resend dashboard URL (e.g. https://resend.com/automations/<id>). If omitted, lists all automations.
    limitnumber
    Number of automations to retrieve (for list mode).
    statusstring
    Filter by status (for list mode only).one of enableddisabled
  • resendmcp_get_automation_runs**Purpose:** List runs for an automation, or get details of a specific run.Read-only

    Get Automation Runs

    **Purpose:** List runs for an automation, or get details of a specific run. **Modes:** - With `runId`: Returns detailed run info with step-by-step execution status, outputs, and errors. - Without `runId`: Lists runs for the automation with optional status filter. **When to use:** - User wants to see if an automation is working - User wants to debug a failed automation run - User asks "why did this automation fail?" or "show me recent runs" **Run statuses:** running, completed, failed, cancelled **Step statuses:** pending, running, completed, failed, skipped, waiting

    Inputs

    automationIdstringrequired
    The automation ID or Resend dashboard URL (e.g. https://resend.com/automations/<id>)
    contextstringrequired
    Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution."
    llm_modelstringrequired
    The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.
    afterstring
    Cursor for forward pagination (for list mode).
    beforestring
    Cursor for backward pagination (for list mode).
    conversation_idstring
    Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.
    limitnumber
    Number of runs to retrieve (for list mode).
    runIdstring
    Specific run ID to get details for. If omitted, lists all runs.
    statusstring
    Filter runs by status (for list mode only).one of runningcompletedfailedcancelled
  • resendmcp_get_broadcastRetrieve full details of a specific broadcast by ID or Resend dashboard URL (e.g.Read-only

    Get Broadcast

    Retrieve full details of a specific broadcast by ID or Resend dashboard URL (e.g. https://resend.com/broadcasts/<id>), including HTML and plain text content.

    Inputs

    broadcastIdstringrequired
    Broadcast ID or Resend dashboard URL (e.g. https://resend.com/broadcasts/<id>)
    contextstringrequired
    Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution."
    llm_modelstringrequired
    The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.
    conversation_idstring
    Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.
  • resendmcp_get_contactGet a contact by ID or email from Resend.Read-only

    Get Contact

    Get a contact by ID or email from Resend.

    Inputs

    contextstringrequired
    Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution."
    llm_modelstringrequired
    The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.
    conversation_idstring
    Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.
    emailstring
    Contact email address
    idstring
    Contact ID
  • resendmcp_get_contact_importGet the status and counts of a contact import by ID.Read-only

    Get Contact Import

    Get the status and counts of a contact import by ID. Use after create-contact-import to track progress (queued, in_progress, completed, failed).

    Inputs

    contextstringrequired
    Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution."
    idstringrequired
    Contact import ID
    llm_modelstringrequired
    The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.
    conversation_idstring
    Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.
  • resendmcp_get_contact_propertyGet a contact property by ID from Resend.Read-only

    Get Contact Property

    Get a contact property by ID from Resend.

    Inputs

    contactPropertyIdstringrequired
    Contact property ID
    contextstringrequired
    Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution."
    llm_modelstringrequired
    The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.
    conversation_idstring
    Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.
  • resendmcp_get_domainGet a domain by ID from Resend.Read-only

    Get Domain

    Get a domain by ID from Resend. Returns full domain details including DNS records needed for verification.

    Inputs

    contextstringrequired
    Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution."
    idstringrequired
    Domain ID
    llm_modelstringrequired
    The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.
    conversation_idstring
    Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.
  • resendmcp_get_domain_claimRetrieve the latest claim for a domain by its placeholder Domain ID (the domain_id from create-domain-claim).Read-only

    Get Domain Claim

    Retrieve the latest claim for a domain by its placeholder Domain ID (the domain_id from create-domain-claim). Returns claim status and the TXT record needed to prove ownership. Poll until status is "completed".

    Inputs

    contextstringrequired
    Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution."
    idstringrequired
    The placeholder Domain ID created by the claim
    llm_modelstringrequired
    The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.
    conversation_idstring
    Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.