sourcebolt

io.github.candidloom-hub由 GitHub 帳號 candidloom-hub 發布v0.3.3更新於 Nov 4, 2026

Fast MCP server for Google NotebookLM: notebooks, sources, cited chat, research. Unofficial.

概覽

AI 產生的概覽

非官方 MCP 伺服器,讓助理操作你的 Google NotebookLM 筆記本:來源、附引用的問答、研究、筆記與 Studio 產物。

可以做什麼
  • 列出、開啟、建立、重新命名與刪除筆記本,刪除前先提供預覽
  • 新增、列出、讀取與重新命名來源,支援公開網頁、YouTube 連結與貼上的文字
  • 針對筆記本內容提問並回傳引用,讀取與調整對話紀錄,取得建議提示詞
  • 啟動網頁或 Drive 研究任務、查詢進度,並把選取的候選來源匯入筆記本
  • 儲存與列出筆記,產生或列出音訊、報告、測驗、心智圖等 Studio 產物
  • 檢視與變更筆記本共用設定、管理來源標籤、讀取帳戶配額視窗
適用情境
適合已把資料放在 NotebookLM,希望助理附引用地查詢內容、補充來源,或執行研究並匯入結果而不必切換到網頁版的情境。評估階段建議只用於個人本機桌面環境。
執行需求
以 stdio 在本機執行,可透過 npx 安裝(需 Node.js 18+)、Docker 映像、發行版二進位檔或 go install 使用。需先在命令列自行登入 Google(sourcebolt login),登入無法透過 MCP 完成。備援路徑可能需要 Chrome 系列瀏覽器。未宣告任何 API 金鑰或環境變數。
安裝前請注意
非官方專案,與 Google 無關;它呼叫 NotebookLM 的內部網頁介面,隨時可能失效,也可能違反 Google 條款,導致限流或帳號處置。它會把你的 Google 工作階段 Cookie 存在磁碟上,Docker 映像把設定金鑰放在磁碟區中,應像密碼一樣保護。工具可建立、重新命名、共用與刪除筆記本、來源、筆記與對話紀錄;擴大共用範圍或刪除需 confirm:true,否則只回傳預覽。你新增的網址由 Google 擷取。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 sourcebolt,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

sourcebolt

[Release] [License: Apache-2.0]

Let your AI assistant use your Google NotebookLM notebooks: one small, fast program, nothing else to install.

Install in 2 minutes

You want to...Go here
Run one command that installs and connects everythingThe two commands below
Follow pictures for your AI app (Claude, Cursor, VS Code, Windsurf, Gemini CLI, ChatGPT)Step-by-step guides
Let your AI app install it for youLet your AI install it
Use npm, Docker or a manual setup (developers)Install and Connect your AI app

Windows (open PowerShell, paste, press Enter):

powershell
irm https://raw.githubusercontent.com/candidloom-hub/sourcebolt/main/install.ps1 | iex

macOS and Linux (open Terminal, paste, press Enter):

bash
curl -fsSL https://raw.githubusercontent.com/candidloom-hub/sourcebolt/main/install.sh | sh

The installer checks the download, installs sourcebolt for your user only, and then offers sourcebolt setup. Setup finds your AI apps, connects the ones you pick (keeping a backup of their settings), and opens a browser window so you can sign in to Google. Your password goes only to Google.

Quick start · Install · Connect your app · Tools · FAQ · Docs

Independent project. sourcebolt is not made by, endorsed by or sponsored by Google. "NotebookLM" is a trademark of Google LLC. NotebookLM has no public API for personal accounts, so sourcebolt uses the same internal web calls the NotebookLM website makes. Read Limits and risk before you rely on it.

What it does

sourcebolt is an MCP server. MCP (Model Context Protocol) is the standard way AI apps such as Claude, Cursor, VS Code and Codex call outside tools. Once sourcebolt is connected, you can ask your assistant things like:

  • "List my NotebookLM notebooks."
  • "Add these three articles to my Thesis notebook."
  • "Ask the Thesis notebook what the sources say about sample size, with citations."
  • "Research recent work on battery recycling and import the best sources."

The assistant calls sourcebolt, sourcebolt talks to NotebookLM with your own Google session, and the answer comes back with citations from your sources.

Key numbers

Measured on the GitHub Actions runner (2 CPUs, AMD EPYC 7763), v0.2.0, medians. Method and raw data: bench/RESULTS.md and docs/performance.md.

WhatResult
Start-up time (start to ready)8.2 ms
Program sizeabout 10 MB, one file
Memory while idle16.2 MB
sourcebolt's own work per call, 100 notebooks, cached / not cached0.40 ms / 0.76 ms
Chat: first progress after Google's first chunk+0.3 ms
A real notebook_list call to Google848 ms median (Google's time dominates; one laptop, 2026-10-14)

Quick start

  1. Install. Download the file for your system from the latest release and put sourcebolt on your PATH. Step-by-step commands are in Install.

  2. Sign in. Start Brave or Chrome with a debugging port, sign in to NotebookLM in that window, then run:

    bash
    sourcebolt login --attach http://127.0.0.1:9222

    You should see Saved profile "default" for notebook.google.com (N notebooks visible). The browser commands for each system are in docs/auth.md. From the release after v0.2.0, sourcebolt setup does steps 2 to 4 for you (docs/getting-started.md).

  3. Check it.

    bash
    sourcebolt doctor

    Every line should start with ok.

  4. Connect your AI app. For Claude Code:

    bash
    claude mcp add sourcebolt -- sourcebolt serve

    After v0.2.0 you can instead install the Claude Code plugin, which adds the server and the sourcebolt skill (the program must still be on your PATH):

    text
    /plugin install sourcebolt --marketplace candidloom-hub/sourcebolt

    Other apps: Connect your AI app. One-click install links: docs/install-links.md.

  5. Ask a question. In your app, type: "Use sourcebolt to list my NotebookLM notebooks, then ask the first one for a one-paragraph summary with citations."

The full walkthrough with expected output is in docs/getting-started.md.

Install

The current release is v0.3.3. Not sure which way to pick? See docs/install.md, or use the one-line installer (it verifies the download's checksum, needs no admin rights, and -Uninstall / --uninstall undoes it):

powershell
irm https://raw.githubusercontent.com/candidloom-hub/sourcebolt/main/install.ps1 | iex   # Windows PowerShell
bash
curl -fsSL https://raw.githubusercontent.com/candidloom-hub/sourcebolt/main/install.sh | sh   # macOS, Linux

Installing through an AI agent such as Cline? Point it at llms-install.md: agent-ready steps, where you still sign in to Google yourself.

ChannelStatusHow
GitHub release binaryAvailableWindows, macOS and Linux, on x64 and ARM64. See below.
go installAvailableNeeds Go 1.27 or newer.
Docker (GHCR)Availableghcr.io/candidloom-hub/sourcebolt:0.3.3. Images are tagged by version only; there is no latest tag.
npm (npx)Availablenpx -y sourcebolt serve (needs Node.js 18+). In an app's MCP config: command npx, args ["-y", "sourcebolt", "serve"].
PyPI (pipx, uvx)Not published yet

Release binary

Windows (PowerShell). This puts sourcebolt.exe in a folder in your user profile and adds that folder to your PATH. For an ARM64 PC, replace amd64 with arm64.

powershell
$dir = "$env:LOCALAPPDATA\Programs\sourcebolt"New-Item -ItemType Directory -Force $dir | Out-NullInvoke-WebRequest https://github.com/candidloom-hub/sourcebolt/releases/download/v0.3.3/sourcebolt_0.3.3_windows_amd64.zip -OutFile "$env:TEMP\sourcebolt.zip"Expand-Archive "$env:TEMP\sourcebolt.zip" -DestinationPath $dir -Force[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path", "User") + ";$dir", "User")

Open a new terminal, then run sourcebolt --version. It prints sourcebolt 0.3.3.

macOS and Linux (bash). Set OS to darwin or linux and ARCH to amd64 or arm64.

bash
OS=linux ARCH=amd64curl -fsSLO "https://github.com/candidloom-hub/sourcebolt/releases/download/v0.3.3/sourcebolt_0.3.3_${OS}_${ARCH}.tar.gz"tar -xzf "sourcebolt_0.3.3_${OS}_${ARCH}.tar.gz" sourceboltmkdir -p ~/.local/bin && mv sourcebolt ~/.local/bin/sourcebolt --version

If sourcebolt is not found, add ~/.local/bin to your PATH. Each release has a checksums.txt with a keyless cosign signature and a CycloneDX SBOM (software bill of materials) per archive; docs/security.md shows how to check them.

Go

bash
go install github.com/candidloom-hub/sourcebolt/cmd/sourcebolt@latest

Docker

bash
docker run -i --rm -v sourcebolt-config:/config ghcr.io/candidloom-hub/sourcebolt:0.3.3

The image has no OS keyring, so the profile key is kept in a file inside the /config volume. Protect that volume like a password. The 0.2.0-browser tag adds a browser for the fallback path. Signing in inside a container: docs/auth.md.

Connect your AI app

Sign in first. All apps start the same command: sourcebolt serve. If sourcebolt is not on your PATH, use the full path to the program instead (on Windows, for example C:\\Users\\you\\AppData\\Local\\Programs\\sourcebolt\\sourcebolt.exe inside JSON).

AppWorks locally?Setup
Claude CodeYesclaude mcp add sourcebolt -- sourcebolt serve, or after v0.2.0 the plugin: /plugin install sourcebolt --marketplace candidloom-hub/sourcebolt
Claude DesktopYesAdd to claude_desktop_config.json (below)
CursorYesAdd to ~/.cursor/mcp.json (below)
VS Code (Copilot agent mode)Yescode --add-mcp '{"name":"sourcebolt","type":"stdio","command":"sourcebolt","args":["serve"]}'
WindsurfYesAdd to its mcp_config.json (below)
Codex CLI and IDEYescodex mcp add sourcebolt -- sourcebolt serve
Gemini CLIYesgemini mcp add -s user sourcebolt sourcebolt serve
ChatGPT desktop appYes, as a local (STDIO) serverSettings, MCP servers; it shares the Codex configuration
ChatGPT on the webNoNeeds a public HTTPS server. sourcebolt runs only on your computer, by design.

The JSON format used by Claude Desktop, Cursor and Windsurf:

json
{  "mcpServers": {    "sourcebolt": { "command": "sourcebolt", "args": ["serve"] }  }}

File locations, VS Code JSON, Codex TOML, the HTTP mode and which snippets were tested: docs/clients.md.

Small tool budget? Add "--tools", "minimal" to args to expose only the 8 core tools.

What your assistant can do

Grouped by task. Every tool, option and state is in the generated reference, docs/tools.md.

TaskTools
Find and open notebooksnotebook_list, notebook_open, notebook_create, notebook_update
Add and read sources (web pages, YouTube, pasted text)source_add, source_list, source_read, source_update
Ask questions with citationschat_ask, chat_status, chat_history, chat_configure, suggest
Find new sources on the webresearch_start, research_status, research_import
Keep notesnote_list, note_save
Studio (audio, reports, flashcards, ...)studio_list, studio_generate
Sharing, labels, accountshare_status, share_update, label_list, label_update, account_settings
Clean updelete (always previews first), job_cancel

Some options are not available yet, for example Drive and file uploads and the Studio option values no live capture has confirmed. They return a clear UNSUPPORTED_BY_TRANSPORT error instead of failing silently. SKILL.md tells an agent which tool to use when.

How it works

  1. Direct calls first. sourcebolt sends NotebookLM's own internal web requests (called RPC, remote procedure calls) over HTTP/2 with your session cookies. This is the fast path.
  2. Browser fallback. If Google rejects the direct request, sourcebolt can repeat it inside a headless Chrome-family browser on a separate profile. It needs Brave, Chrome or Edge installed (or the -browser Docker image).
  3. Page fallback. If Google changes the format of the chat or add-source request, sourcebolt can type into the NotebookLM page itself and read the answer (the "DOM" fallback, named after the page structure it drives).

Turn the browser paths off with --no-browser-fallback. server_info shows which path served the last call. Details: docs/auth.md.

FAQ

Is this an official Google product? No. It is an independent open-source project.

Does sourcebolt see my Google password? No. You sign in yourself, in a normal browser window. sourcebolt keeps only the session cookies, encrypted on your disk.

Can the AI read my cookies? No tool accepts or returns cookies or passwords. Sign-in works only from the command line.

Does it send my data anywhere else? No. It talks only to NotebookLM. URLs you add as sources are fetched by Google, not by your computer.

Is it free? Yes. Apache-2.0, no paid tier.

More answers: docs/faq.md. Something broken? docs/troubleshooting.md.

Limits and risk

  • Unofficial. Google can change NotebookLM's internal calls at any time. Tools may break until sourcebolt is updated.
  • Terms of Service. Automating a Google web app with your session may break Google's terms and could lead to rate limits or account action. You use sourcebolt at your own risk; there is no warranty (see the license).
  • Google's quotas apply. Limits on notebooks, sources, chats and Studio are set by Google per account. sourcebolt reports them as errors and does not bypass them.
  • Try it safely first. Use a test notebook with public content while you evaluate it.

Documentation

Start at docs/index.md. Highlights:

Contributing

Bug reports and pull requests are welcome on GitHub Issues. Before you open one:

  • Run sourcebolt --version and sourcebolt doctor and include the output. Remove any cookies or tokens first.
  • For code changes, run go vet ./... and go test ./....
  • docs/tools.md is generated. Change the tool descriptions in code, then run go run ./tools/gendocs > docs/tools.md.
  • Report security problems privately, as described in docs/security.md.

License

Apache-2.0. See LICENSE and NOTICE.

Credits

sourcebolt is written from scratch. No source code from other projects was copied. Designs and knowledge of the NotebookLM wire format were learned, with thanks, from these MIT- or Apache-2.0-licensed projects (see NOTICE and research/notes/). Projects with no license or a copyleft license were read for behavior only, and nothing from them was used.

ProjectLicenseWhat we learned from it
teng-lin/notebooklm-pyMITRPC ids, payload layouts, source and chat flows
tmc/nlmMITGo wire-protocol modeling and lossless round-trip testing
jacob-bd/gemini-notebook-mcp-cliMITMCP tool surface, internal API reference
LocalKinAI/notebooklm-goApache-2.0Go client and auth flow ideas

來源:README.md,提交 26d1cc3

工具

30

account_settings

Account settings

Read the account's quota windows, or set the output language when output_language is given. The language setting slot is not live-verified (the call is sent, but Google may ignore or reject it).

輸入參數output_language

auth_login

Sign in

Not available through MCP: sign-in needs the local credential store, and cookies should not pass through a chat. Returns UNSUPPORTED_BY_TRANSPORT with the CLI command to run instead (sourcebolt login --import, --browser or --attach).

輸入參數filehostmethod必填profile

auth_logout

Sign out

Not available through MCP: the credential store is only reachable from the CLI. Returns UNSUPPORTED_BY_TRANSPORT with the command to run instead (sourcebolt logout).

輸入參數confirmprofile

chat_ask

Ask a notebook

Ask a question about a notebook's sources. Streams partial text as progress notifications. Returns the answer, citations (source, cited text, UTF-16 offsets) and the conversation id. save_as_note also saves the answer as a note (note_id, or note_error when it could not be saved). wait=false returns a job_id; poll with chat_status. Not retried after sending.

輸入參數waitsourcesnotebook必填question必填save_as_noteconversation_idnew_conversation

chat_configure

Configure chat

Change a notebook's chat settings: mode (default, learning_guide, or custom with custom_prompt) and response_length (default, longer or shorter). Unset fields keep their value. mode default with response_length default resets the notebook to the web app's defaults.

輸入參數modenotebook必填custom_promptresponse_length

chat_history

Chat history

Read a notebook conversation (oldest turn first within a page), with cursor paging. format=markdown adds a rendered transcript. Turn layout is not yet live-verified.

輸入參數limitcursorformatnotebook必填conversation_id

chat_status

Chat job status

Status and result of a detached chat_ask (wait=false): running, done, failed or cancelled. Jobs live in memory and are dropped an hour after they finish or when the server restarts.

輸入參數job_id必填

delete

Delete

Delete notebooks, sources, notes, artifacts, chat history, labels or collections. Without confirm:true it only returns a preview of what would be deleted and changes nothing. Items are matched strictly (exact id, unique id prefix or exact title) against a fresh list. source, note and chat_history need notebook; chat_history deletes the whole history of the given conversations; it reaches only the newest 20 conversations of a notebook, and its preview shows their created and updated times and, when the whole history can be read, the first question. Kinds artifact, label and collection are not available yet and return UNSUPPORTED_BY_TRANSPORT.

輸入參數ids必填kind必填confirmnotebook

job_cancel

Cancel job

Cancel a running detached job (chat_ask with wait=false, deep research). For an ask with a known conversation the server-side generation is also stopped, best effort.

輸入參數job_id必填

label_list

List labels

List a notebook's source labels with emoji and the ids of the sources in each. Collections are not available yet.

輸入參數scopenotebook必填

label_update

Update label

Rename a label, set its emoji, or add/remove sources. Actions auto and create (and notebook collections) are not available yet and return UNSUPPORTED_BY_TRANSPORT. Payload shapes are not live-verified.

輸入參數nameemojiitemslabel必填scopeaction必填notebook必填

note_list

List notes

List the notes of a notebook with id, title and content. Deleted notes are not shown.

輸入參數notebook必填include_mind_maps

note_save

Save note

Create a note, or update an existing one (note = id or title). from_turn (save a chat turn as a note) is not available yet and returns UNSUPPORTED_BY_TRANSPORT.

輸入參數notetitlecontentnotebook必填from_turn

notebook_create

Create notebook

Create a notebook with a title and optionally add sources in the same call (same items as source_add). The create call is sent once and never retried. emoji is accepted but ignored (no known wire slot). If the rename or the source add fails, the notebook still exists and its id is returned with warnings.

輸入參數emojititle必填sources

notebook_list

List notebooks

List NotebookLM notebooks with id, title, source count and ownership. Filter by title and scope. Returns 20 by default; has_more says whether to page with offset. Cached 30 s.

輸入參數limitqueryscopeoffsetrefresh

notebook_open

Open notebook

Open one notebook by id or title: its sources with status, summary and suggested questions.

輸入參數notebook必填

notebook_update

Update notebook

Rename a notebook (title, verified by read-back) and/or drop it from the recently viewed list (remove_from_recent). emoji, pinned, alias and tags are not available yet and are ignored with a note.

輸入參數tagsaliasemojititlepinnednotebook必填remove_from_recent

research_import

Import research

Import research candidates as notebook sources, by urls (from research_status), report, or all. Candidates are matched by URL against a fresh read, so results reordered since research_status still import the intended ones; an unknown URL is NOT_FOUND. Candidates already in the notebook are skipped, so a retry is safe. Reports added, skipped and failed per candidate.

輸入參數alljob必填urlsreportnotebook必填

research_start

Start research

Start a web or Drive research job in a notebook (fast or deep). Returns a job handle; poll with research_status, then import with research_import. Queries under 4 words are rejected unless force is true. Mode discover is not yet available (UNSUPPORTED_BY_TRANSPORT).

輸入參數modeforcequery必填corpusnotebook必填

research_status

Research status

Check research jobs of a notebook and list their candidates (pick them by url in research_import). With wait_seconds (0-120) polls every 3 s, reporting progress, until the job is done.

輸入參數jobnotebook必填wait_secondsinclude_report

server_info

Server info

Show the sourcebolt version, active Google profile, NotebookLM host, enabled tools and which transport served the last call. No Google call unless include_usage is set.

輸入參數include_usage

share_status

Share status

Show who a notebook is shared with and whether the link is public.

輸入參數notebook必填

share_update

Update sharing

Change notebook sharing: link visibility (public) and per-user roles (viewer, editor, remove). Widening access or removing people requires confirm:true; without it a preview is returned and nothing is sent. The link setting and the user changes are sent as two calls; if only one applies, status is partial and parts says which applied and which failed. Payload shapes are not live-verified. view_level and artifact sharing are not available yet.

輸入參數usersnotifypublicconfirmmessageartifactnotebook必填view_level

source_add

Add sources

Add sources to a notebook: public URLs (YouTube auto-detected) and pasted text, in one call. Returns a per-item outcome. Drive and file items are not yet available (UNSUPPORTED_BY_TRANSPORT). URLs to private or internal addresses are rejected.

輸入參數items必填notebook必填

source_list

List sources

List a notebook's sources with type and processing status; optionally filter by status.

輸入參數statusnotebook必填

source_read

Read source

Read a source's full text, markdown, or guide (summary and keywords), paged by character offset (max_chars default 20000; see truncated and next_offset).

輸入參數modeoffsetsource必填notebook必填max_chars

source_update

Update source

Rename a source (title) and/or check whether it is up to date (check_freshness). refresh is not yet available (UNSUPPORTED_BY_TRANSPORT).

輸入參數titlesource必填refreshnotebook必填check_freshness

studio_generate

Generate studio artifact

Generate a Studio artifact: audio, video, report, interactive_report, slide_deck, mind_map, quiz, flashcards, infographic or data_table. Each kind takes only the option values a live capture has proven (the enums); other values the web app offers return UNSUPPORTED_BY_TRANSPORT naming the option, before any call. Omitted options take the web app's defaults. instructions is optional for audio, video, slide_deck and quiz, required for report, mind_map, flashcards and data_table, and refused by infographic and interactive_report (each as captured). video.generate_later asks for deferred generation (cinematic format only). report needs report.title and report.description plus instructions as the prompt (suggest surface report returns ready-made triples). Checks the account quota first and returns a QUOTA error when it is used up. Artifacts are built from the notebook's sources only, not notes (the web app can add notes; that is not supported). Returns the new artifact as pending; poll studio_list for its status. Not retried after sending.

輸入參數kind必填quizaudiovideoreportsourceslanguagenotebook必填flashcardsslide_deckinfographicinstructions

studio_list

List studio artifacts

List a notebook's Studio artifacts (audio, video, report, slide_deck, mind_map, quiz, flashcards, infographic, data_table) with kind and status (pending while queued or generating, then ready or failed). Pass artifact to read one with its interactive content (HTML or mind-map tree) when Google has any.

輸入參數kindstatusartifactnotebook必填

suggest

Suggestions

Suggested prompts for a surface: chat, report or studio_options. The followups surface is not yet available (UNSUPPORTED_BY_TRANSPORT until a live capture pins it).

輸入參數querysourcessurface必填notebook

版本歷史

2
  1. v0.3.3最新Oct 21, 2026
  2. v0.3.1Oct 20, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分