OAUTH 2.0
MARKETING AUTOMATION
Journeys, data extensions, and every email, SMS, and push send live in Marketing Cloud. Salesforce Marketing Cloud 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);
// Salesforce Marketing Cloud tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["salesforcemarketingcloud"], toolNames: [
"salesforcemarketingcloud_address_email_validate",
"salesforcemarketingcloud_approval_item_create",
"salesforcemarketingcloud_approval_item_get"
] },
pageSize: 100,
});
const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "How did the winback journey perform last week?" }] });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);
// Salesforce Marketing Cloud tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["salesforcemarketingcloud"], toolNames: [
"salesforcemarketingcloud_address_email_validate",
"salesforcemarketingcloud_approval_item_create",
"salesforcemarketingcloud_approval_item_get"
] },
pageSize: 100,
});
const openai = new OpenAI();
const res = await openai.responses.create({
model: "gpt-5",
tools: tools.map((t) => t.openai),
input: "How did the winback journey perform last week?",
});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);
// Salesforce Marketing Cloud tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["salesforcemarketingcloud"], toolNames: [
"salesforcemarketingcloud_address_email_validate",
"salesforcemarketingcloud_approval_item_create",
"salesforcemarketingcloud_approval_item_get"
] },
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: "How did the winback journey perform last week?" }],
});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);
// Salesforce Marketing Cloud tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["salesforcemarketingcloud"], toolNames: [
"salesforcemarketingcloud_address_email_validate",
"salesforcemarketingcloud_approval_item_create",
"salesforcemarketingcloud_approval_item_get"
] },
pageSize: 100,
});
const agent = new Agent({
name: "salesforcemarketingcloud_agent",
model: "gemini-2.5-pro",
instruction: "Act as the marketing agent for the signed-in user.",
tools,
});
await agent.run("How did the winback journey perform last week?");// shared token
audit → bot_service_account
user_filter → broken
// scalekit
audit → user_abc
scope → enforced ✓