Zoom聊天会议管理工具

一个零配置的Zoom团队聊天和会议记录只读服务器,支持聊天记录查询、会议摘要获取和本地搜索功能。

  • by A-J-C
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 AlexPortSwigger/zoom-mcp-server

使用说明

Zoom MCP服务器v2.2

用于Zoom团队聊天和会议记录的只读MCP服务器。 零配置 --无需输入客户端密码,也无需设置脚本。分布为a .mcpb 捆绑。

这个连接器让克劳德做什么

用例 工具路线
“今天#channel上说了什么?” zoom_message_history(channel, from_date, to_date)
“本周总结#频道” zoom_message_history 在日期范围内,克劳德总结道
“做了什么 在#频道里说?" zoom_message_history 对于频道,按以下方式过滤 sender 在结果中
“跟我聊聊我的DM " zoom_message_history(contact=<email>)
“查找关于 跨聊天(今天)” zoom_search_messages(query, channel_filter?) --快速Zoom原生搜索
“查找 几周前提到/来自 " zoom_search_history(query, from_date, sender_filter?) --深度客户端搜索,无24小时上限
“我在哪个频道?” zoom_chat_channels (使用 starred_only=true 对于活跃的人)
“谁在#channel?” zoom_chat_channel_members
“我今天有什么会议?” zoom_meeting_list(type=upcoming)
“会议X摘要” zoom_meeting_summary_get(meeting_id)
“最近的会议摘要” zoom_meeting_list 然后 zoom_meeting_summary_get 每次会议
“X会议记录” zoom_meeting_transcript(meeting_id)

默认日期窗口

zoom_message_history 和 zoom_search_messages 默认 from_date 到 7天前 当没有提供日期时(锚定在 to_date 如果只给出一个)。明确传递 from_date/to_date 对于任何其他范围。请注意 zoom_search_messages 无论传递了什么,服务器端的Zoom仍然限制在~24h(见下文)。

两层搜索

Zoom的原生关键字搜索(/chat/users/me/messages?search_type=message)虽然很快,但 服务器端的历史记录上限约为24小时,无论 from_date/to_date。要搜索较旧的内容(Zoom UI搜索会明确索引这些内容),v2.2.8添加了 zoom_search_history:它通过浏览模式读取每个频道/DM的完整历史记录,并在客户端过滤关键字。速度较慢(每次扫描几秒钟),但时间不受限制。推荐模式:

  1. 尝试 zoom_search_messages 第一(快速,索引)。
  2. 如果它返回0次点击,而您希望进行较旧的比赛,请回退到 zoom_search_history 具有更宽的日期范围和任何 sender_filter 你可以用它来缩小范围。

MCPB在首次安装时启动OAuth浏览器流(PKCE,不需要客户端密钥)。令牌在磁盘上进行Fernet加密;文字记录和聊天正文永远不会被保存;SQLite元数据缓存仅存储名称和ID。

端点状态(通过实时验证2026-05-10 scripts/live_audit.py)

15通过/1失败/6跳过(跳过是我们在没有特定测试数据的情况下无法使用的工具,例如记录的会议记录或聊天文件ID):

工具 状态 现场证据
zoom_auth_whoami ✅ 返回的个人资料
zoom_chat_channels ✅ 1548个频道
zoom_chat_channel_members ✅ #Devs中有78名成员
zoom_chat_contacts ✅ 209个联系人
zoom_chat_shared_spaces ✅ 0个空格(合法空白)
zoom_message_history ✅ 来自#Devs的5条消息
zoom_message_get / zoom_message_thread / zoom_message_pinned ✅ 返回真实数据
zoom_message_bookmarks ✅ 1书签
zoom_search_messages ✅ 6次点击“the”
zoom_meeting_list ✅ 10次以前的会议
zoom_meeting_recordings ✅ 0个记录(此用户的合法空记录)
zoom_meeting_get ✅ 返回会议主题+清单
zoom_meeting_summary_get ✅ 端点可达(对于没有AI摘要的会议,404是正确的行为)
zoom_chat_shared_space_get, zoom_message_file, zoom_meeting_transcript, zoom_auth_login/logout/resolve ⏭ 跳过 需要我们没有的特定测试数据(记录的会议记录、聊天文件ID、共享空间)或具有交互性/破坏性

当一个工具因缺少作用域错误而失败时,您将看到一条单行消息,如 HTTP 400 (Zoom code 4711): Zoom OAuth app missing scope. Required: [meeting:read:list_summaries:admin]. Fix: a Zoom Marketplace admin must add the missing scope(s)… --消息准确地命名了要添加的内容和位置。

为什么不 zoom_meeting_summary_list

相应的Zoom REST端点(GET /meetings/meeting_summaries)要求 meeting:read:list_summaries:admin一 :admin 范围 仅对服务器到服务器OAuth应用程序公开,而不是此连接器附带的用户管理的PKCE应用程序。v2.2.6没有公开一个总是4711s的工具,而是删除了它。

对于“向我展示最近的摘要”工作流程来说,解决方法同样有效:Claude致电 zoom_meeting_list → 挑选会议→ calls zoom_meeting_summary_get 每次会议。 zoom_meeting_summary_get 在非工作良好-:admin meeting:read:summary 范围。

当一个工具因缺少作用域错误而失败时,您将看到一条单行消息,如 HTTP 400 (Zoom code 4711): Zoom OAuth app missing scope. Required: [meeting:read:list_meetings]. Fix: a Zoom Marketplace admin must add the missing scope(s)… --消息准确地命名了要添加的内容和位置。

v2.2.5中删除的工具

这三个工具的Zoom REST URL不公开存在——根据Zoom发布的 AI伴侣OpenAPI规范 (一个端点,仅存档)和详尽的URL探测:

  • zoom_search_ai, zoom_search_ask --the ai_companion:read:search/:ask Zoom会发布作用域广告,但没有REST URL接受它们。唯一存在的AI Companion REST端点是 GET /v2/aic/users/{userId}/conversation_archive (仅限管理员的合规性存档下载)。
  • zoom_message_mentions — /chat/channels/{id}/mention_groups 对于每个测试的URL变体,返回代码2300(“无法识别端点”)。

如果Zoom将来发布这些端点,重新添加工具只需在 server/endpoints.py.

安装(零配置)

  1. 下载 zoom-mcp-<your-platform>.mcpb
  2. 双击以在Claude Desktop中安装(无提示,无需输入任何内容)
  3. 连接器在首次运行时启动浏览器OAuth流——登录Zoom,单击 允许
  4. 浏览器自动关闭;克劳德告诉你通过了认证
  5. 完成

MCPB有PortSwigger Zoom开发应用程序 公共客户端ID 烘烤,并使用 PKCE (RFC 7636)——任何地方都没有客户端机密,也不需要环境变量。

可用工具(22个工具)

每个工具都有标准的MCP注释,因此Claude Desktop的连接器权限屏幕将它们分组为:

  • 只读(20个工具) -我们公开的每个Zoom API调用
  • 书写(1个工具) — zoom_auth_login (在本地保存OAuth令牌)
  • 破坏性(1个工具) — zoom_auth_logout (擦除本地令牌、缓存、内存状态)

工具名称共享组前缀(zoom_auth_*, zoom_chat_*, zoom_meeting_*, zoom_message_*, zoom_search_*):

zoom_auth_* — zoom_auth_login, zoom_auth_logout, zoom_auth_resolve, zoom_auth_whoami

zoom_chat_* — zoom_chat_channels (与 starred_only), zoom_chat_channel_members, zoom_chat_contacts, zoom_chat_shared_spaces, zoom_chat_shared_space_get

zoom_meeting_* — zoom_meeting_list, zoom_meeting_get, zoom_meeting_recordings, zoom_meeting_transcript, zoom_meeting_summary_get

zoom_message_* — zoom_message_history (自动分页频道/DM历史,内嵌反应+附件元数据), zoom_message_thread, zoom_message_get, zoom_message_file, zoom_message_pinned, zoom_message_bookmarks

zoom_search_* — zoom_search_messages (快速Zoom原生搜索,24小时上限), zoom_search_history (深度客户端搜索,无时间限制)

auth的工作原理

Claude → Browser → zoom.us/oauth/authorize?code_challenge=… → user clicks Allow
                                                     ↓
                             http://localhost:53682/oauth/callback ←  MCPB local listener
                                                     ↓
                             zoom.us/oauth/token  (code + verifier; NO secret)
                                                     ↓
                             Tokens encrypted at rest in:
                               macOS:   ~/Library/Application Support/zoom-mcp/
                               Linux:   ${XDG_DATA_HOME:-~/.local/share}/zoom-mcp/
                               Windows: %APPDATA%\zoom-mcp\

PKCE code_verifier 永远不要离开机器。在OAuth回调中验证状态值以进行CSRF保护。

如果还没有有效的会话,浏览器流将在连接器启动时自动启动(maybe_auth_on_startup 在 server/main.py).在随后使用刷新令牌启动时,auth是静默的。

开发应用程序必须配置OAuth作用域

必需(连接器v2.2.6更改后):

# Profile / contacts
user:read:user
contact:read:list_contacts

# Team Chat (read-only)
team_chat:read:channel
team_chat:read:user_channel
team_chat:read:list_user_channels
team_chat:read:list_members
team_chat:read:list_user_messages
team_chat:read:user_message
team_chat:read:thread_message
team_chat:read:message_emoji
team_chat:read:list_pinned_messages
team_chat:read:list_bookmarks
team_chat:read:file
team_chat:read:chat_control
team_chat:read:list_contacts
team_chat:read:contact
team_chat:read:shared_space
team_chat:read:list_shared_spaces
team_chat:read:list_shared_space_channels
team_chat:read:list_shared_space_members

# Meetings + recordings
meeting:read:meeting
meeting:read:list_meetings        ← needed for zoom_meeting_list
meeting:read:summary              ← needed for zoom_meeting_summary_get
cloud_recording:read:list_user_recordings
cloud_recording:read:list_recording_files
cloud_recording:read:recording
cloud_recording:read:meeting_transcript
cloud_recording:read:content

在中添加作用域后 marketplace.zoom.us,用户必须 zoom_auth_logout 然后 zoom_auth_login 以获得具有新作用域的刷新令牌。

作用域名称陷阱 (现场验证):

  • 没有 meeting:read:list_meetings:admin,没有 meeting:read:list_summaries:admin,没有 meeting:read:summary:admin 在Zoom Marketplace目录中--Zoom的4711错误消息 建议 :admin 变体,但最终用户OAuth应用程序实际上只存在非管理员名称。
  • meeting_summary:read:summary (注意下划线)出现在较旧的README中,但 不 Zoom会检查什么——正确的名称是 meeting:read:summary.

安全和数据处理

  • TLS 1.2+已实施 所有Zoom流量
  • PKCE --没有 client_secret 曾经分发或存储
  • 静态加密的OAuth令牌Fernet (模式0600)
  • SQLite元数据缓存 仅存储频道/联系人/会议名称和ID-- 磁盘上没有消息正文或转录内容
  • 原木擦洗 承载令牌、刷新令牌、消息正文、转录文本、搜索查询和电子邮件地址
  • zoom_auth_logout 擦拭一切

分叉

要将其与其他Zoom应用程序一起使用:

  1. 创建Zoom Marketplace应用程序,启用 使用公共客户端OAuth,复制 公共客户端ID
  2. 将OAuth重定向设置为 http://localhost:53682/oauth/callback (开发应用程序)或HTTPS回调(生产环境)
  3. 编辑 server/main.py → 改变 DEFAULT_CLIENT_ID 和 DEFAULT_REDIRECT_URI,或通过 mcp_config.env 在 manifest.json
  4. 重建: ./scripts/build_mcpb.sh --all

故障排除

问题 修复
浏览器显示“无法访问此网站” localhost:53682 Zoom认证后 v2.2.7+绑定双栈 127.0.0.1 和 ::1 为了解决这个问题。如果仍然损坏,请检查 ~/Library/Logs/zoom-mcp/zoom-mcp.log 对于绑定线。身份验证URL也会被记录下来,因此您可以手动将其粘贴到浏览器中。
“所有候选OAuth端口都忙:[53682]” 查找原因: lsof -nP -iTCP:53682 -sTCP:LISTEN.终止或移动冲突的服务(gcloud SDK也使用此端口-- gcloud auth revoke 如果是这样的话)。
未经授权关闭身份验证窗口 重新运行 zoom_auth_login
令牌过期,刷新失败 zoom_auth_logout那么 zoom_auth_login
浏览器根本不会弹出 身份验证URL记录在INFO级别——从以下位置复制 ~/Library/Logs/zoom-mcp/zoom-mcp.log 并手动粘贴。
连接超时/防火墙阻止Python macOS系统设置→ 网络→ 防火墙→ 允许传入Python二进制文件的连接。或者暂时禁用防火墙进行测试。
HTTP 400 (Zoom code 4711) 在工具上 Zoom OAuth应用程序缺少作用域。错误消息准确地指出了是哪一个。添加它 marketplace.zoom.us那么 zoom_auth_logout + zoom_auth_login.
zoom_search_messages 当您期望匹配时返回0次 Zoom将搜索窗口限制在服务器端约24小时。对于较旧的内容,请使用 zoom_message_history 用日期范围代替。

发展

git clone https://github.com/AlexPortSwigger/zoom-mcp-server.git
cd zoom-mcp-server
python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"

.venv/bin/pytest                       # 109 tests
./scripts/dev-run.sh                   # run from source
./scripts/build_mcpb.sh                # build .mcpb for host platform
./scripts/build_mcpb.sh --all          # build .mcpb for all 4 platforms
python3 scripts/diag_endpoints.py      # live-probe endpoints (uses local tokens)

许可证

麻省理工学院