Skip to main content
Glama

nblm-mcp

An MCP server that gives an AI agent access to Google NotebookLM (rebranded Gemini Notebook in July 2026): list and create notebooks, manage their sources, ask questions that are answered from those sources with citations, and generate Studio artifacts like audio overviews, briefing docs, quizzes and mind maps.

The point is grounding. NotebookLM answers only from the material you gave it, so an agent that can call ask gets cited answers out of your own documents instead of guessing — and it costs no tokens of your own context, because Gemini does the reading server-side.

⚠️ Unofficial — read this first

Google has no public consumer API for NotebookLM. This server drives the same private web endpoints the notebooklm.google.com UI calls, authenticated with your own browser session cookies, via the MIT-licensed notebooklm-py library.

  • Not affiliated with or endorsed by Google.

  • The internal API can change without notice and break this server.

  • Your Google account's rate limits and daily Studio quotas apply.

  • Use an account you are comfortable automating. Best for personal projects, research, and prototypes.

Google does document an official API for Gemini Notebook Enterprise. If you have a Workspace/Cloud org with that feature, prefer it over this.

Install

Not on PyPI yet — install straight from this repository. uvx builds and runs it on demand, so there is nothing to keep updated by hand:

uvx --from git+https://github.com/Diego-Dev-Moros/nblm-mcp nblm-mcp

Related MCP server: notebooklm-mcp-server

Log in once

Login needs the auth extra (Playwright) and a human at the keyboard:

uvx --from "nblm-mcp[auth] @ git+https://github.com/Diego-Dev-Moros/nblm-mcp" nblm-mcp-login

A browser window opens; sign in to NotebookLM as you normally would. The session cookies are stored under ~/.notebooklm/ (the same profile layout notebooklm-py uses, so an existing notebooklm login also works). The MCP server never logs in on its own — it needs an interactive browser, which an MCP host cannot provide.

If Playwright has no browser yet, run playwright install chromium first.

Cookies expire. When they do, tools start returning an auth error; run the login command again.

Connect it to a client

Claude Code — -s user makes it available in every project:

claude mcp add notebooklm -s user -- \
  uvx --from git+https://github.com/Diego-Dev-Moros/nblm-mcp nblm-mcp

Claude Desktop — add this to claude_desktop_config.json and restart the app (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\, Linux: ~/.config/Claude/):

{
  "mcpServers": {
    "notebooklm": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/Diego-Dev-Moros/nblm-mcp", "nblm-mcp"]
    }
  }
}

Claude Desktop launches from the GUI, which does not inherit your shell's PATH. If the server fails to start there, replace "uvx" with its absolute path (which uvx, typically ~/.local/bin/uvx).

Either way, confirm it works by asking the agent to call auth_status.

Tools

Tool

What it does

auth_status

Verifies the stored session with a real request; tells you if you need to log in again.

list_notebooks

All notebooks the account can reach, with ids and source counts.

get_notebook

One notebook plus its sources; optionally NotebookLM's own summary.

create_notebook

Creates an empty notebook.

delete_notebook

Deletes a notebook and everything in it. Requires confirm=true.

list_sources

Sources in a notebook and their processing status.

add_source

Adds one source from a URL (web, YouTube, Drive), pasted text, or a local file.

delete_source

Removes a source. Requires confirm=true.

ask

Asks the notebook a question; returns the answer plus citations resolved to source titles.

chat_history

Past question/answer turns for the notebook's conversation.

list_artifacts

Generated Studio artifacts and their status — also how you poll a running generation.

generate_artifact

Generates audio, video, report, study_guide, quiz, flashcards, infographic, slide_deck, or mind_map.

download_artifact

Downloads a completed artifact to a file on the machine running the server.

Notes on behavior

  • Destructive tools are gated. delete_notebook and delete_source refuse to run without confirm=true, so a stray tool call can't destroy a notebook.

  • Generation is slow and quota-bound. generate_artifact returns as soon as the job is queued (wait=false, the default) and tells the agent to poll list_artifacts. Pass wait=true to block instead; it waits up to NBLM_GENERATION_TIMEOUT seconds.

  • File paths are server-side. add_source(file_path=...) and download_artifact read and write on the host running the MCP server, which is not necessarily where the user's chat client runs.

Configuration

All optional — see .env.example. A .env in the working directory is loaded if present.

Variable

Default

Purpose

NOTEBOOKLM_PROFILE

active profile

Which stored login to use, for multiple Google accounts.

NOTEBOOKLM_STORAGE_PATH

resolved from profile

Explicit path to a storage_state.json.

NBLM_DOWNLOAD_DIR

~/.nblm-mcp/downloads

Where download_artifact writes by default.

NBLM_GENERATION_TIMEOUT

600

Seconds to wait for an artifact when wait=true.

NBLM_SOURCE_TIMEOUT

180

Seconds to wait for a new source to finish processing.

Development

uv venv && uv pip install -e ".[dev]"
uv run pytest
uv run ruff check src tests

The test suite runs the tools against an in-memory fake client — it never touches Google, so it is safe and fast to run anywhere.

Prior art

notebooklm-py does the hard part — reverse-engineering and maintaining the private batchexecute protocol — and ships its own, larger MCP server. This project is a smaller, opinionated tool surface on top of that library: fewer tools, confirmation gates on destructive operations, and citation-resolved answers.

License

MIT — see LICENSE.

Available Tools

13 tools
add_sourceA

Add one source to a notebook, from a URL, pasted text, or a local file.

Pass exactly one of url, text, or file_path.

NameRequiredDescriptionDefault
urlNoWeb page, YouTube video, or Google Docs/Slides link to ingest.
textNoRaw text to paste as a source. Requires `title`.
waitNoBlock until the source finishes processing so it is usable immediately. Turn off for bulk imports and poll list_sources.
titleNoDisplay title. Required for `text`, optional otherwise.
file_pathNoAbsolute path to a local file (PDF, txt, md, audio...). Read from the machine running this server, not the user's client.
notebook_idYesNotebook to add the source to.

Output Schema

NameRequiredDescription

No output parameters

askA

Ask a notebook a question and get an answer grounded in its sources.

The answer comes from Gemini reading the notebook's own sources, with citations back to them — use this instead of summarizing the sources yourself when a notebook already holds the material.

NameRequiredDescriptionDefault
questionYesNatural-language question. Specific questions cite better than broad ones.
source_idsNoRestrict the answer to these sources. Omit to use all.
notebook_idYesThe notebook to query.
conversation_idNoContinue a specific conversation. Omit to continue the notebook's current one, matching the web UI.

Output Schema

NameRequiredDescription

No output parameters

auth_statusA

Check whether this server has a working NotebookLM session.

Call this first when any other tool reports an auth problem. It performs a real (cheap) request, so it distinguishes "no cookies stored" from "cookies stored but expired".

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

chat_historyB

Read past question/answer turns for a notebook's current conversation.

NameRequiredDescriptionDefault
limitNoMaximum number of turns to return, newest conversation first.
notebook_idYesThe notebook whose conversation to read.

Output Schema

NameRequiredDescription

No output parameters

create_notebookA

Create an empty notebook.

A notebook with no sources cannot answer questions — follow up with add_source before calling ask.

NameRequiredDescriptionDefault
titleYesDisplay title for the new notebook.

Output Schema

NameRequiredDescription

No output parameters

delete_notebookA

Permanently delete a notebook and everything in it.

This cannot be undone and deletes the notebook's sources, chats, and generated artifacts along with it.

NameRequiredDescriptionDefault
confirmNoMust be true. The guard exists so a mistaken tool call cannot destroy a notebook; ask the user before setting it.
notebook_idYesThe notebook to delete.

Output Schema

NameRequiredDescription

No output parameters

delete_sourceC

Remove a source from a notebook.

NameRequiredDescriptionDefault
confirmNoMust be true. Removing a source also drops the citations that point at it, so ask the user first.
source_idYesThe source to remove, from list_sources.
notebook_idYesThe notebook holding the source.

Output Schema

NameRequiredDescription

No output parameters

download_artifactB

Download a completed Studio artifact to a file on the server host.

NameRequiredDescriptionDefault
artifact_idYesThe artifact to download, from list_artifacts.
notebook_idYesThe notebook holding the artifact.
output_pathNoDestination path. A bare filename lands in the configured download directory; omit it to name the file after the artifact.

Output Schema

NameRequiredDescription

No output parameters

generate_artifactA

Generate a Studio artifact (podcast, report, quiz, mind map...).

Generation runs server-side and is slow — an audio overview commonly takes several minutes — and it consumes the account's daily Studio quota. Prefer the default wait=false and poll with list_artifacts.

NameRequiredDescriptionDefault
kindYesOne of audio, video, report, study_guide, quiz, flashcards, infographic, slide_deck, mind_map.
waitNoBlock until the artifact is ready (or the configured timeout elapses) instead of returning as soon as it is queued.
languageNoBCP-47 language code for the output, e.g. "en", "es".en
quantityNoquiz/flashcards only — fewer, standard, or more.
difficultyNoquiz/flashcards only — easy, medium, or hard.
source_idsNoRestrict generation to these sources. Omit to use all.
notebook_idYesNotebook whose sources feed the generation.
audio_formatNoaudio only — deep_dive, brief, critique, or debate.
audio_lengthNoaudio only — short, default, or long.
instructionsNoFree-text steer for the output ("focus on the pricing section", "explain it for beginners").
report_formatNoreport only — briefing_doc, study_guide, or blog_post.

Output Schema

NameRequiredDescription

No output parameters

get_notebookC

Get one notebook with its sources.

NameRequiredDescriptionDefault
notebook_idYesThe notebook id, as returned by list_notebooks.
include_summaryNoAlso fetch NotebookLM's own generated summary of the notebook. Costs an extra round-trip and can be slow on large notebooks, so it is off by default.

Output Schema

NameRequiredDescription

No output parameters

list_artifactsA

List generated Studio artifacts in a notebook.

Use this to poll a generation started with wait=false: the artifact reports status: completed when it is ready to download.

NameRequiredDescriptionDefault
kindNoFilter by type — audio, video, report, quiz, flashcards, mind_map, infographic, slide_deck, or data_table.
notebook_idYesThe notebook to inspect.

Output Schema

NameRequiredDescription

No output parameters

list_notebooksA

List the notebooks reachable by the signed-in Google account.

Returns id, title, and source count for each. Use the ids with every other tool — NotebookLM has no lookup by title.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

list_sourcesB

List the sources in a notebook, with their processing status.

A source that is not ready is still being ingested and will not ground answers yet.

NameRequiredDescriptionDefault
notebook_idYes

Output Schema

NameRequiredDescription

No output parameters

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv0.1.0
    • First observedadd_source
    • First observedask
    • First observedauth_status
    • First observedchat_history
    • First observedcreate_notebook
    • First observeddelete_notebook
    • First observeddelete_source
    • First observeddownload_artifact
    • First observedgenerate_artifact
    • First observedget_notebook
    • First observedlist_artifacts
    • First observedlist_notebooks
    • First observedlist_sources

TDQS

A3.7/5.0

Scored across 13 tools

Disambiguation4/5

Most tools target a distinct resource+action (notebook CRUD, source add/delete/list, artifact generate/list/download, ask, auth). Minor overlap between get_notebook (returns notebook with sources) and list_sources (sources with processing status), but descriptions clarify the difference.

Naming Consistency4/5

Strong verb_noun pattern for most tools (add_source, list_notebooks, create_notebook, list_artifacts, generate_artifact, download_artifact). A few deviations—ask (bare verb), chat_history and auth_status (noun phrases)—but overall readable and predictable.

Tool Count5/5

13 tools is well-scoped for the NotebookLM domain, cleanly grouped into notebooks, sources, artifacts, and query/auth concerns. Each tool earns its place with no filler.

Completeness4/5

Good CRUD/lifecycle coverage: notebook create/get/list/delete, source add/delete/list, artifact generate/list/download, plus ask, chat_history, and auth_status. Minor gaps like notebook rename/update and source update, but core workflows are covered.

Maintenance

ActivityInactive
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers