NotebookLM MCP Server
Enables adding Google Drive documents as sources to NotebookLM notebooks, listing Drive sources with freshness status, syncing stale Drive sources, and performing Drive research to discover and import documents.
Allows adding YouTube videos as sources to NotebookLM notebooks for analysis and AI-powered summarization.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@NotebookLM MCP Server create a new notebook about renewable energy trends"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
NotebookLM MCP Server

An MCP server for NotebookLM (notebooklm.google.com).
Note: Tested with Pro/free tier accounts. May work with NotebookLM Enterprise accounts but has not been tested.
📺 Watch the Demos
General Overview | Claude Desktop | Perplexity Desktop |
|
|
|
Features
Tool | Description |
| List all notebooks |
| Create a new notebook |
| Get notebook details with sources |
| Get AI-generated summary of notebook content |
| Get AI-generated summary and keywords for a source |
| Get raw text content from a source (no AI processing) |
| Rename a notebook |
| Configure chat goal/style and response length |
| Delete a notebook (requires confirmation) |
| Add URL/YouTube as source |
| Add pasted text as source |
| Add Google Drive document as source |
| Ask questions and get AI answers |
| List sources with freshness status |
| Sync stale Drive sources (requires confirmation) |
| Delete a source from notebook (requires confirmation) |
| Start Web or Drive research to discover sources |
| Poll research progress with built-in wait |
| Import discovered sources into notebook |
| Generate audio podcasts (requires confirmation) |
| Generate video overviews (requires confirmation) |
| Generate infographics (requires confirmation) |
| Generate slide decks (requires confirmation) |
| Check studio artifact generation status |
| Delete studio artifacts (requires confirmation) |
| Save cookies for authentication |
Related MCP server: NotebookLM MCP Server
Important Disclaimer
This MCP uses internal APIs that:
Are undocumented and may change without notice
Require cookie extraction from your browser (I have a tool for that!)
Use at your own risk for personal/experimental purposes.
Installation
Install from PyPI using your preferred Python package manager:
Using uv (Recommended)
uv tool install notebooklm-mcp-serverUsing pip
pip install notebooklm-mcp-serverUsing pipx
pipx install notebooklm-mcp-server# Clone the repository
git clone https://github.com/jacob-bd/notebooklm-mcp.git
cd notebooklm-mcp
# Install with uv
uv tool install .Upgrading
# Using uv
uv tool upgrade notebooklm-mcp-server
# Using pip
pip install --upgrade notebooklm-mcp-server
# Using pipx
pipx upgrade notebooklm-mcp-serverAfter upgrading, restart your AI tool to reconnect to the updated MCP server:
Claude Code: Restart the application, or use
/mcpto reconnectCursor: Restart the application
Gemini CLI: Restart the CLI session
Uninstalling
To completely remove the MCP:
# Using uv
uv tool uninstall notebooklm-mcp-server
# Using pip
pip uninstall notebooklm-mcp-server
# Using pipx
pipx uninstall notebooklm-mcp-server
# Remove cached auth tokens (optional)
rm -rf ~/.notebooklm-mcpAlso remove from your AI tools:
Tool | Command |
Claude Code |
|
Gemini CLI |
|
Cursor/VS Code | Remove entry from |
Authentication
Before using the MCP, you need to authenticate with NotebookLM. Run:
# Recommended: Auto mode (launches Chrome, you log in)
notebooklm-mcp-auth
# Alternative: File mode (manual cookie extraction)
notebooklm-mcp-auth --fileAuto mode launches a dedicated Chrome profile, you log in to Google, and cookies are extracted automatically. Your login persists for future auth refreshes.
File mode shows instructions for manually extracting cookies from Chrome DevTools and saving them to a file.
After successful auth, add the MCP to your AI tool and restart.
For detailed instructions, troubleshooting, and how the authentication system works, see docs/AUTHENTICATION.md.
MCP Configuration
⚠️ Context Window Warning: This MCP provides 31 tools which consume a significant portion of your context window. It's recommended to disable the MCP when not actively using NotebookLM to preserve context for your other work. In Claude Code, use
@notebooklm-mcpto toggle it on/off, or use/mcpcommand.
No environment variables needed - the MCP uses cached tokens from ~/.notebooklm-mcp/auth.json.
Claude Code (Recommended CLI Method)
Use the built-in CLI command to add the MCP server:
Add for all projects (recommended):
claude mcp add --scope user notebooklm-mcp notebooklm-mcpOr add for current project only:
claude mcp add notebooklm-mcp notebooklm-mcpThat's it! Restart Claude Code to use the MCP tools.
Verify installation:
claude mcp listIf you prefer to edit the config file manually, add to ~/.claude.json:
{
"mcpServers": {
"notebooklm-mcp": {
"command": "notebooklm-mcp"
}
}
}Restart Claude Code after editing.
Cursor, VS Code, Claude Desktop & Other IDEs
For tools that use JSON configuration files:
Tool | Config File Location |
Cursor |
|
VS Code |
|
Claude Desktop |
|
Step 1: Find your installed path:
which notebooklm-mcpThis typically returns /Users/<YOUR_USERNAME>/.local/bin/notebooklm-mcp on macOS.
Step 2: Add this configuration (replace the path with your result from Step 1):
{
"mcpServers": {
"notebooklm-mcp": {
"command": "/Users/<YOUR_USERNAME>/.local/bin/notebooklm-mcp"
}
}
}Restart the application after adding the configuration.
Other MCP-Compatible Tools
CLI tools with built-in MCP commands (AIDER, Codex, OpenCode, etc.):
<your-tool> mcp add notebooklm-mcp notebooklm-mcpTools using JSON config files — use the full path approach shown above.
Gemini CLI (Recommended CLI Method)
Use the built-in CLI command to add the MCP server:
Add for all projects (recommended):
gemini mcp add --scope user notebooklm-mcp notebooklm-mcpOr add for current project only:
gemini mcp add notebooklm-mcp notebooklm-mcpThat's it! Restart Gemini CLI to use the MCP tools.
Verify installation:
gemini mcp listAdd to ~/.gemini/settings.json under mcpServers (run which notebooklm-mcp to find your path):
"notebooklm-mcp": {
"command": "/Users/<YOUR_USERNAME>/.local/bin/notebooklm-mcp"
}Restart Gemini CLI after editing.
Managing Context Window Usage
Since this MCP has 31 tools, it's good practice to disable it when not in use:
Claude Code:
# Toggle on/off by @-mentioning in chat
@notebooklm-mcp
# Or use the /mcp command to enable/disable
/mcpCursor/Gemini CLI:
Comment out the server in your config file when not needed
Or use your tool's MCP management features if available
What You Can Do
Simply chat with your AI tool (Claude Code, Cursor, Gemini CLI) using natural language. Here are some examples:
Research & Discovery
"List all my NotebookLM notebooks"
"Create a new notebook called 'AI Strategy Research'"
"Start web research on 'enterprise AI ROI metrics' and show me what sources it finds"
"Do a deep research on 'cloud marketplace trends' and import the top 10 sources"
"Search my Google Drive for documents about 'product roadmap' and create a notebook"
Adding Content
"Add this URL to my notebook: https://example.com/article"
"Add this YouTube video about Kubernetes to the notebook"
"Add my meeting notes as a text source to this notebook"
"Import this Google Doc into my research notebook"
AI-Powered Analysis
"What are the key findings in this notebook?"
"Summarize the main arguments across all these sources"
"What does this source say about security best practices?"
"Get an AI summary of what this notebook is about"
"Configure the chat to use a learning guide style with longer responses"
Content Generation
"Create an audio podcast overview of this notebook in deep dive format"
"Generate a video explainer with classic visual style"
"Make a briefing doc from these sources"
"Create flashcards for studying, medium difficulty"
"Generate an infographic in landscape orientation"
"Build a mind map from my research sources"
"Create a slide deck presentation from this notebook"
Smart Management
"Check which Google Drive sources are out of date and sync them"
"Show me all the sources in this notebook with their freshness status"
"Delete this source from the notebook"
"Check the status of my audio overview generation"
Pro tip: After creating studio content (audio, video, reports, etc.), poll the status to get download URLs when generation completes.
Authentication Lifecycle
Component | Duration | Refresh |
Cookies | ~2-4 weeks | Re-extract from Chrome when expired |
CSRF Token | Per MCP session | Auto-extracted on MCP start |
Session ID | Per MCP session | Auto-extracted on MCP start |
When cookies expire, you'll see an auth error. Just extract fresh cookies and call save_auth_tokens() again.
Troubleshooting
Chrome DevTools MCP Not Working (Cursor/Gemini CLI)
If Chrome DevTools MCP shows "no tools, prompts or resources" or fails to start, it's likely due to a known npx bug with the puppeteer-core module.
Symptoms:
Cursor/Gemini CLI shows MCP as connected but with "No tools, prompts, or resources"
Process spawn errors in logs:
spawn pnpx ENOENTor module not found errorsCan't extract cookies for NotebookLM authentication
Fix:
Install pnpm (if not already installed):
npm install -g pnpmUpdate Chrome DevTools MCP configuration:
For Cursor (
~/.cursor/mcp.json):"chrome-devtools": { "command": "pnpm", "args": ["dlx", "chrome-devtools-mcp@latest", "--browser-url=http://127.0.0.1:9222"] }For Gemini CLI (
~/.gemini/settings.json):"chrome-devtools": { "command": "pnpm", "args": ["dlx", "chrome-devtools-mcp@latest"] }Restart your IDE/CLI for changes to take effect.
Why this happens: Chrome DevTools MCP uses puppeteer-core which changed its module path in v23+, but npx caching behavior causes module resolution failures. Using pnpm dlx avoids this issue.
Related Issues:
Limitations
Rate limits: Free tier has ~50 queries/day
No official support: API may change without notice
Cookie expiration: Need to re-extract cookies every few weeks
Contributing
See CLAUDE.md for detailed API documentation and how to add new features.
Vibe Coding Alert
Full transparency: this project was built by a non-developer using AI coding assistants. If you're an experienced Python developer, you might look at this codebase and wince. That's okay.
The goal here was to scratch an itch - programmatic access to NotebookLM - and learn along the way. The code works, but it's likely missing patterns, optimizations, or elegance that only years of experience can provide.
This is where you come in. If you see something that makes you cringe, please consider contributing rather than just closing the tab. This is open source specifically because human expertise is irreplaceable. Whether it's refactoring, better error handling, type hints, or architectural guidance - PRs and issues are welcome.
Think of it as a chance to mentor an AI-assisted developer through code review. We all benefit when experienced developers share their knowledge.
License
MIT License
Available Tools
32 toolsaudio_overview_createA
Generate audio overview. Requires confirm=True after user approval.
Args: notebook_id: Notebook UUID source_ids: Source IDs (default: all) format: deep_dive|brief|critique|debate length: short|default|long language: BCP-47 code (en, es, fr, de, ja) focus_prompt: Optional focus text confirm: Must be True after user approval
Inputs: notebook_id (required), source_ids, format, length, +3 more. Returns: object
chat_configureB
Configure notebook chat settings.
Args: notebook_id: Notebook UUID goal: default|learning_guide|custom custom_prompt: Required when goal=custom (max 10000 chars) response_length: default|longer|shorter
Inputs: notebook_id (required), goal, custom_prompt, response_length. Returns: object
data_table_createA
Generate data table. Requires confirm=True after user approval.
Args: notebook_id: Notebook UUID description: Description of the data table to create source_ids: Source IDs (default: all) language: Language code (default: "en") confirm: Must be True after user approval
Inputs: notebook_id (required), description (required), source_ids, language, +1 more. Returns: object
flashcards_createA
Generate flashcards. Requires confirm=True after user approval.
Args: notebook_id: Notebook UUID source_ids: Source IDs (default: all) difficulty: easy|medium|hard confirm: Must be True after user approval
Inputs: notebook_id (required), source_ids, difficulty, confirm. Returns: object
infographic_createA
Generate infographic. Requires confirm=True after user approval.
Args: notebook_id: Notebook UUID source_ids: Source IDs (default: all) orientation: landscape|portrait|square detail_level: concise|standard|detailed language: BCP-47 code (en, es, fr, de, ja) focus_prompt: Optional focus text confirm: Must be True after user approval
Inputs: notebook_id (required), source_ids, orientation, detail_level, +3 more. Returns: object
mind_map_createB
Generate and save mind map. Requires confirm=True after user approval.
Args: notebook_id: Notebook UUID source_ids: Source IDs (default: all) title: Display title confirm: Must be True after user approval
Inputs: notebook_id (required), source_ids, title, confirm. Returns: object
mind_map_listB
List all mind maps in a notebook.
Args: notebook_id: Notebook UUID
Inputs: notebook_id (required). Returns: object
notebook_add_driveB
Add Google Drive document as source.
Args: notebook_id: Notebook UUID document_id: Drive document ID (from URL) title: Display title doc_type: doc|slides|sheets|pdf
Inputs: notebook_id (required), document_id (required), title (required), doc_type. Returns: object
notebook_add_textC
Add pasted text as source.
Args: notebook_id: Notebook UUID text: Text content to add title: Optional title
Inputs: notebook_id (required), text (required), title. Returns: object
notebook_add_urlC
Add URL (website or YouTube) as source.
Args: notebook_id: Notebook UUID url: URL to add
Inputs: notebook_id (required), url (required). Returns: object
notebook_createB
Create a new notebook.
Args: title: Optional title for the notebook
Inputs: title. Returns: object
notebook_deleteA
Delete notebook permanently. IRREVERSIBLE. Requires confirm=True.
Args: notebook_id: Notebook UUID confirm: Must be True after user approval
Inputs: notebook_id (required), confirm. Returns: object
notebook_describeB
Get AI-generated notebook summary with suggested topics.
Args: notebook_id: Notebook UUID
Returns: summary (markdown), suggested_topics list
Inputs: notebook_id (required). Returns: object
notebook_getB
Get notebook details with sources.
Args: notebook_id: Notebook UUID
Inputs: notebook_id (required). Returns: object
notebook_listB
List all notebooks.
Args: max_results: Maximum number of notebooks to return (default: 100)
Inputs: max_results. Returns: object
notebook_queryA
Ask AI about EXISTING sources already in notebook. NOT for finding new sources.
Use research_start instead for: deep research, web search, find new sources, Drive search.
Args: notebook_id: Notebook UUID query: Question to ask source_ids: Source IDs to query (default: all) conversation_id: For follow-up questions
Inputs: notebook_id (required), query (required), source_ids, conversation_id. Returns: object
notebook_renameB
Rename a notebook.
Args: notebook_id: Notebook UUID new_title: New title
Inputs: notebook_id (required), new_title (required). Returns: object
quiz_createA
Generate quiz. Requires confirm=True after user approval.
Args: notebook_id: Notebook UUID source_ids: Source IDs (default: all) question_count: Number of questions (default: 2) difficulty: Difficulty level (default: 2) confirm: Must be True after user approval
Inputs: notebook_id (required), source_ids, question_count, difficulty, +1 more. Returns: object
report_createA
Generate report. Requires confirm=True after user approval.
Args: notebook_id: Notebook UUID source_ids: Source IDs (default: all) report_format: "Briefing Doc"|"Study Guide"|"Blog Post"|"Create Your Own" custom_prompt: Required for "Create Your Own" language: BCP-47 code (en, es, fr, de, ja) confirm: Must be True after user approval
Inputs: notebook_id (required), source_ids, report_format, custom_prompt, +2 more. Returns: object
research_importA
Import discovered sources into notebook.
Call after research_status shows status="completed".
Args: notebook_id: Notebook UUID task_id: Research task ID source_indices: Source indices to import (default: all)
Inputs: notebook_id (required), task_id (required), source_indices. Returns: object
research_startA
Deep research / fast research: Search web or Google Drive to FIND NEW sources.
Use this for: "deep research on X", "find sources about Y", "search web for Z", "search Drive". Workflow: research_start -> poll research_status -> research_import.
Args: query: What to search for (e.g. "quantum computing advances") source: web|drive (where to search) mode: fast (~30s, ~10 sources) | deep (~5min, ~40 sources, web only) notebook_id: Existing notebook (creates new if not provided) title: Title for new notebook
Inputs: query (required), source, mode, notebook_id, +1 more. Returns: object
research_statusA
Poll research progress. Blocks until complete or timeout.
Args: notebook_id: Notebook UUID poll_interval: Seconds between polls (default: 30) max_wait: Max seconds to wait (default: 300, 0=single poll) compact: If True (default), truncate report and limit sources shown to save tokens. Use compact=False to get full details.
Inputs: notebook_id (required), poll_interval, max_wait, compact. Returns: object
save_auth_tokensB
Save NotebookLM cookies. CSRF and session ID are auto-extracted.
Args: cookies: Cookie header from Chrome DevTools get_network_request csrf_token: (deprecated, auto-extracted from request_body or page) session_id: (deprecated, auto-extracted from request_url or page) request_body: Optional request body from get_network_request (contains CSRF token) request_url: Optional request URL from get_network_request (contains session ID)
Inputs: cookies (required), csrf_token, session_id, request_body, +1 more. Returns: object
slide_deck_createA
Generate slide deck. Requires confirm=True after user approval.
Args: notebook_id: Notebook UUID source_ids: Source IDs (default: all) format: detailed_deck|presenter_slides length: short|default language: BCP-47 code (en, es, fr, de, ja) focus_prompt: Optional focus text confirm: Must be True after user approval
Inputs: notebook_id (required), source_ids, format, length, +3 more. Returns: object
source_deleteA
Delete source permanently. IRREVERSIBLE. Requires confirm=True.
Args: source_id: Source UUID to delete confirm: Must be True after user approval
Inputs: source_id (required), confirm. Returns: object
source_describeB
Get AI-generated source summary with keyword chips.
Args: source_id: Source UUID
Returns: summary (markdown with bold keywords), keywords list
Inputs: source_id (required). Returns: object
source_get_contentA
Get raw text content of a source (no AI processing).
Returns the original indexed text from PDFs, web pages, pasted text, or YouTube transcripts. Much faster than notebook_query for content export.
Args: source_id: Source UUID
Returns: content (str), title (str), source_type (str), char_count (int)
Inputs: source_id (required). Returns: object
source_list_driveA
List sources with types and Drive freshness status.
Use before source_sync_drive to identify stale sources.
Args: notebook_id: Notebook UUID
Inputs: notebook_id (required). Returns: object
source_sync_driveA
Sync Drive sources with latest content. Requires confirm=True.
Call source_list_drive first to identify stale sources.
Args: source_ids: Source UUIDs to sync confirm: Must be True after user approval
Inputs: source_ids (required), confirm. Returns: object
studio_deleteA
Delete studio artifact. IRREVERSIBLE. Requires confirm=True.
Args: notebook_id: Notebook UUID artifact_id: Artifact UUID (from studio_status) confirm: Must be True after user approval
Inputs: notebook_id (required), artifact_id (required), confirm. Returns: object
studio_statusC
Check studio content generation status and get URLs.
Args: notebook_id: Notebook UUID
Inputs: notebook_id (required). Returns: object
video_overview_createA
Generate video overview. Requires confirm=True after user approval.
Args: notebook_id: Notebook UUID source_ids: Source IDs (default: all) format: explainer|brief visual_style: auto_select|classic|whiteboard|kawaii|anime|watercolor|retro_print|heritage|paper_craft language: BCP-47 code (en, es, fr, de, ja) focus_prompt: Optional focus text confirm: Must be True after user approval
Inputs: notebook_id (required), source_ids, format, visual_style, +3 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 32 tools
Most tools have distinct purposes targeting specific resources or actions (e.g., audio_overview_create vs. video_overview_create, notebook_add_drive vs. notebook_add_text). However, some overlap exists between research_start and notebook_query, where the descriptions clarify that research_start is for finding new sources while notebook_query is for querying existing ones, which could still cause confusion if not carefully read.
Tool names follow a highly consistent verb_noun pattern throughout (e.g., notebook_create, notebook_delete, source_list_drive, research_start). All tools use snake_case with clear, descriptive names, making the set predictable and easy to navigate.
With 32 tools, the count is borderline high for a notebook management and content generation server. While the domain is broad (notebooks, sources, research, studio artifacts), the number feels heavy and could overwhelm agents, though each tool appears to serve a specific function within the scope.
The tool surface provides comprehensive coverage for the notebook management domain, including full CRUD for notebooks and sources, content generation (audio, video, reports, etc.), research workflows, and studio operations. There are no obvious gaps; agents can perform all expected lifecycle actions from creation to deletion with detailed options.
Related MCP Connectors
Google NotebookLM via natural language: create notebooks, add sources (PDF, URL, YouTube) and ask gr
Google Gemini Notebook (NotebookLM): notebooks, sources, cited chat, podcasts, video, slides
Create, search, and update notes in an xNotepad AI notebook, with semantic search and AI Q&A.
Summarize and transcribe videos, audio, documents and web pages; subtitles; search your library.
Related MCP Servers
- AlicenseAqualityNot gradedmaintenanceEnables interaction with Google's NotebookLM through natural language, allowing users to create and manage notebooks, add sources from URLs/YouTube/Google Drive, query AI for insights, generate audio podcasts and other studio content, and perform AI-powered research and analysis.323MIT
- AlicenseAqualityDmaintenanceEnables interaction with Google NotebookLM through natural language to create and manage notebooks, add sources from URLs/YouTube/Google Drive, perform AI-powered research and analysis, generate audio podcasts, videos, infographics, and slide decks from notebook content.32MIT
- AlicenseAqualityDmaintenanceEnables interaction with Google's NotebookLM via the Model Context Protocol to manage notebooks, sources, and research tasks. Users can create, query, and summarize content, as well as generate artifacts like audio overviews and slide decks using natural language.321MIT
- AlicenseBqualityAmaintenanceEnables AI assistants to programmatically interact with Google NotebookLM, allowing them to create and manage notebooks, add sources, query content, generate audio/video, and perform research tasks through natural language commands.5514,897 PyPI6,485MIT


