assemblyai-mcp
assemblyai-mcp
An MCP server for the AssemblyAI API. Transcription, subtitles, speaker turns, word search and the LLM Gateway, exposed as tools an agent can call.
Written because I needed one and there wasn't one.
Install
Not on npm yet, so it installs from here. npm clones it and runs the build itself.
npm install -g github:karpovantonme/assemblyai-mcpClaude Code:
claude mcp add assemblyai -e ASSEMBLYAI_API_KEY=your-key -- npx -y github:karpovantonme/assemblyai-mcpAnything else that speaks MCP over stdio:
{
"mcpServers": {
"assemblyai": {
"command": "npx",
"args": ["-y", "github:karpovantonme/assemblyai-mcp"],
"env": { "ASSEMBLYAI_API_KEY": "your-key" }
}
}
}Keys come from the dashboard.
Tools
Tool | What it does |
| Upload a local audio or video file and get a URL |
| Transcribe audio or video from a URL. Waits for the result by default |
| Fetch a transcript by id, with its status if it is still running |
| Recent transcripts on the account |
| SRT or VTT for a completed transcript |
| Where words are spoken, with counts and timestamps |
| Who said what, when the transcript was made with |
| Answer a question from one or more transcripts, through the LLM Gateway |
| Summarise transcripts through the LLM Gateway |
LeMUR is gone, and this uses what replaced it
/lemur/v3/generate/* answers 404 Not found. The work moved to the LLM
Gateway, an OpenAI-shaped endpoint on its own host, and the two tools that
reason over transcripts go there. One difference matters to a caller: LeMUR
took transcript ids and fetched the text itself, the gateway takes text, so
this server fetches each transcript and caps it before building the prompt.
qwen3.5-4b-32k-fast is the default because it answers on a free account.
Pass model for anything else. A model your account cannot use comes back as
a 200 with the refusal inside the body, so it is read out and raised rather
than returned as an empty answer.
Three decisions worth knowing about
transcribe waits. An agent handed a job id and a queued status has to invent a polling loop, and it usually invents a bad one: fixed interval, no ceiling, no message when it gives up. Waiting is what the caller meant. Pass wait: false if you actually want the id. On timeout the error says the transcript is not lost and names the tool that will fetch it.
Long output is capped and says so. Transcripts run to hundreds of kilobytes. A tool that returns all of it spends the context window on text the agent is about to summarise anyway. Anything that can run long takes a limit and reports how much it trimmed, rather than silently truncating.
Milliseconds become seconds. The API speaks milliseconds, which is right for an API and wrong for a model writing an answer a person will read. Timestamps come out as seconds with one decimal.
Development
npm install
npm run build
npm testThe API client (src/api.ts) knows nothing about MCP and takes an injected fetch, so the tests run against a scripted transport with no network and no key.
All 9 tools have also been run end to end against the live API, installed from this repository rather than from the working copy: upload of a 4.3 MB file, transcription with speaker labels, SRT and VTT, word search, speaker turns, both gateway calls, and the listing. That run is what found the two defects the scripted tests could not: the word-search endpoint returns a JSON object under content-type: text/html, and LeMUR no longer exists. The tests cover what tends to break in a thin API wrapper: the key never reaching a URL, ids being escaped so a hostile id cannot reshape the path, non-JSON responses (subtitles arrive as text), error bodies surfacing the sentence the API wrote instead of a bare status, and the polling loop stopping on both completed and error.
Note for AssemblyAI
If any of this is useful to you, take it. It is MIT, and it is yours to fork, rename, absorb or throw away. If you would rather have it as a first-party server, I am happy to help get it there.
MIT.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/karpovantonme/assemblyai-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server