Troubleshooting
May 1, 2026 · View on GitHub
A symptom → fix matrix for v2.0.0. For the full env-var inventory, see configuration.md.
Chrome fails to launch (macOS Tahoe / Windows exit 21)
Symptom: Failed to launch chrome, chrome exited immediately, code 21, executable doesn't exist.
Cause: System Chrome on macOS 26 (Tahoe) and certain Windows 11 setups crashes on the persistent profile launch.
Fix: Force the bundled Patchright Chromium.
BROWSER_CHANNEL=chromium npx notebooklm-mcp@latest
# or
NOTEBOOKLM_BROWSER_CHANNEL=chromium npx notebooklm-mcp@latest
The fallback is also auto-applied when launch errors match the known patterns, but setting the env var explicitly makes the choice deterministic.
ask_question times out
Symptom: The tool fails after roughly 10 min with a timeout error.
Checks:
- Confirm the answer wait is sufficient — long-form prompts on notebooks with many sources legitimately exceed 2 min.
Or per-call:ANSWER_TIMEOUT_MS=900000 npx notebooklm-mcp@latest # 15 minutesbrowser_options.timeout_ms. - Run with a visible browser to see what NotebookLM is doing:
Or start the server with{ "name": "ask_question", "arguments": { "question": "...", "show_browser": true } }HEADLESS=false. - Check
get_health— ifauthenticated=false, the page is on the login screen, not the notebook.
Session expired / repeated login prompts
Symptom: NotebookLM keeps redirecting to the login screen, or get_health reports authenticated=false after a previously successful login.
Workflow:
- Close every Chrome / Chromium instance the user has open. An open Chrome can hold the persistent profile lock.
re_authto wipe stored auth and prompt for a fresh login.- If
re_authfails repeatedly, runcleanup_datawith the library preserved:
Review the preview, then run again with{ "name": "cleanup_data", "arguments": { "confirm": false, "preserve_library": true } }confirm: true. Thensetup_auth.
WSL1
Symptom: Chrome refuses to launch under WSL1.
Fix: Upgrade to WSL2.
wsl --set-default-version 2
wsl --set-version <distro> 2
WSL2 with WSLg (Windows 11 / Windows 10 22H2+) supports a real Chromium and works out of the box.
Headless Linux server
Symptom: setup_auth fails on a server with no display because the login window cannot open.
Fix: Run the one-time setup under xvfb-run. After login the persistent Chrome profile lets every subsequent run go fully headless.
xvfb-run -a npx notebooklm-mcp@latest
# call setup_auth from your client, complete login, then exit
# from then on, run normally:
npx notebooklm-mcp@latest
"Unknown resource: mcp://notebooklm"
Cause: A client used the wrong URI scheme.
Fix: The scheme is notebooklm://, not mcp://. Supported URIs:
notebooklm://librarynotebooklm://library/{id}notebooklm://metadata(deprecated)
The error message in v2 lists the correct set.
Orphan Chrome processes
Symptom: Chrome processes survive after the MCP server exits.
v2 ships a 5-second shutdown watchdog and an aggressive teardown path, so this is rare. If it does happen:
- Kill the lingering Chromes manually.
- Run
cleanup_datawithpreserve_library: trueto remove stale profile locks. - Restart the server.
Profile lock / ProcessSingleton errors
Cause: Another Chrome owns the base profile.
Fix: The default NOTEBOOK_PROFILE_STRATEGY=auto falls back to an isolated per-instance profile. To force isolation always:
NOTEBOOK_PROFILE_STRATEGY=isolated npx notebooklm-mcp@latest
Rate limit reached
Symptom: NotebookLM rate limit reached (50 queries/day for free accounts).
Options:
- Use
re_authto switch to a different Google account. - Use multi-account mode for a clean separation:
NOTEBOOKLM_ACCOUNT=backup npx notebooklm-mcp@latest - Wait until the daily quota resets.
- Upgrade to Google AI Pro/Ultra for higher limits.
Stealth typing too slow
The default 160–240 WPM range is realistic but slow for batch use. Either disable stealth typing or tighten the range:
STEALTH_HUMAN_TYPING=false npx notebooklm-mcp@latest
# or
TYPING_WPM_MIN=400 TYPING_WPM_MAX=600 npx notebooklm-mcp@latest
Citations are empty for source_format=footnotes
The DOM citation panel is read after the answer settles. If it is empty:
- The notebook may not have grounded sources for that question.
- The UI may have shifted — check the active selectors in
src/notebooklm/selectors.ts. - Run with
show_browser=trueand inspect the live page after the answer renders.
Follow-up reminder is missing
In v2 the follow-up reminder appended to ask_question answers is off by default. Re-enable with:
NOTEBOOKLM_FOLLOW_UP_REMINDER=true npx notebooklm-mcp@latest
AI marker breaks downstream parsing
The default answer text starts with [AI-GENERATED via Gemini 2.5 (NotebookLM) — …]. To return to the unprefixed answer, set:
NOTEBOOKLM_AI_MARKER=false npx notebooklm-mcp@latest
Or replace the prefix with your own:
NOTEBOOKLM_AI_MARKER_PREFIX="[notebooklm]" npx notebooklm-mcp@latest
The _provenance envelope on the result remains regardless.
HTTP transport: unknown session
Cause: The client made a GET /mcp or POST /mcp (non-initialize) without echoing the Mcp-Session-Id returned by the initial initialize response.
Fix: Capture the Mcp-Session-Id response header from the initialize call and pass it on every subsequent request. The lifecycle is owned by the MCP SDK's StreamableHTTPServerTransport.