| name | notebooklm-mcp-programmatic-access |
| description | Programmatic access to Google NotebookLM via CLI and MCP server for AI-powered research, podcast generation, and notebook management |
| triggers | ["use notebooklm to create a research notebook","generate a podcast from my sources using notebooklm","add documents to a notebooklm notebook","query my notebooklm notebook about","create studio content with notebooklm","set up notebooklm mcp server","authenticate with notebooklm","batch process notebooks in notebooklm"] |
NotebookLM MCP & CLI
Skill by ara.so — Devtools Skills collection.
notebooklm-mcp-cli provides programmatic access to Google NotebookLM through both a command-line interface (nlm) and Model Context Protocol (MCP) server (notebooklm-mcp). Use it to automate research workflows, generate AI podcasts, manage notebooks, and integrate NotebookLM into AI coding agents.
What It Does
- Notebook Management: Create, list, delete, and share NotebookLM notebooks
- Source Management: Add sources from URLs, text, Google Drive, or local files
- AI Studio: Generate audio podcasts, video presentations, slide decks, and infographics
- Query & Research: Query notebooks, perform web/Drive research, cross-notebook queries
- Automation: Batch operations, pipelines, tagging, and smart selection
- MCP Integration: Connect Claude, Gemini, Cursor, and other AI tools to NotebookLM
- Profile Support: Manage multiple Google accounts with isolated browser sessions
Installation
Using uv (Recommended)
uv tool install notebooklm-mcp-cli
Using pip
pip install notebooklm-mcp-cli
Using pipx
pipx install notebooklm-mcp-cli
After installation, you get:
nlm — CLI command
notebooklm-mcp — MCP server executable
Authentication
Before using, authenticate with your Google account:
nlm login
nlm login --check
nlm login --profile work
nlm login --profile personal
nlm login switch personal
nlm login profile list
nlm login --manual --file cookies.txt
Profile Management:
nlm login profile list
nlm login profile delete work
nlm login profile rename old new
Each profile maintains its own browser session and cookies, allowing simultaneous use of multiple Google accounts.
CLI Quick Start
Basic Workflow
nlm notebook list
nlm notebook create "AI Research Project"
nlm source add <notebook-id> --url "https://example.com/article"
nlm source add <notebook-id> --text "Raw text content here"
nlm source add <notebook-id> --drive "https://docs.google.com/document/d/..."
nlm source add <notebook-id> --file ./document.pdf
nlm notebook query <notebook-id> "What are the key findings?"
nlm studio create <notebook-id> --type audio --confirm
nlm download audio <notebook-id> <artifact-id>
nlm share public <notebook-id>
Studio Content Types
nlm studio create <notebook-id> --type audio --confirm
nlm studio create <notebook-id> --type video --confirm
nlm studio create <notebook-id> --type slides --confirm
nlm studio create <notebook-id> --type infographic --confirm
nlm slides revise <notebook-id> <artifact-id> "Make it more technical"
Advanced Features
nlm batch query "What are the main themes?" --tag research
nlm cross query "Compare findings across all notebooks" --tag project-alpha
nlm pipeline run research-workflow --input '{"topic": "quantum computing"}'
nlm tag add <notebook-id> research ai ml
nlm tag list
nlm tag select --tag research --limit 5
nlm research start <notebook-id> --query "latest AI developments" --max-results 10
Configuration
nlm config set auth.browser brave
nlm config set auth.default_profile work
nlm config list
MCP Server Setup
Automatic Configuration
nlm setup add claude-code
nlm setup add claude-desktop
nlm setup add gemini
nlm setup add cursor
nlm setup add github-copilot
nlm setup add windsurf
nlm setup add json
nlm setup list
nlm setup remove claude-code
Manual Configuration
If automatic setup doesn't work, add to your MCP client's config:
Claude Desktop/Code (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"notebooklm": {
"command": "notebooklm-mcp"
}
}
}
Cursor (.cursor/mcp_config.json):
{
"mcpServers": {
"notebooklm": {
"command": "notebooklm-mcp"
}
}
}
MCP Tools Reference
The MCP server provides 35 tools. Key tools include:
Notebook Operations
notebook_list — List all notebooks
notebook_create — Create new notebook
notebook_delete — Delete notebook
notebook_query — Query notebook (persists to web UI)
notebook_get — Get notebook details
notebook_share_public — Enable public sharing
notebook_share_invite — Share with specific users
Source Management
source_add — Add URL, text, Drive, or file source
source_list — List sources in notebook
source_delete — Remove source
source_sync_drive — Sync Drive folder
Studio Content
studio_create — Generate audio, video, slides, or infographic
studio_revise — Revise slide decks
download_artifact — Download generated content
Research
research_start — Web/Drive research
research_status — Check research progress
cross_notebook_query — Query across multiple notebooks
Batch & Automation
batch — Batch operations (query, create, delete)
pipeline — Multi-step workflows
tag — Tag and organize notebooks
Code Examples
Python: Using the MCP Client
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
server_params = StdioServerParameters(
command="notebooklm-mcp",
env=None
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
result = await session.call_tool("notebook_list", {})
print(result)
result = await session.call_tool("notebook_create", {
"title": "Research Project"
})
notebook_id = result["id"]
await session.call_tool("source_add", {
"notebook": notebook_id,
"url": "https://example.com/article"
})
result = await session.call_tool("notebook_query", {
"notebook": notebook_id,
"query": "Summarize the key points"
})
print(result)
result = await session.call_tool("studio_create", {
"notebook": notebook_id,
"content_type": ,
:
})
artifact_id = result[]
audio_data = session.call_tool(, {
: notebook_id,
: artifact_id,
:
})
Shell Script: Automated Research Pipeline
#!/bin/bash
NOTEBOOK_ID=$(nlm notebook create "Daily Research" | jq -r '.id')
nlm source add "$NOTEBOOK_ID" --url "https://news.ycombinator.com"
nlm source add "$NOTEBOOK_ID" --url "https://arxiv.org/list/cs.AI/recent"
nlm research start "$NOTEBOOK_ID" --query "latest AI breakthroughs" --max-results 20
sleep 60
nlm studio create "$NOTEBOOK_ID" --type audio --confirm
ARTIFACT_ID=$(nlm notebook get "$NOTEBOOK_ID" | jq -r '.artifacts[] | select(.type=="audio") | .id' | head -1)
nlm download audio "$NOTEBOOK_ID" "$ARTIFACT_ID" --output ./daily-brief.wav
nlm share public "$NOTEBOOK_ID"
Python: Batch Processing
import subprocess
import json
notebooks = ["nb1", "nb2", "nb3"]
for nb in notebooks:
subprocess.run(["nlm", "tag", "add", nb, "research", "2024"])
result = subprocess.run(
["nlm", "batch", "query", "What are the main themes?", "--tag", "research"],
capture_output=True,
text=True
)
batch_results = json.loads(result.stdout)
for nb_id, response in batch_results.items():
print(f"Notebook {nb_id}:")
print(response["answer"])
print("---")
Natural Language with MCP (Claude Code)
Once configured, use natural language:
User: Create a NotebookLM notebook about quantum computing, add sources from
arxiv.org and nature.com, then generate a podcast summarizing the key concepts.