mcpField
Z
zoom

zoom

github.com/glebis生产力401248 次安装1 天前更新
代码仓库

关于 zoom

zoom 是通过 Zoom API 管理会议和云录制的技能,适合需要从命令行处理 Zoom 会议的用户。它分别使用 Server-to-Server OAuth 和 User OAuth 访问会议与录制内容。

主要功能

  1. 01列出、创建、更新和删除会议
  2. 02查询云录制及相关文件
  3. 03查看录制的字幕、摘要和下载链接
  4. 04支持 Markdown 与 JSON 输出

适用场景

  1. 01查看即将举行或已结束的会议
  2. 02创建或修改预定会议
  3. 03查找录制、字幕和下载链接

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/glebis/claude-skills --skill zoom

安装后在 Claude Code 中输入/zoom确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

README.md
.claude-plugin/
plugin.json
scripts/
zoom_meetings.py

详细介绍

Zoom 技能

通过 Zoom API 管理 Zoom 会议和云录制。

功能

  • 会议:列出、创建、更新和删除已安排的会议
  • 录制:列出云录制及其文字稿、摘要和下载链接

注意:传递给创建/更新命令的所有时间都会被视为本地时间。如果未通过 --timezone 明确指定时区,脚本会自动检测你的时区。

先决条件

此技能使用两种身份验证方法:

功能身份验证类型凭据文件
会议Server-to-Server OAuth~/.zoom_credentials/credentials.json
录制User OAuth(General App)~/.zoom_credentials/oauth_token.json

检查状态:

python3 scripts/zoom_meetings.py setup

设置

第 1 部分:Server-to-Server OAuth(用于会议)
  1. 前往 marketplace.zoom.us → Develop → Build App
  2. 选择 Server-to-Server OAuth
  3. 为其命名(例如,“Claude Zoom Meetings”)
  4. 复制 Account ID、Client ID、Client Secret
  5. 添加作用域:
    • meeting:read:meeting:admin
    • meeting:read:list_meetings:admin
    • meeting:write:meeting:admin
    • user:read:user:admin
  6. 激活应用
  7. 保存凭据:
mkdir -p ~/.zoom_credentials
cat > ~/.zoom_credentials/credentials.json << 'EOF'
{
  "account_id": "YOUR_ACCOUNT_ID",
  "client_id": "YOUR_CLIENT_ID",
  "client_secret": "YOUR_CLIENT_SECRET"
}
EOF
第 2 部分:General App OAuth(用于录制)

Server-to-Server 应用无法访问云录制。你需要另一个 General App:

  1. 前往 marketplace.zoom.us → Develop → Build App
  2. 选择 General App
  3. 设置重定向 URL:http://localhost:8888/callback
  4. 复制 Client ID 和 Client Secret
  5. 添加作用域:
    • cloud_recording:read:list_user_recordings
    • cloud_recording:read:list_recording_files
  6. 激活应用
  7. 授权(一次性浏览器流程):
# Open this URL in browser (replace CLIENT_ID):
https://zoom.us/oauth/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=http://localhost:8888/callback

# After authorizing, you'll be redirected to:
# http://localhost:8888/callback?code=AUTHORIZATION_CODE

# Exchange the code for tokens (replace values):
python3 -c "
import requests, json
resp = requests.post('https://zoom.us/oauth/token',
    auth=('CLIENT_ID', 'CLIENT_SECRET'),
    data={'grant_type': 'authorization_code', 'code': 'AUTH_CODE', 'redirect_uri': 'http://localhost:8888/callback'})
data = resp.json()
data['client_id'] = 'CLIENT_ID'
data['client_secret'] = 'CLIENT_SECRET'
data['expires_at'] = __import__('time').time() + data.get('expires_in', 3600)
with open(__import__('pathlib').Path.home() / '.zoom_credentials/oauth_token.json', 'w') as f:
    json.dump(data, f, indent=2)
print('Saved!')
"

快速开始

# Check setup
python3 scripts/zoom_meetings.py setup

# List upcoming meetings
python3 scripts/zoom_meetings.py list

# Create a meeting
python3 scripts/zoom_meetings.py create "Team Standup" --start "2025-01-15T10:00:00" --duration 30

# List recordings
python3 scripts/zoom_meetings.py recordings --start 2025-01-01

命令

会议
# List meetings
python3 scripts/zoom_meetings.py list                      # upcoming
python3 scripts/zoom_meetings.py list --type previous      # past
python3 scripts/zoom_meetings.py list --limit 10 --json

# Get meeting details
python3 scripts/zoom_meetings.py get MEETING_ID

# Create meeting (times are treated as LOCAL time)
python3 scripts/zoom_meetings.py create "Topic"                              # instant
python3 scripts/zoom_meetings.py create "Topic" --start "2025-01-15T14:00:00" # scheduled (local time)
python3 scripts/zoom_meetings.py create "Topic" --duration 60 --timezone "Europe/Berlin"
python3 scripts/zoom_meetings.py create "Topic" --agenda "Discussion points" --waiting-room
python3 scripts/zoom_meetings.py create "Topic" --invite "[email protected]"  # send invite
python3 scripts/zoom_meetings.py create "Topic" --invite "[email protected]" --invite "[email protected]"  # multiple

# Update meeting
python3 scripts/zoom_meetings.py update MEETING_ID --topic "New Topic"
python3 scripts/zoom_meetings.py update MEETING_ID --start "2025-01-16T10:00:00"

# Delete meeting (requires meeting:delete:meeting:admin scope)
python3 scripts/zoom_meetings.py delete MEETING_ID
录制
# List all recordings (default: last 30 days)
python3 scripts/zoom_meetings.py recordings

# With date range
python3 scripts/zoom_meetings.py recordings --start 2025-01-01 --end 2025-01-31

# Show download URLs
python3 scripts/zoom_meetings.py recordings --show-downloads

# Get specific meeting's recordings
python3 scripts/zoom_meetings.py recording MEETING_ID

# JSON output
python3 scripts/zoom_meetings.py recordings --json

输出格式

Markdown(默认)
# Zoom Meetings (3 upcoming)

## Weekly Team Sync
**ID:** 123456789
**Start:** 2025-01-15 14:00:00 UTC
**Duration:** 60 minutes
**Join URL:** https://zoom.us/j/123456789
JSON

添加 --json,即可生成适合通过管道传递给其他工具的结构化输出。

录制文件类型

类型说明
MP4视频录制
M4A仅音频
TRANSCRIPT文字稿(VTT)
CHAT聊天消息
TIMELINE发言者时间线
SUMMARYAI 会议摘要

用户请求示例

用户表述命令
“列出我的 Zoom 会议”list
“显示过往会议”list --type previous
“创建一个明天下午 2 点的会议”create "Meeting" --start "2025-01-15T14:00:00"
“显示我的 Zoom 录制”recordings --start 2025-01-01
“获取会议 X 的录制”recording MEETING_ID

依赖项

pip install requests

文件

文件用途
~/.zoom_credentials/credentials.jsonS2S OAuth 凭据
~/.zoom_credentials/token.jsonS2S 缓存令牌
~/.zoom_credentials/oauth_token.jsonUser OAuth 令牌(自动刷新)

已知问题

  • **join_before_host 是账户级设置。**此设置在 Zoom 账户管理员级别锁定。如果账户设置覆盖了通过 API 针对单个会议设置的值,该设置会被静默忽略。必须先在 Zoom 管理设置中更改(Security → “允许参与者在主持人之前加入”),之后 API 调用才会遵循此设置。
  • **等候室设置会覆盖“主持人之前加入”。**如果账户级别启用了等候室,即使 API 接受了 join_before_host,该设置也不会生效。

API 参考

评论

支持 Markdown