Skip to main content
Glama

Video Transcript MCP Server

A Model Context Protocol server for video/audio transcription with multi-platform support.

Features

  • Three-tier transcription strategy: Subtitle extraction first (zero cost) → Whisper local transcription (offline free) → Mini-program guidance for closed platforms

  • 1000+ platform support via yt-dlp: YouTube, Bilibili, Douyin, Kuaishou, TikTok, and more

  • Long video handling: Auto-split by 30-minute segments (configurable) with checkpoint resume

  • Chinese ASR optimization: Bilibili AI subtitles, HuggingFace mirror, SenseVoice/Paraformer ready

  • Sync & Async modes: Direct results for short videos, task polling for long videos

  • Structured output: Pydantic-validated results with timestamps, segments, and metadata

Related MCP server: MCP Video Extraction Plus

Quick Start

Install

pip install video-transcript-mcp

# With Whisper support
pip install 'video-transcript-mcp[whisper]'

# With dev tools (MCP Inspector, testing)
pip install 'video-transcript-mcp[dev]'

Run

# Direct run
video-transcript-mcp

# Or with uvx (no install needed)
uvx video-transcript-mcp

# Debug with MCP Inspector
mcp dev video_transcript_mcp.server:mcp

Prerequisites

The server relies on external tools for audio processing:

# Install yt-dlp (video download + subtitle extraction)
pip install yt-dlp

# Install FFmpeg (audio splitting + format conversion)
brew install ffmpeg        # macOS
sudo apt install ffmpeg    # Ubuntu/Debian

# Install faster-whisper (local transcription)
pip install faster-whisper

MCP Client Configuration

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "video-transcript": {
      "command": "uvx",
      "args": ["video-transcript-mcp"]
    }
  }
}

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "video-transcript": {
      "command": "uvx",
      "args": ["video-transcript-mcp"]
    }
  }
}

Trae

Add to Trae MCP settings:

{
  "mcpServers": {
    "video-transcript": {
      "command": "python3",
      "args": ["-m", "video_transcript_mcp.server"]
    }
  }
}

Claude Code

claude mcp add video-transcript -- uvx video-transcript-mcp

Tools

transcribe_url

Transcribe a video from URL using the three-tier strategy.

# Short video (sync mode - direct result)
transcribe_url(url="https://www.youtube.com/watch?v=xxxxx")

# Long video (async mode - returns task_id)
transcribe_url(
    url="https://www.bilibili.com/video/BVxxxxx",
    async_mode=True
)
# Then poll:
get_transcript_status(task_id="abc12345")

Parameters:

Parameter

Type

Default

Description

url

str

required

Video URL

model

str

large-v3-turbo

Whisper model

language

str

zh

Language code

cookies_browser

str?

null

Browser for cookies

skip_subtitles

bool

false

Skip to Whisper directly

segment_minutes

int

30

Segment length for long video splitting. Increase for 1h+ videos

async_mode

bool

false

Return task_id for polling

transcribe_file

Transcribe a local audio/video file.

# Short file (sync mode)
transcribe_file(file_path="/path/to/audio.mp3")

# Long file (1h+) with larger segments
transcribe_file(
    file_path="/path/to/lecture.mp4",
    segment_minutes=60,
    async_mode=True
)

get_transcript_status

Poll the status of an async transcription task.

get_transcript_status(task_id="abc12345")
# Returns: {status: "completed", progress: 1.0, result: {...}}

list_transcripts

List all completed transcripts.

list_transcripts()
# Returns: [{task_id, title, platform, method, duration, ...}]

Three-Tier Transcription Strategy

URL Input
    │
    ├─ Tier 1: Subtitle Extraction (zero cost, fastest)
    │   ├─ YouTube: zh-Hans, zh-CN, zh, en
    │   ├─ Bilibili: ai-zh (AI subtitles)
    │   └─ Others: zh-CN, zh, en
    │
    ├─ Tier 2: Whisper Transcription (offline, free)
    │   ├─ Download audio via yt-dlp
    │   ├─ Split by 30-min segments (configurable, long video)
    │   ├─ Transcribe each segment with faster-whisper
    │   ├─ Global timestamp concatenation
    │   └─ Checkpoint resume support
    │
    └─ Tier 3: Mini-Program Guidance (closed platforms)
        ├─ Xiaohongshu (小红书)
        └─ WeChat Video (视频号)

Environment Variables

Variable

Default

Description

HF_ENDPOINT

(unset)

Set to https://hf-mirror.com for China network optimization

HF_HUB_DISABLE_XET

1

Disable Xet storage (avoids download errors)

TRANSCRIPT_OUTPUT_DIR

~/.video-transcript-mcp/output

Output directory

Supported Platforms

Platform

Subtitle Extraction

Whisper Fallback

Notes

YouTube

Auto-subs + manual subs

Bilibili

AI subtitle (ai-zh), requires cookies for subtitle access

Douyin

Kuaishou

TikTok

Weibo

Xiaohongshu

Mini-program guidance

WeChat Video

Mini-program guidance

Local files

N/A

mp3, mp4, wav, m4a, flac

Podcast URLs

Direct audio download

Community

Join our AI Tool Monetization Circle (AI 工具变现实战圈) on Knowledge Planet (知识星球):

  • Weekly MCP tutorials and real-world case studies

  • Deep-dive source code analysis of this project

  • AI tool monetization strategies and playbooks

  • 1-on-1 technical Q&A

Scan the QR code above or search "AI 工具变现实战圈" on Knowledge Planet to join.

License

MIT

Available Tools

4 tools
get_transcript_statusA

Check the status of an async transcription task.

Returns the task status, progress, and result (if completed). Poll this periodically until status is 'completed' or 'failed'.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask ID from transcribe_url or transcribe_file

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that the task is async, returns status/progress/result, and advises polling until terminal states. This is sufficient for a simple status-checking tool, though it doesn't mention potential errors or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise and front-loaded, with two sentences covering purpose, return value, and usage pattern. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description adequately explains purpose, return type, and when to call. It's complete enough for an agent to invoke correctly, though it doesn't detail the response structure beyond high-level fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides a clear description for task_id, and the description reinforces that it comes from transcribe_url or transcribe_file. With 100% schema coverage, the description doesn't add new parameter semantics, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks the status of an async transcription task. This distinguishes it from sibling tools that initiate transcription (transcribe_url/transcribe_file) or list transcripts (list_transcripts).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs to poll periodically until status is 'completed' or 'failed', providing clear usage context. However, it doesn't explicitly say when not to use it versus listing or initiating, though the sibling names make those exclusions obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_transcriptsA

List all completed transcripts.

Returns a list of completed transcription tasks with metadata. Use get_transcript_status with a task_id to get full transcript text.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. Although it does not explicitly say "read-only," the verbs "List" and "Returns" strongly imply a non-mutating operation, and the choice of "completed" adds a behavioral constraint. It does not disclose details like pagination or authentication, but for a simple listing tool the behavior is adequately transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the core purpose. The first sentence states the action, the second covers return type and a pointer to a sibling tool. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (no parameters, no annotations), but an output schema is present, so the description doesn't need to detail return values. The description covers the contents (list of completed tasks with metadata) and references the next logical step (getting full text via get_transcript_status). This is complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema is empty. The description adds no parameter-specific details because there are none to document. Per the calibration rubric, a baseline of 4 applies for 0-parameter tools, and the description does not detract from that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource phrase "List all completed transcripts," which clearly states the tool's purpose. It distinguishes itself from sibling tools by noting that get_transcript_status is used for full transcript text, whereas this tool returns a list with metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs the agent to use get_transcript_status with a task_id when full transcript text is needed, providing a clear alternative and when-to-use distinction. This directly addresses when to use this tool versus its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transcribe_fileA

Transcribe a local audio/video file using Whisper.

Supports mp3, m4a, mp4, wav, flac, and other FFmpeg-compatible formats. For files over 30 minutes, use async_mode=true. Adjust segment_minutes for 1h+ files to reduce segment count.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoWhisper model: tiny, base, small, medium, large-v3-turbolarge-v3-turbo
languageNoLanguage code: zh, en, ja, etc.zh
file_pathYesPath to local audio/video file
async_modeNoIf true, return task_id for long files
segment_minutesNoAudio segment length in minutes for splitting long files. Default 30. Increase for 1h+ files.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It discloses supported formats, Whisper as the underlying model, and the behavior for long files (async, segment splitting). It does not mention output structure or side effects, but the key operational traits are covered and there is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the core purpose, followed by format support and targeted usage advice. Every sentence contributes directly to effective tool usage, with no redundant or repetitive content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters, no output schema, and no annotations, so the description should clarify return values or outcomes. It explains local-file handling and long-file guidance well, but it does not state what the tool returns (e.g., transcript text, task_id for async), which is a gap given the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, providing baseline 3. The description adds value by explaining when to use async_mode and how to adjust segment_minutes for 1h+ files, supplementing the schema's parameter descriptions beyond just listing defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool transcribes local audio/video files using Whisper, with a specific verb (transcribe) and resource (local file). It also lists supported formats and distinguishes itself from sibling transcribe_url by emphasizing 'local' file input.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool (local files, with format support) and provides concrete guidance for long files (use async_mode, adjust segment_minutes). However, it does not explicitly state when not to use it or mention the sibling transcribe_url for remote files, so it lacks explicit alternative naming.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transcribe_urlA

Transcribe a video from URL using three-tier strategy.

Tier 1: Extract platform subtitles (zero cost, fastest) Tier 2: Download audio + Whisper local transcription (offline, free) Tier 3: Return guidance for closed platforms (Xiaohongshu/WeChat)

For videos under 30 minutes, use sync mode (default) for direct results. For longer videos, set async_mode=true to get a task_id, then poll with get_transcript_status. Adjust segment_minutes for 1h+ videos.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesVideo URL (YouTube, Bilibili, Douyin, etc.)
modelNoWhisper model: tiny, base, small, medium, large-v3-turbolarge-v3-turbo
languageNoLanguage code: zh, en, ja, etc.zh
async_modeNoIf true, return task_id immediately for long videos
skip_subtitlesNoSkip subtitle extraction, use Whisper directly
cookies_browserNoBrowser for cookies: chrome, firefox, safari, edge
segment_minutesNoAudio segment length in minutes for splitting long videos. Default 30. Increase for 1h+ videos.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the three-tier strategy (subtitles, Whisper, closed-platform guidance) and sync/async behavior. It doesn't cover error handling or permissions, but the tier strategy provides substantial behavioral insight.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main purpose, structured into clear tiers, and every sentence contributes actionable information without redundancy. It is concise yet comprehensive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, no output schema, and no annotations, the description covers the workflow well: tiers, sync/async, polling, and closed-platform guidance. It could explicitly state the sync return value, but the tier strategy and usage notes make it largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining async_mode for long videos, segment_minutes for 1h+, and sync mode default, enriching the schema's parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Transcribe a video from URL using three-tier strategy.' It clearly distinguishes from siblings by mentioning polling with get_transcript_status and contrasting with transcribe_file (via the URL versus file input).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is given: 'For videos under 30 minutes, use sync mode (default)... For longer videos, set async_mode=true... poll with get_transcript_status.' It also advises adjusting segment_minutes for 1h+ videos, clearly indicating when to use which mode.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: transcribe_file processes local media, transcribe_url handles remote videos, get_transcript_status polls async tasks, and list_transcripts shows completed transcripts. The descriptions explicitly differentiate these, leaving no ambiguity.

Naming Consistency5/5

All four tools follow a consistent verb_noun pattern with snake_case (transcribe_file, transcribe_url, get_transcript_status, list_transcripts). The verbs clearly indicate the action and the nouns the resource, forming a predictable and coherent naming scheme.

Tool Count5/5

Four tools is well-scoped for a video transcription server, covering the essential operations (transcribe local/remote, check status, list results) without unnecessary overlap or bloat. This is an appropriate size for the domain.

Completeness4/5

The tool set covers the full transcription workflow: synchronous and async transcription, status polling, and listing completed results. Minor gaps like cancellation or direct retrieval of a transcript by ID are missing, but these are not critical for the core use case.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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/shawnwei512/video-transcript-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server