zoom transcript mcp

Local 2025-08-31 23:45:48 0

An MCP server that enables users to list, download, search, and manage Zoom meeting transcripts through a structured interface.


An MCP (Model Context Protocol) server for interacting with Zoom Cloud Recording transcripts. This server allows you to list, download, search, and manage your Zoom meeting transcripts through a structured interface.

Zoom Transcript Server MCP server

Features

  • List Meetings: View all available Zoom meetings with recordings
  • Download Transcripts: Download transcripts from specific meetings by ID or UUID
  • Get Recent Transcripts: Automatically download transcripts from recent meetings
  • Search Transcripts: Search across all downloaded transcripts for specific content
  • Organized Storage: Transcripts are stored in a structured file system by month

Prerequisites

  • Node.js (v16 or higher)
  • Zoom Account with Cloud Recording enabled
  • Zoom OAuth App credentials (Account ID, Client ID, Client Secret)

Installation

  1. Clone this repository:

    git clone https://github.com/yourusername/zoom_transcript_mcp.git
    cd zoom_transcript_mcp

  2. Install dependencies:

    npm install

  3. Build the project:

    npm run build

Configuration

Create a .env file in the root directory with the following variables:

ZOOM_ACCOUNT_ID=your_zoom_account_id
ZOOM_CLIENT_ID=your_zoom_client_id
ZOOM_CLIENT_SECRET=your_zoom_client_secret
TRANSCRIPTS_DIR=/path/to/transcripts/directory  # Optional, defaults to ./transcripts

Alternatively, you can configure the server through your MCP settings file:

{
  "mcpServers": {
    "zoom-transcripts": {
      "command": "node",
      "args": ["/path/to/zoom-transcripts-server/build/index.js"],
      "env": {
        "ZOOM_ACCOUNT_ID": "your_zoom_account_id",
        "ZOOM_CLIENT_ID": "your_zoom_client_id",
        "ZOOM_CLIENT_SECRET": "your_zoom_client_secret",
        "TRANSCRIPTS_DIR": "/path/to/transcripts/directory"  // Optional
      }
    }
  }
}

Obtaining Zoom Credentials

  1. Go to the Zoom App Marketplace and sign in
  2. Click "Develop" > "Build App"
  3. Choose "Server-to-Server OAuth" app type
  4. Fill in the required information
  5. Under "Scopes", add the following permissions:
  6. cloud_recording:read:list_account_recordings:admin
  7. cloud_recording:read:recording:admin
  8. cloud_recording:read:list_user_recordings:admin
  9. Save and activate your app
  10. Note your Account ID, Client ID, and Client Secret

Usage

Available Tools

1. list_meetings

Lists available Zoom meetings with recordings.

{
  "dateRange": {
    "from": "2025-01-01",
    "to": "2025-03-31"
  },
  "participant": "John Doe"  // Optional
}

2. download_transcript

Downloads a transcript for a specific meeting.

{
  "meetingId": "123456789"  // Meeting ID or UUID
}

3. get_recent_transcripts

Downloads transcripts from recent meetings.

{
  "count": 5  // Number of recent meetings to fetch (default: 5)
}

4. search_transcripts

Searches across downloaded transcripts for specific content.

{
  "query": "AI discussion",
  "dateRange": {  // Optional
    "from": "2025-01-01",
    "to": "2025-03-31"
  }
}

Example Usage with Claude

<use_mcp_tool>
<server_name>zoom-transcripts</server_name>
<tool_name>search_transcripts</tool_name>
<arguments>
{
  "query": "project timeline"
}
</arguments>
</use_mcp_tool>

Transcript Storage

Transcripts are stored in the following structure:

transcripts/
├── YYYY-MM/
│   ├── YYYY-MM-DD_HH-MM-SS_Meeting-Topic_MeetingID.vtt
│   └── metadata/
│       └── YYYY-MM-DD_HH-MM-SS_Meeting-Topic_MeetingID.json

Each transcript has a corresponding metadata JSON file containing: - Meeting ID and UUID - Topic - Start time and duration - Participants (extracted from the transcript) - File path to the transcript

Development

Project Structure

zoom_transcript_mcp/
├── src/
│   └── index.ts
├── package.json
├── tsconfig.json
├── .gitignore
├── README.md
└── .env.example

Building

npm run build

Running Locally

node build/index.js

License

MIT

[
  {
    "bestPractices": "Ask the user before downloading large amounts of transcripts",
    "description": "Get and download transcripts from recent Zoom meetings. This tool will access the Zoom cloud API to fetch and download recent meeting transcripts.",
    "inputSchema": {
      "properties": {
        "count": {
          "description": "Number of recent meetings to fetch (default: 5)",
          "maximum": 30,
          "minimum": 1,
          "type": "number"
        }
      },
      "type": "object"
    },
    "name": "get_recent_transcripts"
  },
  {
    "bestPractices": "Try searching locally stored transcripts before requesting to download new ones from the cloud",
    "description": "Search across Zoom meeting transcripts for specific content. This tool will search through locally stored transcripts first.",
    "inputSchema": {
      "properties": {
        "dateRange": {
          "properties": {
            "from": {
              "description": "Start date (ISO format)",
              "type": "string"
            },
            "to": {
              "description": "End date (ISO format)",
              "type": "string"
            }
          },
          "type": "object"
        },
        "query": {
          "description": "Search query",
          "type": "string"
        }
      },
      "required": [
        "query"
      ],
      "type": "object"
    },
    "name": "search_transcripts"
  },
  {
    "bestPractices": "Use this tool to find commitments, follow-ups, and tasks that were agreed to during meetings",
    "description": "Identify and extract action items, tasks and commitments from meeting transcripts",
    "inputSchema": {
      "properties": {
        "meetingId": {
          "description": "Meeting ID to extract action items from. Can be either the numeric ID or UUID.",
          "type": "string"
        },
        "participant": {
          "description": "Optional filter to only show action items from or assigned to a specific participant",
          "type": "string"
        }
      },
      "required": [
        "meetingId"
      ],
      "type": "object"
    },
    "name": "extract_action_items"
  },
  {
    "bestPractices": "Use this tool first to see what data is available before searching or downloading",
    "description": "Check what transcripts are already downloaded and available locally",
    "inputSchema": {
      "properties": {
        "dateRange": {
          "properties": {
            "from": {
              "description": "Start date (ISO format)",
              "type": "string"
            },
            "to": {
              "description": "End date (ISO format)",
              "type": "string"
            }
          },
          "type": "object"
        }
      },
      "type": "object"
    },
    "name": "check_local_transcripts"
  },
  {
    "bestPractices": "Ask the user before downloading transcripts unless specifically requested",
    "description": "Download a specific Zoom meeting transcript from the cloud to local storage",
    "inputSchema": {
      "properties": {
        "meetingId": {
          "description": "Zoom meeting ID or UUID",
          "type": "string"
        }
      },
      "required": [
        "meetingId"
      ],
      "type": "object"
    },
    "name": "download_transcript"
  },
  {
    "bestPractices": "Check local transcripts first before querying the cloud API",
    "description": "List available Zoom meetings with recordings that exist in the cloud",
    "inputSchema": {
      "properties": {
        "dateRange": {
          "properties": {
            "from": {
              "description": "Start date (ISO format)",
              "type": "string"
            },
            "to": {
              "description": "End date (ISO format)",
              "type": "string"
            }
          },
          "type": "object"
        },
        "participant": {
          "description": "Filter by participant name",
          "type": "string"
        }
      },
      "type": "object"
    },
    "name": "list_meetings"
  }
]