zoom-agent-cli
Provides tools for managing meetings, recordings, users, webinars, reports, dashboards, chat, and groups through the Zoom API, enabling AI agents to perform operations like listing, creating, updating, and deleting resources, retrieving reports, and sending chat messages.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@zoom-agent-clilist my upcoming meetings"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
zoom-agent-cli
CLI and MCP server for the Zoom API — built for humans and AI agents.
61 commands across meetings, recordings, users, webinars, reports, dashboard, chat, and groups. Every command is a CLI subcommand and an MCP tool — same schema, same auth, one codebase.
Upgrading from 0.1.x? Run
npm install -g zoom-agent-cli@latest. npm0.1.3and earlier called a nonexistent Zoom transcript endpoint and 404'd even when a VTT existed.0.2.0downloads theTRANSCRIPTfile fromGET /meetings/{id}/recordings. See CHANGELOG.md.
Install
npm (global) — Node 18+:
npm install -g zoom-agent-cli
zoom --help
zoom --versionnpx (no install):
npx zoom-agent-cli --help
npx zoom-agent-cli statusFrom GitHub (latest main, including unreleased fixes):
npm install -g github:bcharleson/zoom-agent-cliClone and run (fork / local development):
git clone https://github.com/bcharleson/zoom-agent-cli.git
cd zoom-agent-cli
npm install
npm run build
node dist/index.js --help
# optional: npm link # puts `zoom` and `zoom-agent-cli` on PATHRelated MCP server: Zoom API MCP Server
Zoom Server-to-Server OAuth
This tool uses Server-to-Server OAuth — no browser login. You exchange account credentials for a short-lived access token on every request.
Create the app
Go to marketplace.zoom.us → Develop → Build App
Choose Server-to-Server OAuth
Name it anything (e.g.
zoom-agent-cli)Under App Credentials, copy Account ID, Client ID, and Client Secret
Add scopes
New Marketplace Server-to-Server apps use granular slugs (for example cloud_recording:read:list_recording_files:admin). Older apps may still show classic umbrellas such as recording:read:admin. If Zoom returns does not contain scopes:[…], add the exact slug from that message and re-activate the app.
Transcript-only (zoom status, recordings list, recordings get / transcript):
Command | Granular S2S scope | Classic (legacy apps) |
|
|
|
|
|
|
|
|
|
Full CLI (classic umbrellas — search the Scopes tab by label if you are on a granular-only app):
Group | Required scopes |
meetings |
|
recordings (list, get, transcript) |
|
users |
|
webinars |
|
reports |
|
dashboard |
|
chat |
|
groups |
|
AI summary |
|
For a read-only agent, add only the :read: / :read:admin variants. Click Activate your app — tokens are not issued until the app is active.
Authentication
Credentials are resolved in this order: CLI flags → environment → zoom login config.
Environment variables (recommended for agents)
export ZOOM_ACCOUNT_ID="your-account-id"
export ZOOM_CLIENT_ID="your-client-id"
export ZOOM_CLIENT_SECRET="your-client-secret"A committed .env.example lists the names. Copy it to .env locally — never commit real values.
Interactive login (local CLI)
zoom login # writes ~/.zoom-agent-cli/config.json (mode 0600)
zoom logout # deletes that filePer-command flags
zoom meetings list --account-id "..." --client-id "..." --client-secret "..."If credentials are missing, the CLI exits 1 and prints how to set them.
Quickstart
zoom status
zoom meetings list --user-id me --type upcoming --prettyRecordings and transcripts
Zoom has no GET /meetings/{id}/recordings/transcript endpoint. This CLI lists recording files, finds file_type=TRANSCRIPT (or recording_type=audio_transcript), and downloads that VTT with download_access_token. Meeting UUIDs that start with / or contain // are double-encoded automatically.
# Find recent recordings that have a transcript
zoom recordings recent --days 14 --pretty
# Or search by topic
zoom recordings search standup --days 90 --pretty
# Pull WEBVTT + plain text for a meeting ID or UUID
zoom recordings transcript <meetingId> --prettyA successful pull looks like:
{
"meetingId": "12345678901",
"transcript": "WEBVTT\n\n1\n00:00:00.000 --> 00:00:02.000\nHello\n",
"text": "Hello"
}If the meeting has no cloud transcript file, you get { "transcript": null, "message": "No transcript file found for this recording." }.
Live verification (needs a real S2S app; not run in CI):
zoom status— connection succeeds.zoom recordings recent --days 14 --pretty— at least one item with"has_transcript": true.zoom recordings transcript <id>—transcriptstarts withWEBVTT.
Unit tests mock the Zoom API and the VTT download (npm test).
CLI
zoom [options] [command]
Options:
--account-id <id> Zoom Account ID
--client-id <id> Zoom Client ID
--client-secret <sec> Zoom Client Secret
--output <format> json (default) or pretty
--pretty Shorthand for --output pretty
--quiet Exit code only, no output
--fields <fields> Comma-separated fields to return
Commands:
login Store credentials interactively
logout Remove stored credentials
status Test connectivity
mcp Start MCP server (stdio)
meetings Manage meetings (9 commands)
recordings Manage recordings (9 commands)
users Manage users (6 commands)
past-meetings Access past meeting data (2 commands)
webinars Manage webinars (10 commands)
reports Usage and audit reports (6 commands)
dashboard Quality metrics (4 commands)
chat Team Chat channels and messages (8 commands)
groups User groups (7 commands)zoom meetings create \
--topic "Sprint Review" \
--type 2 \
--duration 60 \
--start-time "2026-03-15T14:00:00Z" \
--timezone "America/New_York"
zoom recordings get <meeting-id> --include-fields download_access_token
zoom meetings summary <meeting-uuid>
zoom past-meetings participants <meeting-uuid>
zoom chat send-message --to-channel <channel-id> --message "Deployment complete"
zoom reports daily --year 2026 --month 3
zoom users list --fields id,email,first_name,last_name --prettyMCP server
zoom mcp
# or: npx zoom-agent-cli mcpClaude Code / Claude Desktop
~/.claude.json (or your MCP config). Prefer env vars over checking secrets into git.
{
"mcpServers": {
"zoom": {
"command": "npx",
"args": ["-y", "zoom-agent-cli", "mcp"],
"env": {
"ZOOM_ACCOUNT_ID": "your-account-id",
"ZOOM_CLIENT_ID": "your-client-id",
"ZOOM_CLIENT_SECRET": "your-client-secret"
}
}
}
}If installed globally, "command": "zoom" and "args": ["mcp"].
Grok
[mcp_servers.zoom]
command = "zoom"
args = ["mcp"]
enabled = trueTools
All 61 tools are {group}_{subcommand}. Transcript:
Tool | Description |
| Download the meeting VTT from recording files |
| Last N days of recordings with |
| Search recording topics, then pull VTT by id |
| Recording files and download URLs |
| List meetings for a user |
| Meeting details |
| AI Companion summary |
Run zoom mcp (with credentials) to register the full set.
Command reference
meetings
Command | Description |
| List meetings ( |
| Get meeting details |
| Create a meeting |
| Update a meeting |
| Delete a meeting |
| End a live meeting |
| List registrants |
| Add a registrant |
| Get AI Companion summary |
recordings
Command | Description |
| List cloud recordings ( |
| Get recording files and download URLs |
| Download VTT from the |
| Last N days with |
| Search topics (default 90 days) |
| Get recording settings |
| Move recordings to trash |
| Delete a specific file |
| Recover from trash |
users
Command | Description |
| List all users |
| Get user details (use |
| Create a user |
| Update user profile |
| Delete or disassociate a user |
| Get user settings |
past-meetings
Command | Description |
| Get past meeting instance details |
| Get participants with join/leave times |
webinars
Command | Description |
| List webinars |
| Get webinar details |
| Create a webinar |
| Update a webinar |
| Delete a webinar |
| List registrants |
| Add registrant |
| List panelists |
| Add panelists |
| List polls |
reports
Command | Description |
| Daily usage report ( |
| Active/inactive host report ( |
| Meeting detail report |
| Participant report |
| Cloud recording usage report |
| Admin operation audit log |
dashboard
Command | Description |
| List meetings with quality metrics |
| Meeting quality detail |
| Participant quality metrics |
| Overall quality scores |
chat
Command | Description |
| List channels |
| Get channel details |
| Create a channel |
| List messages ( |
| Send a message |
| Update a message |
| Delete a message |
| List channel members |
groups
Command | Description |
| List all groups |
| Get group details |
| Create a group |
| Rename a group |
| Delete a group |
| List members |
| Add members |
Output
JSON on stdout, errors on stderr.
zoom meetings list
zoom meetings list --pretty
zoom users list --fields id,email,first_name --pretty
zoom meetings delete 12345 --quiet
echo $? # 0 = success, 1 = errorArchitecture
Each command is one CommandDefinition — CLI (Commander.js) and MCP share it. Add src/commands/{group}/{subcommand}.ts and register it in src/commands/index.ts.
src/
├── core/
│ ├── client.ts # S2S OAuth, token refresh, retries
│ ├── handler.ts # executeCommand() — path/query/body + UUID encoding
│ └── auth.ts # flag > env > config
├── commands/ # One file per command
└── mcp/server.ts # Registers all CommandDefinitions as MCP toolsContributing
Fork or clone this repo. Node 18+ required.
npm install && npm run typecheck && npm test && npm run buildFollow the
CommandDefinitionpattern. Prefer a custom handler only when the Zoom request is non-standard (the transcript command is the main example).Do not add live Zoom credentials to tests or CI. Mock
ZoomClientandfetch.Open a PR against
main. CI must stay green.
Security
Never commit
ZOOM_ACCOUNT_ID,ZOOM_CLIENT_ID,ZOOM_CLIENT_SECRET,.env, or~/.zoom-agent-cli/config.json.Server-to-Server OAuth is account-wide. Treat those three values like production secrets.
recordings get --include-fields download_access_tokenand VTT download URLs are short-lived credentials — do not paste them into tickets or logs.Report vulnerabilities privately to the maintainer via GitHub security advisories on bcharleson/zoom-agent-cli.
License
MIT — see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Zoom Meetings server for meeting search, recordings, transcripts, summaries, and meeting assets.
Zoom workspace server for meetings, chat, docs, recordings, and AI-generated collaboration content.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that enables users to list, download, search, and manage Zoom meeting transcripts through a structured interface.610MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP (Multi-Agent Conversation Protocol) Server that enables interaction with the Zoom API through natural language commands, auto-generated using AG2's MCP builder.-
- -licenseNot gradedqualityNot gradedmaintenanceAn MCP Server that enables interaction with Zoom's API through the Multi-Agent Conversation Protocol, allowing users to access and control Zoom's functionality via natural language commands.-
- FlicenseNot gradedqualityDmaintenanceAn MCP (Multi-Agent Conversation Protocol) Server that enables interaction with the Zoom API through natural language, auto-generated using AG2's MCP builder.-