WSL Usage Guide
This guide explains how to use the NotebookLM MCP Server with Claude Code from WSL (Windows Subsystem for Linux).
Architecture Overview
Due to browser requirements (Playwright needs Chrome), the HTTP server must run on Windows. Claude Code in WSL communicates with it through a stdio-HTTP proxy.
┌─────────────────────────────────────────────────────────────────┐
│ WINDOWS │
│ ┌─────────────────────┐ ┌─────────────────────────────┐ │
│ │ HTTP Server │ │ Chrome Browser │ │
│ │ (node.exe) │◄──►│ (Playwright-controlled) │ │
│ │ localhost:3000 │ │ │ │
│ └─────────────────────┘ └─────────────────────────────┘ │
│ ▲ │
└────────────┼─────────────────────────────────────────────────────┘
│ HTTP (localhost:3000)
┌────────────┼─────────────────────────────────────────────────────┐
│ │ WSL │
│ ┌─────────┴───────────────────────────────────────────────────┐│
│ │ Claude Code ││
│ │ └── stdio-http-proxy.js (node.exe) ││
│ │ - Translates MCP stdio ←→ HTTP calls ││
│ │ - Points to localhost:3000 ││
│ └─────────────────────────────────────────────────────────────┘│
└──────────────────────────────────────────────────────────────────┘
Quick Start
1. Start the HTTP Server on Windows
CRITICAL: The HTTP server MUST run on Windows, NOT in WSL
Open a Windows terminal (PowerShell or CMD, not WSL):
cd D:\path\to\notebooklm-mcp
npm run start:http
Verification: The logs must show Windows paths:
Chrome Profile: C:\Users\...\AppData\Local\notebooklm-mcp\Data\chrome_profile
Listening on 0.0.0.0:3000
If you see /opt/google/chrome/chrome in error messages, the server is running under WSL, not Windows!
2. Configure MCP in Your Project
Create .mcp.json in your project root:
{
"mcpServers": {
"notebooklm": {
"type": "stdio",
"command": "node.exe",
"args": ["D:\\Claude\\notebooklm-mcp-http\\dist\\stdio-http-proxy.js"],
"env": {
"NOTEBOOKLM_HTTP_URL": "http://localhost:3000"
}
}
}
}
Important: Use stdio-http-proxy.js (NOT index.js)
3. Enable the MCP Server
The first time you use it, Claude Code needs to trust the .mcp.json servers. Either:
- Restart Claude Code and accept when prompted
- Or manually add to
~/.claude.jsonin your project section:
"enabledMcpjsonServers": ["notebooklm"],
"hasTrustDialogAccepted": true,
4. Verify Configuration
# In Claude Code, run:
/mcp
You should see notebooklm listed and connected.
5. Authenticate (First Time)
Ask Claude to authenticate:
"Log me in to NotebookLM"
This opens Chrome on Windows for Google authentication.
Available MCP Tools
| Tool | Description |
|---|---|
ask_question | Ask a question to a notebook |
list_notebooks | List all available notebooks |
get_health | Check server health status |
search_notebooks | Search notebooks by keyword |
get_notebook | Get details of a specific notebook |
add_notebook | Add a new notebook to the library |
activate_notebook | Set a notebook as the default |
Example usage:
mcp__notebooklm__ask_question(question="...", notebook_id="my-notebook")
Troubleshooting
Error: "Chrome not found at /opt/google/chrome/chrome"
Cause: The HTTP server is running under WSL instead of Windows.
Solution:
# From Windows (not WSL):
taskkill /F /IM node.exe
cd D:\path\to\notebooklm-mcp
npm run start:http
Check which process is listening on port 3000
netstat -ano | findstr :3000
If multiple processes are listed, there may be conflicts. Kill the unwanted ones:
taskkill /F /PID <pid_to_kill>
Test that the server works (from Windows)
curl http://localhost:3000/health
Should return: {"success":true,"data":{"status":"ok",...}}
MCP shows "Not connected"
- Ensure the HTTP server is running on Windows
- Restart Claude Code after starting the HTTP server
- Check that
.mcp.jsonusesstdio-http-proxy.js(notindex.js)
Port 3000 already in use
Kill all node processes and restart:
taskkill /F /IM node.exe
cd D:\path\to\notebooklm-mcp
npm run start:http
Authentication expired
Ask Claude: "Check NotebookLM health" or "Re-authenticate to NotebookLM"
Chrome profile locked
Close all Chrome windows and restart:
taskkill /IM chrome.exe /F
Then restart the HTTP server.
Configuration Reference
Project-Level Config (.mcp.json)
Shareable via git, stored in project root:
{
"mcpServers": {
"notebooklm": {
"type": "stdio",
"command": "node.exe",
"args": ["D:\\Claude\\notebooklm-mcp-http\\dist\\stdio-http-proxy.js"],
"env": {
"NOTEBOOKLM_HTTP_URL": "http://localhost:3000"
}
}
}
}
Local Config (~/.claude.json)
Private to you, per-project settings in the projects section:
"/mnt/d/Claude/your-project": {
"mcpServers": {
"notebooklm": {
"type": "stdio",
"command": "node.exe",
"args": ["D:\\Claude\\notebooklm-mcp-http\\dist\\stdio-http-proxy.js"],
"env": {
"NOTEBOOKLM_HTTP_URL": "http://localhost:3000"
}
}
}
}
Key Points
- Use
node.exe(Windows) notnode(Linux) - Use Windows paths with double backslashes:
D:\\Claude\\... - Use
stdio-http-proxy.jsto connect to the HTTP server - The HTTP server must be started separately on Windows
- The
.mcp.jsonservers must be enabled viaenabledMcpjsonServers
Data Sharing Between WSL and Windows
The server stores authentication and data in:
- Windows:
C:\Users\<user>\AppData\Local\notebooklm-mcp\Data\ - WSL symlink:
~/.local/share/notebooklm-mcp→ Windows path
This symlink ensures both environments share the same authentication state.
To create the symlink (if not already done):
rm -rf ~/.local/share/notebooklm-mcp
ln -sf /mnt/c/Users/<user>/AppData/Local/notebooklm-mcp/Data ~/.local/share/notebooklm-mcp
Helper Scripts (Windows)
The project includes PowerShell scripts for managing the server:
# Start server with auto-restart
.\scripts\start-server.ps1
# Stop server
.\scripts\stop-server.ps1
# Check server status
.\scripts\check-server.ps1
Run in Background (Hidden Window)
Start-Process powershell -ArgumentList "-ExecutionPolicy Bypass -File D:\path\to\notebooklm-mcp\scripts\start-server.ps1" -WindowStyle Hidden
Windows Task Scheduler (Auto-start on Login)
- Open Task Scheduler (
taskschd.msc) - Create Basic Task: "NotebookLM MCP Server"
- Trigger: "When I log on"
- Action: Start a program
- Program:
powershell.exe - Arguments:
-ExecutionPolicy Bypass -WindowStyle Hidden -File "D:\path\to\notebooklm-mcp\scripts\start-server.ps1"
- Program:
- Check "Open Properties dialog" and set "Run whether user is logged on or not"
Authentication Procedure (TOTP/2FA)
If authentication expires, follow this procedure from Windows:
Step 1: Kill existing processes
taskkill /F /IM chrome.exe
taskkill /F /IM node.exe
Step 2: Run accounts test with visible browser
cd D:\path\to\notebooklm-mcp
npm run accounts test account-XXXXXXXXXXXXX -- --show
This will:
- Open Chrome with the account profile
- Auto-login with email/password/TOTP
- Navigate to NotebookLM home page
- Save authentication state
Note: "TOTP input field not found" is OK if Google skips 2FA (trusted device).
Step 3: Sync profile to main location
# From PowerShell or WSL:
copy C:\Users\USERNAME\AppData\Local\notebooklm-mcp\Data\accounts\account-XXXXXXXXXXXXX\browser_state\* C:\Users\USERNAME\AppData\Local\notebooklm-mcp\Data\browser_state\
Or from WSL:
cp /mnt/c/Users/USERNAME/AppData/Local/notebooklm-mcp/Data/accounts/account-*/browser_state/* /mnt/c/Users/USERNAME/AppData/Local/notebooklm-mcp/Data/browser_state/
Step 4: Start HTTP server
cd D:\path\to\notebooklm-mcp
npm run start:http
Quick Test Commands (from WSL)
# Start server on Windows (from WSL)
cmd.exe /c "cd /d D:\\Claude\\notebooklm-mcp-http && start /B node dist/http-wrapper.js"
# Check health (from WSL via Windows curl)
cmd.exe /c "curl http://localhost:3000/health"
# Ask a question
cmd.exe /c 'curl -s -X POST http://localhost:3000/ask -H "Content-Type: application/json" -d "{\"question\": \"Test\", \"notebook_id\": \"notebook-1\"}"'
Available Notebooks
| ID | Name | URL | Topics |
|---|---|---|---|
| notebook-1 | Example Notebook 1 | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | topic1, topic2 |
| notebook-2 | Example Notebook 2 | yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy | topic3, topic4 |
Note: Replace these with your actual notebook UUIDs from NotebookLM.
IMPORTANT: Never Run Under WSL
The HTTP server must ALWAYS run on Windows native, never under WSL.
Why?
- Playwright/Chrome requires Windows Chrome, not Linux Chrome
- WSL Chrome path (
/opt/google/chrome/chrome) doesn't exist - Running under WSL will cause:
Chromium distribution 'chrome' is not found
How to verify the server is on Windows:
- The startup logs should show Windows paths:
C:\Users\...\AppData\... - Run
.\scripts\check-server.ps1from PowerShell