VideoNote-MCP
VideoNote-MCP automates the pipeline from video link or local file to transcripts, materials, and AI-generated notes.
Generate AI Markdown notes from Bilibili/YouTube/Douyin/Kuaishou/TikTok/local files, with options for quality, style, formats, screenshots, comments/danmaku, video understanding, and output directory.
Prepare note materials (transcript, frames, comments/danmaku, media paths) without calling an LLM, for an agent to write notes itself.
Query, wait for, cancel, and inspect tasks; list task files and clean intermediate or global artifacts.
Fetch Bilibili hot comments and danmaku summaries for preview or prompt injection.
Manage LLM providers and models: list, add, update providers; list/add models.
Configure transcription: view/set transcriber engine, list/download local Whisper models.
Validate video URLs, set platform download cookies, and run health checks for FFmpeg, database, and Whisper readiness.
Allows generating AI Markdown notes from Bilibili videos, including video downloading, optional AI subtitle extraction with login, and video understanding.
Provides cloud-based speech-to-text transcription via Kuaishou, enabling audio transcription for video note generation.
Allows using Ollama as a local LLM provider for summarizing video content into notes.
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., "@VideoNote-MCP Generate a Markdown note from this video: https://bilibili.com/video/BV1GJ411x7h7"
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.
VideoNote-Mcp packages the entire pipeline of "video link → multi-format notes" into an MCP Server + Claude Code Skill: give the agent a link, and it automatically completes download → speech transcription → visual understanding → danmaku/comments → AI summary, returning a portable note with screenshots that can be moved as a whole.
Repository: HuangYincan/VideoNote-MCP.
This project can be used end-to-end (one link → one note) or decoupled: each stage of the pipeline (download / transcription / frame extraction / comments / summary / export / enhancement / cleanup) is an independent MCP tool, so you can use just one step or simply understand the video content. No backend service needs to be started.
⚡ Quick Start
# 1) 一条命令装好 Skill + MCP(插件 marketplace,uvx 自动更新)
claude plugin marketplace add HuangYincan/VideoNote-MCP
claude plugin install videonote@videonote
# 2) 安装时 Claude Code 会逐项提示默认值(风格/转写引擎/视频理解/评论等);
# 装完在会话里跑配置向导收尾:
/videonote-setup
# 3) (可选)LLM-Key/B 站扫码/CLI向导
# ! videonote setup
# 4) 重启会话,对 agent 说「帮我给这个视频做笔记」+ 链接[!TIP] See docs/04-使用手册.md for four installation methods, configuration details, updates, and security.
Related MCP server: tldw-mcp
📚 Documentation
Complete instructions for installation / configuration / usage / environment variables / updates / security are archived in docs/ (the README only keeps an overview):
📖 User Manual — Installation (4 methods) · Configuration (setup wizard + CLI) · Environment variables · Updates · Security
🎬 Real Cases
Two end-to-end real cases: one uses AGENT direct generation and outputs a LaTeX mathnote PDF, the other uses fully automatic LLM generation to produce portable Markdown.
Case 1 · agent_direct + LaTeX mathnote (DeepSeek-V4 video)
Source: [Shanke] In-depth interpretation of DeepSeek V1~V4! Understandable for everyone.
One video + four types of external materials (paper / technical report / official WeChat announcement / open-source collection) → AGENT direct generation of a refined note, and output a LaTeX mathnote PDF (Chinese Kai font template):
Page1 | Page2 | Page3 |
Highlights: agent_direct full pipeline (no LLM key, Agent reads transcription + frame images + comments to write the note itself) · multi-source cross-integration (video × paper × technical report × open-source list) · refinement preserves the original (note.md / note_original.md dual copies) · LaTeX mathnote PDF (auto-fixes missing fonts / line-break overflow / duplicate references). Full process record: examples/agent-direct-deepseek-v4-mathnote/README.md.
Case 2 · Fully automatic LLM generation + portable Markdown (parallel multi-video)
Minimal prompt (3 Bilibili links + output directory, no parameters specified) → fully automatic runs environment check → link recognition → provider/model discovery → parameter confirmation → parallel multi-video → post-generation refinement based on subtitles, producing 3 refined portable notes (note.md + Assets/ screenshots + "Audience Perspectives" section, while keeping note_original.md for comparison).
IELTS: breaking misconceptions + breakdown of listening/reading/writing/speaking + 179 high-frequency test words + 15 logical framework sentences
Forensic: a 43-year forensic expert "frame-by-frame" comparison of film vs. reality, refined and expanded to 12 sections
Transformer: detailed explanation of the self-attention mechanism, 18 screenshots distributed along the lecture timeline
Full process record: examples/note-generation-example/README.md.
🗺️ Pipeline Map
flowchart LR
A["视频链接"] --> B["下载音视频<br/>+ 平台字幕"]
B --> C["语音转写<br/>或直接用平台字幕"]
B -. 可选 .-> D["逐帧画面理解<br/>关键帧 → 网格图"]
B -. 可选 .-> E["弹幕 + 评论区"]
C --> F["素材包<br/>转写 · 帧 · 评论"]
D -.-> F
E -.-> F
F --> G["AI 总结 → Markdown 底稿<br/>正文 + 截图 + 「观众观点」"]
G --> O1["便携笔记<br/>note.md + Assets/"]
G --> O2["字幕导出<br/>SRT · VTT · JSON"]
G -. Agent 生成 .-> O3["创意格式<br/>思维导图 · 闪卡 · LaTeX · typst"]
G -. 可选 .-> O4["基于完整字幕精修<br/>保留原版对比"]Stage | Responsibility | Typical Tools |
One link → one note, runs the entire pipeline fully automatically |
| |
Identify platform and download audio/video, covering 1800+ sites and local files |
| |
Convert audio track to text, local / cloud multi-engine options | done inside | |
Extract frames at intervals, multimodal LLM "sees" the visuals |
| |
Fetch Bilibili danmaku and comment section opinions |
| |
Materials → structured Markdown, 9 styles available |
| |
SRT/VTT/JSON mechanical export + creative formats (Agent-generated) |
| |
Multi-file merge, preprocessing, speaker diarization |
| |
Global task index, usage view, on-demand cleanup |
|
0 🔄 End-to-End Full Pipeline
End-to-end mode only needs a link: generate_note asynchronously runs the entire pipeline and returns a task_id; use the lightweight get_task_status snapshot to poll until SUCCESS/FAILED/CANCELLED (max 3 in-progress tasks per process, do not submit in parallel in the same message). cancel_note provides cooperative cancellation. "AGENT direct generation" uses prepare_note_material — it only prepares the material package, does not call the configured LLM, and the agent reads the transcription, looks at the images, and writes the note itself.
Tool | Description | Type |
| One link → asynchronously generate a note, returns task_id (supports video understanding / comment integration / screenshot portable notes) | MCP tool |
| Lightweight polling of task status (poll until SUCCESS/FAILED/CANCELLED) | MCP tool |
| Cooperative cancellation of in-progress / queued tasks | MCP tool |
| Only prepare the material package (transcription / frame extraction / comments) for AGENT direct generation | MCP tool |
AGENT direct generation ( | Agent reads the material package and writes the note itself, without the configured LLM | SKILL / Agent orchestration |
1 📥 Download & Platform Parsing
inspect_video identifies the platform (bilibili / youtube / douyin / tiktok / kuaishou / local; for anything beyond the 6 built-in platforms it returns platform:"generic" and automatically uses yt-dlp generic extraction covering 1800+ sites) + checks link validity (gives the reason if invalid) + splits Bilibili multi-part videos / YouTube playlists into per-episode URLs that can be submitted independently (no download). Platform cookies go through ! videonote login bilibili / ! videonote setup, do not pass them via MCP. Platform subtitles (including Bilibili AI subtitles) are used internally by generate_note first; there is no standalone tool.
Tool | Description | Type |
| Parse multi-part / playlists, return per-episode URLs usable with | MCP tool |
2 🎙 Speech Transcription (ASR)
Speech transcription (ASR) is done internally by generate_note: it prefers platform subtitles (including Bilibili AI subtitles), and transcribes if no subtitles are available. Engine options: fast-whisper (local) / groq / bcut / kuaishou (cloud) / mlx-whisper (macOS Apple Silicon GPU) / funasr (best for Chinese, VAD + automatic punctuation). Engine and model management go through the CLI: ! videonote transcriber set/download; check status with get_config().
3 🖼️ Video Frame Understanding (Frame Extraction)
generate_note directly supports video understanding parameters: video_understanding=True + video_interval (default 6s) + grid_size (default [3,3]), sending the grid image to a multimodal LLM to "see" the visuals.
Parameter | Description | Type |
| Extract frames at intervals + embed grid image and send to multimodal model | Parameter |
4 💬 Danmaku & Comments
Adding include_comments=True + comments_limit (default 20) to generate_note will organize danmaku spam and high-frequency comment section opinions into the note, adding an "Audience Perspectives" section (requires Bilibili SESSDATA; fetch failure does not block the task).
Parameter | Description | Type |
| Adds an "Audience Perspectives" section to the note (default 20 items) | Parameter |
5 ✍️ AI Summary & Notes
Supports 9 styles: minimal / detailed / academic / tutorial / xiaohongshu / life_journal / task_oriented / business / meeting_minutes; format=["screenshot"] produces portable notes (note.md + Assets/, with relative references that can be moved as a whole). Provider/model/transcriber configuration always goes through the CLI (! videonote providers set / ! videonote transcriber set); read-only view via get_config(). agent_direct is generated directly by the AGENT.
Parameter | Description | Type |
9 note styles + | Style selection / screenshot portable notes | Parameter |
| Read-only configuration summary (defaults / providers / transcriber / cookie status), with optional connectivity probe | MCP tool |
| AGENT reads the material package and writes the note itself | SKILL / Agent orchestration |
6 📤 Multi-format Export
Mechanical formats use export_transcript (srt / vtt / json) — deterministic rendering (timeline conversion), no LLM cost, returns a file:// path. Creative formats (mind map / flashcards / LaTeX / typst / user-defined templates) are generated by Agent based on the MD draft + SKILL templates (LaTeX includes Math Note / English Article templates: math/science note style, English manuscript/speech outline style; typst includes the zju-lab template: science/engineering notes/experiment report/paper style, with the ZJU emblem).
Tool | Description | Type |
| Export transcription as srt/vtt/json (deterministic mechanical format) | MCP tool |
Creative formats | Mind map / flashcards / LaTeX / typst → Agent generates from the draft | SKILL / Agent orchestration |
7 🎛️ Audio Enhancement
merge_audio merges multiple recordings / meeting segments / multiple local videos into a 16kHz mono wav before transcription. Audio preprocessing (16kHz normalization + auto-chunking for >1800s, optional noise reduction) is off by default with zero hard dependencies. diarize_media performs speaker diarization (pyannote optional heavy dependency, requires HF_TOKEN + model authorization).
Tool | Description | Type |
| Merge multiple files into 16kHz mono wav (FFmpeg concat) | MCP tool |
Audio preprocessing | 16kHz normalization + auto-chunking for long audio (enabled in setup ②) | Configuration |
| Speaker diarization (meeting minutes / multi-speaker voiceover) | MCP tool |
8 🗂️ Task Management & Cleanup
Each task has a folder note_results/{task_id}/: raw/ (downloaded media) + gen/ (transcription/notes/frames/exports) + control files; the global task index is in the SQLite video_tasks table (with semantic titles). list_tasks enumerates all tasks (identified by semantic title), cleanup_note(dry_run=True) checks before cleaning, cleanup_note / cleanup_all clean per-task / globally (by default keeping configuration and models), and health_check checks FFmpeg / database / whisper readiness.
flowchart TB
DATA["data/ 数据根"] --> R["note_results/ 任务目录"]
DATA --> DB[("video_note.db<br/>SQLite 全局任务索引")]
R --> T1["任务 A<br/>note_results/{task_id}/"]
R --> T2["任务 B<br/>…"]
R --> T3["任务 C<br/>…"]
T1 --> RAW["raw/ 原始材料<br/>音视频 · 封面"]
T1 --> GEN["gen/ 生成材料"]
T1 --> CTRL["status.json · result.json · manifest.json"]
GEN --> T1A["transcript.json 转写全文"]
GEN --> T1B["note.md 成稿笔记"]
GEN --> T1C["Assets/ 笔记内截图"]
GEN --> T1D["frames/ 关键帧原图"]
GEN --> T1E["srt / vtt / json 字幕导出"]
DB -. 索引 .-> T1Tool | Description | Type |
| List all tasks (global index, with semantic titles) | MCP tool |
| Clean per-task / global cleanup (factory reset) | MCP tool |
| FFmpeg / database / whisper readiness status | MCP tool |
🏆 Best Practices
Study & exam prep: end-to-end + video understanding + subtitle-based follow-up refinement to thoroughly explain the course.
Meeting minutes:
merge_audioto merge segmented recordings →diarize_mediafor speaker diarization →meeting_minutesstyle.Lecture deep reading: after end-to-end generation, the agent refines based on the full subtitles and fills in details by section.
Video appreciation: enable danmaku + comment integration, the note includes an "Audience Perspectives" section.
End-to-end: use
generate_notewith one link (download/transcription/summary/comments all done internally); useprepare_note_materialto only prepare materials.Real cases: full case process records in
examples.
🤝 How to Contribute
Feature branch → PR →
dev(CI smoke must be green); afterdevis stable, PR →main(protected branch, requires review).See CONTRIBUTING.md for workflow, branch naming, and pre-commit self-checks.
🙏 Acknowledgments
Thanks to the community and all contributors, to Glama for listing the MCP server, and to all open-source dependencies and upstream pipeline projects for their inspiration.
Available Tools
22 toolsadd_modelA
手动把一个模型名添加为某供应商的可用模型(供应商 /v1/models 接口不可用时用)。
Inputs: model_name (required), provider_id (required). Returns: result
add_providerA
新增一个 LLM 供应商。type 取值参考:openai / deepseek / qwen / groq / custom。
添加后建议调用 list_models 确认模型可用,或用 add_model 手动添加模型名。
Inputs: name (required), type (required), api_key (required), base_url (required). Returns: result
cancel_noteA
取消一个进行中/排队的笔记生成任务(协作式:在下一阶段边界生效,LLM 总结时每 chunk 检查)。
返回 {ok, task_id, status, message?}。
Inputs: task_id (required). Returns: result
cleanup_allA
全局清理(类似恢复出厂):清空 note_results / static/screenshots / logs 的所有任务产物。
- include_config=False(默认):保留 config/(LLM key / cookie / 转写设置);
include_config=True 时连 config/ 一起清;
- include_models=False(默认):保留 models/(已下载模型可复用,重下成本高);
include_models=True 时连 models/ 一起清。
数据库记录(bili_note.db)不动。返回各目录清理统计 + 保留项。
Inputs: include_config, include_models. Returns: result
cleanup_noteA
清理某个任务生成的中间产物(下载的视频/音频、转写、截图、临时文件、dl 目录等)。
- include_note=False(默认):保留最终笔记(note.md / note_dir / 便携笔记目录);
- include_note=True:连最终笔记一起删(含 manifest)。
只删除 manifest 记录 / note_results/{task_id}* / dl_{task_id} 前缀的文件,
且 resolve 校验在数据目录内(防路径穿越)。返回 {deleted, missing, errors, note_kept}。
Inputs: task_id (required), include_note. Returns: result
download_transcriber_modelA
在后台下载 whisper 模型(仅本地引擎需要)。下载中/完成后用 list_transcriber_models 查询。
Inputs: model_size (required), transcriber_type. Returns: result
fetch_commentsA
抓取 B 站视频的热门评论(供生成笔记前预览/参考,不生成笔记)。
返回 {ok, source, bvid, aid, comments: [{user, content, likes, ctime}], error}。
可用 fetch_danmaku 看弹幕汇总;generate_note 的 include_comments 可把二者注入笔记 prompt。
Inputs: video_url (required), limit. Returns: result
fetch_danmakuA
抓取 B 站视频的弹幕汇总(供生成笔记前预览/参考,不生成笔记)。
返回 {ok, source, bvid, cid, danmaku_summary, error}。
可用 fetch_comments 看热门评论;generate_note 的 include_comments 可把二者注入笔记 prompt。
Inputs: video_url (required). Returns: result
generate_noteA
提交一个视频链接/本地文件,异步生成 AI Markdown 笔记。
- video_url: 必填,B 站/YouTube/抖音/快手链接或本地文件路径;
- platform: 可省略,自动识别;
- quality: fast / medium / slow;
- provider_id: LLM 供应商 id(先 list_providers 查看,add_provider 新增);
- model_name: 省略时取已配置的默认模型(setup 向导设置),否则取该供应商第一个可用模型;
- format: 附加内容,如 ["toc","link","screenshot","summary"];
- style: 输出风格(minimal 精简/detailed 详细/academic 学术/tutorial 教程/xiaohongshu 小红书/life_journal 生活向/task_oriented 任务导向/business 商业风格/meeting_minutes 会议纪要);不传时用 setup ③ 配置的默认(默认 detailed);显式传入始终覆盖;
- extras: 附加到 prompt 末尾的自定义指令(如自定义笔记风格要求);内置风格用 style,自定义风格用 extras;
- include_comments / comments_limit: 是否抓取 B 站弹幕+热门评论作为参考注入 prompt(仅 B 站视频生效);不传时用 setup 默认(默认关 / 20 条);显式传入始终覆盖;
- video_understanding / video_interval / grid_size: 视频理解(需多模态模型);不传时用 setup ③ 配置的默认(默认关 / 6s);显式传入始终覆盖;
- screenshot + format 含 "screenshot": 插入图片,产出便携笔记 note.md + Assets/(相对引用);不传时用 setup ③ 配置的默认(默认关);显式传入始终覆盖;
- notes_dir: 便携笔记的输出目录(可选;缺省 BILINOTE_NOTES_DIR 环境变量,再缺省 note_results/{task_id}/)。
返回 {task_id, status, platform}。之后用 get_task_status / wait_for_note 查询结果;
SUCCESS 时 result.note_dir 指向便携笔记目录。
只需素材(转写/帧/评论,不调 LLM 总结)供自行写笔记时,用 prepare_note_material。
Inputs: video_url (required), link, style, extras, +12 more. Returns: result
get_task_filesA
列出某任务在磁盘上生成的相关文件/目录(manifest 记录 + {task_id}* 前缀扫描)。
返回 {task_id, manifest_paths, existing},existing 是真实存在的文件/目录列表。
清理前先用它查看该任务占了哪些存储。
Inputs: task_id (required). Returns: result
get_task_statusA
查询笔记生成任务进度。SUCCESS 时 result 含 markdown / transcript / audio_meta。
Inputs: task_id (required). Returns: result
get_transcriber_configA
查看当前转写引擎配置(fast-whisper 本地 / groq / bcut / kuaishou / mlx-whisper 云端)与模型就绪状态。
Inputs: no named parameters. Returns: result
health_checkA
检查 MCP 运行环境:FFmpeg、数据库、转写器配置与本地 whisper 模型就绪状态。
Inputs: no named parameters. Returns: result
list_modelsA
列出某 LLM 供应商可用的模型。
优先实时请求供应商的 /v1/models 接口;接口不可用时回退到本地数据库已添加的模型。
Inputs: provider_id (required). Returns: result
list_providersA
列出已配置的 LLM 供应商(id、名称、类型、启用状态、api_key 掩码)。
Inputs: no named parameters. Returns: result
list_transcriber_modelsA
列出本地 whisper 模型(fast-whisper)的下载状态。
Inputs: no named parameters. Returns: result
prepare_note_materialA
提交一个视频链接/本地文件,异步产出「素材包」:转写全文+分段、可选视频帧(file:// 图片)、 可选 B 站弹幕/评论、音视频本地路径。不调用 LLM 总结,供 AGENT(Claude Code)读取素材自行写笔记。
- video_url: 必填,B 站/YouTube/抖音/快手链接或本地文件路径;
- platform: 可省略,自动识别;
- video_understanding / video_interval / grid_size: 是否抽帧 + 截帧间隔(秒)+ 网格大小
(如 [3,3]);默认关(不抽帧)。开启后 result.frames 是持久化帧图片的 file:// 绝对路径;
- include_comments / comments_limit: 是否抓取 B 站弹幕+热门评论(仅 B 站视频生效;默认关 / 20 条)。
不需要配置 LLM 供应商/模型。返回 {task_id, status: PENDING, kind: material}。
之后用 get_task_status / wait_for_note 查询;SUCCESS 时 result 含
{kind: material, title, transcript, frames, comments_danmaku, video_path, audio_path}。
需要 AI 生成结构化 Markdown 笔记请用 generate_note。
Inputs: video_url (required), platform, grid_size, comments_limit, +3 more. Returns: result
set_downloader_cookieA
设置平台下载 Cookie(如 bilibili 的 SESSDATA),用于下载需登录/会员的内容。
Inputs: cookie (required), platform (required). Returns: result
set_transcriberA
切换转写引擎。
transcriber_type: fast-whisper(本地,需下载模型)/ groq(云端)/ bcut / kuaishou / mlx-whisper。
切到 fast-whisper 时可用 whisper_model_size 指定模型尺寸(tiny/base/small/medium/large-v3)。
Inputs: transcriber_type (required), whisper_model_size. Returns: result
update_providerA
更新 LLM 供应商配置(base_url / name / enabled 等非敏感字段)。
填 api_key 建议走对话外通道(更安全):用户在独立终端执行
`bilinote-mcp providers set <provider_id> --api-key '...'`。
本工具也接受 api_key(给明确接受 key 经过对话的用户用);改非敏感字段不受限。
Inputs: provider_id (required), name, api_key, enabled, +1 more. Returns: result
validate_urlA
判断视频链接属于哪个平台,以及是否受支持。
支持:bilibili(含 b23.tv)、youtube(含 youtu.be)、douyin、tiktok、kuaishou、本地文件路径。
Inputs: url (required). Returns: result
wait_for_noteA
阻塞轮询笔记生成任务直到完成(或超时)。长视频可能超过 timeout,可用多次调用续等。
返回与 get_task_status 相同的结构,SUCCESS 时 result 含最终 Markdown。
Inputs: task_id (required), timeout, poll_interval. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 22 tools
Most tools have clearly distinct purposes, but pairs like get_task_status/wait_for_note and generate_note/prepare_note_material overlap in function (both handle async video processing). Descriptions are detailed enough to mitigate confusion, but not entirely eliminate it.
All tool names follow a consistent snake_case verb_noun pattern (e.g., list_providers, generate_note, add_provider). Minor variations in verb choice (fetch vs list vs get) don't break the overall predictable naming scheme.
At 22 tools, the server feels heavy, though the breadth is justified by covering both user-facing note generation workflows and backend configuration (providers, transcription, cleanup). It sits at the upper boundary of what's considered reasonable.
The core lifecycle for generating notes is well covered (submit, monitor, cancel, cleanup), but there are notable gaps: no tool to list all tasks, and no MCP tool to configure default settings like default style or model (relying on a setup wizard outside the server). This makes some workflows less self-contained.
Maintenance
Related MCP Connectors
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
MCP server for RiverScript, an AI transcription platform - fetches transcripts shared via a link.
AI tool directory MCP server, live since July 2026. Tools, agents, models, companies, services.
An MCP server that gives any LLM or agent clean YouTube transcripts on demand: a single video, a whole channel, or a playlist, plus AI cleanup of auto-generated captions. API-key auth, credit-based, same backend as the public v1 API. Get a free API key with 25 free credits at youtubetranscriptdownload.com/account.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that generates structured notes from Bilibili videos by automatically downloading audio, transcribing with Whisper, and processing through LLM.17-
- AlicenseNot gradedqualityDmaintenanceMCP server that extracts YouTube video transcripts (including metadata) as Markdown, enabling AI to summarize and discuss video content without watching it.MIT
- FlicenseNot gradedqualityDmaintenanceMCP server that converts PDF, video, web, and audio inputs into structured Markdown notes with support for checkpointing, batch processing, and Obsidian integration.-
- FlicenseAqualityDmaintenanceMCP server that fetches YouTube video transcripts and creates Notion pages with summaries. Enables Claude Desktop to summarize videos and save them to Notion.2-