Diarize

Live

API KEY

TRANSCRIPTION

Transcription

Every audio recording, speaker-attributed transcript, and diarized segment your team processes lives in Diarize. Diarize MCP gives your agent authenticated access to transcription jobs scoped to the user who authorized it.

  • Acts as the user: Access and write actions stay tied to the Diarize account that authorized the agent.
  • Credentials stay vaulted: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: User permissions enforced. 90-day audit trail.
Diarize
agent · Acme Q3
Run
Transcribe this meeting and tell me who spoke the most.
S
diarize_transcribe
1.4s
Transcription agent
Transcript complete (41m 22s, 4 speakers). Sarah 38%, Marcus 29%, Jennifer 22%, Unknown 11%. 847 utterances, 94.2% confidence.
Sources: 1 audio file, 4 speakers, 41m 22s
diarizemcp
1 transcript
18:29
Message Claude...

Tools your transcription agent reaches for on Diarize, scoped per user.

CALL ANY TOOL
Submit audio for diarization, retrieve speaker-attributed transcripts, and query per-speaker segments.
diarize_create_transcription_job
Create Transcription Job
Submit a new transcription and diarization job for an audio or video URL (YouTube, X, Instagram, TikTok). Returns a job ID that can be used to check status and download results.
Parameters
Name
Type
Required
Description
url
string
Required
The URL of the audio or video content to transcribe (e.g. YouTube, X, Instagram, TikTok link)
language
string
Optional
Language code for transcription (e.g. 'en', 'es', 'fr'). Defaults to auto-detection if not provided.
num_speakers
integer
Optional
Expected number of speakers in the audio. Helps improve diarization accuracy.
schema_version
string
Optional
Optional schema version to use for tool execution
tool_version
string
Optional
Optional tool version to use for execution
diarize_download_transcript
Download Transcript
diarize_get_job_status
Get Job Status
Build your Agent
Drop the toolkit in, point it at the user, and your transcription agent can use Diarize from the first run.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { DynamicStructuredTool } from "@langchain/core/tools";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
import { z } from "zod";

const sk = new ScalekitClient(envUrl, clientId, clientSecret);

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["diarize"], toolNames: ["diarize_transcribe", "diarize_transcript_get", "diarize_transcripts_list"] },
pageSize: 100,
});

const lcTools = tools.map((t) => new DynamicStructuredTool({
name: t.tool.definition.name,
description: t.tool.definition.description,
schema: z.object({}).passthrough(),
func: async (args) => {
const { data } = await sk.tools.executeTool({
toolName: t.tool.definition.name,
identifier: "user_123",
params: args,
});
return JSON.stringify(data);
},
}));

const agent = createReactAgent({ llm, tools: lcTools });
import { ScalekitClient } from "@scalekit-sdk/node";
import OpenAI from "openai";

const sk = new ScalekitClient(envUrl, clientId, clientSecret);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["diarize"], toolNames: ["diarize_transcribe", "diarize_transcript_get", "diarize_transcripts_list"] },
pageSize: 100,
});

const llmTools = tools.map((t) => ({
type: "function",
function: {
name: t.tool.definition.name,
description: t.tool.definition.description,
parameters: t.tool.definition.input_schema,
},
}));

const resp = await openai.responses.create({
model: "gpt-4o", input: prompt, tools: llmTools,
});
import { ScalekitClient } from "@scalekit-sdk/node";
import Anthropic from "@anthropic-ai/sdk";

const sk = new ScalekitClient(envUrl, clientId, clientSecret);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["diarize"], toolNames: ["diarize_transcribe", "diarize_transcript_get", "diarize_transcripts_list"] },
pageSize: 100,
});

const llmTools = tools.map((t) => ({
name: t.tool.definition.name,
description: t.tool.definition.description,
input_schema: t.tool.definition.input_schema,
}));

const msg = await anthropic.messages.create({
model: "claude-sonnet-4-6", max_tokens: 1024,
tools: llmTools,
messages: [{ role: "user", content: prompt }],
});
import { Agent } from "@google/adk/agents";
import {
MCPToolset, StreamableHTTPConnectionParams,
} from "@google/adk/tools/mcp";

const toolset = new MCPToolset({
connectionParams: new StreamableHTTPConnectionParams({
url: "https://mcp.scalekit.com/diarize",
headers: { Authorization: `Bearer ${userScopedToken}` },
}),
});

const agent = new Agent({
name: "agent", model: "gemini-2.0-flash",
tools: await toolset.getTools(),
});
Try these prompts
Paste any prompt into your agent to start using Diarize.
Transcribe & retrieve
Copy the prompt
Copied
Transcribe audio at [URL].
Copy the prompt
Copied
Get the transcript for [transcript_id].
Copy the prompt
Copied
List all completed transcripts.
Copy the prompt
Copied
Show transcripts created this week.
Speaker analysis
Copy the prompt
Copied
Who spoke the most in transcript [id]?
Copy the prompt
Copied
Get all segments for speaker [speaker_id].
Copy the prompt
Copied
What was the total talk time per speaker?
Copy the prompt
Copied
Find moments where [speaker] mentioned [topic].
Pipeline & cleanup
Copy the prompt
Copied
List transcripts still processing.
Copy the prompt
Copied
Delete transcript [id] and its audio.
Copy the prompt
Copied
Which transcripts failed in the last 24 hours?
Copy the prompt
Copied
Batch transcribe: [URL1], [URL2], [URL3].
SEE HOW AUTH WORKS
Users authorize Diarize once. Their credentials stay vaulted, every call is checked, and every action is logged.
1
Authorize
Your user connects
Diarize
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
Diarize
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
Diarize
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
Diarize
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
Same per-user auth pattern across other transcription agents and MCP connectors. Working code, live demos, fork what fits.
SALES
Sales call prep agent
Pull Granola notes and Attio contact history to draft a pre-call brief before every sales meeting. Zero rep input.
SALES
Deal intelligence agent
Combine Gong, Attio, and Slack signals to surface deal risks and next-best actions. Updated after every call.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
Other connector libraries treat auth as a demo afterthought. Scalekit starts with user identity, scope enforcement, and audit.
01.
Transcripts attributed to the wrong account
A shared Diarize API key looks fine in a demo. In production, every transcription job and speaker segment is attributed to a service account. User-level quota and data isolation break. Scalekit resolves the user's key so jobs run under the right identity.
// shared API key
key = "diarize_shared_xxx"
audit → bot_service_account
quota_filter → broken

// scalekit · per-user
key = resolve(user_id)
audit → user_abc
scope → enforced ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Diarize 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 Diarize as the user or as a shared key?
As the user. Each workspace member authorizes once and Scalekit resolves their credential at request time. Audit logs attribute every action to that user, not a shared service account.
Where is the Diarize api key stored?
Can I limit what the agent is allowed to do in Diarize?
What happens when a user revokes Diarize access?
Are audio files stored on Diarize servers after transcription completes?
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"": {
""diarize"": {
""url"": ""https://mcp.scalekit.com/diarize"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.diarize]
url = ""https://mcp.scalekit.com/diarize""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""diarize"": {
""url"": ""https://mcp.scalekit.com/diarize"",
""type"": ""http""
}
}
}