zoom-mcp
zoom-mcp
Zoom MCP server built from the skeleton pattern with:
Multi-user token management.
Vault as the persistent secret store.
Postgres as the persistent configuration store.
Admin-gated mutation tools through
MCP_ADMIN_AUTH_KEY.Dedicated Zoom tools plus generic full-coverage API execution.
Query suggestion and schema discovery tooling for LLM workflows.
Architecture
Runtime components:
src/index.js: Starts stdio MCP transport.src/http/index.js: Starts HTTP MCP transport with auth/rate controls.src/bootstrap/runtime.js: Creates shared runtime dependencies.src/services/vault.js: Persistent secret access in Vault.src/services/configStore.js: Persistent config access in Postgres.src/services/zoomTokenStore.js: User token + OAuth client persistence.src/services/targetService.js: Zoom API and OAuth token refresh client.src/mcp/server.js: MCP tool registration and auth gate enforcement.src/config/zoomApiCatalog.js: Endpoint catalog for discovery/suggestions.
Core Guarantees
Secrets are persisted in Vault, including user access/refresh tokens and OAuth client credentials.
Configuration is persisted in Postgres, including non-secret token metadata and arbitrary user-scoped config keys.
All user token operations are multi-user and scoped by
userId.Mutating tools require
authorizationKeywhenMCP_ADMIN_AUTH_KEYis configured.Full Zoom API coverage is available through
zoom_api_request.
Tool Catalog
All tools return MCP text content with JSON:
{
"ok": true,
"status": 200,
"data": {}
}Error shape (isError=true):
{
"ok": false,
"status": 401,
"error": "Unauthorized: invalid authorizationKey for mutating operation"
}Read-only tools
zoom_connection_infozoom_scope_infozoom_schema_discoveryzoom_query_suggestionzoom_token_get_metadatazoom_oauth_client_get_metadatazoom_production_auth_env_readinesszoom_config_getzoom_config_listzoom_users_listzoom_user_getzoom_meetings_listzoom_meeting_getzoom_meeting_notes_getzoom_webinars_listzoom_recordings_listzoom_report_user_meetingszoom_phone_users_listzoom_phone_call_logs_listzoom_chat_channels_listzoom_chat_messages_listzoom_rooms_listzoom_room_get
Mutating tools (admin-gated when MCP_ADMIN_AUTH_KEY is set)
zoom_token_upsertzoom_token_deletezoom_oauth_client_upsertzoom_seed_initial_oauth_vault_statezoom_production_auth_env_upsertzoom_bootstrap_production_authzoom_token_refreshzoom_config_setzoom_config_deletezoom_meeting_createzoom_meeting_updatezoom_meeting_deletezoom_webinar_createzoom_webinar_deletezoom_chat_channel_createzoom_api_requestforPOST|PUT|PATCH|DELETE
Tool Definition Quality Fields
zoom_query_suggestion returns toolSchemas with enriched metadata for each tool including:
When the tool should and should not be used.
Read-only, mutating, or high-risk classification.
Required permissions and prerequisites.
Environment-selection behavior.
Parameter formats and constraints.
Expected response shape.
Common failure conditions.
Recommended prerequisite and follow-up tools.
Safety warnings for destructive operations.
Short valid invocation examples.
Query Suggestion and Schema Discovery
Use these first in LLM workflows:
zoom_query_suggestion: recommends tool execution order and safety checks.zoom_schema_discovery: searches endpoint catalog by category/method/path/text.
The catalog is broad and the fallback zoom_api_request tool provides full endpoint surface execution against Zoom REST APIs.
Multi-user Token Model
Vault secret path for user tokens:
${APP_NAME}/users/${normalizedUserId}/zoom/oauth/tokens
Stored fields:
accessTokenrefreshTokentokenTypescopeexpiresAtaccountId
Postgres metadata key:
zoom.oauth.token.meta
OAuth client secret path:
${APP_NAME}/zoom/oauth/client
Postgres metadata key:
zoom.oauth.client.meta
Deployment Auth Setup With MCP Tools
These tools are designed for LLM-driven deployment preparation workflows:
Bootstrap all deployment auth setup in one call:
zoom_bootstrap_production_auth
Seed initial OAuth client secret and per-user tokens in Vault:
zoom_seed_initial_oauth_vault_state
Persist production
MCP_ADMIN_AUTH_KEYand HTTP auth vars before deployment:
zoom_production_auth_env_upsert
Validate readiness before rollout:
zoom_production_auth_env_readiness
Recommended order for a new production environment:
Run
zoom_bootstrap_production_authfor one-shot setup.Run
zoom_production_auth_env_readinessand confirmready=true.
zoom_production_auth_env_upsert persists:
Secrets in Vault path
${APP_NAME}/deployment/production/http-auth-secrets.Non-secret HTTP auth config in Postgres key
deployment.production.http.auth(default user scope).
Environment Variables
Use .env.example as source of truth. Key groups:
App and admin auth:
APP_NAME,MCP_SERVER_NAME,MCP_ADMIN_AUTH_KEYUser scope defaults:
MCP_CONFIG_DEFAULT_USER_IDPostgres persistence:
POSTGRES_*Vault persistence:
VAULT_*Zoom API:
ZOOM_API_BASE_URL,ZOOM_OAUTH_TOKEN_URL,ZOOM_API_TIMEOUT_MSHTTP transport and auth:
MCP_HTTP_*
Local Development
Install dependencies:
npm ciStart infrastructure and HTTP MCP:
docker compose up -dStart stdio MCP mode:
npm run start:stdioRun tests:
npm testExternal Services Mode
Use docker-compose.external.yml for environments where Vault and Postgres are already provided.
This is an app-only compose path.
Requires external
POSTGRES_*andVAULT_*values.Minimum required examples:
POSTGRES_HOST,POSTGRES_PORT,POSTGRES_DB,POSTGRES_USER,POSTGRES_PASSWORD,VAULT_ADDR, andVAULT_TOKEN.
Security Notes
Never place OAuth access/refresh tokens in Postgres.
Keep
MCP_ADMIN_AUTH_KEYenabled in non-local environments.Use least-privilege Zoom OAuth scopes per workload.
For destructive endpoints, prefer dedicated tools and validate ids before execution.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/LesterAJohn/zoom-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server