Notebooklm mcp skill
Single SKILL.md that abstracts three NotebookLM access paths (MCP CLI, Chrome browser, Playwright uploader) into one consistent interface.
npx -y skills add 0SxD/notebooklm-mcp-skillAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Query, inspect, and manage Google NotebookLM notebooks from Claude Code. Trigger whenever the user says "query notebook", "ask notebooklm", "search notebooks", "list notebooks", "notebooklm server info", "get notebook", "inject source into notebook", "what did notebooklm say about", or any request to pull evidence from a named NotebookLM notebook as grounding for an artifact. Covers three access paths: (1) the mcp__notebooklm-mcp__* MCP tool surface (35 tools) when the stdio server is loaded, (2) a Claude-in-Chrome browser route against notebooklm.google.com when the MCP is unavailable, (3) a Playwright fallback using notebooklm_uploader.py for bulk source injection. Always ask the user which notebook to query before any call. Never auto-select. Never fabricate notebook IDs or contents. Every query runs through the 100 Percent Confidence Loop and every synthesized answer passes the Trinity Dialectic gate.
SKILL.md
6.8 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it
NotebookLM MCP Skill
Access Google NotebookLM from Claude Code with a single consistent interface, regardless of which underlying path is live this session. Wraps the notebooklm-mcp-cli MCP, the Claude-in-Chrome browser route, and the Playwright uploader.
Operating contract
- Zero Assumption Mandate: never auto-select a notebook. If the user has not named the target notebook, STOP and ask: "Which notebook should I use for this?"
- 100 Percent Confidence Loop: clear Architecture, Evidence, and Intent doubts before any query.
- Trinity Dialectic gate: every synthesized answer scores Logos (evidence), Pathos (intent), and Ethos (alignment) before it is presented. A global score below threshold loops back for revision.
- Always cite the notebook by name and UUID when synthesizing output.
- Always log the query and sanitized payload in the session log for the day.
Status block (update each session)
MCP server: <loaded | not loaded -- using Path B>
MCP version: <x.y.z>
Auth status: <current | EXPIRED -- run "nlm login" before any notebook call>
Active path: <A | B | C>
Access paths, in preference order
Path A, notebooklm-mcp-cli (preferred when loaded)
Package: notebooklm-mcp-cli (upstream github.com/jacob-bd/notebooklm-mcp-cli).
Transport: stdio. Registered in ~/.claude.json. 35 tools prefixed
mcp__notebooklm-mcp__*.
Binary location (Windows): C:\Users\<local-username>\.local\bin\notebooklm-mcp.EXE
Core tools:
mcp__notebooklm-mcp__server_info-- confirm server is live, return version.mcp__notebooklm-mcp__notebook_list-- list every notebook visible to the authenticated account.mcp__notebooklm-mcp__notebook_query-- query a specific notebook.mcp__notebooklm-mcp__source_add,notebook_get,search_notebooks-- depending on session allowlist.
Check presence with ToolSearch select:mcp__notebooklm-mcp__server_info. If the
search returns a schema, the MCP is loaded. If not, fall back to Path B.
Auth: nlm.EXE (Google OAuth). Account-scoped. Re-run nlm login after auth expiry
or when switching Google accounts.
Path B, Claude in Chrome against notebooklm.google.com
When the MCP is not loaded this session. Uses mcp__Claude_in_Chrome__* tools
(navigate, get_page_text, javascript_tool, read_console_messages, read_page).
Recipe:
mcp__Claude_in_Chrome__navigateto the notebook URL the user named.mcp__Claude_in_Chrome__get_page_textto extract the current panel.mcp__Claude_in_Chrome__javascript_toolto post a chat query into the notebook's chat surface (inspect the DOM first; selectors drift).- Wait for response,
get_page_textagain, extract. - Zero-Context Reviewer sanitize the payload (strip conversational filler, formatting noise) before passing it to the main context.
Never run headless. Inherits the logged-in Chrome session.
Path C, Playwright uploader fallback
Script: <project-root>/notebooklm_uploader.py (see notebooklm-batch-uploader).
Use: bulk source injection (adding books or markdown to notebooks at scale), not
for single-query grounding. Requires pip install playwright and
playwright install chromium. Uses channel="chrome" and headless=False.
Canonical workflow
- Target verification. Did the user name the notebook? If not, STOP and ask.
- Access path probe. ToolSearch for MCP tool schema. If missing, use Path B.
- Confidence loop. Three questions: target identity, expected evidence type, use of the evidence downstream.
- Query. Path A or Path B. Record the exact prompt, session ID, notebook ID in a session log.
- Sanitize. Zero-Context Reviewer scavenge pass on the returned payload.
- Synthesize. Answer with citations back to the notebook source.
- Trinity Dialectic. Logos (evidence quality), Pathos (intent alignment), Ethos (no hallucination). Below threshold: loop back, revise.
- Log. Append a row to today's session log.
Session log template
Append to session_logs/session_log_YYYY-MM-DD.md:
## Entry [N]
- **Notebook (named by user):** [name + UUID]
- **Query:** [verbatim text passed]
- **Session ID:** [from MCP or "browser-{date}-{n}" for Path B]
- **Raw payload (ZCR sanitized):** [stripped content]
- **Trinity scores:** Logos=[0-5] Pathos=[0-5] Ethos=[0-5] -> [PROCEED | LOOP_BACK]
- **Gaps / follow-ups:** [list]
Must do
- Always ask which notebook to query when unspecified.
- Always cite the notebook by name and UUID when synthesizing.
- Always log the query plus sanitized payload in the session log for the day.
- Always Trinity-gate the synthesis before replying.
- Always reuse an existing session ID if continuing a thread in the same notebook on the same day.
Must NOT do
- Never auto-select a notebook.
- Never fabricate notebook IDs, UUIDs, or content.
- Never bypass the Trinity Dialectic gate on synthesized output.
- Never write raw unsanitized MCP output to long-term memory. Stage in a scratch/research directory first; promote only after review.
Trigger phrases (non-exhaustive)
"query notebook", "ask notebooklm", "search notebooks", "list notebooks", "notebooklm server info", "get notebook", "inject source into notebook", "what did notebooklm say about", "cite from notebooklm", "pull evidence from", "grounding from notebook", "add source to notebook".
Verification checklist before use
- Access path probed this session? (ToolSearch
select:mcp__notebooklm-mcp__server_info) - User named the notebook?
- Session log for today exists or is about to be created?
- Auth confirmed current? (run
nlm loginif expired)
References
- Upstream MCP:
github.com/jacob-bd/notebooklm-mcp-cli - Batch uploader:
notebooklm-batch-uploader(sibling repo) - Book organizer:
notebooklm-book-organizer(sibling repo) - Research protocol:
notebooklm-research-protocol(sibling repo)
What ships with it: 3 files
3.4 KB alongside SKILL.md
- .gitignore124 B
- LICENSE1.0 KB
- README.md2.2 KB
Gives 0 of the 12 instructions most mcp tooling skills give in ~1.5k tokens
Counted across 638 of the 750 authors here whose files we hold, read 2026-08-07
- Create ten complex or independent read-only evaluation questionsin 69 of 638, across 15 files
- Test servers using MCP Inspectorin 61 of 638, across 19 files
- Provide actionable error messages with specific next stepsin 54 of 638, across 12 files
- Prioritize comprehensive API coverage over specific workflows or workflow toolsin 54 of 638, across 12 files
- Use TypeScript and Streamable HTTP for remote servers or clientsin 54 of 638, across 8 files
- Define structured output schemas where possiblein 50 of 638, across 8 files
- Use Zod or Pydantic for input schemasin 47 of 638, across 5 files
- Fetch MCP specification pages with markdown suffixin 46 of 638, across 4 files
- Load framework documentation using WebFetchin 45 of 638, across 3 files
- Verify each evaluation answer independentlyin 45 of 638, across 3 files
- Implement API client with authentication and paginationin 45 of 638, across 3 files
- Define input schemas with validationin 27 of 638, across 9 files
Said here and by no other author read
- ask which notebook to query if unspecified
- probe the access path each session
- clear architecture, evidence, and intent doubts before query
- record the query and session ID in a log
- sanitize the returned payload
- cite the notebook by name and UUID
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.