Google Gemini Notebook (ex NotebookLM) over MCP + a local REST API — cited answers, Studio, history
Runs on your machine from its package; the steps are below.
At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y @roomi-fields/notebooklm-mcp
MCP client config
{
"mcpServers": {
"notebooklm-mcp": {
"command": "npx",
"args": [
"-y",
"@roomi-fields/notebooklm-mcp"
]
}
}
}Automate Google NotebookLM at scale. 53-endpoint HTTP REST API for n8n / Zapier / Make / curl, plus an MCP server for Claude Code / Cursor / Codex. Citation-backed Q&A, full Studio generation (audio · video · infographic · report · presentation · data table), multi-account rotation with auto-reauth across personal and Google Workspace accounts.
v4.4.0 — Node 22 is now the floor, and the last four open advisories are gone with it. The declared floor of Node 18 had quietly become fiction: three production dependencies already required Node 20 or newer, and the test matrix kept passing on 18 without exercising them. Raising it also let the third-party file globber go — its dependency chain carried four advisories with no fix upstream — replaced by Node's built-in search, now actually under test. Builds on 4.0.0, where the HTTP API stopped being open to the network and to any web page (GHSA-p69m-c5rf-g2c3): it binds loopback, refuses unlisted origins, and takes a bearer token — remote access and Docker require
NOTEBOOKLM_API_KEY, see Securing the HTTP API. Built on a dual transport — the internalbatchexecuteRPC API (10-100× faster than scraping, immune to UI rebrands) with the Playwright browser as an automatic fallback. See the changelog.
Note (July 2026): Google rebranded NotebookLM to Gemini Notebook. It is the same product, existing links redirect, and this project drives the same underlying service — the browser path was updated for the new DOM in v2.3.0 and the RPC path in v3.0.0. Package and repository keep the
notebooklmname.
Unofficial project — good to know before you start
This is not affiliated with Google. It talks to the same
batchexecuteendpoints the NotebookLM web app uses, with a browser fallback when they move. They are undocumented, so they can change without notice — when that happens we ship a fix, as we have for every change so far.Two practical notes: use a dedicated Google account for automation, and expect NotebookLM's own quotas to apply at high volume. See Disclaimer for the full text.
🔗 No-code automation pipelines — The 53-endpoint REST API means NotebookLM becomes a step in n8n, Zapier, Make, or a plain curl in cron. No agent, no MCP client, no Node in your stack — just HTTP. This is the half most NotebookLM libraries don't have.
🤖 Agent tooling — The same engine over MCP for Claude Code, Cursor and Codex, with a bundled skill that primes the agent on citation formats, the daily-quota-aware batch pattern, and transport selection.
📚 Research at volume — Multi-account rotation with automatic re-authentication, built for overnight runs of 1 000+ questions across several notebooks without babysitting.
🎙️ Full Studio generation — Audio overviews, video, infographics, reports, presentations, data tables, plus flashcards, quizzes and mind maps — generated and downloaded programmatically.
NotebookLM is a grounded engine: Gemini reads your sources and answers from them, with citations. The winning pattern is to let it do the expensive reading while your own stack handles orchestration and the last mile.
Spend fewer tokens — offload the reading
add_notebook → source_add → notebook_ask).vault_batch writes every answer to disk as structured JSON against a published schema, so a batch run becomes a corpus you can grep, diff, re-index, or feed to a retrieval layer — without re-querying and re-spending quota.Wire it into things that aren't agents
Grounded answers with a paper trail
Get artifacts back out
Real deployments, not hypotheticals.
📚 A doctoral literature review at batch scale — The project was built for, and is
continuously tested on, overnight runs of 1 000+ research questions spread across
several notebooks: multi-account rotation picks up when a daily quota runs out, every
answer is written to disk with its citations, and an interrupted run resumes instead of
starting over. The batch pattern in vault_batch exists because a thesis
needed it.
🔌 Replacing a RAG engine with the REST API — musnymubarak/Calim_Doc
swapped a Gemini-based retrieval engine for this project's HTTP API, running it as a
Docker service (notebooklm:3000) behind a full client and worker layer. A good
illustration of the REST half: no agent runtime, no MCP client — NotebookLM simply
became a backend service their Python app calls.
Built something with it? Open an issue — this section is for other people's work.
Generate multiple content types from your notebook sources:
| Content Type | Formats | Options |
|---|---|---|
| Audio Overview | Podcast-style discussion | Language (80+), custom instructions |
| Video | Brief, Explainer | 6 visual styles, language, custom instructions |
| Infographic | Horizontal, Vertical | Language, custom instructions |
| Report | Summary, Detailed | Language, custom instructions |
| Presentation | Overview, Detailed | Language, custom instructions |
| Data Table | Simple, Detailed | Language, custom instructions |
| Flashcards | Study cards | Language, custom instructions |
| Quiz | Assessment questions | Language, custom instructions |
| Mind Map | Interactive node graph | Saved to the notebook |
Video Visual Styles: classroom, documentary, animated, corporate, cinematic, minimalist
Language of generated content: pass language to any generator — a BCP-47 code (es, ja, pt_BR, zh_Hans) or a name in English or in the language itself ("Spanish", "Español"). 81 languages are accepted, and an unrecognised one is refused rather than quietly swapped for another. Set a default with NOTEBOOKLM_CONTENT_LANGUAGE; it is deliberately independent of NOTEBOOKLM_UI_LOCALE, which only picks the interface language the browser fallback reads.
Flashcards and quizzes are generated via generate_study_aid; mind maps via generate_mind_map. v3 also adds share_notebook, manage_labels, and research_sources (web/Drive source discovery) — see the changelog.
content_delete) — until now a notebook accumulated every draft anyone ever asked for, with no way to remove one short of the web UIsource_list)rename_source): fix a title in place, by id or by namecheck_source_freshness): which URL / Drive sources have drifted from what they point at — the whole notebook in one call. An unanswered source is reported as unknown, never as currentget_source_guide): NotebookLM's own summary and key topics for one sourcesource_read): the exact text NotebookLM indexed — what it actually reasons over, which the web UI only shows in fragments. Quote a source verbatim, check what a PDF really yielded, or hand the raw material to another tool. Name the source instead of its ID if you prefer; an ambiguous name is refused rather than guessed. Long sources arrive one page at a time, with an explicit instruction for fetching the next — or paginate: false for the whole document at once.get_notebook_summary) — NotebookLM's own summary of its sources plus the questions it suggests asking, without spending a question to find outget_chat_history) — read back the recorded questions and answers, newest first. An agent resuming work stops paying to ask what it already asked. NotebookLM exposes only the most recent conversation per notebookdelete_chat_history) — the web UI's "Delete history". There is no per-turn delete: the whole conversation goesexport_artifact) — send a finished artifact to Google Docs or Google Sheetsrevise_slide) — change a single slide from a prompt instead of regenerating the whole decknotebooklm.google.com and the notebook.google.com Workspace alias), so Workspace sessions authenticate cleanly instead of looping on "session expired"en · fr · de · ja); add a language in a single JSON filenotebooklm skill (also standalone: roomi-fields/notebooklm-skill) that teaches the agent citation formats, the batch-to-cache pattern, and when to use which transport/batch-to-vault writes citation-backed answers as markdown + JSON sidecars (nblm-answer-v1 schema), indexable by RTFM (FTS5 + semantic) for unlimited offline queries. Ideal for academic / SOTA workflows. Guide.The fastest way to get NotebookLM into Claude Code. Distributed via the roomi-fields/claude-plugins marketplace alongside RTFM (the retrieval companion — see RTFM integration guide):
/plugin marketplace add roomi-fields/claude-plugins
/plugin install notebooklm@roomi-fields
That registers the MCP server and the notebooklm agent skill, runs npx -y @roomi-fields/notebooklm-mcp@<pinned-version> automatically (Node ≥ 22 required), and lets you upgrade with two commands when a new release ships: /plugin marketplace update roomi-fields then /reload-plugins. Then run npx -y -p @roomi-fields/notebooklm-mcp notebooklm-mcp-setup-auth once in a terminal to log into Google (a visible Chrome opens). To install RTFM at the same time: /plugin install rtfm@roomi-fields.
git clone https://github.com/roomi-fields/notebooklm-mcp.git
cd notebooklm-mcp
npm install && npm run build
npm run setup-auth # One-time Google login
npm run start:http # Start REST API on port 3000
# Citation-backed Q&A, single curl, JSON response
curl -X POST http://localhost:3000/ask \
-H 'Content-Type: application/json' \
-d '{"question": "Summarize chapter 3", "notebook_id": "your-id", "source_format": "json"}'
The full surface is 33 documented endpoints — see the REST API reference. For overnight batches of 1 000+ questions, see the batch pattern.
# Build (same package, MCP transport)
git clone https://github.com/roomi-fields/notebooklm-mcp.git
cd notebooklm-mcp
npm install && npm run build
# Claude Code
claude mcp add notebooklm node /path/to/notebooklm-mcp/dist/index.js
# Cursor — add to ~/.cursor/mcp.json
{
"mcpServers": {
"notebooklm": {
"command": "node",
"args": ["/path/to/notebooklm-mcp/dist/index.js"]
}
}
}
Log in once — in a terminal, not through the assistant. Run the interactive Google login as a command; a visible Chrome window opens, you sign in, and the saved session is then reused by the MCP server:
npm run setup-auth # from a clone (Option 2 above)
notebooklm-mcp setup-auth # from a global install (npm i -g @roomi-fields/notebooklm-mcp)
Do the login in a terminal rather than by asking the assistant "log me in": some stdio MCP clients (e.g. Claude Desktop) cap tool-call duration and cut off the up-to-10-minute interactive login before you can finish signing in (see issue #27).
# Build and run
docker build -t notebooklm-mcp .
docker run -d --name notebooklm-mcp -p 3000:3000 -p 6080:6080 -v notebooklm-data:/data notebooklm-mcp
# Authenticate via noVNC
# 1. Open http://localhost:6080/vnc.html
# 2. Run: curl -X POST http://localhost:3000/setup-auth -d '{"show_browser":true}'
# 3. Login to Google in the VNC window
See Docker Guide for NAS deployment (Synology, QNAP).
Full docs site: https://notebooklm.roomi-fields.com/ · OpenAPI 3.1 spec
| Guide | Description |
|---|---|
| Installation | Step-by-step setup for HTTP and MCP modes |
| Configuration | Environment variables and security |
| REST API reference | Complete HTTP endpoint documentation (53 endpoints) |
| Run 1 000 questions overnight | Production batch pattern with auto-reauth and rotation |
| RTFM integration — cache as searchable vault | Pipeline pattern: NotebookLM as one-shot ingestion, RTFM as retrieval layer. /batch-to-vault endpoint, nblm-answer-v1 schema. |
| n8n integration | Workflow automation setup |
| Troubleshooting | Common issues and solutions |
| Notebook library | Multi-notebook management |
| Auto-discovery | Autonomous metadata generation |
| Content management | Audio, video, infographic, report, presentation |
| Multi-account rotation | Multiple accounts with TOTP auto-reauth |
| Docker | Docker and Docker Compose deployment |
| Multi-interface | Run Claude Desktop + HTTP simultaneously |
| Compare with PleasePrompto v2.0.0 | Feature matrix vs the upstream MCP-only server |
| Chrome profile limitation | Profile locking (solved in v1.3.6+) |
| Adding a language | i18n system for multilingual UI support |
See ROADMAP.md for planned features and version history.
Latest releases:
notebooklm-mcp setup-auth) for global / stdio-client installs; setup_auth / re_auth accept a top-level headless (#27)batchexecute RPC API with automatic DOM fallback), 10-100× faster and immune to UI rebrands; 5 new tools (notebook sharing, study aids, mind maps, source labels, web research)notebook.google.com alias); notebook listing no longer wastes ~30s after the "Gemini Notebook" rebrand; HTTP banner reads the real version. Diagnosis + patch by @kpietkaa (#19)notebook_create (partial, #18)note_list and note_get MCP tools (#17)notebook_ask, source_add, session_list, server_health, vault_batch…) across 9 namespaces; tools/list advertises only the canonical names. Backward compatible — the legacy flat names still work as aliases, so existing scripts and configs keep running. Also adds MCP annotations (read-only / destructive / idempotent / open-world hints) and outputSchema + structuredContent on every tool. Published on the Smithery registry.batch_to_vault exposed as a first-class MCP tool (parity with the HTTP endpoint, no localhost server required); shared runBatchToVault helper deduplicates the loop across both transports/batch-to-vault endpoint + RTFM integration (nblm-answer-v1 JSON Schema published at schemas.roomi-fields.com/nblm-answer-v1.json) for caching NotebookLM answers as a searchable markdown vault.highlighted) and Docker multi-stage build — PR #1 by @JulienCANTONIIntermediate patch and hardening releases (1.5.x–1.7.x) are in the full CHANGELOG.
Not yet implemented:
This tool automates browser interactions with NotebookLM. Use a dedicated Google account for automation. CLI tools like Claude Code can make mistakes — always review changes before deploying.
See full Disclaimer below.
Found a bug? Have an idea? Open an issue or submit a PR!
See CONTRIBUTING.md for guidelines.
MIT — Use freely in your projects. See LICENSE.
Romain Peyrichou — @roomi-fields
Thanks to everyone who has contributed code, ideas, and bug reports:
notebook.google.com rebrand supporthl=<uiLocale> on app URLs + click-through scrape fallbacknote_list / note_get MCP tools_ over .)About browser automation: While I've built in humanization features (realistic typing speeds, natural delays, mouse movements), I can't guarantee Google won't detect or flag automated usage. Use a dedicated Google account for automation.
About CLI tools and AI agents: CLI tools like Claude Code, Codex, and similar AI-powered assistants are powerful but can make mistakes:
I built this tool for myself and share it hoping it helps others, but I can't take responsibility for any issues that might occur. Use at your own discretion.
Built with frustration about hallucinated APIs, powered by Google's NotebookLM
⭐ Star on GitHub if this saves you debugging time!