Circleback MCP

Live

OAUTH 2.0

TRANSCRIPTION

Transcription

Let your agent pull meeting notes, search transcripts, and track action items across Circleback as the person who attended the meeting.

  • Acts as the attendee. Every note read and action item update is attributed to the real user, not a shared assistant bot.
  • Tokens stay vaulted. Circleback OAuth credentials sit in an AES-256 vault, resolved per request, never in the prompt.
  • Scoped before every call. Workspace and meeting scopes enforced ahead of each API call, with a 90-day audit trail.
Circleback MCP
agent · Acme Q3
Run
What action items came out of my customer calls this week?
S
circleback_action_items_list
88ms
Circleback agent
7 open action items across 4 calls. Send pricing to Acme (due Fri), draft SOW for Globex, follow up on the security review, and schedule the Q3 kickoff.
Sources: 4 meetings, last 7 days
circlebackmcp
7 action items
18:29
Message Claude...

Tools your meeting agent reaches for on Circleback, scoped per user.

CALL ANY TOOL
List and read meeting notes, search transcripts, and track or update action items, each call scoped to the authenticated attendee's workspace access.
circleback_meetings_list
List meetings
Fetch a paginated list of meetings for the authenticated user, filtered by date range or participant.
Parameters
Name
Type
Required
Description
start_date
string
Optional
ISO date to list meetings from
end_date
string
Optional
ISO date to list meetings up to
limit
integer
Optional
Max meetings to return (default 25)
circleback_meeting_get
Get meeting
circleback_notes_get
Get meeting notes
circleback_transcript_get
Get transcript
circleback_action_items_list
List action items
circleback_action_item_update
Update action item
circleback_search
Search conversations
Build your Agent
The same per-user auth pattern wires into every agent framework.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { ChatOpenAI } from "@langchain/openai";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(process.env.SCALEKIT_ENV_URL, process.env.SCALEKIT_CLIENT_ID, process.env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["circlebackmcp"], toolNames: ["circleback_meetings_list", "circleback_notes_get", "circleback_action_items_list"] },
pageSize: 100,
});

const agent = createReactAgent({ llm: new ChatOpenAI({ model: "gpt-4o" }), tools });
await agent.invoke({ messages: [{ role: "user", content: "Summarise this week's customer calls" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const openai = new OpenAI();
const sk = new ScalekitClient(process.env.SCALEKIT_ENV_URL, process.env.SCALEKIT_CLIENT_ID, process.env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["circlebackmcp"], toolNames: ["circleback_meetings_list", "circleback_notes_get", "circleback_action_items_list"] },
pageSize: 100,
});

const res = await openai.responses.create({
model: "gpt-4o",
input: "List open action items from my calls",
tools,
});
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const anthropic = new Anthropic();
const sk = new ScalekitClient(process.env.SCALEKIT_ENV_URL, process.env.SCALEKIT_CLIENT_ID, process.env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["circlebackmcp"], toolNames: ["circleback_meetings_list", "circleback_notes_get", "circleback_action_items_list"] },
pageSize: 100,
});

const msg = await anthropic.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
tools,
messages: [{ role: "user", content: "Pull notes from my Acme call" }],
});
import { LlmAgent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(process.env.SCALEKIT_ENV_URL, process.env.SCALEKIT_CLIENT_ID, process.env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["circlebackmcp"], toolNames: ["circleback_meetings_list", "circleback_notes_get", "circleback_action_items_list"] },
pageSize: 100,
});

const agent = new LlmAgent({ name: "circleback_agent", model: "gemini-2.0-flash", tools });
await agent.run("What did we agree in yesterday's kickoff?");
Try these prompts
Paste any prompt into your agent to start working with Circleback meetings.
Recap & summarise
Copy the prompt
Copied
Summarise my customer calls from this week.
Copy the prompt
Copied
What were the key decisions in the Acme kickoff?
Copy the prompt
Copied
Give me the notes from yesterday's product sync.
Action items
Copy the prompt
Copied
List my open action items across all meetings.
Copy the prompt
Copied
Mark the pricing follow-up for Acme as done.
Copy the prompt
Copied
Reassign the SOW draft to Priya.
Search & recall
Copy the prompt
Copied
What did the customer say about the security review?
Copy the prompt
Copied
Find every meeting where we discussed renewal terms.
Copy the prompt
Copied
Pull the transcript passage where pricing came up.
SEE HOW AUTH WORKS
The user authorises Circleback once. Every later agent call uses their token with workspace scope enforced.
1
Authorize
Your user connects
Circleback MCP
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Circleback MCP
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Circleback MCP
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Circleback MCP
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other transcription connectors.
No items found.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
Other connector libraries treat auth as a demo afterthought. Meeting notes and transcripts need real per-user attribution.
01.
Shared tokens break per-user analytics
A shared Circleback token looks fine in a demo. In production every notes read and action-item update logs as one service account, so you lose track of who acted. Scalekit resolves the real attendee's credential per call.
// shared token
update → assistant_bot

// scalekit
update → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Circleback today. Others tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Circleback as the user or as a shared key?
As the user. Scalekit resolves the authenticated attendee's own Circleback credential at request time, so every notes read, transcript pull, and action-item update is attributed to them rather than a shared assistant bot.
Where is the Circleback token stored?
In an AES-256 encrypted vault, namespaced per tenant. Tokens are fetched only at the moment of a tool call, refreshed automatically before expiry, and revocable from a single dashboard, never exposed to the model or the prompt.
Can I limit what the agent is allowed to do in Circleback?
Yes. Pass a toolNames filter to listScopedTools to expose only the actions you want, for example read-only notes and search without action-item writes. Scalekit also runs a scope check before each API call.
What happens when a user revokes Circleback access?
The credential is invalidated at the next tool call, which fails closed rather than falling back to a shared token. Other users are unaffected, and the revocation is recorded in the audit trail.
Can the agent search across every meeting or only ones I attended?
Only meetings the authenticated user can access. Because the search runs with their own credential, results are limited to their workspace and the conversations they were part of, so nothing leaks across users or tenants.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""circlebackmcp"": {
""url"": ""https://mcp.scalekit.com/circlebackmcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.circlebackmcp]
url = ""https://mcp.scalekit.com/circlebackmcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""circlebackmcp"": {
""url"": ""https://mcp.scalekit.com/circlebackmcp"",
""type"": ""http""
}
}
}