BEARER TOKEN
TRANSACTIONAL EMAIL
Transactional email, broadcasts, and audience lists all run through Resend. Resend MCP gives your agent authenticated access scoped to the user who authorized it.
For more tools, view docs.
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
// Resend MCP tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["resendmcp"], toolNames: [
"resendmcp_add_contact_to_segment",
"resendmcp_add_suppression",
"resendmcp_batch_add_suppressions"
] },
pageSize: 100,
});
const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Did the invoice email to acme.com deliver?" }] });import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";
const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
// Resend MCP tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["resendmcp"], toolNames: [
"resendmcp_add_contact_to_segment",
"resendmcp_add_suppression",
"resendmcp_batch_add_suppressions"
] },
pageSize: 100,
});
const openai = new OpenAI();
const res = await openai.responses.create({
model: "gpt-5",
tools: tools.map((t) => t.openai),
input: "Did the invoice email to acme.com deliver?",
});import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";
const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
// Resend MCP tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["resendmcp"], toolNames: [
"resendmcp_add_contact_to_segment",
"resendmcp_add_suppression",
"resendmcp_batch_add_suppressions"
] },
pageSize: 100,
});
const anthropic = new Anthropic();
const msg = await anthropic.messages.create({
model: "claude-opus-4-6",
max_tokens: 1024,
tools: tools.map((t) => t.anthropic),
messages: [{ role: "user", content: "Did the invoice email to acme.com deliver?" }],
});import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";
const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
// Resend MCP tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["resendmcp"], toolNames: [
"resendmcp_add_contact_to_segment",
"resendmcp_add_suppression",
"resendmcp_batch_add_suppressions"
] },
pageSize: 100,
});
const agent = new Agent({
name: "resendmcp_agent",
model: "gemini-2.5-pro",
instruction: "Act as the messaging agent for the signed-in user.",
tools,
});
await agent.run("Did the invoice email to acme.com deliver?");// shared token
audit → bot_service_account
user_filter → broken
// scalekit
audit → user_abc
scope → enforced ✓