使用说明
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的完整历史记录,并在客户端过滤关键字。速度较慢(每次扫描几秒钟),但时间不受限制。推荐模式:
- 尝试
zoom_search_messages第一(快速,索引)。 - 如果它返回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--theai_companion:read:search/:askZoom会发布作用域广告,但没有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.
安装(零配置)
- 下载
zoom-mcp-<your-platform>.mcpb - 双击以在Claude Desktop中安装(无提示,无需输入任何内容)
- 连接器在首次运行时启动浏览器OAuth流——登录Zoom,单击 允许
- 浏览器自动关闭;克劳德告诉你通过了认证
- 完成
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应用程序一起使用:
- 创建Zoom Marketplace应用程序,启用 使用公共客户端OAuth,复制 公共客户端ID
- 将OAuth重定向设置为
http://localhost:53682/oauth/callback(开发应用程序)或HTTPS回调(生产环境) - 编辑
server/main.py→ 改变DEFAULT_CLIENT_ID和DEFAULT_REDIRECT_URI,或通过mcp_config.env在manifest.json - 重建:
./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)
许可证
麻省理工学院