NotebookLM Research Agent
A fully autonomous AI research agent that ingests sources into Google NotebookLM, runs deep web research, synthesizes knowledge through cited Q&A and 9 downloadable artifact types, creates polished content drafts, and optionally publishes to social platforms.
Zero-cost research engine -- NotebookLM is free. No API keys. No per-query charges.
Authentication
NotebookLM uses RPC/HTTP calls after a one-time browser cookie auth. No browser automation per operation -- the session is stored and reused.
~/.notebooklm/storage_state.json
Login once via the built-in CLI:
notebooklm login # One-time browser auth, saves session
notebooklm login --check # Verify stored session is still valid
The session persists until Google expires it (typically weeks). All scripts and the MCP server auto-load the stored session. No API keys or environment variables needed.
Architecture Overview
Core Principle: NotebookLM provides cited research, Claude creates content.
NotebookLM handles source ingestion, indexing, deep web research, cited answers, and native artifact generation (9 downloadable types). Claude uses that research output to write original articles, social posts, and reports. The pipeline is zero-cost and produces citation-backed content.
| Component | Role |
|---|---|
| notebooklm-py (v0.3.4) | Python client for NotebookLM (8 sub-APIs, 50+ methods, built-in CLI) |
| notebooklm CLI | Built-in CLI: notebooklm login, notebook, source, chat, generate, download, research, share |
| MCP Server (mcp_server/) | FastMCP server exposing 13 tools for Claude Code / Cursor / Gemini CLI |
| Wrapper CLI (scripts/) | Our higher-level wrappers: notebooklm_client.py, pipeline.py |
| LLM (Claude) | Content creator (writes original text using NotebookLM research) |
| trend-pulse (optional) | Trending topic discovery for research-to-content pipelines |
| threads-viral-agent (optional) | Social publishing for content distribution |
┌──────────────────────────────────────────────────────────────────────────────────┐
│ NOTEBOOKLM RESEARCH AGENT │
├──────────────┬──────────────┬─────────────────┬─────────────────────────────────┤
│ Phase 1 │ Phase 2 │ Phase 3 │ Phase 4 │
│ INGEST │ SYNTHESIZE │ CREATE │ PUBLISH (optional) │
│ │ │ │ │
│ Sources: │ Chat: │ Claude writes: │ threads-viral-agent: │
│ URL │ ask() │ Articles ────→ │ → Threads │
│ Text │ → cited │ Social posts → │ → Instagram │
│ PDF/DOCX │ answers │ Newsletters → │ → Facebook │
│ YouTube │ → follow-up │ Reports ─────→ │ │
│ Google Drive│ → citations │ │ Direct output: │
│ File upload │ │ trend-pulse │ → Markdown file │
│ │ Artifacts │ → topic ideas │ → JSON data │
│ Research: │ (9 types): │ │ → Newsletter draft │
│ web (fast) │ audio │ NotebookLM │ → Podcast MP4 │
│ web (deep) │ video │ artifacts used │ → Video MP4 │
│ drive │ cinematic* │ directly: │ → Slide deck PDF │
│ │ slide_deck │ → Podcast │ → Quiz / Flashcards │
│ Auto-import │ report │ → Report │ │
│ discovered │ quiz │ → Data table │ │
│ sources │ flashcards │ → Infographic │ │
│ │ mind_map │ │ * cinematic = Veo 3, │
│ │ infographic │ │ AI Ultra only │
│ │ data_table │ │ │
│ │ study_guide │ │ │
└──────────────┴──────────────┴─────────────────┴─────────────────────────────────┘
8 Sub-APIs (notebooklm-py v0.3.4)
| Sub-API | Accessor | Description |
|---|---|---|
| Notebooks | client.notebooks | Create, list, get, delete, rename, describe, share |
| Sources | client.sources | Add URL/text/file/Drive, list, delete, rename, refresh, guide, fulltext, wait |
| Artifacts | client.artifacts | Generate 9 downloadable types, poll status, download, list, delete, rename, revise slides |
| Chat | client.chat | Ask with citations, follow-up, conversation history, configure persona |
| Research | client.research | Web/Drive research, poll results, import discovered sources |
| Notes | client.notes | Create, list, update, delete text notes and mind maps |
| Settings | client.settings | User settings (output language) |
| Sharing | client.sharing | Public links, user permissions, view levels |
Phase 1: INGEST -- Source Collection
Create a notebook and populate it with sources. NotebookLM accepts 8 source types: URLs, text, PDF, DOCX, Markdown, CSV, YouTube, and Google Drive documents.
Create Notebook and Add Sources
Built-in CLI (notebooklm-py):
# Create a notebook
notebooklm notebook create "AI Agents Research"
# Add sources
notebooklm source add NOTEBOOK_ID --url "https://arxiv.org/abs/2401.12345"
notebooklm source add NOTEBOOK_ID --url "https://youtube.com/watch?v=VIDEO_ID"
notebooklm source add NOTEBOOK_ID --text "Custom Notes" --content "Full text here..."
notebooklm source add NOTEBOOK_ID --file /path/to/document.pdf
Our wrapper CLI (global command or scripts/notebooklm_client.py):
# After pip install ., use global commands:
# notebooklm-skill create --title "AI Agents Research" --sources url1 url2
# Or use scripts directly:
python3 scripts/notebooklm_client.py create \
--title "AI Agents Research" \
--sources \
"https://arxiv.org/abs/2401.12345" \
"https://blog.example.com/ai-agents-2026"
# Add more sources to existing notebook
python3 scripts/notebooklm_client.py add-source \
--notebook NOTEBOOK_ID \
--url "https://another-source.com/article"
# Add text source (pasted content)
python3 scripts/notebooklm_client.py add-source \
--notebook NOTEBOOK_ID \
--text "Full text content here..." \
--text-title "Title of Source"
# Add file (PDF, Markdown, DOCX, CSV)
python3 scripts/notebooklm_client.py add-source \
--notebook NOTEBOOK_ID \
--file "/path/to/document.pdf"
# Add YouTube video (auto-extracts transcript)
python3 scripts/notebooklm_client.py add-source \
--notebook NOTEBOOK_ID \
--url "https://youtube.com/watch?v=VIDEO_ID"
# Add Google Drive document
python3 scripts/notebooklm_client.py add-source \
--notebook NOTEBOOK_ID \
--drive-id "DRIVE_FILE_ID" \
--drive-title "Document Title"
Deep Web Research (auto-discover sources)
NotebookLM can search the web or Google Drive and auto-import relevant sources. This is one of the most powerful features -- it finds sources you did not know existed.
Built-in CLI:
notebooklm research start NOTEBOOK_ID "latest advances in AI agents"
notebooklm research poll NOTEBOOK_ID
Our wrapper CLI:
# Fast web research (quick scan, returns URLs)
python3 scripts/notebooklm_client.py research \
--notebook NOTEBOOK_ID \
--query "latest advances in AI agents" \
--source web \
--mode fast
# Deep web research (thorough analysis, returns report + URLs)
python3 scripts/notebooklm_client.py research \
--notebook NOTEBOOK_ID \
--query "comparison of agent frameworks" \
--source web \
--mode deep
# Google Drive research
python3 scripts/notebooklm_client.py rese