NotebookLM MCP Server (Security Hardened)
The NotebookLM MCP Server (Security Hardened) provides programmatic, security-hardened control over Google NotebookLM with 30+ tools, optional Gemini API integration, and enterprise-grade compliance features.
Notebook & Source Management
Create notebooks with sources (URLs, files, text); batch create up to 10 at once
List, search, update, remove, and sync notebooks with your actual NotebookLM library
Add, list, and remove sources (including bulk folder uploads); select an active notebook
Research & Querying
Ask questions to notebooks for source-grounded, zero-hallucination answers
Extract chat history from NotebookLM's browser UI (pagination + file export)
Review past sessions via query history with search and filtering
Gemini API (Optional)
Deep Research — comprehensive, citation-backed web-grounded analysis
Gemini Query — fast queries with Google Search, code execution, and URL context
Document API — upload (up to 50MB/1000-page PDFs), query, list, and delete documents; auto-chunking for large PDFs; 48-hour retention
Audio & Video Generation
Generate podcast-style audio overviews (5–15 min), check status, and download
Generate video overviews with 10 visual styles (e.g., kawaii, anime, whiteboard) in explainer or brief format
Data Extraction
Generate structured JSON data tables from notebook sources and extract headers/rows for downstream analysis
Security (17 Layers)
Post-quantum encryption (ML-KEM-768 + ChaCha20-Poly1305), secrets scanning (30+ patterns), certificate pinning, memory scrubbing, tamper-evident audit logging, prompt injection detection, and token-based auth with brute-force lockout
Enterprise Compliance
16 compliance tools supporting GDPR, SOC2 Type II, and CSSF (consent management, DSAR, erasure, audit reports, incident response)
Session & System Management
List, close, and reset browser sessions; multi-session support with isolated profiles
Health checks with deep NotebookLM UI verification
Quota management (free/pro/ultra tiers), authentication setup/re-authentication, and deep cleanup utility
Cross-platform support (Linux, macOS, Windows)
Enables Google Search grounding for Gemini queries to retrieve current information and web data through the Gemini API integration.
Provides access to Gemini Deep Research for comprehensive multi-source analysis with citations, Gemini API for grounded queries with Google Search integration and code execution, and the Gemini Files API for document upload and analysis. Supports multiple Gemini models including gemini-2.5-flash, gemini-2.5-pro, and gemini-3-flash-preview.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@NotebookLM MCP Server (Security Hardened)Research quantum-resistant encryption standards for healthcare data"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
NotebookLM MCP Server (Security Hardened)
🏆 The World's Most Advanced NotebookLM MCP Server
Zero-hallucination answers • Gemini Deep Research • 17 Security Layers • Enterprise Compliance
What's New 2026 • Deep Research • Document API • Create Notebooks • Security • Install
The only NotebookLM MCP with enterprise-grade security, post-quantum encryption, and full Gemini API integration.
Security-hardened fork of PleasePrompto/notebooklm-mcp • Maintained by Pantheon Security
⚡ TL;DR — What You Get
🔍 Query your NotebookLM notebooks — source-grounded, zero-hallucination answers
📚 Create & manage notebooks programmatically — no manual clicking
🎙️ Generate audio overviews — podcast-style summaries of your docs
🎬 Generate video overviews — AI video summaries with 10 visual styles NEW
📊 Extract data tables — structured JSON from notebook sources NEW
🔬 Gemini 3 + Deep Research — latest models with thinking control (optional API) NEW
📄 Document API — upload & query PDFs without browser (optional API)
🔐 17 security layers — post-quantum encryption, audit logs, secrets scanning
✅ Compliance-ready architecture — built to GDPR, SOC2, and CSSF standards (controls implemented; formal certification requires third-party audit)
💡 No API key required — core features work with just browser auth
🚀 What's New in 2026
Latest: v2026.3.1 — All 334 audit issues resolved. 631 tests. Full MCP protocol compliance.
Version | Highlights |
v2026.3.1 | Security Audit Complete — All 334 issues from the independent audit resolved. Tests: 609 → 631. Code quality: URL resolution deduplicated, handler extraction, non-null assertions eliminated. Test gaps closed: |
v2026.3.0 | The Security Audit Release — Four parallel AI code reviews (security, protocol, architecture, testing) against 334 issues. All highs and mediums resolved. Tests: 139 → 609 across 50 files (4.4×). Full MCP protocol compliance: structuredContent, isError, transport tags. Schema bounds on all 48 tools. Annotation correctness. Webhook SSRF fix. Audit log integrity (hash chain, concurrent write lock, rotation continuity). Per-page mutex. HandlerContext DI. Cert pinning retracted (claims aligned with implementation). |
v2026.2.10 | The Hardening Release — 3 new security layers (14→17): secure-by-default auth, exponential backoff lockout, credential isolation. Architecture overhaul: 3,611-line handler split into 9 domain modules, tool registry pattern. Gemini API retry with backoff. Multi-stage Docker build. Token CLI ( |
v2026.2.9 |
|
v2026.2.8 |
|
v2026.2.7 | Block headless |
v2026.2.6 | New |
v2026.2.5 | Fix |
v2026.2.4 | Auth stability: 7-day state expiry, |
v2026.2.3 | Studio Panel tools restored: Video Overview, Data Table generation re-enabled |
v2026.2.1 | Standard profile expanded: 14 → 33 tools — notebook creation, audio, source management now visible by default |
v2026.2.0 | Gemini 3 models (2.5 retiring March 31), Video Overviews, Data Tables, thinking level, structured JSON, SDK 1.41 |
v2026.1.12 | Security hardening: constant-time auth, command injection fix, memory leak fixes, MCP SDK 1.26.0 |
v2026.1.11 | Notebook sync extraction for new Angular UI, |
v2026.1.10 | Tool description clarity for multi-LLM compatibility |
v2026.1.9 | Documentation & UX improvements, npm audit fix |
v2026.1.8 | Major dependency updates (zod 4.x, dotenv 17.x, post-quantum 0.5.4) |
v2026.1.7 | MCP Protocol UX: tool icons, human-friendly titles, behavior annotations |
v2026.1.4 | Defense-in-depth path validation, security hardening |
v2026.1.1 | Deep health checks, chat history extraction, context management |
# Quick install
claude mcp add notebooklm -- npx @pan-sec/notebooklm-mcp@latestWhy Choose This MCP?
Capability | Other MCPs | This MCP |
Query NotebookLM | ✅ Basic | ✅ + session management, quotas |
Create notebooks programmatically | ❌ | ✅ UNIQUE |
Gemini Deep Research | ❌ | ✅ EXCLUSIVE |
Document API (no browser) | ❌ | ✅ EXCLUSIVE |
Post-quantum encryption | ❌ | ✅ Hybrid PQ at-rest |
Enterprise compliance | ❌ | ✅ GDPR/SOC2/CSSF-ready |
Video Overview generation | ❌ | ✅ NEW |
Data Table extraction | ❌ | ✅ NEW |
Chat history extraction | ❌ | ✅ |
Deep health verification | ❌ | ✅ |
Related MCP server: NotebookLM MCP Server
🔬 Security Audit 2026 — What We Found and Fixed
In April 2026, we commissioned a parallel deep-audit of v2026.2.11 (main @ 2973097) using four specialised AI code reviewers, each focused on a different attack surface: security vulnerabilities, protocol correctness, architecture quality, and testing gaps and edge cases. The four reviewers operated independently so their findings wouldn't influence each other. Together they produced a 334-item master issue list covering protocol correctness, security vulnerabilities, architecture flaws, test gaps, and documentation accuracy. All 334 issues are resolved across v2026.3.0 and v2026.3.1.
Audit by the Numbers
Metric | Before (v2026.2.11) | After (v2026.3.1) |
Tests | 139 | 631 across 50 files |
Test suites | ~6 | 50 |
TypeScript errors ( | 0 | 0 (maintained) |
npm audit vulnerabilities | 0 | 0 (maintained) |
MCP protocol compliance | Partial | Full (structuredContent, isError, transport tags) |
Audit log integrity | Basic | Hash-chain verified on read |
Concurrent write safety | ❌ | ✅ Write-locked |
Webhook SSRF | ❌ | ✅ Blocked |
What the Four Reviewers Found
Security reviewer: Identified the forceAuth bypass in validateToken() allowing unauthenticated access to filesystem tools; webhook SSRF via unvalidated delivery targets; audit log hash chain not verified on read; concurrent audit writes interleaving entries; auth token salt not persisted (tokens invalidated on restart).
Protocol reviewer: Found 38 tools returning incorrect response shapes (missing structuredContent, wrong isError semantics, transport tags leaking into content); all 48 tools had incorrect or missing readOnlyHint/idempotentHint/destructiveHint annotations; 9 tool schemas lacked numeric bounds, enabling out-of-range inputs.
Architecture reviewer: Flagged the 3,611-line handlers.ts as a maintenance liability; singleton imports throughout domain functions preventing unit testing; the 500-line switch/case dispatch adding O(n) overhead and making tool registration error-prone.
Testing & edge-case reviewer: Found test suite at 139 tests with minimal coverage of security-critical modules; mcp-auth.ts at near-zero coverage; no tests for prompt injection patterns, audit log tampering, or concurrent browser session state; the DSAR handler had an undetected race condition.
Key Fixes
17 security vulnerabilities addressed (auth bypass, SSRF, audit integrity, race conditions, selector injection vectors)
MCP protocol fully compliant — all 48 tools return correct
structuredContent/isErrorshapes; annotations accurate; schema bounds enforcedArchitecture decomposed —
handlers.tssplit into 9 domain modules with HandlerContext dependency injection; 100% unit-testable without process mocksTest coverage — 15 new security-critical test suites including browser session, auth, prompt injection, audit log, webhook, DSAR, and compliance
Claims aligned — certificate pinning removed (implementation was retracted in Day 1 of the audit); PQ encryption scope documented accurately; compliance language uses "controls implemented" not "certified"
Core NotebookLM (No API Key Required)
Tool | Description |
| Query notebooks with source-grounded answers |
| Add a notebook to your library |
| List all notebooks in library |
| Set active notebook |
| Update notebook metadata |
| Remove from library |
| Programmatically create new notebooks |
| Create multiple notebooks at once |
| Sync library with NotebookLM |
| List sources in a notebook |
| Add source to notebook |
| Bulk upload PDFs/files from a local folder to a notebook |
| Remove source from notebook |
| Create podcast-style audio |
| Check audio generation status |
| Download generated audio |
| Create AI video overview (10 styles) |
| Check video generation status |
| Generate structured data table |
| Extract data table as JSON |
| List active sessions |
| Close a session |
| Reset session history |
| Check server & auth status |
| Initial authentication |
| Re-authenticate |
| Clean up local data |
| Check usage quotas |
| Set quota tier |
| View past queries |
| Extract browser chat history |
| Get project context |
| Export library backup |
Gemini API (Optional - Requires GEMINI_API_KEY)
Tool | Description |
| Comprehensive research agent |
| Fast grounded queries |
| Check research progress |
| Upload docs to Gemini |
| Query uploaded documents |
| Query large documents |
| List uploaded documents |
| Delete uploaded document |
Webhooks & Integrations
Tool | Description |
| Set up webhook notifications |
| List configured webhooks |
| Test webhook delivery |
| Remove a webhook |
Enterprise Compliance (16 additional tools)
See Compliance Documentation for full list.
Gemini Deep Research (v1.8.0)
The most powerful research capability for AI agents — now in your MCP toolkit.
v1.8.0 introduces the Gemini Interactions API as a stable, API-based research backend alongside browser automation. This gives your agents access to Google's state-of-the-art Deep Research agent.
Why This Matters
Challenge | Solution |
Browser UI changes break automation | Gemini API is stable and versioned |
Need comprehensive research but no research agent | Deep Research agent does it for you |
Want current information with citations | Google Search grounding built-in |
Need reliable, fast queries | API-based = no UI dependencies |
New Tools
deep_research — Comprehensive Research Agent
"Research the security implications of post-quantum cryptography adoption in financial services"Runs Google's Deep Research agent (same as Gemini Advanced)
Takes 1-5 minutes for comprehensive, web-grounded analysis
Returns structured answers with citations and sources
Perfect for complex topics requiring multi-source synthesis
gemini_query — Fast Grounded Queries
"What are the latest CVEs for Log4j in 2025?" (with Google Search)
"Calculate the compound interest on $10,000 at 5% over 10 years" (with code execution)
"Summarize this security advisory: [URL]" (with URL context)Google Search grounding — Current information, not just training data
Code execution — Run calculations, data analysis
URL context — Analyze web pages on demand
Models:
gemini-3-flash-preview(default),gemini-3-pro-preview(powerful),gemini-2.5-flash(legacy)
get_research_status — Background Task Monitoring
Run deep research in the background and check progress:
"Start researching [topic] in the background"
... continue other work ...
"Check research status for interaction_abc123"Hybrid Architecture
┌──────────────────────────────────────────────────────────────────────────────┐
│ NotebookLM MCP Server v2026.3.x │
├──────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────┐ ┌──────────────────────────────────┐ │
│ │ BROWSER AUTOMATION │ │ GEMINI API │ │
│ │ ✅ NO API KEY NEEDED │ │ ⚡ OPTIONAL - needs API key │ │
│ ├────────────────────────────────┤ ├──────────────────────────────────┤ │
│ │ │ │ │ │
│ │ QUERY │ │ RESEARCH │ │
│ │ • ask_question │ │ • deep_research │ │
│ │ • get_notebook_chat_history │ │ • gemini_query │ │
│ │ │ │ • get_research_status │ │
│ │ CREATE & MANAGE │ │ │ │
│ │ • create_notebook │ │ DOCUMENTS │ │
│ │ • batch_create_notebooks │ │ • upload_document │ │
│ │ • manage_sources │ │ • query_document │ │
│ │ • generate_audio │ │ • query_chunked_document │ │
│ │ • generate_video_overview │ │ • list/delete_document │ │
│ │ • generate_data_table │ │ │ │
│ │ • sync_notebook │ │ │ │
│ │ │ │ │ │
│ │ HEALTH & SESSIONS v2026 │ │ │ │
│ │ • get_health (deep_check) │ │ Fast API • 48h retention │ │
│ │ • get_query_history │ │ Auto-chunking for large PDFs │ │
│ └────────────────────────────────┘ └──────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ 17 SECURITY LAYERS │ │
│ │ Post-Quantum • Audit Logs │ │
│ │ Secrets Scan • Memory Wipe │ │
│ │ GDPR • SOC2 • CSSF Ready* │ │
│ └─────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────┘💡 Gemini API is completely optional! All core NotebookLM features (ask_question, notebooks, sessions, audio) work via browser automation with no API key required. The Gemini tools below are bonus features for users who want direct API access.
Gemini Configuration (Optional)
# Only required if you want Gemini API features (deep_research, gemini_query, upload_document)
GEMINI_API_KEY=your-api-key # Get from https://aistudio.google.com/apikey
# Optional settings
GEMINI_DEFAULT_MODEL=gemini-3-flash-preview # Default model (was gemini-2.5-flash)
GEMINI_DEEP_RESEARCH_ENABLED=true # Enable Deep Research
GEMINI_TIMEOUT_MS=30000 # API timeoutWhen to Use Which
Task | Best Tool | Why |
Questions about YOUR documents |
| Grounded on your uploaded sources |
Comprehensive topic research |
| Multi-source synthesis with citations |
Current events / recent info |
| Live web data |
Code calculations |
| Reliable computation |
Analyze a webpage |
| Direct page analysis |
Quick PDF/document analysis |
| Fast API, no browser (NEW!) |
📄 Document API (v1.9.0)
Upload and query documents directly via Gemini API — no browser automation needed.
v1.9.0 introduces the Gemini Files API for fast, reliable document analysis. Upload PDFs, analyze them instantly, and delete when done.
Why This Matters
Feature | Browser Mode | Document API |
Speed | Seconds | Milliseconds |
Reliability | UI-dependent | API-stable |
File Support | Via NotebookLM | 50MB PDFs, 1000 pages |
Retention | Permanent | 48 hours |
Setup | Auth + cookies | Just API key |
New Tools
upload_document — Fast Document Upload
Upload any document to Gemini for instant querying:
Upload /path/to/research-paper.pdfSupported: PDF (50MB, 1000 pages), TXT, MD, HTML, CSV, JSON, DOCX, images, audio, video
48-hour retention — files auto-expire, or delete manually
Returns a file ID for querying
query_document — Ask Questions About Documents
"What are the main findings in this research paper?"
"Summarize section 3 of the document"
"Extract all statistics mentioned in the PDF"Full document understanding (text, tables, charts, diagrams)
Multi-document queries (compare multiple files)
Fast API response (no browser wait)
list_documents — See All Uploaded Files
List all my uploaded documentsShows file names, sizes, MIME types, and expiration times.
delete_document — Clean Up Sensitive Files
Delete file xyz123Immediately remove files (don't wait for 48h expiration).
Workflow Example
1. upload_document("/research/paper.pdf")
→ Returns: files/abc123
2. query_document("files/abc123", "What methodology was used?")
→ Returns: "The paper uses a mixed-methods approach combining..."
3. query_document("files/abc123", "List all cited authors")
→ Returns: "Smith et al. (2024), Johnson (2023)..."
4. delete_document("files/abc123")
→ File removedAuto-Chunking for Large PDFs (v1.10.0)
No file size limits — PDFs of any size are automatically handled.
When you upload a PDF that exceeds Gemini's limits (50MB or 1000 pages), the system automatically:
Detects the oversized PDF
Splits it into optimal chunks (500 pages each)
Uploads all chunks in parallel
Returns chunk metadata for querying
upload_document("/research/massive-2000-page-report.pdf")
→ Returns:
{
"wasChunked": true,
"totalPages": 2000,
"chunks": [
{ "fileName": "files/abc1", "pageStart": 1, "pageEnd": 500 },
{ "fileName": "files/abc2", "pageStart": 501, "pageEnd": 1000 },
{ "fileName": "files/abc3", "pageStart": 1001, "pageEnd": 1500 },
{ "fileName": "files/abc4", "pageStart": 1501, "pageEnd": 2000 }
],
"allFileNames": ["files/abc1", "files/abc2", "files/abc3", "files/abc4"]
}query_chunked_document — Query All Chunks at Once
For chunked documents, use this tool to query all parts and get an aggregated answer:
query_chunked_document(
file_names: ["files/abc1", "files/abc2", "files/abc3", "files/abc4"],
query: "What are the key recommendations in this report?"
)
→ Queries each chunk, then synthesizes a unified answerWhen to Use Document API vs NotebookLM
Scenario | Use |
Quick one-off document analysis | Document API — fast, no setup |
Building a permanent knowledge base | NotebookLM — permanent storage |
Analyzing sensitive documents | Document API — 48h auto-delete |
Multi-source research over time | NotebookLM — organized notebooks |
CI/CD pipeline document processing | Document API — API-native |
Large PDFs (1000+ pages) | Document API — auto-chunking |
Programmatic Notebook Creation (v1.7.0+)
Create NotebookLM notebooks entirely from code — no manual clicks required.
Most MCP servers can only read from NotebookLM. This one can create notebooks, add sources, and generate audio — all programmatically.
create_notebook — Build Notebooks Instantly
Create a complete notebook with multiple sources in one command:
{
"name": "Security Research 2025",
"sources": [
{ "type": "url", "value": "https://owasp.org/Top10" },
{ "type": "file", "value": "/path/to/security-report.pdf" },
{ "type": "text", "value": "Custom analysis notes...", "title": "My Notes" }
],
"description": "OWASP security best practices",
"topics": ["security", "owasp", "vulnerabilities"]
}Supported source types:
URL — Web pages, documentation, articles
File — PDF, DOCX, TXT, and more
Text — Raw text, code snippets, notes
batch_create_notebooks — Scale Up
Create up to 10 notebooks in a single operation:
{
"notebooks": [
{ "name": "React Docs", "sources": [{ "type": "url", "value": "https://react.dev/reference" }] },
{ "name": "Node.js API", "sources": [{ "type": "url", "value": "https://nodejs.org/api/" }] },
{ "name": "TypeScript Handbook", "sources": [{ "type": "url", "value": "https://www.typescriptlang.org/docs/" }] }
]
}Perfect for:
Setting up project documentation libraries
Onboarding new team members with curated knowledge bases
Creating topic-specific research notebooks in bulk
manage_sources — Dynamic Source Management
Add or remove sources from existing notebooks:
{
"notebook_id": "abc123",
"action": "add",
"sources": [{ "type": "url", "value": "https://new-documentation.com" }]
}generate_audio — Audio Overview Creation
Generate NotebookLM's famous "Audio Overview" podcasts programmatically:
"Generate an audio overview for my Security Research notebook"sync_notebook — Keep Sources Updated
Sync notebook sources from a local directory:
{
"notebook_id": "abc123",
"directory": "/path/to/docs",
"patterns": ["*.md", "*.pdf"]
}Why This Matters
Traditional Workflow | With This MCP |
Manually create notebook in browser |
|
Click "Add source" for each document | Batch add in single command |
Navigate UI to generate audio |
|
Update sources by hand |
|
Your agent can now build entire knowledge bases autonomously.
🎬 Video Overviews & Data Tables (v2026.2.0)
Generate AI-powered visual summaries and extract structured data from any notebook — all programmatically.
NotebookLM's Studio panel now offers Video Overviews and Data Tables alongside Audio Overviews. This release brings full automation for both.
generate_video_overview — AI Video Summaries
Generate visual video overviews of your notebook content with 10 visual styles:
Style | Description |
| Let NotebookLM choose the best style (default) |
| Clean presentation style |
| Hand-drawn whiteboard aesthetic |
| Cute illustrated style |
| Anime-inspired visuals |
| Watercolour painting style |
| Retro print aesthetic |
| Traditional heritage style |
| Paper-craft visual style |
| Custom visual style |
Two formats:
Explainer — Full explanation (5-15 min)
Brief — Quick summary (1-3 min)
"Generate a kawaii-style brief video overview for my Security Research notebook"get_video_status — Check Generation Progress
Video generation takes 3-10 minutes. Check progress:
"Check video status for my Security Research notebook"
→ { "status": "generating", "progress": 0 }
→ { "status": "ready" }generate_data_table — Structured Data Extraction
Generate a structured table from your notebook sources. NotebookLM extracts key information into rows and columns:
"Generate a data table for my research notebook"get_data_table — Extract Table as JSON
Extract the generated table as structured JSON for processing:
"Get the data table from my research notebook"
→ {
"headers": ["Title", "Year", "Key Finding", "Methodology", ...],
"rows": [["Paper A", "2025", "Finding X", "Survey", ...], ...],
"totalRows": 27,
"totalColumns": 7
}When to Use Which Studio Feature
Task | Best Tool | Why |
Podcast-style audio summary |
| Shareable audio content |
Visual presentation of research |
| Engaging video summary |
Structured data for analysis |
| Machine-readable JSON |
Quick status check |
| Non-blocking progress |
📊 Query History & Chat Extraction (v2026.1.0)
Track your research and recover conversations from NotebookLM notebooks.
get_query_history — Review Past Research (v1.10.8)
All queries made through the MCP are automatically logged for review:
"Show me my recent NotebookLM queries"
"Find queries about security from last week"
"What did I ask the fine-tuning notebook?"Automatic logging — every Q&A pair saved with metadata
Search — find specific topics across all queries
Filter — by notebook, session, or date
Quota tracking — see query counts and timing
get_notebook_chat_history — Extract Browser Conversations (v2026.1.0)
Extract conversation history directly from a NotebookLM notebook's chat UI with context management to avoid overwhelming your AI context window:
Quick audit (preview mode):
{ "notebook_id": "my-research", "preview_only": true }Returns message counts without content — test the water before extracting.
Export to file (avoids context overflow):
{ "notebook_id": "my-research", "output_file": "/tmp/chat-history.json" }Dumps full history to disk instead of returning to context.
Paginate through history:
{ "notebook_id": "my-research", "limit": 20, "offset": 0 }
{ "notebook_id": "my-research", "limit": 20, "offset": 20 }Page through large histories without loading everything at once.
Returns:
{
"notebook_url": "https://notebooklm.google.com/notebook/xxx",
"notebook_name": "My Research",
"total_messages": 150,
"returned_messages": 40,
"user_messages": 75,
"assistant_messages": 75,
"offset": 0,
"has_more": true,
"messages": [...]
}Use cases:
Recover conversations made directly in the NotebookLM browser (not tracked by MCP)
Audit research — see what queries were made in a notebook
Resume context — pick up where a previous session left off
Quota reconciliation — understand why quota seems off
Why This Fork?
The original NotebookLM MCP is excellent for productivity — but MCP servers handle sensitive data:
Browser sessions with Google authentication
Cookies and tokens stored on disk
Query history that may contain proprietary information
This fork adds 17 security hardening layers to protect that data.
Security Features
Layer | Feature | Protection |
🔐 | Post-Quantum Encryption | ML-KEM-768 + ChaCha20-Poly1305 hybrid (local at-rest) |
🔍 | Secrets Scanning | Detects 30+ credential patterns (AWS, GitHub, Slack...) |
🧹 | Memory Scrubbing | Zeros sensitive data after use |
📝 | Audit Logging | Tamper-evident logs with hash chains |
⏱️ | Session Timeout | 8h hard limit + 30m inactivity auto-logout |
🎫 | MCP Authentication | Token-based auth with brute-force lockout |
🛡️ | Response Validation | Detects prompt injection attempts |
✅ | Input Validation | URL whitelisting, sanitization |
🚦 | Rate Limiting | Per-session request throttling |
🙈 | Log Sanitization | Credentials masked in all output |
🐍 | MEDUSA Integration | Automated security scanning |
🖥️ | Cross-Platform | Native support for Linux, macOS, Windows |
🔒 | Secure-by-Default Auth | Auth ON without configuration, explicit opt-out required |
📈 | Exponential Backoff | Lockout escalation: 5min → 15min → 45min → 4hr cap |
🗝️ | Credential Isolation | SecureCredential TTL + env var scrubbing from process.env |
Post-Quantum Primitives (Local At-Rest)
Encryption of secrets on disk uses hybrid post-quantum primitives:
ML-KEM-768 (Kyber) + ChaCha20-Poly1305ML-KEM-768: NIST-standardized post-quantum key encapsulation
ChaCha20-Poly1305: Modern stream cipher (immune to timing attacks)
Scope, honestly: this is local at-rest encryption. Both keys live on the same machine — the PQ secret key is wrapped with a classical key derived from a machine-bound secret, not held by a remote recipient. This protects against offline theft of individual encrypted files, not against Harvest-Now-Decrypt-Later attacks (those require a remote PQ recipient holding the unwrap key).
Cross-Platform Support
Full native support for all major operating systems:
Platform | File Permissions | Data Directory |
Linux | Unix chmod (0o600/0o700) |
|
macOS | Unix chmod (0o600/0o700) |
|
Windows | ACLs via icacls (current user only) |
|
All sensitive files (encryption keys, auth tokens, audit logs) are automatically protected with owner-only permissions on every platform.
Enterprise Compliance-Ready Architecture (v1.6.0+)
Built to the standards required for regulated industries. All code-level technical controls are implemented — full compliance also requires organizational process controls (policies, training, vendor management). Formal certification (SOC2 Type II report, GDPR registration, CSSF submission) requires a third-party audit engagement.
Regulation | Controls Implemented |
GDPR | Consent management, DSAR handling, right to erasure, data portability |
SOC2 Type II | Hash-chained audit logs, incident response, availability monitoring |
CSSF | 7-year retention, SIEM integration, policy documentation |
Compliance Tools (16 MCP tools)
compliance_dashboard - Real-time compliance status
compliance_report - Generate audit reports (JSON/CSV/HTML)
compliance_evidence - Collect evidence packages
grant_consent - Record user consent
submit_dsar - Handle data subject requests
request_erasure - Right to be forgotten
export_user_data - Data portability export
create_incident - Security incident management
...and 8 moreSee COMPLIANCE-SPEC.md for full documentation.
Installation
What Works Out of the Box (No API Key)
All core NotebookLM features work immediately with just browser authentication:
Feature | Tool | Description |
🔍 Query notebooks |
| Get source-grounded answers from your documents |
📚 Manage library |
| Organize your notebook collection |
🎙️ Audio overviews |
| Create podcast-style summaries |
🎬 Video overviews |
| AI video summaries with 10 visual styles NEW |
📊 Data tables |
| Structured data extraction as JSON NEW |
📝 Create notebooks |
| Programmatically create new notebooks |
🔄 Session management |
| Manage conversation context |
📊 Chat history |
| Extract past conversations |
❤️ Health checks |
| Verify authentication status |
Optional: Add GEMINI_API_KEY for bonus features like deep_research, gemini_query, and upload_document.
For repeatable authenticated validation, see the Authenticated Testing Runbook.
Claude Code
claude mcp add notebooklm -- npx @pan-sec/notebooklm-mcp@latestWith Authentication + Gemini (Recommended)
claude mcp add notebooklm \
--env NLMCP_AUTH_ENABLED=true \
--env NLMCP_AUTH_TOKEN=$(openssl rand -base64 32) \
--env GEMINI_API_KEY=your-gemini-api-key \
-- npx @pan-sec/notebooklm-mcp@latestCodex
codex mcp add notebooklm -- npx @pan-sec/notebooklm-mcp@latestAdd to ~/.cursor/mcp.json:
{
"mcpServers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@pan-sec/notebooklm-mcp@latest"],
"env": {
"NLMCP_AUTH_ENABLED": "true",
"NLMCP_AUTH_TOKEN": "your-secure-token",
"GEMINI_API_KEY": "your-gemini-api-key"
}
}
}
}Add to ~/.gemini/antigravity/mcp_config.json (macOS/Linux) or %USERPROFILE%\.gemini\antigravity\mcp_config.json (Windows):
{
"mcpServers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@pan-sec/notebooklm-mcp@latest"]
}
}
}With optional env vars:
{
"mcpServers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@pan-sec/notebooklm-mcp@latest"],
"env": {
"GEMINI_API_KEY": "your-gemini-api-key"
}
}
}
}Note: Antigravity does NOT support
${workspaceFolder}variables. Use absolute paths.
Add to ~/.config/opencode/opencode.json (global) or opencode.json in project root:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"notebooklm": {
"type": "local",
"command": ["npx", "-y", "@pan-sec/notebooklm-mcp@latest"],
"enabled": true,
"environment": {
"GEMINI_API_KEY": "your-gemini-api-key"
}
}
}
}Note: OpenCode uses
"mcp"(not"mcpServers") and"command"is an array.
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@pan-sec/notebooklm-mcp@latest"],
"env": {
"GEMINI_API_KEY": "your-gemini-api-key"
}
}
}
}Add to your VS Code settings.json:
{
"mcp": {
"servers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@pan-sec/notebooklm-mcp@latest"],
"env": {
"GEMINI_API_KEY": "your-gemini-api-key"
}
}
}
}
}Most MCP clients use this standard format:
{
"mcpServers": {
"notebooklm": {
"command": "npx",
"args": ["-y", "@pan-sec/notebooklm-mcp@latest"],
"env": {
"GEMINI_API_KEY": "your-gemini-api-key"
}
}
}
}Common config locations:
Client | Config File |
Claude Desktop |
|
Cursor |
|
Antigravity |
|
OpenCode |
|
Windsurf |
|
Quick Start
1. Install (see above)
2. Authenticate
"Log me in to NotebookLM"Chrome opens → sign in with Google
3. Add your notebook
Go to notebooklm.google.com → Create notebook → Upload docs → Share link
4. Use it
"Research [topic] using this NotebookLM: [link]"5. Try Deep Research (NEW!)
"Use deep research to investigate [complex topic]"Complete Tool Reference
Research Tools
Tool | Description | Backend |
| Query your NotebookLM notebooks | Browser |
| Comprehensive research with citations | Gemini API |
| Fast queries with grounding tools | Gemini API |
| Check background research progress | Gemini API |
Notebook Management
Tool | Description |
| Add notebook to library |
| List all notebooks |
| Get notebook details |
| Update notebook metadata |
| Remove from library |
| Set active notebook |
| Search by query |
Source Management (v1.7.0+)
Tool | Description |
| Add/remove/list sources |
| Create Audio Overview |
| Sync sources from local files |
Studio Features (v2026.2.0)
Tool | Description |
| Create AI video overview (10 visual styles, 2 formats) |
| Check video generation progress |
| Generate structured data table from sources |
| Extract data table as JSON (headers + rows) |
Session & System
Tool | Description |
| View active sessions |
| Close a session |
| Reset session chat |
| Server health check (with deep_check for UI verification) |
| Review past queries with search/filter |
| Extract browser conversations (pagination, file export) |
| Initial authentication |
| Re-authenticate |
| Deep cleanup utility |
| Library statistics |
| Check usage limits and remaining quota |
Compliance (v1.6.0+)
16 compliance tools for GDPR, SOC2, and CSSF requirements.
What Gets Protected
Data | Protection |
Browser cookies | Post-quantum encrypted at rest |
Session tokens | Auto-expire + memory scrubbing |
Query history | Audit logged with tamper detection |
Google connection | TLS with response validation |
Log output | Credentials auto-redacted |
API responses | Scanned for leaked secrets |
Gemini API key | Secure memory handling |
Configuration
All security features are enabled by default. Override via environment variables:
# Authentication
NLMCP_AUTH_ENABLED=true
NLMCP_AUTH_TOKEN=your-secret-token
# Gemini API (v1.8.0+)
GEMINI_API_KEY=your-api-key
GEMINI_DEFAULT_MODEL=gemini-3-flash-preview # Default (was gemini-2.5-flash)
GEMINI_DEEP_RESEARCH_ENABLED=true
GEMINI_TIMEOUT_MS=30000
NOTEBOOKLM_NO_GEMINI=false # Set to true to disable all Gemini tools
# Tool Profiles
NOTEBOOKLM_PROFILE=standard # minimal (5 tools) | standard (33 tools) | full (all 47)
NOTEBOOKLM_DISABLED_TOOLS= # Comma-separated list of tools to hide
# Encryption
NLMCP_USE_POST_QUANTUM=true
NLMCP_ENCRYPTION_KEY=base64-32-bytes # Optional custom key
# Session Limits
NLMCP_SESSION_MAX_LIFETIME=28800 # 8 hours
NLMCP_SESSION_INACTIVITY=1800 # 30 minutes
# Secrets Scanning
NLMCP_SECRETS_SCANNING=true
NLMCP_SECRETS_BLOCK=false # Block on detection
NLMCP_SECRETS_REDACT=true # Auto-redact
# Audit Logging
NLMCP_AUDIT_ENABLED=true
# Multi-Session Support (v2026.1.2+)
NOTEBOOK_PROFILE_STRATEGY=isolated # isolated|single|auto
NOTEBOOK_CLONE_PROFILE=true # Clone auth from base profileMulti-Session Mode
Run multiple Claude Code sessions simultaneously with isolated browser profiles:
# Add to ~/.bashrc or ~/.zshrc
export NOTEBOOK_PROFILE_STRATEGY=isolated
export NOTEBOOK_CLONE_PROFILE=trueVariable | Values | Description |
|
|
|
|
| Clone authenticated base profile into isolated instances |
How it works:
Each session gets its own Chrome profile (no lock conflicts)
Isolated profiles clone from the authenticated base profile
Auth coordination ensures cloning waits for any in-progress authentication
See SECURITY.md for complete configuration reference.
Security Scanning
Run MEDUSA security scanner:
npm run security-scanOr integrate in CI/CD:
- name: Security Scan
run: npx @pan-sec/notebooklm-mcp && npm run security-scanComparison
vs Other NotebookLM MCPs
Feature | Others | @pan-sec/notebooklm-mcp |
Zero-hallucination Q&A | ✅ | ✅ |
Library management | ✅ | ✅ |
Create Notebooks Programmatically | ❌ | ✅ EXCLUSIVE |
Batch Create (10 notebooks) | ❌ | ✅ EXCLUSIVE |
Gemini Deep Research | ❌ | ✅ EXCLUSIVE |
Document API (no browser) | ❌ | ✅ EXCLUSIVE |
Auto-chunking (1000+ page PDFs) | ❌ | ✅ EXCLUSIVE |
Chat History Extraction | ❌ | ✅ NEW |
Deep Health Verification | ❌ | ✅ NEW |
Query History & Search | ❌ | ✅ |
Quota Management | ❌ | ✅ |
Source Management (add/remove) | ❌ | ✅ |
Audio Overview Generation | ❌ | ✅ |
Video Overview Generation (10 styles) | ❌ | ✅ NEW |
Data Table Extraction (JSON) | ❌ | ✅ NEW |
Gemini 3 + Thinking Control | ❌ | ✅ NEW |
Structured JSON Output | ❌ | ✅ NEW |
Sync from Local Directories | ❌ | ✅ |
Security & Compliance (Unique to This Fork)
Feature | Others | @pan-sec/notebooklm-mcp |
Cross-platform (Linux/macOS/Windows) | ⚠️ Partial | ✅ Full |
Post-quantum encryption | ❌ | ✅ ML-KEM-768 + ChaCha20 (local at-rest) |
Secrets scanning | ❌ | ✅ 30+ patterns |
Memory scrubbing | ❌ | ✅ Zero-on-free |
Audit logging | ❌ | ✅ Hash-chained |
MCP authentication | ❌ | ✅ Token + lockout |
Prompt injection detection | ❌ | ✅ Response validation |
GDPR Compliance | ❌ | ✅ Controls implemented* |
SOC2 Type II | ❌ | ✅ Controls implemented* |
CSSF (Luxembourg) | ❌ | ✅ Controls implemented* |
* Compliance-ready: code-level technical controls are implemented. Full compliance also requires organizational process controls and formal certification via third-party audit.
Bottom line: If you need more than basic queries, or care about security, there's only one choice.
Version History
Version | Highlights |
v2026.3.1 | ✅ Security Audit Complete — All 334 issues resolved. Tests 609→631. Code quality + test gap phase. |
v2026.3.0 | 🔬 Security Audit Release — 334-issue independent audit. Tests 139→609 (50 files). Full MCP protocol compliance. Webhook SSRF fix. Audit log hash-chain verified on read. Per-page mutex. HandlerContext DI. Cert pinning retracted. |
v2026.2.9 | 🔐 |
v2026.2.8 | 🛡️ |
v2026.2.7 | 🚫 Block headless |
v2026.2.6 | 📁 New |
v2026.2.5 | 🔧 Fix: |
v2026.2.4 | 🔑 Auth stability: 7-day state expiry (was 24h), |
v2026.2.3 | 🎬 Studio Panel tools restored — Video Overview generation and Data Table tools re-enabled after UI update |
v2026.2.1 | 🔧 Standard profile expanded: 14 → 33 tools — all key features now visible by default |
v2026.2.0 | 🚀 Gemini 3 models (2.5 retiring March 31), Video Overviews (10 styles), Data Table extraction (JSON), thinking level control, structured JSON output, SDK 1.41 |
v2026.1.12 | 🔒 Security hardening — timing attack fix, command injection fix, 6 memory leak fixes, MCP SDK 1.26.0 |
v2026.1.11 | 🔄 Notebook sync extraction for Angular UI, |
v2026.1.10 | 📝 Tool descriptions clarified for multi-LLM compatibility (OpenCode fix) |
v2026.1.9 | 📄 Documentation & UX improvements, npm audit fix |
v2026.1.8 | 📦 Major dependency updates (zod 4.x, dotenv 17.x, post-quantum 0.5.4) |
v2026.1.7 | 🎨 MCP Protocol UX — tool icons, titles, behavior annotations |
v2026.1.4 | 🛡️ Defense-in-depth path validation, security hardening |
v2026.1.2 | 🔗 Multi-session auth coordination — lock system for concurrent sessions |
v2026.1.1 | 🔍 Deep health check — verifies NotebookLM chat UI actually loads |
v2026.1.0 | 📊 Chat history extraction with context management, CalVer versioning |
v1.10.8 | Query history logging, quota tracking |
v1.10.0 | Auto-chunking for large PDFs (1000+ pages) |
v1.9.0 | Document API: upload, query, delete via Gemini Files API |
v1.8.0 | Gemini Deep Research, Query with Grounding, Background Tasks |
v1.7.0 | Programmatic notebook creation, batch operations, audio generation |
v1.6.0 | Enterprise compliance: GDPR, SOC2 Type II, CSSF |
v1.5.0 | Cross-platform support (Windows ACLs, macOS, Linux) |
v1.4.0 | Post-quantum encryption, secrets scanning |
Reporting Vulnerabilities
Found a security issue? Do not open a public GitHub issue.
Email: support@pantheonsecurity.io
Credits
Original MCP Server: Gérôme Dexheimer — notebooklm-mcp
Security Hardening: Pantheon Security
Post-Quantum Crypto: @noble/post-quantum
Gemini API: Google AI
License
MIT — Same as original.
Security hardened with 🔒 by Pantheon Security
Powered by Google Gemini 3 🚀
Full Security Documentation • Compliance Guide • Report Vulnerability
Available Tools
31 toolsadd_notebookAdd NotebookAIdempotent
PERMISSION REQUIRED — Only when user explicitly asks to add a notebook.
Conversation Workflow (Mandatory)
When the user says: "I have a NotebookLM with X"
Ask URL: "What is the NotebookLM URL?"
Ask content: "What knowledge is inside?" (1–2 sentences)
Ask topics: "Which topics does it cover?" (3–5)
Ask use cases: "When should we consult it?"
Propose metadata and confirm:
Name: [suggested]
Description: [from user]
Topics: [list]
Use cases: [list] "Add it to your library now?"
Only after explicit "Yes" → call this tool
Rules
Do not add without user permission
Do not guess metadata — ask concisely
Confirm summary before calling the tool
Example
User: "I have a notebook with n8n docs" 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)
Click "+ New" (top right) → Upload sources (docs, knowledge)
Click "Share" (top right) → Select "Anyone with the link"
Click "Copy link" (bottom left) → Give this link to Claude
(Upgraded: Google AI Pro/Ultra gives 5x higher limits)
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The NotebookLM notebook URL | |
| name | Yes | Display name for the notebook (e.g., 'n8n Documentation') | |
| description | Yes | What knowledge/content is in this notebook | |
| topics | Yes | Topics covered in this notebook | |
| content_types | No | Types of content (e.g., ['documentation', 'examples', 'best practices']) | |
| use_cases | No | When should Claude use this notebook (e.g., ['Implementing n8n workflows']) | |
| tags | No | Optional tags for organization |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=true, covering basic safety and idempotency. The description adds valuable context beyond this: it specifies permission requirements ('PERMISSION REQUIRED'), outlines a multi-step interactive process, and includes implementation details like how to obtain a NotebookLM share link. This enriches behavioral understanding without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is overly verbose and poorly structured for a tool definition, including extensive conversational workflows, rules, examples, and external instructions (e.g., 'How to Get a NotebookLM Share Link'). While some content is useful, much of it (like step-by-step login instructions) is extraneous and not front-loaded, reducing efficiency for an AI agent parsing the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (7 parameters, no output schema) and rich annotations, the description is mostly complete. It covers usage context, behavioral traits, and workflow integration thoroughly. However, it lacks details on error handling or response format, which could be helpful since there's no output schema, slightly limiting completeness for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing clear descriptions for all 7 parameters. The description adds minimal parameter semantics beyond the schema, mainly implying that parameters like 'url', 'name', 'description', 'topics', and 'use_cases' are collected through the conversational workflow. However, it doesn't explain parameter relationships or usage nuances, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: adding a notebook to a library when the user explicitly requests it. It specifies the verb 'add' and resource 'notebook', distinguishing it from siblings like 'create_notebook' or 'update_notebook' by focusing on user-permission-driven addition. However, it doesn't explicitly differentiate from 'batch_create_notebooks' or 'sync_library', which slightly limits sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit and detailed guidelines on when to use this tool, including a mandatory conversation workflow with six steps, rules (e.g., 'Do not add without user permission'), and an example. It clearly defines prerequisites (user permission, metadata collection) and alternatives (implied by the workflow's questioning phase), leaving no ambiguity about usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_sourceAdd SourceAIdempotent
Add a source to an existing NotebookLM notebook.
Source Types
url: Web page URL
text: Text content (paste)
file: Local file path (PDF, DOCX, TXT)
Example
{
"notebook_id": "my-notebook",
"source": {
"type": "url",
"value": "https://docs.example.com/api"
}
}| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | No | Library notebook ID | |
| notebook_url | No | Direct notebook URL (overrides notebook_id) | |
| source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide hints (readOnlyHint=false, destructiveHint=false, idempotentHint=true, openWorldHint=true), but the description adds valuable context by listing source types (url, text, file) with examples, clarifying what can be added. It does not contradict annotations—'Add' aligns with non-readOnly and non-destructive hints—and supplements with practical behavioral details not covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by a structured list of source types and a clear JSON example. Every sentence earns its place by providing essential information without redundancy, making it efficient and easy to scan for key details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, nested objects, no output schema) and rich annotations, the description is largely complete. It covers purpose, source types, and usage example, but lacks details on error handling, response format, or prerequisites (e.g., authentication), which could enhance completeness for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, with parameters like 'notebook_id' and 'source.type' well-described in the schema. The description compensates by detailing source types (url, text, file) and providing an example that illustrates parameter usage and structure, adding meaning beyond the schema's enum and object definitions, though it doesn't cover all parameters exhaustively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Add a source') and resource ('to an existing NotebookLM notebook'), distinguishing it from sibling tools like 'add_notebook' or 'create_notebook' which create notebooks rather than adding sources to existing ones. The verb 'Add' is precise and the scope 'existing NotebookLM notebook' sets clear boundaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying 'to an existing NotebookLM notebook,' which suggests it should not be used for creating new notebooks (use 'add_notebook' or 'create_notebook' instead). However, it lacks explicit when-not-to-use guidance or named alternatives for source management (e.g., vs. 'remove_source' or 'list_sources'), leaving some ambiguity in sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ask_questionAsk NotebookLMARead-only
NotebookLM Research (Browser-Based • NO API KEY REQUIRED)
IMPORTANT: This tool uses browser automation - NO GEMINI_API_KEY needed!
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.
Tip: Tell the user you can manage NotebookLM library and ask which notebook to use for the current task.
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes | The question to ask NotebookLM | |
| session_id | No | Optional session ID for contextual conversations. If omitted, a new session is created. | |
| notebook_id | No | Optional notebook ID from your library. If omitted, uses the active notebook. Use list_notebooks to see available notebooks. | |
| notebook_url | No | Optional notebook URL (overrides notebook_id). Use this for ad-hoc queries to notebooks not in your library. | |
| show_browser | No | Show browser window for debugging (simple version). For advanced control (typing speed, stealth, etc.), use browser_options instead. | |
| browser_options | No | Optional browser behavior settings. Claude can control everything: visibility, typing speed, stealth mode, timeouts. Useful for debugging or fine-tuning. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, openWorldHint=true, idempotentHint=false, and destructiveHint=false. The description adds valuable context beyond this: it discloses that the tool uses browser automation (not API), mentions auth requirements and setup steps, and provides debugging options (e.g., 'show_browser' and 'browser_options'). This enriches the behavioral understanding without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is overly verbose and poorly structured, with markdown formatting, multiple sections, and tips that could be condensed. It includes redundant information (e.g., repeating 'NO API KEY REQUIRED') and workflow details that might be better suited for general documentation. Sentences like 'Tip: Tell the user you can manage NotebookLM library' are extraneous and reduce focus.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, nested objects, no output schema) and rich annotations, the description is mostly complete. It covers usage context, prerequisites, and behavioral aspects, though it lacks details on return values or error handling. With annotations providing safety and idempotency hints, and schema covering parameters well, the description adds sufficient contextual value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description does not add significant meaning beyond the schema, as it focuses on usage workflow and behavioral context rather than parameter details. For example, it doesn't explain how 'question' interacts with NotebookLM or clarify parameter interdependencies beyond what's in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Ask NotebookLM' in the title and 'This tool uses browser automation' in the description, indicating it submits queries to NotebookLM. However, it doesn't explicitly distinguish this from sibling tools like 'search_notebooks' or 'get_notebook_chat_history', which might have overlapping query functionality. The purpose is clear but lacks sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool, including prerequisites (e.g., 'No Active Notebook' section with steps like using 'add_notebook' and 'select_notebook'), alternatives (e.g., using 'list_notebooks' to see available sources), and context-specific tips (e.g., auth setup with 'notebooklm.auth-setup' and 'get_health'). It clearly outlines the workflow and when this tool fits in.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_create_notebooksBatch CreateA
Create multiple NotebookLM notebooks in one operation.
What This Tool Does
Creates up to 10 notebooks in a single batch operation
Reports progress for each notebook
Optionally continues on error or stops on first failure
Auto-adds created notebooks to your library
Example Usage
{
"notebooks": [
{
"name": "React Documentation",
"sources": [
{ "type": "url", "value": "https://react.dev/reference" }
],
"topics": ["react", "frontend"]
},
{
"name": "Node.js API",
"sources": [
{ "type": "url", "value": "https://nodejs.org/api/" }
],
"topics": ["nodejs", "backend"]
}
],
"stop_on_error": false
}Limits
Maximum 10 notebooks per batch
Each notebook follows individual source limits (50-600 based on tier)
Delays between notebooks to avoid rate limiting
Returns
Summary with:
total: Number of notebooks attempted
succeeded: Successfully created count
failed: Failed count
results: Array of individual results
| Name | Required | Description | Default |
|---|---|---|---|
| notebooks | Yes | Array of notebooks to create (max 10) | |
| stop_on_error | No | Stop batch if any notebook fails (default: false) | |
| show_browser | No | Show browser window for debugging |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only, non-destructive, non-idempotent, and open-world hints. The description adds valuable behavioral context beyond annotations: it explains progress reporting, error handling options (stop_on_error), auto-addition to library, delays for rate limiting, and return summary structure. This enriches understanding without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (What This Tool Does, Example Usage, Limits, Returns), each sentence adds value (e.g., explaining batch limits, error handling, returns), and it avoids redundancy. It is appropriately sized and front-loaded with key information, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (batch creation with multiple parameters) and lack of output schema, the description does a good job covering behavior, limits, and return values. However, it could improve by explicitly mentioning authentication needs or linking to sibling tools for context, slightly reducing completeness for a mutation tool without output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal parameter semantics beyond the schema, such as implying 'notebooks' array structure through the example and mentioning 'stop_on_error' behavior. This meets the baseline for high schema coverage but doesn't significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool 'creates multiple NotebookLM notebooks in one operation,' clearly specifying the verb (create) and resource (notebooks). It distinguishes from sibling tools like 'create_notebook' by emphasizing batch capability and up to 10 notebooks, making the purpose specific and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (creating multiple notebooks efficiently) and mentions limits like maximum 10 notebooks, which implies when not to use it for larger batches. However, it does not explicitly name alternatives (e.g., 'create_notebook' for single creation) or detail prerequisites, keeping it from a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cleanup_dataCleanup DataADestructiveIdempotent
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:
Legacy Installation (notebooklm-mcp-nodejs) - Old paths with -nodejs suffix
Current Installation (notebooklm-mcp) - Active data, browser profiles, library
NPM/NPX Cache - Cached installations from npx
Claude CLI MCP Logs - MCP server logs from Claude CLI
Temporary Backups - Backup directories in system temp
Claude Projects Cache - Project-specific cache (optional)
Editor Logs (Cursor/VSCode) - MCP logs from code editors (optional)
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:
Ask user to close ALL Chrome/Chromium instances
Run cleanup_data(confirm=false, preserve_library=true) to preview
Run cleanup_data(confirm=true, preserve_library=true) to execute
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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | 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 | No | Preserve library.json file during cleanup. Default: false. Set to true to keep your notebook library while deleting everything else (browser data, caches, logs). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already indicate destructiveHint=true and idempotentHint=true, the description adds significant behavioral context beyond annotations: the critical browser-closing requirement, cross-platform compatibility, safety mechanisms (preview before deletion, explicit confirmation), library preservation option, and detailed workflow guidance. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (warning, categories, platform info, preservation option, workflow, use cases). While comprehensive, some sentences could be more concise (e.g., the category list is detailed but necessary). The critical information is front-loaded with the warning and purpose statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description provides complete context: clear purpose, detailed behavioral guidance, parameter usage examples, platform compatibility, safety mechanisms, prerequisites, and specific use cases. It compensates for the lack of output schema by explaining what happens during execution (preview then deletion).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds meaningful context about parameter usage: it explains the two-step confirmation workflow, provides specific recommended values (preserve_library=true), and clarifies the library preservation behavior. However, it doesn't add syntax or format details beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: scanning and cleaning NotebookLM MCP data files across 8 specific categories. It uses specific verbs ('scans entire system', 'shows categorized preview before deletion') and distinguishes itself from sibling tools by focusing on data cleanup rather than notebook/source management, authentication, or content generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidelines including when to use ('Clean reinstall, troubleshooting auth issues, removing all traces before uninstall'), prerequisites ('Close ALL Chrome/Chromium instances BEFORE running'), a recommended workflow with specific parameter values, and clear alternatives (preserve_library=true option). It also distinguishes when NOT to use it (when browsers are open).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_sessionClose SessionADestructiveIdempotent
Close a specific session by session ID. Ask before closing if the user might still need it.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | The session ID to close |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations by warning about potential user impact ('Ask before closing if the user might still need it'). Annotations already indicate destructiveHint=true and idempotentHint=true, but the description provides practical usage advice that enhances understanding of the tool's consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with two clear sentences that each serve distinct purposes: the first states the core functionality, the second provides crucial usage guidance. There's no wasted language or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with good annotation coverage (destructiveHint, idempotentHint) but no output schema, the description provides adequate context about the action and important usage considerations. The main gap is lack of information about what 'closing' actually means behaviorally or what happens after closure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the input schema fully documents the single 'session_id' parameter. The description doesn't add any additional parameter information beyond what's in the schema, so it meets the baseline expectation without providing extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Close') and target resource ('a specific session by session ID'), distinguishing it from sibling tools like 'list_sessions' or 'reset_session'. It provides a precise verb+resource combination that leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear contextual guidance with 'Ask before closing if the user might still need it', which helps determine when to use this tool. However, it doesn't explicitly mention alternatives like 'reset_session' or specify when-not-to-use scenarios, preventing a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_notebookCreate NotebookA
Create a new NotebookLM notebook with sources programmatically.
What This Tool Does
Creates a NEW notebook in your NotebookLM account
Uploads sources (URLs, text, files) to the notebook
Returns the notebook URL for immediate use
Optionally adds to your local library
Supported Source Types
url: Web page URL (documentation, articles, etc.)
text: Raw text content (code, notes, etc.)
file: Local file path (PDF, DOCX, TXT)
Example Usage
Create a notebook from API documentation:
{
"name": "React Docs",
"sources": [
{ "type": "url", "value": "https://react.dev/reference/react" }
]
}Create a notebook with multiple sources:
{
"name": "Security Research",
"sources": [
{ "type": "url", "value": "https://owasp.org/Top10" },
{ "type": "file", "value": "/path/to/security-report.pdf" },
{ "type": "text", "value": "Custom notes...", "title": "My Notes" }
],
"description": "Security best practices and research",
"topics": ["security", "owasp", "best-practices"]
}NotebookLM Limits (Free Tier)
100 notebooks maximum
50 sources per notebook
500k words per source
50 queries per day
Notes
Requires authentication (run setup_auth first)
Creates notebook with sharing set to private by default
Large files may take longer to process
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the new notebook | |
| sources | Yes | Array of sources to add to the notebook | |
| description | No | Optional description for the notebook in your library | |
| topics | No | Optional topics for categorization in your library | |
| auto_add_to_library | No | Whether to automatically add the created notebook to your library (default: true) | |
| browser_options | No | Optional browser settings for debugging | |
| show_browser | No | Show browser window (shorthand for browser_options.show) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a non-readOnly, non-destructive, non-idempotent, openWorld operation. The description adds valuable behavioral context beyond annotations: it discloses authentication requirements, rate limits (NotebookLM Free Tier limits), default privacy settings, processing time for large files, and that it returns a notebook URL. This significantly enhances the agent's understanding of the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (What This Tool Does, Supported Source Types, Example Usage, Limits, Notes) and uses bullet points efficiently. However, it includes extensive example JSON blocks that could be considered verbose, though they are informative. Overall, it's front-loaded and most sentences earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, nested objects, no output schema) and rich annotations, the description is highly complete. It covers purpose, usage, behavioral traits, limits, prerequisites, and provides examples, compensating well for the lack of output schema. No significant gaps remain for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the input schema already documents all 7 parameters thoroughly. The description adds minimal parameter semantics beyond the schema, mainly through the example usage which illustrates practical combinations. It does not explain parameter interactions or constraints not in the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool creates a new NotebookLM notebook with sources programmatically, clearly distinguishing it from siblings like 'add_notebook' (likely adds to existing) or 'batch_create_notebooks' (multiple). It specifies the verb 'creates' and resource 'notebook' with source uploading functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (creating new notebooks with sources) and mentions authentication prerequisites. However, it does not explicitly contrast with alternatives like 'batch_create_notebooks' or 'update_notebook', leaving some ambiguity about sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_audioDownload AudioARead-onlyIdempotent
Download the generated audio overview file.
Requirements
Audio must be in "ready" status
Use get_audio_status to check before downloading
Output
Downloads to specified path or ~/notebooklm-audio-{timestamp}.mp3
Example
{
"notebook_id": "my-research",
"output_path": "/path/to/save/podcast.mp3"
}| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | No | Library notebook ID | |
| notebook_url | No | Or direct notebook URL (overrides notebook_id) | |
| output_path | No | Optional output file path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, indicating safe, repeatable operations. The description adds valuable behavioral context beyond this: it specifies the output location (default path with timestamp) and the prerequisite status check, which aren't covered by annotations. No contradictions with annotations exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Description, Requirements, Output, Example), front-loaded with the core purpose. Each sentence serves a specific purpose—stating the action, outlining prerequisites, specifying output behavior, and providing an example—with no wasted words, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (download operation with prerequisites), rich annotations (covering safety and idempotency), and full schema coverage, the description is largely complete. It adds useful context like status requirements and default output path. However, without an output schema, it could briefly mention the return type (e.g., success confirmation or error), though the annotations help mitigate this gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the three parameters (notebook_id, notebook_url, output_path). The description adds minimal parameter semantics: it mentions 'output_path' in the 'Output' section and includes it in the example, but doesn't provide additional meaning beyond what the schema already states. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads a generated audio overview file, specifying the resource (audio overview file) and action (download). It distinguishes from siblings like 'generate_audio_overview' (which creates the audio) and 'get_audio_status' (which checks status), but doesn't explicitly contrast with all possible alternatives. The purpose is specific but could be slightly more differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidelines in the 'Requirements' section: audio must be in 'ready' status, and it instructs to use 'get_audio_status' to check before downloading. This clearly states when to use (after status check) and references a specific sibling tool as a prerequisite, offering strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_audio_overviewGenerate AudioA
Generate an AI-powered audio overview (podcast-style) for a notebook.
What This Tool Does
Triggers NotebookLM's audio overview generation
Audio overviews are ~5-15 minute podcast-style summaries
Generation takes 2-5 minutes typically
Returns immediately with status (check with get_audio_status)
Requirements
Notebook must have at least one source
Audio generation may not be available on all notebooks
Example
{ "notebook_id": "my-research" }| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | No | Library notebook ID | |
| notebook_url | No | Or direct notebook URL (overrides notebook_id) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it specifies that generation 'takes 2-5 minutes typically' and 'returns immediately with status (check with get_audio_status)', which are not covered by annotations (e.g., readOnlyHint=false only indicates it's not read-only). It does not contradict annotations, and while it could mention more about error handling or permissions, it provides useful operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections ('What This Tool Does', 'Requirements', 'Example'), front-loaded with key information, and every sentence adds value without redundancy. It efficiently covers purpose, behavior, prerequisites, and an example in a compact format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (asynchronous generation with status checks), no output schema, and rich annotations, the description is mostly complete: it explains the process, timing, and follow-up action. However, it could benefit from mentioning the output format or error cases, but it adequately covers core usage for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (notebook_id and notebook_url) with descriptions. The description does not add meaning beyond the schema, such as explaining parameter interactions or usage nuances, but the baseline is 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'triggers NotebookLM's audio overview generation' for a notebook, specifying it creates '~5-15 minute podcast-style summaries'. This is a specific verb (generate) + resource (audio overview) + distinguishing detail (podcast-style for notebooks), and it differentiates from siblings like 'generate_video_overview' by focusing on audio.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: for generating audio overviews of notebooks, with requirements like 'notebook must have at least one source' and notes that 'audio generation may not be available on all notebooks'. However, it does not explicitly state when not to use it or name alternatives (e.g., 'generate_video_overview' for video summaries), which prevents a score of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_data_tableGenerate TableA
Generate a structured Data Table from notebook sources.
What This Tool Does
Opens the Studio panel in NotebookLM
Generates a structured tabular extraction from notebook content
Tables organize key information from sources into rows and columns
Generation typically takes 1-3 minutes
Returns immediately with status (check with get_data_table)
Requirements
Notebook must have at least one source
Authentication required (run setup_auth first)
Example
{ "notebook_id": "my-research" }| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | No | Library notebook ID | |
| notebook_url | No | Or direct notebook URL (overrides notebook_id) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide hints (e.g., readOnlyHint=false, destructiveHint=false), but the description adds valuable behavioral context beyond this: it discloses that the tool 'Opens the Studio panel in NotebookLM', 'Generation typically takes 1-3 minutes', and 'Returns immediately with status (check with get_data_table)'. This includes UI effects, timing, and output behavior, which are not covered by annotations. No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections ('What This Tool Does', 'Requirements', 'Example'), front-loading key actions. It is appropriately sized, but includes some redundancy (e.g., repeating 'Generate' in multiple points) and could be slightly more streamlined without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (involves UI interaction, async processing, and authentication) and lack of output schema, the description is mostly complete: it covers purpose, requirements, behavioral traits, and usage context. However, it does not detail error conditions or what 'status' entails, leaving minor gaps for an agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (notebook_id and notebook_url) with descriptions. The description does not add meaning beyond the schema, such as explaining parameter interactions or usage nuances. With high schema coverage, the baseline score of 3 is appropriate as the description does not compensate but also does not detract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'generates a structured tabular extraction from notebook content' and 'tables organize key information from sources into rows and columns', specifying both the verb (generate) and resource (data table from notebook sources). It distinguishes from siblings like 'get_data_table' (which checks status) and 'add_source' (which adds content rather than extracting it).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for when to use this tool: 'Notebook must have at least one source' and 'Authentication required (run setup_auth first)'. It also implies an alternative by noting 'Returns immediately with status (check with get_data_table)', but does not explicitly state when not to use it or compare to other extraction tools like 'generate_audio_overview'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_video_overviewGenerate VideoA
Generate an AI-powered Video Overview for a notebook.
What This Tool Does
Opens the Studio panel in NotebookLM
Generates a visual video summary of notebook content
Supports multiple visual styles and formats
Generation takes 3-10 minutes typically
Returns immediately with status (check with get_video_status)
Visual Styles
auto-select — Let NotebookLM choose the best style (default)
custom — Custom visual style
classic — Classic presentation style
whiteboard — Hand-drawn whiteboard style
kawaii — Cute kawaii style
anime — Anime-inspired visuals
watercolour — Watercolour painting style
retro-print — Retro print aesthetic
heritage — Heritage/traditional style
paper-craft — Paper-craft visual style
Formats
explainer — Full explanation (5-15 min, default)
brief — Quick summary (1-3 min)
Requirements
Notebook must have at least one source
Authentication required (run setup_auth first)
Example
{ "notebook_id": "my-research", "style": "documentary", "format": "brief" }| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | No | Library notebook ID | |
| notebook_url | No | Or direct notebook URL (overrides notebook_id) | |
| style | No | Visual style for the video overview | auto-select |
| format | No | Video format (explainer = full, brief = short summary) | explainer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it discloses the typical generation time (3-10 minutes), the immediate return with status, and authentication requirements. While annotations cover basic hints (e.g., not read-only, open-world), the description enriches this with practical details, though it could mention potential side effects like resource usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (What This Tool Does, Visual Styles, Formats, Requirements, Example) and uses bullet points efficiently. It's appropriately sized, though some sections like the style list are lengthy but necessary. Every sentence adds value, with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, no output schema, rich annotations), the description is mostly complete. It covers purpose, usage, parameters, and behavioral traits. However, it lacks details on error handling or output format, which could be helpful for an agent. The absence of an output schema makes this a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema fully documents all parameters. The description adds minimal extra meaning (e.g., listing visual styles and formats with brief explanations), but doesn't provide significant additional semantics beyond what's in the schema. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Generate an AI-powered Video Overview for a notebook') and distinguishes it from siblings like generate_audio_overview and get_video_status. It specifies the exact resource (notebook) and outcome (visual video summary), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('Generate an AI-powered Video Overview for a notebook') and provides clear alternatives (e.g., 'check with get_video_status' for status updates). It also lists prerequisites ('Notebook must have at least one source', 'Authentication required'), guiding proper usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audio_statusAudio StatusARead-onlyIdempotent
Check the audio overview generation status for a notebook.
Returns
status: "not_started" | "generating" | "ready" | "failed" | "unknown"
progress: Generation progress (0-100) if generating
duration: Audio duration in seconds if ready
Example
{ "notebook_id": "my-research" }| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | No | Library notebook ID | |
| notebook_url | No | Or direct notebook URL (overrides notebook_id) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it details the return values (status, progress, duration) and their semantics (e.g., progress only applies if generating). Annotations already cover read-only, idempotent, and non-destructive traits, so the description appropriately focuses on output behavior, though it could mention rate limits or auth needs for a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by organized sections for returns and an example. Every sentence adds value without redundancy, making it efficient and easy to parse for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (status checking with two parameters), rich annotations (e.g., readOnlyHint), and no output schema, the description provides good completeness by explaining return values and including an example. It could be a 5 if it explicitly linked to sibling tools like 'generate_audio_overview' for full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the two parameters (notebook_id and notebook_url). The description does not add any parameter-specific information beyond what's in the schema, such as clarifying the relationship between the two parameters. This meets the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('Check') and resource ('audio overview generation status for a notebook'), distinguishing it from siblings like 'generate_audio_overview' (which initiates generation) and 'download_audio' (which retrieves audio). It precisely defines what the tool does without being vague or tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying it checks status for audio generation, suggesting it should be used after initiating generation (e.g., with 'generate_audio_overview'). However, it does not explicitly state when not to use it or name alternatives, such as noting that 'get_video_status' is for video instead of audio, which would have made it a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_tableGet TableARead-onlyIdempotent
Extract the generated Data Table content from a notebook.
What This Tool Does
Navigates to the notebook's Studio panel
Extracts the table data (headers and rows) as structured JSON
Returns the full table content for analysis
Returns
table.headers: Column headers
table.rows: Array of row arrays
table.totalRows: Number of rows
table.totalColumns: Number of columns
Requirements
Data table must be generated first (use generate_data_table)
Returns error if table is not yet ready
Example
{ "notebook_id": "my-research" }| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | No | Library notebook ID | |
| notebook_url | No | Or direct notebook URL (overrides notebook_id) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds valuable context beyond this: it specifies the tool navigates to a Studio panel, extracts structured JSON, and returns specific table properties (headers, rows, totals). It also mentions error behavior when the table isn't ready. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections ('What This Tool Does', 'Returns', 'Requirements', 'Example'), each sentence adds value, and it's front-loaded with the core purpose. No redundant or verbose content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with rich annotations and no output schema, the description is complete: it explains the action, prerequisites, return structure, and error conditions. It compensates for the lack of output schema by detailing the return format, making it sufficient for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (notebook_id and notebook_url) fully documented in the schema. The description provides an example showing notebook_id usage but adds no new semantic details about parameters beyond what the schema already states. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Extract'), target resource ('Data Table content from a notebook'), and mechanism ('navigates to notebook's Studio panel, extracts table data as structured JSON'). It distinguishes from sibling tools like 'generate_data_table' by focusing on extraction rather than generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Requirements' section explicitly states when to use this tool ('Data table must be generated first') and when not to ('Returns error if table is not yet ready'), naming the alternative tool ('use generate_data_table'). This provides clear guidance on prerequisites and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_healthHealth CheckARead-onlyIdempotent
Get server health status including authentication state, active sessions, and configuration. Use this to verify the server is ready before starting research workflows.
Deep Check Mode (v2026.1.1)
Set deep_check: true to actually verify the NotebookLM chat UI loads. This catches stale sessions where cookies exist but the UI won't load. Returns chat_ui_accessible: true/false.
If authenticated=false and having persistent issues: Consider running cleanup_data(preserve_library=true) + setup_auth for fresh start with clean browser session.
| Name | Required | Description | Default |
|---|---|---|---|
| deep_check | No | If true, actually navigates to NotebookLM and verifies the chat UI loads. More reliable but slower (~5s). Use this before important query sessions. | |
| notebook_id | No | Notebook to check (for deep_check). Defaults to active notebook or first available. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering basic safety. The description adds valuable behavioral context beyond annotations: the deep_check mode's performance impact ('slower (~5s)'), reliability benefits ('more reliable'), and specific return field ('chat_ui_accessible: true/false'). It also mentions authentication troubleshooting workflows, though it doesn't detail rate limits or exact error behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the core purpose and usage. The deep_check section and troubleshooting advice are relevant but slightly verbose. Most sentences earn their place by providing actionable guidance, though the troubleshooting paragraph could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (health check with optional deep verification), rich annotations (readOnly, idempotent, non-destructive), and 100% schema coverage, the description is largely complete. It explains the tool's role in workflows, deep check behavior, and troubleshooting steps. The main gap is lack of output schema, but the description partially compensates by mentioning specific return fields like chat_ui_accessible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters well-documented in the schema. The description adds some context for deep_check ('actually navigates to NotebookLM and verifies the chat UI loads') and notebook_id ('Defaults to active notebook or first available'), but doesn't provide significant additional semantic meaning beyond what's already in the schema descriptions. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Get server health status') and resources ('authentication state, active sessions, and configuration'), distinguishing it from sibling tools like get_audio_status or get_video_status. It explicitly identifies what health information is returned, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('to verify the server is ready before starting research workflows') and when to use alternatives (e.g., cleanup_data + setup_auth for authentication issues). It also distinguishes between normal and deep check modes, offering clear usage contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notebookGet NotebookBRead-onlyIdempotent
Get detailed information about a specific notebook by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The notebook ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover key behavioral traits: readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false. The description adds minimal context beyond this, only specifying that it retrieves 'detailed information'. It doesn't disclose additional aspects like rate limits, authentication needs, or what 'detailed information' entails, but doesn't contradict annotations either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Get detailed information about a specific notebook by ID'). There's no wasted language or redundancy, making it highly concise and well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (single parameter, no output schema) and rich annotations, the description is minimally adequate. It covers the basic purpose but lacks details on return format, error handling, or integration with sibling tools. For a read-only retrieval tool, this is acceptable but leaves room for more contextual guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'id' parameter fully documented. The description adds no additional meaning beyond the schema, merely restating that it's 'by ID'. This meets the baseline of 3 for high schema coverage, but doesn't enhance parameter understanding with examples or contextual details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'notebook' with specificity 'detailed information about a specific notebook by ID'. It distinguishes from siblings like 'list_notebooks' by focusing on single-item retrieval rather than listing. However, it doesn't explicitly contrast with 'search_notebooks' or 'select_notebook', which slightly limits differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'get_notebook' over 'list_notebooks' for browsing, 'search_notebooks' for filtering, or 'select_notebook' for selection contexts. There's no indication of prerequisites or exclusions, leaving usage entirely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notebook_chat_historyChat HistoryARead-onlyIdempotent
Extract conversation history from a NotebookLM notebook's chat interface.
This tool uses browser automation to navigate to a notebook and extract all Q&A pairs from the chat UI. This is useful for:
Recovering previous research conversations
Auditing what queries were made in a notebook
Understanding quota usage from direct NotebookLM browser usage
Resuming context from previous sessions
Context Management
Use preview_only: true to get a quick count before extracting full content.
Use output_file to export to JSON instead of returning to context.
Use offset with limit for pagination through large histories.
Examples
Quick audit (preview only):
{ "notebook_id": "my-research", "preview_only": true }Export to file (avoids context overflow):
{ "notebook_id": "my-research", "output_file": "/tmp/chat-history.json" }Paginate through history:
{ "notebook_id": "my-research", "limit": 20, "offset": 0 }
{ "notebook_id": "my-research", "limit": 20, "offset": 20 }| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | No | Library notebook ID. Use list_notebooks to see available notebooks. | |
| notebook_url | No | Direct notebook URL (overrides notebook_id). Use for notebooks not in your library. | |
| preview_only | No | If true, only returns message count and summary without content. Use this to audit before extracting full history. (default: false) | |
| limit | No | Maximum number of message pairs to return (default: 50, max: 200). | |
| offset | No | Number of message pairs to skip from the start. Use with limit for pagination. (default: 0) | |
| output_file | No | If provided, exports chat history to this JSON file instead of returning to context. Useful for large histories. | |
| show_browser | No | Show browser window for debugging (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds valuable behavioral context beyond annotations: it reveals the tool uses browser automation (implying potential latency and UI interaction), mentions context overflow risks with large histories, and provides practical guidance on managing output size. While it doesn't specify rate limits or authentication requirements, it adds meaningful operational context that annotations don't cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with clear sections: a purpose statement, bulleted use cases, a 'Context Management' section with parameter guidance, and practical examples. Every sentence earns its place by providing operational guidance or clarifying semantics. The information is front-loaded with the core purpose, followed by progressively detailed guidance. No redundant or verbose content exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters, no output schema, and rich annotations, the description provides excellent contextual coverage. It explains the tool's operational context (browser automation), use cases, parameter interactions, and practical considerations like context overflow. The main gap is the lack of information about return format (though examples imply JSON), but given the annotations cover safety and the description covers usage patterns well, this is a minor omission in an otherwise comprehensive description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds significant value by explaining the semantic purpose of key parameters: it clarifies that preview_only gives 'a quick count before extracting full content', output_file 'exports to JSON instead of returning to context' to avoid overflow, and offset/limit enable 'pagination through large histories'. It also provides concrete usage examples showing how these parameters work together. This goes well beyond the schema's technical descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose: 'Extract conversation history from a NotebookLM notebook's chat interface' using 'browser automation to navigate to a notebook and extract all Q&A pairs'. It clearly distinguishes this from sibling tools like get_query_history (which might be for different query types) or get_notebook (which retrieves notebook metadata rather than chat content). The verb 'extract' is specific and the resource 'conversation history/Q&A pairs' is well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: for 'recovering previous research conversations', 'auditing what queries were made', 'understanding quota usage', and 'resuming context from previous sessions'. It also offers practical usage patterns through the 'Context Management' section and examples, showing how to use preview_only for quick audits, output_file to avoid context overflow, and offset/limit for pagination. This gives clear operational context beyond basic invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_query_historyQuery HistoryARead-onlyIdempotent
Retrieve past NotebookLM queries and answers for reviewing research sessions.
Use this tool to:
Review past research conversations
Find specific information from previous queries
Track which notebooks and sessions you've used
Search through question and answer content
Returns query entries with question, answer, notebook, session, and timing info.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | Filter queries by session ID | |
| notebook_id | No | Filter queries by notebook ID (from your library) | |
| date | No | Filter queries by date (format: YYYY-MM-DD) | |
| search | No | Search pattern to find in questions or answers | |
| limit | No | Maximum number of entries to return (default: 50, max: 500) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide key behavioral hints (readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false), covering safety and idempotency. The description adds valuable context beyond this: it specifies the return format ('query entries with question, answer, notebook, session, and timing info') and implies search functionality ('Search through question and answer content'), which helps the agent understand output structure and capabilities. No contradictions with annotations are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by a bulleted list for usage guidelines and a final sentence on return values. Every sentence earns its place by adding clarity or utility without redundancy. It is appropriately sized for a tool with multiple parameters and clear use cases, avoiding unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, no output schema), the description is largely complete: it explains purpose, usage, and return format. However, it lacks details on pagination or ordering of results, which could be relevant for the 'limit' parameter. Annotations cover safety aspects, but without an output schema, the description could benefit from more specifics on result structure (e.g., pagination behavior).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all 5 parameters well-documented in the input schema (e.g., 'session_id' for filtering by session, 'search' for pattern matching). The description does not add significant parameter semantics beyond the schema, as it only mentions 'Search through question and answer content' which aligns with the 'search' parameter. Given the high schema coverage, a baseline score of 3 is appropriate, as the description provides minimal extra parameter insight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Retrieve past NotebookLM queries and answers for reviewing research sessions.' It specifies the verb ('Retrieve'), resource ('past NotebookLM queries and answers'), and context ('reviewing research sessions'), distinguishing it from siblings like 'get_notebook_chat_history' or 'list_sessions' by focusing on query-level history rather than broader chat or session listings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidelines with a bulleted list: 'Use this tool to: - Review past research conversations - Find specific information from previous queries - Track which notebooks and sessions you've used - Search through question and answer content.' This clearly indicates when to use this tool versus alternatives like 'get_notebook_chat_history' (for chat-level history) or 'list_sessions' (for session metadata), offering practical scenarios without misleading exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quotaGet QuotaARead-onlyIdempotent
Get current quota status including license tier, usage, and limits.
Returns:
tier: 'free', 'pro', 'ultra', or 'unknown'
notebooks: used/limit/remaining/percent
sources: limit per notebook
queries: used/limit/remaining/percent/should_stop/reset_time
warnings: array of warning messages
Quota Limits by Tier:
Free: 100 notebooks, 50 sources/notebook, 50 queries/day
Pro: 500 notebooks, 300 sources/notebook, 500 queries/day
Ultra: 500 notebooks, 600 sources/notebook, 5000 queries/day
Use sync=true to fetch actual quota from Google's NotebookLM UI (requires browser). Without sync, returns locally tracked counts which may differ if you used NotebookLM directly in browser. Query counts reset daily at midnight.
| Name | Required | Description | Default |
|---|---|---|---|
| sync | No | If true, navigate to NotebookLM and fetch actual quota from Google's UI. More accurate but requires browser automation. Default: false (use local tracking). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it explains the sync parameter's impact on data accuracy, mentions browser automation requirements, describes query count reset timing, and provides detailed tier-based quota limits. While annotations cover read-only/idempotent aspects, the description enriches understanding of real-world behavior without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Returns, Quota Limits, Usage notes) and every sentence adds value. It could be slightly more concise by integrating the quota limits into the returns section, but overall it's efficiently organized and front-loaded with core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, rich annotations, and lack of output schema, the description provides excellent completeness. It details return values, tier-specific limits, parameter behavior implications, and timing considerations. This compensates fully for the missing output schema and aligns well with the structured annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3, but the description adds meaningful context about the sync parameter's implications ('fetch actual quota from Google's UI', 'locally tracked counts may differ'). It doesn't just repeat the schema but explains the practical consequences of the parameter choice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('Get') and resource ('current quota status'), and it distinguishes itself from siblings by focusing exclusively on quota retrieval rather than notebook/source management or query execution. It explicitly lists what information is returned, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use sync=true vs. false, explaining the trade-offs between accuracy and browser automation requirements. It also implicitly distinguishes this tool from siblings by focusing on quota status rather than operations like adding notebooks or executing queries, though it doesn't explicitly name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_video_statusVideo StatusARead-onlyIdempotent
Check the Video Overview generation status for a notebook.
Returns
status: "not_started" | "generating" | "ready" | "failed" | "unknown"
progress: Generation progress (0-100) if generating
duration: Video duration in seconds if ready
Example
{ "notebook_id": "my-research" }| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | No | Library notebook ID | |
| notebook_url | No | Or direct notebook URL (overrides notebook_id) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide key behavioral hints (readOnlyHint: true, idempotentHint: true, destructiveHint: false), but the description adds valuable context by detailing the return values (status, progress, duration) and their conditions, which are not covered by annotations. This enhances transparency without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by clear sections for returns and an example. Every sentence earns its place by providing essential information without redundancy, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, rich annotations (e.g., readOnlyHint, idempotentHint), and no output schema, the description is complete. It explains the tool's purpose, return values, and provides an example, compensating for the lack of output schema and ensuring the agent has all necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the input schema fully documents the two parameters (notebook_id and notebook_url). The description does not add any parameter-specific information beyond what's in the schema, so it meets the baseline of 3 for adequate but no extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Check') and resource ('Video Overview generation status for a notebook'), distinguishing it from siblings like 'generate_video_overview' (which creates videos) and 'get_audio_status' (which checks audio status). It precisely defines what status is being checked.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying it's for checking status after video generation, but it does not explicitly state when to use this tool versus alternatives like 'get_audio_status' or provide exclusions. It offers clear guidance on the tool's role without naming specific alternatives or when-not scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notebooksList NotebooksARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover key traits (read-only, non-destructive, idempotent, closed-world), but the description adds valuable context: it returns metadata fields (name, topics, use cases, URL) and implies a use case for selection workflows. No contradictions with annotations, and it enhances understanding beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are front-loaded with core functionality and followed by usage guidance. Every word earns its place—no redundancy or fluff—making it efficient and easy to parse for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema) and rich annotations, the description is complete: it explains what it does, when to use it, output details, and distinguishes from siblings. No gaps remain for effective agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0 parameters and 100% schema description coverage, the baseline is high. The description adds no parameter details (as there are none), but it clarifies the output scope (metadata fields) and purpose, which compensates for the lack of an output schema, providing useful semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('all library notebooks'), specifies the metadata included (name, topics, use cases, URL), and distinguishes it from siblings like 'search_notebooks' by emphasizing comprehensive listing without filtering. This provides specific, actionable intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool ('to present options') and provides a clear workflow ('then ask which notebook to use for the task'), distinguishing it from alternatives like 'search_notebooks' for filtered queries. This gives strong guidance on context and next steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sessionsList SessionsARead-onlyIdempotent
List all active sessions with stats (age, message count, last activity). Use to continue the most relevant session instead of starting from scratch.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, and idempotent behavior, but the description adds useful context about the purpose (continuing sessions) and the stats included (age, message count, last activity). It doesn't contradict annotations and enhances understanding beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core functionality and followed by usage guidance. Every word earns its place, with no redundancy or fluff, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema) and rich annotations, the description is largely complete. It covers purpose, usage, and key stats. A minor gap is the lack of detail on output format or pagination, but this is mitigated by the straightforward nature of listing sessions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0 parameters and 100% schema description coverage, the baseline is high. The description doesn't need to explain parameters, but it implicitly clarifies that no filtering or input is required for listing all active sessions, which aligns with the empty schema. This adds slight value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('all active sessions'), specifies the scope ('with stats (age, message count, last activity)'), and distinguishes from siblings by emphasizing continuation of existing sessions rather than starting new ones. This is specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool ('to continue the most relevant session instead of starting from scratch'), providing clear context and distinguishing it from alternatives like creating new sessions or notebooks. This helps the agent choose appropriately among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sourcesList SourcesARead-onlyIdempotent
List all sources in a NotebookLM notebook.
Returns
Array of sources with:
id: Source identifier (for use with remove_source)
title: Source name/title
type: url, text, file, drive, or unknown
status: ready, processing, or failed
Example
{ "notebook_id": "my-notebook" }Or with direct URL:
{ "notebook_url": "https://notebooklm.google.com/notebook/xxx" }| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | No | Library notebook ID | |
| notebook_url | No | Direct notebook URL (overrides notebook_id) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds value by detailing the return structure (array with id, title, type, status) and linking 'id' to 'remove_source', which is useful context beyond annotations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, returns, example) and uses bullet points efficiently. It is appropriately sized, but the example section could be slightly condensed. Most sentences earn their place, with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (list operation), rich annotations (covering safety and behavior), and 100% schema coverage, the description is complete. It adds necessary context like return structure and parameter examples, compensating for the lack of an output schema. No significant gaps remain for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents parameters. The description adds minimal semantics by providing example usage and noting that 'notebook_url' overrides 'notebook_id', but this is redundant with the schema's description. Baseline 3 is appropriate as the schema handles most documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List all sources') and resource ('in a NotebookLM notebook'), distinguishing it from siblings like 'list_notebooks' (which lists notebooks) and 'add_source' (which adds sources). It precisely defines the scope and target.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by specifying the context ('in a NotebookLM notebook') and provides examples for input parameters, but it does not explicitly state when to use this tool versus alternatives like 'get_notebook' or 'search_notebooks'. The guidance is clear but lacks explicit exclusions or comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
re_authRe-authenticateADestructive
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:
Close all active browser sessions
Delete all saved authentication data (cookies, Chrome profile)
Open browser for fresh Google login
After completion, use 'get_health' to verify authentication.
TROUBLESHOOTING for persistent auth issues: If re_auth fails repeatedly:
Ask user to close ALL Chrome/Chromium instances
Run cleanup_data(confirm=false, preserve_library=true) to preview old files
Run cleanup_data(confirm=true, preserve_library=true) to clean everything except library
Run re_auth again for completely fresh start This removes old installation data and browser sessions that can cause conflicts.
| Name | Required | Description | Default |
|---|---|---|---|
| show_browser | No | Show browser window (simple version). Default: true for re-auth. For advanced control, use browser_options instead. | |
| browser_options | No | Optional browser settings. Control visibility, timeouts, and stealth behavior. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: it details the three-step process (closing sessions, deleting auth data, opening browser), mentions post-completion verification with 'get_health', and provides troubleshooting steps. While annotations already indicate destructiveHint=true and readOnlyHint=false, the description enriches this with specific destructive actions and operational consequences, though it doesn't fully cover all behavioral aspects like error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, usage cases, process steps, troubleshooting) and uses bullet points for readability. However, the troubleshooting section is quite detailed and could be considered slightly verbose, though all content is relevant and earns its place by providing actionable guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (destructive authentication reset with nested parameters) and lack of output schema, the description is highly complete. It covers purpose, usage scenarios, step-by-step behavior, post-action verification, and extensive troubleshooting, compensating for the absence of structured output documentation and providing all necessary context for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the input schema already fully documents the two parameters and their nested properties. The description adds no additional parameter semantics, focusing instead on usage and behavior. This meets the baseline score of 3, as the schema carries the parameter documentation burden effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('switch to a different Google account or re-authenticate') and distinguishes it from siblings by focusing exclusively on authentication management. It explicitly names the target resource (Google account) and the action (re-authenticate), making it distinct from tools like 'setup_auth' or 'get_health'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit, bulleted guidance on when to use this tool (rate limit reached, switching accounts, broken authentication) and includes a troubleshooting section with step-by-step alternatives for persistent issues. It also references sibling tools like 'cleanup_data' and 'get_health' for related actions, offering comprehensive usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_notebookRemove NotebookADestructiveIdempotent
Dangerous — requires explicit user confirmation.
Confirmation Workflow
User requests removal ("Remove the React notebook")
Look up full name to confirm
Ask: "Remove '[notebook_name]' from your library? (Does not delete the actual NotebookLM notebook)"
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
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The notebook ID to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations. While annotations indicate destructiveHint=true and idempotentHint=true, the description elaborates on the confirmation workflow, clarifies that removal is from the library (not deletion of the actual NotebookLM notebook), and specifies the dangerous nature requiring explicit user permission. This provides crucial implementation guidance not captured in structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (warning, workflow steps, example) and every sentence serves a purpose. While slightly longer than minimal, the content is front-loaded with the critical warning and workflow, and the example provides valuable clarification without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with comprehensive annotations and full schema coverage, the description provides excellent contextual completeness. It covers the dangerous nature, confirmation requirements, workflow details, and clarifies what 'remove' actually means (library removal vs. notebook deletion). The lack of output schema is compensated by the clear behavioral description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage (the single 'id' parameter is fully documented in the schema), the description adds no additional parameter information. It doesn't explain what notebook IDs look like, how to obtain them, or provide examples. The baseline score of 3 reflects adequate coverage through the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool removes a notebook from the user's library with 'Remove Notebook' as the title and 'remove_notebook' as the name. It specifies the action (remove) and resource (notebook), but doesn't explicitly differentiate from sibling 'remove_source' which removes a different resource type. The purpose is clear but sibling differentiation is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit, step-by-step guidelines on when to use this tool: only after user confirmation following a specific workflow. It states 'Never remove without permission or based on assumptions' and gives a concrete example with dialogue flow. This clearly defines the required context and preconditions for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_sourceRemove SourceADestructiveIdempotent
Remove a source from a NotebookLM notebook.
Usage
First call list_sources to get source IDs
Then call remove_source with the source ID
Example
{
"notebook_id": "my-notebook",
"source_id": "source-0"
}| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | No | Library notebook ID | |
| notebook_url | No | Direct notebook URL (overrides notebook_id) | |
| source_id | Yes | Source ID from list_sources (e.g., 'source-0') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide hints (readOnlyHint: false, destructiveHint: true, idempotentHint: true, openWorldHint: true), but the description adds valuable context beyond this. It specifies that source IDs come from 'list_sources' and includes an example with parameter details, enhancing understanding of the tool's behavior and prerequisites without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, a 'Usage' section for guidelines, and an 'Example' section with JSON. It is front-loaded and every sentence earns its place, avoiding redundancy and maintaining efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (destructive operation with 3 parameters), annotations cover key behavioral traits, and schema coverage is high. The description adds usage guidelines and an example, making it fairly complete. However, without an output schema, it doesn't describe return values, leaving a minor gap in full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters (notebook_id, notebook_url, source_id). The description adds minimal semantics by mentioning 'source ID from list_sources' in the usage section and showing an example, but this doesn't significantly enhance the schema's information. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Remove a source from a NotebookLM notebook,' specifying the verb ('Remove') and resource ('source from a NotebookLM notebook'). It distinguishes from siblings like 'add_source' or 'remove_notebook' by focusing on sources within notebooks, though it doesn't explicitly compare to them in the description text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidelines in a 'Usage' section, stating 'First call list_sources to get source IDs' and 'Then call remove_source with the source ID.' This clearly indicates when to use this tool (after obtaining IDs from list_sources) and implies an alternative (list_sources) for prerequisite steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_sessionReset SessionADestructiveIdempotent
Reset a session's chat history (keep same session ID). Use for a clean slate when the task changes; ask the user before resetting.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | The session ID to reset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true, but the description adds valuable context: it clarifies that resetting only affects chat history (not the session ID) and emphasizes user confirmation. It doesn't contradict annotations (destructive=true aligns with 'reset'), though it could mention rate limits or auth needs for a perfect score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first clause, followed by usage guidance and a critical behavioral note. Every sentence earns its place with no wasted words, making it highly efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (destructive operation with one parameter), annotations cover key behavioral traits, and the description adds practical context like user confirmation. However, without an output schema, it could briefly mention what happens post-reset (e.g., confirmation message) for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'session_id' fully documented in the schema. The description doesn't add any parameter-specific details beyond what the schema provides, so it meets the baseline of 3 without compensating for gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Reset a session's chat history') and resource ('session'), with explicit distinction from siblings by noting it 'keep[s] same session ID' (unlike close_session which likely ends the session). It avoids tautology by explaining what resetting entails beyond just the name/title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance on when to use ('for a clean slate when the task changes') and includes a crucial behavioral directive ('ask the user before resetting'), which distinguishes it from alternatives like close_session or other session management tools. This covers both context and exclusions effectively.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_notebooksSearch NotebooksBRead-onlyIdempotent
Search library by query (name, description, topics, tags). Use to propose relevant notebooks for the task and then ask which to use.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover key behavioral traits (read-only, non-destructive, idempotent, closed-world), so the bar is lower. The description adds some context about the search scope (name, description, topics, tags) and a suggested workflow, but it doesn't disclose additional behavioral aspects like rate limits, auth needs, or result format. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences that efficiently convey the search functionality and usage suggestion. It's front-loaded with the core purpose, though the second sentence could be more tightly integrated. Overall, it avoids waste but isn't perfectly structured for maximum clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter), rich annotations, and no output schema, the description is adequate but incomplete. It covers the search scope and a usage hint, but lacks details on result format, pagination, or error handling, which could aid the agent in interpreting outcomes. It meets minimum viability but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the 'query' parameter fully documented in the schema. The description adds minimal semantic value by listing searchable fields (name, description, topics, tags), but this doesn't significantly enhance understanding beyond the schema's 'Search query' description. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as searching a library by query across multiple fields (name, description, topics, tags), which is specific and distinguishes it from siblings like 'list_notebooks' or 'get_notebook'. However, it doesn't explicitly differentiate from 'list_notebooks' in terms of filtering scope or output format, keeping it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implied usage guidance by stating 'Use to propose relevant notebooks for the task and then ask which to use', which suggests a workflow context. However, it lacks explicit when-to-use vs. alternatives (e.g., compared to 'list_notebooks' or 'get_notebook'), and no exclusions or prerequisites are mentioned, making it only moderately helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_notebookSelect NotebookAIdempotent
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)
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The notebook ID to activate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it explains that this sets a default for 'ask_question', provides auto-switching guidelines with safety considerations (e.g., 'announce it', 'ask if ambiguous'), and includes an example of user-agent interaction. Annotations cover idempotency and non-destructive aspects, but the description enriches this with practical usage patterns without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections ('When To Use', 'Auto-Switching', 'Example'), front-loading the core purpose. Each sentence earns its place by providing actionable guidance or examples, with no redundant or verbose content, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (single parameter, no output schema) and rich annotations, the description is complete: it covers purpose, usage scenarios, behavioral nuances like auto-switching, and ties into sibling tools ('ask_question'). It provides all necessary context for an agent to use the tool effectively without needing output schema details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'id' fully documented in the schema as 'The notebook ID to activate'. The description does not add any additional semantic details about the parameter beyond what the schema provides, such as format or sourcing, so it meets the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Set a notebook as the active default') and the resource ('notebook'), distinguishing it from siblings like 'create_notebook', 'update_notebook', or 'list_notebooks'. It explicitly explains the functional purpose: to determine which notebook is used when 'ask_question' has no notebook_id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance in a dedicated 'When To Use' section with three concrete scenarios (user switches context, asks explicitly, or task change requires another notebook). It also includes 'Auto-Switching' rules with clear conditions for when to auto-switch versus ask for clarification, and references the sibling tool 'ask_question' as context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_authSetup AuthA
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. 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:
Ask user to close ALL Chrome/Chromium instances
Run cleanup_data(confirm=true, preserve_library=true) to clean old data
Run setup_auth again for fresh start This helps resolve conflicts from old browser sessions and installation data.
| Name | Required | Description | Default |
|---|---|---|---|
| show_browser | No | Show browser window (simple version). Default: true for setup. For advanced control, use browser_options instead. | |
| browser_options | No | Optional browser settings. Control visibility, timeouts, and stealth behavior. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it discloses that the tool 'returns immediately after opening the browser' (asynchronous behavior), gives a time constraint ('up to 10 minutes to complete the login'), and provides troubleshooting steps for persistent auth issues. While annotations cover basic hints (readOnlyHint=false, etc.), the description adds practical implementation details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: main purpose, usage instructions, and troubleshooting. While slightly longer than minimal, every sentence serves a purpose. The troubleshooting section could be considered somewhat verbose but provides valuable operational guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's authentication complexity and lack of output schema, the description provides comprehensive context: it explains the authentication flow, success verification method ('get_health'), time constraints, troubleshooting procedures, and differentiation from sibling tools. This adequately compensates for the absence of output schema documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already fully documents both parameters and their properties. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline of 3. The description focuses on tool usage rather than parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Google authentication for NotebookLM access - opens a browser window for manual login to your Google account.' It specifies the exact action (opens browser for manual login) and resource (Google account for NotebookLM), and distinguishes it from sibling 're_auth' tool for different use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('first-time authentication or when auto-login credentials are not available') and when to use alternatives ('For switching accounts or rate-limit workarounds, use re_auth tool instead'). It also instructs to use 'get_health' afterwards to verify success.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_librarySync LibraryAIdempotent
Sync your local library with actual NotebookLM notebooks.
What This Tool Does
Navigates to NotebookLM and extracts all your notebooks
Compares with local library entries
Detects stale entries (notebooks deleted or URLs changed)
Identifies notebooks not in your library
Optionally auto-removes stale entries
When To Use
Library seems out of sync with NotebookLM
After deleting notebooks in NotebookLM
To discover new notebooks to add
Before setting up automation workflows
Output
Returns a sync report with:
matched: Library entries that match actual notebooks
staleEntries: Library entries with no matching notebook (candidates for removal)
missingNotebooks: NotebookLM notebooks not in library (candidates for adding)
suggestions: Recommended actions
Example Usage
{ "auto_fix": false }With auto-fix to remove stale entries:
{ "auto_fix": true }| Name | Required | Description | Default |
|---|---|---|---|
| auto_fix | No | Automatically remove stale library entries (default: false) | |
| show_browser | No | Show browser window for debugging |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it explains the sync process (e.g., 'Navigates to NotebookLM', 'Compares with local library'), details output structure, and mentions optional auto-removal of stale entries. Annotations cover safety (non-destructive, idempotent) and openness, but the description enriches this with operational specifics without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (What This Tool Does, When To Use, Output, Example Usage) and uses bullet points for readability. It's appropriately sized but could be slightly more concise by integrating the example into the parameter section, as some redundancy exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no output schema), the description is mostly complete: it explains purpose, usage, process, and output details. However, it lacks explicit mention of authentication needs or rate limits, which could be relevant given the 'navigates to NotebookLM' action, leaving a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters. The description adds minimal param semantics through example usage showing 'auto_fix' values, but doesn't explain 'show_browser' or provide additional meaning beyond the schema's descriptions. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('sync', 'navigates', 'extracts', 'compares', 'detects', 'identifies') and resources ('local library', 'NotebookLM notebooks'). It distinguishes from siblings by focusing on synchronization rather than creation, listing, or removal operations, making its unique role evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When To Use' section explicitly lists four scenarios for using this tool (e.g., 'Library seems out of sync', 'After deleting notebooks'), providing clear context. It implicitly distinguishes from alternatives by focusing on sync tasks rather than direct notebook management, though it doesn't name specific sibling tools as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_notebookUpdate NotebookAIdempotent
Update notebook metadata based on user intent.
Pattern
Identify target notebook and fields (topics, description, use_cases, tags, url)
Propose the exact change back to the user
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The notebook ID to update | |
| name | No | New display name | |
| description | No | New description | |
| topics | No | New topics list | |
| content_types | No | New content types | |
| use_cases | No | New use cases | |
| tags | No | New tags | |
| url | No | New notebook URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false (mutation), destructiveHint=false (non-destructive), and idempotentHint=true (safe to retry). The description adds valuable behavioral context beyond annotations by specifying a confirmation workflow ('After explicit confirmation, call this tool'), which is a critical safety measure for mutations. It doesn't contradict annotations, and the added context about user confirmation enhances transparency for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear pattern, examples, and a tip, all in a concise format. Each sentence serves a purpose: the first states the goal, the pattern outlines the workflow, examples illustrate usage, and the tip adds efficiency. It's front-loaded with key information, though slightly longer than minimal, it avoids waste and is easy to follow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, mutation operation) and rich annotations (covering safety and idempotency), the description is largely complete. It adds crucial usage workflow and examples, compensating for the lack of output schema. However, it could mention error handling or response format, which is a minor gap in an otherwise comprehensive description for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 8 parameters thoroughly. The description lists fields (topics, description, use_cases, tags, url) in step 1, but this merely repeats what's in the schema without adding deeper meaning or usage nuances. With high schema coverage, the baseline is 3, as the description doesn't significantly enhance parameter understanding beyond the structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as updating notebook metadata based on user intent, specifying the verb 'update' and resource 'notebook metadata'. It distinguishes from siblings like 'create_notebook' or 'remove_notebook' by focusing on updates rather than creation or deletion. However, it doesn't explicitly contrast with tools like 'get_notebook' or 'list_notebooks', which is why it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidelines with a three-step pattern: identify target and fields, propose change to user, and call after confirmation. It includes examples illustrating when to use the tool and mentions updating multiple fields if requested. This gives clear context on when and how to invoke the tool, with no misleading information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
31 tool updates
v2026.2.3- First observed
add_notebook - First observed
add_source - First observed
ask_question - First observed
batch_create_notebooks - First observed
cleanup_data - First observed
close_session - First observed
create_notebook - First observed
download_audio - First observed
generate_audio_overview - First observed
generate_data_table - First observed
generate_video_overview - First observed
get_audio_status - First observed
get_data_table - First observed
get_health - First observed
get_notebook - First observed
get_notebook_chat_history - First observed
get_query_history - First observed
get_quota - First observed
get_video_status - First observed
list_notebooks - First observed
list_sessions - First observed
list_sources - First observed
re_auth - First observed
remove_notebook - First observed
remove_source - First observed
reset_session - First observed
search_notebooks - First observed
select_notebook - First observed
setup_auth - First observed
sync_library - First observed
update_notebook
TDQS
Scored across 31 tools
The tool set has clear distinct purposes for core operations like notebook management (add_notebook, create_notebook, list_notebooks) and media generation (generate_audio_overview, generate_video_overview), but there is significant overlap between tools like ask_question, get_notebook_chat_history, and get_query_history, which all involve querying or retrieving chat data, potentially causing confusion. Additionally, cleanup_data and re_auth both handle authentication/session cleanup with overlapping functions.
Tool names follow a highly consistent verb_noun pattern throughout, such as add_notebook, create_notebook, list_notebooks, generate_audio_overview, get_health, and sync_library. All tools use snake_case without deviation, making them predictable and easy to parse for agents.
With 31 tools, the count is excessive for the server's purpose of managing NotebookLM notebooks and media. Many tools could be consolidated (e.g., multiple chat history tools, overlapping cleanup/auth tools), leading to a bloated interface that may overwhelm agents and increase misselection risk.
The tool surface provides comprehensive coverage for NotebookLM operations, including CRUD for notebooks and sources, media generation (audio, video, data tables), session management, authentication, and library syncing. Minor gaps exist, such as no direct tool for editing source content or managing sharing settings, but agents can work around these with existing tools.
Maintenance
Related MCP Connectors
Agent-native security, trust, reliability, data and procurement tools for AI workflows.
Multiple Gmail accounts, editable Google Sheets & Docs for AI agents. Deny-by-default access rules.
Your company's brain for AI agents. Cited, permission-aware knowledge across every system.
Build, validate, and deploy multi-agent AI solutions from any AI environment.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents like Claude and Cursor to directly query Google's NotebookLM for zero-hallucination answers based on your uploaded documents, eliminating the need for manual copy-pasting and providing expert-level synthesized responses with source citations.169 npm8MIT
- FlicenseAqualityDmaintenanceEnables AI agents to query and interact with Google NotebookLM notebooks to retrieve citation-backed information. It provides tools for listing notebooks, accessing source data, and asking natural language questions.11-
- AlicenseBqualityBmaintenanceEnables AI agents to interact with Google NotebookLM for grounded, hallucination-free answers through notebook management, source management, research, and generation tools.29404 npm31MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to query Google NotebookLM directly for accurate, source-based answers, eliminating hallucinations by relying on user-uploaded documents.6 npm2MIT