# NotebookLM MCP (npm · @roomi-fields/notebooklm-mcp)

Automate Google NotebookLM — Q&A with citations, audio, video, content generation

- Trust score: 62/100 (medium)
- Change this week: +37
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-07

## Components

- npm · `@roomi-fields/notebooklm-mcp`: 62/100 (this document), [markdown](https://verifymcp.io/servers/roomi-fields-notebooklm-mcp/roomi-fields-notebooklm-mcp.md), [page](https://verifymcp.io/servers/roomi-fields-notebooklm-mcp/roomi-fields-notebooklm-mcp)

## Channel facts

- Registry: `npm`
- Package: `@roomi-fields/notebooklm-mcp`
- Version: `3.0.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-07.

- **Supply Chain Security**: 88/100
  - No malware found by supply-chain analysis.
  - Known CVEs were checked across the 158 of 160 dependencies we could resolve, so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Dependency health was assessed across the 158 of 160 dependencies we could resolve, so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 56/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (poor).
  - Context-footprint check failed: tool/resource definitions use about 6555 tokens (~172/item across 38 items; 37 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability check failed: the tool surface changed between 1.5.9 and 3.0.1: 27 tool removals, 0 breaking changes, 37 additions.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add roomi-fields-notebooklm-mcp -- npx -y @roomi-fields/notebooklm-mcp
```

### Codex

```bash
codex mcp add roomi-fields-notebooklm-mcp -- npx -y @roomi-fields/notebooklm-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "roomi-fields-notebooklm-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@roomi-fields/notebooklm-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add roomi-fields-notebooklm-mcp --command npx --arg -y --arg @roomi-fields/notebooklm-mcp
```

### Hermes

```yaml
mcp_servers:
  roomi-fields-notebooklm-mcp:
    command: "npx"
    args: ["-y", "@roomi-fields/notebooklm-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "roomi-fields-notebooklm-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@roomi-fields/notebooklm-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-06 (score 62, +27)

- [security regression] Stability: unverified → fail
- [functional regression] Schema quality: 4916 → 6555
- [functional regression] Schema quality: 4916 → 6483
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Schema quality: unverified → 100
- [functional] First check of Tool coverage: 100
- [functional] Package version: 3.0.0 → 3.0.1
- [functional] Package version: 1.5.9 → 3.0.1

### 2026-08-05 (score 35, −31)

- [security regression] Stability: 0.27 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional] Package version: 1.5.9 → 3.0.0

### 2026-08-04 (score 66, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-08-02 (score 62, +37)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Schema quality: unverified → poor
- [functional] Licence: MIT

### 2026-07-31 (score 25, +16)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 9, −42)

- [security regression] Malware scan: pass → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Dependency health: unverified → partial

### 2026-07-27 (score 51)

First indexed and scored.

## MCP tools (37)

### `notebook_ask` (~438 tokens)

\# Conversational Research Partner (NotebookLM • Gemini 2.5 • Session RAG)

\## No Active Notebook
\- Visit https://notebooklm.google to create a notebook and get a share link
\- Use **add_notebook** to add it to your library (explains how to get the link)
\- Use **list_notebooks** to show available sources
\- Use **select_notebook** to set one active

\> Auth tip: If login is required, use the prompt 'notebooklm.auth-setup' and then verify with the 'get_health' tool. If authentication later fails (e.g., expired cookies), use the prompt 'notebooklm.auth-repair'.

Tip: Tell the user you can manage NotebookLM library and ask which notebook to use for the current task.

Input parameters:

- `browser_options` (object): Optional browser behavior settings. Claude can control everything: visibility, typing speed, stealth mode, timeouts. Useful for debugging or fine-tuning.
- `notebook_id` (string): Optional notebook ID from your library. If omitted, uses the active notebook. Use list_notebooks to see available notebooks.
- `notebook_url` (string): Optional notebook URL (overrides notebook_id). Use this for ad-hoc queries to notebooks not in your library.
- `question` (string, required): The question to ask NotebookLM
- `session_id` (string): Optional session ID for contextual conversations. If omitted, a new session is created.
- `show_browser` (boolean): Show browser window for debugging (simple version). For advanced control (typing speed, stealth, etc.), use browser_options instead.
- `source_format` (string): Format for source citation extraction (default: none). Options: - none: No source extraction (fastest) - inline: Insert source text inline: "text [1: source excerpt]" - footnotes: Append sources at t…

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `library_discover` (~374 tokens)

🚀 AUTO-DISCOVERY — Automatically generate notebook metadata via NotebookLM (RECOMMENDED)

\## When to Use
\- User provides NotebookLM URL and wants quick/automatic setup
\- User prefers not to manually specify metadata
\- Default choice for adding notebooks

\## Workflow
1\) User provides NotebookLM URL
2\) Ask confirmation: "Add '[URL]' with auto-generated metadata?"
3\) Call this tool → NotebookLM generates name, description, tags
4\) Show generated metadata to user for review

\## Benefits
\- ✅ 30 seconds vs 5 minutes manual entry
\- ✅ Zero-friction notebook addition
\- ✅ Consistent metadata quality
\- ✅ Discovers topics user might not think of

\## Example
User: "Add this NotebookLM: https://notebooklm.google.com/notebook/abc123"
You: "Add this notebook with auto-generated metadata?"
User: "Yes"
You: Call auto_discover_notebook(url="https://...")
→ Returns: {name: "n8n-workflow-guide", description: "...", tags: [...]}

\## Fallback
If auto-discovery fails (rare), use add_notebook tool for manual entry.

\## How to Get a NotebookLM Share Link

Visit https://notebooklm.google/ → Login (free: 100 notebooks, 50 sources each, 500k words, 50 daily queries)
1\) Click "+ New" (top right) → Upload sources (docs, knowledge)
2\) Click "Share" (top right) → Select "Anyone with the link"
3\) Click "Copy link" (bottom left) → Give this link to Claude

(Upgraded: Google AI Pro/Ultra gives 5x higher limits)

Input parameters:

- `url` (string, required): The NotebookLM notebook URL

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `library_add` (~567 tokens)

📝 MANUAL ENTRY — Add notebook with manually specified metadata (use auto_discover_notebook instead)

\## When to Use
\- Auto-discovery failed or unavailable
\- User has specific metadata requirements
\- User prefers manual control

\## Conversation Workflow (Mandatory)
When the user says: "I have a NotebookLM with X"

\**FIRST:** Try auto_discover_notebook for faster setup
\**ONLY IF** user refuses auto-discovery or it fails:

1\) Ask URL: "What is the NotebookLM URL?"
2\) Ask content: "What knowledge is inside?" (1–2 sentences)
3\) Ask topics: "Which topics does it cover?" (3–5)
4\) Ask use cases: "When should we consult it?"
5\) Propose metadata and confirm:
   \- Name: [suggested]
   \- Description: [from user]
   \- Topics: [list]
   \- Use cases: [list]
   "Add it to your library now?"
6\) Only after explicit "Yes" → call this tool

\## Rules
\- Do not add without user permission
\- Prefer auto_discover_notebook when possible
\- Do not guess metadata — ask concisely
\- Confirm summary before calling the tool

\## Example
User: "I have a notebook with n8n docs"
You: "Want me to auto-generate the metadata?" (offer auto_discover_notebook first)
User: "No, I'll specify it myself"
You: Ask URL → content → topics → use cases; propose summary
User: "Yes"
You: Call add_notebook

\## How to Get a NotebookLM Share Link

Visit https://notebooklm.google/ → Login (free: 100 notebooks, 50 sources each, 500k words, 50 daily queries)
1\) Click "+ New" (top right) → Upload sources (docs, knowledge)
2\) Click "Share" (top right) → Select "Anyone with the link"
3\) Click "Copy link" (bottom left) → Give this link to Claude

(Upgraded: Google AI Pro/Ultra gives 5x higher limits)

Input parameters:

- `content_types` (array): Types of content (e.g., ['documentation', 'examples', 'best practices'])
- `description` (string, required): What knowledge/content is in this notebook
- `name` (string, required): Display name for the notebook (e.g., 'n8n Documentation')
- `tags` (array): Optional tags for organization
- `topics` (array, required): Topics covered in this notebook
- `url` (string, required): The NotebookLM notebook URL
- `use_cases` (array): When should Claude use this notebook (e.g., ['Implementing n8n workflows'])

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `library_list` (~40 tokens)

List all library notebooks with metadata (name, topics, use cases, URL). Use this to present options, then ask which notebook to use for the task.

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `library_get` (~28 tokens)

Get detailed information about a specific notebook by ID

Input parameters:

- `id` (string, required): The notebook ID

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `library_select` (~149 tokens)

Set a notebook as the active default (used when ask_question has no notebook_id).

\## When To Use
\- User switches context: "Let's work on React now"
\- User asks explicitly to activate a notebook
\- Obvious task change requires another notebook

\## Auto-Switching
\- Safe to auto-switch if the context is clear and you announce it:
  "Switching to React notebook for this task..."
\- If ambiguous, ask: "Switch to [notebook] for this task?"

\## Example
User: "Now let's build the React frontend"
You: "Switching to React notebook..." (call select_notebook)

Input parameters:

- `id` (string, required): The notebook ID to activate

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `library_update` (~238 tokens)

Update notebook metadata based on user intent.

\## Pattern
1\) Identify target notebook and fields (topics, description, use_cases, tags, url)
2\) Propose the exact change back to the user
3\) After explicit confirmation, call this tool

\## Examples
\- User: "React notebook also covers Next.js 14"
  You: "Add 'Next.js 14' to topics for React?"
  User: "Yes" → call update_notebook

\- User: "Include error handling in n8n description"
  You: "Update the n8n description to mention error handling?"
  User: "Yes" → call update_notebook

Tip: You may update multiple fields at once if requested.

Input parameters:

- `content_types` (array): New content types
- `description` (string): New description
- `id` (string, required): The notebook ID to update
- `name` (string): New display name
- `tags` (array): New tags
- `topics` (array): New topics list
- `url` (string): New notebook URL
- `use_cases` (array): New use cases

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `library_remove` (~134 tokens)

Dangerous — requires explicit user confirmation.

\## Confirmation Workflow
1\) User requests removal ("Remove the React notebook")
2\) Look up full name to confirm
3\) Ask: "Remove '[notebook_name]' from your library? (Does not delete the actual NotebookLM notebook)"
4\) Only on explicit "Yes" → call remove_notebook

Never remove without permission or based on assumptions.

Example:
User: "Delete the old React notebook"
You: "Remove 'React Best Practices' from your library?"
User: "Yes" → call remove_notebook

Input parameters:

- `id` (string, required): The notebook ID to remove

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `library_search` (~45 tokens)

Search library by query (name, description, topics, tags). Use to propose relevant notebooks for the task and then ask which to use.

Input parameters:

- `query` (string, required): Search query

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `library_stats` (~22 tokens)

Get statistics about your notebook library (total notebooks, usage, etc.)

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `session_list` (~36 tokens)

List all active sessions with stats (age, message count, last activity). Use to continue the most relevant session instead of starting from scratch.

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `session_close` (~40 tokens)

Close a specific session by session ID. Ask before closing if the user might still need it.

Input parameters:

- `session_id` (string, required): The session ID to close

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `session_reset` (~49 tokens)

Reset a session's chat history (keep same session ID). Use for a clean slate when the task changes; ask the user before resetting.

Input parameters:

- `session_id` (string, required): The session ID to reset

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `server_health` (~63 tokens)

Get server health status including authentication state, active sessions, and configuration. Use this to verify the server is ready before starting research workflows.

If authenticated=false and having persistent issues:
Consider running cleanup_data(preserve_library=true) + setup_auth for fresh start with clean browser session.

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `auth_setup` (~267 tokens)

Google authentication for NotebookLM access - opens a browser window for manual login to your Google account. Returns immediately after opening the browser. You have up to 10 minutes to complete the login. Use 'get_health' tool afterwards to verify authentication was saved successfully. Use this for first-time authentication or when auto-login credentials are not available. IMPORTANT: If already authenticated, this tool will skip re-authentication. For switching accounts or rate-limit workarounds, use 're_auth' tool instead.

TROUBLESHOOTING for persistent auth issues:
If setup_auth fails or you encounter browser/session issues:
1\. Ask user to close ALL Chrome/Chromium instances
2\. Run cleanup_data(confirm=true, preserve_library=true) to clean old data
3\. Run setup_auth again for fresh start
This helps resolve conflicts from old browser sessions and installation data.

Input parameters:

- `browser_options` (object): Optional browser settings. Control visibility, timeouts, and stealth behavior.
- `headless` (boolean): Alias/inverse of show_browser: headless=false opens a visible window, headless=true runs hidden. Ignored if show_browser is set.
- `show_browser` (boolean): Show browser window (simple version). Default: true for setup. For advanced control, use browser_options instead.

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `auth_logout` (~126 tokens)

De-authenticate (logout) - Clears all authentication data for security. Use this when:
\- User wants to log out for security reasons
\- Removing credentials before shutting down
\- Clearing auth without immediately re-authenticating

This will:
1\. Close all active browser sessions
2\. Delete all saved authentication data (cookies, Chrome profile)
3\. Preserve notebook library and other data

IMPORTANT: After de_auth, the server will need re-authentication via setup_auth or re_auth before making queries.

Use 'get_health' to verify de-authentication was successful (authenticated: false).

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `auth_switch` (~280 tokens)

Switch to a different Google account or re-authenticate. Use this when:
\- NotebookLM rate limit is reached (50 queries/day for free accounts)
\- You want to switch to a different Google account
\- Authentication is broken and needs a fresh start

This will:
1\. Close all active browser sessions
2\. Delete all saved authentication data (cookies, Chrome profile)
3\. Open browser for fresh Google login

After completion, use 'get_health' to verify authentication.

TROUBLESHOOTING for persistent auth issues:
If re_auth fails repeatedly:
1\. Ask user to close ALL Chrome/Chromium instances
2\. Run cleanup_data(confirm=false, preserve_library=true) to preview old files
3\. Run cleanup_data(confirm=true, preserve_library=true) to clean everything except library
4\. Run re_auth again for completely fresh start
This removes old installation data and browser sessions that can cause conflicts.

Input parameters:

- `browser_options` (object): Optional browser settings. Control visibility, timeouts, and stealth behavior.
- `headless` (boolean): Alias/inverse of show_browser: headless=false opens a visible window, headless=true runs hidden. Ignored if show_browser is set.
- `show_browser` (boolean): Show browser window (simple version). Default: true for re-auth. For advanced control, use browser_options instead.

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `server_cleanup` (~409 tokens)

ULTRATHINK Deep Cleanup - Scans entire system for ALL NotebookLM MCP data files across 8 categories. Always runs in deep mode, shows categorized preview before deletion.

⚠️ CRITICAL: Close ALL Chrome/Chromium instances BEFORE running this tool! Open browsers can prevent cleanup and cause issues.

Categories scanned:
1\. Legacy Installation (notebooklm-mcp-nodejs) - Old paths with -nodejs suffix
2\. Current Installation (notebooklm-mcp) - Active data, browser profiles, library
3\. NPM/NPX Cache - Cached installations from npx
4\. Claude CLI MCP Logs - MCP server logs from Claude CLI
5\. Temporary Backups - Backup directories in system temp
6\. Claude Projects Cache - Project-specific cache (optional)
7\. Editor Logs (Cursor/VSCode) - MCP logs from code editors (optional)
8\. Trash Files - Deleted notebooklm files in system trash (optional)

Works cross-platform (Linux, Windows, macOS). Safe by design: shows detailed preview before deletion, requires explicit confirmation.

LIBRARY PRESERVATION: Set preserve_library=true to keep your notebook library.json file while cleaning everything else.

RECOMMENDED WORKFLOW for fresh start:
1\. Ask user to close ALL Chrome/Chromium instances
2\. Run cleanup_data(confirm=false, preserve_library=true) to preview
3\. Run cleanup_data(confirm=true, preserve_library=true) to execute
4\. Run setup_auth or re_auth for fresh browser session

Use cases: Clean reinstall, troubleshooting auth issues, removing all traces before uninstall, cleaning old browser sessions and installation data.

Input parameters:

- `confirm` (boolean, required): Confirmation flag. Tool shows preview first, then user confirms deletion. Set to true only after user has reviewed the preview and explicitly confirmed.
- `preserve_library` (boolean): Preserve library.json file during cleanup. Default: false. Set to true to keep your notebook library while deleting everything else (browser data, caches, logs).

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `source_add` (~216 tokens)

Add a source (document, URL, text, YouTube video) to the current NotebookLM notebook.

Supported source types:
\- file: Upload a local file (PDF, DOCX, TXT, etc.)
\- url: Add a web page URL
\- text: Paste text content directly
\- youtube: Add a YouTube video URL
\- google_drive: Add a Google Drive document link

The source will be processed and indexed for use in conversations.

Input parameters:

- `file_path` (string): Local file path (required for source_type="file")
- `notebook_url` (string): Notebook URL. If not provided, uses the active notebook.
- `session_id` (string): Session ID to reuse an existing session
- `source_type` (string, required): Type of source to add
- `text` (string): Text content (required for source_type="text")
- `title` (string): Optional title/name for the source
- `url` (string): URL (required for source_type="url", "youtube", "google_drive")

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `source_delete` (~155 tokens)

Delete a source from the current NotebookLM notebook.

You can identify the source to delete by either:
\- source_id: The unique identifier of the source
\- source_name: The name/title of the source (partial match supported)

Use list_content first to see available sources and their IDs/names.

WARNING: This action is irreversible. The source will be permanently removed from the notebook.

Input parameters:

- `notebook_url` (string): Notebook URL. If not provided, uses the active notebook.
- `session_id` (string): Session ID to reuse an existing session
- `source_id` (string): The unique ID of the source to delete
- `source_name` (string): The name/title of the source to delete (partial match supported)

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `content_generate` (~428 tokens)

Generate content from your NotebookLM sources.

Supported content types:
\- audio_overview: Audio podcast/overview (Deep Dive conversation with two AI hosts)
\- video: Video summary that visually explains main topics (brief or explainer format)
\- presentation: Slides/presentation with AI-generated content and images
\- report: Briefing document (2,000-3,000 words) summarizing key findings, exportable as PDF/DOCX
\- infographic: Visual infographic in horizontal (16:9) or vertical (9:16) format
\- data_table: Structured table organizing key information (exportable as CSV/Excel)

Language support: All content types support 80+ languages via the language parameter.

Video styles: Video content supports 6 visual styles via the video_style parameter:
classroom, documentary, animated, corporate, cinematic, minimalist.

These content types use real NotebookLM Studio UI buttons or the generic ContentGenerator architecture that navigates the Studio panel and falls back to chat-based generation.

NOTE: Other content types (faq, study_guide, timeline, table_of_contents) are NOT currently implemented. For document-style content, use the ask_question tool.

Input parameters:

- `content_type` (string, required): Type of content to generate: audio_overview (podcast), video (brief or explainer), presentation (slides), report (briefing doc 2,000-3,000 words, PDF/DOCX export), infographic (horizontal 16:9 or ver…
- `custom_instructions` (string): Optional instructions to customize the generated content
- `language` (string): Language for the generated content (e.g., "French", "Spanish", "Japanese"). NotebookLM supports 80+ languages.
- `notebook_url` (string): Notebook URL. If not provided, uses the active notebook.
- `session_id` (string): Session ID to reuse an existing session
- `video_style` (string): Visual style for video content (only valid for content_type="video"). Powered by Nano Banana AI.

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `content_list` (~75 tokens)

List all sources and generated content in the current notebook.

Returns:
\- Sources: Documents, URLs, and other uploaded materials
\- Generated content: Audio overviews

Input parameters:

- `notebook_url` (string): Notebook URL. If not provided, uses the active notebook.
- `session_id` (string): Session ID to reuse an existing session

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `content_download` (~159 tokens)

Download or export generated content from NotebookLM.

Supported content types:
\- audio_overview: Downloads as audio file (MP3)
\- video: Downloads as video file
\- infographic: Downloads as image file
\- presentation: Exports to Google Slides (returns URL)
\- data_table: Exports to Google Sheets (returns URL)

Note: Report content is text-based and returned in the generation response.

Input parameters:

- `content_type` (string, required): Type of content to download/export
- `notebook_url` (string): Notebook URL. If not provided, uses the active notebook.
- `output_path` (string): Optional local path to save the file (for audio, video, infographic)
- `session_id` (string): Session ID to reuse an existing session

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `note_create` (~125 tokens)

Create a note in the NotebookLM Studio panel.

Notes are user-created annotations that appear in your notebook. Use them to save research findings, summaries, key insights, or any custom content you want to keep alongside your sources.

Notes support markdown formatting for rich text content.

Input parameters:

- `content` (string, required): Content/body of the note. Supports markdown formatting.
- `notebook_url` (string): Notebook URL. If not provided, uses the active notebook.
- `session_id` (string): Session ID to reuse an existing session
- `title` (string, required): Title of the note (required)

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `note_save_chat` (~149 tokens)

Save the current NotebookLM chat/discussion to a note.

This tool extracts all messages from the current conversation (both user questions and NotebookLM AI responses) and saves them as a formatted note in the Studio panel.

Use this to:
\- Preserve important research conversations
\- Create a summary of your discussion with NotebookLM
\- Save chat history before starting a new topic

The note will include timestamps and message attribution (User/NotebookLM).

Input parameters:

- `notebook_url` (string): Notebook URL. If not provided, uses the active notebook.
- `session_id` (string): Session ID to reuse an existing session
- `title` (string): Custom title for the note (default: "Chat Summary")

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `note_to_source` (~165 tokens)

Convert a note to a source document in NotebookLM.

This feature allows you to convert an existing note into a source, making the note content available for RAG queries and research.

The method:
1\. Finds the note by title in the Studio panel
2\. Attempts to use NotebookLM's native "Convert to source" feature if available
3\. Falls back to extracting note content and creating a text source if not

Use this when you want your note content to be included in NotebookLM's knowledge base for answering questions.

Input parameters:

- `note_title` (string, required): Title of the note to convert (required)
- `notebook_url` (string): Notebook URL. If not provided, uses the active notebook.
- `session_id` (string): Session ID to reuse an existing session

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `vault_batch` (~410 tokens)

Run a list of questions against a notebook and persist each answer to disk as two artifacts: `{slug}.md` (markdown with YAML frontmatter, answer body and cited source excerpts) and `{slug}.json` (structured payload conforming to the nblm-answer-v1 schema). Designed for one-shot ingestion of a notebook into a searchable markdown vault (e.g. for indexing with RTFM) — every answer keeps titles + highlighted excerpts, so repeat queries no longer need to round-trip through NotebookLM.

Reuses the same browser/session as ask_question — no HTTP server required. Pass `sleep_between_ms` (1500–3000ms) for batches above ~20 questions to avoid hammering NotebookLM.

Returns per-question file paths, success flags, citation counts and the resolved session id. See the RTFM integration guide for the recommended workflow.

Input parameters:

- `notebook_id` (string): Optional library notebook id to query. Falls back to the active notebook.
- `notebook_url` (string): Optional NotebookLM URL (overrides notebook_id). Use for ad-hoc notebooks.
- `questions` (array, required): Non-empty array of question strings to ask sequentially.
- `session_id` (string): Optional session id to reuse for context continuity across the batch.
- `sleep_between_ms` (number): Pause between questions in ms. 1500–3000 is sane for batches above ~20.
- `slug_prefix` (string): Optional filename prefix (e.g. "sota", "market-2026q2"). Default: "".
- `source_format` (string): Citation extraction mode. "json" (default) preserves titles + excerpts in the sidecar.
- `vault_dir` (string, required): Destination directory (absolute or relative). Created with mkdir -p if missing. Set NOTEBOOKLM_VAULT_ROOT in the server env to confine writes under a single root (recommended for shared/remote setups…

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `notebook_list` (~133 tokens)

Scrape the NotebookLM homepage to get a real list of all notebooks with their IDs and names.

This tool navigates to notebooklm.google.com and extracts:
\- Notebook ID (UUID from URL)
\- Notebook name (displayed title)
\- Notebook URL

Use this to:
\- Discover notebooks not yet in your library
\- Get accurate notebook IDs for automation
\- Verify which notebooks exist in your account
\- Find notebooks to delete when cleanup is needed

Note: Requires authentication. Run setup_auth first if not authenticated.

Input parameters:

- `show_browser` (boolean): Show browser window during scraping. Default: false (headless).

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `notebook_create` (~296 tokens)

Create a brand-new empty notebook directly in NotebookLM (no pre-existing URL required, unlike `add_notebook` which only registers an already-created notebook into the library).

Returns `{ notebook_url, notebook_id, name_applied, actual_name, message }`.
\- `notebook_url` / `notebook_id`: always the FINAL UUID-based URL (the tool waits past the `/notebook/creating/c` transitional URL).
\- `name_applied` (boolean): whether the `name` parameter actually took effect. `false` means the notebook is still "Untitled notebook" — rename via UI if needed.
\- `actual_name` (string): the title observed on the notebook after creation.

Typical workflow:
1\) `create_notebook({ name?: "my-research" })` → `{ notebook_url, notebook_id, name_applied, actual_name }`
2\) `add_source({ notebook_url, source_type: "url", source: "https://..." })`
3\) `ask_question({ notebook_url, question: "..." })`

Note: Requires authentication. Run `setup_auth` first if not authenticated.

Input parameters:

- `name` (string): Optional initial title for the notebook. NotebookLM will auto-name it if omitted (usually "Untitled notebook"). The title can be edited later via the UI.
- `show_browser` (boolean): Show browser window during creation. Default: false (headless).

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `notebook_delete` (~202 tokens)

Delete one or more notebooks directly from NotebookLM (UI-level deletion, not just from the local library). Pass an array of notebook IDs (UUIDs from `list_notebooks_from_nblm`).

Returns `{ deleted: [...], failed: [...] }` so the caller can retry or report on partial failures.

Use this to:
\- Bulk-clean up a NotebookLM account (e.g. test notebooks from automation runs)
\- Free up the 100-notebook free-tier quota
\- Remove notebooks no longer covered by your sources

Warning: This is irreversible at the NotebookLM side. Confirm with the user before calling.
Note: Requires authentication. Run `setup_auth` first if not authenticated.

Input parameters:

- `notebook_ids` (array, required): Array of NotebookLM notebook IDs (UUIDs) to delete. Use `list_notebooks_from_nblm` to discover them.
- `show_browser` (boolean): Show browser window during deletion. Default: false (headless).

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `note_list` (~70 tokens)

List all user notes in the NotebookLM Studio panel. Returns note titles, IDs, and timestamps (e.g. details).

Input parameters:

- `notebook_url` (string): Optional NotebookLM URL. If not provided, uses the active notebook.
- `session_id` (string): Optional Session ID to reuse an existing session.

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `note_get` (~91 tokens)

Retrieve the full title and text content of a specific note in the NotebookLM Studio panel.

Input parameters:

- `note_id` (string): Optional note ID.
- `note_title` (string, required): The title of the note to retrieve content for.
- `notebook_url` (string): Optional NotebookLM URL. If not provided, uses the active notebook.
- `session_id` (string): Optional Session ID to reuse an existing session.

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `share_notebook` (~122 tokens)

Read a notebook’s sharing status, or toggle its public link. Omit `set_public` to just read status (public link on/off, owner/collaborators). Set `set_public: true`/`false` to enable/disable the public link. RPC-backed (no browser).

Input parameters:

- `notebook_id` (string): Notebook UUID (alternative to notebook_url).
- `notebook_url` (string): NotebookLM notebook URL.
- `set_public` (boolean): Optional. true = enable public link, false = restrict. Omit to only read status.

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `generate_study_aid` (~91 tokens)

Generate a study aid from a notebook’s sources: flashcards or a quiz. RPC-backed (no browser). Returns when generation completes.

Input parameters:

- `focus` (string): Optional focus prompt to steer the content.
- `kind` (string, required): Which study aid to generate.
- `notebook_id` (string): Notebook UUID (alternative to notebook_url).
- `notebook_url` (string): NotebookLM notebook URL.

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `generate_mind_map` (~80 tokens)

Generate and save a mind map from a notebook’s sources. RPC-backed (no browser). Returns the saved mind-map id and its JSON structure.

Input parameters:

- `notebook_id` (string): Notebook UUID (alternative to notebook_url).
- `notebook_url` (string): NotebookLM notebook URL.
- `title` (string): Optional title for the saved mind map.

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `manage_labels` (~122 tokens)

Manage a notebook’s source labels (RPC-backed): list them, create one, or delete some. action=list (default) / create (needs name) / delete (needs label_ids).

Input parameters:

- `action` (string): Default list.
- `emoji` (string): Optional label emoji (for create).
- `label_ids` (array): Label ids to delete (for delete).
- `name` (string): Label name (for create).
- `notebook_id` (string): Notebook UUID (alternative to notebook_url).
- `notebook_url` (string): NotebookLM notebook URL.

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

### `research_sources` (~99 tokens)

Discover web sources for a notebook via NotebookLM Fast Research. RPC-backed. Returns the found sources; set `import: true` to also add them to the notebook.

Input parameters:

- `import` (boolean): If true, import the discovered sources into the notebook.
- `notebook_id` (string): Notebook UUID (alternative to notebook_url).
- `notebook_url` (string): NotebookLM notebook URL.
- `query` (string, required): What to research on the web.

Output parameters:

- `data` (object): The tool payload on success. The exact shape depends on the tool.
- `error` (string): Human-readable error message, present only when success is false.
- `success` (boolean): Whether the tool call succeeded.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/roomi-fields-notebooklm-mcp/roomi-fields-notebooklm-mcp#diagnostics

## Score history

- 2026-08-07: 62
- 2026-08-06: 62
- 2026-08-05: 35
- 2026-08-04: 66
- 2026-08-03: 62
- 2026-08-02: 62
- 2026-08-01: 25
- 2026-07-31: 25
- 2026-07-30: 9
- 2026-07-28: 51
- 2026-07-27: 51

## Links

- npm package: https://www.npmjs.com/package/@roomi-fields/notebooklm-mcp
- Socket report: https://socket.dev/npm/package/@roomi-fields/notebooklm-mcp
- Repository: https://github.com/roomi-fields/notebooklm-mcp
- Changelog RSS feed: https://verifymcp.io/servers/roomi-fields-notebooklm-mcp/roomi-fields-notebooklm-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/roomi-fields-notebooklm-mcp/roomi-fields-notebooklm-mcp.json
- HTML version of this page: https://verifymcp.io/servers/roomi-fields-notebooklm-mcp/roomi-fields-notebooklm-mcp
