WireCat Zoom

dev.wirecat由 wirecat.dev 发布v0.67.0更新于 Nov 5, 2026

Zoom cloud recordings and transcripts for agents, kept on your computer. Sign in with zm first.

发布方自己的服务:Wire Cash: bank wire fees and transfer costs

概览

AI 生成的概览

本地优先的 Zoom 会议、转录与录制工具,让 AI 助手可检索并引用你过去的通话内容。

可以做什么
  • 搜索并读取已存储的会议、转录、AI 摘要与段落,并给出精确引用
  • 会前准备:查找候选系列会议、与同一批人的历史会议及带引用的上下文
  • 归档云端录制并生成带校验和的清单,离线搜索或导入已归档的 WebVTT 转录
  • 用下载的语音模型转录本地音频,并生成向量以支持按语义搜索
  • 预览后续任务建议,把会议关联到人物或项目
  • 列出、创建、修改和取消 Zoom 会议,查询联系人
适用场景
适合希望助手回忆 Zoom 通话中说过、约定或承诺了什么,为即将到来的会议做准备,或在本地保留可检索的录制与转录档案的场景。
运行要求
通过 npx 在本地运行(Node 22.16+ 的 22.x 或 24+),需要一个用户自管的 Zoom 应用并启用 Public Client OAuth,把其 Public Client ID 设为 zoom.client_id 或 ZM_ZOOM_CLIENT_ID,登录时需在浏览器中批准。建议使用系统钥匙串;本地转录还需 ffmpeg 和下载的模型。需能访问 Zoom API。
安装前请注意
令牌保存在系统钥匙串中,钥匙串不可用时写入仅所有者可读的文件。通过 MCP 使用时,本应在终端确认的写操作会不经询问直接执行,建议把配置档权限设为 readonly 或 deny,或设置 ZM_READ_ONLY=1。选择远程嵌入端点会把转录段落和查询发送给该端点;OPENAI_API_KEY 仅用于你自行选择的端点。会议变更、导入和下载会修改本地数据或 Zoom。

安装

在 SourceWeft 中

  1. 打开 控制台中的 WireCat Zoom,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

[Zoom meetings and transcripts for your AI agent]

zoom-cli

Zoom meetings and transcripts for your AI agent. Know the context before the call. Remember the commitments after it.

zm keeps your Zoom meetings, transcripts and AI summaries in a local database and gives them to Claude Code, Codex, Gemini CLI or any MCP client. Ask what you discussed with someone last time, or what you promised in yesterday's call, and get the answer with a reference to the exact passage.

Documentation · Commands · WireCat

[npm] [Node] [License: Apache 2.0]

Example — invented people, illustrative output:

You: I have a call with Bob Sample at three. What did we agree last time, and what do I owe him?

sh
zm personal remote-meetings list --json                      # your upcoming meetingszm personal meetings people "Bob Sample" --json              # him among past participantszm personal search meetings "quote" --since-time 2026-09-01 --jsonzm personal meetings passage meeting:1/42/57/118 --format markdown  # the line and its context

Agent: You last spoke on 2 October in "Pricing review". You promised Bob a revised quote by Friday (meeting:1/42/57/118), and he asked whether the annual plan includes onboarding (meeting:1/42/57/131). I found no later update in the stored meetings I searched; missing history may change that.

Quick start

You need Node 22.16+ (22.x) or 24+ and a configured user-managed Zoom app; a system keyring is best. Reuse one you already created or one your team has made available to your user; otherwise create your own. Use its Public Client ID, not its regular Client ID or secret. The installation guide walks through app settings, browser approval and callback completion.

sh
npm install -g @wirecat/zoom-clizm config set zoom.client_id <public-client-id>zm personal session start                 # "personal" is the profile; approve in your browserzm personal meetings sync --lookback-days 7zm personal meetings list

Check Zoom's transcript generation and retention settings first: the API reads available hosted meeting text, and permission does not create a transcript. For an attended meeting, obtain a VTT file from the host or download one if allowed, then run zm personal meetings import <folder>. Full guide: installation.

More: installation · your Zoom app · Zoom on wirecat.dev

What you can do

Prepare for a call. "I meet Bob Sample tomorrow. What did we talk about last time?" meetings scheduled finds candidate series; meetings prepare <series-id> checks the selected series’ next occurrence and gathers cited context. meetings people, search meetings (word search that also matches English, Spanish and Russian word forms) and meetings context person:<id> bring back past meetings with the same people. Inventory date hints alone do not prove the next call. Participant discovery accepts --limit, --scan-limit, --max-read-bytes and --cursor; follow item.page.next_cursor even after an empty scan page. It returns observed identity_id candidates, never inferred person links. Stored meeting lists accept metadata queries, for example zm personal meetings list 'started_at:[2026-09-01 TO 2026-10-01]' --json.

Find the project behind a call. "Which of my saved projects might this meeting concern?" meetings projects scan <ref> compares one bounded page of local meeting evidence with existing project names, keys and aliases. It returns cited suggestions and ambiguity for review, saving no project link. The agent can check proposed labels against Memo's existing vocabulary too.

Follow up after it. "What did I promise in today's call?" The agent reads meetings transcript and meetings summary, cites passages with meetings evidence, and meetings task-proposal --type promise previews a follow-up task tied to that passage.

Keep the whole history. "Back up every recording since January." recordings download --since-time 2026-01-01 --until-time 2026-10-10 --output-dir ./zoom-archive --jsonl downloads video, audio, transcripts and chat with SHA-256 manifests; recordings schedule runs it daily.

More: the local archive · search and evidence · Zoom on wirecat.dev

Built for AI agents

  • Command line + skill. zm skill install adds the packaged guide for Claude Code, Codex and Gemini CLI. Every command speaks --json or --jsonl, and zm commands --json describes them all.
  • MCP. zm personal mcp serve serves zm's commands to Claude Desktop, Cursor and other MCP clients, as far as the profile's permissions allow; zm mcp serve --profiles all serves every profile from one server, and --http serves browser apps behind your tunnel. Connecting a client.

Your agent. Your meetings. Your rules.

More: MCP and skills · connect your AI agent

Why zm

  • Context across meetings. Search available hosted meetings and imported transcripts in the shared store. Read archived transcripts separately or import them before searching them together.
  • Local-first. Meetings live in a SQLite database on your machine. Archived transcripts can be read and searched offline, without login.
  • Every answer has a source. References such as meeting:1/42/57/118 point to one passage of one transcript revision, and corrected transcripts keep their history.
  • Made for agents. JSON output, bounded reads with explicit completeness, a skill and an MCP server.
  • Safe by default. Your own Zoom app, tokens only in the keyring, permissions per profile, and every change to Zoom asks first at the terminal. Over MCP there is no terminal, so ask runs without a question; use deny or readonly to stop a change.

More: security · Zoom on wirecat.dev

What works today, and what does not yet

zm is at version 0.x; commands may still change. Today it reads hosted meetings, participants, transcripts and AI summaries available to the account through Zoom's official API, imports downloaded WebVTT files, archives cloud recordings, transcribes local audio with an installed speech model, links meetings to events and people, and creates, changes or cancels simple meetings.

  • It does not find commitments on its own. Your agent finds them in transcripts; task-proposal only previews a task and creates nothing.
  • People are linked by hand. zm never guesses a person from a speaker name; person context covers participants already linked to a person, for example with meetings link.
  • Local transcription needs ffmpeg for anything but a ready WAV, and a model you download with zm models download; speakers stay unknown.
  • Attended meetings need a manual download from your Zoom portal, then zm personal meetings import.
  • A company-managed Zoom account may need an admin to approve your app.
  • Daily archive jobs install only on Linux. Other platforms can preview them.
  • Zoom only, for now. Google Meet and Microsoft Teams are on the roadmap.

More: what is planned · Zoom on wirecat.dev

More: compared with other tools · on wirecat.dev

Commands by task

TaskCommands
Set up and log inconfig show, config set <key> <value>, config unset <key>, session start [--browser <program>], session status [--check], doctor
Bring meetings inmeetings sync [--since-time <time>] [--lookback-days <days>], meetings import <folder>, watch [api|files] [folder] --jsonl
Read stored meetingsmeetings list, meetings show <meeting>, meetings transcript <meeting>, meetings summary <meeting>, meetings export <meeting> --format markdown|vtt, events list
Searchsearch meetings <query>, meetings people <query>, search all <query>
Evidence and peoplemeetings passage <reference>, meetings evidence <reference>, meetings context <person>, meetings link <reference>, meetings update <reference>, meetings task-proposal <reference> --type <type>
Several reads at oncebatch <file> runs bounded search meetings and meetings passage requests from a JSON file
Search by meaningsearch meetings <query> --model <model>, meetings embeddings --model <model>
Local transcriptionmeetings transcribe <meeting> <file> --model <model>
Cloud recordingsrecordings list, recordings show <meeting>, recordings download <meeting> --output-dir <dir>, recordings download --since-time <date> --until-time <date> --output-dir <dir> --jsonl, recordings schedule create|list|show|run|disable
Local archiverecordings archive show|check|locks|recover <directory>, recordings archive transcript|import <directory>, search recordings <directory> <query>
Zoom meetingsremote-meetings list|show|invitation, remote-meetings create|update|cancel
Zoom contactscontacts list [name:… email:… type:company|external], contacts show <member id|email>
What zm didruns list [query], runs show <run-id> [--problems], runs path <run-id>; --record keeps a successful run too
Zoom's own searchzoom search: chat, docs and meetings zm does not archive, read live
Agentsmcp serve [--profiles <names|all>] [--http] [--permission <key=level>], mcp add, mcp check, mcp config, mcp revoke, mcp server start|stop|status, skill show, skill install [--for claude|agents|all], commands --json, complete -- <words...>

Zoom meeting changes, links, transcription, schedules, explicit meetings embeddings generation and lock recovery preview by default and run once with --yes; --dry-run keeps the preview. Word search updates its index automatically. Search with --model generates missing vectors before ranking; an explicitly selected remote embedding endpoint receives those transcript passages and the query.

More: usage · every command and option · Zoom on wirecat.dev

Your Zoom app and login

zm reads your meetings through Zoom's official API using a configured user-managed Zoom app with Public Client OAuth. Reuse an existing app available to your user or create one. Enable Public Client OAuth, copy its Public Client ID, configure the redirect and add the required scopes manually. The optional starter manifest supplies neither scopes nor Public Client OAuth. Zoom may show a Client Secret, but zm does not use it. Recording archives and management need additional scopes. Follow the app setup guide; no credentials file is downloaded.

zm personal session start opens Zoom's consent page. Zoom redirects to the static page https://wirecat.dev/zoom-callback, which passes the answer to a listener on your machine; if it cannot, paste the code=…&state=… parameters it shows. Login checks the state and PKCE verifier and stores tokens in the system keyring; where the keyring fails, in a private file, without asking (--credential-storage file chooses the file, not recommended). Without a terminal, as in an agent's shell, login prints the URL on stderr for the agent to pass on and waits for the callback; --no-input and CI refuse it. zm personal session status reads the cached state without refreshing it; --check asks Zoom.

More: your Zoom app · login and sessions · Zoom on wirecat.dev

Profiles and the local store

The first word is the profile: zm personal meetings list. A profile is one Zoom login and its own meetings in the store; zm work session start makes a second one. ZM_PROFILE names it for a shell session, and ZM_PROFILE_LOCK pins a process to one profile. Nothing picks a profile for you: without one, a command that uses an account stops and lists the profiles on this computer. Names have 1–64 letters, digits, dots, underscores or hyphens. Login makes a profile; so does the first import on a computer with none. An import or pull naming an unknown profile beside others is refused, so a typo stores nothing.

Meetings live in the shared WireCat database wirecat.db, next to data from other WireCat tools. MESSAGING_STORE selects another path. Store opens preserve legacy messages.db files and their sidecars; manage their retention separately. Metadata, help, configuration and login never open the database.

More: profiles · where meetings are stored · Zoom on wirecat.dev

Pull, import and watch

sh
zm personal meetings sync --lookback-days 7                       # hosted meetings, revisiting late transcriptszm personal meetings import ./downloaded-transcripts              # .vtt or zoom-searcher .txt fileszm personal watch api --lookback-days 7 --jsonl                   # keep pulling in the foreground

The cursor alone does not revisit transcripts that appear late; use --lookback-days or an older --since-time. A failed occurrence leaves the cursor unchanged for the next pull. Imported files follow the exporter's YYYY-MM-DD_HHMM_topic-slug.vtt names, or .txt with a zoom-searcher header; their time is read in this computer's zone unless files.timezone names another, and the import says which. A .txt's speakers become participants of that meeting only; speaker names never become identities across meetings.

More: the local archive · Zoom on wirecat.dev

Archive cloud recordings

sh
zm personal recordings download --since-time 2026-01-01 --until-time 2026-10-10 --output-dir ./zoom-archive --jsonlzm personal recordings archive check ./zoom-archive --offline --jsonzm personal search recordings ./zoom-archive "example plan" --offline --json

Sync covers up to ten years in monthly requests and downloads serially, streaming to disk. Each occurrence gets a manifest with sizes and SHA-256 checksums, never signed URLs or tokens. Existing files are never overwritten; repeated runs skip verified files. With a profile, interrupted downloads resume safely. recordings archive transcript and search recordings read verified WebVTT offline without a database; recordings archive import appends them to your stored meetings. recordings schedule create --yes installs a daily systemd user timer (Linux only).

What you can download depends on Zoom permissions, retention and your plan. Recordings of meetings you only attended are not necessarily available through your API.

More: archive cloud recordings · daily backups · Zoom on wirecat.dev

Search and evidence

sh
zm personal search meetings "example plan" --limit 20 --json       # word search with continuationzm personal meetings evidence meeting:3/15/20/0 --cues 100 --json  # the exact passagezm personal meetings context person:7 --meetings 10 --json         # meetings linked to a person

search meetings indexes new meetings first, matches every word by prefix or by stored English, Spanish and Russian word forms, and pages with an opaque --cursor. References have the form meeting:<account>/<meeting>[/<transcript>[/<cue-position>]], stay inside the selected account and keep pointing at the same revision after a correction. Bounded reads report their coverage and limits; archive completeness can remain unknown. search all --only meetings,notes adds store-wide notes. search meetings --model searches by meaning with a model you name; nothing is downloaded for you.

More: search and evidence · topic search · Zoom on wirecat.dev

Local transcription

No Zoom transcript? zm personal meetings transcribe 1 ./call.m4a --model <model> --yes recognizes a recording — Zoom's MP4 or M4A through an installed ffmpeg, a 16 or 48 kHz PCM16 WAV as it is — with a local speech model from zm models download <model>, and appends it as a separate transcript. The preview checks the file without loading the model. Timestamps cover windows of up to 30 seconds and speakers stay unknown.

More: transcribe local audio · Zoom on wirecat.dev

MCP and agent setup

zm skill install writes the packaged guide to ~/.claude/skills/zoom-cli/ (Claude Code) and ~/.agents/skills/zoom-cli/ (Codex, Gemini CLI); --for picks one. MCP clients start the server with the profile it speaks for:

json
{ "mcpServers": { "zoom": { "command": "zm", "args": ["personal", "mcp", "serve"] } } }

The server offers zm's commands as the three tools every WireCat CLI serves — zm_tools_search, zm_read, zm_write — and runs each call as the command line would. The profile's permissions decide what it offers: {"remote-meetings": "readonly"} keeps an agent from changing Zoom meetings. A desktop app may need the full path from command -v zm (Linux/macOS) or where.exe zm (Windows), and the same ZM_CONFIG_DIR or MESSAGING_STORE in the entry's env.

More: MCP and skills · MCP and skills on wirecat.dev · connect your AI agent

Manage Zoom meetings

sh
zm personal remote-meetings create --title "Example planning" --start-time 2026-10-20T10:00:00Z --duration-minutes 30 --dry-run --jsonzm personal remote-meetings cancel 123456789 --dry-run --json

Creation, updates and cancellation preview until you add --yes, and are never retried automatically. An uncertain outcome exits with code 14: check Zoom before repeating. Remote ids are Zoom's numeric ids; stored meetings commands use local ids.

More: managing Zoom meetings · Zoom on wirecat.dev

Output, limits and deadlines

--json prints one answer envelope; --jsonl prints typed item records and a final end record; piped output defaults to JSON and errors go to stderr. --json=id,title keeps only those fields, --offline refuses the network, and output is capped at 4 MiB unless --max-output-bytes says otherwise. Default deadlines are 30 seconds for reads, five minutes for login and one hour for downloads, sync and verification; --timeout 5m changes them. Watching and MCP serving run until stopped. Times are UTC in every format; text output that shows one ends with times in UTC.

More: usage · Zoom on wirecat.dev

Configuration

SettingMeaning
zoom.client_idyour Zoom app's Public Client ID; ZM_ZOOM_CLIENT_ID or session start --client-id win over it (which app)
sourceapi or files for meetings sync and watch
files.folder, files.timezonethe transcript folder and the zone of its filenames
ZM_CONFIG_DIRanother configuration directory (also changes the keyring entry)
ZM_STATE_DIR, ZM_CACHE_DIRanother state (recorded runs) or cache directory
ZM_READ_ONLY1 allows reads and syncs only, other changes exit 5 (security)
WIRECAT_STATE_DIRanother WireCat folder; the default database is ~/.local/share/WireCat/wirecat.db
MESSAGING_STOREanother shared database path
OPENAI_API_KEYonly for an OpenAI embedding endpoint you select

More: configuration · Zoom on wirecat.dev

Security model

  • A configured Zoom public-client app with PKCE; no client secret is used.
  • Tokens in the system keyring, never in a config file; where the keyring fails, an owner-only file, said once on stderr.
  • Network: Zoom's API, plus an embedding endpoint only when you name one. --offline refuses both.
  • Manifests and saved jobs never hold signed URLs, tokens or credentials; diagnostics omit raw provider error text.
  • The MCP server offers reads and writes for the profile it serves (or each profile --profiles names), limited by its permissions; ask writes run without a terminal question.
  • ZM_READ_ONLY=1 refuses changes to Zoom, the login, settings and anything you added (imports, links, transcripts, exports, jobs), with exit 5, before any network call; reads and the syncs that copy Zoom into the store or an archive still run. Give it to an agent that should only read.

More: security · security on wirecat.dev

Troubleshooting

  • "Invalid redirect" from Zoom: the manifest import left the redirect URL or Public Client OAuth unset; fill them in by hand.
  • No transcripts: check generation, retention and permissions in the app guide. Enabling a setting does not restore deleted text; attended meetings may need zm personal meetings import.
  • Missing-scope error: add the named scope in your app, then zm personal session start again.
  • Browser does not start: zm personal session start --browser firefox, or paste the callback parameters.
  • Lock left after a crash: zm personal recordings archive locks, then recover with --yes.

More: troubleshooting · Zoom on wirecat.dev

Part of WireCat

zm is part of WireCat, an open-source, local-first context layer for AI agents. Meetings land in the same local store as your Telegram, MAX and memo data, and zm personal search all "<query>" --only meetings,notes searches them together with your memo notes. Start with Zoom. Add more context when you need it. Your context. Any agent.

More: wirecat.dev · connect your AI agent

Questions and setup help: join the WireCat Discord. Bugs go to this repository's issues.

Technical docs

PageWhat it covers
Overviewwhat zm is and the one-minute start
Installationrequirements, first run, where files go, completion
Your Zoom appcreating the app, scopes, company accounts
Login, sessions and profilesOAuth login, keyring, local profiles
Usageevery command group, output, deadlines
The local archivepull, import, watch, recordings, backups, transcription
Search and evidenceword search, evidence, people, links, memo
Topic searchsearch by meaning with a model you choose
MCP and skillsthe skill, the MCP server, optional tools
Managing Zoom meetingsupcoming meetings, create, update, cancel
Commandsevery command, option and exit code (generated)
Configurationsettings and environment variables
Troubleshootingby symptom
Securitywhat reaches the disk and the network
Architecture · Testing · Releasingfor contributors

The Zoom guides on wirecat.dev include setup, search and archive instructions.

Development

Node 22.16 or newer within 22.x, or Node 24 or newer:

sh
pnpm installpnpm lint && pnpm typecheck && pnpm test:coverage && pnpm docs:checkpnpm build && pnpm smoke:bun

Fixtures use invented people and meetings. Tests use an injected keyring, scripted HTTP responses, temporary config folders and the memory meeting store. pnpm generate:check checks the generated command reference; pnpm test:matrix measures command and option coverage.

More: development setup · test matrix

Licence

Apache License 2.0.

来源:README.md,提交 a0aa43e

工具

0
SourceWeft 曾在隔离沙箱中以无凭据方式启动该软件包一次,以列出其工具,但未能完成:服务器未能启动。

版本历史

7
  1. v0.67.0最新Nov 5, 2026
  2. v0.66.0Nov 3, 2026
  3. v0.63.0Nov 1, 2026
  4. v0.60.1Oct 31, 2026
  5. v0.60.0Oct 31, 2026
  6. v0.59.1Oct 30, 2026
  7. v0.59.0Oct 29, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Wire 集成