Enables intelligent monitoring and management of Zoom rooms, allowing users to query room status, resolve hierarchical locations, and retrieve detailed room configurations across multiple sites.
Click on "Install 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 MCP Serverlist all offline Zoom rooms in the DEN1 building"
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 MCP Server
A FastMCP Model Context Protocol server that provides intelligent monitoring and management of Zoom rooms across multiple sites with smart location resolution.
π Features (New!)
5 Powerful Tools for comprehensive Zoom room management
Smart Location Resolution with fuzzy matching (e.g., "SF1", "DEN1", "Floor 3")
Denver Building Aliases - Special hardcoded mappings for room naming compatibility
Efficient API Usage - Single call for company-wide queries vs. multiple location-specific calls
OAuth 2.0 Authentication with automatic token refresh and file-based caching
Hierarchical Location Discovery - Understands campus β building β floor relationships
User-Friendly Confirmations - Clear messages explaining what was resolved
π οΈ Tools Available
test_zoom_connection
Test Zoom API authentication and connection status.
# Usage: Verify credentials are working
mcp call test_zoom_connection --params '{}' uv run src/server.pyget_zoom_sites
Get all Zoom locations with hierarchy and aliases.
# Usage: Understand available locations and relationships
mcp call get_zoom_sites --params '{}' uv run src/server.pyget_zoom_rooms
Get Zoom rooms with optional smart location filtering.
β‘ IMPORTANT: For maximum efficiency with company-wide queries (e.g., "find offline rooms anywhere"), omit location_query to make a single API call.
# Company-wide (EFFICIENT - single API call)
mcp call get_zoom_rooms --params '{}' uv run src/server.py
# Location-specific (multiple API calls)
mcp call get_zoom_rooms --params '{"location_query":"SF1"}' uv run src/server.py
mcp call get_zoom_rooms --params '{"location_query":"DEN1"}' uv run src/server.py
mcp call get_zoom_rooms --params '{"location_query":"Floor 3"}' uv run src/server.pyget_room_details
Get detailed information about a specific room.
# Usage: Deep dive into specific room configuration
mcp call get_room_details --params '{"room_id":"ROOM_ID_HERE"}' uv run src/server.pyresolve_location
Debug tool to test location resolution without fetching rooms.
# Usage: Debug how location queries get resolved
mcp call resolve_location --params '{"location_query":"DEN2"}' uv run src/server.pyπ Smart Location Resolution
The server understands various location query patterns:
Query Pattern | Example | What It Resolves |
Campus codes |
| Entire campus with all buildings/floors |
Building numbers |
| Specific building or hardcoded alias |
Floor numbers |
| All floors with that number across sites |
Partial names |
| Best fuzzy match |
Special Denver Building Aliases
Due to Zoom's location hierarchy vs. room naming patterns, Denver has special hardcoded mappings:
DEN1β Denver Building 1 (Floor 3) β Rooms:DEN-1-101,DEN-1-102, etc.DEN2β Denver Building 2 (T3F3, T3F5, T3F6) β Rooms:DEN-2-201,DEN-2-202, etc.
π§ Installation & Setup
Prerequisites
Python 3.10+
UV package manager
Zoom Pro/Business account with API access
1. Clone Repository
git clone https://github.com/chadkunsman/zoom-mcp.git
cd zoom-mcp2. Install Dependencies
uv pip install -e .3. Zoom API Configuration
Create a Server-to-Server OAuth app in Zoom Marketplace
Add required scope:
room:read:adminGet your credentials: Account ID, Client ID, Client Secret
4. Configure Credentials
Create .env file:
ZOOM_ACCOUNT_ID=your_account_id_here
ZOOM_CLIENT_ID=your_client_id_here
ZOOM_CLIENT_SECRET=your_client_secret_here5. Test Installation
# Install MCPTools for testing
brew tap f/mcptools && brew install mcp
# Test the server
mcp tools uv run src/server.py
mcp call test_zoom_connection --params '{}' uv run src/server.pyπ MCP Client Configuration
For Claude Desktop and Similar MCP Clients
Add to your MCP client configuration:
Using Environment Variables (Recommended)
{
"mcpServers": {
"zoom-mcp": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/zoom-mcp",
"src/server.py"
],
"env": {
"ZOOM_ACCOUNT_ID": "your_account_id_here",
"ZOOM_CLIENT_ID": "your_client_id_here",
"ZOOM_CLIENT_SECRET": "your_client_secret_here"
}
}
}
}Using Command-Line Arguments
{
"mcpServers": {
"zoom-mcp": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/zoom-mcp",
"src/server.py",
"--zoom-account-id",
"your_account_id_here",
"--zoom-client-id",
"your_client_id_here",
"--zoom-client-secret",
"your_client_secret_here"
]
}
}
}π‘ Usage Examples
Find All Offline Rooms (Efficient)
"Are any Zoom rooms offline anywhere in the company?"
β Uses get_zoom_rooms without location_query (single API call)
Check Specific Location
"Show me all rooms in San Francisco"
β Uses get_zoom_rooms with location_query: "SF1"
Debug Location Resolution
"How would 'DEN2' be resolved?"
β Uses resolve_location to see what locations match
Room Status by Building
"What's the status of Denver Building 1 rooms?"
β Uses get_zoom_rooms with location_query: "DEN1"
ποΈ Architecture
zoom-mcp/
βββ src/
β βββ server.py # Main MCP server with 5 tools
β βββ config/ # Configuration modules
β βββ settings.py # Environment & auth configuration
β βββ zoom_auth.py # OAuth token management
β βββ zoom_hierarchy.py # Location discovery & relationships
β βββ zoom_fuzzy.py # Smart location resolution
βββ docs/ # Comprehensive documentation
βββ test_server.py # Direct testing scriptKey Design Patterns
Import Inside Functions: Configuration modules imported inside tool functions to avoid timing issues
Multi-Level Token Caching: Memory cache + file persistence with 1-hour expiration and 5-minute buffer
Hierarchical Discovery: Automatic campus β building β floor relationship building
Hybrid Resolution: Hardcoded Denver aliases + dynamic fuzzy matching for other sites
π§ͺ Testing
MCPTools Testing
# List all tools
mcp tools uv run src/server.py
# Test authentication
mcp call test_zoom_connection --params '{}' uv run src/server.py
# Interactive testing
mcp shell uv run src/server.pyDirect Script Testing
python test_server.pyπ Documentation
Comprehensive documentation available in docs/:
Quick Start Guide - Setup and basic usage
Authentication Guide - OAuth implementation details
Testing Guide - MCPTools usage and examples
Best Practices - Zoom-specific patterns
Advanced Features - Deep dive into capabilities
π Security
Credentials stored in
.envfiles (not committed to git)Token caching with secure file permissions
Bearer token automatic refresh
Error messages don't expose sensitive information
π€ Contributing
Fork the repository
Create a feature branch
Make your changes
Test with MCPTools
Submit a pull request
π License
This project is licensed under the MIT License.
π Troubleshooting
Common Issues
"Zoom credentials not configured"
Verify
.envfile exists with correct variablesCheck environment variable names match exactly
"Token request failed: 401"
Verify Zoom app credentials are correct
Ensure app has
room:read:adminscopeConfirm app is Server-to-Server OAuth type
"No location matches found"
Check spelling of location query
Use
get_zoom_sitesto see available locationsTest with
resolve_locationto debug fuzzy matching
Import timing issues
Configuration modules imported inside tool functions
Never import config at module level before
initialize_config()
Debug Commands
# Test connection
mcp call test_zoom_connection --params '{}' uv run src/server.py
# List all sites
mcp call get_zoom_sites --params '{}' uv run src/server.py
# Debug location resolution
mcp call resolve_location --params '{"location_query":"your_query"}' uv run src/server.pyBuilt with FastMCP and the Model Context Protocol.