notebooklm-claude-integration
Enables querying Google NotebookLM notebooks directly from Claude Desktop (MCP) and Claude Code (CLI), providing citation-backed answers from Gemini.
README
NotebookLM Claude Integration
Complete integration of Google NotebookLM with Claude AI through both Claude Desktop (MCP) and Claude Code (Plugin).
Status: Production-ready ✅ | Built: Dec 2024 | Tested: Fully functional
What This Is
This project provides two complete integrations for using NotebookLM with Claude:
- Claude Desktop - MCP Server for conversational interface
- Claude Code CLI - Plugin for development workflow
Both allow you to query your NotebookLM notebooks directly from Claude, getting citation-backed answers from Gemini without leaving your workflow.
Quick Start
Project plan lives at docs/PROJECT_PLAN.md with topic-specific items under docs/plans/.
CI details live at docs/CI.md.
Keep Pixi dependencies current (updates the lockfile, then installs from it):
pixi run pixi-sync
NotebookLM end-to-end integration (uses your local Chrome auth):
NOTEBOOK_IDS=pytest-patterns \
QUESTION="Summarize the key sources in this notebook." \
pixi run notebooklm-integration
AI Agent Step-by-Step (Codex CLI)
Use this sequence when an agent needs to verify the NotebookLM integration end-to-end.
- Install and enable the MCP server:
uv tool install notebooklm-mcp-server codex mcp add notebooklm-rpc notebooklm-mcp - Authenticate once (browser login) and persist cookies:
pixi run notebooklm-auth-rpc - Run the full E2E test (downloads the skill from GitHub into a temp repo and queries a notebook):
pixi run codex-skill-e2e - Optional overrides:
NOTEBOOK_URL="https://notebooklm.google.com/notebook/<id>" \ NOTEBOOK_NAME="My Test Notebook" \ NOTEBOOK_DESC="Notebook for testing Codex + NotebookLM." \ NOTEBOOK_ID="my-test-notebook" \ pixi run codex-skill-e2e
AI Agent Step-by-Step (Codex SDK)
Use this sequence when a Codex SDK agent must validate the setup and produce a confirmed response.
- Ensure Codex CLI + MCP are set up (same as CLI steps above).
- Run the SDK verification (temp workspace, streaming output):
SDK_ROOT=/tmp/codex-sdk-verify rm -rf "$SDK_ROOT" && mkdir -p "$SDK_ROOT" cd "$SDK_ROOT" cat <<'EOF' > package.json { "name": "codex-sdk-verify", "version": "0.1.0", "private": true, "type": "module", "scripts": { "run": "node run.mjs" }, "dependencies": { "@openai/codex-sdk": "^0.77.0" } } EOF cat <<'EOF' > run.mjs import { Codex } from "@openai/codex-sdk"; const prompt = [ "Use the notebooklm-patterns skill.", "List all notebooks, then ask each notebook (via notebook_id) this question:", "'How can we improve the Codex implementation in this repo?'.", "Aggregate responses labeled by notebook name and include citations.", "If any notebook_query times out, retry once. If it still times out, record a timeout for that notebook and continue.", ].join(" "); const codex = new Codex(); const thread = codex.startThread({ workingDirectory: "/tmp/codex-skill-verify", sandboxMode: "read-only", approvalPolicy: "never", }); const { events } = await thread.runStreamed(prompt); for await (const event of events) { if (event.type === "item.completed" && event.item?.type === "agent_message") { console.log(event.item.text); } if (event.type === "turn.failed") { console.error("Codex SDK turn failed:", event.error?.message ?? event.error); } } EOF npm install npm run run
For Claude Code (Plugin)
# 1. Ensure NotebookLM MCP server is configured
uv tool install notebooklm-mcp-server
claude mcp add notebooklm-rpc -- notebooklm-mcp
# 2. Add the plugin marketplace from GitHub
claude plugin marketplace add ray-manaloto/notebooklm-claude-integration
# 3. Install the plugin (project scope)
claude plugin install notebooklm@notebooklm-plugin --scope project
# 4. Verify installation
claude plugin marketplace list # Should show: notebooklm-plugin
claude plugin list # Should show: notebooklm
# 5. Restart Claude Code, then:
/nlm auth rpc # First-time authentication
/nlm list # List notebooks
/nlm ask "Your question" # Query the notebook
For local development (if you cloned this repo):
claude plugin marketplace add .
For Claude Desktop (MCP)
npm install -g notebooklm-mcp
Alternate NotebookLM MCP (HTTP/RPC, jacob-bd)
This repo also supports the HTTP/RPC-based MCP server from jacob-bd/notebooklm-mcp, which exposes additional tools (notebook creation, Drive sync, Studio artifacts).
Install + auth:
uv tool install notebooklm-mcp-server
GOOGLE_ACCOUNT=ray.manaloto@gmail.com pixi run notebooklm-auth-rpc
Pixi task (recommended for repeatable runs):
pixi run notebooklm-auth-rpc
Override account:
GOOGLE_ACCOUNT=your@email pixi run notebooklm-auth-rpc
Register the MCP server:
codex mcp add notebooklm-rpc -- notebooklm-mcp
Notes:
- This server uses cookie extraction; persist cookies with
save_auth_tokens. - Tool names include
notebook_list,notebook_query, andsource_sync_drive. - Use
notebooklm-patternsfor RPC-first guidance. - Override the account used for cookie extraction with
GOOGLE_ACCOUNT=your@email.
Recommended Setup (RPC-first)
Use notebooklm-rpc as the default server for full feature parity:
notebooklm-rpc(expanded toolset, Drive sync, Studio artifacts)
If auth fails, re-run pixi run notebooklm-auth-rpc and retry.
When to Use This Repo vs. jacob-bd Only
You can use jacob-bd/notebooklm-mcp directly if you only need the RPC server tools.
This repo adds:
- Codex/Claude CLI wiring (
/nlmcommands, skills, tool routing). - Repeatable Pixi tasks for validation and multi-notebook queries.
- Centralized MCP configuration and agent playbooks.
Add to claude_desktop_config.json:
{
"mcpServers": {
"notebooklm-rpc": {
"command": "notebooklm-mcp"
}
}
}
Restart Claude Desktop, then:
Add my notebook: https://notebooklm.google.com/notebook/YOUR_ID
Repository Structure
notebooklm-claude-integration/
├── plugins/ # Claude Code Plugin
│ └── notebooklm/
│ ├── .claude-plugin/
│ │ ├── plugin.json # Plugin manifest
│ │ └── marketplace.json # Marketplace manifest
│ ├── commands/
│ │ └── nlm.md # /nlm command (ask, add, list, select, auth)
│ ├── agents/
│ │ └── research-agent.md # Proactive research agent
│ ├── skills/
│ │ └── notebooklm-patterns/
│ │ └── SKILL.md # MCP tools reference & troubleshooting
│ └── README.md
│
├── auth-layer/ # Multi-backend authentication (NEW)
│ ├── src/
│ │ ├── backends/
│ │ │ ├── cdp.ts # Chrome DevTools Protocol
│ │ │ ├── keychain.ts # macOS Keychain storage
│ │ │ └── persistent.ts # Playwright persistent context
│ │ ├── auth-manager.ts # Main orchestrator
│ │ ├── cli.ts # nlm-auth CLI tool
│ │ └── types.ts # TypeScript types
│ ├── package.json
│ └── README.md
│
├── mcp-config/ # MCP configuration utilities
│ ├── servers.json # Unified MCP server config
│ ├── env.example # Environment variable template
│ └── README.md # Pixi-first install instructions
│
├── docs/ # Documentation
│ ├── CLAUDE_DESKTOP_SETUP.md
│ ├── CLAUDE_CODE_SETUP.md
│ ├── API_REFERENCE.md
│ └── TROUBLESHOOTING.md
│
├── examples/ # Usage examples
│
└── tests/ # Test suite
Codex Skill E2E Test
Use the Pixi task to download the skill from GitHub into a temp repo, load it, and run an end-to-end NotebookLM query through Codex CLI.
Prereqs:
codexCLI installed- NotebookLM MCP server added:
codex mcp add notebooklm-rpc notebooklm-mcp - NotebookLM authentication completed at least once
Run:
pixi run codex-skill-e2e
Optional overrides:
NOTEBOOK_URL="https://notebooklm.google.com/notebook/<id>" \
NOTEBOOK_NAME="My Test Notebook" \
NOTEBOOK_DESC="Notebook for testing Codex + NotebookLM." \
NOTEBOOK_ID="my-test-notebook" \
pixi run codex-skill-e2e
Validation checklist (expected results):
- RPC auth is valid (cookies persisted via
save_auth_tokens) - The target notebook exists in
notebook_list - A response is returned with citations
See docs/CODEX_PLAYBOOK.md for a full Codex CLI/SDK validation runbook.
Recommended validation run:
pixi run codex-validate-setup
Codex Improvement Notes
- Use
notebook_idfor multi-notebook queries to avoid shared state. - Retry a timed-out
notebook_queryonce, then record a timeout and continue.
Codex Multi-Notebook Query
Run a single question across all notebooks and aggregate results (uses notebook_id to avoid shared state conflicts):
pixi run codex-ask-all
Optional override:
QUESTION="What are the key risks in this architecture?" pixi run codex-ask-all
RPC Auth Refresh
If RPC auth expires, refresh cookies:
pixi run notebooklm-auth-rpc
Pixi RPC Task Runner
All NotebookLM MCP tools are available as pixi run nlm-* tasks (1:1 mapping).
See docs/API_REFERENCE.md for the full task list and argument conventions.
Use the notebooklm-rpc server after the file-mode auth:
NOTEBOOK_IDS=pytest-patterns \
QUESTION="Summarize the key sources in this notebook." \
pixi run codex-ask-all-rpc
Filter by notebook IDs (comma-separated):
NOTEBOOK_IDS=pytest-patterns \
QUESTION="Provide modern best practices for integration tests without mocks." \
pixi run codex-ask-all
Validation checklist (expected results):
- Each notebook returns a labeled section
- Citations are included when NotebookLM provides them
- Timeouts are retried once and reported
Repo Hygiene (Pixi-Only)
Install the pre-commit hook to block bash scripts and non-Pixi commands:
pixi run hooks-install
Run locally on demand:
pixi run hooks-run
Codex Multi-Notebook Query (Subagent-aware)
If Codex supports subagents or task parallelism, this script asks a subagent per notebook; otherwise it falls back to sequential queries:
pixi run codex-ask-all-subagents
SDK example:
cd codex-sdk-test
QUESTION="Summarize auth flow changes." npm run test:notebooklm-ask-all
Auth Bootstrap (Recommended for Multi-Process)
Run the auth flow once, then fan out workers that reuse the cookie file:
pixi run notebooklm-auth-rpc
Plugin Commands
| Command | Description |
|---|---|
/nlm ask <question> |
Ask a question to a notebook by ID |
/nlm list |
List all notebooks |
/nlm create <name> |
Create a new notebook |
/nlm auth rpc |
Save RPC auth cookies |
Features
Claude Code Plugin
- ✅
/nlmcommand with subcommands - ✅ Research agent with automatic follow-up questions
- ✅ Library management (add, list, select, search)
- ✅ Uses existing NotebookLM MCP server
- ✅ Citation-backed answers from Gemini
- ✅ Troubleshooting skill with MCP tools reference
Claude Desktop (MCP)
- ✅ Natural language notebook queries
- ✅ Automatic notebook discovery
- ✅ Citation-backed answers
- ✅ Multi-notebook support
- ✅ Persistent authentication
Architecture
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Claude │────────>│ Plugin │────────>│ NotebookLM │
│ Code CLI │ │ Commands │ │ MCP Server │
└─────────────┘ └──────────────┘ └─────────────┘
│ │
│ v
│ ┌─────────────┐
│ │ Auth Helper │
v │ (cookies) │
┌──────────────┐ └─────────────┘
│ MCP Tools │ │
│ - notebook_list│ v
│ - notebook_query│ ┌─────────────┐
│ - notebook_add_url│ │ NotebookLM │
│ - research_start│ │ (Gemini) │
│ - studio_status│ └─────────────┘
└──────────────┘
The plugin uses the NotebookLM MCP server which handles:
- Browser automation via Playwright
- Google authentication
- Notebook library management
- Session handling
Use Cases
Quick Research:
/nlm ask "How do I implement OAuth2 in FastAPI?"
# Get instant answer with citations from your docs
Add Documentation:
/nlm source add-url <notebook_id> <url>
# Adds a URL source to a notebook
Deep Research (via agent):
"Research authentication patterns from my documentation"
# research-agent activates, asks follow-up questions, synthesizes answer
Requirements
For Claude Code Plugin:
- Claude Code CLI
- NotebookLM MCP server (
notebooklm-mcp-server) - Google Chrome browser (for auth)
- Google account with NotebookLM access
For Claude Desktop:
- Claude Desktop
notebooklm-mcppackage
Installation Options
Project Scope (Recommended)
claude plugin install notebooklm@notebooklm-plugin --scope project
User Scope (All Projects)
claude plugin install notebooklm@notebooklm-plugin --scope user
Local Scope (Gitignored)
claude plugin install notebooklm@notebooklm-plugin --scope local
Authentication Options
The plugin supports multiple authentication backends (tried in priority order):
| Backend | Platform | Description |
|---|---|---|
| CDP | All | Connect to existing Chrome session (best UX) |
| Keychain | macOS | Stored cookies in system keychain |
| Persistent | All | Playwright browser profile |
| Manual | All | Interactive browser login (fallback) |
RPC Server (Default: File Mode)
For the HTTP/RPC server, default to file-mode auth:
notebooklm-mcp-auth --file
This writes cookies to ~/.notebooklm-mcp/auth.json for RPC use.
Reuse on future runs: if ~/.notebooklm-mcp/auth.json exists, you can skip login.
If auth breaks: re-run notebooklm-mcp-auth --file to refresh cookies.
Validate auth without re-login:
pixi run notebooklm-auth-check-rpc
Recommended: Chrome Remote Debugging (No Popups!)
# 1. Start Chrome with remote debugging
open -a "Google Chrome" --args --remote-debugging-port=9222 # macOS
# 2. Login to NotebookLM in Chrome (one-time)
# Navigate to https://notebooklm.google.com and login with Google
# 3. Now queries use your existing session - no popups!
/nlm ask "How do I implement OAuth?"
Tip: Add to ~/.zshrc or ~/.bashrc:
alias chrome-debug='open -a "Google Chrome" --args --remote-debugging-port=9222'
Troubleshooting
Not Authenticated
# Run notebooklm-mcp-auth and complete login
notebooklm-mcp-auth
# Save RPC auth cookies
/nlm auth rpc
Rate Limited (50 queries/day free tier)
- Wait for daily reset, or
- Re-run
notebooklm-mcp-authwith a different Google account
Wrong Notebook
/nlm list # See all notebooks
# Re-run /nlm ask with the correct notebook_id
See TROUBLESHOOTING.md for complete guide.
Documentation
- Claude Code Setup - Plugin installation guide
- Claude Desktop Setup - MCP setup guide
- API Reference - All commands and options
- Troubleshooting - Common issues and solutions
Security & Privacy
- ✅ All data stored locally by MCP server
- ✅ No data sent to third parties
- ✅ Browser session managed by MCP server
- ✅ Credentials never logged
- ⚠️ Consider dedicated Google account
- ⚠️ NotebookLM terms of service apply
License
MIT License - see LICENSE
Related Projects
- NotebookLM MCP Server - MCP server implementation
- Claude Code - Official Claude Code CLI
- wshobson/agents - Plugin patterns reference
Built with ❤️ for efficient development workflows
Last Updated: December 2024
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.