Repository navigation
Releases
v3.4.0
Added
get_chat_history— the notebook's whole chat history (questions and
answers, oldest first, with timestamps and the source passages behind the
[N]citations) as Markdown or JSON, returned inline or saved to
destination_dir. NotebookLM loads long chats lazily; the tool follows the
paging cursor of the data API until the oldest page, so the result is
complete however long the chat is (max_turnskeeps only the newest).
Read-only;include_citations: falsemakes a much smaller export.delete_chat_history— permanently deletes the notebook's chat history
(Notebook menu → Delete chat history) so a new line of work starts without
the earlier questions as context. Same approval flow as the other deletions:
the user is asked through elicitation, otherwiseconfirm: trueis required.
backup_dirsaves a Markdown copy first, after the approval. It makes the
same data-API call as the web app (DeleteChatTurns) and verifies the result
by reading the conversation back; if the call fails, the Notebook menu and
its confirmation dialog are used instead.scripts/chat-history-test.mjs— an offline test of the history reader
(paging,max_turns, citations, exports) against a fake NotebookLM.
Changed
-
reset_sessionis described for what it does: it reloads the session's tab.
It never deleted the notebook's stored conversation, which answers asked over
the data API keep continuing — usedelete_chat_historyfor that. -
Model labelling: the "Gemini 2.5" text hard-coded since the first release is
gone. Answers are now marked "Gemini 3.5 family (NotebookLM; Flash or Pro,
chosen by Google per task)", the_provenance.modelvalue is
"gemini-3.5-family"(was"gemini-2.5") and theask_questiontitle and
description say "Gemini 3.5". Google does not expose the model: the page,
its scripts and the chat RPC carry no model id, and its documentation names
only the Gemini 3.5 family (June 2026), with Flash or Pro picked per task
and the rollout differing by plan. The label is therefore a family, never a
specific variant. Clients matching onmodel === "gemini-2.5"must update.
v3.3.1
Added
create_notebook— a new, empty notebook in the signed-in account, added
to the library and selected (no web UI or share-link needed).rename_notebook— renames the notebook in NotebookLM itself; the library
name follows.delete_notebook— permanently deletes a notebook from the account and
drops its library entry. Asks the user through elicitation, otherwise
requiresconfirm: true; verified by re-reading the account's notebooks.pin_notebook— "Pin to top" / unpin on the homepage.list_collectionsandmanage_collection— the homepage's collections:
create, rename, add / remove notebooks, delete (notebooks are kept; asks
the user). Listing reads the collections directly instead of creating a
throwaway one.share_notebook— read link sharing and the people a notebook is shared
with; switch "anyone with the link can view" on (asks the user) or off.rename_sourceandrename_studio_artifact— the Rename entries of the
source and Studio item menus.get_studio_artifact— "View prompt and sources": the prompt, language,
report template and sources a Studio output was generated from.- Server log file
<data dir>/logs/server.log(NOTEBOOKLM_LOG_FILE), with
the process id on each line.
Fixed
add_sourcefailed on a notebook without sources ("Could not find an input
field inside the Add-source overlay", or a client timeout). NotebookLM
returnsnullinstead of an empty source list for such a notebook, which
the RPC path took for a protocol change and fell back to the UI. The same
madelist_sourcesread the source list from the UI instead of the RPC.- The UI fallback picked the "We're giving you more flexibility…"
announcement (<accessibility-promo-dialog>) as the Add-source dialog: on
an empty notebook the auto-opened Add-source modal covers the announcement's
close button. An announcement that cannot be closed is now marked and
skipped by the dialog selectors, the close falls back to a DOM click, and
announcements are swept again right before the dialog is opened. - When the RPC path fails and the UI fallback fails too, the
add_source
message now includes the RPC error instead of only logging it. add_sourcewaited up to 90 s for NotebookLM to process new sources and
hit MCP clients' 60 s request timeout. It now waits up to 40 s with
progress notifications; sources still processing are reported as pending.
v3.3.0
Source research and vetting, reports from selected sources, and the
notebooklm-workflow agent skill. (3.2.1 was tagged but never published;
its changes are part of this release.)
Added
research_sources— NotebookLM's own source search (Fast or Deep Research
over the web, Fast over Google Drive). It returns candidates only and never
imports. Every run spends AI usage, so queries under 4 words are refused
with advice on writing a precise one, a query that already ran in the
notebook is answered from its research history, and a run in progress is
reported instead of doubled. Deep runs list the candidates the report
cites, with the passage it drew from each; the report on request. Drive
runs (2-word minimum: file titles are precise) return Google Docs, Slides,
Sheets, PDFs and Word files, listed once each; a run that found nothing
ends asfailedwith advice to rephrase.import_research_sources— imports only vetted candidates: each needs a
reliabilityofhighormediumand a reason. Low-rated, unexplained,
duplicate and blocked-domain candidates are rejected
(NOTEBOOKLM_RESEARCH_BLOCKED_DOMAINS). Imported sources come back with
word counts; fewer than 500 indexed words is flagged as a likely landing
page, abstract or paywall.get_source— one source in depth: metadata, NotebookLM's source guide
(summary and keywords) and the indexed text, in pages.- Reports from a subset of sources:
generate_studio_artifactwith
type: "report"and a document template (briefing_doc,study_guide,
blog_post,create_your_own) now runs through NotebookLM's data API and
takessources— the Reports dialog has no source picker, so this was not
possible before. Newtitleoption. suggest_reports— NotebookLM's source-derived report suggestions (the
"Suggested Template" cards) for a chosen set of sources, each with a
ready-made prompt and audience, plus the notebook summary and suggested
questions.- Agent skill
notebooklm-workflow(Agent Skills format), shipped in the
package:npx @arlinamid/notebooklm-mcp skill installdetects the agents
on the machine and copies it only for those (~/.claude/skills,
~/.agents/skills,~/.copilot/skills,~/.config/opencode/skills);
skill zipbuilds the Claude Desktop upload. Plugin manifests for Claude,
Codex and Cursor and a Gemini CLI extension manifest bundle the server and
the skill; the Claude and Codex marketplaces install them from the npm
package. From GitHub:gemini extensions install,npx skills add, or a
clone andnode scripts/skill.mjs install. See the README, "Agent skill
and plugins".
Changed
list_sourcesalso returns type, URL (or YouTube channel), word and
character counts, status, origin (researchoradded) and the date
added.- The server instructions open the source section with source quality:
vet before each phase of work. - Tool descriptions and docs use neutral language examples instead of
Hungarian ones. - Prompt templates' rendered instructions (
get_prompt_template, MCP
prompts) now ask forsourcesscoped to the output instead of advising
against it, and report templates go tocreate_your_own. - Documentation: README overview and agent-skill section; usage-guide
recipes for finding and vetting sources, reports from selected sources and
the skill; troubleshooting for research queries, report sources, tools
listed twice and skill installs; every tool and parameter in
docs/tools.md(38 tools).
v3.2.0
Added
-
NOTEBOOKLM_USE_RPC=falseswitches every operation that has both paths
back to the web UI — a kill switch should Google change the protocol. -
configure_output_language— reads or sets the account's output language
(Settings → Output language) over the RPC API. It decides the language of
answers and of Studio outputs that do not name one. With Default,
NotebookLM uses its interface language, which is English for this server,
so a user expecting e.g. Hungarian silently got English; the tool says so
and sets an override. Accepts a code, the listed name or the English name. -
One browser per Google account across server instances. When several MCP
clients start the server on the same data directory (e.g. Claude Desktop's
chat and Code tab), the first instance becomes the leader: it alone opens
Chrome and writes the library, and serves a token-protected endpoint on
127.0.0.1. The others forward tool calls to it and relay its elicitation,
sampling, roots and progress to their own client. Previously the second
instance fell back to an isolated profile seeded with saved cookies, so one
Google session ran in two browsers at once. A dead leader is replaced on
the next call.NOTEBOOKLM_SINGLE_BROWSER=falseopts out. -
download_studio_artifact— saves any finished Studio output: audio
(.m4a), video (.mp4), infographic (.png), slide deck (.pdfor
.pptx), report (.md), data table (.csv,.xlsxexports), quiz and
flashcards (.md,.jsonor.html) and mind maps (.json). It reads
NotebookLM's own data API (batchexecuteRPCs, called from inside the
signed-in tab) instead of clicking menus, so it is fast (1–4 s per item)
and independent of the UI layout. Pick an item byartifact_id(or a
unique prefix) or the newest finished one of atype. The RPC layer
follows the protocol mapping of gemini-notebook-mcp-cli (MIT); see
THIRD_PARTY_NOTICES.md.
Changed
- Documentation brought up to date:
docs/tools.mdcovers all 34 tools (13
were missing; parameter tables generated from the tool schemas) and fixes
the outdatedask_question,add_source,generate_audioand
download_audiosections; new troubleshooting entries (wrong output
language, sign-in confirmation, failure replies, RPC kill switch, several
clients); usage-guide recipes for Studio downloads and output language;
server instructions no longer claim YouTube / file sources are missing. ask_questionasks through NotebookLM's streamed query endpoint instead of
typing into the chat box and watching the page for the answer: 10–15 s
instead of 20–25 s, no answer-detection heuristics, andsourcesscoping
sends source ids without touching the notebook's checkbox selection. The
notebook's server conversation is continued with its history, so
follow-ups keep context and the Q&A appears in NotebookLM's own chat.
Answers are now Markdown (e.g.**bold**); citation markers stay[N]
(ranges like[1-3]are expanded).save_answer_as_notereloads the tab
first so it saves the latest answer. Falls back to typing when the RPC fails.generate_studio_artifactstarts audio, video, infographic and slide-deck
generations through the RPC API (R7cb6c, 4–6 s, no customise dialog) and
returns the newartifactId. Without alanguageit uses the account's
output language; reports, flashcards, quizzes, data tables, mind maps,
"Generate later" and options without a known code keep using the dialog,
as does a request when the account language is Default.- Studio
languageaccepts a code (hu), the listed name (magyar) or the
English name (Hungarian) on both paths. add_sourceadds pasted text, web URLs and YouTube URLs through the RPC
API (4–6 s including the wait for processing and a tab refresh, instead of
driving the Add-source dialog) and returns the newsourceIds. Ambiguous
replies are reconciled against the notebook before anything is retried,
so a source is never added twice; file uploads and RPC failures use the
dialog as before.get_usage,configure_chatandimport_account_notebooksuse
NotebookLM's data API instead of menus and dialogs, falling back to the UI
when an RPC id changes: usage takes 0.4 s instead of opening Settings →
Usage (resetsis now an ISO 8601 time), chat settings are read and
written directly (0.5–1 s, verified by reading them back), and the
account's notebooks come from one call (≈2 s instead of ≈13 s of homepage
filtering, with no viewport or filter-state dependence).
Fixed
- The Studio dialog's language picker matched a bare prefix, so a short
code could choose the wrong language (ja→ Jawa instead of Japanese)
and the output came out in that language. It now matches exact names or
name (…)only, after resolving codes and English names. - Two tool calls arriving at once on a fresh server both launched the
browser; the second failed (launchPersistentContext … closed). Browser
start-up is now shared by concurrent callers. ask_questionhung until the timeout when the new answer was word for
word identical to an earlier one in the chat (asking the same question
again often gives the same answer): prior answers were recognised by text
only. A new answer bubble now counts as new even with identical text.- Concurrent tool calls on the same session no longer drive its browser tab
at the same time (two calls clicking in one tab closed each other's
dialogs and panels). Each session now has a FIFO queue: page interactions
run one at a time, waiting calls get a "Queued behind …" progress message,
andlist_sessionsshowscurrent_operation/queued_operations.
Long renders do not hold the tab —generate_audiowith
wait_for_completionpolls in short queued steps, so chat questions and
other Studio work can run meanwhile. An answer and its citations are read
in one step. - Two calls that open the same new
session_idat once share one tab
instead of opening two; idle-session cleanup never closes a busy tab.
v3.1.0
Added
import_account_notebooks— reads the signed-in account's notebooks from
the NotebookLM homepage ("My notebooks", optionally "Shared with me") and
adds the missing ones to the local library without share-links. Supports
dry_run, a titlequeryandnotebook_ids; skips notebooks already in
the library (matched by UUID) and restores the homepage filter the user had
selected. Verified live (EN locale) through the MCP server: dry run,
filtered and full import, and a repeat run that skips everything.
v3.0.0
First release after taking over development from the archived upstream
(PleasePrompto/notebooklm-mcp),
now at arlinamid/notebooklm-mcp and
published as @arlinamid/notebooklm-mcp. Restores compatibility with the
September 2026 "Gemini Notebook" redesign and adds tools for the features it
introduced.
Upgrading: replace notebooklm-mcp@latest with
@arlinamid/notebooklm-mcp@latest in the MCP client configuration. The
notebooklm-mcp command, tool names, settings and data directory (Chrome
profile, auth state, library) are unchanged, so existing logins carry over.
The major version marks the new package and maintainer; no tool or parameter
was removed.
Verified live against notebook.google.com (EN locale) through the MCP server:
chat, citations, source scoping, every add_source type, Studio generation
(audio, mind map; quiz and report queued via "Generate later"), audio
status/download, notes → sources, configure_chat, get_usage and the
prompt templates. Deletion was verified in a dry run with all writes blocked
and then run live by the user (duplicate sources and notes removed).
Video, slide-deck, infographic and data-table generation share the verified
dialog code but were not submitted live. The MCP protocol features below were
tested with SDK 1.32 client scripts against the live site. These covered tasks
(incl. cancel and a mind-map task), cancellation, progress, roots,
elicitation, sampling, logging, subscriptions and output-schema validation.
The open bug reports against 2.0.0 in the archived upstream tracker were
re-checked against this release:
| Upstream issues | Problem | How it was checked in 3.0.0 |
|---|---|---|
| #114, #116 | Stale answer to an earlier question | Nonce test in fresh sessions on a notebook with long chat history: 3 of 3 correct |
| #48 | Citation tooltip blocks a follow-up question | Verified live |
| #45 | Startup banner printed to stdout | Banner goes to stderr; stdout carries only JSON-RPC |
| #76, #83, #95, #102, #107, #108, #113 | Login detection on the new host | Fixed (new host) |
| #74, #78, #84 | Thinking text returned instead of the answer | Fixed |
| #63, #85, #93, #111 | Add-source dialog | Fixed |
Not verified, and still possible:
- orphan Chrome processes after a failed call
(#94); BROWSER_CHANNEL=chromiumlogin staying on about:blank
(#112);- answer timeouts on very large notebooks
(#50,
#103); - Korean UI selectors
(#69,
#72).
Added
generate_studio_artifact— create any Studio output: video, slide
deck, mind map, report, flashcards, quiz, infographic, data table (and
audio). Fills the optional focus prompt and submits with "Generate now", or
"Generate later" (generate_later: true, queued outside the current limit
window). Returns the usage-meter reading from the dialog.list_studio_artifacts— Studio library withtype,title,
detailsandstatus(ready|generating|scheduled).get_usage— reads Settings → Usage: the rolling usage window and the
weekly limit (percent used + reset time). Replaces the outdated
"50 queries/day" model in all messages and descriptions.configure_chat— read or set the notebook's persistent system
instruction ("Configure Chat": goal default / learning guide / custom
prompt, response length). Shapes every later answer on the notebook.generate_audio: new optionalformat(deep_dive,brief,
critique,debate),length,sourcesandgenerate_laterarguments.- Studio options on
generate_studio_artifact, mapped to language-free
anchors (radiovalues, toggle positions): video/slide formats,
infographic style/orientation/detail, flashcard & quiz count/difficulty,
outputlanguage, and the report flow (Interactive/Document format,
templates; apromptis appended to the template's instructions or used
alone forcreate_your_own). Unsupported option/type combinations are
rejected before anything is clicked. - Source scoping (
sources) for Studio jobs (per-dialog source picker)
and forask_question(sidebar selection, restored after the answer).
list_sourcesreturns stable source ids for duplicate titles. - MCP prompts. The server declared the
promptscapability but had no
prompts/listhandler (clients got "method not found"). It now serves
curated templates from two bundled MIT packs (Prompt Architect for
NotebookLM, EN + HU; NotebookLM Learner Pack, topic + audience lens) and
from user directories (NOTEBOOKLM_PROMPT_DIRS,<data dir>/prompt-packs).
Each renders to one goal-and-contract message naming the tool to call;
identical / near-identical templates are folded (aliases stay resolvable);
argument completion coverslang,lensandnotebook. Tools
list_prompt_templates/get_prompt_templateexpose the same templates
to clients without prompt support.scripts/import-prompt-packs.mjs
refreshes the packs (pinned commits, licenses in
prompts/THIRD_PARTY_NOTICES.md). - More source types in
add_source:file(local uploads via the
dialog's file chooser, several files per call),youtube, and several
URLs perurlcall. Missing files / empty content fail fast. delete_sourceanddelete_studio_artifact(Studio outputs and
notes) — permanent. The server asks the user for approval via MCP
elicitation, naming the resolved entry ("Permanently delete the source
"X"…?"); decline, dismiss or an unticked box leaves everything untouched,
even if the caller passedconfirm: true. Clients without elicitation
support must passconfirm: trueinstead. Entries are addressed by id
(list_sources,list_studio_artifactsnow return ids) so identical
titles can be told apart. Success is reported only after
the server acknowledged the request and the entry disappeared (the UI
removes sources optimistically even when the request fails). Verified in a
dry run with all writes blocked: each flow reaches the delete request and
nothing was removed.- Notes → sources:
save_answer_as_note(latest answer or by question,
verified against the answer text) andconvert_note_to_source(one note
or all).list_studio_artifactsnow lists notes too.
MCP protocol features
Each feature is optional for the client; clients without it behave as before.
- Tasks (experimental, spec 2025-11-25).
ask_question,add_source,
generate_audio,generate_studio_artifact,download_audio,
save_answer_as_noteandconvert_note_to_sourcedeclare
execution.taskSupport: "optional". Called as a task, the tool runs in the
background with status messages, and supportstasks/get,tasks/result,
tasks/cancelandtasks/list. Studio tasks complete only when the new
item isreadyin the Studio library (or straight away when queued with
"Generate later"). This replaces the generate → poll → fetch loop. - Cancellation.
notifications/cancelled(andtasks/cancel) stop the
running browser work at the next wait step: answer polling, uploads, Studio
and audio waits. The session stays usable. - Structured output.
list_sources,list_studio_artifacts,
get_usageandlist_prompt_templatesdeclare anoutputSchemaand
returnstructuredContent. Failed calls carryisError: true. - Elicitation, in addition to the delete approval:
- ambiguous source or Studio names open a chooser instead of failing;
re_authandcleanup_data(confirm: true)ask the user before deleting
local login and profile data;generate_studio_artifact(ask_options: true)shows a form with the
type's options, pre-filled with the given arguments.
- Sampling.
add_notebookno longer requiresdescriptionand
topics. When they are omitted, the server reads the notebook's source
titles and the client's model proposes them through sampling. Clients
without sampling get metadata derived from the titles. The proposal is
returned asgenerated_metadata. - Roots. Local paths for
add_source(type: "file")anddownload_audio
are checked against the client's roots plusNOTEBOOKLM_FILE_ROOTS.
NOTEBOOKLM_REQUIRE_FILE_ROOTS=truedenies file access when no root is
known. The check follows symlinks (realpath). - Logging. Server logs are forwarded as
notifications/message. The
default minimum level is `warni...