Zoomobsidian — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Zoomobsidian (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
An MCP (Model Context Protocol) server that provides access to Zoom meeting summaries and writes them into an Obsidian vault. Uses Puppeteer-based browser authentication — on first use, a browser window opens for you to sign in to Zoom. Session cookies are saved to ~/.zoom-mcp/cookies.json and reused automatically until they expire.
Configurable for any Zoom organization (e.g., acme.zoom.us, yourcompany.zoom.us).
First Last.mdnpm install
npm run build| Variable | Description | Default |
|---|---|---|
ZOOM_SUBDOMAIN | Your org's Zoom vanity subdomain (e.g. acme for acme.zoom.us) | (empty — uses zoom.us) |
OBSIDIAN_VAULT_PATH | Absolute path to your Obsidian vault root | _(required)_ |
VAULT_SUBFOLDER | Subfolder within the vault containing 1:1 note folders (e.g. MyOrg) | (empty — search directly under vault root) |
ONE_ON_ONE_FOLDERS | Comma-separated list of folder names holding 1:1 notes | ! One on Ones, ! One on Ones (Other) |
SHARED_MEETINGS_FOLDER | (Optional, v1.1.0+) Folder for meetings shared WITH you. If not set, shared meetings are not processed. | (empty) |
Add to your Claude Desktop config (~/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)"
}
}
}
}Ensure chat.agent.enabled is turned on in VS Code settings. Then add .vscode/mcp.json to your workspace:
{
"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_loginOpens a browser window for you to sign into Zoom. Call this first if you get authentication errors. Session cookies are saved to ~/.zoom-mcp/cookies.json for automatic reuse.
list_meeting_summariesList meeting summaries with optional source and date filtering.
| Parameter | Type | Description |
|---|---|---|
source | string (optional) | owned (default) or shared |
from | string (optional) | Start date (e.g. 2025-01-01) |
to | string (optional) | End date (e.g. 2025-02-01) |
get_meeting_summaryGet the full AI-generated summary for a specific meeting.
| Parameter | Type | Description |
|---|---|---|
meeting_id | string | The Zoom meeting ID |
write_summary_to_obsidianFetch a Zoom meeting summary and write it into the matching Obsidian 1:1 note. Matches the note file by the first name in the meeting topic (e.g. Amit:Howard → Amit Kumar.md). After a successful write, deletes the summary from Zoom.
| Parameter | Type | Description |
|---|---|---|
meeting_id | string | The numeric Zoom meeting ID (e.g. 96980348286) |
write_all_summaries_to_obsidianFetch every Zoom meeting summary and write each one to the matching Obsidian 1:1 note. Skips multi-person meetings (not 1:1s), skips meetings with no matching file, and skips duplicates already present in the note. After each successful write (including duplicates already in the vault), deletes the summary from Zoom.
| Parameter | Type | Description |
|---|---|---|
from | string (optional) | Start date filter (e.g. 2026-01-01) |
to | string (optional) | End date filter (e.g. 2026-02-23) |
The tool looks for a vault note to write each summary into using this priority:
First Last.md matching an attendeeAmit from Amit:Howard), preferring solo files over shared ones (Amit Kumar.md over Amit Kumar + Bob.md)Multi-person meetings (3+ participants, or Name1:Name2:Name3 topic format) are skipped — only 1:1s are written.
Summaries are inserted in the vault's tab-indented style, newest-first:
\tZoom AI Summary.YYYY-MM-DD - Zoom AI Summary section is inserted at the correct chronological position.All caches are in-memory only and scoped to a single run. They exist solely to avoid fetching the same meeting twice within one execution (e.g. a meeting whose attendees were resolved in the attendee phase need not be re-fetched in the summary phase). No cache data is ever written to disk. ~/.zoom-mcp/ only holds cookies.json (session) and optionally config.json (vault path).
zoom-meetings-to-obsidian.mjs is a standalone Node.js script for previewing and applying changes.
# 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 without --update is an error.
Output includes:
Would delete from Zoom list (dry-run) or live deletion results (--do-it)Inspect dry-run results in /tmp/obsidian-preview before running with --do-it.
zoom_login opens a real browser window~/.zoom-mcp/cookies.jsonzoom_login againnpm run build # Compile TypeScript → build/
npm run dev # Watch mode (tsc --watch)
npm start # Run the MCP server (stdio transport)~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.