從零到 PyPI:讓 NotebookLM 可以被程式控制
2026-09-21 更新:Google Cloud 已提供企業版筆記本管理 API,需相應企業環境與授權。本文的 kof-notebooklm-mcp 是非官方網頁自動化工具;原文把整個 NotebookLM 說成不能由程式控制,範圍過大,已修正。
我想解決什麼問題?
目標很簡單。我想直接在開發環境(例如 Cursor IDE)裡建立 NotebookLM notebook、匯入技術文件或會議紀錄,並且提問後拿到附來源引用的答案。
如果這些動作可以由程式觸發,NotebookLM 就能成為完整工作流程裡的一個知識服務節點,而不是獨立使用的產品。
這個工具從哪裡來?
這個專案一開始不是獨立套件。kof-notebooklm-mcp 原本是 keeponfirst-local-brain 裡的內部工具。核心想法很直接:用本機 Git repository 當知識的唯一可信來源,讓文件和開發筆記跟著 codebase 一起演進,再讓 AI 工具持續閱讀、分析並提供回饋。
在這個架構裡,Git repo 是正式來源,文件跟著專案更新;NotebookLM 則是研究和分析節點,不是獨立 App。
實作時遇到的主要問題
第一個問題是驗證和登入流程。Google 登入包含多因素驗證與風險偵測,完全自動化並不實際。目前的做法是讓使用者第一次執行時手動登入,保存瀏覽器 session,之後再重複使用。
第二個問題是高度動態的 UI。NotebookLM 前端變動很大,自動化流程很容易壞。為了提高穩定性,實作會優先使用無障礙屬性與畫面上看得到的文字,避免綁死 DOM 結構,並在重要操作前檢查狀態。
為什麼拆成獨立套件?
工具一開始放在 monorepo 裡,開發方便,使用者安裝卻很麻煩。我面對的取捨很清楚:留在 monorepo 可以維持開發便利;拆成獨立套件需要整理架構,但能降低使用門檻。
最後我把它拆成 kof-notebooklm-mcp,讓使用者只要一行指令就能開始:pip install kof-notebooklm-mcp。
使用 Trusted Publisher 發布到 PyPI
發布流程使用 PyPI 的 Trusted Publisher。它不用管理長效 API token,發布權限直接綁定 GitHub repository,GitHub Actions 再透過 OIDC 自動驗證。設定不多,也比較適合長期維護。
最後想說的事
做這個專案的重點,是讓一個好用的工具真正進入工作流程。工具不能被程式控制時,受限的不只是效率,能做的事情也會跟著變少。
GitHub:https://github.com/keeponfirst/kof-notebooklm-mcp|PyPI:pip install kof-notebooklm-mcp
安裝完套件,還有瀏覽器與登入
套件頁列出三個設定步驟:安裝 Python 套件、安裝 Playwright Chromium、執行初始化登入。以下先用虛擬環境隔離依賴;套件要求 Python 3.10 以上。這裡核對的是公開安裝文件,沒有在本次修訂中替你登入 Google。
python3 -m venv .venv
source .venv/bin/activate
python -m pip install kof-notebooklm-mcp
python -m playwright install chromium
kof-notebooklm-init登入由你在開啟的瀏覽器完成;不要把密碼、驗證碼或瀏覽器 profile 放進 repo。套件文件的預設 profile 目錄是 ~/.kof-notebooklm/profile。它保存的是可重用的登入狀態,備份、共享或搬移時應當成帳戶憑證處理。
讓 MCP client 找到同一個執行環境
IDE 啟動 MCP server 時,不一定繼承你終端機的 .venv。若安裝成功卻說找不到指令,先在啟用虛擬環境的終端機執行 command -v kof-notebooklm-mcp,再把取得的完整路徑填入 client 的 command 欄位。不同 client 的設定檔位置不同,以下只示意套件名稱與欄位,不是所有 IDE 都能直接共用的設定檔。
{
"mcpServers": {
"notebooklm": {
"command": "/absolute/path/to/.venv/bin/kof-notebooklm-mcp",
"args": []
}
}
}先做唯讀檢查,再建立測試筆記本
先呼叫 health_check 確認連線與登入,再用 list_notebooks 對照你在網頁看到的清單。只有這兩步成功,才建立一個專用測試筆記本,加入一小段已知內容並提問。比對答案與引用是否真來自該來源;工具回傳非空字串,不代表回答正確。
若清單是空的,先區分帳號沒有資料、登入失效、頁面尚未載入與選擇器失效。若來源已加入但回答找不到內容,先看來源是否處理完成。把失敗停在正確階段,比整套重新安裝更容易定位問題。
下一步:舊答案、半截串流與 UI 污染怎麼驗證