notebooklm — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited notebooklm (Plugin) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<div align="center">
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 internal batchexecute RPC 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 notebooklm name.<!-- Badges -->
<!-- End Badges -->
</div>
Unofficial project — good to know before you start
>
This is not affiliated with Google. It talks to the same batchexecute endpoints 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.
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.
musnymubarak/Calim_Docswapped 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-fieldsThat 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 windowSee 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 @JulienCANTONI_Intermediate 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 .)<details> <summary><a name="disclaimer-details"></a>Full Disclaimer</summary>
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.
</details>
<div align="center">
Built with frustration about hallucinated APIs, powered by Google's NotebookLM
⭐ Star on GitHub if this saves you debugging time!
</div>
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.