Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Speko MCP server

Vendor MCP
Open markdown

The Speko MCP connector routes your AI agent's tool calls to Speko's own MCP server through Scalekit. Each user signs in to Speko once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 146 tools.

Tools
146
What they doRead · write · destructive
69 · 62 · 1569 read62 write15 destructive
Users sign in with
OAuth app
Scalekit's or your own

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Speko MCP connection

    In AgentKit > Connections, create a Speko MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for Speko MCP server, so you don't need to register an OAuth app.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'spekomcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Speko MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'spekomcp_agent_access_overview',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • spekomcp_agent_access_overviewList OAuth client grants and product API keys for the current workspace control plane.Read-only

    Agent Access Overview

    List OAuth client grants and product API keys for the current workspace control plane. oauthGrants carry the scopes each connected client holds; apiKeys carry a revoked flag and lastUsedAt (null if never used). Pass an oauthGrants id to agent_access.oauth_grant.revoke to remove one. OAuth-user principals only.

    Inputs

    This tool takes no inputs.

  • spekomcp_agents_calls_listList recent calls for an agent.Read-only

    List Agent Calls

    List recent calls for an agent.

    Inputs

    agent_idstringrequired
    Agent id.
    cursorstring
    ISO cursor from the previous page.
    limitstring
    Maximum calls to return.
    sincestring
    Optional ISO lower-bound timestamp.
  • spekomcp_agents_config_structure_getRead the agent's LIVE system prompt back as a structured decision view — its goals, the rules it follows, and its conditional branches, plus a best-effort flow.Read-only

    Agents Config Structure Get

    Read the agent's LIVE system prompt back as a structured decision view — its goals, the rules it follows, and its conditional branches, plus a best-effort flow. Derived on demand, not stored. Returns status "empty" when the agent has no prompt yet.

    Inputs

    agent_idstringrequired
    Unique identifier of the Speko agent whose live system prompt to read back as a structured decision view, as returned by agents.create or agents.list.
  • spekomcp_agents_evals_listList evals for an agent.Read-only

    List Agent Evals

    List evals for an agent.

    Inputs

    agent_idstringrequired
    Agent id.
  • spekomcp_agents_evals_runs_listThe five most recent runs of ONE test case, newest first, each with the verdict in its result.Read-only

    Agents Evals Runs List

    The five most recent runs of ONE test case, newest first, each with the verdict in its result. Poll this after agents.evals.run to watch a case settle.

    Inputs

    agent_idstringrequired
    No description.
    eval_idstringrequired
    No description.
  • spekomcp_agents_evals_runs_suggest_fixAsk for a minimal system-prompt revision that would make a FAILED run pass.Read-only

    Agents Evals Runs Suggest Fix

    Ask for a minimal system-prompt revision that would make a FAILED run pass. The failures are extracted from the run itself, so you only need the run id. Read-only — it proposes, it does not deploy; pass the result to agents.apply_prompt_fix to ship it. Returns status "no_fix_needed" when the run has no failures.

    Inputs

    agent_idstringrequired
    Id of the agent that owns the eval run to analyze.
    run_idstringrequired
    Id of the specific eval run whose failures should be analyzed for a minimal system-prompt fix. Returns status "no_fix_needed" if the run has no failures.
  • spekomcp_agents_evals_suggest_prompt_fixAsk for a minimal system-prompt revision from failures you supply yourself, when the failures did not come from one stored run.Read-only

    Agents Evals Suggest Prompt Fix

    Ask for a minimal system-prompt revision from failures you supply yourself, when the failures did not come from one stored run. Prefer agents.evals.runs.suggest_fix when you have a run id. Read-only — it proposes, it does not deploy.

    Inputs

    agent_idstringrequired
    Unique identifier of the Speko agent whose failing scenarios you want a minimal prompt fix for, as returned by agents.create or agents.list.
    failuresarrayrequired
    1 to 20 scenario failures to derive a prompt fix from. Each entry needs the scenario name and the reason it failed; expected_behavior is optional context on what should have happened instead.