使用说明
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
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
Using uv (Recommended)
# 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:
- Log in to your Google account
- Complete any 2FA challenges
- 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.
