mcp-notebooklm
Provides tools to interact with Google NotebookLM, allowing users to list notebooks, find notebooks by title, and ask questions grounded in notebook sources.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-notebooklmlist my notebooks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-notebooklm
MCP server that exposes Google NotebookLM notebooks as tools for AI assistants (opencode).
Thin wrapper over notebooklm-py
using FastMCP.
What it implements
A stdio MCP server with three tools:
Tool | Purpose |
| List every notebook with |
| Case-insensitive partial match over notebook titles. |
| Ask a question; returns the grounded answer from NotebookLM. |
The service (src/mcp_notebooklm/service.py) wraps the async NotebookLMClient
and applies two safety rails so the host LLM never hangs:
Concurrency limit — one in-flight query at a time (
asyncio.Semaphore(1)), with a 10s queue timeout. If another query is running, the tool returns[RETRY_NEEDED] NotebookLM is busy... call again in ~60 seconds.Execution timeout — 60s hard cap on the underlying
chat.ask(). Timeouts and transport failures surface as[RETRY_NEEDED]/[ERROR]prefixes so the LLM can react instead of looping.
Authentication state is persisted to data/auth.json and reloaded on every
request via NotebookLMClient.from_storage().
Related MCP server: NotebookLM MCP Server
Prerequisites
Python ≥ 3.12
uv(recommended) orpipxA Google account with NotebookLM access
1. Install
From the project root:
uv syncThis installs the project (including the notebooklm-py[browser] extra, which
pulls Playwright) and exposes the mcp-notebooklm console script.
2. Authenticate with NotebookLM
The first run downloads Chromium (~170 MB) and opens a Google sign-in window.
Auth state is written to data/auth.json and reused on subsequent calls.
# one-time login (interactive — finishes in the browser)
uv run --project notebooklm login --storage-path ./data/auth.json
# verify the session
uv run --project notebooklm auth check --testThe login command is provided by the upstream notebooklm-py CLI; see
its README for browser options
(--browser msedge, --browser-cookies chrome, multi-account --profile,
etc.).
data/auth.jsonis git-ignored. Back it up somewhere safe — it is the only thing standing between you and a fresh login.
To refresh cookies silently (cron / launchd / systemd):
notebooklm auth refresh --quiet3. Register with opencode
Add the server to ~/.config/opencode/opencode.json:
{
"mcp": {
"notebooklm": {
"command": [
"uv",
"run",
"--project",
"<your-path>/mcp-notebooklm",
"mcp-notebooklm",
],
"timeout": 120000,
"type": "local",
},
},
}Restart opencode. The three tools (list_notebooks, find_notebook,
ask_notebook) appear as notebooklm__* and are available immediately.
The
timeout(120s) covers the worst-case ask path: 10s queue + 60s ask + overhead. Raise it if you see transport resets on slow networks.
4. Use it
From inside opencode (or any MCP host):
list all my NotebookLM notebooksfind the notebook about <topic>ask notebook <notebook_id>: <question grounded in that notebook's sources>Typical flow the LLM will follow:
list_notebooks()→ choose the rightnotebook_id.ask_notebook(id, question)→ get a cited answer.If the response starts with
[RETRY_NEEDED], call the tool again.
Project layout
src/mcp_notebooklm/
├── __init__.py
├── main.py # entry point → server.main()
├── server.py # FastMCP tool definitions
└── service.py # NotebookLMClient wrapper + concurrency / timeout guards
data/
└── auth.json # notebooklm-py session storage (git-ignored)
pyproject.toml # deps, entry point: mcp-notebooklmDevelopment
uv run ruff check src/ # lint
uv run flake8 src/ # styleNotes & limits
The upstream library uses undocumented Google APIs — endpoints can break without notice.
Heavy usage is rate-limited; the 1-concurrent semaphore is intentional, not a bug.
Only
chat.askis exposed. Source management, artifact generation, etc. are not wired into the MCP surface yet.The server is stdio-only. For HTTP, look at the upstream
notebooklm-pyREST server.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/juanQNav/mcp-notebooklm'
If you have feedback or need assistance with the MCP directory API, please join our Discord server