zoom transcript mcp
An MCP server that enables users to list, download, search, and manage Zoom meeting transcripts through a structured interface.
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.
Clone this repository:
git clone https://github.com/yourusername/zoom_transcript_mcp.git
cd zoom_transcript_mcp
Install dependencies:
npm install
Build the project:
npm run build
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
}
}
}
}
cloud_recording:read:list_account_recordings:admin
cloud_recording:read:recording:admin
cloud_recording:read:list_user_recordings:admin
Lists available Zoom meetings with recordings.
{
"dateRange": {
"from": "2025-01-01",
"to": "2025-03-31"
},
"participant": "John Doe" // Optional
}
Downloads a transcript for a specific meeting.
{
"meetingId": "123456789" // Meeting ID or UUID
}
Downloads transcripts from recent meetings.
{
"count": 5 // Number of recent meetings to fetch (default: 5)
}
Searches across downloaded transcripts for specific content.
{
"query": "AI discussion",
"dateRange": { // Optional
"from": "2025-01-01",
"to": "2025-03-31"
}
}
<use_mcp_tool>
<server_name>zoom-transcripts</server_name>
<tool_name>search_transcripts</tool_name>
<arguments>
{
"query": "project timeline"
}
</arguments>
</use_mcp_tool>
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
zoom_transcript_mcp/
├── src/
│ └── index.ts
├── package.json
├── tsconfig.json
├── .gitignore
├── README.md
└── .env.example
npm run build
node build/index.js
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"
}
]