NotebookLM浏览器自动化工具

通过Playwright和Chromium实现NotebookLM的浏览器自动化,支持创建、查询和管理NotebookLM笔记本。

  • by yosri-rh
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 yosri-rh/notebooklm-mcp

使用说明

NotebookLM MCP服务器

使用浏览器自动化将Claude Code连接到Google NotebookLM。

🖥️ Claude代码集成 | 🤖 浏览器自动化 | 📚 笔记本LM工具

⚠️ 重要提示

  • 没有官方API:这使用浏览器自动化,可能会因UI更改而中断
  • 服务条款:可能违反NotebookLM ToS;仅供个人/教育使用
  • 需要认证:需要具有NotebookLM访问权限的Google帐户
  • 需要维护:NotebookLM更改时,UI选择器需要更新

为什么浏览器自动化(剧作家+Chromium)?

没有可用的公共API

NotebookLM(免费版https://notebooklm.google.com)不提供编程访问:

  • ❌ 没有REST API
  • ❌ 没有Python SDK
  • ❌ 没有webhooks或集成

唯一的界面是web UI,这需要浏览器自动化。

技术要求

NotebookLM是一个JavaScript单页应用程序(SPA)。为了实现自动化,我们需要:

  1. JavaScript执行 -UI通过JavaScript动态呈现
  2. DOM操作 -点击按钮、填写表格、提取数据
  3. 谷歌OAuth -使用Google帐户进行身份验证
  4. 会话管理 -维护Cookie和身份验证状态

简单的HTTP客户端无法工作 因为:

  • 如果不执行JavaScript,你会得到空的HTML: <div id="root"></div>
  • 无法访问渲染的DOM元素
  • 无法处理OAuth身份验证流

为什么选择Playwritt+Chromium?

剧作家 是Python最好的浏览器自动化工具:

  • 具有自动等待功能的现代异步API
  • Python原生支持
  • 多架构(ARM64/AMD64)
  • 积极开发

铬 作为浏览器引擎是必需的:

  • 执行JavaScript并呈现UI
  • 处理Google身份验证
  • 提供完整的浏览器功能

备选方案:NotebookLM Enterprise API

谷歌提供 笔记本LM企业版 使用官方API,但它:

  • 需要Google Cloud项目和企业许可
  • 仅适用于企业版,不适用于免费NotebookLM
  • API处于alpha(v1alpha)

这个项目的目标是免费的NotebookLM 无需企业要求即可访问。

参考: 记事本LM Enterprise API文档

🚀 快速开始

# 1. Install dependencies
uv sync
uv run playwright install chromium

# 2. Authenticate with Google
uv run python scripts/setup_auth.py

# 3. The .mcp.json file is already configured
# Just use Claude Code and start interacting with NotebookLM!

Claude代码中的示例用法

配置后,在Claude Code中尝试以下提示:

创建并填充笔记本:

Create a new NotebookLM notebook called "AI Research" and add these sources:
- https://arxiv.org/abs/2301.00001
- https://www.youtube.com/watch?v=example

查询您的笔记本:

List all my NotebookLM notebooks, then query the "AI Research" notebook about
the main findings and create a summary.

生成学习材料:

For my "Course Notes" notebook, generate a FAQ study guide and then
generate an audio overview.

组织来源:

Show me all sources in my "Research Papers" notebook and tell me
which ones are YouTube videos vs websites.

运输方式

NotebookLM MCP服务器支持两种传输模式:

标准传输(默认-推荐)

服务器由Claude Code自动启动和停止。每个项目都会生成自己的实例。

在以下情况下使用:

  • ✅ 一次只做一个项目
  • ✅ 您需要自动服务器生命周期管理
  • ✅ 你喜欢简单

配置: 已在中设置 .mcp.json

HTTP传输(高级-多项目)

运行一个服务器实例,并从多个项目连接到它。

在以下情况下使用:

  • ✅ 同时处理多个项目
  • ✅ 您希望在多个项目间共享一台服务器
  • ✅ 您需要减少资源使用

快速设置:

# Terminal 1: Start server once
cd /path/to/notebooklm-mcp
MCP_TRANSPORT=streamable-http uv run notebooklm-mcp

# Terminal 2+: In any project, create .mcp.json
{
  "mcpServers": {
    "notebooklm": {
      "type": "http",
      "url": "http://localhost:8080/mcp"
    }
  }
}

📖 完整指南: 看 HTTP传输指南 有关详细说明、后台服务和最佳实践。

测试MCP服务器

在使用Claude Code之前,使用MCP Inspector测试服务器:

# Install and run MCP Inspector
npx @modelcontextprotocol/inspector uv --directory /path/to/notebooklm-mcp run notebooklm-mcp

# Opens web interface at http://localhost:5173
# Try calling tools like list_notebooks(), create_notebook(), etc.

观察浏览器自动化(调试):

# Run with visible browser to see what's happening
NOTEBOOKLM_HEADLESS=false uv run notebooklm-mcp

特性

第1阶段-基本操作

  • ✅ 列出所有笔记本
  • ✅ 创建新笔记本
  • ✅ 添加来源(网站、YouTube、文本)
  • ✅ 使用AI查询笔记本

第2阶段-高级功能

  • ✅ 生成学习指南(常见问题解答、简报文件、目录)
  • ✅ 生成音频概述(播客)
  • ✅ 获取笔记本源

安装

cd /path/to/notebooklm-mcp

# Install dependencies
uv sync

# Install Playwright browsers
uv run playwright install chromium

身份验证设置

运行一次此命令以验证您的Google帐户:

uv run python scripts/setup_auth.py

这将打开一个浏览器,您可以在其中:

  1. 登录您的Google帐户
  2. 导航到https://notebooklm.google.com
  3. 验证访问权限,然后按Enter键

您的会话已保存到 chrome-user-data/ (忽略了)。

配置

环境变量(可选)

您可以使用环境变量配置MCP服务器。有两种方法可以设置它们:

选项1:直接在终端设置(快速测试)

# Run with custom settings
NOTEBOOKLM_HEADLESS=false LOG_LEVEL=DEBUG uv run notebooklm-mcp

选项2:使用.env文件(持久配置)

创建一个 .env 文件 在项目根目录中 (旁边 README.md):

# From the project root directory
cd /path/to/notebooklm-mcp
cp .env.example .env

编辑 .env 使用您的首选设置:

# Example .env file content
NOTEBOOKLM_HEADLESS=true
LOG_LEVEL=INFO

这 .env 当您运行服务器时,文件会自动加载。

文件位置:

notebooklm-mcp/
├── .env          # Your configuration file (create this)
├── .env.example  # Template (already exists)
├── README.md
├── pyproject.toml
└── ...

可用设置

变量 默认值 描述
NOTEBOOKLM_HEADLESS true 在无头模式下运行浏览器。吃起来 false 查看浏览器(有助于调试)
LOG_LEVEL INFO 日志详细程度: DEBUG, INFO, WARNING, ERROR

注: 对于Claude Code的使用,您通常不需要 .env file-默认设置工作正常。这 .env 该文件主要用于调试。

Claude代码集成

这 .mcp.json 项目根目录中的文件配置MCP服务器:

{
  "mcpServers": {
    "notebooklm": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/notebooklm-mcp",
        "run",
        "notebooklm-mcp"
      ],
      "env": {
        "NOTEBOOKLM_HEADLESS": "true"
      }
    }
  }
}

重要提示: 更新 --directory 路径以匹配您的实际项目位置。

配置后,当您在此目录中工作时,Claude Code将自动加载MCP服务器。

测试

与MCP检查员一起

npx @modelcontextprotocol/inspector uv --directory /path/to/notebooklm-mcp run notebooklm-mcp

观看浏览器自动化

NOTEBOOKLM_HEADLESS=false uv run notebooklm-mcp

克劳德密码

尝试以下提示:

  • “列出我的NotebookLM笔记本”
  • “创建一个名为“测试”的笔记本”
  • “添加https://example.com到笔记本[ID]“
  • “问笔记本[ID]:主要主题是什么?”

可用工具

list_notebooks()

列出所有可用的NotebookLM笔记本。

退货:带有id、标题和url的笔记本列表

输出示例:

[
  {
    "id": "abc123def456",
    "title": "Research Notes",
    "url": "https://notebooklm.google.com/notebook/abc123def456"
  }
]

create_notebook(name: str)

创建一个新的NotebookLM笔记本。

参数:

  • name:笔记本的名称

退货:已创建笔记本详细信息

add_source(notebook_id: str, source_type: str, content: str)

将源添加到笔记本。

参数:

  • notebook_id:笔记本ID
  • source_type:“网站”、“youtube”或“文本”
  • content:网站/youtube的URL,或原始文本

退货:状态消息

query_notebook(notebook_id: str, query: str)

问NotebookLM的AI一个关于笔记本来源的问题。

参数:

  • notebook_id:笔记本ID
  • query:要问的问题

退货:AI生成的响应为字符串

generate_study_guide(notebook_id: str, guide_type: str)

从笔记本来源生成学习指南。

参数:

  • notebook_id:笔记本ID
  • guide_type:“faq”、“briefing.doc”或“内容表”

退货:状态消息

generate_audio_overview(notebook_id: str)

从笔记本来源生成音频概述(播客)。

备注:这是NotebookLM中的异步操作。音频生成可能需要几分钟才能完成。

参数:

  • notebook_id:笔记本ID

退货:状态消息

get_notebook_sources(notebook_id: str)

在笔记本中获取源列表。

参数:

  • notebook_id:笔记本ID

退货:带索引和标题的来源列表

故障排除

常见问题

克劳德代码中未显示MCP服务器

  1. 检查一下 .mcp.json 存在于项目根目录中
  2. 验证JSON语法是否有效(无尾随逗号)
  3. 检查配置中指向项目目录的路径
  4. 重新启动Claude代码
  5. 跑 claude mcp list 验证服务器是否已注册

身份验证已过期

# Re-run authentication setup
uv run python scripts/setup_auth.py

# Or delete chrome-user-data and start fresh
rm -rf chrome-user-data
uv run python scripts/setup_auth.py

剧作家/Chromium问题

# Reinstall Playwright browsers
uv run playwright install chromium --force
uv run playwright install-deps chromium

# On Linux, you may need system dependencies
sudo apt-get install -y \
  libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 \
  libcups2 libdrm2 libxkbcommon0 libxcomposite1 \
  libxdamage1 libxfixes3 libxrandr2 libgbm1 \
  libpango-1.0-0 libcairo2 libasound2

UI选择器不工作

NotebookLM UI可能已更改。检查DevTools中的UI并更新中的选择器 src/notebooklm_mcp/selectors.py.

浏览器自动化失败

# Run with visible browser to see what's happening
NOTEBOOKLM_HEADLESS=false uv run notebooklm-mcp

# Enable debug logging
LOG_LEVEL=DEBUG uv run notebooklm-mcp

工具在Claude代码中没有响应

  1. 检查MCP服务器是否已注册: claude mcp list
  2. 首先尝试简单的工具:“列出我的NotebookLM笔记本”
  3. 检查输出中的错误
  4. 重新启动Claude代码

项目结构

notebooklm-mcp/
├── src/notebooklm_mcp/
│   ├── __init__.py
│   ├── server.py       # FastMCP server with tool definitions
│   ├── browser.py      # Playwright browser manager
│   ├── selectors.py    # NotebookLM UI selectors
│   └── utils.py        # Helper functions
├── scripts/
│   └── setup_auth.py   # Interactive Google login
├── chrome-user-data/   # Persistent browser profile (gitignored)
├── .mcp.json          # Claude Code MCP server configuration
├── pyproject.toml
├── .env
└── README.md

许可证

MIT许可证-仅限个人/教育用途

免责声明

该项目不隶属于谷歌,也不得到谷歌的认可或赞助。使用风险自负。