The official Resend adapter for Vercel Chat SDK turns email into a first-class channel for AI agents.
AI agents communicate through Slack, chat widgets, and SMS. Most of these channels are ephemeral. Messages disappear into feeds, threads get buried, and there's no real record of what happened.
Email is the one protocol that nearly everyone already uses, and conversations don't vanish. We built the official Resend adapter for Vercel Chat SDK to bring email into the Chat SDK ecosystem.
Prefer a quick video walkthrough?
Chat SDK is an open-source, TypeScript SDK for building chat bots across Slack, Microsoft Teams, Google Chat, Discord, and more. Write your bot logic once, deploy everywhere.
While Chat SDK already includes several default adapters, you can also use official community adapters like the one built by Resend.
Everyone has an inbox. No app install required. An agent that sends email can reach anyone, on any device, without asking them to sign up for anything.
Email is async in a way that fits how agents actually work. Most AI tasks take seconds or minutes to process, not milliseconds. Email doesn't expect an instant reply. The agent does the work and responds when it's done. The user reads it when they get to it.
And email has threading built in. Replies chain back to the original message, so you get a searchable history of the full conversation. If your agent handles a support case over multiple days, you can still find the thread six months later.
The @resend/chat-sdk-adapter package connects Resend to the Vercel Chat SDK. It's bidirectional: receive emails as chat messages via webhooks, send rich HTML emails back through the Chat SDK interface.
Email conversations are automatically threaded using RFC headers (Message-ID, In-Reply-To, References). Inbound emails are verified with Svix signatures to ensure authenticity. You can send styled HTML emails using React Email components, with plain text fallbacks.
The adapter is open source and MIT licensed.
Install the adapter and its dependencies:
pnpm add @resend/chat-sdk-adapter chat @chat-adapter/state-memory
Then wire it up to a Chat instance:
import { Chat } from "chat";import { MemoryStateAdapter } from "@chat-adapter/state-memory";import { createResendAdapter } from "@resend/chat-sdk-adapter";const resend = createResendAdapter({fromAddress: "bot@yourdomain.com",});const chat = new Chat({userName: "email-bot",adapters: { resend },state: new MemoryStateAdapter(),});chat.onNewMention(async (thread, message) => {await thread.subscribe();await thread.post(`Got your email: ${message.text}`);});
Check the docs for the full setup guide, or view the open source code.