MN

m4yk3ldev/notebooklm-mcp

Developer tools
20 stars 0 forks Quality 67 Trend 31

MCP server for Google NotebookLM — 27 tools for notebooks, sources, research, and studio content generation

Overview

Stop jumping between browser tabs. brings the full analytical power of Google NotebookLM directly into your local terminal, IDE, and AI assistants like Claude, Cursor, and VS Code. Manage notebooks, ingest diverse sources, trigger deep research, and generate studio-quality content—all via a single, standardized Model Context Protocol (MCP) interface. The Model Context Protocol is a standard for connecting LLMs to external data sources and tools. This package speaks MCP over stdio — your AI client (Claude Desktop, Cursor, VS Code, etc.) spawns notebooklm-mcp serve as a subprocess and the two communicate over JSON-RPC. The 27 tools below become callable functions in the model's tool list. - ⚡ : Log in once with notebooklm-mcp auth. Our automated CDP-based flow handles secure cookie extraction so you can focus on your data. - 🔄 : Built-in background session restoration. If your session expires, the server transparently reconnects without breaking your workflow.

README

🧠 NotebookLM MCP Server

Bridge the Gap Between Google NotebookLM and Your AI Workspace

Stop jumping between browser tabs. NotebookLM MCP brings the full analytical power of Google NotebookLM directly into your local terminal, IDE, and AI assistants like Claude, Cursor, and VS Code.

Manage notebooks, ingest diverse sources, trigger deep research, and generate studio-quality content—all via a single, standardized Model Context Protocol (MCP) interface.

New to MCP? The Model Context Protocol is a standard for connecting LLMs to external data sources and tools. This package speaks MCP over stdio — your AI client (Claude Desktop, Cursor, VS Code, etc.) spawns notebooklm-mcp serve as a subprocess and the two communicate over JSON-RPC. The 27 tools below become callable functions in the model’s tool list.


🔥 Key Capabilities

  • ⚡ Seamless Authentication: Log in once with notebooklm-mcp auth. Our automated CDP-based flow handles secure cookie extraction so you can focus on your data.
  • 🔄 Resilient Connectivity: Built-in background session restoration. If your session expires, the server transparently reconnects without breaking your workflow.
  • 📂 Universal Ingestion: Instantly add URLs, YouTube transcripts, Google Drive files, or raw text snippets to any notebook.
  • 🕵️ Autonomous Research: Harness Google’s Deep Research engine. Start a task, poll its progress, and import structured insights directly into your project.
  • 🎭 Creative Studio: Programmatically generate Audio Overviews (podcasts), Briefing Docs, Infographics, Slide Decks, and Quizzes from your sources.

🚀 Quick Start

1. Installation

Requires Node.js ≥ 20 and Google Chrome or Chromium (for auth).

Run it instantly with npx:

npx -y @m4ykeldev/notebooklm-mcp serve

Or install globally for better performance:

npm install -g @m4ykeldev/notebooklm-mcp

Developers who want to hack on the source: this repo uses pnpm (pinned via packageManager in package.json). After cloning, run corepack enable && pnpm install. See CONTRIBUTING.md on GitHub for the full dev / release flow.

2. The “One-Click” Login

Say goodbye to manual cookie hunting. Our smart auth flow does the heavy lifting for you.

notebooklm-mcp auth

A secure Chrome window will open. Simply log into your Google account, and we’ll handle the rest. Your session is stored locally and securely.

Auth fallbacks if automated Chrome can’t run:

notebooklm-mcp auth --manual              # interactive copy/paste from your browser
notebooklm-mcp auth --file tokens.json    # import a previously exported bundle
notebooklm-mcp auth --show-tokens         # verify the cached session

For headless / CI environments, set NOTEBOOKLM_COOKIES (and optionally NOTEBOOKLM_CSRF_TOKEN, NOTEBOOKLM_SESSION_ID) instead of running the auth flow. Token resolution order: env var → ~/.notebooklm-mcp/auth.json → error.


🤖 AI Assistant Integration

Pick your client below — every section shows the config file path per OS, a minimal copy-paste block, and the advanced variant with --query-timeout and NOTEBOOKLM_COOKIES env override.

Client Config file Format
Claude Desktop claude_desktop_config.json JSON
Claude Code (CLI) ~/.claude.json or claude mcp add JSON / CLI
Codex CLI ~/.codex/config.toml TOML
OpenAI Agents SDK (Python) in-code Python
OpenAI Agents SDK (TypeScript) in-code TypeScript
Gemini CLI ~/.gemini/settings.json JSON
Cursor ~/.cursor/mcp.json JSON
VS Code (Copilot Chat agent mode) .vscode/mcp.json JSON
Windsurf ~/.codeium/windsurf/mcp_config.json JSON
JetBrains AI Assistant / Junie ~/.junie/mcp/mcp.json JSON
Zed ~/.config/zed/settings.json JSON
OpenCode (sst) opencode.jsonc JSONC
Cline (VS Code extension) extension settings UI JSON
Goose (Block) ~/.config/goose/config.yaml YAML
5ire in-app settings GUI
Aider not yet supported —
Generic stdio caller yours —

Claude Desktop

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
    }
  }
}

Claude Code (CLI)

Recommended path is the claude mcp add CLI (writes the JSON for you):

claude mcp add --transport stdio notebooklm -- npx -y @m4ykeldev/notebooklm-mcp serve

Codex CLI

  • macOS: ~/.codex/config.toml
  • Linux: ~/.config/codex/config.toml
  • Windows: %APPDATA%\codex\config.toml
[mcp_servers.notebooklm]
command = "npx"
args = ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]

OpenAI Agents SDK — Python

Wire it in code (no config file):

from agents.mcp import MCPServerStdio

async with MCPServerStdio(
    name="NotebookLM",
    params={
        "command": "npx",
        "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"],
    },
) as server:
    tools = await server.list_tools()
    print([t.name for t in tools])  # 27 tools

OpenAI Agents SDK — TypeScript

import { MCPServerStdio } from "@openai/agents";

const server = new MCPServerStdio({
  command: "npx",
  args: ["-y", "@m4ykeldev/notebooklm-mcp", "serve"],
});

await server.connect();
const tools = await server.listTools();
console.log(tools.map((t) => t.name)); // 27 tools

Gemini CLI

~/.gemini/settings.json (user-global) or .gemini/settings.json (per-project).

{
  "mcpServers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
    }
  }
}

Cursor

  • macOS / Linux: ~/.cursor/mcp.json (global) or .cursor/mcp.json (per-project)
  • Windows: %APPDATA%\Cursor\mcp.json
{
  "mcpServers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
    }
  }
}

VS Code (Copilot Chat agent mode)

.vscode/mcp.json (per-project). Top-level key is servers (not mcpServers — Microsoft renamed this).

{
  "servers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
    }
  }
}

Windsurf

  • macOS / Linux: ~/.codeium/windsurf/mcp_config.json
  • Windows: %APPDATA%\Codeium\Windsurf\mcp_config.json
{
  "mcpServers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
    }
  }
}

JetBrains AI Assistant / Junie

  • macOS / Linux: ~/.junie/mcp/mcp.json (user-global) or .junie/mcp/mcp.json (per-project)
  • Windows: %APPDATA%\JetBrains\Junie\mcp.json
{
  "mcpServers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
    }
  }
}

Zed

~/.config/zed/settings.json — the relevant key is context_servers (Zed’s MCP equivalent).

{
  "context_servers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
    }
  }
}

OpenCode (sst)

opencode.jsonc (project root) or ~/.config/opencode/config.json.

{
  "mcp": {
    "servers": {
      "notebooklm": {
        "command": "npx",
        "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
      }
    }
  }
}

Cline (VS Code extension)

Managed via Cline’s MCP settings UI inside VS Code. Underlying file (don’t edit by hand): ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json.

  1. Open the Cline panel → click the MCP icon → Configure MCP Servers.
  2. Paste:
{
  "mcpServers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
    }
  }
}
  1. Save. Cline restarts the server automatically.

Goose (Block)

~/.config/goose/config.yaml (or via goose configure). Goose calls MCP servers “extensions”.

extensions:
  notebooklm:
    type: stdio
    command: npx
    args:
      - "-y"
      - "@m4ykeldev/notebooklm-mcp"
      - serve

5ire

GUI app (no user-editable config file):

  1. Open 5ire → Settings (Mod+K → Providers).
  2. Click Add MCP Server.
  3. Name: notebooklm
  4. Type: Stdio
  5. Command: npx
  6. Args: -y @m4ykeldev/notebooklm-mcp serve (add --query-timeout 180000 if needed)
  7. Env vars (optional): NOTEBOOKLM_COOKIES=SID=...; HSID=...; SSID=...; APISID=...; SAPISID=...
  8. Save and restart.

Verify: ask in chat “List my NotebookLM notebooks.” — tool-call panel shows notebook_list.


Aider

Aider does not yet have first-class MCP-server client integration. Workarounds: run notebooklm-mcp serve separately and pipe responses, or use the generic stdio caller inside a small wrapper script. Track upstream support via the Aider Discord.


Generic stdio caller

If your client speaks the MCP protocol over stdio but isn’t listed above, every config above reduces to the same primitive:

spawn:   npx -y @m4ykeldev/notebooklm-mcp serve
stdio:   parent  stdin (JSON-RPC requests)
env:     (optional)
  NOTEBOOKLM_COOKIES=...        # skip the auth flow in CI
  NOTEBOOKLM_CSRF_TOKEN=...
  NOTEBOOKLM_SESSION_ID=...
flags:   (optional)
  --query-timeout           # per-RPC timeout, default 120000
  --debug                       # verbose stderr logging

On connection the server advertises 27 tools — see the Complete Tool Reference below.


Verify any wiring

After restarting your client, ask:

“List my NotebookLM notebooks.”

If the model invokes notebook_list and returns a table of titles, you’re connected.


🧩 Agent Skill

skills/notebooklm/SKILL.md teaches an agent when and how to use these tools (setup, query → studio → research workflows, confirmation rules, failure handling). Copy the skills/notebooklm/ folder into your agent’s skills directory (for Claude Code: ~/.claude/skills/).


💬 Example Prompts

Once wired up, your AI can drive NotebookLM end-to-end with natural language. The model picks the right tool from the 27 below.

Goal Sample prompt Tools the model will call
Inventory “Show me every NotebookLM project I own” notebook_list
Start a project “Create a notebook called ‘Q3 Earnings’ and add the AAPL 10-Q PDF at https://…” notebook_create, source_add_url
Grounded Q&A “From the AAPL notebook, what is the year-over-year services revenue change?” notebook_query
Multi-source brief “In my ‘Climate Policy’ notebook, generate a one-page briefing doc focused on IRA tax credits” report_create, studio_status
Studio podcast “Make a 10-min audio overview of my ‘AI Safety Reading’ notebook” audio_overview_create, studio_status
Deep Research → import “Run deep research on ‘kelp aquaculture in Maine’ and import the findings into my ‘Climate’ notebook” research_start, research_status, research_import
Cleanup “Delete the ‘Old Drafts’ notebook I no longer need” notebook_list, notebook_delete

🛠 Complete Tool Reference (27)

Every tool carries a title, a description of what it returns, and MCP annotations (read-only, destructive, idempotent), so clients can tell safe lookups from changes. Since v0.5.0 each tool also publishes an outputSchema and returns its result as structuredContent (typed fields) alongside the usual JSON text. The server also sends usage instructions at initialization.

Renamed in v0.4.0. Tool names now follow one resource_action scheme. If your client allow-lists tools by name (e.g. mcp__notebooklm__notebook_add_url in Claude Code permissions), update it:

Before Now
notebook_add_url / notebook_add_text / notebook_add_drive source_add_url / source_add_text / source_add_drive
source_describe source_get
notebook_describe notebook_summarize
refresh_auth / save_auth_tokens auth_refresh / auth_save_tokens

📔 Notebook Management

Tool Description
notebook_list Get an overview of your notebooks (titles, sources, ownership), up to max_results (default 100).
notebook_create Create a new NotebookLM project instantly from your terminal or AI assistant.
notebook_get Retrieve deep metadata and a full list of sources for a specific notebook.
notebook_summarize Get an AI-generated summary of the notebook plus the questions NotebookLM suggests asking.
notebook_rename Update the title of an existing notebook.
notebook_delete Permanently remove a notebook (requires explicit confirmation).

📄 Source Ingestion & Management

Tool Description
source_add_url Add any public website or YouTube video as a source. Returns the new source’s ID.
source_add_text Ingest raw text snippets or local file contents. Returns the new source’s ID.
source_add_drive Import a Google Drive file by its file ID. Returns the new source’s ID.
source_get Get a source’s title, type and extracted-text length (the text itself: next tool).
source_get_content Extract the full underlying text of a source for processing by other AI tools.
source_sync_drive Sync selected Google Drive sources to pull the latest changes into NotebookLM.
source_delete Remove a specific source from your notebook.

🔬 Research & Deep Analysis

Tool Description
research_start Launch an autonomous research task using Google’s engine (Web or Drive sources).
research_status Track the progress of active research tasks and view discovered insights.
research_import Instantly import the findings of a research task as new sources in your notebook.
notebook_query Ask questions answered only from your sources, with follow-ups in the same conversation.

🎬 Studio (AI Content Generation)

Tool Description
audio_overview_create Transform your notebook’s sources into a professional, podcast-style audio discussion.
video_overview_create Generate a structured video explainer based on your project data.
report_create Create professional Briefing Docs, Study Guides, or Blog Posts tailored to your sources.
slide_deck_create Turn your research into a presenter-ready slide deck automatically.
infographic_create Visualize complex data and relationships with an AI-generated infographic.
flashcards_create Generate interactive study flashcards to master your notebook’s content.
quiz_create Create a comprehensive quiz to test knowledge grounded in your provided sources.
studio_status Check the generation status of your Studio artifacts and get download links.

🔑 Authentication Helpers

Tool Description
auth_refresh Manually trigger a session refresh if you encounter connection issues.
auth_save_tokens Manually save cookie data (legacy fallback method).

🎛 CLI Reference

notebooklm-mcp serve [--query-timeout ] [--debug]
notebooklm-mcp auth  [--manual] [--file ] [--show-tokens]
notebooklm-mcp --version
Flag Default Description
serve --query-timeout 120000 Per-RPC timeout in ms. Bump for large studio jobs or slow research.
serve --debug off Verbose stderr logging of every RPC + retry.
auth --manual off Skip Chrome automation; paste cookies yourself.
auth --file — Import a previously exported tokens JSON.
auth --show-tokens — Print the cached session’s metadata (cookie names, age, CSRF/SID presence — never the secret values).

🩹 Troubleshooting

Symptom Likely cause Fix
“Could not find Google Chrome or Chromium” No Chrome/Chromium on PATH Install Chrome or run notebooklm-mcp auth --manual
“Authentication expired” inside the AI session Cookies stale The server auto-refreshes once; if it can’t, re-run notebooklm-mcp auth
“NotebookLM redirected to … (Google sign-in)” or “page has no CSRF token” Google session signed out Re-run notebooklm-mcp auth. The server does not open a browser on its own for this
HTTP 401 with valid cookies (v0.3.1 and older) NotebookLM moved to notebook.google.com Upgrade to the latest version
research_import says “Imported X of Y” with X < Y NotebookLM could not fetch some URLs Retry, or pick other results. Drive results are skipped; only web results import
Tool calls hang past 2 min Big studio job over default timeout Restart server with --query-timeout 300000
“file_path … outside the allowed roots” source_add_text got a path outside cwd / tmp Copy the file into your working directory or pass content inline
MCP client reports server crashed on startup dist/cli.js missing (dev clone) pnpm install && pnpm run build
Multiple Chrome windows pop up on concurrent failures Older version without single-flight mutex Upgrade to ≥ v0.2.5

💡 Pro Tips

  • Custom Timeouts: Working with massive sources? Increase the timeout: notebooklm-mcp serve --query-timeout 180000
  • Check Connections: Use notebooklm-mcp auth --show-tokens to verify your session validity without exposing the secrets.
  • CI / headless: Set NOTEBOOKLM_COOKIES (plus NOTEBOOKLM_CSRF_TOKEN, NOTEBOOKLM_SESSION_ID) to skip the browser flow entirely.

🛡 Security & Privacy

  • Local Storage with hardened perms. Tokens live at ~/.notebooklm-mcp/auth.json (mode 0600) inside ~/.notebooklm-mcp/ (mode 0700). Nothing leaves your machine except calls to Google.
  • Path-traversal guard. source_add_text rejects file_path arguments outside the working directory or the OS temp directory — a hostile MCP prompt cannot ask the server to read your ~/.ssh/id_rsa.
  • Loopback-only Chrome DevTools. The automated auth flow launches Chrome with an OS-assigned ephemeral port bound to 127.0.0.1 — no fixed-port squatting, no LAN exposure.
  • Single-flight auth refresh. Concurrent requests that hit an expired session share one refresh promise instead of each spawning their own Chrome.
  • Supply-chain gated releases. Every publish runs gitleaks → osv-scanner → pnpm audit (high+) → npm audit signatures (Sigstore) → lockfile registry pinning → publish-manifest preview before pnpm publish ships via OIDC trusted publishers. See CONTRIBUTING.md → Releasing on GitHub.
  • Test coverage: 100% statements / branches / functions / lines, enforced by CI.
  • Unofficial Tool: This project is an independent community effort and is not affiliated with Google. It interfaces with internal endpoints and may be affected by changes to the NotebookLM web platform.

📄 License

Open-source and available under the MIT License.


Crafted with precision for the AI-first developer. Part of the Model Context Protocol ecosystem.

View this README on GitHub

Install

npx -y @m4ykeldev/notebooklm-mcp serve

Configuration

{ "mcpServers": { "notebooklm": { "command": "npx", "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"] } } }