Releases: jacob-bd/notebooklm-mcp-cli
v0.5.30 - Fix stale NOTEBOOKLM_COOKIES auth loop
What's Fixed
Auth loop when NOTEBOOKLM_COOKIES env var is stale (#170)
If you had NOTEBOOKLM_COOKIES set in your MCP config (e.g. claude_desktop_config.json) and those cookies expired, you'd get stuck in an auth loop with no useful error. refresh_auth would return false "success" while silently reloading the same stale cookies. Nothing you did — nlm login, save_auth_tokens, editing auth.json — would fix it.
Now:
refresh_authdetects the env var and returns a clear, actionable error explaining exactly what to do- Auth failure messages mention
NOTEBOOKLM_COOKIESwhen it's the likely culprit
Deprecated env vars cleaned up
NOTEBOOKLM_CSRF_TOKEN and NOTEBOOKLM_SESSION_ID are no longer read from the environment. Both are auto-extracted on every client init. Stale values from env were bypassing auto-refresh and causing auth failures.
Troubleshooting docs
Added a new section to AUTHENTICATION.md covering the env var auth trap, how to diagnose it, and both fix options.
Thanks to @nobolso for the thorough root cause analysis that made this fix fast to land!
v0.5.29
Fixed
- Python 3.11 TypedDict compatibility (Issue #167) — Pydantic v2 rejects
typing.TypedDicton Python < 3.12. All 13 service files now importTypedDictfrom a centralized compat shim (services/_compat.py) that usestyping_extensionson < 3.12. Addedtyping_extensionsas an explicit dependency for Python < 3.12. Thanks to @irvinghu07 for the clear report and suggested fixes! - SOCKS proxy blocks
nlm login(Issue #167) — The CDP helper'shttpx.ClientinheritedALL_PROXYfrom the environment, causingImportError: socksio not installedon localhost CDP connections. Fixed withtrust_env=False. Thanks to @irvinghu07! - MCP
notebook_listalways returns "Authentication expired" (Issue #169) —save_tokens_to_cache()only wrote to the legacyauth.json, butload_cached_tokens()prioritizesprofiles/default/cookies.json. Tokens saved via the MCPsave_auth_tokenstool were never read back. Fixed by syncing writes to bothauth.jsonand the active profile. Thanks to @nobolso for the thorough diagnosis and file structure analysis! - Python 3.14 Windows
pathlib.mkdirregression (Issue #169) —Path.mkdir(parents=True, exist_ok=True)raisesFileExistsError(WinError 183) on Python 3.14 + Windows. Addedsafe_mkdir()wrapper applied to allmkdircalls acrossconfig.py,auth.py,base.py, andcdp.py. Thanks to @nobolso!
Upgrade: uv tool upgrade notebooklm-mcp-cli or pip install --upgrade notebooklm-mcp-cli
Release v0.5.28
Fixed
- HTTP transport: default to stateless mode (Issue #165) — HTTP transport (
--transport http) now defaults to stateless sessions, preventing the MCP SDK double-response crash (AssertionError: Request already responded to) that killed entire sessions on slow Google API calls. Use--no-statelessto opt out. Thanks to @mylaser215 for the thorough root cause analysis (#165)!
Changed
- CLI flags use
BooleanOptionalAction—--stateless/--no-statelessand--debug/--no-debugare now proper toggle pairs. Environment variables (NOTEBOOKLM_MCP_STATELESS,NOTEBOOKLM_MCP_DEBUG) accepttrue/false/0/1/yes/no/on/off(case-insensitive).
Documentation
- CLI Guide: document all skill install targets (Issue #163) — Added
agents,codex,gemini-cli, andalef-agentwith install path details. Fixed missingopencodein setup clients list.
Release v0.5.27
Restore skill targets for codex and gemini-cli, fix source title bug. See CHANGELOG.md for details.
v0.5.26
Added
server_infoauth_status — Local token state (configured|stale|not_configured|error). Thanks @josuebustosn (#160).
Fixed
- Windows Unicode (CLI) — All CLI Rich output uses
make_console()(#156). Thanks @argonaut-cm. - MCP reload after
nlm login— Newer on-disk tokens force client reload (#161). Thanks @josuebustosn.
See CHANGELOG.md for full notes.
v0.5.25
Fixed
- Audio download fails with 302→404 (Issue #158) — Prefer
-dvdownload variant for fast CDN (drum.usercontent.google.com, ~3 MB/s). Audio downloads that previously failed now complete a 47MB file in ~15 seconds. Thanks to @Victor777777! - CDP WebSocket broken with system proxy (Issue #119, PR #157) — Temporarily clear proxy env vars around
websocket.create_connectionso Clash/Surge don't intercept localhost CDP. Thanks to @ahmelkholy! - Windows: MCP server crashes with UnicodeEncodeError (Issue #156) — Reconfigure stdout/stderr to UTF-8 at startup; set
legacy_windows=Falseon Rich consoles. Thanks to @argonaut-cm!
Changed
- Lazy-load
NotebookLMClientin package__init__for lighter startup
Full changelog: https://github.com/jacob-bd/notebooklm-mcp-cli/blob/main/CHANGELOG.md#0525---2026-04-15
v0.5.24
Fixed
-
Studio: Surface revise RPC errors with actionable hints (PR #154) — When
slides revisefails due to an invalid artifact ID or a rejected revision request, the error now surfaces the specific Google API error code (e.g.,INVALID_ARGUMENT) along with a clear hint guiding the user to verify their artifact ID. Previously, these failures produced opaque, unhelpful error messages. Thank you @sickn33 for this fix! -
WSL2: Auth broken on Chrome 136+ due to localhost-only CDP (PR #155) — Chrome 136+ ignores
--remote-debugging-address=0.0.0.0, restricting the DevTools Protocol to127.0.0.1only. This completely brokenlm login --wslfor all WSL2 users. The fix switches to a port proxy approach: Chrome launches on port 9223 (localhost) and WSL connects via port 9222 through anetsh interface portproxyrule. Temp Chrome profiles are now created on the Windows filesystem (%TEMP%) instead of WSL's/tmpto prevent "Profile error occurred" crashes. Updateddocs/WSL_SETUP.mdwith one-time setup instructions. Thank you @casjogreen for this critical fix!
Full Changelog: v0.5.23...v0.5.24
v0.5.23
Added
- Restore NotebookLM MCP and CLI runtime contracts (PR #152) — Fixed MCP tool boundary registration, normalized error payloads, and restored download/upload sync-compatible entrypoints. Thank you @sickn33 for this immense contribution!
Fixed
- Windows: Server crashes immediately on startup (Issue #150) —
os.execvpfails on Windows. Replaced withsubprocess.runto prevent immediate crashes on Windows 11 during server startup via the.mcpbbundle. Added explicitstdin=sys.stdin,stdout=sys.stdout, andstderr=sys.stderrto ensure the JSON-RPC stdio channel between Claude Desktop and the server remains properly connected across platforms. Thanks to @m3saros for diagnosing the root cause and providing the exact fix!
v0.5.22
Full Changelog: v0.5.21...v0.5.22
v0.5.21
What's Changed
- Fix source alias autodetect, REPL source counts, and audio status=2 readiness by @sickn33 in #146
- Improve Chromium auth resilience and align auth messaging by @agarwalvipin in #144
- Fix: handle HTTP 400 as auth failure for CSRF token recovery by @jacob-bd in #148
New Contributors
Full Changelog: v0.5.20...v0.5.21