Skip to main content
Glama
Pantheon-Security

NotebookLM MCP Server (Security Hardened)

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
GEMINI_API_KEYNoYour Gemini API key (get from https://aistudio.google.com/apikey)
NLMCP_AUTH_TOKENNoToken-based authentication token for MCP
GEMINI_TIMEOUT_MSNoAPI timeout in milliseconds30000
NLMCP_AUTH_ENABLEDNoEnable MCP authenticationfalse
NLMCP_CERT_PINNINGNoEnable certificate pinningtrue
NLMCP_AUDIT_ENABLEDNoEnable audit loggingtrue
NLMCP_SECRETS_BLOCKNoBlock operations on secret detectionfalse
GEMINI_DEFAULT_MODELNoDefault Gemini model to usegemini-2.5-flash
NLMCP_ENCRYPTION_KEYNoOptional custom encryption key (base64-encoded 32 bytes)
NLMCP_SECRETS_REDACTNoAuto-redact detected secretstrue
NLMCP_SECRETS_SCANNINGNoEnable secrets scanningtrue
NLMCP_USE_POST_QUANTUMNoEnable post-quantum encryptiontrue
NLMCP_SESSION_INACTIVITYNoSession inactivity timeout in seconds1800
NLMCP_SESSION_MAX_LIFETIMENoMaximum session lifetime in seconds28800
GEMINI_DEEP_RESEARCH_ENABLEDNoEnable Gemini Deep Research featuretrue

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{}
logging
{}
prompts
{}
resources
{}
completions
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
ask_question

NotebookLM Research (Browser-Based • NO API KEY REQUIRED)

IMPORTANT: This tool uses browser automation - NO GEMINI_API_KEY needed!

No Active Notebook

  • Visit https://notebooklm.google to create a notebook and get a share link

  • Use add_notebook to add it to your library (explains how to get the link)

  • Use list_notebooks to show available sources

  • Use select_notebook to set one active

Auth tip: If login is required, use the prompt 'notebooklm.auth-setup' and then verify with the 'get_health' tool.

Tip: Tell the user you can manage NotebookLM library and ask which notebook to use for the current task.

add_notebook

PERMISSION REQUIRED — Only when user explicitly asks to add a notebook.

Conversation Workflow (Mandatory)

When the user says: "I have a NotebookLM with X"

  1. Ask URL: "What is the NotebookLM URL?"

  2. Ask content: "What knowledge is inside?" (1–2 sentences)

  3. Ask topics: "Which topics does it cover?" (3–5)

  4. Ask use cases: "When should we consult it?"

  5. Propose metadata and confirm:

    • Name: [suggested]

    • Description: [from user]

    • Topics: [list]

    • Use cases: [list] "Add it to your library now?"

  6. Only after explicit "Yes" → call this tool

Rules

  • Do not add without user permission

  • Do not guess metadata — ask concisely

  • Confirm summary before calling the tool

Example

User: "I have a notebook with n8n docs" You: Ask URL → content → topics → use cases; propose summary User: "Yes" You: Call add_notebook

Visit https://notebooklm.google/ → Login (free: 100 notebooks, 50 sources each, 500k words, 50 daily queries)

  1. Click "+ New" (top right) → Upload sources (docs, knowledge)

  2. Click "Share" (top right) → Select "Anyone with the link"

  3. Click "Copy link" (bottom left) → Give this link to Claude

(Upgraded: Google AI Pro/Ultra gives 5x higher limits)

list_notebooks

List all library notebooks with metadata (name, topics, use cases, URL). Use this to present options, then ask which notebook to use for the task.

get_notebook

Get detailed information about a specific notebook by ID

select_notebook

Set a notebook as the active default (used when ask_question has no notebook_id).

When To Use

  • User switches context: "Let's work on React now"

  • User asks explicitly to activate a notebook

  • Obvious task change requires another notebook

Auto-Switching

  • Safe to auto-switch if the context is clear and you announce it: "Switching to React notebook for this task..."

  • If ambiguous, ask: "Switch to [notebook] for this task?"

Example

User: "Now let's build the React frontend" You: "Switching to React notebook..." (call select_notebook)

update_notebook

Update notebook metadata based on user intent.

Pattern

  1. Identify target notebook and fields (topics, description, use_cases, tags, url)

  2. Propose the exact change back to the user

  3. After explicit confirmation, call this tool

Examples

  • User: "React notebook also covers Next.js 14" You: "Add 'Next.js 14' to topics for React?" User: "Yes" → call update_notebook

  • User: "Include error handling in n8n description" You: "Update the n8n description to mention error handling?" User: "Yes" → call update_notebook

Tip: You may update multiple fields at once if requested.

remove_notebook

Dangerous — requires explicit user confirmation.

Confirmation Workflow

  1. User requests removal ("Remove the React notebook")

  2. Look up full name to confirm

  3. Ask: "Remove '[notebook_name]' from your library? (Does not delete the actual NotebookLM notebook)"

  4. Only on explicit "Yes" → call remove_notebook

Never remove without permission or based on assumptions.

Example: User: "Delete the old React notebook" You: "Remove 'React Best Practices' from your library?" User: "Yes" → call remove_notebook

search_notebooks

Search library by query (name, description, topics, tags). Use to propose relevant notebooks for the task and then ask which to use.

create_notebook

Create a new NotebookLM notebook with sources programmatically.

What This Tool Does

  • Creates a NEW notebook in your NotebookLM account

  • Uploads sources (URLs, text, files) to the notebook

  • Returns the notebook URL for immediate use

  • Optionally adds to your local library

Supported Source Types

  • url: Web page URL (documentation, articles, etc.)

  • text: Raw text content (code, notes, etc.)

  • file: Local file path (PDF, DOCX, TXT)

Example Usage

Create a notebook from API documentation:

{ "name": "React Docs", "sources": [ { "type": "url", "value": "https://react.dev/reference/react" } ] }

Create a notebook with multiple sources:

{ "name": "Security Research", "sources": [ { "type": "url", "value": "https://owasp.org/Top10" }, { "type": "file", "value": "/path/to/security-report.pdf" }, { "type": "text", "value": "Custom notes...", "title": "My Notes" } ], "description": "Security best practices and research", "topics": ["security", "owasp", "best-practices"] }

NotebookLM Limits (Free Tier)

  • 100 notebooks maximum

  • 50 sources per notebook

  • 500k words per source

  • 50 queries per day

Notes

  • Requires authentication (run setup_auth first)

  • Creates notebook with sharing set to private by default

  • Large files may take longer to process

sync_library

Sync your local library with actual NotebookLM notebooks.

What This Tool Does

  • Navigates to NotebookLM and extracts all your notebooks

  • Compares with local library entries

  • Detects stale entries (notebooks deleted or URLs changed)

  • Identifies notebooks not in your library

  • Optionally auto-removes stale entries

When To Use

  • Library seems out of sync with NotebookLM

  • After deleting notebooks in NotebookLM

  • To discover new notebooks to add

  • Before setting up automation workflows

Output

Returns a sync report with:

  • matched: Library entries that match actual notebooks

  • staleEntries: Library entries with no matching notebook (candidates for removal)

  • missingNotebooks: NotebookLM notebooks not in library (candidates for adding)

  • suggestions: Recommended actions

Example Usage

{ "auto_fix": false }

With auto-fix to remove stale entries:

{ "auto_fix": true }
list_sources

List all sources in a NotebookLM notebook.

Returns

Array of sources with:

  • id: Source identifier (for use with remove_source)

  • title: Source name/title

  • type: url, text, file, drive, or unknown

  • status: ready, processing, or failed

Example

{ "notebook_id": "my-notebook" }

Or with direct URL:

{ "notebook_url": "https://notebooklm.google.com/notebook/xxx" }
add_source

Add a source to an existing NotebookLM notebook.

Source Types

  • url: Web page URL

  • text: Text content (paste)

  • file: Local file path (PDF, DOCX, TXT)

Example

{ "notebook_id": "my-notebook", "source": { "type": "url", "value": "https://docs.example.com/api" } }
remove_source

Remove a source from a NotebookLM notebook.

Usage

  1. First call list_sources to get source IDs

  2. Then call remove_source with the source ID

Example

{ "notebook_id": "my-notebook", "source_id": "source-0" }
batch_create_notebooks

Create multiple NotebookLM notebooks in one operation.

What This Tool Does

  • Creates up to 10 notebooks in a single batch operation

  • Reports progress for each notebook

  • Optionally continues on error or stops on first failure

  • Auto-adds created notebooks to your library

Example Usage

{ "notebooks": [ { "name": "React Documentation", "sources": [ { "type": "url", "value": "https://react.dev/reference" } ], "topics": ["react", "frontend"] }, { "name": "Node.js API", "sources": [ { "type": "url", "value": "https://nodejs.org/api/" } ], "topics": ["nodejs", "backend"] } ], "stop_on_error": false }

Limits

  • Maximum 10 notebooks per batch

  • Each notebook follows individual source limits (50-600 based on tier)

  • Delays between notebooks to avoid rate limiting

Returns

Summary with:

  • total: Number of notebooks attempted

  • succeeded: Successfully created count

  • failed: Failed count

  • results: Array of individual results

generate_audio_overview

Generate an AI-powered audio overview (podcast-style) for a notebook.

What This Tool Does

  • Triggers NotebookLM's audio overview generation

  • Audio overviews are ~5-15 minute podcast-style summaries

  • Generation takes 2-5 minutes typically

  • Returns immediately with status (check with get_audio_status)

Requirements

  • Notebook must have at least one source

  • Audio generation may not be available on all notebooks

Example

{ "notebook_id": "my-research" }
get_audio_status

Check the audio overview generation status for a notebook.

Returns

  • status: "not_started" | "generating" | "ready" | "failed" | "unknown"

  • progress: Generation progress (0-100) if generating

  • duration: Audio duration in seconds if ready

Example

{ "notebook_id": "my-research" }
download_audio

Download the generated audio overview file.

Requirements

  • Audio must be in "ready" status

  • Use get_audio_status to check before downloading

Output

Downloads to specified path or ~/notebooklm-audio-{timestamp}.mp3

Example

{ "notebook_id": "my-research", "output_path": "/path/to/save/podcast.mp3" }
list_sessions

List all active sessions with stats (age, message count, last activity). Use to continue the most relevant session instead of starting from scratch.

close_session

Close a specific session by session ID. Ask before closing if the user might still need it.

reset_session

Reset a session's chat history (keep same session ID). Use for a clean slate when the task changes; ask the user before resetting.

get_health

Get server health status including authentication state, active sessions, and configuration. Use this to verify the server is ready before starting research workflows.

Deep Check Mode (v2026.1.1) Set deep_check: true to actually verify the NotebookLM chat UI loads. This catches stale sessions where cookies exist but the UI won't load. Returns chat_ui_accessible: true/false.

If authenticated=false and having persistent issues: Consider running cleanup_data(preserve_library=true) + setup_auth for fresh start with clean browser session.

setup_auth

Google authentication for NotebookLM access - opens a browser window for manual login to your Google account. Returns immediately after opening the browser. You have up to 10 minutes to complete the login. Use 'get_health' tool afterwards to verify authentication was saved successfully. Use this for first-time authentication or when auto-login credentials are not available. For switching accounts or rate-limit workarounds, use 're_auth' tool instead.

TROUBLESHOOTING for persistent auth issues: If setup_auth fails or you encounter browser/session issues:

  1. Ask user to close ALL Chrome/Chromium instances

  2. Run cleanup_data(confirm=true, preserve_library=true) to clean old data

  3. Run setup_auth again for fresh start This helps resolve conflicts from old browser sessions and installation data.

re_auth

Switch to a different Google account or re-authenticate. Use this when:

  • NotebookLM rate limit is reached (50 queries/day for free accounts)

  • You want to switch to a different Google account

  • Authentication is broken and needs a fresh start

This will:

  1. Close all active browser sessions

  2. Delete all saved authentication data (cookies, Chrome profile)

  3. Open browser for fresh Google login

After completion, use 'get_health' to verify authentication.

TROUBLESHOOTING for persistent auth issues: If re_auth fails repeatedly:

  1. Ask user to close ALL Chrome/Chromium instances

  2. Run cleanup_data(confirm=false, preserve_library=true) to preview old files

  3. Run cleanup_data(confirm=true, preserve_library=true) to clean everything except library

  4. Run re_auth again for completely fresh start This removes old installation data and browser sessions that can cause conflicts.

cleanup_data

ULTRATHINK Deep Cleanup - Scans entire system for ALL NotebookLM MCP data files across 8 categories. Always runs in deep mode, shows categorized preview before deletion.

⚠️ CRITICAL: Close ALL Chrome/Chromium instances BEFORE running this tool! Open browsers can prevent cleanup and cause issues.

Categories scanned:

  1. Legacy Installation (notebooklm-mcp-nodejs) - Old paths with -nodejs suffix

  2. Current Installation (notebooklm-mcp) - Active data, browser profiles, library

  3. NPM/NPX Cache - Cached installations from npx

  4. Claude CLI MCP Logs - MCP server logs from Claude CLI

  5. Temporary Backups - Backup directories in system temp

  6. Claude Projects Cache - Project-specific cache (optional)

  7. Editor Logs (Cursor/VSCode) - MCP logs from code editors (optional)

  8. Trash Files - Deleted notebooklm files in system trash (optional)

Works cross-platform (Linux, Windows, macOS). Safe by design: shows detailed preview before deletion, requires explicit confirmation.

LIBRARY PRESERVATION: Set preserve_library=true to keep your notebook library.json file while cleaning everything else.

RECOMMENDED WORKFLOW for fresh start:

  1. Ask user to close ALL Chrome/Chromium instances

  2. Run cleanup_data(confirm=false, preserve_library=true) to preview

  3. Run cleanup_data(confirm=true, preserve_library=true) to execute

  4. Run setup_auth or re_auth for fresh browser session

Use cases: Clean reinstall, troubleshooting auth issues, removing all traces before uninstall, cleaning old browser sessions and installation data.

get_quota

Get current quota status including license tier, usage, and limits.

Returns:

  • tier: 'free', 'pro', 'ultra', or 'unknown'

  • notebooks: used/limit/remaining/percent

  • sources: limit per notebook

  • queries: used/limit/remaining/percent/should_stop/reset_time

  • warnings: array of warning messages

Quota Limits by Tier:

  • Free: 100 notebooks, 50 sources/notebook, 50 queries/day

  • Pro: 500 notebooks, 300 sources/notebook, 500 queries/day

  • Ultra: 500 notebooks, 600 sources/notebook, 5000 queries/day

Use sync=true to fetch actual quota from Google's NotebookLM UI (requires browser). Without sync, returns locally tracked counts which may differ if you used NotebookLM directly in browser. Query counts reset daily at midnight.

generate_video_overview

Generate an AI-powered Video Overview for a notebook.

What This Tool Does

  • Opens the Studio panel in NotebookLM

  • Generates a visual video summary of notebook content

  • Supports multiple visual styles and formats

  • Generation takes 3-10 minutes typically

  • Returns immediately with status (check with get_video_status)

Visual Styles

  • auto-select — Let NotebookLM choose the best style (default)

  • custom — Custom visual style

  • classic — Classic presentation style

  • whiteboard — Hand-drawn whiteboard style

  • kawaii — Cute kawaii style

  • anime — Anime-inspired visuals

  • watercolour — Watercolour painting style

  • retro-print — Retro print aesthetic

  • heritage — Heritage/traditional style

  • paper-craft — Paper-craft visual style

Formats

  • explainer — Full explanation (5-15 min, default)

  • brief — Quick summary (1-3 min)

Requirements

  • Notebook must have at least one source

  • Authentication required (run setup_auth first)

Example

{ "notebook_id": "my-research", "style": "documentary", "format": "brief" }
get_video_status

Check the Video Overview generation status for a notebook.

Returns

  • status: "not_started" | "generating" | "ready" | "failed" | "unknown"

  • progress: Generation progress (0-100) if generating

  • duration: Video duration in seconds if ready

Example

{ "notebook_id": "my-research" }
generate_data_table

Generate a structured Data Table from notebook sources.

What This Tool Does

  • Opens the Studio panel in NotebookLM

  • Generates a structured tabular extraction from notebook content

  • Tables organize key information from sources into rows and columns

  • Generation typically takes 1-3 minutes

  • Returns immediately with status (check with get_data_table)

Requirements

  • Notebook must have at least one source

  • Authentication required (run setup_auth first)

Example

{ "notebook_id": "my-research" }
get_data_table

Extract the generated Data Table content from a notebook.

What This Tool Does

  • Navigates to the notebook's Studio panel

  • Extracts the table data (headers and rows) as structured JSON

  • Returns the full table content for analysis

Returns

  • table.headers: Column headers

  • table.rows: Array of row arrays

  • table.totalRows: Number of rows

  • table.totalColumns: Number of columns

Requirements

  • Data table must be generated first (use generate_data_table)

  • Returns error if table is not yet ready

Example

{ "notebook_id": "my-research" }
get_query_history

Retrieve past NotebookLM queries and answers for reviewing research sessions.

Use this tool to:

  • Review past research conversations

  • Find specific information from previous queries

  • Track which notebooks and sessions you've used

  • Search through question and answer content

Returns query entries with question, answer, notebook, session, and timing info.

get_notebook_chat_history

Extract conversation history from a NotebookLM notebook's chat interface.

This tool uses browser automation to navigate to a notebook and extract all Q&A pairs from the chat UI. This is useful for:

  • Recovering previous research conversations

  • Auditing what queries were made in a notebook

  • Understanding quota usage from direct NotebookLM browser usage

  • Resuming context from previous sessions

Context Management

Use preview_only: true to get a quick count before extracting full content. Use output_file to export to JSON instead of returning to context. Use offset with limit for pagination through large histories.

Examples

Quick audit (preview only):

{ "notebook_id": "my-research", "preview_only": true }

Export to file (avoids context overflow):

{ "notebook_id": "my-research", "output_file": "/tmp/chat-history.json" }

Paginate through history:

{ "notebook_id": "my-research", "limit": 20, "offset": 0 } { "notebook_id": "my-research", "limit": 20, "offset": 20 }

Prompts

Interactive templates invoked by user choice

NameDescription
notebooklm.auth-setupGuide for initial Google authentication setup for NotebookLM access. Use this when the user needs to authenticate for the first time.
notebooklm.auth-repairTroubleshooting guide for authentication issues. Use this when authentication fails or cookies have expired.
notebooklm.quick-startQuick start guide for NotebookLM MCP. Explains how to add notebooks, query them, and manage sessions.
notebooklm.security-overviewOverview of security features in this hardened MCP server. Includes GDPR compliance, audit logging, and post-quantum encryption details.

Resources

Contextual data attached and managed by the client

NameDescription
Notebook LibraryComplete notebook library with all available knowledge sources. Read this to discover what notebooks are available. ⚠️ If you think a notebook might help with the user's task, ASK THE USER FOR PERMISSION before consulting it: 'Should I consult the [notebook] for this task?'

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Pantheon-Security/notebooklm-mcp-secure'

If you have feedback or need assistance with the MCP directory API, please join our Discord server