1仕組みと動作原理
本リポジトリは「巨大なSKILL.mdルーティングテーブル+少数の独自スクリプト+多数の外部CLI/MCP」で構成されており、SKILL.mdの入力特性テーブルにより15種類以上のコンテンツソースを各抽出パイプラインへルーティングし、統一されたアップロードおよび生成処理をnotebooklm CLIに委譲します。
| `https://mp.weixin.qq.com/s/` | 微信公众号 | MCP 工具抓取 |
付属のCLI(main.py)がカバーする範囲はSKILL.mdの記載より大幅に狭く、コード上で処理されるのはepub、document、podcast、x_twitter、urlの5種類のみで、その他は「未対応の入力タイプ」としてエラーになります。
不支持的输入类型: {input_type}
ポッドキャストおよびBilibiliの文字起こしは、GetNote(得到/Get笔记)の3系統のAPI(OpenAPIでのリンクノート作成 → タスク進捗のポーリング[最大40回×30秒] → Web APIでの全文取得)を経由し、最終的にTXTファイルとして出力されます。
for i in range(40):
X/Twitterおよびペイウォール付きWebページの取得はfetch_url.shのカスケード処理に依存しています。まずサードパーティのプロキシサービス(r.jina.ai、defuddle.md)でMarkdown化を試み、失敗した場合はGooglebot/BingbotのUA、X-Forwarded-For、Referer、AMP、JSON-LDの偽装を行い、最終手段としてarchive.today、Google Cache、npx agent-fetchを実行します。
# 1a. r.jina.ai — wide coverage, preserves image links, often bypasses paywalls
取得したコンテンツはすべて外部のnotebooklm CLI(notebooklm-py)に渡されてアップロードと生成が行われ、本リポジトリ側ではNotebookLMプロトコルを直接実装していません。
['notebooklm', 'create', title],
ディープ分析モードは、固定テンプレートによる3ラウンドの段階的質問(4+5+3=12問、またはSKILL.md記載の10問)を実行し、1.5秒間隔でnotebooklm askを順次呼び出して結果を/tmp/*_analysis.jsonに出力します。
- 第一轮(4题):建立整体认知框架
任意の出力形式である「Lark/Feishuドキュメント」はAPIを直接叩くのではなく外部のlark-cliに委託されており、Q&AをMarkdownに整形した後にlark-cli docs +createを実行します。
['lark-cli', 'docs', '+create', '--title', title, '--markdown', markdown_content],
WeChat公式アカウントのスクレイピングは別リポジトリのMCPサーバー(Playwrightによるブラウザエミュレーション)に依存しており、install.shによってスキルディレクトリ内にgit cloneされ、ユーザーに対してClaude設定の手動編集を要求します。
git clone https://github.com/Bwkyd/wexin-read-mcp.git "$MCP_DIR"
本スキルのメインフローとは直接結合していない独立したFeishu読み取りMCPサブパッケージ(FastMCP + Playwright)が同梱されており、read_feishu_docとget_doc_infoの2つのツールを提供します。
mcp = FastMCP("feishu-reader")
YouTubeは「最重要」の例外ルールとして定義されており、URLをNotebookLMに直接渡し、ローカルでの字幕ダウンロードや文字起こし処理は一切禁止されています。
- **禁止**使用 yt-dlp、yt-search-download、whisper、浏览器自动化等手段下载字幕
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | notebooklm(notebooklm-py CLI) |
| cli | python3 ≥ 3.9 |
| cli | git |
| cli | curl |
| cli | markitdown(Microsoft) |
| cli | lark-cli(飞书文档 CLI) |
| cli | npx(agent-fetch 兜底) |
| api | Get笔记 / 得到(笔记与转写) |
| api | NotebookLM(Google) |
| network | 第三方抓取代理/存档 |
| network | 被绕过站点(付费墙/社交) |
| network | 飞书(读取:Playwright 浏览器抓文档;写入:lark-cli) |
| network | 微信公众号(经外部 MCP) |
| package | Python 依赖(MCP 与转换链) |
| package | pip 直装 git 源 |
4推奨統制措置と判定根拠
- SKILL.md / 脚本参数: 自動検出の回避、ホストサンドボックスの無効化、またはSSL証明書検証のスキップを含んでいます。
- SKILL.md / 会话存储: ブラウザのユーザーログイン状態やセッションCookieを読み取る、または再利用します。
- scripts/: ローカルスクリプトまたはコマンドの実行: install.sh(インストール時にユーザーが実行: pip install、playwright install chromium、外部MCPのgit clone)。
- scripts/ 或 SKILL.md: 外部言語パッケージ依存関係の動的インストールを宣言しています。
- 网络端点: 外部ネットワークアクセスの宣言: openapi.biji.com / notes-api.biji.com / get-notes.luojilab.com(GetNote: ノート作成、トークン更新、文字起こし取得)。
- 本地工作目录: ファイル読み書きおよび成果物出力: /tmp/*.txt(各種ソースのローカル保存先。SKILL.mdにはシステム再起動時に自動削除される旨が明記されています)。
5二重目の独立検証
- [ok] skill.path 定位与 commit 一致性 — 单 skill 仓库,SKILL.md 在仓库根,故 path='.';工作副本 HEAD cea6ceee8cdcd01a573af5ae75c2d3cffc20650b,任务表 pin cea6ceee8cdc,PINS-b2.json 记 {dir: qiaomu-anything-to-notebooklm, commit: cea6ceee8cdc}。
- [discrepancy] SKILL.md 宣称的内容源 vs main.py 实际覆盖 — SKILL.md/README 宣称 15+ 类源;main.py 的 main() 只有 epub/document/podcast/x_twitter/url 五个分支,其余(微信、图片、音频、Office、ZIP、搜索)不在本仓代码内,靠外部 MCP 与宿主工具完成。「不支持的输入类型」是代码里的真实兜底分支。
- [discrepancy] README 结构图与实际文件树 — README 项目结构图与 SKILL.md 前置条件都列 wexin-read-mcp/(并给出 <skill>/wexin-read-mcp/src/server.py 的配置路径),但本 pin 仓库内不存在该目录(ls 报 No such file or directory),只有名称不同的 feishu-read-mcp/。该目录只在用户执行 install.sh 后由 git clone 产生;check_env.py 也检查这个不存在的路径。
- [discrepancy] fetch_url.sh 的『6 层级联』是否真的可走完 — 第 4 级 archive.today 之后为无条件 `exit 75`(脚本在这里结束进程),Level 5(Google Cache)与 Level 6(agent-fetch)在代码上不可达;README 的『6 层级联』流程图因此比实际执行多两级。exit 75 的设计意图是让调用方去浏览器解 CAPTCHA 后重试,属有意为之,但副作用未在文档说明。
- [discrepancy] feishu-read-mcp/src/server.py 是否可运行 — 该文件使用 `cookies_str: Optional[str] = None` 标注,但全文只 import sys / pathlib.Path / fastmcp / logging,没有 from typing import Optional——注解在函数定义时求值,导入即 NameError。本仓不含该服务器的测试,check_env.py 也不检查它(只查 wexin-read-mcp)。
- [ok] 『13 项环境检查』是否属实 — check_env.py 累加结果共 13 项:Python 版本 1 + 核心模块 5(fastmcp/playwright/bs4/lxml/markitdown)+ Playwright 导入 1 + notebooklm/markitdown/git 三个 CLI 3 + MCP 文件 1 + MCP 配置 1 + NotebookLM 认证 1;与 README 的『13 项环境检查』一致。
- [discrepancy] 深度分析问题数(SKILL.md 10 问 vs main.py / README 12 问) — SKILL.md 意图映射表写「自动生成10个问题并递归提问」、Step 4 的示例 JSON 也写 total_questions: 10;而 main.py 的模板是 4+5+3=12 问,README 场景 3 同样写「生成 12 个问题」(Step 4 另一处又是 10 问)。同一文档内自相矛盾。
- [discrepancy] SKILL.md 章节编号连续性与内容重复 — 『支持的内容源』下出现两个 5(付费墙、YouTube)、两个 4(Office 文档、播客/音频平台)、两个 5(播客/音频平台、电子书与文档),编号重复且与 README 的 15+ 计数对不上;YouTube 与付费墙内容还被重复叙述一次(含一段孤立的绕过策略 5 条列表挂在 YouTube 规则下)。
6結論
8f32da1fd86d07e0…