Back to MCP directory
publicPublicdnsLocal runtime

zoom-recording-downloader

一个用于下载Zoom会议录制文件的Python工具,支持命令行和MCP服务器两种模式,可批量下载并按会议主题自动组织文件。

article

README

🚀 Zoom 会议录制下载工具

这是一个用于下载 Zoom 会议录制文件的 Python 工具,支持命令行和 MCP 服务器两种使用方式,能有效帮助用户获取和管理 Zoom 会议录制。

🚀 快速开始

本工具支持命令行和 MCP 服务器两种使用方式,可根据需求灵活选择。使用前需进行依赖安装和环境配置。

✨ 主要特性

  • 获取会议录制列表:能获取指定日期范围内的所有会议录制列表。
  • 批量下载:可批量下载会议录制文件到本地。
  • 自动创建目录:自动按会议主题和时间创建目录结构。
  • 断点续传:支持断点续传,会检测已下载文件大小。
  • MCP 服务器模式:支持 MCP 服务器模式,可集成到 Claude Code。
  • 灵活配置:支持环境变量和命令行参数配置。

📦 安装指南

依赖安装

pip install -r requirements.txt

环境配置

方法一:使用 .env 文件(推荐)

创建 .env 文件并添加以下配置:

ZOOM_AUTH=your_authorization_token
ZOOM_CSRFTOKEN=your_zoom_csrftoken
ZOOM_COOKIES=your_browser_cookies

方法二:命令行参数

直接通过命令行传递认证信息。

获取认证信息

  1. 登录 Zoom 网页版(https://thoughtworks.zoom.us/recording/)。
  2. 打开浏览器开发者工具(F12)。
  3. 切换到 Network 标签。
  4. 刷新页面,点击任意请求。
  5. 在请求头中复制:
    • Authorization 值。
    • zoom-csrftoken 值。
  6. 在 Application > Cookies 中复制所有 Cookies。

💻 使用示例

命令行模式

1. 下载所有录制

python download_zoom_recordings.py

2. 指定日期范围

python download_zoom_recordings.py -s "01/01/2024" -e "12/31/2024"

3. 指定下载目录

python download_zoom_recordings.py -d /path/to/downloads

4. 传入认证信息

python download_zoom_recordings.py -a "your_auth_token" -t "your_csrftoken" -c "your_cookies"

完整参数说明

| 参数 | 短参数 | 说明 | 默认值 | | ---------------- | ------ | ---------------------------- | ----------------------- | | --cookies | -c | 浏览器 cookies 字符串 | 环境变量 ZOOM_COOKIES | | --cookies-file | -f | cookies JSON 文件路径 | 无 | | --auth | -a | Authorization header 值 | 环境变量 ZOOM_AUTH | | --csrftoken | -t | zoom-csrftoken 值 | 环境变量 ZOOM_CSRFTOKEN | | --from | -s | 开始日期 (mm/dd/yyyy) | 01/01/2022 | | --to | -e | 结束日期 (mm/dd/yyyy) | 当前日期 | | --output | -o | recordings.json 保存路径 | download_dir 下 | | --download-dir | -d | 下载目录 | downloads | | --use-existing | -u | 使用已存在的 recordings.json | true |

MCP 服务器模式

启动 MCP 服务器

python mcp_server.py

MCP 服务器会暴露 download_recordings 工具,可在 Claude Code 中使用。

Claude Code 配置

.mcp.json 中添加:

{
  "mcpServers": {
    "zoom-download": {
      "command": "python",
      "args": ["/path/to/mcp_server.py"],
      "env": {}
    }
  }
}

📚 详细文档

项目结构

zoom/
├── download_zoom_recordings.py  # 主下载脚本
├── zoom_utils.py                # 工具函数模块
├── mcp_server.py                # MCP 服务器实现
├── requirements.txt             # Python 依赖
├── recordings.json              # 会议列表数据(自动生成)
├── downloads/                   # 下载目录(自动创建)
└── README.md                    # 说明文档

文件结构

下载的文件会自动按以下结构组织:

downloads/
└── 会议主题_20240101_143000/
    ├── file_1.mp4
    ├── file_2.mp4
    └── ...

🔧 技术细节

ZoomRecordingDownloader 类

主要方法:

  • get_meeting_list() - 获取单页会议列表。
  • get_all_recordings() - 获取所有会议录制信息。
  • save_recordings_to_json() - 保存录制信息到 JSON。
  • get_download_file_list() - 获取单个会议的下载文件列表。
  • download_file() - 下载单个文件。
  • download_meeting_recordings() - 下载单个会议的所有录制。
  • download_all() - 批量下载所有录制。

zoom_utils 模块

纯函数工具模块,提供:

  • extract_filename_from_url() - 从 URL 提取文件名。
  • build_meeting_dir_name() - 构建会议目录名。
  • parse_cookies_string() - 解析 cookies 字符串。
  • ensure_directory_exists() - 确保目录存在。
  • extract_recordings_from_response() - 从 API 响应提取录制列表。
  • extract_download_urls_from_response() - 从响应提取下载 URL。

📄 许可证

MIT License

⚠️ 重要提示

  • 认证信息过期:认证信息可能定期失效,需要重新获取。
  • 请求频率:工具内置了 1 秒的请求间隔,避免触发 Zoom 的速率限制。
  • 文件大小:大型录制文件可能需要较长时间下载。
  • 存储空间:确保有足够的磁盘空间存储下载的文件。
  • Cookies 格式参考_zm_mtk_guid=xx; _zm_visitor_guid=xx; ..
help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client