MCP server for managing Zoom webinars with modular HTTP method architecture. Provides tools for creating, updating, retrieving, and deleting webinars, managing registrants, panelists, and webinar settings.
Server has significant definition quality issues. Of 31 tools, most lack proper parameter descriptions and several are missing schema details. Tool names follow verb_noun convention (good), but descriptions are inconsistent in quality, some are minimal (10-15 chars) and fail the critical 10-1024 char baseline. Input schemas are present for visible tools but parameter-level descriptions are sparse or missing entirely. No structured output schema documentation visible. Error handling is present but generic, no recovery guidance or actionable error messages. The server appears to expose credentials as parameters (configure_zoom tool accepts client_secret), violating the secret-injection pattern. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite marking tools with Risk levels.
Tools (31)
add_panelistswriteauthsource verified78/100
Add panelists to a webinar
add_webinar_registrantswriteauth50/100
Add webinar registrants
auto_configure_zoomwritesource verified72/100
Auto-configure Zoom API from environment variables (.env file)
Credentials exposed as tool parameters: configure_zoom accepts client_secret, client_id as parameters. These must never be in tool params, they should use server-side secret injection via environment variables. Agent execution logs will expose these credentials.
No tool annotations (toolAnnotations=false). Tools marked with Risk levels (WRITE, READ_ONLY, DESTRUCTIVE) should declare readOnlyHint, destructiveHint, idempotentHint in their schema. This metadata is essential for agents to understand side effects and plan safely.
Output schemas not documented in source code. No visible description of what create_webinar, list_webinars, get_webinar_registrants, etc. return. LLMs cannot plan downstream tool chaining without knowing response structure.
Recommendations
CRITICAL: Move client_secret and client_id from configure_zoom parameters to environment variable injection (ZOOM_CLIENT_SECRET, ZOOM_CLIENT_ID). Use auto_configure_zoom for env loading only. Never expose secrets in tool parameters.
Add tool annotations to schema. Include 'readOnlyHint': true for READ_ONLY tools, 'destructiveHint': true for DESTRUCTIVE tools, and 'idempotentHint': true where applicable. This enables safer agent planning.
Document ALL output schemas in code or README. For each tool, include the expected response structure (field names, types, presence of IDs needed for chaining). Example: 'create_webinar returns {webinar_id, topic, start_time, join_url, ...}'
Add recovery guidance to error messages. Instead of 'Webinar not found', return 'Webinar ABC not found. Available webinars: [list]. Call list_webinars(user_id) to see all.'
Implement a confirmation pattern for destructive operations. Add optional 'confirm=true' parameter or a separate 'confirm_delete_webinar(webinar_id)' tool. Require explicit confirmation before delete/remove operations.
Convert open string parameters to enums. For action, status, recurrence_type, use JSON Schema enum: {'type': 'string', 'enum': ['approve', 'cancel', 'deny']}. This prevents hallucinated values.
Add per-item success/failure for batch operations (delete_batch_registrants, add_webinar_registrants). Return {successful: [...], failed: [...]} so agents can retry only failed items.
Document pagination response structure. Include total_count or has_more flag so agents know when to stop fetching pages.
Spec posture evidence
Inferred effective spec: <=2025-11-25.
Relies on Logging (deprecated) - log to stderr or use OpenTelemetry
Parameter descriptions missing or minimal for several tools. Example: get_token_status has no parameters documented, refresh_token has none, remove_all_panelists lacks detail.
No error recovery guidance in error responses. When an operation fails (e.g., webinar not found, registrant invalid), responses should suggest next steps: 'Webinar not found. Try list_webinars() to find valid IDs.' Current error handling is generic and leaves agents dead-ended.
No dry-run or confirmation pattern for destructive operations. delete_webinar, delete_registrant, delete_batch_registrants, and similar irreversible operations should support a confirmation step or dry-run to prevent accidental data loss.
Inferred tool definitions: Multiple tools defined across files (delete_methods.py, get_methods.py, patch_methods.py) but tool registration and full schema details not visible in source.
Enum constraints missing. Parameters like 'action' in update_registrant_status (approve, cancel, deny), 'status' in list_webinar_registrants (approved, pending, denied), and 'recurrence_type' lack enum declarations. Should use JSON Schema enum arrays to make valid options machine-readable.
Pagination not fully documented. list_webinars, list_webinar_registrants, list_webinar_participants, list_webinar_qa support page_size and page_number but no documentation of total count or next_cursor in response. Agents need to know when to stop paginating.
Add input validation with actionable error messages. Example: 'Invalid status ABC. Must be one of: approved, pending, denied. Call list_webinar_registrants() to see current statuses.'
Add parameter constraints for numeric fields. Example: page_size should have minimum: 1, maximum: 100. duration should be 1-240 (minutes).
Reduce required parameters by providing sensible defaults. start_time could default to now, duration to 60, timezone to user's configured timezone.
Enrich get_webinar response with user_id and all IDs needed for follow-up operations (create registrant, add panelist, etc.).
Add explicit permission/scope declarations to tools. Each tool should state what permission is required (read:webinar, write:webinar, delete:webinar, read:user).
Ensure consistency across similar tools. Verify that user_id, webinar_id, registrant_id field names match across all tools so LLMs can chain without ambiguity.