TR

Transcribe MCP Server for Audio, Video, Voice Memos

Transcribe audio, video, and voice memos with an MCP server that delivers fast, reliable transcripts for LLMs to access and analyze.

Quick Install
npx -y @transcribe-app/mcp-transcribe

Overview

The Transcribe MCP Server is a lightweight Model Context Protocol (MCP)–compatible service that ingests audio and video files (including short voice memos), produces fast machine transcripts, and exposes transcript resources for LLMs and other downstream systems to fetch and analyze. It standardizes media ingestion and transcript delivery so applications can request, poll, or receive callbacks for completed transcripts without having to manage model orchestration or storage details.

Built for integration into ML pipelines and agent systems, the server supports large files, configurable storage backends (local disk or S3), and multiple output formats (JSON, plain text, SRT/VTT). It is useful when you need reproducible, queryable transcripts as MCP resources that LLMs can reference as part of a larger context window, or when you want to attach rich metadata (timestamps, speaker labels, confidence) to media files in a consistent API.

Features

  • Fast transcript generation for audio, video, and voice memos
  • MCP-compliant resource endpoints for seamless LLM access
  • Pluggable storage backends: local filesystem or AWS S3
  • Support for chunked uploads and large-file streaming
  • Output formats: JSON, plain text, SRT (subtitles), VTT
  • Optional speaker diarization and timestamped word-level metadata
  • Webhook/callback support for asynchronous job completion
  • Configurable transcription model (local or cloud engines)
  • Basic job queue and retry logic for reliable processing

Installation / Configuration

Clone and run locally, or use Docker.

Using git + Node (example):

git clone https://github.com/transcribe-app/mcp-transcribe.git
cd mcp-transcribe
# install deps (example using npm)
npm install
# run (example)
npm run start

Docker:

# Build
docker build -t mcp-transcribe .

# Run with local storage
docker run -p 8080:8080 \
  -e PORT=8080 \
  -e STORAGE_DRIVER=local \
  -e STORAGE_PATH=/data \
  -v $(pwd)/data:/data \
  mcp-transcribe

# Or run with S3
docker run -p 8080:8080 \
  -e PORT=8080 \
  -e STORAGE_DRIVER=s3 \
  -e S3_BUCKET=my-bucket \
  -e S3_REGION=us-west-2 \
  -e AWS_ACCESS_KEY_ID=xxx \
  -e AWS_SECRET_ACCESS_KEY=yyy \
  mcp-transcribe

Example .env configuration:

PORT=8080
STORAGE_DRIVER=local        # or "s3"
STORAGE_PATH=/data          # for local
S3_BUCKET=your-bucket       # for s3
S3_REGION=us-west-2
TRANSCRIBE_MODEL=whisper    # or "cloud-model", "auto"
WEBHOOK_URL=https://example.com/callback
MAX_CONCURRENCY=4

Available Resources

The server exposes MCP-style resources that LLMs or apps can read and act upon. Common resource types include:

ResourceDescription
/uploadAccepts file uploads (multipart / streamed) and returns a media resource ID
/transcribeCreates a transcription job for an uploaded media resource
/transcripts/:idFetch a completed transcript (JSON, text, srt, vtt)
/jobs/:idJob status and metadata (pending, running, failed, done)
/webhooksConfigure callback endpoints for asynchronous notifications

Sample endpoints table:

  • POST /upload — Accept file and return { media_id, url, size }
  • POST /transcribe — Create job: { job_id, media_id, options }
  • GET /transcripts/:id — Retrieve transcript resource
  • GET /jobs/:id — Poll job status

Typical transcript JSON includes text, per-segment timestamps, speaker labels, and confidence scores.

API Examples

Upload a file (curl):

curl -X POST "http://localhost:8080/upload" \
  -F "file=@./voice_memo.m4a" \
  -F "title=Meeting memo"

Create a transcription job:

curl -X POST "http://localhost:8080/transcribe" \
  -H "Content-Type: application/json" \
  -d '{
    "media_id": "media_12345",
    "format": "json",
    "diarize": true,
    "language": "en",
    "callback_url": "https://my-app.example/webhook"
  }'

Poll for transcript:

curl "http://localhost:8080/transcripts/transcript_67890"

Example transcript response (abridged):

{
  "id": "transcript_67890",
  "media_id": "media_12345",
  "format": "json",
  "language": "en",
  "text": "Hello everyone, welcome to today's standup...",
  "segments": [
    {"start": 0.0, "end": 4.2, "text": "Hello everyone", "speaker": "spk_1"},
    {"start": 4.2, "end": 9.1, "text": "Welcome to today's standup", "speaker": "spk_2"}
  ],
  "status": "done"
}

Use Cases

  • LLM Context Augmentation: Convert long meeting recordings or podcasts into structured transcripts and attach them as MCP resources so LLMs can consume long-form content during reasoning tasks.
  • Search & Indexing: Index transcript segments with timestamps for full-text search, enabling “jump-to” playback in UIs.
  • Agent Workflows: In agent chains where decisions depend on meeting outcomes, post transcriptions as resources for downstream tools to analyze or summarize automatically.
  • Voice Notes Mobile App: Mobile apps upload short voice memos; server returns quick transcripts (and subtitles) for user-facing search, sharing, or automated tagging.
  • Compliance & Logs: Archive audio logs and transcripts to S3 and use speaker diarization and timestamps for audits or legal review.

Tips & Best Practices

  • For long files, enable chunked uploads and a cloud storage backend (S3) to avoid memory pressure.
  • Use webhook callbacks for asynchronous workflows instead of polling when possible.
  • Choose output format based on use: JSON for programmatic analysis, SRT/VTT for subtitle display.
  • Throttle concurrency and tune MAX_CONCURRENCY/env settings to match available transcription model capacity.

For source code, issues, and advanced configuration examples, see the project repository: https://github.com/transcribe-app/mcp-transcribe.