MCP server exposing NotebookLM as a tool surface for Claude Desktop and other MCP clients
Strong tool definitions with clear naming (verb_noun pattern), comprehensive descriptions (avg 180 chars), and complete JSON Schema with type annotations. All 7 tools have explicit descriptions and input schemas. Tool annotations present (readOnlyHint, destructiveHint, idempotentHint). Key gaps: output schemas not formally documented in code; some parameter descriptions could be more prescriptive about constraints (e.g., format validation for URLs); error handling guidance minimal; no pagination support for list operations despite potential for large result sets.
Add a source to a NotebookLM notebook. Supports web URLs (https://…), YouTube URLs (https://youtube.com/…), or pasted text (pass text_content instead of url). Set wait=true to block until NotebookLM finishes indexing the source before returning — recommended for sequential workflows. Returns the new source's 'id', 'title', and 'kind' (web_page, youtube, pasted_text, etc.).
Ask a question against a NotebookLM notebook's sources. NotebookLM answers using only the notebook's indexed sources — it will not fabricate information outside those sources. Optionally restrict to specific source IDs (from notebooklm_list_sources). Returns the answer text and a list of citations (source_id + citation_number).
Create a new empty NotebookLM notebook with the given title. Returns the new notebook's 'id' and 'title'. Use the returned 'id' to add sources or ask questions.
Download a generated artifact to a local file. artifact_type must be one of: audio, video, report, quiz, flashcards, infographic, slide_deck, data_table, mind_map. dest_path is the full local path to write to (e.g. C:/Users/You/podcast.mp3). artifact_id is optional — omit to download the most recent artifact of that type. Output formats by type: audio→MP3/MP4, video→MP4, report→Markdown, quiz→JSON, flashcards→JSON, infographic→PNG, slide_deck→PDF, data_table→CSV, mind_map→JSON. Returns the path where the file was saved.
Output schemas not formally documented. Tool descriptions state what is returned (e.g., 'Returns the answer text and a list of citations') but code does not include explicit return type annotations or JSON Schema definitions. LLMs cannot reliably plan downstream tool calls without knowing exact response structure.
notebooklm_add_source has undocumented mutual exclusivity. Parameters 'url' and 'text_content' are mutually exclusive (enforced at runtime with ValueError), but descriptions do not explicitly state this constraint. LLMs may attempt to pass both, causing runtime errors instead of self-correcting.
List operations lack pagination. notebooklm_list_notebooks and notebooklm_list_artifacts return unbounded lists with no limit, offset, or cursor parameters. If a user has hundreds of notebooks or artifacts, responses will bloat context and degrade LLM reasoning.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Generate an Audio Overview (podcast-style deep dive) for a notebook. The default format is a two-host conversational deep dive. Set wait=true (default) to block until generation completes and return the artifact_id ready for download via notebooklm_download_artifact. Set wait=false to return immediately with a task_id you can ignore (audio will be available later).
List all generated artifacts (audio, video, report, quiz, flashcards, infographic, slide_deck, data_table, mind_map) in a notebook. Returns each artifact's 'id', 'title', and 'kind'. Use 'id' as artifact_id in notebooklm_download_artifact.
List all NotebookLM notebooks in the authenticated account. Returns a list of objects with 'id' and 'title' fields. Use the 'id' value as notebook_id in subsequent tool calls.
Error messages lack recovery guidance. Runtime errors (ValueError for missing/conflicting params) are raised but not caught with actionable guidance. LLMs receive raw exceptions instead of 'Invalid input: provide either url or text_content, not both. text_title is required when using text_content.'
notebooklm_download_artifact parameter 'artifact_type' lacks enum constraint. Description lists valid types (audio, video, report, quiz, flashcards, infographic, slide_deck, data_table, mind_map) but schema does not enforce enum. LLMs may hallucinate invalid types.