Skip to main content
Glama
peakmojo

Zoom Recordings No-Auth

by peakmojo

zoom_list_recordings

Retrieve paginated Zoom cloud recordings for a user by specifying start and end dates, page size, and number. Uses an OAuth2 token for secure access to the Zoom account.

Instructions

List Zoom cloud recordings from a user's Zoom account with pagination support

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
from_dateNoStart date for Zoom recording search in 'YYYY-MM-DD' format
page_numberNoPage number of Zoom recordings to return (default: 1)
page_sizeNoNumber of Zoom recordings to return per page (default: 30, max: 300)
to_dateNoEnd date for Zoom recording search in 'YYYY-MM-DD' format
zoom_access_tokenYesZoom OAuth2 access token

Implementation Reference

  • Core handler function in ZoomClient class that fetches and returns list of cloud recordings using Zoom API endpoint /users/me/recordings with support for date filtering and pagination.
    def list_recordings(self, from_date: Optional[str] = None, to_date: Optional[str] = None, 
                        page_size: int = 30, page_number: int = 1) -> str:
        """List cloud recordings from Zoom
        
        Args:
            from_date: Start date for recording search in 'YYYY-MM-DD' format
            to_date: End date for recording search in 'YYYY-MM-DD' format
            page_size: Number of records to return per page (default: 30, max: 300)
            page_number: Page number to return (default: 1)
            
        Returns:
            JSON string with recordings data
        """
        try:
            # Define the operation
            def _operation():
                logger.debug(f"Fetching recordings with page_size={page_size}, page_number={page_number}")
                
                # Prepare query parameters
                params = {
                    "page_size": min(page_size, 300),  # Zoom API limits to 300 max
                    "page_number": page_number
                }
                
                if from_date:
                    params["from"] = from_date
                if to_date:
                    params["to"] = to_date
                
                # Get user's recordings (me = current authenticated user)
                response = requests.get(
                    f"{self.base_url}/users/me/recordings",
                    headers=self._get_headers(),
                    params=params
                )
                
                if response.status_code != 200:
                    return json.dumps({
                        "error": f"Failed to retrieve recordings. Status code: {response.status_code}",
                        "details": response.text,
                        "status": "error"
                    })
                
                recordings_data = response.json()
                
                # Process and return recordings
                return json.dumps(convert_datetime_fields(recordings_data))
            
            # Execute the operation with token refresh handling
            return self._handle_token_refresh(_operation)
                
        except Exception as e:
            logger.error(f"Exception in list_recordings: {str(e)}", exc_info=True)
            return json.dumps({"error": str(e)})
  • Tool registration in MCP server's list_tools method, defining name, description, and input schema for zoom_list_recordings.
    types.Tool(
        name="zoom_list_recordings",
        description="List Zoom cloud recordings from a user's Zoom account with pagination support",
        inputSchema={
            "type": "object",
            "properties": {
                "zoom_access_token": {"type": "string", "description": "Zoom OAuth2 access token"},
                "from_date": {"type": "string", "description": "Start date for Zoom recording search in 'YYYY-MM-DD' format"},
                "to_date": {"type": "string", "description": "End date for Zoom recording search in 'YYYY-MM-DD' format"},
                "page_size": {"type": "integer", "description": "Number of Zoom recordings to return per page (default: 30, max: 300)"},
                "page_number": {"type": "integer", "description": "Page number of Zoom recordings to return (default: 1)"}
            },
            "required": ["zoom_access_token"]
        },
    ),
  • Dispatch handler within the MCP call_tool function that parses arguments, initializes ZoomClient, and calls list_recordings for the zoom_list_recordings tool.
    if name == "zoom_list_recordings":
        # Initialize Zoom client with just access token
        logger.debug(f"Initializing Zoom client for list_recordings with access token: {access_token[:10]}...")
        try:
            zoom = ZoomClient(
                access_token=access_token
            )
            logger.debug("Zoom client initialized successfully")
            
            from_date = arguments.get("from_date")
            to_date = arguments.get("to_date")
            page_size = int(arguments.get("page_size", 30))
            page_number = int(arguments.get("page_number", 1))
            
            logger.debug(f"Calling list_recordings with from_date={from_date}, to_date={to_date}, page_size={page_size}, page_number={page_number}")
            results = zoom.list_recordings(from_date=from_date, to_date=to_date, 
                                           page_size=page_size, page_number=page_number)
            logger.debug(f"list_recordings result (first 200 chars): {results[:200]}...")
            return [types.TextContent(type="text", text=results)]
        except Exception as e:
            logger.error(f"Exception in zoom_list_recordings handler: {str(e)}", exc_info=True)
            return [types.TextContent(type="text", text=f"Error: {str(e)}")]
  • JavaScript implementation of the listRecordings method in ZoomClient class that fetches Zoom cloud recordings using the API.
    async listRecordings({ from_date, to_date, page_size = 30, page_number = 1 } = {}) {
      try {
        const operation = async () => {
          logger.debug(`Fetching recordings with page_size=${page_size}, page_number=${page_number}`);
          
          const params = {
            page_size: Math.min(page_size, 300),
            page_number: page_number
          };
          
          if (from_date) params.from = from_date;
          if (to_date) params.to = to_date;
          
          const response = await axios.get(
            `${this.baseUrl}/users/me/recordings`,
            {
              headers: this._getHeaders(),
              params
            }
          );
          
          if (response.status !== 200) {
            return JSON.stringify({
              error: `Failed to retrieve recordings. Status code: ${response.status}`,
              details: response.data,
              status: "error"
            });
          }
          
          return JSON.stringify(response.data);
        };
        
        return await this._handleTokenRefresh(operation);
      } catch (error) {
        logger.error(`Exception in listRecordings: ${error.message}`);
        return JSON.stringify({ error: error.message });
      }
    }
  • server.js:332-356 (registration)
    JavaScript MCP server.tool registration for zoom_list_recordings, including Zod schema and inline handler function.
    server.tool(
      'zoom_list_recordings',
      'List Zoom cloud recordings from a user\'s Zoom account with pagination support',
      {
        zoom_access_token: z.string().describe('Zoom OAuth2 access token'),
        from_date: z.string().optional().describe('Start date for Zoom recording search in \'YYYY-MM-DD\' format'),
        to_date: z.string().optional().describe('End date for Zoom recording search in \'YYYY-MM-DD\' format'),
        page_size: z.number().optional().describe('Number of Zoom recordings to return per page (default: 30, max: 300)'),
        page_number: z.number().optional().describe('Page number of Zoom recordings to return (default: 1)')
      },
      async ({ zoom_access_token, from_date, to_date, page_size = 30, page_number = 1 }) => {
        try {
          const zoom = new ZoomClient({ accessToken: zoom_access_token });
          logger.error(`listing recordings with from_date=${from_date}, to_date=${to_date}, page_size=${page_size}, page_number=${page_number}`);
          const result = await zoom.listRecordings({ from_date, to_date, page_size, page_number });
          return {
            content: [{ type: 'text', text: result }]
          };
        } catch (error) {
          return {
            content: [{ type: 'text', text: `Error: ${error.message}` }]
          };
        }
      }
    );
Install Server

Other Tools

Related Tools

Latest Blog Posts

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/peakmojo/mcp-server-zoom-noauth'

If you have feedback or need assistance with the MCP directory API, please join our Discord server