notebooklm-mcp

notebooklm-mcp

An unofficial MCP server for Google NotebookLM that enables users to manage notebooks, add sources, ask questions with citations, and generate audio podcasts via a Playwright-based automation layer.

Category
Visit Server

README

notebooklm-mcp

An unofficial NotebookLM MCP server and CLI — inspired by jacob-bd/notebooklm-mcp-cli.

⚠️ NotebookLM has no public API. This project talks to NotebookLM's internal batchexecute / GenerateFreeFormStreamed RPCs through a Playwright persistent-context session. It is not affiliated with Google.

What works today

Tool Status Notes
notebook_list Returns "mine" + "shared" notebooks. Pagination for many owned notebooks not yet discovered (shows most-recent owned).
notebook_create Untitled empty notebook.
notebook_delete Permanent, no undo.
notebook_query Streams the answer with inline [1][2] citations.
source_add ⚠️ kind="text" and kind="url" work. drive / file stubs.
research_start NotebookLM Discover → returns candidate URLs (does not auto-import).
research_and_ask One-shot: create → research → import → ask N questions → (optional) delete.
studio_create ⚠️ artifact="audio" (podcast) works. video / slides / mindmap / etc. stubs.
download_artifact Saves completed audio as .m4a.
refresh_auth Checks whether the stored Google session is still live.

Stubs (raise NotImplementedError): notebook_share_public, notebook_share_invite, source_sync_drive, source_get_content, studio_revise, cross_notebook_query, batch, pipeline, tag.

End-to-end workflow this supports

Manual orchestration:

notebook_create()              → empty notebook
research_start(nid, topic)     → ~10 candidate URLs
source_add(nid, kind="url")×N  → import the ones you want
notebook_query(nid, question)  → grounded answer with citations
studio_create(nid, "audio")    → start podcast generation (2-5 min)
download_artifact(nid)         → .m4a file on disk

Or, in a single call:

research_and_ask(
    topic="history of the Cold War space race",
    questions=["Who reached space first?", "Key consequences?"],
    max_sources=3,
    keep_notebook=False,  # ephemeral — delete after
)
# → { sources_imported: [...], qa: [{question, answer, ...}, ...] }

Install

Quick start (from PyPI)

uv tool install notebooklm-mcp-lisa
uvx --from notebooklm-mcp-lisa playwright install chromium
nlm login                       # one-time Google sign-in (opens a browser)
nlm setup add claude-code       # or: claude-desktop

The setup add command edits the target's config file so the MCP server is registered — no JSON editing by hand. Restart the client to pick it up.

Verify registration any time:

nlm setup list

Dev setup (from source)

git clone https://github.com/gracelee087/notebooklm-mcp-lisa.git
cd notebooklm-mcp
uv sync
uv run playwright install chromium
uv run nlm login

First-time Google login

NotebookLM requires a signed-in Google session. Run once, headed:

uv run nlm login

A Chromium window opens. Complete Google OAuth; the session is saved to the OS user-data dir (NLM_PROFILE_DIR to override). Subsequent runs are headless.

Verify:

uv run nlm status
# {'logged_in': True}

Run the MCP server

uv run notebooklm-mcp
# or
uv run nlm serve

Claude Code (project-scoped, auto-picked-up)

.mcp.json in this repo is already configured. When you open the project in Claude Code it prompts you to trust and loads notebooklm automatically.

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "notebooklm": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/this/repo", "run", "notebooklm-mcp"]
    }
  }
}

Repo layout

src/notebooklm_mcp/
  server.py          # FastMCP entry
  cli.py             # `nlm` CLI (login/status/serve)
  browser.py         # Playwright persistent context
  config.py          # paths, env
  tools/
    notebook.py source.py studio.py research.py workflow.py auth.py

Status

  • [x] Package scaffold, MCP server, CLI
  • [x] Playwright session with persistent Google login
  • [x] All tools registered (stubs)
  • [ ] notebook_list DOM scrape
  • [ ] notebook_query chat flow
  • [ ] source_add (url/text/drive/file)
  • [ ] studio_create audio (podcast) + download
  • [ ] remaining tools

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured