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
io.github.candidloom-hubPublished by GitHub account candidloom-hubv0.3.3Updated Nov 4, 2026
Fast MCP server for Google NotebookLM: notebooks, sources, cited chat, research. Unofficial.
Unofficial MCP server that lets an assistant work with your Google NotebookLM notebooks: sources, cited chat, research, notes and Studio artifacts.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Follow the launch instructions in the repository.
[Release] [License: Apache-2.0]
Let your AI assistant use your Google NotebookLM notebooks: one small, fast program, nothing else to install.
Windows (open PowerShell, paste, press Enter):
macOS and Linux (open Terminal, paste, press Enter):
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.
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:
The assistant calls sourcebolt, sourcebolt talks to NotebookLM with your own Google session, and the answer comes back with citations from your sources.
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.
Install. Download the file for your system from the latest release and put sourcebolt on your PATH. Step-by-step commands are in Install.
Sign in. Start Brave or Chrome with a debugging port, sign in to NotebookLM in that window, then run:
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).
Check it.
Every line should start with ok.
Connect your AI app. For Claude Code:
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):
Other apps: Connect your AI app. One-click install links: docs/install-links.md.
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.
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):
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.
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.
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.
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.
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.
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).
The JSON format used by Claude Desktop, Cursor and Windsurf:
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.
Grouped by task. Every tool, option and state is in the generated reference, docs/tools.md.
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.
-browser Docker image).Turn the browser paths off with --no-browser-fallback. server_info shows which path served the last call. Details: docs/auth.md.
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.
Start at docs/index.md. Highlights:
Bug reports and pull requests are welcome on GitHub Issues. Before you open one:
sourcebolt --version and sourcebolt doctor and include the output. Remove any cookies or tokens first.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.Apache-2.0. See LICENSE and NOTICE.
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.
Source: README.md at commit 26d1cc3
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_languageSign 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).
filehostmethodrequiredprofileSign 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).
confirmprofileAsk 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.
waitsourcesnotebookrequiredquestionrequiredsave_as_noteconversation_idnew_conversationConfigure 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.
modenotebookrequiredcustom_promptresponse_lengthChat 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.
limitcursorformatnotebookrequiredconversation_idChat 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_idrequiredDelete
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.
idsrequiredkindrequiredconfirmnotebookCancel 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_idrequiredList labels
List a notebook's source labels with emoji and the ids of the sources in each. Collections are not available yet.
scopenotebookrequiredUpdate 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.
nameemojiitemslabelrequiredscopeactionrequirednotebookrequiredList notes
List the notes of a notebook with id, title and content. Deleted notes are not shown.
notebookrequiredinclude_mind_mapsSave 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.
notetitlecontentnotebookrequiredfrom_turnCreate 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.
emojititlerequiredsourcesList 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.
limitqueryscopeoffsetrefreshOpen notebook
Open one notebook by id or title: its sources with status, summary and suggested questions.
notebookrequiredUpdate 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.
tagsaliasemojititlepinnednotebookrequiredremove_from_recentImport 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.
alljobrequiredurlsreportnotebookrequiredStart 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).
modeforcequeryrequiredcorpusnotebookrequiredResearch 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.
jobnotebookrequiredwait_secondsinclude_reportServer 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_usageShare status
Show who a notebook is shared with and whether the link is public.
notebookrequiredUpdate 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.
usersnotifypublicconfirmmessageartifactnotebookrequiredview_levelAdd 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.
itemsrequirednotebookrequiredList sources
List a notebook's sources with type and processing status; optionally filter by status.
statusnotebookrequiredRead 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).
modeoffsetsourcerequirednotebookrequiredmax_charsUpdate source
Rename a source (title) and/or check whether it is up to date (check_freshness). refresh is not yet available (UNSUPPORTED_BY_TRANSPORT).
titlesourcerequiredrefreshnotebookrequiredcheck_freshnessGenerate 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.
kindrequiredquizaudiovideoreportsourceslanguagenotebookrequiredflashcardsslide_deckinfographicinstructionsList 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.
kindstatusartifactnotebookrequiredSuggestions
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).
querysourcessurfacerequirednotebook90% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
irm https://raw.githubusercontent.com/candidloom-hub/sourcebolt/main/install.ps1 | iexcurl -fsSL https://raw.githubusercontent.com/candidloom-hub/sourcebolt/main/install.sh | shsourcebolt login --attach http://127.0.0.1:9222sourcebolt doctorclaude mcp add sourcebolt -- sourcebolt serve/plugin install sourcebolt --marketplace candidloom-hub/sourceboltirm https://raw.githubusercontent.com/candidloom-hub/sourcebolt/main/install.ps1 | iex # Windows PowerShellcurl -fsSL https://raw.githubusercontent.com/candidloom-hub/sourcebolt/main/install.sh | sh # macOS, Linux$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")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 --versiongo install github.com/candidloom-hub/sourcebolt/cmd/sourcebolt@latestdocker run -i --rm -v sourcebolt-config:/config ghcr.io/candidloom-hub/sourcebolt:0.3.3{ "mcpServers": { "sourcebolt": { "command": "sourcebolt", "args": ["serve"] } }}