# Notebooklm Mcp

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

- **Type:** MCP server
- **Install:** `agentstack add mcp-m4yk3ldev-notebooklm-mcp`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [m4yk3ldev](https://agentstack.voostack.com/s/m4yk3ldev)
- **Installs:** 0
- **Category:** [Integrations](https://agentstack.voostack.com/c/integrations)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [m4yk3ldev](https://github.com/m4yk3ldev)
- **Source:** https://github.com/m4yk3ldev/notebooklm-mcp
- **Website:** https://github.com/m4yk3ldev/notebooklm-mcp#readme

## Install

```sh
agentstack add mcp-m4yk3ldev-notebooklm-mcp
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# 🧠 NotebookLM MCP Server

### Bridge the Gap Between Google NotebookLM and Your AI Workspace

[](https://www.npmjs.com/package/@m4ykeldev/notebooklm-mcp)
[](https://opensource.org/licenses/MIT)
[](https://github.com/m4yk3ldev/notebooklm-mcp/actions)

Stop jumping between browser tabs. **NotebookLM MCP** brings the full analytical power of [Google NotebookLM](https://notebooklm.google.com) 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](https://modelcontextprotocol.io) 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 32 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

Run it instantly with `npx`:

```bash
npx -y @m4ykeldev/notebooklm-mcp serve
```

Or install globally for better performance:

```bash
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](https://github.com/m4yk3ldev/notebooklm-mcp/blob/main/CONTRIBUTING.md)
> 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.

```bash
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:

```bash
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) | `claude_desktop_config.json` | JSON |
| [Claude Code (CLI)](#claude-code-cli) | `~/.claude.json` or `claude mcp add` | JSON / CLI |
| [Codex CLI](#codex-cli) | `~/.codex/config.toml` | TOML |
| [OpenAI Agents SDK (Python)](#openai-agents-sdk--python) | in-code | Python |
| [OpenAI Agents SDK (TypeScript)](#openai-agents-sdk--typescript) | in-code | TypeScript |
| [Gemini CLI](#gemini-cli) | `~/.gemini/settings.json` | JSON |
| [Cursor](#cursor) | `~/.cursor/mcp.json` | JSON |
| [VS Code (Copilot Chat agent mode)](#vs-code-copilot-chat-agent-mode) | `.vscode/mcp.json` | JSON |
| [Windsurf](#windsurf) | `~/.codeium/windsurf/mcp_config.json` | JSON |
| [JetBrains AI Assistant / Junie](#jetbrains-ai-assistant--junie) | `~/.junie/mcp/mcp.json` | JSON |
| [Zed](#zed) | `~/.config/zed/settings.json` | JSON |
| [OpenCode (sst)](#opencode-sst) | `opencode.jsonc` | JSONC |
| [Cline (VS Code extension)](#cline-vs-code-extension) | extension settings UI | JSON |
| [Goose (Block)](#goose-block) | `~/.config/goose/config.yaml` | YAML |
| [5ire](#5ire) | in-app settings | GUI |
| [Aider](#aider) | not yet supported | — |
| [Generic stdio caller](#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`

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

With timeout + env override

```json
{
  "mcpServers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve", "--query-timeout", "180000", "--debug"],
      "env": {
        "NOTEBOOKLM_COOKIES": "SID=...; HSID=...; SSID=...; APISID=...; SAPISID=..."
      }
    }
  }
}
```

**Verify:** restart Claude Desktop, click the hammer icon at the bottom-right of the input. **Gotchas:** absolute paths only; relative paths fail silently on startup.

---

### Claude Code (CLI)

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

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

Equivalent JSON (project scope, ./.mcp.json)

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

With timeout + env override (CLI)

```bash
claude mcp add --transport stdio \
  --env NOTEBOOKLM_COOKIES="SID=...; HSID=...; SSID=...; APISID=...; SAPISID=..." \
  notebooklm -- npx -y @m4ykeldev/notebooklm-mcp serve --query-timeout 180000
```

**Verify:** `claude mcp list && claude mcp get notebooklm`, or `/mcp` inside a session. **Gotchas:** all options before the server name; use `--` to separate options from the command. Project-scoped `.mcp.json` needs interactive approval on first sight.

---

### Codex CLI

- macOS: `~/.codex/config.toml`
- Linux: `~/.config/codex/config.toml`
- Windows: `%APPDATA%\codex\config.toml`

```toml
[mcp_servers.notebooklm]
command = "npx"
args = ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
```

With timeout + env override

```toml
[mcp_servers.notebooklm]
command = "npx"
args = ["-y", "@m4ykeldev/notebooklm-mcp", "serve", "--query-timeout", "180000"]
env = { NOTEBOOKLM_COOKIES = "SID=...; HSID=...; SSID=...; APISID=...; SAPISID=..." }
```

**Verify:** `codex --list-tools` should list the NotebookLM tools. **Gotchas:** Codex CLI's MCP schema is still being formalized — double-check against the latest `openai/codex` README.

---

### OpenAI Agents SDK — Python

Wire it in code (no config file):

```python
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])  # 32 tools
```

With timeout + env override

```python
async with MCPServerStdio(
    name="NotebookLM",
    params={
        "command": "npx",
        "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve", "--query-timeout", "180000"],
        "env": {"NOTEBOOKLM_COOKIES": "SID=...; HSID=...; SSID=...; APISID=...; SAPISID=..."},
    },
) as server:
    ...
```

---

### OpenAI Agents SDK — TypeScript

```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)); // 32 tools
```

With timeout + env override

```typescript
const server = new MCPServerStdio({
  command: "npx",
  args: ["-y", "@m4ykeldev/notebooklm-mcp", "serve", "--query-timeout", "180000"],
  env: { NOTEBOOKLM_COOKIES: "SID=...; HSID=...; SSID=...; APISID=...; SAPISID=..." },
});
```

---

### Gemini CLI

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

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

With timeout + env override (Gemini supports $VAR expansion)

```json
{
  "mcpServers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"],
      "timeout": 180000,
      "env": {
        "NOTEBOOKLM_COOKIES": "$NOTEBOOKLM_COOKIES"
      }
    }
  }
}
```

**Verify:** `gemini mcp list`, or `/mcp` in a session. **Gotchas:** undefined `$VAR` resolves to empty string — pre-export them in your shell.

---

### Cursor

- macOS / Linux: `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (per-project)
- Windows: `%APPDATA%\Cursor\mcp.json`

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

With timeout + env override

```json
{
  "mcpServers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve", "--query-timeout", "180000"],
      "env": {
        "NOTEBOOKLM_COOKIES": "SID=...; HSID=...; SSID=...; APISID=...; SAPISID=..."
      }
    }
  }
}
```

**Verify:** `Cursor Settings → MCP` should show `notebooklm` in green, or `MCP: View Server Status` in the Command Palette. **Gotchas:** Cursor only loads MCP servers at startup — fully quit and relaunch after edits. Soft ~40-tool ceiling across all enabled servers combined.

---

### VS Code (Copilot Chat agent mode)

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

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

With timeout + env override

```json
{
  "servers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve", "--query-timeout", "180000"],
      "env": {
        "NOTEBOOKLM_COOKIES": "SID=...; HSID=...; SSID=...; APISID=...; SAPISID=..."
      }
    }
  }
}
```

**Verify:** Command Palette → `MCP: Open User Configuration`. Ask Copilot Chat in **agent mode** to list NotebookLM notebooks.

---

### Windsurf

- macOS / Linux: `~/.codeium/windsurf/mcp_config.json`
- Windows: `%APPDATA%\Codeium\Windsurf\mcp_config.json`

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

With timeout + env override (uses Windsurf's ${env:VAR} interpolation)

```json
{
  "mcpServers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve", "--query-timeout", "180000"],
      "env": {
        "NOTEBOOKLM_COOKIES": "${env:NOTEBOOKLM_COOKIES}"
      }
    }
  }
}
```

**Verify:** open the Cascade sidebar → MCP settings → confirm `notebooklm` is active. **Gotchas:** prefer `${env:VAR}` / `${file:/path}` interpolation over inlining cookies; Windsurf substitutes at server-launch time so secrets stay out of the config file.

---

### 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`

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

With timeout + env override

```json
{
  "mcpServers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve", "--query-timeout", "180000"],
      "env": {
        "NOTEBOOKLM_COOKIES": "SID=...; HSID=...; SSID=...; APISID=...; SAPISID=..."
      }
    }
  }
}
```

**Verify:** `Settings (Ctrl+Alt+S) → Tools → Junie → MCP Settings` — `notebooklm` should appear in the discovered list.

---

### Zed

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

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

With timeout + env override

```json
{
  "context_servers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve", "--query-timeout", "180000"],
      "env": {
        "NOTEBOOKLM_COOKIES": "SID=...; HSID=...; SSID=...; APISID=...; SAPISID=..."
      }
    }
  }
}
```

**Verify:** Zed's AI Agent Panel lists `notebooklm` as an available context source.

---

### OpenCode (sst)

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

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

With timeout + env override

```jsonc
{
  "mcp": {
    "servers": {
      "notebooklm": {
        "command": "npx",
        "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve", "--query-timeout", "180000"],
        "env": {
          "NOTEBOOKLM_COOKIES": "SID=...; HSID=...; SSID=...; APISID=...; SAPISID=..."
        }
      }
    }
  }
}
```

**Verify:** start OpenCode and ask *"List my NotebookLM notebooks."* — the model should call `notebook_list`. **Gotchas:** OpenCode's MCP schema is still evolving; confirm against the [OpenCode docs](https://opencode.ai/docs) if startup fails.

---

### 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:

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

3. Save. Cline restarts the server automatically.

With timeout + env override

```json
{
  "mcpServers": {
    "notebooklm": {
      "command": "npx",
      "args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve", "--query-timeout", "180000"],
      "env": {
        "NOTEBOOKLM_COOKIES": "SID=...; HSID=...; SSID=...; APISID=...; SAPISID=..."
      }
    }
  }
}
```

**Verify:** ask Cline *"List my NotebookLM notebooks."* — the tool-call panel shows `notebook_list`.

---

### Goose (Block)

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

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

With timeout + env override

```yaml
extensions:
  notebooklm:
    type: stdio
    command: npx
    args:
      - "-y"
      - "@m4ykeldev/notebooklm-mcp"
      - serve
      - "--query-timeout"
      - "180000"
    env:
      NOTEBOOKLM_COOKIES: "SID=...; HSID=...; SSID=...; APISID=...; SAPISID=..."
```

**Verify:** `goose configure` → confirm the extension is enabled, then `goose session` and ask *"List my NotebookLM notebooks."*

---

### 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=...; SS

…

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [m4yk3ldev](https://github.com/m4yk3ldev)
- **Source:** [m4yk3ldev/notebooklm-mcp](https://github.com/m4yk3ldev/notebooklm-mcp)
- **License:** MIT
- **Homepage:** https://github.com/m4yk3ldev/notebooklm-mcp#readme

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** yes
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-m4yk3ldev-notebooklm-mcp
- Seller: https://agentstack.voostack.com/s/m4yk3ldev
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
