OAUTH 2.1
BOARDS AND CARDS
Every board, card, and checklist your team tracks lives in Trello. Trello MCP gives your agent authenticated access scoped to the user who authorized it.
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);
// Trello MCP tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["trellomcp"], toolNames: [
"trellomcp_trello_read_board",
"trellomcp_trello_read_card",
"trellomcp_trello_read_checklist"
] },
pageSize: 100,
});
const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Which cards in the launch board are still unassigned?" }] });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);
// Trello MCP tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["trellomcp"], toolNames: [
"trellomcp_trello_read_board",
"trellomcp_trello_read_card",
"trellomcp_trello_read_checklist"
] },
pageSize: 100,
});
const openai = new OpenAI();
const res = await openai.responses.create({
model: "gpt-5",
tools: tools.map((t) => t.openai),
input: "Which cards in the launch board are still unassigned?",
});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);
// Trello MCP tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["trellomcp"], toolNames: [
"trellomcp_trello_read_board",
"trellomcp_trello_read_card",
"trellomcp_trello_read_checklist"
] },
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: "Which cards in the launch board are still unassigned?" }],
});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);
// Trello MCP tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["trellomcp"], toolNames: [
"trellomcp_trello_read_board",
"trellomcp_trello_read_card",
"trellomcp_trello_read_checklist"
] },
pageSize: 100,
});
const agent = new Agent({
name: "trellomcp_agent",
model: "gemini-2.5-pro",
instruction: "Act as the project management agent for the signed-in user.",
tools,
});
await agent.run("Which cards in the launch board are still unassigned?");// shared token
audit → bot_service_account
user_filter → broken
// scalekit
audit → user_abc
scope → enforced ✓