MCP server for Google NotebookLM — use NotebookLM as a research tool from Claude Code, Codex, or any MCP client.
This server defines 6 tools with explicit schemas and descriptions visible in notebooklm_mcp/server.py. However, critical issues prevent a higher score: (1) Tool naming uses 'notebooklm_' prefix rather than action verbs as primary convention, while names are descriptive, they don't lead with verbs like 'list_', 'get_', 'set_' which help LLMs parse intent immediately. (2) Descriptions are minimal (10-50 chars for most tools) and lack WHEN/WHY guidance, parameter relationships, or error recovery hints. For example, 'Check NotebookLM auth status and active notebook' (48 chars) doesn't explain when to call it vs notebooklm_auth_check, or what happens on failure. (3) Most parameters lack per-parameter descriptions, only notebooklm_ask and notebooklm_use_notebook have parameter descriptions; the no-arg tools (login, status, auth_check, list_notebooks) have no parameter descriptions to evaluate, but this is acceptable since they take no parameters. (4) Output schemas are NOT documented, the code shows handlers return a result object with .output and .success attributes, but the response structure is never specified in tool definitions, forcing LLMs to guess what fields to extract from replies. (5) Error handling is minimal, no guidance on retryability, no actionable recovery instructions. (6) No pagination or limit parameters visible, though list_notebooks might return large lists. The rubric baseline is 194 chars avg for tool descriptions; these average ~40 chars. Following pattern:tool and pattern:tool-description, this is a significant gap.
Send a research query to the active NotebookLM notebook and return the response.
Run detailed NotebookLM authentication diagnostics.
List all available NotebookLM notebooks.
Trigger interactive Google login for NotebookLM. Opens a browser window. Fails gracefully in non-interactive contexts.
Check NotebookLM auth status and active notebook.
Set the active NotebookLM notebook by ID.
Output schemas are completely undocumented. Tools define inputs but never specify what fields responses contain. The handler code shows results have .output and .success, but LLMs cannot see this, they must guess. Forces LLMs to make blind assumptions about response structure, risking extraction errors.
Tool descriptions are too brief (avg 40 chars vs. baseline 194 chars). Most lack WHEN to use the tool, how it differs from similar tools, what happens on error, and whether it's idempotent. Tool descriptions must be 50 - 1024 chars and answer WHAT/WHEN/WHY to enable proper LLM selection.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 0 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 38 | 2024-11-05+ | v1 |
Naming conventions are inconsistent. Most tools use 'notebooklm_<noun>' (status, auth_check) rather than strict verb_noun pattern (get_status, check_auth). This makes intent inference harder for LLMs. Verb-first names like 'get_', 'list_', 'check_', 'set_' should lead all tool names.
No pagination or limits visible on list_notebooks. If a user has many notebooks, the response could be unbounded and exhaust context. Should include 'limit' and 'offset'/'cursor' parameters and document max result size in the description.
Error handling is minimal. The tools provide no guidance on recoverable vs. fatal errors, no actionable recovery hints (e.g., 'If auth fails, try notebooklm_login()'), and no structured error classification. LLMs receive exception messages but cannot infer what to do next.
No distinction between notebooklm_status and notebooklm_auth_check in tool descriptions. Both appear to check auth/status; LLMs cannot decide which to call. Descriptions must clarify the difference or these should be consolidated into a single tool.
notebooklm_ask parameter 'json_output' defaults to false but has no description explaining what the difference is (JSON vs. text). Should clarify: does JSON mode enable structured extraction? What is the schema of JSON output?