Skip to main content
Glama
kkaminsk

NotebookLM MCP

by kkaminsk

NotebookLM MCP Server

Version 0.5 Alpha | Basic functionality implemented, requires further testing

A Python-based Model Context Protocol (MCP) server that bridges AI agents with Google NotebookLM through browser automation. This allows MCP-compatible clients like Claude Desktop to interact with NotebookLM's powerful RAG (Retrieval-Augmented Generation) capabilities.

Warning: This is alpha software. It has basic functionality but needs further testing. Use at your own risk. Automating Google services may violate their Terms of Service.

Features

  • Notebook Management: Create notebooks, list existing notebooks

  • Source Management: Add sources (URLs, text content), list sources in notebooks

  • Query Interface: Ask questions against notebook sources with citation support

  • Audio Overview: Generate podcast-style audio discussions from notebook content

  • Session Persistence: Human-in-the-loop authentication with persistent Chrome profile

  • Stealth Automation: Uses Patchright for bot detection evasion

Related MCP server: NotebookLM MCP Server

Architecture

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│  MCP Client     │────▶│  NotebookLM MCP  │────▶│  Google         │
│  (Claude, etc)  │     │  Server          │     │  NotebookLM     │
└─────────────────┘     └──────────────────┘     └─────────────────┘
                              │
                              ▼
                        ┌──────────────┐
                        │  Patchright  │
                        │  (Browser)   │
                        └──────────────┘

The server uses:

  • FastMCP: For MCP protocol implementation

  • Patchright: Stealth browser automation (Playwright fork with anti-detection)

  • Persistent Chrome Profile: For session management without repeated logins

Prerequisites

  • Python 3.11 or higher

  • Google Chrome browser installed

  • A Google account with access to NotebookLM

  • uv package manager (recommended) or pip

Installation

# Clone the repository
git clone https://github.com/your-org/notebooklm-mcp.git
cd notebooklm-mcp

# Install dependencies
uv sync

# Install Patchright browsers
uv run patchright install chromium

Using pip

# Clone the repository
git clone https://github.com/your-org/notebooklm-mcp.git
cd notebooklm-mcp

# Create virtual environment
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install package
pip install -e .

# Install Patchright browsers
patchright install chromium

Configuration

The server stores configuration and session data in ~/.notebooklm-mcp/ by default:

~/.notebooklm-mcp/
├── config.toml          # Optional configuration file
├── chrome_profile/      # Persistent browser profile (contains session)
└── logs/                # Log files (if configured)

Configuration Options

Create ~/.notebooklm-mcp/config.toml to customize settings:

[server]
log_level = "INFO"           # DEBUG, INFO, WARNING, ERROR
cache_enabled = true         # Enable response caching
browser_headless = true      # Run browser in headless mode
browser_timeout_ms = 30000   # Browser operation timeout

[browser]
page_pool_min = 1            # Minimum pages in pool
page_pool_max = 3            # Maximum pages in pool
idle_timeout = 300           # Close browser after idle (seconds)

Usage

1. Authentication

Before using the server, you must authenticate with your Google account:

# Using uv
uv run notebooklm-mcp auth

# Or if installed via pip
notebooklm-mcp auth

This opens a visible Chrome browser where you can:

  1. Log in to your Google account

  2. Complete any 2FA challenges

  3. The browser closes automatically after successful authentication

Your session is saved to the Chrome profile directory for future use.

2. Verify Session

Check if your session is still valid:

uv run notebooklm-mcp verify

3. Start the MCP Server

uv run notebooklm-mcp serve

The server runs using stdio transport for MCP communication.

4. Other CLI Commands

# Show status and configuration
uv run notebooklm-mcp status

# Clear saved session (requires re-authentication)
uv run notebooklm-mcp clear

Claude Desktop Integration

Add the server to your Claude Desktop configuration:

Windows

Edit %APPDATA%\Claude\claude_desktop_config.json:

{
  "mcpServers": {
    "notebooklm": {
      "command": "uv",
      "args": [
        "--directory",
        "C:\\path\\to\\notebooklm-mcp",
        "run",
        "notebooklm-mcp",
        "serve"
      ]
    }
  }
}

macOS/Linux

Edit ~/.config/claude/claude_desktop_config.json:

{
  "mcpServers": {
    "notebooklm": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/notebooklm-mcp",
        "run",
        "notebooklm-mcp",
        "serve"
      ]
    }
  }
}

Available MCP Tools

Once connected, the following tools are available to MCP clients:

list_notebooks

List all notebooks in your NotebookLM account.

create_notebook

Create a new notebook with optional initial sources.

  • Parameters: title (required), initial_sources (optional list of URLs)

add_source

Add a source to a notebook.

  • Parameters: notebook_id, source_type (url, text, google_doc, google_slide), content, title (optional)

list_sources

List all sources in a notebook.

  • Parameters: notebook_id

query_notebook

Ask a question against notebook sources.

  • Parameters: notebook_id, query, use_chat_history (optional)

generate_audio_overview

Generate a podcast-style audio discussion.

  • Parameters: notebook_id, custom_instructions (optional)

health_check

Check server and browser health status.

Running Workflows

Example: Create Notebook and Generate Audio

import asyncio
from patchright.async_api import async_playwright

async def create_notebook_workflow():
    playwright = await async_playwright().start()

    context = await playwright.chromium.launch_persistent_context(
        user_data_dir="~/.notebooklm-mcp/chrome_profile",
        headless=False,
        channel="chrome",
    )

    page = context.pages[0] if context.pages else await context.new_page()

    # Navigate to NotebookLM
    await page.goto("https://notebooklm.google.com/")

    # ... interact with NotebookLM

    await context.close()
    await playwright.stop()

asyncio.run(create_notebook_workflow())

Using the MCP Tools Programmatically

When connected via MCP, you can invoke tools like:

User: Create a new notebook called "Research Notes" and add this URL as a source: https://example.com/article

Claude: I'll create the notebook and add the source for you.
[Calls create_notebook with title="Research Notes"]
[Calls add_source with the URL]

The notebook has been created with ID abc123 and the source is being processed.

Security Considerations

  • Chrome Profile: Contains your Google session credentials. Keep ~/.notebooklm-mcp/chrome_profile/ secure and never commit it to version control.

  • Local Execution: The server is designed for local use. If deploying remotely, use secure tunnels (SSH) as MCP doesn't provide encryption.

  • Rate Limiting: Avoid rapid automated requests to prevent account flagging.

Known Limitations

  • No Official API: This uses browser automation as NotebookLM lacks a public API

  • DOM Dependency: May break if Google updates NotebookLM's interface

  • Session Expiry: Sessions may expire and require re-authentication

  • PDF Upload: Not yet implemented (URL and text sources work)

  • Alpha Status: Basic functionality works but edge cases need testing

Troubleshooting

"Authentication expired" error

Run uv run notebooklm-mcp auth to re-authenticate.

"net::ERR_NAME_NOT_RESOLVED" error

Clear the Chrome profile and re-authenticate:

uv run notebooklm-mcp clear
uv run notebooklm-mcp auth

Browser not launching

Ensure Chrome is installed and Patchright browsers are set up:

uv run patchright install chromium

Development

# Install dev dependencies
uv sync --all-extras

# Run tests
uv run pytest

# Run linter
uv run ruff check src/

# Format code
uv run ruff format src/

License

MIT License - see LICENSE for details.

Disclaimer

This is an unofficial integration. NotebookLM is a trademark of Google. This project is not affiliated with, endorsed by, or sponsored by Google. Use of this software may violate Google's Terms of Service. Users assume all risks associated with using this software.

A
license - permissive license
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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/kkaminsk/NotebookLM-MCP'

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