yt-subtitle-mcp
Fetches YouTube video metadata and transcripts, preferring existing subtitles and falling back to local Whisper transcription, then saves the transcript as a Markdown file.
Click on "Deploy 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., "@yt-subtitle-mcp转录这个视频并总结要点:https://www.youtube.com/watch?v=xxxxx"
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.
yt-subtitle-mcp
一个 MCP 服务器:优先抓 YouTube 现成字幕,没有字幕才用 Whisper 从音频转录。
转录结果落盘成 Obsidian 友好的 Markdown(frontmatter + 带时间戳章节), 中文内容可选自动转成简体。
语音识别、字幕解析、繁简转换全部在本地完成,不上传音视频,也不需要 语音识别或翻译服务的 API key。
它做什么
输入一个 YouTube 链接,得到一份可读的转录稿。流程:
YouTube URL
→ 取元数据(含字幕清单、原声语种)
→ ① 有合适字幕?→ 下载 json3/VTT → 解析合并 → 落盘 【秒级,零 CPU】
→ ② 没有 → 下载音频 → 16kHz 单声道 wav
→ faster-whisper(CTranslate2 int8,纯 CPU 可跑)
→ 中文内容 → OpenCC 繁→简(可关)
→ 落盘 <输出目录>/<标题>.md
→ 缓存 <输出目录>/.cache/<videoId>.jsonRelated MCP server: Hermes YouTube Transcript MCP Server
快速开始
git clone https://github.com/aisahpA/yt-subtitle-mcp.git
cd yt-subtitle-mcp
bash scripts/setup.shsetup.sh 会建 Python venv、装 faster-whisper / yt-dlp(带浏览器指纹伪装)/ OpenCC、
装 Node 依赖,并做一次自检。不需要 GPU。
首次用某个模型时会自动下载权重(默认 large-v3-turbo,约 1.5GB;small 约 470MB)。
如果 huggingface.co 在你的网络下不可达,默认已配好 hf-mirror.com 镜像。
接入客户端
任何支持 stdio MCP 的客户端都可以,把 server.js 的绝对路径填进去。
{
"mcpServers": {
"youtube-subtitle": {
"command": "node",
"args": ["/绝对路径/yt-subtitle-mcp/server.js"]
}
}
}{
"mcp": {
"youtube-subtitle": {
"type": "local",
"command": ["node", "/绝对路径/yt-subtitle-mcp/server.js"],
"enabled": true,
"environment": {
"YTS_SUBTITLE_LANG": "zh",
"YTS_TO_SIMPLIFIED": "1"
}
}
}
}- insert:
- id: mcp-youtube-subtitle
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: youtube
transport: stdio
command: node
args:
- /绝对路径/yt-subtitle-mcp/server.js
env:
YTS_SUBTITLE_LANG: zh
YTS_TO_SIMPLIFIED: '1'
# 长视频转录可能几十分钟,默认 60s 必然超时
toolCallTimeoutMs: 7200000⚠️ 最重要的一条:MCP 的 stdio transport 不继承父进程环境变量 (官方 SDK 只传
HOME/LOGNAME/PATH/SHELL/TERM/USER)。 所以代理、模型、输出目录等配置必须写在客户端的env块里, 写在 shell 的.zshrc里不会生效。这是最容易踩的坑。
工具
只暴露一个工具:get_video_transcript。
参数 | 类型 | 说明 |
| string | 视频链接或 11 位 video id |
|
| 返回的预览长度,默认 |
| Whisper 模型名 | 只对 Whisper 生效,不填用 |
| string | 额外领域词表(简体、空格分隔),叠在自动抽词后面。换词会作废缓存并重跑 |
|
| 后续总结用什么语言,默认 |
| boolean | 忽略缓存强制重跑 |
返回什么
关键点:它不返回全文。一份 20 分钟视频的转录稿轻松几万字,直接塞进上下文 既贵又没必要。返回值是:
{
"video": { "title": "...", "uploader": "...", "duration": "5:56", "views": "1571.3万" },
"transcript": {
"language": "zh-tw", "source": "youtube-manual-caption",
"characters": 1453, "segments": 31,
"fromCache": false, "truncated": false,
"convertedToSimplified": true
},
"savedTo": "/…/transcripts/How to sound smart….md",
"preview": "有听见什么吗?答案是「没有」……",
"summaryHint": "完整正文(1453 字)在 savedTo 指向的 Markdown 里……",
"description": "视频简介(最多 1500 字)"
}savedTo才是正文所在。preview只用来判断"这份稿子对不对",truncated: true表示 preview 被截断过。transcript.source说明文字怎么来的:youtube-manual-caption/youtube-auto-caption/whisper。summaryHint是给模型看的下一步指令,不是结果。总结由调用方模型 读savedTo文件后自己写——本工具不做总结。description是视频简介。它有时比正文更能说明"这视频到底在讲什么"。走 Whisper 时还会多一个
transcript.audio,说明音频的去向:{ kept: true, keptPath }(本次保留)或{ reused: true, path }(复用了旧的)。
使用方式
你不需要记工具名,把链接丢进对话就行,模型会自己调用:
转录一下 https://www.youtube.com/watch?v=xxxxxxxx常见任务怎么问
你想做的 | 建议这样说 |
存进 vault 当资料 |
|
快速知道讲了什么 |
|
引用原话 |
|
换个语言总结 |
|
怀疑字幕质量,重跑 | 明确说 |
批量 | 一次给多个链接,一个链接一次调用 |
后三种会自然形成「工具落盘 → 模型读文件 → 加工」的流程,这也是它设计成这样 (只返回路径 + 预览)的原因。
效率上的四个事实
同一个视频问第二次 = 秒回(
fromCache: true),不重新下载、不重新转录有现成字幕的视频约 7 秒;没字幕要走 Whisper。默认模型 (
large-v3-turbo)下,5 分钟视频约 3 分钟、20 分钟视频约 14 分钟; 传model: "small"可以快到 1/2(但质量差,见「转录质量与速度」)改
YTS_MODEL、YTS_HOTWORDS或传model/hotwords会让缓存自动失效 (同一视频用不同设置,结果本就该不同)。缓存的指纹包含模型、词表、语种、 compute_type、vad、补录阈值——之前只比模型,结果"改了 hotwords 却拿到旧稿", 这个坑真的踩过。失效后如果开着YTS_KEEP_AUDIO,会复用留下的音频、只花转录时间想强制重跑就加
force,或直接说"忽略缓存"
和 Obsidian 的关系
落盘的就是标准 Markdown:frontmatter(标题/来源/频道/时长/语种/来源类型)
带时间戳的转录章节。把
YTS_OUTPUT_DIR指向 vault 目录, 出来的文件可以直接当笔记读、被检索、被双链引用。
转录质量与速度
先给结论:默认用 large-v3-turbo。 要快速草稿就在调用时传 model: "small",
或用 YTS_MODEL 改默认。
实测数据(22 分钟中文访谈,Intel i7-8850H 12 核、无 GPU、int8)。 RTF = 处理耗时 ÷ 音频时长,越小越快:
模型 | RTF | 22 分钟视频耗时 | 中文表现 |
| 0.36 | 约 8 分钟 | 听错常用词,还会整段丢失 |
| 0.64 | 约 14 分钟 | 明显更准,本次样本上与 |
| 1.61 | 约 35 分钟 | 与 turbo 相近,但慢 2.5 倍 |
| 1.83 | 约 40 分钟 | 本次样本上没有比 turbo 更准 |
同一段音频的差距实例:
原文 |
|
|
书香门第 | 书乡门帝 ❌ | 书香门第 ✅ |
延边 | 沿边 ❌ | 延边 ✅ |
换母语 | 整个词丢失 | 换母语 ✅ |
坑一:Whisper 会静默丢掉整个 30 秒窗口
faster-whisper 按 30 秒窗口推进。某一窗如果输出空文本,transcribe.py 会直接
continue 掉它(if segment["start"] == segment["end"] or not text.strip()),
时间轴上就出现一个洞——不报错、不警告。
实测那份 22 分钟视频里,3:33–3:56 一整段(讲托福/GRE 真题和进黑名单的那段)
就这么没了;而把同一段音频单独切出来,用同样的 small 和默认参数就能正常转。
所以这不是"模型听不见",是窗口推进的机制问题。
哪些地方容易丢:翻回原片对过,丢失的两段(3:33 和 7:02)都是插入了另一段 视频的片段、声音换了一个人的位置。声源一变,模型判定"这里不是说话"的概率就上去, 整窗被丢。这也解释了为什么补录能救回来——同一段音频换个窗口起点重新解码就正常了。
本项目的对策是缺口补录:主转录跑完后扫描时间轴缺口,把缺口重新切出来单独
转一遍,再按时间合并。这个兜底与模型无关(small 和 large-v3 都出现过整窗
丢失),控制它的是 YTS_GAP_MIN_SECONDS(默认 10 秒,设 0 关闭)。
补录有个反直觉的地方:切多长决定成败。同一个 23 秒缺口(同一台机器、同一个
small),只改"缺口前留几秒":
缺口前留 | 窗口长度 | 捞回字数 |
2 秒 | 27 秒 | 13 |
3–4 秒 | 29–31 秒 | 0 |
5–6 秒 | 32–33 秒 | 135 ✅ |
8 秒 | 35 秒 | 15 |
14 秒 | 41 秒 | 47 |
所以代码里按 5→6→8 秒的顺序试几组窗口,取捞回最多的一次,够本(约六成) 就提前收工。实测那次补录第一组就命中 135 字,多花 13 秒。
补录还有一个必须防的坑:有时候正文其实没丢,只是主转录把时间戳推后了。
TEDx 那支视频开场白被记在 19.3 秒、0–19 秒显示为空,补录把同一句话又转了一遍,
贴上去就成了"同一句话说两遍"。所以补录结果会跟缺口后面的已有段落比一次覆盖率,
像"同一句话"就丢掉(日志里记 discarded_as_duplicate)。
成本上限:片头/片尾的缺口通常是音乐或掌声,捞不出东西却会跑满所有尝试 ("够本"阈值对静音永远达不到)。实测一个 19 秒的片头缺口跑满 5 组、只捞回 15 个字。所以边缘缺口只试一次、中间缺口上限 3 组;正常一次补录 只多花 3–13 秒。
已知限制:补录段和主转录在缺口边界上可能重复几个字(实测 1000 字里重复 8 字,
因为两侧对同一个词的写法不同,去重匹配不到)。补了几处、补回多少字会出现在
返回值的 gapRetry 和缓存 JSON 里,能逐条核对。
坑二:hotwords 能救专有名词——而且能自动生成,不用手工维护
同一段音频、同一个 small 模型:
| 结果 |
不传 | 托福→托付 ❌、新东方→心动方 ❌、李笑来→李销来 ❌、凶悍→凶汗 ❌ |
人工给「托福 GRE 新东方 真题 黑名单 李笑来」(简体) | 全对 ✅ |
从标题自动抽的 5 个词(简体) | 与人工挑的持平 ✅ |
给视频标题里的繁体「李笑來」 | 基本没用 ❌ |
所以默认会自动从标题抽词(不够再取简介):转成简体、按标点切块、只留 2–8 字的
纯中文/拉丁块、短的优先、最多 5 个。实在这段视频的标题抽出的是
李笑来 他戒烟时 新东方名师 朗读重塑大脑 中国比特币首富——人名和惯用语都修对了。
用 YTS_AUTO_HOTWORDS=0 关掉,用 YTS_HOTWORDS 或工具参数 hotwords 叠加手动词
(补自动抽不到的名字)。
三条注意事项:
必须简体。繁体词基本救不回简体输出。
保持"词表"形态(空格分隔,别塞整句/带标点)。有过一次整句标题当 hotwords 后 解码崩坏的记录(
avg_logprob−2.34、中英日韩乱码),虽然没能稳定复现,但没必要冒险。它和
initial_prompt不是一回事:后者会改变断句和标点风格,实测还漏了 21 秒,不要用。
坑三:置信度抓不到错别字,只能抓"解码崩坏"
本来想让工具直接告诉你"哪几段可疑",实测做不到:同一个 small 跑出来的段落,
avg_logprob 全都在 −0.21 / −0.23,错的和对的一样自信
(李孝萊、凶汗、名诗、必权人 全在正常区间里)。
它唯一有用的是抓崩坏:那次中英日韩乱码的崩坏,avg_logprob 掉到 −2.34,一眼可辨。
所以返回值里只在真的出现异常段时才带 lowConfidence(阈值 −1.0),
平时不要指望它替你找错别字。
结论:想少错就换更大的模型(默认已是 large-v3-turbo),词表靠自动抽 + 偶尔手工补。
试过但没用的旋钮
省得你再折腾一遍。在本次样本上,以下改动都没有可测量的改善:
开关 VAD(
--no-vad)、调min_silence_duration_ms强制
YTS_LANGUAGE=zh(与auto输出逐字相同)放宽
log_prob_threshold/no_speech_threshold(阈值全关掉照样整窗丢失)beam_size5 → 10compute_typeint8→int8_float32
真正有效的只有三件:换更大的模型、给对 hotwords、补录缺口。
配置
全部通过环境变量,写在 MCP 客户端的 env 块里。
本项目自己的配置项统一用 YTS_ 前缀。此外还有几个沿用业界通用名的变量
(HTTP_PROXY / HTTPS_PROXY / NO_PROXY、HF_ENDPOINT 等),
它们不带前缀,因为换名字反而会让通用工具认不出来。
字幕
变量 | 默认 | 说明 |
|
|
|
| 空 | 想要的字幕语种,如 |
|
| 中文内容(字幕或 Whisper 转录)繁→简转换,设 |
|
| OpenCC 档: |
|
| 字幕合并成几秒一块 |
输出
变量 | 默认 | 说明 |
|
| 转录 Markdown 落盘目录(相对路径按项目目录解析) |
|
| 后续总结用什么语言( |
|
| 保留 Whisper 用到的音频,便于换模型重跑(见下) |
|
| 音频保留位置(仅 |
|
| 缓存目录 |
| 系统临时目录 | 下载音频的临时目录 |
相对路径按项目目录解析,不是当前工作目录——MCP 服务器启动时的 cwd 不可预测,按项目目录才稳定。想写到别处(比如 Obsidian vault 里)就给绝对路径:
"YTS_OUTPUT_DIR": "/Users/you/Documents/my-vault/youtube"保留音频
默认转完就删音频:它只为这一次转录服务,16kHz wav 约 2MB/分钟 (22 分钟视频约 42MB),留在磁盘上不划算。
但保留有它的用处——换更大的模型重跑。这时候音频是唯一的重复成本 (重新下载往往比转录本身还慢),留着就能只花转录时间:
"YTS_KEEP_AUDIO": "1"打开后:
音频从临时目录复制一份到
YTS_AUDIO_DIR(默认<输出目录>/audio/), 文件名是<videoId>.wav,同一个视频重跑不会堆积多份改了
YTS_MODEL再跑同一个视频,缓存自动失效并复用这份音频,不重新下载想清理就手动删
audio/目录,程序不主动回收
工具返回值里能看到实际动作:transcript.audio 为 { kept: true, keptPath }
(本次保留)或 { reused: true, path }(复用了旧的)。
Whisper
变量 | 默认 | 说明 |
|
|
|
| 空 | 手工叠加的领域词表(人名/术语),简体、空格分隔。默认已自动从标题抽词,这里只补抽不到的 |
|
|
|
|
| 时间轴缺口超过这么多秒就单独补录一遍(整窗丢失兜底), |
|
| 强制语种,如 |
|
| beam search 宽度。实测 5→10 无可测量改善 |
| CPU 核数-4 | 转录线程数 |
|
| CPU 上 int8 最快;有 GPU 可换 |
|
|
|
| 3 小时 | 转录超时 |
网络
变量 | 默认 | 说明 |
| 空 | 需要代理才能访问 YouTube 时必须显式传(见上面的警告) |
|
| 模型下载源 |
|
| 禁用 hf-xet 后端(国内镜像下会 401) |
|
| 模型权重下载失败时的重试次数 |
|
| yt-dlp 的浏览器指纹伪装目标 |
NO_PROXY请写成localhost,127.0.0.1,::1。带方括号的[::1]会让 Python 的 httpx 抛InvalidURL: Invalid port,把模型下载打崩。
超时与路径(一般不用改)
变量 | 默认 | 说明 |
| 5 分钟 | 取元数据超时 |
| 20 分钟 | 下载音频超时 |
| 3 分钟 | 下载单条字幕超时 |
| 3 小时 | Whisper 转录超时 |
| 2 分钟 | 繁简转换超时 |
|
| 解释器路径 |
|
| yt-dlp 路径 |
| 自动探测 | ffmpeg 路径;在 |
后三个是给「不想用项目自带 venv / ffmpeg 不在默认位置」的情况准备的。
正常装了 ffmpeg 就不用管它们。
字幕挑选规则
按优先级排出一条候选链,前面的失败会继续试后面的:
顺序 | 轨道 | 说明 |
1 | 目标语种的人工字幕 | 最好:语种对、质量高 |
2 | 原声语种的自动字幕 | 内容忠实,实测能正常下载 |
3 | 原声语种的人工字幕 | 语种不对,但翻译质量高 |
4 | 外语自动翻译轨 | 几乎必然 429,质量最差,放最后 |
书写系统不符会降权(要简中却给繁中),语种不符也降权。全部落空 → Whisper。
这条链值得维护,因为两条路径的代价差得很远。同一个 5:56 的视频实测:
现成人工字幕 6.8 秒,Whisper small 84.6 秒,而且字幕质量更好
(官方译稿、带 (笑声) 这类非语音提示)。
为什么必须是链而不是单选:YouTube 对自动翻译轨常年返回 429。 若只挑一条,要简中时会因为翻译轨失败而整个退回 Whisper; 有了链就能退到「原声语种字幕」这类能下的轨道。
YTS_PREFER_SUBTITLES 三档:
值 | 行为 |
| 人工 > 自动 > Whisper |
| 只接受人工字幕,自动生成的一律走 Whisper |
| 完全不用字幕,永远 Whisper |
要中文输出请另读 中文字幕指南。 中文场景有四个反直觉的坑(自动翻译轨拿不到、
zh-TW不等于繁体、 写zh-Hans反而更慢、Whisper 输出繁简混排),以及繁简转换档位的选择依据。
落盘格式
frontmatter 里记录转录来源,取值:
| 含义 |
| 人工字幕 |
| 自动生成字幕 |
| 本地语音识别(此时才有 |
language 记录实际命中的轨道语种(字幕轨如 zh-tw;Whisper 则记它识别出的
zh)。若做过繁简转换,
会额外有 converted_to_simplified: true——这样你能看出正文经过转换,
不会被 zh-tw 的标记误导。工具返回的 transcript.source 同义。
转换相关细节见 中文字幕指南。
排查
症状 | 原因与处理 |
| yt-dlp 的客户端指纹被拒。已内置 |
| 客户端没把代理传给 MCP 子进程,检查客户端 |
|
|
模型下载 |
|
模型下载 | 保持 |
工具调用 60 秒超时 | 客户端默认工具超时太短,设成 2 小时(见 DSH 示例的 |
一直走 Whisper、很慢 | 该视频确实没有你指定语种的字幕;调 |
文件
文件 | 说明 |
| MCP 服务器:字幕优先流程 + 落盘 + 缓存 + 繁简转换调度 |
| faster-whisper 转录 worker(stdout 只输出进度,结果写 JSON 文件) |
| OpenCC 繁→简(从 stdin 读 JSON,写回 stdout) |
| 一键准备环境(venv、依赖、自检) |
| 中文字幕指南:四个坑、繁简转换档位、推荐组合 |
依赖
yt-dlp —— 下载字幕与音频
faster-whisper / CTranslate2 —— 本地语音识别
OpenCC —— 繁简转换
Model Context Protocol —— MCP 标准
ffmpeg 需要单独安装(brew install ffmpeg / apt install ffmpeg)。
License
MIT
Available Tools
1 toolget_video_transcript获取 YouTube 视频转录A
把 YouTube 视频转成文字稿:优先拉取现成字幕(人工 > 自动),秒级完成、不占 CPU;只有在没有合适字幕时才回退到本地 faster-whisper 从音频转录。结果落盘成 Obsidian 友好的 Markdown(frontmatter + 带时间戳章节),并缓存供重复调用秒级命中。 转录质量:Whisper 的模型档位可调。默认 large-v3-turbo 更准;要快速草稿可传 model="small"(快约 1.8 倍,但会听错常用词、甚至整段丢失)。换模型会自动让该视频的缓存失效,所以「先用 small 试、再用大模型重跑」不会重复下载。 注意:正文在 savedTo 指向的文件里,本工具只返回元数据 + 预览 + 供下一步使用的提示,不要期待它返回全文。
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | YouTube 视频链接或 11 位 video id | |
| force | No | 忽略缓存,强制重新转录 | |
| model | No | Whisper 模型,不填用 YTS_MODEL(默认 large-v3-turbo)。small 约 0.36x 实时但中文质量明显更差;large-v3 更慢却不比 turbo 准。 | |
| hotwords | No | 额外的领域词表(人名/术语),空格分隔、**用简体**。默认已从视频标题自动抽词,这里只补自动抽不到的名字;换词会作废缓存。 | |
| preview_length | No | 返回的预览长度:short≈1200字 / medium≈4000字 / long≈12000字。完整转录始终在落盘文件里。 | medium |
| output_language | No | 后续总结/整理用什么语言,默认 auto(跟视频原声一致)。只影响 summaryHint,不改转录本身。 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations (readOnlyHint=false, openWorldHint=true) by disclosing that results are written to a file, cached for repeated calls, and that cache invalidation occurs on model/hotword changes. It also explicitly warns that the tool returns only metadata + preview + hints, not the full transcript. This is rich, non-contradictory behavioral context.
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 well-structured with three focused paragraphs: pipeline, model quality, and return-value warning. It is longer than strictly necessary because some details duplicate the schema, but every section adds meaningful context and the key purpose is front-loaded.
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?
With no output schema and no sibling tools, the description carries full responsibility for return-value and artifact behavior. It covers the saved file path, cached result behavior, preview length semantics, model behavior, and the fact that the full transcript is not returned directly. An agent has enough context to invoke the tool and interpret its result correctly.
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 description coverage is 100%, so the baseline is 3. The description adds value on top by explaining cross-parameter cache behavior ('先用 small 试、再用大模型重跑'不会重复下载), model speed/accuracy tradeoffs, and how output_language only affects summaryHint. This supplements rather than merely repeats the schema.
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 clear verb+resource statement: '把 YouTube 视频转成文字稿' (convert YouTube video to transcript), and explains the two-mode pipeline (existing subtitles first, local faster-whisper fallback). This makes the tool's function unmistakable even without sibling tools.
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?
There are no sibling tools to contrast with, but the description gives clear usage context: it distinguishes when subtitles are used vs when audio transcription is needed, and offers concrete model-selection guidance ('要快速草稿可传 model="small"'). It does not explicitly state when not to use the tool, but that is a minor gap given no alternatives exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.0.0- First observed
get_video_transcript
TDQS
Scored across 1 tool
Only one tool exists, so there is no possibility of confusing it with another tool. Its purpose is clearly defined in the description.
The single tool name follows a clear and conventional verb_noun pattern (get_video_transcript), and there are no other names to cause inconsistency.
With just one tool, the surface feels minimal but acceptable for a focused transcript-extraction service. Additional tools for cache management or language listing could be added, but the single tool covers the core request.
The tool covers the full workflow from retrieving subtitles to generating Markdown, including model selection and caching. There are no obvious missing operations within its stated purpose.
Maintenance
Related MCP Connectors
Transcribe YouTube via Whisper. Summaries, chapters, semantic-search across your corpus.
Fetch the full transcript of any YouTube video as clean text. No API key, no signup.
Clean YouTube transcripts for agents: single videos, channels, playlists, plus AI caption cleanup.
Extract YouTube transcripts, search what was said, and read on-screen frames with cited timestamps.
Related MCP Servers
- AlicenseAqualityCmaintenanceFetches YouTube video subtitles and transcripts with support for multiple languages and output formats (SRT, VTT, TXT, JSON).18 npmApache 2.0
- AlicenseBqualityCmaintenanceDownloads YouTube audio and transcribes it locally using faster-whisper, saving transcripts as Markdown and JSON files for Obsidian and Hermes ingestion.4Apache 2.0
- AlicenseNot gradedqualityCmaintenanceTranscribes YouTube videos or audio files to Markdown, plain-text, and Word documents.MIT
- AlicenseAqualityAmaintenanceEnables transcription of videos and audio from 1000+ platforms (YouTube, Bilibili, TikTok, etc.) using subtitle extraction first, then local Whisper transcription, with support for long videos, async tasks, and Chinese ASR optimization.42MIT