Use this file to discover all available pages before exploring further.
The NotebookLM MCP server registers 39 tools that any MCP-compatible AI assistant can call on your behalf. This page documents every tool: what it does, the parameters it accepts, and a usage example. Tools are organized by category — use the accordions below to explore each group. For setup instructions, see the MCP Overview.
Several tools are unified — a single tool that handles multiple related operations via a source_type, artifact_type, or action parameter. Prefer these over chaining multiple single-purpose calls; they save context and reduce round-trips.
# Add a URLsource_add(notebook_id="abc123", source_type="url", url="https://example.com/article")# Add multiple URLs at oncesource_add(notebook_id="abc123", source_type="url", urls=["https://a.com", "https://b.com"])# Add a URL and wait for processing to completesource_add(notebook_id="abc123", source_type="url", url="https://example.com", wait=True)# Add pasted textsource_add(notebook_id="abc123", source_type="text", text="Key findings from the meeting...", title="Meeting Notes")# Upload a local PDFsource_add(notebook_id="abc123", source_type="file", file_path="/home/user/report.pdf", wait=True)# Add a Google Drive documentsource_add(notebook_id="abc123", source_type="drive", document_id="1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms", doc_type="doc")
source_list_drive — List sources with Drive freshness
List all sources in a notebook and their Drive sync status (fresh or stale). Call this before source_sync_drive to identify which sources need updating.
Retrieve the raw indexed text of a source without any AI processing. Much faster than notebook_query for content export. Works for PDFs, web pages, pasted text, and YouTube transcripts.Returns content, title, source_type, and char_count.
Ask the NotebookLM AI a question about the sources already in a notebook. Responses are grounded in the notebook’s sources and include citations. Note: This tool is for querying existing content — use research_start to find new sources on the web or in Drive.All queries sent through this tool automatically persist in your NotebookLM web UI chat history.
Request timeout in seconds. Overrides NOTEBOOKLM_QUERY_TIMEOUT env var.
# Basic querynotebook_query(notebook_id="abc123", query="What are the three most important takeaways?")# Follow-up in the same conversationnotebook_query(notebook_id="abc123", query="Can you expand on point two?", conversation_id="conv_xyz")# Query specific sources onlynotebook_query(notebook_id="abc123", query="What does this source say about security?", source_ids=["src_1", "src_2"])
chat_configure — Configure chat behavior
Set the AI chat goal and response length for a notebook. Changes affect all future notebook_query calls on that notebook.
Desired response length: default, longer, or shorter.
chat_configure(notebook_id="abc123", goal="learning_guide", response_length="longer")chat_configure(notebook_id="abc123", goal="custom", custom_prompt="Always respond in bullet points.")
notebook_query_start — Start an async query
Start a notebook query asynchronously. Use this instead of notebook_query when querying notebooks with many sources (50+) where the response may exceed 60 seconds. Returns immediately with a query_id. Poll notebook_query_status until the result is ready.
Create any type of NotebookLM studio artifact. This is the unified creation tool that replaces nine separate create operations. Requires user confirmation before proceeding.
Optional free-text focus instruction applied to all artifact types.
# Audio podcast (deep dive format)studio_create(notebook_id="abc123", artifact_type="audio", audio_format="deep_dive", confirm=True)# Video with cinematic stylestudio_create(notebook_id="abc123", artifact_type="video", video_format="cinematic", visual_style="watercolor", confirm=True)# Briefing doc reportstudio_create(notebook_id="abc123", artifact_type="report", report_format="Briefing Doc", confirm=True)# Study quiz with 10 questionsstudio_create(notebook_id="abc123", artifact_type="quiz", question_count=10, difficulty="hard", confirm=True)# Flashcardsstudio_create(notebook_id="abc123", artifact_type="flashcards", difficulty="medium", confirm=True)# Professional infographicstudio_create(notebook_id="abc123", artifact_type="infographic", orientation="landscape", infographic_style="professional", confirm=True)# Slide deckstudio_create(notebook_id="abc123", artifact_type="slide_deck", slide_format="detailed_deck", confirm=True)
After calling studio_create, poll studio_status until the artifact’s status shows completed. Generation typically takes 1–5 minutes depending on artifact type.
studio_status — Check generation progress
Check the status of all studio artifacts in a notebook. Also supports renaming an artifact or listing all supported artifact types.
Returns artifacts list (each with artifact_id, title, type, status, and url) and a summary with counts.
# Poll until all artifacts are completedstudio_status(notebook_id="abc123")# Rename an artifactstudio_status(notebook_id="abc123", action="rename", artifact_id="art_xyz", new_title="Weekly Podcast Ep 12")# List all artifact types and their optionsstudio_status(notebook_id="abc123", action="list_types")
studio_delete — Delete an artifact (irreversible)
Permanently delete a studio artifact. Call studio_status first to list artifact IDs.
Apply targeted revisions to individual slides in an existing slide deck. Creates a new artifact — the original is not modified. Only slide decks support revision. Poll studio_status after calling to wait for the new deck.
studio_revise( notebook_id="abc123", artifact_id="art_xyz", slide_instructions=[ {"slide": 1, "instruction": "Make the title larger and bolder"}, {"slide": 3, "instruction": "Replace the bullet list with a comparison table"} ], confirm=True)
download_artifact — Download any artifact (unified)
Download a completed studio artifact to a local file. This unified tool replaces nine separate download commands. Ensure studio_status shows completed before downloading.
Export a completed studio artifact to Google Docs or Google Sheets. Useful for reports, data tables, and other text-based artifacts. Returns the URL to the created Google Doc or Sheet.
# Export a report to Google Docsexport_artifact(notebook_id="abc123", artifact_id="art_xyz", export_type="docs", title="My Report")# Export a data table to Google Sheetsexport_artifact(notebook_id="abc123", artifact_id="art_xyz", export_type="sheets")
Launch a research task that searches the web or your Google Drive for sources relevant to a query. Returns immediately with a task_id. Poll research_status to wait for results, then call research_import to add the discovered sources to the notebook.
Title for the new notebook to create. Used when notebook_id is not provided.
# Start deep web researchresearch_start(query="enterprise AI ROI metrics", mode="deep", notebook_id="abc123")# Fast research with auto-created notebookresearch_start(query="cloud marketplace trends", mode="fast", title="Cloud Research")
research_status — Poll research progress
Block until a research task completes or the timeout is reached. Returns a summary report and list of discovered sources.
Retrieve the current sharing configuration for a notebook, including whether it is public, the access level, the public link (if any), and the list of collaborators.
Reload authentication tokens from disk. Call this after running nlm login in a terminal so the MCP server picks up the fresh cookies without a restart. Also attempts headless browser re-authentication if a saved Chrome profile exists.
refresh_auth()
refresh_auth() reloads tokens from disk but cannot revive expired credentials. If your Google session has fully expired, run nlm login in a terminal first.
save_auth_tokens — Save cookies manually (fallback)
Save NotebookLM cookies directly from a browser cookie header. This is a fallback method — prefer nlm login (automated CLI) first.
Return the currently installed version, the latest version on PyPI, whether an update is available, and the current authentication status. The AI assistant will suggest updating if update_available is True.
server_info()
Returns:
version — installed version string
latest_version — latest PyPI version (or null if check failed)
update_available — true if a newer version exists
auth_status — configured, stale, unverified, not_configured, or error
Required for action=delete. Must be True after user approval.
# Query multiple notebooksbatch(action="query", query="What are the key findings?", notebook_names="AI Research, Dev Tools")# Add the same URL to all tagged notebooksbatch(action="add_source", source_url="https://example.com/report", tags="ai,research")# Create three notebooks at oncebatch(action="create", titles="Project A, Project B, Project C")# Delete notebooks by name (requires confirm)batch(action="delete", notebook_names="Old Draft, Temp Notes", confirm=True)# Generate audio podcasts for all tagged notebooksbatch(action="studio", artifact_type="audio", tags="research", confirm=True)
cross_notebook_query — Aggregated query across notebooks
Ask the same question across multiple notebooks and receive aggregated answers with per-notebook citations. Useful for synthesis and comparison tasks.
cross_notebook_query(query="Compare the main approaches discussed", notebook_names="Notebook A, Notebook B")cross_notebook_query(query="Summarize the main conclusions", tags="ai,research")cross_notebook_query(query="What are the recurring themes?", all=True)
Input URL for the pipeline (used by ingest-and-podcast and research-and-report).
Built-in pipelines:
ingest-and-podcast — Add a URL source and generate an audio podcast
research-and-report — Run deep research and generate a briefing doc
multi-format — Generate audio, slide deck, and briefing doc in one pass
# List available pipelinespipeline(action="list")# Run ingest-and-podcast end-to-endpipeline(action="run", notebook_id="abc123", pipeline_name="ingest-and-podcast", input_url="https://example.com/article")# Run research-and-reportpipeline(action="run", notebook_id="abc123", pipeline_name="research-and-report", input_url="https://example.com")
Organize sources in a notebook into thematic categories using AI-generated or manually managed labels. Requires at least 5 sources for auto-labeling. Sources can belong to multiple labels simultaneously.
For reorganize: if True, only label sources not yet assigned to any label (no confirmation needed). If False, replaces all existing labels from scratch (requires confirm=True).
Required for delete and for reorganize with unlabeled_only=False.
# AI auto-label all sourceslabel(notebook_id="abc123", action="auto")# List current labelslabel(notebook_id="abc123", action="list")# Re-categorize everything from scratchlabel(notebook_id="abc123", action="reorganize", confirm=True)# Only label sources not yet in any categorylabel(notebook_id="abc123", action="reorganize", unlabeled_only=True)# Create a new label with an emojilabel(notebook_id="abc123", action="create", name="Research", emoji="📚")# Rename a labellabel(notebook_id="abc123", action="rename", label_id="lbl_xyz", name="Core Research")# Set an emoji on a labellabel(notebook_id="abc123", action="set_emoji", label_id="lbl_xyz", emoji="🎯")# Assign a source to a labellabel(notebook_id="abc123", action="move_source", label_id="lbl_xyz", source_id="src_abc")# Delete a label (sources are preserved)label(notebook_id="abc123", action="delete", label_id="lbl_xyz", confirm=True)
action=delete permanently removes the label. Sources assigned to the label are not deleted — they remain in the notebook.
Natural language query for smart tag matching. Used with action=select.
# Add tags to a notebooktag(action="add", notebook_id="abc123", tags="ai,research,llm")# Remove a tagtag(action="remove", notebook_id="abc123", tags="llm")# List all tagged notebookstag(action="list")# Find notebooks relevant to a query by tagtag(action="select", query="ai research papers")