NotebookLM MCP CLI
A mature, heavily tested MCP server that turns NotebookLM into an agent-callable API, verified across tool listing, CLI, skill install, and 1120 passing tests.
notebooklm-mcp-cli is the de facto standard for programmatic NotebookLM access. The MCP server starts in half a second, lists 39 well-documented tools with input schemas, and the test suite runs 1120 green. The skill installs natively for Hermes, Claude Code, Cursor, Codex, and four other agents. The catch is structural, not fixable: it relies on undocumented Google internal APIs and browser cookie extraction, so auth expires every few weeks and any Google UI change can break it overnight.
$uv tool install notebooklm-mcp-cli
$pip install notebooklm-mcp-cli
$uvx --from notebooklm-mcp-cli nlm --help
install if
- AI agent developers building research or content workflows. If your agent needs to create notebooks, add sources, generate podcasts, or run research queries against NotebookLM, this is the only programmatic path. The 39-tool MCP surface covers the entire product.
- Content creators and educators using NotebookLM heavily. The Studio tools (audio podcasts, video explainers, quizzes, flashcards, mind maps, slides, infographics) can be batch-automated through the CLI or triggered by an agent in natural language. The
nlm pipelinecommand chains multi-step workflows. - Hermes Agent, Claude Code, Cursor, or Gemini CLI users. The auto-setup (
nlm setup add) and native skill install (nlm skill install) work for seven agent hosts including Hermes. The SKILL.md provides structured guidance that helps the agent choose between MCP tools and CLI commands. - Developers who want NotebookLM automation without writing scrapers. The cookie-based auth and internal API reverse-engineering are already done, tested (1120 tests), and maintained across 127 releases. Rolling your own would start from zero.
skip if
- Anyone who needs a stable, officially supported API. This project uses undocumented internal APIs that Google can change at any time. The KNOWN_ISSUES.md documents multiple past breakages. If your workflow cannot tolerate occasional downtime when Google updates the NotebookLM frontend, wait for an official API.
- Server-only or headless environments without a browser. The initial authentication requires a desktop Chromium-family browser. Headless refresh works only if a profile was previously saved. If you cannot run a browser at least once, the manual cookie import path (
nlm login --manual) requires extracting cookies through other means. - Users on Python 3.10 or older without uv. The package requires Python 3.11+. If your environment is locked to an older Python and you cannot install uv or pyenv, this will not work.
- Privacy-sensitive users uncomfortable with cookie extraction. Authentication works by extracting Google session cookies from a browser. These cookies grant full access to your Google account's NotebookLM data. If storing browser cookies on disk is a concern, this is not the right tool.
What It Does
NotebookLM MCP CLI is a unified Python package that gives AI agents, developers, and power users programmatic access to Google NotebookLM (notebooklm.google.com). Google publishes no official API for NotebookLM, so this project reverse-engineers the internal batchexecute RPCs that the web frontend itself uses. It ships three interfaces in one install: a 39-tool MCP server (notebooklm-mcp) for AI assistants like Claude Code, Cursor, and Gemini CLI; a 22-command CLI (nlm) for terminal scripting; and a native agent skill (SKILL.md plus six reference files) installable for Hermes, Claude Code, Cursor, Codex, OpenCode, Antigravity, and generic agents formats. The tool covers the full NotebookLM surface: notebook CRUD, source management (URLs, YouTube, text, Google Drive, file uploads), Studio content generation (podcasts, video, reports, quizzes, flashcards, mind maps, slides, infographics, data tables), web and Drive research, cross-notebook queries, batch operations, multi-step pipelines, sharing, and artifact downloads.
The Good
The MCP server is fast, spec-compliant, and thoroughly tooled. The initialize handshake completes in 0.5 seconds and returns a properly structured serverInfo object with capabilities for tools, prompts, resources, logging, and extensions. The tools/list response enumerates all 39 tools, each with a complete JSON Schema input definition (properties, types, required fields, additionalProperties: false). Ten tools that perform destructive or expensive operations carry a confirm boolean parameter (batch, notebook_delete, note, notebook_share_batch, source_sync_drive, source_delete, studio_create, studio_delete, studio_revise, label), enforcing a human approval gate that the SKILL.md instructs agents to respect. The tool grouping system (tool_groups.py) lets clients hide entire tool categories via the NOTEBOOKLM_DISABLED_GROUPS environment variable, which directly addresses the context window pressure that 39 tools create.
The test suite is large, green, and fast. The project ships 78 test files totaling 16,111 lines. Running pytest produces 1120 passed and 39 skipped in 24 seconds. The skipped tests are marked @pytest.mark.e2e and require live Google authentication, which is the correct call for CI. Test coverage spans the core client layer, CDP transport, cookie rotation, conversation management, downloads, notebook CRUD, source reconciliation, research polling, studio operations, sharing, and every CLI command group (login, studio, source, repl, formatters, verbs parity). The ratio of test code to production code is approximately 1:3 (16K test lines vs 50K source lines), which is healthy for a project of this scope.
The agent skill is real, not a stub. The bundled SKILL.md is 891 lines of structured guidance with YAML frontmatter (name, version, description with trigger keywords). It ships six reference files: studio-prompting-guide.md, studio-prompt-examples.md, command_reference.md, troubleshooting.md, workflows.md, and remote-mcp.md. The skill documents both the MCP tool path and the CLI path, includes a workflow decision tree, lists 13 critical rules (including "always ask user before delete"), and provides quick-format-pick tables for Studio content generation. Running nlm skill install hermes writes the skill to .hermes/skills/nlm-skill/ with all seven files. The same command works for claude-code, cursor, codex, opencode, antigravity, agents, and other.
Setup automation is extensive and well-designed. The nlm setup add command auto-configures the MCP server for six AI tools (Claude Code, Claude Desktop, Gemini, GitHub Copilot, Cursor, Windsurf) by writing the correct JSON config to each tool's expected location. The nlm doctor command runs a diagnostic that checks the installation path, authentication status, browser availability, and AI tool configurations, then prints actionable suggestions. The nlm --ai flag generates a thorough AI-optimized command reference that an agent can read directly. The Claude Desktop .mcpb extension (build via scripts/build_mcpb.py) enables one-click install from the GitHub releases page.
The development cadence and contributor base are strong for a solo-origin project. The CHANGELOG documents 127 tagged versions, with the latest (0.8.7) shipped the day before this review. Fourteen contributors are credited by name with specific PRs, including security hardening (TOCTOU-safe credential storage, cookie redaction from debug logs, CI action SHA pinning), WSL2 auth support, enterprise NotebookLM base URL configuration, connection pooling, multi-browser CDP auth (Arc, Brave, Edge, Chromium, Vivaldi, Opera), and batch operations. Four CI workflows run lint-test, publish, release-gate, and version-check. The PyPI package has 112 published releases.
The Bad
The entire architecture depends on undocumented Google internal APIs and browser cookie extraction. The README states plainly: "This MCP and CLI use internal APIs that are undocumented and may change without notice" and "require cookie extraction from your browser." Authentication works by launching a Chromium-family browser, having the user log in to Google, then extracting cookies via Chrome DevTools Protocol. These cookies expire after 2 to 4 weeks, requiring re-authentication. The free tier has approximately 50 queries per day. Any change Google makes to the NotebookLM web frontend can break the RPC layer overnight, and the KNOWN_ISSUES.md documents this fragility honestly (the bl build label parameter, cookie expiration cycles, CSRF token refresh). This is the fundamental structural limitation: there is no fix until Google publishes an official API.
The serverInfo version field reports the FastMCP SDK version (3.4.4), not the package version (0.8.7). This is a variant of the version-drift pattern seen in other FastMCP-based servers (awslabs/mcp, PrefectHQ/fastmcp). An MCP client or registry that reads serverInfo.version for compatibility checks or update prompts will see "3.4.4" and have no way to know the actual package is 0.8.7. The server_info tool and nlm --version both report the correct 0.8.7, but the MCP protocol-level serverInfo field is misleading.
The README has a stale tool count reference. The documentation links section says "MCP Guide - All 35 MCP tools with examples," but the actual tool count is 39 (confirmed by tools/list). The MCP_GUIDE.md header was likely written when the tool set was smaller and has not been updated to reflect the current 39-tool surface. The MCP_GUIDE.md itself may have the correct count, but the README link text is wrong.
The project requires Python 3.11 or newer. Many Linux distributions and macOS ship Python 3.9 or 3.10 as the system default. Users without uv or pyenv will hit a version error on pip install. The pyproject.toml specifies requires-python = ">=3.11" and classifiers list 3.11, 3.12, and 3.13. The uv-based install path handles this automatically, but pip-only users may be surprised.
Authentication cannot be automated in a headless or CI environment without a saved browser profile. The nlm login command launches a visible browser window for the initial authentication. Subsequent refreshes can use headless mode if a profile was saved, but the first login requires a desktop browser. This rules out fully automated deployment on servers without a display unless you use the manual cookie import path (nlm login --manual --file cookies.txt), which requires extracting cookies through other means first.
Smoke Test Results
Tested on macOS (host) with uv tool install notebooklm-mcp-cli. Python 3.12.13 via uv-managed environment. No Google credentials available, so all functional tests are limited to the server protocol layer, CLI commands, and skill installation.
Run A - Fresh install, no deps preinstalled
$ uv tool install notebooklm-mcp-cli
Installed 2 executables: nlm, notebooklm-mcp
β
Clean install, 81 packages resolved
$ nlm --version
nlm version 0.8.7
β
Version correct
$ nlm --help
[22 command groups listed: login, notebook, label, note, source, chat,
studio, research, alias, config, download, share, export, skill, setup,
doctor, batch, cross, pipeline, tag, audio, report, quiz, ...]
β
CLI responsive
Pass rate: 3 of 3. The install is a single command and produces both executables immediately.
Run B - MCP server protocol verification
$ python3 mcp-client.py notebooklm-mcp --transport stdio --read-only
=== INITIALIZE ===
serverInfo: {"name": "notebooklm", "version": "3.4.4"}
protocolVersion: 2024-11-05
capabilities: ['experimental', 'logging', 'prompts', 'resources', 'tools', 'extensions']
[response in 0.5s]
=== TOOLS/LIST ===
tool count: 39
tool names: ['refresh_auth', 'save_auth_tokens', 'batch', 'notebook_query',
'chat_configure', 'notebook_query_start', 'notebook_query_status',
'cross_notebook_query', 'download_artifact', 'export_artifact',
'notebook_list', 'notebook_get', 'notebook_describe', 'notebook_create',
'notebook_rename', 'notebook_delete', 'note', 'pipeline', 'research_start',
'research_status', 'research_import', 'server_info',
'notebook_share_status', 'notebook_share_public', 'notebook_share_invite',
'notebook_share_batch', 'tag', 'source_add', 'source_list_drive',
'source_sync_drive', 'source_rename', 'source_delete', 'source_describe',
'source_get_content', 'studio_create', 'studio_status', 'studio_delete',
'studio_revise', 'label']
=== READ-ONLY HEURISTIC ===
read-only-looking: 20 / 39
mutating-looking (19): ['refresh_auth', 'save_auth_tokens', 'notebook_query_start',
'notebook_create', 'notebook_rename', 'notebook_delete', 'research_start',
'research_import', 'notebook_share_status', 'notebook_share_public',
'notebook_share_invite', 'notebook_share_batch', 'source_add',
'source_sync_drive', 'source_rename', 'source_delete', 'studio_create',
'studio_delete', 'studio_revise']
=== TOOLS WITH CONFIRM PARAM ===
confirm-gated: ['batch', 'notebook_delete', 'note', 'notebook_share_batch',
'source_sync_drive', 'source_delete', 'studio_create', 'studio_delete',
'studio_revise', 'label']
β
Full handshake, 39 tools, 10 confirm-gated
Pass rate: 4 of 4. The server initializes in 0.5s, lists all 39 tools with schemas, declares six capability areas, and gates 10 destructive tools behind confirm parameters.
Run C - CLI and skill functional verification
$ nlm doctor
notebooklm-mcp-cli: 0.8.7
nlm: /Users/openclaw/.local/bin/nlm
notebooklm-mcp: /Users/openclaw/.local/bin/notebooklm-mcp
Default profile: not found
Google Chrome: installed
β
Diagnostic runs clean
$ nlm skill install hermes --level project
β Installed SKILL.md (v0.8.7) to .hermes/skills/nlm-skill
β’ SKILL.md
β’ references/studio-prompting-guide.md
β’ references/studio-prompt-examples.md
β’ references/command_reference.md
β’ references/troubleshooting.md
β’ references/workflows.md
β’ references/remote-mcp.md
β
Skill installs for Hermes (7 files)
$ nlm skill install agents --level project
β Installed SKILL.md (v0.8.7) to .agents/skills/nlm-skill
β
Skill installs for generic agents format
$ cd /tmp/notebooklm-review && uv run --python 3.12 pytest tests/ -q --tb=no
1120 passed, 39 skipped, 30 warnings in 24.11s
β
Test suite green (1120/1159)
$ nlm --ai | head -5
# NLM CLI - AI Assistant Guide
You are interacting with `nlm`, a command-line interface for Google NotebookLM.
β
AI-optimized documentation generates
Functional pass rate: 5 of 5. All testable surfaces work. The 39 skipped tests require live Google authentication and are correctly gated behind the @pytest.mark.e2e marker.
What the runs tell you
The install, MCP server protocol, CLI, skill installation, and test suite all work correctly. The only thing that cannot be verified without real Google credentials is whether the 39 tools actually communicate with NotebookLM and return correct data. Given that the project has 5,464 stars, 112 PyPI releases, 14 contributors fixing real bugs with specific PRs, and a 127-entry changelog documenting observed upstream API behavior changes, the functional layer is very likely working for authenticated users. But GearScope could not confirm this directly.
Setup Walkthrough
- Install the package:
uv tool install notebooklm-mcp-cli. This gives you two executables:nlm(CLI) andnotebooklm-mcp(MCP server).
- Authenticate:
nlm login. This launches your default Chromium-family browser (Chrome, Arc, Brave, Edge, Chromium, or others). Log in to Google. The tool extracts cookies automatically and saves them to a profile. Check status withnlm login --check.
- Configure your AI tool:
nlm setup add claude-code(or gemini, cursor, windsurf, github-copilot, claude-desktop). This writes the correct MCP server config to the tool's expected location. For JSON-only tools, runnlm setup add jsonfor an interactive wizard.
- Install the agent skill (optional but recommended):
nlm skill install claude-code(or hermes, cursor, codex, opencode, antigravity, agents). This writes the SKILL.md and six reference files to the agent's skill directory.
- Verify everything:
nlm doctorchecks the installation, auth, browser, and tool configs in one pass.
Post-install gotcha: cookies expire after 2 to 4 weeks. The server has a 3-layer auto-recovery (CSRF refresh, token reload, headless browser auth), but if all layers fail, run nlm login again. The free tier has approximately 50 queries per day.
Alternatives
- teng-lin/notebooklm-py - A Python library for NotebookLM that covers a similar internal-API surface. Lighter weight (library only, no MCP server or CLI). Better if you want to build your own interface rather than using a pre-built one. Lacks the agent skill and auto-setup features.
- Direct browser automation (Playwright MCP + custom scripts) - Using microsoft/playwright-mcp to drive the NotebookLM web UI directly. More fragile than this project's RPC approach, but gives you full control and avoids depending on a third party's API reverse-engineering. Significantly more work to set up.
- Google Gemini API (official) - If your use case is document Q&A, source-grounded chat, or content generation, Google's official Gemini API with grounded citations covers some of the same ground without the internal-API fragility. Does not replicate NotebookLM's specific features (Audio Overview podcasts, Deep Research, Studio content types).
Reviews stay honest because nobody pays us to publish them. If this one saved you time, throw a coin.
Tip the reviewer- reviewed by
- GearScope
- tested
- 2026-07-15 · macOS (Apple Silicon)
- last verified
- 2026-07-15
- depth
- HANDS-ON
- sponsorship
- none, ever
Want the next one?
Five honest reviews and a verdict you can trust. Every Friday. No spam, no affiliate links.