Video Transcript MCP Server
Transcribes Bilibili videos using AI subtitles (ai-zh) when available, with Whisper fallback for offline transcription.
Transcribes Kuaishou videos via subtitle extraction and Whisper fallback.
Transcribes TikTok videos via subtitle extraction and Whisper fallback.
Provides mini-program guidance for transcribing WeChat Video (视频号) content, as direct transcription is not supported for this closed platform.
Provides mini-program guidance for transcribing Xiaohongshu content, as direct transcription is not supported for this closed platform.
Transcribes YouTube videos by extracting subtitles (zh-Hans, zh-CN, zh, en) with Whisper fallback for offline transcription.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Video Transcript MCP Servertranscribe this YouTube video: https://youtu.be/dQw4w9WgXcQ"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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:mcpPrerequisites
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-whisperMCP 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-mcpTools
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 |
| str | required | Video URL |
| str |
| Whisper model |
| str |
| Language code |
| str? | null | Browser for cookies |
| bool | false | Skip to Whisper directly |
| int | 30 | Segment length for long video splitting. Increase for 1h+ videos |
| 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 |
| (unset) | Set to |
|
| Disable Xet storage (avoids download errors) |
|
| 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 | ✅ | ✅ | |
✅ | ✅ | ||
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 toolsget_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'.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID from transcribe_url or transcribe_file |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Whisper model: tiny, base, small, medium, large-v3-turbo | large-v3-turbo |
| language | No | Language code: zh, en, ja, etc. | zh |
| file_path | Yes | Path to local audio/video file | |
| async_mode | No | If true, return task_id for long files | |
| segment_minutes | No | Audio segment length in minutes for splitting long files. Default 30. Increase for 1h+ files. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Video URL (YouTube, Bilibili, Douyin, etc.) | |
| model | No | Whisper model: tiny, base, small, medium, large-v3-turbo | large-v3-turbo |
| language | No | Language code: zh, en, ja, etc. | zh |
| async_mode | No | If true, return task_id immediately for long videos | |
| skip_subtitles | No | Skip subtitle extraction, use Whisper directly | |
| cookies_browser | No | Browser for cookies: chrome, firefox, safari, edge | |
| segment_minutes | No | Audio segment length in minutes for splitting long videos. Default 30. Increase for 1h+ videos. |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
Any video URL to LLM-ready transcript. ASR built in, no captions needed. TikTok, X, TED and more.
Fetch transcripts, subtitles, chapters, metadata and frames from YouTube and 10+ video platforms
Transcribe YouTube via Whisper. Summaries, chapters, semantic-search across your corpus.
Transcribe public videos & audio (YouTube, TikTok, IG) into accurate, timestamped text via API.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables downloading watermark-free videos from Douyin (TikTok China) share links, extracting audio, and converting speech to text using AI voice recognition APIs.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables video text extraction using multiple speech recognition providers including local Whisper, JianYing/CapCut, and Bilibili Cut services. Supports video downloading, audio extraction, and automatic speech-to-text transcription with configurable providers.7MIT
- AlicenseAqualityAmaintenanceTranscribes videos from 1000+ platforms (YouTube, TikTok, Vimeo, etc.) and local video files using OpenAI's Whisper model, with support for 90+ languages and multiple output formats.8385MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to download YouTube videos and transcribe them locally using OpenAI's Whisper speech recognition model.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/shawnwei512/video-transcript-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server