Zoom会议摘要MCP服务器
MCP(模型上下文协议)服务器,提供对Zoom会议摘要的访问,并将其写入黑曜石保险库。使用基于Puppeter的浏览器身份验证——首次使用时,会打开一个浏览器窗口供您登录Zoom。会话Cookie保存到 ~/.zoom-mcp/cookies.json 并自动重复使用,直到它们过期。
可配置用于任何Zoom组织(例如。, acme.zoom.us, yourcompany.zoom.us).
先决条件
- Node.js 18+
- A. Zoom帐户 启用AI Companion会议摘要
- 一 黑曜石拱顶 命名为1:1笔记文件
First Last.md
设置
npm install
npm run build配置
| 变量 | 描述 | 默认值 |
|---|---|---|
ZOOM_SUBDOMAIN | 您所在组织的Zoom虚荣子域(例如。 acme 为了 acme.zoom.us) | *(空--使用zoom.us)* |
OBSIDIAN_VAULT_PATH | 通往黑曜石保险库根的绝对路径 | _(必填)_ |
VAULT_SUBFOLDER | vault中包含1:1笔记文件夹的子文件夹(例如。 MyOrg) | *(空--直接在vault根目录下搜索)* |
ONE_ON_ONE_FOLDERS | 以逗号分隔的包含1:1注释的文件夹名称列表 | ! One on Ones, ! One on Ones (Other) |
SHARED_MEETINGS_FOLDER | (可选,v1.1.0+)与您共享的会议文件夹。如果未设置,则不会处理共享会议。 | *(空)* |
使用Claude Desktop
添加到您的Claude桌面配置(~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"zoom-summaries": {
"command": "node",
"args": ["/absolute/path/to/zoomFetchMCP/build/index.js"],
"env": {
"ZOOM_SUBDOMAIN": "acme",
"OBSIDIAN_VAULT_PATH": "/path/to/your/vault",
"VAULT_SUBFOLDER": "MyOrg",
"ONE_ON_ONE_FOLDERS": "! One on Ones,! One on Ones (Other)"
}
}
}
}与VS代码副本一起使用(代理模式)
确保 chat.agent.enabled 在VS代码设置中打开。然后添加 .vscode/mcp.json 到您的工作区:
{
"servers": {
"zoom-summaries": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/zoomFetchMCP/build/index.js"],
"env": {
"ZOOM_SUBDOMAIN": "acme",
"OBSIDIAN_VAULT_PATH": "/path/to/your/vault",
"VAULT_SUBFOLDER": "MyOrg",
"ONE_ON_ONE_FOLDERS": "! One on Ones,! One on Ones (Other)"
}
}
}
}可用工具
zoom_login
打开浏览器窗口,让您登录Zoom。如果遇到身份验证错误,请先调用此命令。会话Cookie保存到 ~/.zoom-mcp/cookies.json 用于自动重用。
list_meeting_summaries
列出带有可选来源和日期筛选的会议摘要。
| 参数 | 类型 | 说明 |
|---|---|---|
source | string(可选) | owned (默认)或 shared |
from | string(可选) | 开始日期(例如。 2025-01-01) |
to | string(可选) | 结束日期(例如。 2025-02-01) |
get_meeting_summary
获取特定会议的完整AI生成摘要。
| 参数 | 类型 | 说明 |
|---|---|---|
meeting_id | string | Zoom会议ID |
write_summary_to_obsidian
获取Zoom会议摘要并将其写入匹配的黑曜石1:1笔记中。按会议主题中的名字匹配笔记文件(例如。 Amit:Howard → Amit Kumar.md).成功写入后,从Zoom中删除摘要。
| 参数 | 类型 | 说明 |
|---|---|---|
meeting_id | string | 数字Zoom会议ID(例如。 96980348286) |
write_all_summaries_to_obsidian
获取每个Zoom会议摘要,并将每个摘要写在匹配的黑曜石1:1笔记中。跳过多人会议(不是1:1s),跳过没有匹配文件的会议,跳过笔记中已有的重复会议。每次成功写入后(包括vault中已有的重复项),都会从Zoom中删除摘要。
| 参数 | 类型 | 说明 |
|---|---|---|
from | string(可选) | 开始日期筛选器(例如。 2026-01-01) |
to | string(可选) | 结束日期筛选器(例如。 2026-02-23) |
黑曜石融合
文件匹配
该工具使用以下优先级查找vault注释,将每个摘要写入其中:
- 与会者姓名完全匹配 --名为的文件
First Last.md匹配与会者 - 主题名字前缀 --名称以主题中的名字开头的文件(例如。
Amit从Amit:Howard),更喜欢单独文件而不是共享文件(Amit Kumar.md结束Amit Kumar + Bob.md) - 单词边界搜索 --更广泛的名称搜索作为后备方案
多人会议(3人以上与会者,或 Name1:Name2:Name3 主题格式) 跳过 --只写了1:1。
笔记格式
摘要以vault的选项卡缩进样式插入,最新的先插入:
- 如果日期已经有手动注释:缩放内容将附加在当天的现有注释下方(使用空行分隔符),而不重复日期标题。以...开始
\tZoom AI Summary. - 如果日期是新的:独立
YYYY-MM-DD - Zoom AI Summary该部分按正确的时间顺序插入。
缓存
所有缓存都是 仅在内存中 并限定为单次运行。它们的存在只是为了避免在一次执行中两次获取同一个会议(例如,在与会者阶段已解决与会者问题的会议不需要在摘要阶段重新获取)。缓存数据从未写入磁盘。 ~/.zoom-mcp/ 只持有 cookies.json (会话)和可选 config.json (保险库路径)。
模拟/现场脚本
zoom-meetings-to-obsidian.mjs 是一个独立的Node.js脚本,用于预览和应用更改。
# Dry-run: copies vault files to /tmp/obsidian-preview and applies mutations there
node zoom-meetings-to-obsidian.mjs
# Write to real vault (no deletion)
node zoom-meetings-to-obsidian.mjs --update
# Write to real vault and delete summaries from Zoom
node zoom-meetings-to-obsidian.mjs --update --delete
# Add --debug to any command for verbose diagnostics (page elements, network requests, etc.)
node zoom-meetings-to-obsidian.mjs --update --delete --debug--delete 没有 --update 这是一个错误。
输出包括:
- 每个会议的表格:主题、目标文件和插入/复制/跳过状态
- A.
Would delete from Zoom列出(模拟运行)或实时删除结果(--do-it)
检查干运行结果 /tmp/obsidian-preview 跑步前 --do-it.
运作原理
- 首次使用时(或Cookie过期时),调用
zoom_login打开一个真实的浏览器窗口 - 您可以正常登录Zoom(SSO、密码等)。--任何方法都有效)
- 会话Cookie保存到
~/.zoom-mcp/cookies.json - 后续调用使用保存了Cookie的无头浏览器来抓取摘要页面
- 会议纪要按时间顺序插入黑曜石笔记中
- 撰写后,该摘要将从Zoom的AI Companion摘要列表中删除
- 如果Cookie过期,请致电
zoom_login再次
发展
npm run build # Compile TypeScript → build/
npm run dev # Watch mode (tsc --watch)
npm start # Run the MCP server (stdio transport)