Speko MCP

Live

OAUTH 2.1

VOICE AGENTS

AI

Speko MCP gives your agent authenticated access to voice agents: create and deploy Speko agents, review calls and transcripts, run evals, and track pass rates as the signed-in user.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Speko MCP
agent · Acme Q3
Run
What is the eval pass rate for our support voice agent over the last 7 days?
S
spekomcp_agents_evals_trends_get
134ms
Voice ops agent
The support agent passed 86% of 42 eval runs in the last 7 days. The lowest day was Tuesday at 71%.
Sources: eval runs, last 7 days
spekomcp
42 eval runs
18:29
Message Claude...

Tools your voice ops agent reaches for on Speko, scoped per user.

CALL ANY TOOL
122 tools for voice agents on Speko: create, deploy, and roll back agents, read calls and transcripts, run evals and monitors, manage knowledge bases and phone numbers.
spekomcp_agent_access_oauth_grant_revoke
Agent access oauth grant revoke
Revoke one OAuth client grant for the current user and workspace. consentId is the id field from agent_access.overview's oauthGrants array, not the client id. Requires speko:credentials, a scope not used elsewhere on this surface.
Parameters
Name
Type
Required
Description
consentId
string
Required
The grant/consent id to revoke, taken from the "id" field of an entry in agent_access.overview's oauthGrants array. This is not the OAuth client id. Between 1 and 200 characters.
spekomcp_agents_calls_list
List agents calls
spekomcp_agents_config_structure_get
Get agents config structure
spekomcp_agents_create
Create agents
spekomcp_agents_delete
Delete agents
spekomcp_agents_duplicate
Duplicate agents
spekomcp_agents_evals_character_set
Set agents evals character
spekomcp_agents_evals_run
Run agents evals
spekomcp_agents_evals_update
Update agents evals
spekomcp_agents_graph_seed
Agents graph seed
spekomcp_agents_monitoring_results_list
List agents monitoring results
spekomcp_agents_tools_create
Create agents tools
spekomcp_agents_tools_get
Get agents tools
spekomcp_api_keys_list
List api keys
spekomcp_audio_synthesize
Audio synthesize
spekomcp_capabilities_search
Search capabilities
spekomcp_credits_balance_get
Get credits balance
spekomcp_gateway_legacy_keys_list
List gateway legacy keys
spekomcp_gateway_legacy_keys_revoke
Gateway legacy keys revoke
spekomcp_gateway_profiler_turn_trace_get
Get gateway profiler turn trace
spekomcp_gateway_provider_credentials_delete
Delete gateway provider credentials
spekomcp_gateway_relay_tts_preview_create
Create gateway relay tts preview
spekomcp_gateway_workloads_list
List gateway workloads
spekomcp_knowledge_bases_get
Get knowledge bases
spekomcp_migration_session_config_build
Migration session config build
spekomcp_operations_cancel
Cancel operations
spekomcp_phone_numbers_kyb_get
Get phone numbers kyb
spekomcp_phone_numbers_list
List phone numbers
spekomcp_scenarios_archive
Archive scenarios
spekomcp_scenarios_create
Create scenarios

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
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);

// Speko MCP tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["spekomcp"], toolNames: [
    "spekomcp_agents_list",
    "spekomcp_agents_calls_list",
    "spekomcp_agents_evals_run"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "What is the eval pass rate for our support voice agent this 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);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["spekomcp"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "What is the eval pass rate for our support voice agent this week?" }],
  tools,
});

// Execute the tool call with the user's vaulted Speko 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: ["spekomcp"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "What is the eval pass rate for our support voice agent this week?" }],
  tools,
});

// Tool call runs with the user's vaulted Speko 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: ["spekomcp"] }, pageSize: 100,
});

const agent = new Agent({
  name: "voice_ops_agent",
  model: "gemini-2.5-pro",
  instruction: "Speko MCP tools scoped to this user",
  tools,
});

await agent.run("What is the eval pass rate for our support voice agent this week?");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Speko MCP tool. Click to copy, paste into your agent, done.
Agents
Copy the prompt
Copied
List the voice agents in my workspace.
Copy the prompt
Copied
Show the full configuration and system prompt for the support agent.
Copy the prompt
Copied
Roll the support agent back to its previous version.
Calls and transcripts
Copy the prompt
Copied
List recent calls for the booking agent.
Copy the prompt
Copied
Get the transcript and per-turn latency for this session.
Copy the prompt
Copied
Start a test call against the support agent.
Evals and monitoring
Copy the prompt
Copied
Run the refund-request eval on the support agent.
Copy the prompt
Copied
Show the eval pass rate for the support agent over the last 30 days.
Copy the prompt
Copied
List production calls scored by online monitoring this week.
SEE HOW AUTH WORKS
Each user signs in to Speko once; Scalekit stores and refreshes their tokens. Tokens stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Speko 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
Speko 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
Speko 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
Speko 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 voice and AI connectors.
Engineering Teams
DevOps assistant agent
Polls GitHub for failing checks and stale PRs, opens Linear issues for the ones that need work, and posts a daily digest to Slack. It acts as the engineer, not a shared service account.
Support and Ops Teams
Support ticket automation agent
Fetches new Zendesk tickets, drafts a reply from Notion knowledge base articles, digests what it cannot answer to Slack, and archives the rest, acting as the support agent rather than a shared API key.
Support and Ops Teams
Support triage agent
Fetches new Zendesk tickets, classifies them by type and urgency, searches the Notion knowledge base for an answer, and routes what it cannot resolve to Slack. Every call runs on the support agent's own delegated OAuth.
Engineering Teams
Engineering standup agent
Pulls commits from GitHub and GitLab, tracks issue movement in Jira, and posts a per-engineer standup brief to Slack. Each engineer's activity is read on their own delegated OAuth.
Test other agents
See the same per-user auth pattern across other voice and AI connectors.
ENGINEERING
DevOps assistant agent
Poll GitHub for failing checks and stale pull requests, open Linear issues for the ones that need work, and digest to Slack.
SUPPORT
Support ticket automation (Google ADK)
Fetch, annotate, and archive Zendesk tickets with Notion context, digesting anything it cannot answer to Slack.
SUPPORT
Support triage agent
Classify new Zendesk tickets, search the Notion knowledge base for an answer, and route what it cannot resolve to Slack.
ENGINEERING
Engineering standup agent
Pull commits from GitHub and GitLab, track Jira issue movement, and post a per-engineer standup brief to Slack.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Speko token looks fine in a demo. In production every agent deploy looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared key
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Speko today. Ten connectors 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 Speko as the user or as a shared key?
As the user. Each user signs in to Speko once, and Scalekit stores and refreshes their tokens. Audit logs attribute every action to that user, not a shared service account.
Where is the Speko OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Speko?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example call, transcript, and eval reads without deploy, rollback, or delete. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Speko access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
What can the agent do in Speko?
122 tools across voice agents, versions, calls, sessions, transcripts, recordings, evals, monitors, knowledge bases, phone numbers, voices, the model gateway, usage, and billing. Of those, 69 read data, 38 write, and 15 delete, revoke, or roll back.
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"": {
""spekomcp"": {
""url"": ""https://mcp.scalekit.com/spekomcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.spekomcp]
url = ""https://mcp.scalekit.com/spekomcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""spekomcp"": {
""url"": ""https://mcp.scalekit.com/spekomcp"",
""type"": ""http""
}
}
}