Skip to main content
Glama

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):


🎬 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

0 🔄 End-to-End Full Pipeline

One link → one note, runs the entire pipeline fully automatically

generate_note / get_task_status

1 📥 Download & Platform Parsing

Identify platform and download audio/video, covering 1800+ sites and local files

inspect_video

2 🎙 Speech Transcription (ASR)

Convert audio track to text, local / cloud multi-engine options

done inside generate_note

3 🖼️ Video Frame Understanding (Frame Extraction)

Extract frames at intervals, multimodal LLM "sees" the visuals

video_understanding parameter

4 💬 Danmaku & Comments

Fetch Bilibili danmaku and comment section opinions

include_comments parameter

5 ✍️ AI Summary & Notes

Materials → structured Markdown, 9 styles available

generate_note / prepare_note_material

6 📤 Multi-format Export

SRT/VTT/JSON mechanical export + creative formats (Agent-generated)

export_transcript

7 🎛️ Audio Enhancement

Multi-file merge, preprocessing, speaker diarization

merge_audio / diarize_media

8 🗂️ Task Management & Cleanup

Global task index, usage view, on-demand cleanup

list_tasks / cleanup_note


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

generate_note

One link → asynchronously generate a note, returns task_id (supports video understanding / comment integration / screenshot portable notes)

MCP tool

get_task_status

Lightweight polling of task status (poll until SUCCESS/FAILED/CANCELLED)

MCP tool

cancel_note

Cooperative cancellation of in-progress / queued tasks

MCP tool

prepare_note_material

Only prepare the material package (transcription / frame extraction / comments) for AGENT direct generation

MCP tool

AGENT direct generation (agent_direct)

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

inspect_video

Parse multi-part / playlists, return per-episode URLs usable with generate_note

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

video_understanding / video_interval / grid_size

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

include_comments / comments_limit

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 + format

Style selection / screenshot portable notes

Parameter

get_config

Read-only configuration summary (defaults / providers / transcriber / cookie status), with optional connectivity probe

MCP tool

agent_direct

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_transcript

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_audio

Merge multiple files into 16kHz mono wav (FFmpeg concat)

MCP tool

Audio preprocessing

16kHz normalization + auto-chunking for long audio (enabled in setup ②)

Configuration

diarize_media

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 -. 索引 .-> T1

Tool

Description

Type

list_tasks

List all tasks (global index, with semantic titles)

MCP tool

cleanup_note / cleanup_all

Clean per-task / global cleanup (factory reset)

MCP tool

health_check

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_audio to merge segmented recordings → diarize_media for speaker diarization → meeting_minutes style.

  • 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_note with one link (download/transcription/summary/comments all done internally); use prepare_note_material to only prepare materials.

  • Real cases: full case process records in examples.

🤝 How to Contribute

  • Feature branch → PR → dev (CI smoke must be green); after dev is 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 tools
add_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_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

    A3.9/5.0

    Scored across 22 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count3/5

    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.

    Completeness3/5

    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

    ActivityMaintained
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers