github Python re-analysis due

HuangYincan/VideoNote-MCP

github

VideoNote:将视频转成文字或笔记。理解画面/弹幕/评论;支持主流平台;工具解耦;多格式导出。

maintainer
HuangYincan
licence
MIT
first seen
2026-08-02
last seen
2026-09-15
releases · 30d
24
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 10 tools
transport stdio counts 10 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • batch_generate_notes
  • cleanup
  • generate_note
  • get_config
  • health_check
  • inspect_video
  • list_tasks
  • prepare_note_material
  • process_media
  • task
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 3e41ba9 · analyzer v33 · 5d ago

danger signals6

code evidence vv0.1.28 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 183

filesystem 95

  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/db/provider_dao.py :30 with open(json_path, 'r', encoding='utf-8') as f:
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/bilibili_downloader.py :5 import shutil
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/common.py :58 os.unlink(output_path)
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/douyin_downloader.py :339 os.unlink(video_path)
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/kuaishou_downloader.py :124 os.unlink(mp3_path)
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/xiaohongshu_downloader.py :94 os.unlink(mp3_path)
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/youtube_downloader.py :135 os.unlink(path)
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/gpt/universal_gpt.py :9 from pathlib import Path
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/services/cookie_manager.py :3 from pathlib import Path
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/services/merge.py :10 from pathlib import Path
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/services/note.py :6 import shutil
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/services/note_cache.py :36 import shutil
show 28 more
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/services/pipeline.py :23 import shutil
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/services/proxy_config_manager.py :2 from pathlib import Path
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/services/transcriber_config_manager.py :3 from pathlib import Path
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/transcriber/audio_preprocess.py :14 from pathlib import Path
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/transcriber/bcut.py :130 with open(file_path, "rb") as f:
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/transcriber/groq.py :48 os.remove(output_path)
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/transcriber/kuaishou.py :36 with open(file_path, 'rb') as f:
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/transcriber/mlx_whisper_transcriber.py :4 from pathlib import Path
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/transcriber/whisper.py :1 import shutil
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/transcriber/whisper_models.py :20 from pathlib import Path
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/utils/json_store.py :13 from pathlib import Path
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/utils/local_paths.py :6 from pathlib import Path
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/utils/logger.py :6 from pathlib import Path
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/utils/media_source.py :2 from pathlib import Path
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/utils/model_status.py :9 from pathlib import Path
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/utils/path_helper.py :3 from pathlib import Path
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/utils/task_manifest.py :21 import shutil
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/utils/video_helper.py :2 import shutil
  • fs HuangYincan-VideoNote-MCP-3e41ba9/app/utils/video_reader.py :6 import shutil
  • fs HuangYincan-VideoNote-MCP-3e41ba9/conftest.py :13 from pathlib import Path
  • fs (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/mcp_stdio_smoke.py :10 from pathlib import Path
  • fs (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_126_batch.py :13 import shutil
  • fs (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_127_batch.py :13 import shutil
  • fs (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_138_batch.py :15 from pathlib import Path
  • fs (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_142_batch.py :18 from pathlib import Path
  • fs (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_143_batch.py :4 import shutil
  • fs (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_145_batch.py :6 from pathlib import Path
  • fs (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_146_batch.py :3 import shutil

55 more not shown — this panel samples each group; the count above is the real total.

shell / exec 13

  • shell HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/common.py :4 import subprocess
  • shell HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/local_downloader.py :3 import subprocess
  • shell HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/xiaohongshu_downloader.py :9 import subprocess
  • shell HuangYincan-VideoNote-MCP-3e41ba9/app/services/merge.py :8 import subprocess
  • shell HuangYincan-VideoNote-MCP-3e41ba9/app/services/note.py :80 import subprocess
  • shell HuangYincan-VideoNote-MCP-3e41ba9/app/transcriber/audio_preprocess.py :11 import subprocess
  • shell HuangYincan-VideoNote-MCP-3e41ba9/app/utils/video_helper.py :3 import subprocess
  • shell HuangYincan-VideoNote-MCP-3e41ba9/app/utils/video_reader.py :7 import subprocess
  • shell (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_cli.py :16 import subprocess
  • shell (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_core_boundaries.py :4 import subprocess
  • shell (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_export_templates.py :4 import subprocess
  • shell (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_mcp_only_distribution.py :5 import subprocess
show 1 more
  • shell (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_video_reader.py :110 import subprocess

network 37

  • net HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/common.py :9 import requests
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/douyin_auth.py :18 from urllib.parse import urlparse
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/douyin_browser.py :16 from urllib.parse import parse_qsl, urlencode, urlparse, urlsplit, urlunsplit
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/douyin_downloader.py :7 from urllib.parse import quote, urlencode
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/douyin_helper/abogus.py :21 from urllib.parse import quote, urlencode
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/kuaishou_downloader.py :47 # with 托管响应关闭:裸 requests.get 的 stream 响应直到 GC 才释放连接
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/xiaohongshu_auth.py :73 from urllib.parse import urlparse
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/xiaohongshu_browser.py :10 from urllib.parse import parse_qs, urlparse
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/downloaders/xiaohongshu_sign.py :15 import urllib.parse
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/services/inspect.py :11 from urllib.parse import parse_qs, urlparse
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/services/pipeline.py :508 from urllib.parse import unquote, urlparse
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/services/provider.py :3 from urllib.parse import urlsplit
show 25 more
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/transcriber/kuaishou.py :4 import requests
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/utils/local_paths.py :7 from urllib.parse import unquote, urlparse
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/utils/media_source.py :22 from urllib.parse import urlparse
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/utils/openai_client.py :5 填的代理需要显式塞进 httpx.Client 才生效。
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/utils/url_parser.py :4 from urllib.parse import parse_qs, urlsplit
  • net HuangYincan-VideoNote-MCP-3e41ba9/app/utils/url_safety.py :35 import socket
  • net HuangYincan-VideoNote-MCP-3e41ba9/conftest.py :70 import socket
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_126_batch.py :426 import requests
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_127_batch.py :108 with mock.patch("app.transcriber.kuaishou.requests.post") as m_post:
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_143_retry.py :6 import requests
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_147_batch.py :3 import socket
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_b5_coverage.py :43 with mock.patch("app.transcriber.kuaishou.requests.post", return_value=self._ok_response(["你好", "世界"])):
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_bilibili_comment.py :2 BilibiliCommentFetcher 测试(mock requests.get,不碰真实网络)。
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_bilibili_subtitle.py :3 不碰真实网络:mock requests.get 返回构造的 view API 响应。
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_cli.py :1282 # _login_cli 函数内 `import requests`:patch 字符串路径替换 sys.modules 里
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_douyin_inspect.py :5 from urllib.parse import parse_qs, urlsplit
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_douyin_login_lifecycle.py :6 from urllib.parse import parse_qs, urlsplit
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_douyin_mstoken_fallback.py :6 from urllib.parse import parse_qs, urlsplit
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_downloader_robustness.py :36 import requests
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_openai_client.py :38 # 代理路径的 httpx.Client 与客户端超时一致(此前代理分支另写 600s)
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_repository_docs.py :4 from urllib.parse import unquote, urlsplit
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_round16_batch2.py :15 import requests
  • net (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_url_safety.py :6 import socket
  • net HuangYincan-VideoNote-MCP-3e41ba9/videonote_mcp/cli.py :1546 import socket
  • net HuangYincan-VideoNote-MCP-3e41ba9/videonote_mcp/guidance.py :3 from urllib.parse import quote

secrets 2

  • secrets HuangYincan-VideoNote-MCP-3e41ba9/app/services/diarization.py :61 token = hf_token or os.environ.get("HUGGINGFACE_HUB_TOKEN") or ""
  • secrets HuangYincan-VideoNote-MCP-3e41ba9/videonote_mcp/cli.py :86 import getpass

database 6

  • db HuangYincan-VideoNote-MCP-3e41ba9/app/db/engine.py :4 from sqlalchemy import create_engine, event
  • db HuangYincan-VideoNote-MCP-3e41ba9/app/db/models/models.py :1 from sqlalchemy import Column, DateTime, ForeignKey, Integer, String, func
  • db HuangYincan-VideoNote-MCP-3e41ba9/app/db/models/providers.py :1 from sqlalchemy import Column, DateTime, Integer, String, func
  • db HuangYincan-VideoNote-MCP-3e41ba9/app/db/models/video_tasks.py :1 from sqlalchemy import Column, DateTime, Integer, String, func
  • db (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_149_migration.py :6 from sqlalchemy import create_engine
  • db (weak) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_task_index.py :13 import sqlite3

tool registrations 10

  • generate_note HuangYincan-VideoNote-MCP-3e41ba9/videonote_mcp/server.py :887
  • prepare_note_material HuangYincan-VideoNote-MCP-3e41ba9/videonote_mcp/server.py :1072
  • task HuangYincan-VideoNote-MCP-3e41ba9/videonote_mcp/server.py :1519
  • list_tasks HuangYincan-VideoNote-MCP-3e41ba9/videonote_mcp/server.py :1549
  • cleanup HuangYincan-VideoNote-MCP-3e41ba9/videonote_mcp/server.py :1571
  • health_check HuangYincan-VideoNote-MCP-3e41ba9/videonote_mcp/server.py :1749
  • inspect_video HuangYincan-VideoNote-MCP-3e41ba9/videonote_mcp/server.py :2011
  • get_config HuangYincan-VideoNote-MCP-3e41ba9/videonote_mcp/server.py :2040
  • batch_generate_notes HuangYincan-VideoNote-MCP-3e41ba9/videonote_mcp/server.py :2118
  • process_media HuangYincan-VideoNote-MCP-3e41ba9/videonote_mcp/server.py :2468

declared dependencies 25

  • mcp@>=1.29.0,<2
  • yt-dlp@>=2025.3.31
  • openai@>=1.70.0
  • faster-whisper@>=1.2.0
  • ffmpeg-python@>=0.2.0
  • huggingface_hub@>=0.30.0
  • httpx@>=0.28.1
  • pillow@>=11.0.0
  • pydantic@>=2.11.2
  • python-dotenv@>=1.1.0
  • requests@>=2.32.3
  • SQLAlchemy@>=2.0.41
show 13 more
  • youtube-transcript-api@>=1.0.0
  • cryptography@>=50.0.0
  • gmssl@>=3.2.2
  • InquirerPy@>=0.3.4
  • qrcode@>=8.0
  • playwright@>=1.48.0
  • mlx-whisper@*
  • noisereduce@*
  • scipy@*
  • pyannote.audio@>=3.1
  • torch@*
  • torchaudio@*
  • funasr@*