VideoNote:将视频转成文字或笔记。理解画面/弹幕/评论;支持主流平台;工具解耦;多格式导出。
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
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
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
- suspicious endpoint 169.254.169.254 (cloud metadata) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_145_batch.py :87
tr._BcutTranscriber__upload_urls = ["http://169.254.169.254/part"] - suspicious endpoint 169.254.169.254 (cloud metadata) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_bilibili_downloader.py :178
"http://169.254.169.254/latest/meta-data/", - suspicious endpoint 169.254.169.254 (cloud metadata) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_round16_batch2.py :97
stream_download("http://169.254.169.254/latest/meta-data/", "/tmp/x.mp4") - suspicious endpoint 169.254.169.254 (cloud metadata) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_server_contracts.py :1552
resp = json.loads(server.inspect_video("http://169.254.169.254/latest/meta-data/")) - suspicious endpoint 169.254.169.254 (cloud metadata) HuangYincan-VideoNote-MCP-3e41ba9/tests/test_url_safety.py :32
"http://169.254.169.254/latest/meta-data/", - suspicious endpoint 8.8.8.8 HuangYincan-VideoNote-MCP-3e41ba9/tests/test_url_safety.py :44
["http://8.8.8.8/x", "https://1.1.1.1/x", "http://114.114.114.114/v"],
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@*