Install
$ agentstack add mcp-m4yk3ldev-notebooklm-mcp ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ● Shell / process execution Used
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →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 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 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:
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) | 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
{
"mcpServers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
}
}
}
With timeout + env override
{
"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):
claude mcp add --transport stdio notebooklm -- npx -y @m4ykeldev/notebooklm-mcp serve
Equivalent JSON (project scope, ./.mcp.json)
{
"mcpServers": {
"notebooklm": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
}
}
}
With timeout + env override (CLI)
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
[mcp_servers.notebooklm]
command = "npx"
args = ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
With timeout + env override
[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):
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
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
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
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).
{
"mcpServers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
}
}
}
With timeout + env override (Gemini supports $VAR expansion)
{
"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
{
"mcpServers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
}
}
}
With timeout + env override
{
"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).
{
"servers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
}
}
}
With timeout + env override
{
"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
{
"mcpServers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
}
}
}
With timeout + env override (uses Windsurf's ${env:VAR} interpolation)
{
"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
{
"mcpServers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
}
}
}
With timeout + env override
{
"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).
{
"context_servers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
}
}
}
With timeout + env override
{
"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.
{
"mcp": {
"servers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
}
}
}
}
With timeout + env override
{
"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 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.
- Open the Cline panel → click the MCP icon →
Configure MCP Servers. - Paste:
{
"mcpServers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@m4ykeldev/notebooklm-mcp", "serve"]
}
}
}
- Save. Cline restarts the server automatically.
With timeout + env override
{
"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".
extensions:
notebooklm:
type: stdio
command: npx
args:
- "-y"
- "@m4ykeldev/notebooklm-mcp"
- serve
With timeout + env override
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):
- Open 5ire →
Settings(Mod+K→Providers). - Click Add MCP Server.
- Name:
notebooklm - Type:
Stdio - Command:
npx - Args:
-y @m4ykeldev/notebooklm-mcp serve(add--query-timeout 180000if needed) - 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
- Source: m4yk3ldev/notebooklm-mcp
- License: MIT
- Homepage: https://github.com/m4yk3ldev/notebooklm-mcp#readme
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.