OAUTH 2.0
PRODUCTIVITY
Microsoft 365 gives your agent each user's Outlook mail, calendar, contacts, and To Do tasks, plus Teams chats and meetings, OneDrive and SharePoint files, and Excel, Word, PowerPoint, and OneNote.
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);
// Microsoft 365 tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["microsoft365"], toolNames: [
"microsoft365_outlook_search_messages",
"microsoft365_outlook_find_meeting_times",
"microsoft365_onedrive_search_drive_items"] },
pageSize: 100,
});
const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Find a 30-minute slot tomorrow when Priya and I are both free" }] });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);
const openai = new OpenAI();
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["microsoft365"] }, pageSize: 100,
});
const res = await openai.chat.completions.create({
model: "gpt-5",
messages: [{ role: "user", content: "Find a 30-minute slot tomorrow when Priya and I are both free" }],
tools,
});
// Execute the tool call with the user's vaulted Microsoft 365 token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");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);
const anthropic = new Anthropic();
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["microsoft365"] }, pageSize: 100,
});
const msg = await anthropic.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Find a 30-minute slot tomorrow when Priya and I are both free" }],
tools,
});
// Tool call runs with the user's vaulted Microsoft 365 token
await sk.tools.executeTool(msg.content, "user_123");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);
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["microsoft365"] }, pageSize: 100,
});
const agent = new Agent({
name: "scheduling_agent",
model: "gemini-2.5-pro",
instruction: "Microsoft 365 tools scoped to this user",
tools,
});
await agent.run("Find a 30-minute slot tomorrow when Priya and I are both free");// shared token
audit → bot_service_account
// scalekit
audit → user_abc ✓