Skip to content

Releases: Pantheon-Security/notebooklm-mcp-secure

v2026.2.9 — Fix: performSetup No Longer Destroys Auth Before Chrome Opens

01 Mar 16:14

Choose a tag to compare

Critical Bug Fix

Root Cause

performSetup called clearAllAuthData() unconditionally at startup — before Chrome even opened. If Chrome failed to launch or the user didn't complete login within the timeout, all auth credentials were already destroyed with no recovery path.

This was the final source of recurring auth loss.

Changes

  • Removed clearAllAuthData() from performSetup — Chrome re-login overwrites cookies without needing to delete first. For account switching, call clearAllAuthData() explicitly before invoking setup_auth
  • Added stack trace logging to clearAllAuthData() so every call is traceable in server logs with the exact caller location

Upgrade Notes

Auth is now stable across session restarts. Use auth-now.mjs in the project root for initial authentication or re-authentication.

v2026.2.8 — Fix: cleanup_data No Longer Destroys Auth Credentials

01 Mar 16:14

Choose a tag to compare

Critical Bug Fix

Root Cause

Sessions were following get_health's troubleshooting tip which said to run cleanup_data(confirm:true). This deleted browser_state/ and chrome_profile/ — the Google auth credentials — then setup_auth ran headlessly and failed to restore them.

Changes

  • cleanup_data no longer includes browser_state or chrome_profile in any cleanup path — these contain Google auth cookies that require interactive login to recreate
  • get_health troubleshooting tip updated to say setup_auth(show_browser:true) and explicitly warns not to call cleanup_data for auth issues

v2026.2.7 — Fix: Block Headless setup_auth & Robust auth-now.mjs

01 Mar 16:14

Choose a tag to compare

Bug Fixes

Block Headless setup_auth

  • setup_auth without show_browser:true now returns a clear error
  • Prevents sessions calling setup_auth headlessly from wiping credentials without being able to restore them

Robust auth-now.mjs Script

  • Added explicit error logging at every save step
  • Fixed URL detection (now matches with or without trailing slash)
  • Kills any existing Chrome processes holding the profile before launching
  • Verifies state file exists on disk after save
  • Keeps browser open 60s after success so you can confirm before opening sessions

v2026.2.6 — New: add_folder Tool & Improved Tier Detection

01 Mar 16:14

Choose a tag to compare

New Features

add_folder Tool

Add all files from a local folder as sources to a NotebookLM notebook.

  • Scans for supported file types (default: .pdf, .txt, .md, .docx)
  • Adds each file with per-file progress reporting
  • dry_run: true previews files without adding
  • Auto-splits into multiple numbered notebooks if file count exceeds your tier's source limit
  • Collects per-file errors without stopping the whole batch
  • Optional recursive scanning of subdirectories

Improved Tier Detection

  • Detects NotebookLM Plus / One AI Premium branding (Pro was rebranded in 2024)
  • Infers tier from source count pattern (e.g. 0/300 → Pro, 0/600 → Ultra, 0/50 → Free) shown on notebook page
  • Also infers tier from source limit extracted during get_quota(sync:true)
  • Fixes tier stuck on unknown → free limits for Pro/Ultra accounts

v2026.2.5 — Fix: show_browser Passed to performSetup in setup_auth

01 Mar 16:14

Choose a tag to compare

Bug Fix

show_browser:true was accepted by setup_auth but silently ignored — performSetup always ran headlessly regardless.

Changes

  • show_browser argument is now correctly forwarded to performSetup so setup_auth can open a visible browser even when HEADLESS=true is set in the environment

v2026.2.4 — Auth Stability: 7-Day State Expiry & Race Condition Fixes

01 Mar 16:13

Choose a tag to compare

Auth Stability Improvements

Changes

  • Extended state file expiry from 24h to 7 days — Google cookies last 2-4 weeks so daily expiry was causing unnecessary auth prompts
  • Touch state file on every successful validateWithRetry so the 7-day clock resets on each use rather than from last setup_auth
  • Block headless re_auth without show_browser:true — calling it headlessly wiped credentials then failed to restore them, destroying auth for all concurrent sessions
  • Extended retention-engine policy_session from 1 day to 14 days to match

Bug Fix

re_auth called without show_browser:true now returns a clear error instead of destroying credentials.

v2026.2.3 — Studio Panel Tools Restored

20 Feb 21:06

Choose a tag to compare

What's fixed

generate_data_table and generate_video_overview are fully working again, confirmed on macOS M4 with French locale.

Root causes

1. Dead tile selector
clickDataTableTile used .mat-icon, [class*='icon'] which matched SPAN.icon-container before <mat-icon>, so the === "table_view" equality check always failed silently. Fixed to target the mat-icon element tag directly.

2. False failure on slow shimmer
After clicking the tile, if shimmer-blue didn't appear within 15s the tools returned success: false. The click was triggering generation server-side but the headless browser DOM update lagged. Now returns { success: true, status: "generating" } so callers can poll with get_data_table / get_video_status.

3. data-create-button-type removed by Google
Google removed this attribute from all Studio panel tiles (Feb 2026). Replaced with mat-icon text (table_view) and jslog ID (282298) as locale-independent selectors.

Also in this release

  • Studio panel waitForSelector timeout increased from 10s → 30s
  • Full i18n pass: locale-independent selectors throughout (CSS classes, Material icon names, jslog IDs) — English text as last-resort fallback only
  • GitHub Actions CI on all PRs + main branch protection (force push / deletion blocked, build check required)

Upgrading

git pull && npm run build

v2026.2.0 — Gemini 3, Video Overviews, Data Tables

17 Feb 20:13

Choose a tag to compare

v2026.2.0 — Gemini 3, Video Overviews & Data Tables

Gemini 3 Model Support

  • Default model now gemini-3-flash-preview (was gemini-2.5-flash)
  • gemini-3-pro-preview also available for higher-quality output
  • Deprecation warnings when using Gemini 2.5 models — retiring March 31, 2026
  • Incomplete status handling for Deep Research partial results
  • @google/genai SDK upgraded to 1.41.0

Thinking Level Control

  • New thinking_level parameter for gemini_query and deep_research
  • Options: minimal, low, medium, high
  • Control response thoroughness vs speed

Structured JSON Output

  • New response_schema parameter for gemini_query
  • Pass a JSON schema, get validated structured JSON back from Gemini 3
  • Automatically sets responseMimeType: "application/json"

Video Overview Generation (4 new tools)

  • generate_video_overview — Generate AI-powered Video Overviews via NotebookLM's Studio panel
  • get_video_status — Check generation progress (3-10 min typical)
  • 10 visual styles: auto-select, custom, classic, whiteboard, kawaii, anime, watercolour, retro-print, heritage, paper-craft
  • 2 formats: explainer (full, 5-15 min) and brief (summary, 1-3 min)

Data Table Extraction

  • generate_data_table — Generate structured Data Tables from notebook sources
  • get_data_table — Extract table as JSON with headers and rows
  • Returns machine-readable structured data for analysis and processing

Technical Details

  • 21 files changed, +1,526 lines
  • All browser automation selectors verified against live NotebookLM DOM (Feb 2026)
  • 111/111 tests passing
  • Tool count: 47

Install / Upgrade

claude mcp add notebooklm -- npx @pan-sec/notebooklm-mcp@latest

Full changelog: https://github.com/Pantheon-Security/notebooklm-mcp-secure/blob/main/CHANGELOG.md

v2026.1.12

16 Feb 06:39

Choose a tag to compare

Security Hardening Release

Comprehensive remediation from 4 independent code reviews (Code Quality, Performance, Sustainability, Medusa Security Scan). 23 fixes across 18 files.

Security

  • Constant-time auth — token comparison now uses secureCompare (prevents timing attacks)
  • Command injection fixexecSync() replaced with execFileSync() in file-permissions
  • MCP SDK 1.26.0 — patches HIGH severity cross-client data leak (GHSA-345p-7cg4-v4c7)
  • Audit hash chain — increased to 128-bit truncation for collision resistance
  • Settings validation — parsed JSON validated before merge (prevents property injection)
  • Error sanitization — internal identifiers removed from error messages
  • Dockerfile hardened with --no-install-recommends
  • Config validationNOTEBOOK_PROFILE_STRATEGY validated against allowed values

Fixed — Memory & Concurrency

  • CONFIG mutation race condition — removed all 6 Object.assign(CONFIG, ...) sites
  • RateLimiter memory leak — empty keys now evicted
  • FinalizationRegistry — fixed self-reference preventing GC of secure buffers
  • Event listener leakframenavigated listener cleaned up after 30s timeout
  • Timer leak — SecureCredential auto-wipe timer now .unref()'d

Performance

  • Regex precompilation in sanitizeForLogging (~30-40% faster)
  • IPC reductiondetectRateLimitError consolidated from 8+ calls to 1
  • O(n) dedup in notebook extraction (was O(n^2))
  • ESM import fix — removed inline require('path')

Code Quality

  • Version strings unified to use package.json version
  • Debounced library save — no longer writes to disk on every query
  • ToolResult type safety — default changed from any to unknown

Medusa Scan Analysis

  • 107 findings analyzed: 100 false positives, 7 true positives (all fixed)
  • Detailed FP analysis documented in medusa-fp-analysis.md

Full Changelog

v2026.1.11...v2026.1.12

v2026.1.11

02 Feb 09:27

Choose a tag to compare

What's New

Fixed — Notebook Sync for New Angular UI

  • sync_library now correctly extracts notebook UUIDs from NotebookLM's updated Angular Material interface
    • Automatically switches to grid view where UUIDs are available in DOM element IDs
    • 3-tier extraction strategy: grid view cards → click-navigation → basic table fallback
    • Resolves broken UUID extraction reported in PR #3 — thanks @robert-merrill
  • Quota manager updated to detect notebooks via project-button (grid) and project-action-button (table)

Added — Disable Gemini Tools

  • NOTEBOOKLM_NO_GEMINI=true environment variable hides all 8 Gemini API tools from the tool list
    • Useful for clients with context window limitations (e.g., OpenCode)
    • Affected tools: deep_research, gemini_query, get_research_status, upload_document, query_document, list_documents, delete_document, query_chunked_document

Full Changelog

v2026.1.10...v2026.1.11