# Pantheon-Security/notebooklm-mcp-secure [Health: Active]

**Category:** 🔬 Research  
**Repository:** https://github.com/Pantheon-Security/notebooklm-mcp-secure  
**GitHub Stars:** 87  
**npm Downloads (last month):** 1126  
**Views:** 4  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/pantheon-security-notebooklm-mcp-secure

## Description
Query Google NotebookLM from Claude/AI agents with 14 security hardening layers. Session-based conversations, notebook library management, and source-grounded research responses.

## Tools
Capabilities this server exposes over MCP:

- **ask_question** — NotebookLM notebook Q&A via browser automation.

No active notebook is selected.
Use list_notebooks and select_notebook to choose one, or pass notebook_url.
No Gemini API key is required, but browser authentication must be valid.
If login is required, use the setup_auth tool and verify with get_health (or ask the user to run the notebooklm.auth-setup prompt for a guided walkthrough).
- **add_notebook** — Add a NotebookLM notebook to the local library after explicit user confirmation. Provide the NotebookLM URL plus concise metadata: name, description, topics, and optional use cases/tags. Do not infer missing metadata; ask the user first.
- **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:
```json
{
  "name": "React Docs",
  "sources": [
    { "type": "url", "value": "https://react.dev/reference/react" }
  ]
}
```

Create a notebook with multiple sources:
```json
{
  "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
```json
{ "auto_fix": false }
```

With auto-fix to remove stale entries:
```json
{ "auto_fix": true }
```
- **list_sources** — List sources in a notebook. Provide notebook_id or notebook_url; if neither is provided, the active notebook from the local library is used. Returns source id, title, type, and status.
- **add_source** — Add a source to an existing NotebookLM notebook.

If neither `notebook_id` nor `notebook_url` is provided, this tool uses the currently active notebook from the local library.

## Source Types
- **url**: Web page URL
- **text**: Text content (paste)
- **file**: Local file path (PDF, DOCX, TXT)

## Example
```json
{
  "notebook_id": "my-notebook",
  "source": {
    "type": "url",
    "value": "https://docs.example.com/api"
  }
}
```
- **remove_source** — Remove a source from a NotebookLM notebook.

If neither `notebook_id` nor `notebook_url` is provided, this tool uses the currently active notebook from the local library.

## Usage
1. First call list_sources to get source IDs
2. Then call remove_source with the source ID

## Example
```json
{
  "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
```json
{
  "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
```json
{ "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
```json
{ "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
```json
{
  "notebook_id": "my-research",
  "output_path": "/path/to/save/podcast.mp3"
}
```
- **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:
Suggest to the user that a fresh start (cleanup_data with preserve_library=true, followed by setup_auth) may help, and ask for their confirmation before running any cleanup, since cleanup_data deletes browser/session data.
- **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, suggest these steps to the user and get their confirmation before running any cleanup (cleanup_data deletes browser/session data):
1. Ask the user to close ALL Chrome/Chromium instances
2. Ask the user before running cleanup_data(confirm=true, preserve_library=true) to clean old data
3. Run setup_auth again for a 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, suggest these steps to the user and ask for their confirmation before running any cleanup (cleanup_data deletes browser/session and installation data):
1. Ask the user to close ALL Chrome/Chromium instances
2. Run cleanup_data(confirm=false, preserve_library=true) to preview the files that would be removed
3. Only after the user reviews the preview and confirms, run cleanup_data(confirm=true, preserve_library=true) to clean everything except the library
4. Run re_auth again for a completely fresh start
This removes old installation data and browser sessions that can cause conflicts.
- **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)
- NotebookLM does not currently expose a supported video download path through this MCP server; use the NotebookLM UI to download ready videos.

## 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
```json
{ "notebook_id": "my-research", "style": "whiteboard", "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
```json
{ "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
```json
{ "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
```json
{ "notebook_id": "my-research" }
```

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "notebooklm-mcp-secure": {
    "command": "npx",
    "args": ["-y","@pan-sec/notebooklm-mcp@latest"]
  }
}
```

## Documentation

## What Pantheon-Security/notebooklm-mcp-secure MCP server does

Pantheon-Security/notebooklm-mcp-secure MCP server connects MCP-compatible AI clients to Google NotebookLM. It lets an agent query notebook sources and maintain session-based conversations, while also providing operations for notebook and source management. The repository describes the responses as source-grounded, so the server is intended for research and document analysis that should stay tied to NotebookLM material.

The project also includes programmatic notebook creation, audio overview generation, video overview generation, and data-table extraction. Chat history extraction and notebook health checks are included among the documented capabilities. The standard profile exposes a subset of the available tools, with the README noting an expansion to 33 tools; the audit section refers to 48 tools overall.

## How it works

Core use does not require an API key. Authentication is performed through a browser-based NotebookLM login flow, with stored browser state used for later access.

Requests are made through MCP tool calls. Sessions allow conversations to continue across related queries, while quotas and context handling are part of the server’s NotebookLM interaction layer. Optional Gemini integration provides Gemini 3 models, Deep Research, thinking-level control, retry behavior, and structured JSON. The Document API can upload and query PDFs without relying on the browser flow, but these are optional API-backed features.

The implementation includes security controls described in the repository, including token handling, credential isolation, secrets scanning, audit logging, rate limiting, path validation, and a hybrid post-quantum encryption design for data at rest.

## Setup and configuration

The documented quick-install command uses the npm package `@pan-sec/notebooklm-mcp`:

```bash
npx -y @pan-sec/notebooklm-mcp@latest
```

The package is documented for Linux, macOS, and Windows. Because the core flow relies on browser state rather than an API key, setup should be performed in an environment where the authentication browser can open.

## Tools and capabilities

Pantheon-Security/notebooklm-mcp-secure MCP server supports capabilities including:

- Querying NotebookLM notebooks and their sources
- Continuing conversations with session management
- Creating and managing notebooks programmatically
- Uploading or managing notebook documents and folders
- Generating audio and video overviews
- Extracting structured data tables
- Running Gemini Deep Research when the optional API integration is enabled
- Extracting chat history and checking notebook health

## Limitations and notes

NotebookLM browser authentication is required for the core feature set, even though an API key is not. Gemini Deep Research and the Document API are optional integrations and may require separate API access. Claims in the repository about security layers and test counts refer to specific releases and should be checked against the version being deployed.

It also does not establish compatibility with every MCP client; the documented installation example specifically targets Claude’s MCP command.

_Full upstream README: https://allmcps.com/mcp/pantheon-security-notebooklm-mcp-secure/readme_

