Secure MCP server for querying Google NotebookLM notebooks
Project description
notebooklm-mcp-2026
Secure MCP server for querying Google NotebookLM notebooks. Designed for use with Claude Code, Cursor, VS Code Copilot, and any MCP-compatible AI assistant.
What it does
notebooklm-mcp-2026 gives AI assistants direct access to your Google NotebookLM notebooks. It runs as a local subprocess (stdio transport) — no HTTP server needed. Your AI assistant can list your notebooks, read source content, and ask the NotebookLM AI questions about your sources.
Quick Start
# 1. Install
pip install notebooklm-mcp-2026
# 2. Run the setup wizard (authenticates + configures your MCP client)
notebooklm-mcp-2026 setup
# That's it! Restart your MCP client and start using it.
Or step by step:
pip install notebooklm-mcp-2026
notebooklm-mcp-2026 login # Opens Chrome for Google login
notebooklm-mcp-2026 setup # Auto-configures your MCP client
notebooklm-mcp-2026 status # Verify everything is connected
Installation
Requirements: Python 3.11+, Google Chrome
# Via pip
pip install notebooklm-mcp-2026
# Via uv (recommended)
uv tool install notebooklm-mcp-2026
# From source
git clone <this-repo>
cd notebooklm-mcp-2026
pip install -e .
Authentication
notebooklm-mcp-2026 uses Google session cookies extracted via Chrome DevTools Protocol. No passwords are stored — only session cookies.
First-time setup
notebooklm-mcp-2026 login
This will:
- Launch Chrome pointing at notebooklm.google.com
- Wait for you to log in to your Google account
- Extract session cookies via Chrome DevTools Protocol
- Save them locally with restricted file permissions (
0o600)
Cookies typically last 2–4 weeks. When they expire, run notebooklm-mcp-2026 login again.
Where credentials are stored
| Platform | Location |
|---|---|
| Linux | ~/.local/share/notebooklm-mcp-2026/auth.json |
| macOS | ~/Library/Application Support/notebooklm-mcp-2026/auth.json |
| Windows | %LOCALAPPDATA%\notebooklm-mcp-2026\auth.json |
Override with: NOTEBOOKLM_MCP_DATA_DIR=/custom/path
CLI Commands
| Command | Description |
|---|---|
notebooklm-mcp-2026 setup |
Interactive setup wizard — authenticates and configures your MCP client |
notebooklm-mcp-2026 login |
Authenticate via Chrome (opens browser window) |
notebooklm-mcp-2026 serve |
Start the MCP server over stdio (used by MCP clients) |
notebooklm-mcp-2026 status |
Show authentication and MCP client configuration status |
notebooklm-mcp-2026 doctor |
Diagnose common issues (Chrome, auth, permissions) |
notebooklm-mcp-2026 version |
Print version |
MCP Client Configuration
The setup command auto-configures your MCP client. For manual configuration, see below.
Claude Code
Add to ~/.claude/settings.json:
{
"mcpServers": {
"notebooklm-mcp-2026": {
"command": "notebooklm-mcp-2026",
"args": ["serve"]
}
}
}
Cursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"notebooklm-mcp-2026": {
"command": "notebooklm-mcp-2026",
"args": ["serve"]
}
}
}
VS Code (Copilot)
Add to VS Code settings.json:
{
"mcp": {
"servers": {
"notebooklm-mcp-2026": {
"command": "notebooklm-mcp-2026",
"args": ["serve"]
}
}
}
}
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"notebooklm-mcp-2026": {
"command": "notebooklm-mcp-2026",
"args": ["serve"]
}
}
}
Available Tools (9)
| Tool | Description | Key Parameters |
|---|---|---|
login |
Launch Chrome for Google OAuth login | timeout (default: 300s) |
check_auth |
Verify stored credentials are valid | — |
list_notebooks |
List all notebooks with metadata | max_results (default: 50) |
get_notebook |
Get notebook details + source list | notebook_id |
list_sources |
List sources in a notebook | notebook_id |
get_source_content |
Get full text of a source | source_id |
query_notebook |
Ask the AI a question | notebook_id, query, source_ids?, conversation_id? |
add_source_url |
Add a URL/YouTube source | notebook_id, url |
add_source_text |
Add pasted text source | notebook_id, text, title? |
Typical workflow
1. list_notebooks → find the notebook ID you want
2. list_sources → see what sources are in it
3. query_notebook → ask questions about the sources
4. get_source_content → read raw source text if needed
Follow-up conversations
query_notebook returns a conversation_id. Pass it back to ask follow-up questions in the same conversation context:
# First question
result = query_notebook(notebook_id="abc", query="What is the main topic?")
# result.conversation_id = "uuid-123"
# Follow-up
result = query_notebook(notebook_id="abc", query="Tell me more about that", conversation_id="uuid-123")
Troubleshooting
"Not authenticated" error
Run notebooklm-mcp-2026 login in your terminal.
"Cookies expired" error
Session cookies have a limited lifespan (2–4 weeks). Run notebooklm-mcp-2026 login again.
"Chrome not found" error
Install Google Chrome. On Linux, ensure google-chrome or chromium is in your PATH.
Empty notebook list
Make sure you're logged into the correct Google account that has NotebookLM notebooks.
"Build label" errors
Google occasionally rotates their build label. Set the updated label:
NOTEBOOKLM_BL="boq_labs-tailwind-frontend_YYYYMMDD.XX_p0" notebooklm-mcp-2026 serve
Rate limit errors
NotebookLM free tier allows ~50 queries per day. Wait until the next day or upgrade.
Environment Variables
| Variable | Default | Description |
|---|---|---|
NOTEBOOKLM_MCP_DATA_DIR |
Platform default | Override data storage location |
NOTEBOOKLM_BL |
boq_labs-tailwind-frontend_20260108.06_p0 |
Google build label |
NOTEBOOKLM_QUERY_TIMEOUT |
120.0 |
Query timeout in seconds |
Security
- No passwords stored — only Google session cookies
- File permissions — credentials saved with
0o600(owner read/write only) - Directory permissions — data directory created with
0o700(owner only) - No
eval/exec— no dynamic code execution anywhere - No
shell=True— Chrome launched with explicit argument lists - Cookie filtering — only essential Google auth cookies are persisted
- Chrome cleanup — Chrome process always terminated in
finallyblocks - Input validation — all tool parameters validated before use
- Timeouts — all HTTP requests have explicit timeouts
- CSRF protection — tokens passed in request body, auto-refreshed on expiry
Development
# Install dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Lint
ruff check src/ tests/
Testing with MCP Inspector
The MCP Inspector lets you interactively test the server's tools in a web UI:
npx @modelcontextprotocol/inspector notebooklm-mcp-2026 serve
This opens a browser where you can call each of the 9 tools with custom parameters and inspect responses. You must run notebooklm-mcp-2026 login first.
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file notebooklm_mcp_2026-0.1.0.tar.gz.
File metadata
- Download URL: notebooklm_mcp_2026-0.1.0.tar.gz
- Upload date:
- Size: 37.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29d30308ba0c21007f671b12e9cae0d60bb2e2f20453d8a24738f599eaa3e37e
|
|
| MD5 |
2dd897b25f1c8c311f4273aa88ae7f32
|
|
| BLAKE2b-256 |
71a27fee2c8db70feb3910e2683c25f18a6b0ab5594359b8f0c902495a9712aa
|
Provenance
The following attestation bundles were made for notebooklm_mcp_2026-0.1.0.tar.gz:
Publisher:
publish.yml on julianoczkowski/notebooklm-mcp-2026
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
notebooklm_mcp_2026-0.1.0.tar.gz -
Subject digest:
29d30308ba0c21007f671b12e9cae0d60bb2e2f20453d8a24738f599eaa3e37e - Sigstore transparency entry: 952518315
- Sigstore integration time:
-
Permalink:
julianoczkowski/notebooklm-mcp-2026@b9fe9e7f37c135b91733bf13f0bcc27a1d6e3937 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/julianoczkowski
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b9fe9e7f37c135b91733bf13f0bcc27a1d6e3937 -
Trigger Event:
release
-
Statement type:
File details
Details for the file notebooklm_mcp_2026-0.1.0-py3-none-any.whl.
File metadata
- Download URL: notebooklm_mcp_2026-0.1.0-py3-none-any.whl
- Upload date:
- Size: 34.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9cabb18b6e9666845ffe6c9c94e2bc66985493311c9b9aebd3c04e20183fd733
|
|
| MD5 |
3a30fb0f7fda44c996acbeeef9ddef49
|
|
| BLAKE2b-256 |
effa70b2c7ec09eb54af48daa5d504097bcac1d58980fe09bcff10d04788ac22
|
Provenance
The following attestation bundles were made for notebooklm_mcp_2026-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on julianoczkowski/notebooklm-mcp-2026
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
notebooklm_mcp_2026-0.1.0-py3-none-any.whl -
Subject digest:
9cabb18b6e9666845ffe6c9c94e2bc66985493311c9b9aebd3c04e20183fd733 - Sigstore transparency entry: 952518316
- Sigstore integration time:
-
Permalink:
julianoczkowski/notebooklm-mcp-2026@b9fe9e7f37c135b91733bf13f0bcc27a1d6e3937 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/julianoczkowski
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b9fe9e7f37c135b91733bf13f0bcc27a1d6e3937 -
Trigger Event:
release
-
Statement type: