Skip to main content
Glama
Robiton
by Robiton

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
NOTEBOOKLM_MODENoSet to 'enterprise' for enterprise mode, default is personal.personal
NOTEBOOKLM_LOCATIONNoLocation for enterprise API (global, us, or eu). Defaults to 'global'.global
NOTEBOOKLM_PROJECT_IDNoYour Google Cloud project number (required only in enterprise mode).

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
extensions
{
  "io.modelcontextprotocol/ui": {}
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
refresh_authA

Reload auth tokens from disk or run headless re-authentication.

Call this after running nlm login to pick up new tokens, or to attempt automatic re-authentication if Chrome profile has saved login.

Returns status indicating if tokens were refreshed successfully.

save_auth_tokensA

Save NotebookLM cookies (FALLBACK method - try nlm login first!).

IMPORTANT FOR AI ASSISTANTS:

  • First, run nlm login via Bash/terminal (automated, preferred)

  • Only use this tool if the automated CLI fails

Args: cookies: Cookie header from Chrome DevTools (only needed if CLI fails) csrf_token: Deprecated - auto-extracted session_id: Deprecated - auto-extracted request_body: Optional - contains CSRF if extracting manually request_url: Optional - contains session ID if extracting manually

batchA

Perform batch operations across multiple notebooks.

Actions:

  • query: Query multiple notebooks with the same question

  • add_source: Add the same source URL to multiple notebooks

  • create: Create multiple notebooks at once

  • delete: Delete multiple notebooks (IRREVERSIBLE, requires confirm=True)

  • studio: Generate studio artifacts across multiple notebooks

Args: action: Operation to perform (query, add_source, create, delete, studio) query: Question to ask (for action=query) source_url: URL to add (for action=add_source) titles: Comma-separated notebook titles (for action=create) artifact_type: Artifact type (for action=studio): audio, video, report, etc. notebook_names: Comma-separated notebook names or IDs tags: Comma-separated tags to select notebooks all: Apply to ALL notebooks confirm: Must be True for delete action

notebook_queryA

Ask AI about EXISTING sources already in notebook. NOT for finding new sources.

Use research_start instead for: deep research, web search, find new sources, Drive search.

Args: notebook_id: Notebook UUID query: Question to ask source_ids: Source IDs to query (default: all) conversation_id: For follow-up questions timeout: Request timeout in seconds (default: from env NOTEBOOKLM_QUERY_TIMEOUT or 120.0)

chat_configureB

Configure notebook chat settings.

Args: notebook_id: Notebook UUID goal: default|learning_guide|custom custom_prompt: Required when goal=custom (max 10000 chars) response_length: default|longer|shorter

notebook_query_startA

Start a notebook query asynchronously for large notebooks that may timeout.

Use this instead of notebook_query when querying notebooks with many sources (50+) where the response may take longer than 60 seconds. Returns immediately with a query_id. Poll notebook_query_status with the query_id to get the result.

Workflow: notebook_query_start -> poll notebook_query_status until completed.

Args: notebook_id: Notebook UUID query: Question to ask source_ids: Source IDs to query (default: all) conversation_id: For follow-up questions timeout: Request timeout in seconds (default: from env NOTEBOOKLM_QUERY_TIMEOUT or 120.0)

notebook_query_statusA

Check the status of an async notebook query started with notebook_query_start.

Returns the query result when completed, or current status if still in progress. Poll this tool every few seconds until status is 'completed' or 'error'.

Args: query_id: The query ID returned by notebook_query_start

cross_notebook_queryA

Query multiple notebooks and get aggregated answers with per-notebook citations.

Specify notebooks by name, by tags, or use all=True for all notebooks.

Args: query: Question to ask across notebooks notebook_names: Comma-separated notebook names or IDs (e.g. "AI Research, Dev Tools") tags: Comma-separated tags to select notebooks (e.g. "ai,mcp") all: Query ALL notebooks (use with caution — rate limits apply)

download_artifactA

Download any NotebookLM artifact to a file.

Unified download tool replacing 9 separate download tools. Supports all artifact types: audio, video, report, mind_map, slide_deck, infographic, data_table, quiz, flashcards.

Args: notebook_id: Notebook UUID artifact_type: Type of artifact to download: - audio: Audio Overview (MP4/MP3) - video: Video Overview (MP4) - report: Report (Markdown) - mind_map: Mind Map (JSON) - slide_deck: Slide Deck (PDF or PPTX) - infographic: Infographic (PNG) - data_table: Data Table (CSV) - quiz: Quiz (json|markdown|html) - flashcards: Flashcards (json|markdown|html) output_path: Path to save the file artifact_id: Optional specific artifact ID (uses latest if not provided) output_format: For quiz/flashcards only: json|markdown|html (default: json) slide_deck_format: For slide_deck only: pdf (default) or pptx

Returns: dict with status and saved file path

Example: download_artifact(notebook_id="abc123", artifact_type="audio", output_path="podcast.mp3") download_artifact(notebook_id="abc123", artifact_type="quiz", output_path="quiz.html", output_format="html") download_artifact(notebook_id="abc123", artifact_type="slide_deck", output_path="slides.pptx", slide_deck_format="pptx")

export_artifactA

Export a NotebookLM artifact to Google Docs or Sheets.

Supports:

  • Data Tables → Google Sheets

  • Reports (Briefing Doc, Study Guide, Blog Post) → Google Docs

Args: notebook_id: Notebook UUID artifact_id: Artifact UUID to export export_type: "docs" or "sheets" title: Title for exported document (optional)

Returns: URL to the created Google Doc/Sheet

notebook_listA

List all notebooks.

Args: max_results: Maximum number of notebooks to return (default: 100)

notebook_getC

Get notebook details with sources.

Args: notebook_id: Notebook UUID

notebook_describeA

Get AI-generated notebook summary with suggested topics.

Args: notebook_id: Notebook UUID

Returns: summary (markdown), suggested_topics list

notebook_createB

Create a new notebook.

Args: title: Optional title for the notebook

notebook_renameB

Rename a notebook.

Args: notebook_id: Notebook UUID new_title: New title

notebook_deleteA

Delete notebook permanently. IRREVERSIBLE. Requires confirm=True.

Args: notebook_id: Notebook UUID confirm: Must be True after user approval

noteA

Manage notes in a notebook. Unified tool for all note operations.

Supports: create, list, update, delete

Args: notebook_id: Notebook UUID action: Operation to perform: - create: Create a new note - list: List all notes in notebook - update: Update an existing note - delete: Delete a note permanently (requires confirm=True) note_id: Note UUID (required for update/delete) content: Note content (required for create, optional for update) title: Note title (optional for create/update) confirm: Must be True for delete action

Returns: Action-specific response with status

Example: note(notebook_id="abc", action="list") note(notebook_id="abc", action="create", content="My note", title="Title") note(notebook_id="abc", action="update", note_id="xyz", content="Updated") note(notebook_id="abc", action="delete", note_id="xyz", confirm=True)

pipelineA

Manage and execute multi-step notebook pipelines.

Actions:

  • run: Execute a pipeline on a notebook

  • list: List all available pipelines (builtin and user-defined)

Args: action: Operation to perform (run, list) notebook_id: Target notebook UUID (required for action=run) pipeline_name: Pipeline name (required for action=run, e.g. "ingest-and-podcast") input_url: URL variable for pipelines that need it (replaces $INPUT_URL)

podcast_createA

Generate a standalone podcast from text (Enterprise only, no notebook needed).

Args: text: Text content to turn into a podcast. Can be a single string or a list of strings (each becomes a separate context). title: Optional podcast title description: Optional podcast description focus: Optional topic focus prompt to guide the podcast length: "SHORT" (~4-5 min) or "STANDARD" (~10 min) language: Language code (default: "en")

Returns: Dictionary with operation name for tracking and downloading.

podcast_downloadA

Download a completed standalone podcast.

Args: operation_name: The operation name from podcast_create response output_path: Local file path to save the MP3 (default: ~/Downloads/podcast.mp3)

Returns: Dictionary with the downloaded file path.

research_startA

Deep research / fast research: Search web or Google Drive to FIND NEW sources.

Use this for: "deep research on X", "find sources about Y", "search web for Z", "search Drive". Workflow: research_start -> poll research_status -> research_import.

Args: query: What to search for (e.g. "quantum computing advances") source: web|drive (where to search) mode: fast (~30s, ~10 sources) | deep (~5min, ~40 sources, web only) notebook_id: Existing notebook (creates new if not provided) title: Title for new notebook

research_statusA

Poll research progress. Blocks until complete or timeout.

Args: notebook_id: Notebook UUID poll_interval: Seconds between polls (default: 30) max_wait: Max seconds to wait (default: 300, 0=single poll) compact: If True (default), truncate report and limit sources shown to save tokens. Use compact=False to get full details. task_id: Optional Task ID to poll for a specific research task. query: Optional query text for fallback matching when task_id changes (deep research). Contributed by @saitrogen (PR #15).

research_importA

Import discovered sources into notebook.

Call after research_status shows status="completed".

Args: notebook_id: Notebook UUID task_id: Research task ID source_indices: Source indices to import (default: all) timeout: Import timeout in seconds (default: 300, increase for large notebooks)

server_infoB

Get server version, mode, and auth status.

Returns: dict with version, configuration, and auth status for both modes.

configure_modeA

Configure NotebookLM mode (personal or enterprise).

IMPORTANT: Enterprise and personal use SEPARATE authentication.

  • Enterprise: requires gcloud auth login (GCP OAuth2)

  • Personal: requires nlm login (browser cookie auth) Switching modes without the correct auth will cause 400/401 errors. Always confirm the user has authenticated for the target mode before switching.

Args: mode: "personal" or "enterprise" project_id: GCP project number (required for enterprise, found in NotebookLM URL) location: GCP location - "global", "us", or "eu" (default: "global")

Returns: Dictionary with status, configuration, and auth requirements.

notebook_share_statusA

Get current sharing settings and collaborators.

Args: notebook_id: Notebook UUID

Returns: is_public, access_level, collaborators list, and public_link if public

notebook_share_publicA

Enable or disable public link access.

Args: notebook_id: Notebook UUID is_public: True to enable public link, False to disable (default: True)

Returns: public_link if enabled, None if disabled

notebook_share_inviteA

Invite a collaborator by email.

Args: notebook_id: Notebook UUID email: Email address to invite role: "viewer" or "editor" (default: viewer)

Returns: success status

notebook_share_batchA

Invite multiple collaborators in a single request.

Args: notebook_id: Notebook UUID recipients: List of dicts, each with 'email' (str) and optional 'role' (str). Role defaults to 'viewer'. Example: [{"email": "a@b.com", "role": "editor"}] confirm: Must be True after user approval

Returns: invited_count, recipients list, and message

tagA

Manage notebook tags and find relevant notebooks by tag matching.

Actions:

  • add: Add tags to a notebook for smart selection

  • remove: Remove tags from a notebook

  • list: List all tagged notebooks with their tags

  • select: Find notebooks relevant to a query using tag matching

Args: action: Operation to perform (add, remove, list, select) notebook_id: Notebook UUID (required for add, remove) tags: Comma-separated tags (required for add, remove; e.g. "ai,research,llm") notebook_title: Optional display title (for add) query: Search query (required for select; e.g. "ai mcp" or "ai,mcp")

source_addA

Add a source to a notebook. Unified tool for all source types.

Supports: url, text, drive, file

For URL sources, a paywall/login check is performed before adding. If the URL appears to require authentication or a subscription, the tool returns a "paywall_detected" status with instructions. Set skip_paywall_check=True to bypass (e.g. the user confirms they have an account on that site).

Args: notebook_id: Notebook UUID source_type: Type of source to add: - url: Web page or YouTube URL - text: Pasted text content - drive: Google Drive document - file: Local file upload (PDF, text, audio) url: URL to add (for source_type=url) urls: List of URLs to add in bulk (for source_type=url, alternative to url) text: Text content to add (for source_type=text) title: Display title (for text sources) file_path: Local file path (for source_type=file) document_id: Google Drive document ID (for source_type=drive) doc_type: Drive doc type: doc|slides|sheets|pdf (for source_type=drive) wait: If True, wait for source processing to complete before returning wait_timeout: Max seconds to wait if wait=True (default 120) skip_paywall_check: If True, skip paywall/login check and add URL anyway

Example: source_add(notebook_id="abc", source_type="url", url="https://example.com") source_add(notebook_id="abc", source_type="url", urls=["https://a.com", "https://b.com"]) source_add(notebook_id="abc", source_type="url", url="https://ft.com/article", skip_paywall_check=True) source_add(notebook_id="abc", source_type="file", file_path="/path/to/doc.pdf", wait=True)

source_list_driveA

List sources with types and Drive freshness status.

Use before source_sync_drive to identify stale sources.

Args: notebook_id: Notebook UUID

source_sync_driveA

Sync Drive sources with latest content. Requires confirm=True.

Call source_list_drive first to identify stale sources.

Args: source_ids: Source UUIDs to sync confirm: Must be True after user approval

source_renameA

Rename a source in a notebook.

Args: notebook_id: Notebook UUID containing the source source_id: Source UUID to rename new_title: New display title for the source

source_deleteA

Delete source(s) permanently. IRREVERSIBLE. Requires confirm=True.

Args: source_id: Source UUID to delete (single) source_ids: List of source UUIDs to delete (bulk, alternative to source_id) confirm: Must be True after user approval

source_describeB

Get AI-generated source summary with keyword chips.

Args: source_id: Source UUID

Returns: summary (markdown with bold keywords), keywords list

source_get_contentA

Get raw text content of a source (no AI processing).

Returns the original indexed text from PDFs, web pages, pasted text, or YouTube transcripts. Much faster than notebook_query for content export.

Args: source_id: Source UUID

Returns: content (str), title (str), source_type (str), char_count (int)

studio_createA

Create any NotebookLM studio artifact. Unified creation tool.

Supports: audio, video, infographic, slide_deck, report, flashcards, quiz, data_table, mind_map

Args: notebook_id: Notebook UUID artifact_type: Type of artifact to create: - audio: Audio Overview (podcast) - video: Video Overview - infographic: Visual infographic - slide_deck: Presentation slides (PDF) - report: Text report (Briefing Doc, Study Guide, etc.) - flashcards: Study flashcards - quiz: Multiple choice quiz - data_table: Structured data table - mind_map: Visual mind map source_ids: Source IDs to use (default: all sources) confirm: Must be True after user approval

Type-specific options:
- audio: audio_format (deep_dive|brief|critique|debate), audio_length (short|default|long)
- video: video_format (explainer|brief|cinematic), visual_style (auto_select|custom|classic|whiteboard|kawaii|anime|watercolor|retro_print|heritage|paper_craft), video_style_prompt
- infographic: orientation (landscape|portrait|square), detail_level (concise|standard|detailed), infographic_style (auto_select|sketch_note|professional|bento_grid|editorial|instructional|bricks|clay|anime|kawaii|scientific)
- slide_deck: slide_format (detailed_deck|presenter_slides), slide_length (short|default)
- report: report_format (Briefing Doc|Study Guide|Blog Post|Create Your Own), custom_prompt
- flashcards: difficulty (easy|medium|hard)
- quiz: question_count (int), difficulty (easy|medium|hard)
- data_table: description (required)
- mind_map: title

Common options:
- language: BCP-47 code (en, es, fr, de, ja). Defaults to NOTEBOOKLM_HL env var or 'en'
- focus_prompt: Optional focus text

Example: studio_create(notebook_id="abc", artifact_type="audio", confirm=True) studio_create(notebook_id="abc", artifact_type="quiz", question_count=5, confirm=True)

studio_statusA

Check studio content generation status and get URLs, or rename an artifact.

Args: notebook_id: Notebook UUID action: Action to perform: - status (default): List all artifacts with their status and URLs - rename: Rename an artifact (requires artifact_id and new_title) - list_types: List all supported artifact types with their options artifact_id: Required for action="rename" - the artifact UUID to rename new_title: Required for action="rename" - the new title for the artifact

Returns: Dictionary with status and results. For action="status": - status: "success" - artifacts: List of artifacts, each containing: - artifact_id: UUID - title: Artifact title - type: audio, video, report, etc. - status: completed, in_progress, failed - url: URL to view/download (if applicable) - custom_instructions: The custom prompt/focus instructions used to generate the artifact (if any) - summary: Counts of total, completed, in_progress

studio_deleteA

Delete studio artifact. IRREVERSIBLE. Requires confirm=True.

Args: notebook_id: Notebook UUID artifact_id: Artifact UUID (from studio_status) confirm: Must be True after user approval

studio_reviseA

Revise individual slides in an existing slide deck. Creates a NEW artifact.

Only slide decks support revision. The original artifact is not modified. Poll studio_status after calling to check when the new deck is ready.

Args: notebook_id: Notebook UUID artifact_id: UUID of the existing slide deck to revise (from studio_status) slide_instructions: List of revision instructions, each with: - slide: Slide number (1-based, slide 1 = first slide) - instruction: Text describing the desired change Example: [{"slide": 1, "instruction": "Make the title larger"}] confirm: Must be True after user approval

Example: studio_revise( notebook_id="abc", artifact_id="xyz", slide_instructions=[ {"slide": 1, "instruction": "Make the title larger"}, {"slide": 3, "instruction": "Remove the image"} ], confirm=True )

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Robiton/notebooklm-mcp-cli'

If you have feedback or need assistance with the MCP directory API, please join our Discord server