notebooklm-mcp-integration-pattern

NotebookLM Full Stack Integration Pattern

Built notebooklm-mcp (42 tools) wrapping notebooklm-py v0.3.4 library. Key patterns:

  1. Auth model: Google session cookies in Playwright storage_state.json format. Chrome DevTools cookies convert 1:1 — wrap in {"cookies": [...], "origins": []}. Required cookies: SID, HSID, SSID, APISID, SAPISID.
  2. Client singleton: Async double-init — await from_storage() then await __aenter__(). Shared across all tool modules via get_client().
  3. Tool registration: __all__ lists in each module + safe_tool() error wrapper + inspect.getmembers() fallback. 8 modules, 42 tools total.
  4. Enum mapping: String params → library enums via {e.name.lower(): e for e in EnumClass} dicts. Keeps MCP interface string-based while library uses typed enums.
  5. Download dispatch: Per-type download methods (download_audio, download_video, etc.) mapped via _DOWNLOAD_METHODS dict keyed by artifact type string.
  6. Long-running ops: generate_* returns {task_id, status}. Poll via artifacts.poll_status(). Audio 10-20min, video 15-45min, deep research 15-30min.
  7. Hatchling gotcha: src/ layout needs [tool.hatch.build.targets.wheel] packages = ["src"] in pyproject.toml.