windsurfrules — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited windsurfrules (Rules) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
NotebookLM MCP Header
This is an enterprise-focused fork of [jacob-bd/notebooklm-mcp-cli](https://github.com/jacob-bd/notebooklm-mcp-cli). It adds full support for NotebookLM Enterprise (notebooklm.cloud.google.com) via the official Discovery Engine REST API, while keeping all personal-mode features intact. If you only use personal NotebookLM, the upstream repo is the right choice. If you have a Google Workspace enterprise account, you're in the right place.| Addition | Details |
|---|---|
| Enterprise REST API client | Official Discovery Engine API — not reverse-engineered batchexecute |
| GCP OAuth2 authentication | gcloud auth login instead of browser cookies |
| `configure_mode` MCP tool | Switch personal ↔ enterprise from within Claude, with auth pre-checks |
| Paywall detection | URL sources checked for login/subscription walls before adding |
| Per-URL batch fault isolation | One bad URL in a batch no longer fails the entire batch |
| Standalone Podcast API | Generate podcasts from raw text — no notebook required |
| Persistent config | nlm config set enterprise.mode enterprise — no env var editing each session |
All personal-mode features (chat, video, reports, flashcards, research, sharing, etc.) are fully preserved.
Programmatic access to Google NotebookLM — via command-line interface (CLI) or Model Context Protocol (MCP) server. Supports both Personal and Enterprise accounts.
📺 Watch the Demos
Note: The demos below are from the upstream project (jacob-bd/notebooklm-mcp-cli) and show personal mode features. All commands and MCP tools work identically in this fork — enterprise mode adds on top of everything shown here.
Use nlm directly in your terminal for scripting, automation, or interactive use:
nlm notebook list # List all notebooks
nlm notebook create "Research Project" # Create a notebook
nlm source add <notebook> --url "https://..." # Add sources
nlm audio create <notebook> --confirm # Generate podcast
nlm download audio <notebook> <artifact-id> # Download audio file
nlm share public <notebook> # Enable public linkRun nlm --ai for comprehensive AI-assistant documentation.
Connect AI assistants (Claude, Gemini, Cursor, etc.) to NotebookLM:
# Automatic setup — picks the right config for each tool
nlm setup add claude-code
nlm setup add gemini
nlm setup add cursor
nlm setup add cline
nlm setup add antigravity
# Generate JSON config for any other tool
nlm setup add jsonThen use natural language: "Create a notebook about quantum computing and generate a podcast"
| Capability | CLI Command | MCP Tool |
|---|---|---|
| List notebooks | nlm notebook list | notebook_list |
| Create notebook | nlm notebook create | notebook_create |
| Add Sources (URL, Text, Drive, File) | nlm source add | source_add |
| Query notebook (persists to web UI) | nlm notebook query | notebook_query |
| Create Studio Content (Audio, Video, etc.) | nlm studio create | studio_create |
| Revise slide decks | nlm slides revise | studio_revise |
| Download artifacts | nlm download <type> | download_artifact |
| Web/Drive research | nlm research start | research_start |
| Share notebook | nlm share public/invite | notebook_share_* |
| Sync Drive sources | nlm source sync | source_sync_drive |
| Batch operations | nlm batch query/create/delete | batch |
| Cross-notebook query | nlm cross query | cross_notebook_query |
| Pipelines (multi-step workflows) | nlm pipeline run/list | pipeline |
| Tag & smart select | nlm tag add/list/select | tag |
| Configure AI tools | nlm setup add/remove/list | — |
| Install AI Skills | nlm skill install/update | — |
| Diagnose issues | nlm doctor | — |
📚 More Documentation:
This MCP and CLI use internal APIs that:
Use at your own risk for personal/experimental purposes.
🆕 Claude Desktop users: Download the extension (.mcpb file) → double-click → done! One-click install, no config needed.Install from PyPI. This single package includes both the CLI and MCP server:
uv tool install notebooklm-enterprise-mcpuvx --from notebooklm-enterprise-mcp nlm --help
uvx --from notebooklm-enterprise-mcp notebooklm-mcppip install notebooklm-enterprise-mcppipx install notebooklm-enterprise-mcpAfter installation, you get:
nlm — Command-line interfacenotebooklm-mcp — MCP server for AI assistants<details> <summary>Alternative: Install from Source</summary>
# Clone the repository
git clone https://github.com/Robiton/notebooklm-mcp-cli.git
cd notebooklm-mcp
# Install with uv
uv tool install .</details>
# Using uv
uv tool upgrade notebooklm-enterprise-mcp
# Using pip
pip install --upgrade notebooklm-enterprise-mcp
# Using pipx
pipx upgrade notebooklm-enterprise-mcpAfter upgrading, restart your AI tool to reconnect to the updated MCP server:
/mcp to reconnectIf you were using the upstream package and want to switch to this fork for enterprise support:
uv tool uninstall notebooklm-mcp-cli
# or: pip uninstall notebooklm-mcp-cliuv tool install notebooklm-enterprise-mcpuv tool list | grep notebooklm
# Should show: notebooklm-enterprise-mcp v1.0.0
# - nlm
# - notebooklm-mcpYour existing cookies from the upstream package should still work. If you hit auth errors:
nlm loginMCP configuration doesn't change — the executable is still called notebooklm-mcp, so your Claude Code, Cursor, or other tool configs need no edits.To completely remove the MCP:
# Using uv
uv tool uninstall notebooklm-enterprise-mcp
# Using pip
pip uninstall notebooklm-enterprise-mcp
# Using pipx
pipx uninstall notebooklm-enterprise-mcp
# Remove cached auth tokens and data (optional)
rm -rf ~/.notebooklm-mcp-cliAlso remove from your AI tools:
nlm setup remove claude-code
nlm setup remove cursor
# ... or any configured toolThe upstream project targets personal NotebookLM accounts only. Enterprise NotebookLM (notebooklm.cloud.google.com) uses a completely different authentication system (GCP OAuth2) and a separate official REST API — it's not just a different URL.
This fork adds:
nlm config set enterprise.mode enterprise persists across restarts (no env var editing)The enterprise REST API (v1alpha) covers notebooks, sources, and audio. Chat, video, reports, and other features remain personal-only — they have no documented REST endpoints. The hope is that Google promotes the API to v1 stable and expands coverage over time.
See docs/AUTHENTICATION.md for full enterprise setup instructions.
If you use NotebookLM Enterprise (notebooklm.cloud.google.com), configure enterprise mode:
nlm config set enterprise.mode enterprise
nlm config set enterprise.project_id YOUR_PROJECT_NUMBER
nlm config set enterprise.location global # or "us" or "eu"Ask Claude to call:
configure_mode(mode="enterprise", project_id="YOUR_PROJECT_NUMBER", location="global")Enterprise uses GCP OAuth2 instead of browser cookies:
gcloud auth loginnlm config set enterprise.mode personal| Feature | Personal | Enterprise |
|---|---|---|
| Notebooks (list/create/get/delete) | All | All |
| Sources (add URL/text/YouTube/Drive/file) | All | All |
| Audio Overview (podcast) | Yes | Yes |
| Standalone Podcast API | No | Yes |
| Sharing | Public + email | Email only (org-scoped) |
| Chat/Query | Yes | Not in REST API |
| Video, Reports, Flashcards, etc. | Yes | Not in REST API |
Environment variables (NOTEBOOKLM_MODE, NOTEBOOKLM_PROJECT_ID, NOTEBOOKLM_LOCATION) override config.toml when set.
When adding URL sources, the MCP checks if the URL is behind a paywall or login wall. If your organisation hosts content on an internal domain or a subscription site you have access to, add it to your approved list to skip the check:
# Approve a single domain
nlm config set sources.approved_domains '["yourcompany.com"]'
# Approve multiple domains
nlm config set sources.approved_domains '["yourcompany.com", "ft.com", "wsj.com"]'Or in the MCP, call source_add with skip_paywall_check=True to bypass for a single URL.
Before using the CLI or MCP, you need to authenticate with NotebookLM:
# Auto mode: launches your browser, you log in, cookies extracted automatically
nlm login
# Check if already authenticated
nlm login --check
# Use a named profile (for multiple Google accounts)
nlm login --profile work
nlm login --profile personal
# Manual mode: import cookies from a file
nlm login --manual --file cookies.txt
# External CDP provider (e.g., OpenClaw-managed browser)
nlm login --provider openclaw --cdp-url http://127.0.0.1:18800Profile management:
nlm login --check # Show current auth status
nlm login switch <profile> # Switch the default profile
nlm login profile list # List all profiles with email addresses
nlm login profile delete <profile> # Delete a profile
nlm login profile rename <old> <new> # Rename a profileEach profile gets its own isolated browser session, so you can be logged into multiple Google accounts simultaneously.
If you only need the MCP server (not the CLI):
nlm login # Auto mode (launches browser)
nlm login --manual # Manual file modeHow it works: Auto mode launches a dedicated browser profile (supports Chrome, Arc, Brave, Edge, Chromium, and more), you log in to Google, and cookies are extracted automatically. Your login persists for future auth refreshes.
Prefer a specific browser? Set it with nlm config set auth.browser chromium (or brave, arc, edge, chrome, etc.). Falls back to auto-detection if the preferred browser is not found.
For detailed instructions and troubleshooting, see [docs/AUTHENTICATION.md](docs/AUTHENTICATION.md).
⚠️ Context Window Warning: This MCP provides 35 tools. Disable it when not using NotebookLM to preserve context. In Claude Code: @notebooklm-mcp to toggle.Use nlm setup to automatically configure the MCP server for your AI tools — no manual JSON editing required:
# Add to any supported tool
nlm setup add claude-code
nlm setup add claude-desktop
nlm setup add gemini
nlm setup add cursor
nlm setup add windsurf
# Generate JSON config for any other tool
nlm setup add json
# Check which tools are configured
nlm setup list
# Diagnose installation & auth issues
nlm doctorInstall the NotebookLM expert guide for your AI assistant to help it use the tools effectively. Supported for Cline, Antigravity, OpenClaw, Codex, OpenCode, Claude Code, and Gemini CLI.
# Install skill files
nlm skill install cline
nlm skill install openclaw
nlm skill install codex
nlm skill install antigravity
# Update skills
nlm skill updatenlm setup remove claude-codeIf you don't want to install the package, you can use uvx to run on-the-fly:
# Run CLI commands directly
uvx --from notebooklm-enterprise-mcp nlm setup add cursor
uvx --from notebooklm-enterprise-mcp nlm loginFor tools that use JSON config, point them to uvx:
{
"mcpServers": {
"notebooklm-mcp": {
"command": "uvx",
"args": ["--from", "notebooklm-enterprise-mcp", "notebooklm-mcp"]
}
}
}<details> <summary>Manual Setup (if you prefer)</summary>
Tip: Run nlm setup add json for an interactive wizard that generates the right JSON snippet for your tool.Claude Code / Gemini CLI support adding MCP servers via their own CLI:
claude mcp add --scope user notebooklm-mcp notebooklm-mcp
gemini mcp add --scope user notebooklm-mcp notebooklm-mcpCursor / Windsurf resolve commands from your PATH, so the command name is enough:
{
"mcpServers": {
"notebooklm-mcp": {
"command": "notebooklm-mcp"
}
}
}| Tool | Config Location |
|---|---|
| Cursor | ~/.cursor/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
Claude Desktop / VS Code may not resolve PATH — use the full path to the binary:
{
"mcpServers": {
"notebooklm-mcp": {
"command": "/full/path/to/notebooklm-mcp"
}
}
}Find your path with: which notebooklm-mcp
| Tool | Config Location |
|---|---|
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json |
| VS Code | ~/.vscode/mcp.json |
</details>
📚 Full configuration details: MCP Guide — Server options, environment variables, HTTP transport, multi-user setup, and context window management.
Simply chat with your AI tool (Claude Code, Cursor, Gemini CLI) using natural language. Here are some examples:
(All queries sent from CLI or MCP automatically persist in your NotebookLM web UI chat history!)
Pro tip: After creating studio content (audio, video, reports, etc.), poll the status to get download URLs when generation completes.
| Component | Duration | Refresh |
|---|---|---|
| Cookies | ~2-4 weeks | Auto-refresh via headless browser (if profile saved) |
| CSRF Token | ~minutes | Auto-refreshed on every request failure |
| Session ID | Per MCP session | Auto-extracted on MCP start |
v1.0.0+: The server now automatically handles token expiration:
You can also call refresh_auth() to explicitly reload tokens.
If automatic refresh fails (Google login fully expired), run nlm login again.
uv tool upgrade Not Installing Latest VersionSymptoms:
uv tool upgrade notebooklm-enterprise-mcp installs an older version than expecteduv cache clean doesn't fix the issueWhy this happens: uv tool upgrade respects version constraints from your original installation. If you initially installed an older version or with a constraint, upgrade stays within those bounds by design.
Fix — Force reinstall:
uv tool install --force notebooklm-enterprise-mcpThis bypasses any cached constraints and installs the absolute latest version from PyPI.
Verify:
uv tool list | grep notebooklm
# Should show: notebooklm-enterprise-mcp v1.0.0 (or latest)Use the [GitHub Issues](https://github.com/Robiton/notebooklm-mcp-cli/issues/new/choose) tab — you'll be prompted to pick the right template:
| Template | Use when |
|---|---|
| Bug — Enterprise | Something broken in enterprise mode (GCP, Discovery Engine API) |
| Bug — Personal | Something broken in personal mode that's specific to this fork |
| Feature Request | New capability you'd like to see |
| Question | Setup help, usage questions, config issues |
Personal mode bugs that also exist in the upstream project should be filed at jacob-bd/notebooklm-mcp-cli first — fixes accepted there get cherry-picked here automatically.
See CONTRIBUTING.md for setup instructions, PR process, and how to add new features.
This fork started as an internal tool to fill a real gap: NotebookLM Enterprise had no programmatic access, and the upstream project (which is excellent) is scoped to personal accounts only. The enterprise implementation was built with AI assistance — I'm not a professional Python developer — so if you see something that could be done better, PRs are genuinely welcome.
The upstream project's original "vibe coding" spirit applies here too: the goal was to solve a problem, not to write a textbook. The code works, passes tests, and is production-stable enough for daily use. But experienced developers will likely see room for improvement, and that input is valuable.
See CONTRIBUTING.md for how to get involved — especially if you have enterprise NotebookLM access and can test end-to-end.
Special thanks to:
source_get_content tool and Linux auth fixes.nlm setup and nlm doctor commands and CLI Guide documentation.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.