Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the AssemblyAI MCP server

Vendor MCP
Open markdown

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

Tools
5
What they doRead · write · destructive
3 · 1 · 13 read1 write1 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 AssemblyAI MCP connection

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

    Scalekit credentials are available for AssemblyAI 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 = 'assemblyaimcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize AssemblyAI 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: 'assemblyaimcp_get_transcript',
    toolInput: { transcript_id: 'YOUR_TRANSCRIPT_ID' },
    })
    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
  • assemblyaimcp_get_transcriptFetch the current state of a transcript by id.Read-only

    Get AssemblyAI Transcript

    Fetch the current state of a transcript by id. Returns the full transcript when `status` is `completed`, an error message when `status` is `error`, or just the in-progress status (`queued` / `processing`) otherwise. Poll this tool every ~3 seconds after `submit_transcript` until you see `completed` or `error`.

    Inputs

    transcript_idstringrequired
    The transcript id returned by submit_transcript.
  • assemblyaimcp_summarize_transcriptGenerate a summary of a COMPLETED transcript using AssemblyAI's LLM Gateway.Read-only

    Summarize AssemblyAI Transcript

    Generate a summary of a COMPLETED transcript using AssemblyAI's LLM Gateway. First submit_transcript, then poll get_transcript until status=completed, then call this with the transcript_id. Choose a `style` or pass a `custom_prompt` for a tailored summary. For a CHAPTERED summary with timestamps/headlines, or decision-aware action items, use the `understand_transcript` tool (summarization / action_items features) instead — this tool is the freeform/custom-prompt option.

    Inputs

    transcript_idstringrequired
    The id of a completed transcript (from submit_transcript / get_transcript).
    custom_promptstring
    Instruction used when style='custom' (or to override the canned style prompt).
    stylestring
    Summary style. Use 'custom' together with custom_prompt for a tailored summary.one of bulletsparagraphheadlineaction_itemscustomdefault bullets
  • assemblyaimcp_understand_transcriptRun Speech Understanding features on an ALREADY-COMPLETED transcript without re-submitting the audio: translation, speaker_identification, custom_formatting, summarization (chaptered, with timestamps + headlines), and action_items.Read-only

    Run Speech Understanding on a Transcript

    Run Speech Understanding features on an ALREADY-COMPLETED transcript without re-submitting the audio: translation, speaker_identification, custom_formatting, summarization (chaptered, with timestamps + headlines), and action_items. First submit_transcript, then poll get_transcript until status=completed, then call this with the transcript_id. If the need is known before transcription, prefer passing speech_understanding to submit_transcript instead. speaker_identification (and translation's match_original_utterance) only work if the transcript was created with speaker_labels=true.

    Inputs

    speech_understandingobjectrequired
    Feature requests, e.g. { request: { translation: { target_languages: ['es'] } } }. Multiple features may be combined in one call.
    transcript_idstringrequired
    The id of a completed transcript (from submit_transcript / get_transcript).
  • assemblyaimcp_submit_transcriptSubmit a public audio or video URL to AssemblyAI for transcription.Write

    Submit AssemblyAI Transcript

    Submit a public audio or video URL to AssemblyAI for transcription. Returns immediately with a `transcript_id` and the current status (usually `queued`). The caller MUST then call `get_transcript` with the returned id in a loop (every ~3 seconds) until status becomes `completed` or `error`. Do not expect the transcript text from this tool — only the id. Enable `speaker_labels` whenever the user asks who said what or about speaker changes. Enable `sentiment_analysis` for per-sentence positive/negative/neutral (English only), `entity_detection` to extract named entities, and `redact_pii` to remove PII from the transcript text. These features cannot be retro-fitted to a finished transcript — re-submit with the flag set. For SUMMARIES do not set a flag here: after the transcript completes, call the `summarize_transcript` tool.

    Inputs

    audio_urlstringrequired
    Public http(s) URL to an audio or video file.
    audio_end_atinteger
    Stop transcribing at this offset, in milliseconds.
    audio_start_frominteger
    Start transcribing at this offset, in milliseconds.
    auto_highlightsboolean
    Extract key phrases. Adds a highlights section to get_transcript.
    content_safetyboolean
    Guardrail: detect sensitive content (hate speech, violence, drugs, …). Adds a content_safety section to the get_transcript response.
    content_safety_confidenceinteger
    Confidence threshold (25–100, default 50) for content_safety labels.
    custom_spellingarray
    Spelling corrections applied to the transcript.
    disfluenciesboolean
    Keep filler words ('um', 'uh') in the transcript.
    domainstring
    Domain add-on. 'medical-v1' enables Medical Mode (EN/ES/DE/FR only; separately billed; silently skipped with a warning for other languages).
    entity_detectionboolean
    Enable Entity Detection. Extracts named entities (people, organizations, locations, phone numbers, etc.) into the get_transcript response.default false
    filter_profanityboolean
    Guardrail: replace profanity in the transcript text with asterisks.
    format_textboolean
    Default true. Set false for raw, unpunctuated/unformatted verbatim text.
    iab_categoriesboolean
    Detect IAB topic categories. Adds a topics section to get_transcript.
    keyterms_promptarray
    Names/brands/domain terms to boost recognition (exact spelling). Up to 1000 terms on universal-3-5-pro, 200 on universal-2. Complementary with prompt.
    language_codestring
    Language code of the audio (e.g. 'en_us', 'es', 'fr'). Defaults to en_us.
    language_codesarray
    Languages for code-switching audio (must include 'en'), e.g. ['en','es']. universal-3-5-pro only.
    language_confidence_thresholdnumber
    Fail transcription if detected-language confidence is below this (0–1).
    language_detectionboolean
    Auto-detect the spoken language. Needs ≥15s of speech for reliable results.
    language_detection_optionsobject
    Options refining language_detection.
    multichannelboolean
    Transcribe each audio channel independently (speakers labeled '1A', '2A', …).
    promptstring
    Contextual DESCRIPTION of the audio (domain, scenario, or details — e.g. 'Cardiology consultation about chest pain'). Improves accuracy on Universal-3.5 Pro. NOT instructions: formatting/behavioral commands are ignored.
    punctuateboolean
    Default true. Set false for raw, unpunctuated/unformatted verbatim text.
    redact_piiboolean
    Enable PII redaction of the transcript text. Sensitive values are replaced before the text is returned. Configure with redact_pii_policies and redact_pii_sub.default false
    redact_pii_audioboolean
    Guardrail: also produce a redacted AUDIO file (PII beeped out). Retrieve the URL from get_transcript once completed; the link expires after ~24h. Requires redact_pii=true.
    redact_pii_audio_optionsobject
    Options for the redacted audio file (with redact_pii_audio=true).
    redact_pii_audio_qualitystring
    Format of the redacted audio file (default mp3).one of mp3wav
    redact_pii_policiesarray
    Which PII categories to redact when redact_pii is true (e.g. person_name, phone_number, email_address). Defaults to a common set if omitted.
    redact_pii_return_unredactedboolean
    Also return the ORIGINAL unredacted transcript alongside the redacted one. Opts into receiving sensitive data — only set when the user explicitly needs it.
    redact_pii_substring
    How redacted PII is substituted: 'entity_name' replaces with [PERSON_NAME] etc. (default), 'hash' replaces with #.one of entity_namehash
    redact_static_entitiesobject
    Literal find-and-replace redaction on top of PII policies: label → exact terms, e.g. {"INTERNAL_TOOL": ["Bearclaw"]}. Requires redact_pii=true.
    remove_audio_tagsstring
    Strip inline annotations: 'all' removes audio-event + speaker tags, 'speaker' only speaker cues.one of allspeaker
    sentiment_analysisboolean
    Enable Sentiment Analysis. English audio only; runs on the universal speech models. Adds a per-sentence sentiment (POSITIVE/NEUTRAL/NEGATIVE) with confidence and timestamps to the get_transcript response.default false
    speaker_labelsboolean
    Enable speaker diarization. Required if the user wants to know who said what, when speakers change, or per-speaker timestamps. Adds an `utterances` block to the eventual get_transcript response with start/end times per speaker.default false
    speaker_optionsobject
    Diarization hints; use with speaker_labels=true.
    speech_modelsarray
    Priority-ordered model list; first supported model runs, falls back to next. Default ['universal-3-5-pro','universal-2'] is right for almost all cases. Must not be empty — omit the field entirely to use the default.
    speech_thresholdnumber
    Guardrail: reject files whose spoken-audio fraction is below this (0–1); the transcript then completes with an error message. Needs ≥30s of audio.
    speech_understandingobject
    Run Speech Understanding features (translation, speaker_identification, custom_formatting, summarization, action_items) inline with transcription — results appear in get_transcript. For an ALREADY-COMPLETED transcript use the understand_transcript tool instead of re-submitting.
    summarizationboolean
    DEPRECATED / no effect. Summaries are now produced by the `summarize_transcript` tool after the transcript completes. Retained for compatibility only.default false
    temperaturenumber
    Sampling randomness 0–1. universal-3-5-pro only. Leave unset normally.
    webhook_auth_header_namestring
    Custom auth header name to send on the webhook request.
    webhook_auth_header_valuestring
    Custom auth header value to send on the webhook request.
    webhook_urlstring
    URL AssemblyAI POSTs to when the transcript finishes. Most agent flows should poll get_transcript instead — only set when the user runs their own webhook receiver.
  • assemblyaimcp_delete_transcriptPERMANENTLY delete a transcript and its associated data from AssemblyAI.Destructive

    Delete AssemblyAI Transcript

    PERMANENTLY delete a transcript and its associated data from AssemblyAI. Irreversible. Only call this when the user explicitly asks for deletion (e.g. compliance cleanup after processing) — never delete proactively.

    • Idempotent

    Inputs

    transcript_idstringrequired
    The id of the transcript to permanently delete.