Releases: jacob-bd/gemini-notebook-mcp-cli
Releases · jacob-bd/gemini-notebook-mcp-cli
Release list
v0.9.4
Fixed
- Misleading "Cannot connect to browser on port" error when Chrome is already running (#272) — the error now detects the Chrome hand-off case and tells you to fully quit Chrome and retry. Thanks to @argonaut-cm for the detailed repro with live CDP target output.
Added
notebook.cloud.google.comrecognized as a NotebookLM host — the Workspace/enterprise variant of the "Gemini Notebook" rebrand host added in 0.9.3. Thanks to @conexaoarteiro for reporting the rebrand on a Workspace account.
See CHANGELOG.md for full details.
v0.9.3
Fixed
- Support Google's "Gemini Notebook" rebrand at
notebook.google.com(#269) — Google is rolling out a rebrand of NotebookLM that redirects some signed-in accounts fromnotebooklm.google.comtonotebook.google.com. Previously this broke every auth path for migrated accounts:nlm logintimed out because sign-in detection only recognized the old host; API calls failed because the httpx client always targetednotebooklm.google.comregardless of where the account actually landed; and theNOTEBOOKLM_BASE_URLescape hatch rejected the new host outright.notebook.google.comis now a recognized NotebookLM host for login detection (is_logged_in) and forNOTEBOOKLM_BASE_URL.- The CLI now records which host a signed-in session actually landed on (
base_host, persisted per-profile inmetadata.json) and every client construction path — CLI, MCP, chat sessions, and thenlm doctor auth-replaydiagnostic — routes requests to that host automatically. No configuration is needed for migrated accounts; non-migrated accounts see no change, since the default host is stillnotebooklm.google.com. - Precedence:
NOTEBOOKLM_BASE_URLenv var (if set) > the account's persistedbase_host> the default host. - Thanks to @grergea for the detailed report and reproduction steps!
v0.9.2
Fixed
- Desktop extension finds uvx installed via
pip install --useron Windows (#267) — the.mcpblauncher could fail to start withError: Could not find 'uvx'even when uv was installed, becausepip install --user uvplacesuvx.exein%APPDATA%\Python\Python3XX\Scripts, which Windows does not add to PATH and which was missing from the launcher's search list. The launcher now checks the per-user Scripts directory of every installed CPython version. No behavior change on macOS/Linux. Thanks to @onexoluxion for the fix!
Security
- Bumped locked dependencies with published CVEs (#268) —
uv.locknow pins mcp 1.28.1, starlette 1.3.1, python-multipart 0.0.32, cryptography 49.0.0, and pyjwt 2.13.0. Lockfile-only change: no source or constraint changes, and end users installing viauv tool installwere already resolving patched versions from PyPI — this brings the committed lockfile (used by CI and contributors) up to date. Thanks to @onexoluxion for the precise report and verified fix command!
v0.9.1
Added
- Chat session management (#256) — list, view, export, and save past notebook chats.
- CLI:
nlm chats list <notebook>,nlm chats get <notebook> [conversation_id],nlm chats export <notebook> [conversation_id] --format md|json --output file, andnlm chats to-note <notebook> <conversation_id> [--turn N] [--title ...]. - MCP tools:
chat_list,chat_get,chat_export. - Transcripts are fetched from NotebookLM's server (a newly-documented
khqZzRPC, seedocs/API_REFERENCE.md), so past chats are visible even from a fresh CLI invocation or MCP session — not just chats made earlier in the same process. - Documented in
SKILL.md,AGENTS_SECTION.md'scommand_reference.md,docs/CLI_GUIDE.md,docs/MCP_GUIDE.md,README.md, andAGENTS.md.
- CLI:
Fixed
- Preserve profile email across token updates (#266) —
AuthManager.save_profile()now preserves the existing stored profile email frommetadata.jsonwhenemail=Noneis passed during background CSRF updates, token refreshes, andsave_tokens_to_cache()calls. - Chat session tools now respect the configured default profile —
services/chats.pyno longer hardcodes profile"default"; it now falls back toget_config().auth.default_profilelike the rest of the CLI/MCP client resolution, sochat_list/chat_get/chat_exportandnlm chats ...work correctly for accounts usingnlm login switch. nlm chats to-note/save_chat_to_notenow creates the note correctly — it was callingnotes_service.create_note()with the wrong signature (notebook=/profile=keyword args instead of the required(client, notebook_id, content, title)), which raised aTypeErrorat runtime. Never shipped, caught before release via live testing.chat_list/chat_get/chat_exportare now hideable viaNOTEBOOKLM_DISABLED_GROUPS— added to thechattool group intool_groups.py, which previously covered onlynotebook_query/chat_configure/notebook_query_start/notebook_query_status.- Tool count corrected to 43 across all docs —
label,notebook_query_start, andnotebook_query_statuswere registered MCP tools missing frommcp/tools/__init__.py's__all__and fromdocs/MCP_GUIDE.md(which also separately lackedsource_renameandnotebook_share_batch). Fixed the export list and documented every tool; updated the stale "40 tools" (and one "39 tools") count in README.md, the desktop extension manifest,SKILL.md, anddocs/MCP_CLI_TEST_PLAN.md. Added a regression test (test_groups_cover_every_registered_tool) so a new tool shipping without atool_groups.pyentry fails CI instead of silently drifting.
v0.9.0
Added
- Bulk artifact download: new MCP tool
download_all_artifactsand CLI commandnlm download alldownload every completed Studio artifact of a notebook — or every notebook in the account with--all-notebooks/all_notebooks=True— into per-notebook directories named after each notebook's title. --types/artifact_typesfilter to restrict which artifact types are downloaded.--skip-existing/skip_existingfor incremental re-runs — previously downloaded files are never re-fetched.- Safe cross-platform filenames: invalid characters replaced, Windows reserved names escaped, and collisions deduped case-insensitively for both notebook directories and artifact filenames.
- A failure on one artifact or notebook is recorded and does not stop the rest; the CLI exits non-zero only when nothing was downloaded and failures occurred.
Thanks
Thanks to @hansschenker for the original contribution (#258), and to @runthangs for following up with fixes for directory collisions, case-insensitive overwrites, and the --all-notebooks exit code (#264)!
Documentation
- Reconciled the MCP tool count (39 → 40) and documented
download_all_artifacts/nlm download allacross the README, MCP Guide, CLI Guide, packaged skill, and command reference.
Validation
- 1,203 automated tests passed, 39 skipped.
- Ruff lint and formatting checks passed.
- Live smoke test against a real notebook: full download of 18 artifacts, then a
--skip-existingre-run correctly skipped all 18.
Full Changelog: v0.8.9...v0.9.0
v0.8.9
Added
- MCP
studio_statusnow returns a lean page of 20 artifacts by default. Agents can poll one artifact by ID, request later pages, or opt into detailed prompts and content. - CLI Studio JSON now includes both
idandartifact_idwhile keeping the existing plain-list format.--mcp-compatiblereturns the MCP response shape. nlm video listnow gives people and agents a direct way to list generated videos.
Fixed
- Non-English Short video requests now add a clear language requirement for narration, subtitles, and on-screen text.
- MCP Studio creation errors now preserve the retry guidance for NotebookLM rate limits.
- CLI, MCP, API, troubleshooting, test-plan, and bundled agent documentation now describe the current status, language, and retry behavior.
Thanks
Thanks to @smlfg for running a real 20-video batch, documenting each failure clearly, and offering concrete fixes. That report gave us the detail we needed to address the agent workflow from creation through polling.
Validation
- 1,162 automated tests passed, with 38 skipped and 1 deselected.
- Ruff lint and formatting checks passed.
- We built and verified the Python wheel, source distribution, and MCPB desktop extension.
Full Changelog: v0.8.8...v0.8.9
v0.8.8
Added
- Opt-in file upload directory allowlist (#260) — Set
NOTEBOOKLM_ALLOWED_FILE_DIRSto restrict local file uploads to approved directories. The setting accepts multiple directories separated by the operating system's path separator and is disabled by default, so existing installations keep their current behavior. Thanks to @failsafesecurity for the contribution! - Opt-in download output directory (#261) — Set
NOTEBOOKLM_DOWNLOAD_DIRto keep downloaded artifacts inside one approved directory. The setting is disabled by default, while the existing protections against sensitive system directories remain active. Thanks again to @failsafesecurity for the contribution!
Fixed
- Rejected document uploads now fail fast (#257) — When NotebookLM immediately rejects a non-media file,
nlmnow reports the failure on the first terminal status instead of waiting for the full processing timeout. The error includes the source ID and deletion guidance, and source listings expose the numeric processing status for diagnosis. Audio and video uploads retain their transient-processing tolerance. Thanks to @ericvael for the detailed reproduction data! - Refreshed authentication cookies are persisted — Rotated cookies are now saved together with refreshed CSRF and session tokens, preventing a successful refresh from leaving stale credentials on disk.
- Regular notes no longer appear as mind maps (#258) — Mind-map discovery now excludes ordinary saved notes. Thanks to @hansschenker for the contribution!
- Newer Studio mind maps download correctly (#258) — Mind maps returned through NotebookLM's shared type-4 Studio format are now classified by subtype and downloaded as their embedded JSON instead of being treated as quizzes or flashcards. Thanks again to @hansschenker for the contribution!
Documentation
- Documented the opt-in upload and download directory controls and the observed type-4 mind-map format.
Validation
- Passed 1,150 automated tests (38 skipped, 1 deselected).
- Passed Ruff lint and formatting checks.
- Built and verified the Python wheel, source distribution, and MCPB desktop extension.
Full Changelog: v0.8.7...v0.8.8
v0.8.7
This maintenance release improves JSON output for scripting and fixes two live-observed metadata issues.
Added
- Added
--jsonsupport to source add/delete, notebook delete, and every Studio creation command, including noun-first and verb-first command styles. (#256) - Added notebook emoji to
nlm notebook get --json. - Added the original question to
nlm notebook query --json.
Fixed
- Correctly identify saved mind maps in Studio status instead of labeling them as flashcards.
- Prevent duplicate mind-map entries when NotebookLM returns the same artifact through both status paths.
- Report Drive-picker PDFs as
pdfwhen NotebookLM provides an explicitapplication/pdfMIME type with its ambiguous source code.
Validation
- Tested all new JSON creation and deletion outputs against a live NotebookLM account.
- Verified all nine Studio creation commands returned real artifact IDs.
- Passed 1,120 automated tests plus Ruff lint and formatting checks.
Full Changelog: v0.8.6...v0.8.7
v0.8.6 - Fix false browser_bound_replay verdict
Fixed
nlm doctor auth-replayfalsebrowser_bound_replayverdict on merely expired cookies (#248) — The diagnostic previously compared stale on-disk cookies (httpx_saved,httpx_after_rotate) against an always-fresh live browser session (cdp_in_page). Since a live session's cookies are fresh by construction, that comparison could not distinguish ordinary cookie expiry from genuine device-bound replay — both produce the exact same pass/fail pattern. The diagnostic now re-extracts cookies from the same live browser session used for the CDP probe and replays them through plain httpx (newhttpx_freshlane) before drawing a conclusion. If fresh cookies succeed over httpx, the verdict is now the newstale_cookies(runnlm login, no transport needed);browser_bound_replayis only reported when even freshly re-extracted cookies fail outside the browser. Thanks to @leomesheti-crypto for the detailed controlled-comparison report that caught this.
Changed
nlm doctor auth-replaynow reports four lanes instead of three: saved-cookie httpx replay, httpx after forced cookie rotation, fresh-cookie httpx replay, and the in-page CDP fetch.--no-cdpskips the two browser-backed lanes together.- Updated
docs/AUTHENTICATION.mdto describe the corrected four-lane diagnostic and clarify when the experimentalNOTEBOOKLM_RPC_TRANSPORT=cdptransport is actually justified.
Other
- README: moved the "Buy Me a Coffee" call-out from a low-visibility badge in the top badge row to a prominent, centered block near the top of the page.
v0.8.5
What's Changed
- feat(mcp): opt-in group-based tool gating by @KoscheiiB in #254
New Contributors
- @KoscheiiB made their first contribution in #254
Full Changelog: v0.8.4...v0.8.5