MCP App Store

Overview

Zoom connects Codex to Zoom meeting context through the Zoom app connector and provides developer workflows for planning, building, debugging, and reviewing Zoom integrations across APIs, SDKs, webhooks, WebSockets, bots, and automation use cases.

Tools

create_new_file_with_markdown

ChatGPT
Creates a new Zoom Docs document from Markdown content. Use this tool whenever the user asks to save or create content in Zoom Docs. Pass the user's content as a single Markdown string. After invoking this tool, you must: 1. Tell the user the name of the newly created document. 2. Provide the file_link to the user.

get_meeting_assets

ChatGPT
Search Meetings Tool V3.1 [READ-ONLY] Advanced search functionality for user meetings. AI analyzes user input to identify keywords (q) and time ranges (from, to), then uses these extracted parameters to query the user's meeting list, sorting results by relevance. Core Functionality Unlike the standard list tool, this tool uses a search engine to find meetings matching specific topics, attendees, or contexts. Usage Guideline (MANDATORY) ALWAYS use this Search Tool when: User asks for meeting information but does NOT provide a specific Meeting ID (e.g., "Show my meetings", "Find the budget review", "What meetings did I have last week?"). This tool is the primary entry point for all vague or natural language meeting queries. DO NOT ask the user for an ID first; attempt to find the meeting using this tool based on their description. Input Processing & Parameter Extraction (MANDATORY) Before calling this tool, the AI MUST perform the following analysis on the user's prompt: 1. Extract Keywords (`q`): Analyze the user's intent to find specific words (e.g., "project alpha", "sync with bob", "budget review"). CRITICAL - ENTITY EXTRACTION: Extract ANY specific noun, name, or title found in the object position of the query. Example: "Search for meeting Assistant" -> `q="Assistant"` (Do NOT ignore "Assistant" thinking it refers to you/AI). Example: "Find Weekly Sync" -> q="Weekly Sync". Action: Extract these keywords and put them into the `q` parameter. If multiple keywords are present, combine them appropriately. 2. Calculate Time Range (`from`, `to`): CRITICAL - TIMEZONE CONVERSION (MANDATORY): STEP 1: Identify User Timezone. Check the current user context/environment. If user is in China/Asia/Shanghai, offset is -8 hours (UTC+8). STEP 2: Perform Calculation. `API_UTC_Time = User_Local_Time - User_Timezone_Offset`. Example (UTC+8 User): User says "10am" (10:00). Calculation: 10:00 - 8 hours = 02:00. Correct Result: `...T02:00:00Z`. WRONG Result: ...T08:00:00Z (This is a common error where no subtraction happens). Do NOT treat user input numbers directly as UTC (unless they explicitly say "UTC"). Precision Requirement: Match the user's provided time as precisely as possible, down to the hour. Specific Logic for "Just Finished" / "Recent": If user says "just finished", "latest", "recent", or "today": Set `from` to Start of Today (00:00 local converted to UTC) or Current Time - 24 hours. Do NOT use the 1-week default for these specific phrases. DEFAULT BEHAVIOR (IMPORTANT): For General/History Search: If no time specified AND no "recent/latest" keywords, default to last 1 week. (from = now - 7 days). For Upcoming/Future Search: If user intent is clearly future (e.g., "upcoming meetings"), default `from` to current time. from: Start of the range (UTC). `to`: End of the range (UTC). Default Parameters - `page_size`: Default `50` (Max 50). --- Output & Response Presentation Rules CRITICAL - ABSOLUTELY FORBIDDEN YOU ARE STRICTLY PROHIBITED FROM OUTPUTTING THE MEETING LIST TEXT. FORBIDDEN OUTPUT EXAMPLES: - ❌ "Here are the meetings matching 'project':" - ❌ "1. Project Sync — Nov 27, 2025..." - ❌ "I found the following meetings..." - ❌ ANY numbered list of meetings - ❌ ANY meeting titles, dates, or times - ❌ ANY description of meeting topics - ❌ ANY summary, analysis, or interpretation of meeting content - ❌ ANY additional commentary beyond the EXACT mandatory output format specified below REASON: The meeting search results are ALREADY VISIBLE IN THE UI. Your output must only guide the user's next action. CRITICAL - NO SUMMARIZATION OR ANALYSIS (MANDATORY): - DO NOT summarize meeting topics, attendees, or any meeting details - DO NOT provide analysis or interpretation of the search results - DO NOT add explanatory text beyond the exact format specified in each scenario - DO NOT describe what meetings were found beyond the count - STRICTLY FOLLOW the exact output format specified below - output ONLY what is explicitly required, nothing more --- Workflow: Handling Search Results CRITICAL RULE - NO SUMMARIZATION: YOU MUST NOT summarize, analyze, or describe meeting content in your response. Output ONLY the exact format specified for each scenario below. Any additional commentary, summary, or analysis is STRICTLY PROHIBITED. MANDATORY OUTPUT Generation: First, check if you used `from` and `to` parameters: IF (and ONLY IF) `from`/`to` were used: Display the search range (Bold the times and timezone): "Searching meetings from [Local_From_Time] to [Local_To_Time] ([User_Timezone])..." (If the timezone is incorrect, please tell me your correct timezone) IF NO time parameters were used: DO NOT display the "Searching meetings from..." line. DO NOT invent a time range. Then, choose the matching scenario based on whether the results contain historical (recordable) meetings: Scenario A: Results contain ANY Past Meetings If the results include meetings that have already happened (which might have assets), you MUST offer the asset options. MANDATORY OUTPUT: Summary Line: "I found [Total] meeting(s) matching '[q]'." (If q is empty, omit "matching..."). Action Prompt: `` What would you like to do with the past meeting(s)? 1. Recap meeting – Includes AI summary, docs, recording, and whiteboards 2. View recording – Shows full recording details Please pick 1 or 2, and tell me which meeting you mean. ` **ABSOLUTE PROHIBITIONS:** - ❌ **DO NOT** add meeting lists or details. Scenario B: Results contain ONLY Upcoming Meetings If the search results contain ONLY upcoming meetings (no historical assets): **MANDATORY OUTPUT (EXACT FORMAT - NO DEVIATIONS):** * **Summary Line:** *"I found [Total] meeting(s) matching '**[q]**'."* (If q is empty, omit "matching..."). * **Conclusion:** *"You can view them in the list above."* **ABSOLUTE PROHIBITIONS:** * ❌ **DO NOT** offer Recap/Recording options (assets don't exist). * ❌ **DO NOT** list the meetings details. * ❌ **DO NOT** summarize meeting topics, titles, or content. * ❌ **DO NOT** describe what meetings were found. * ❌ **DO NOT** add any analysis, interpretation, or commentary. * ❌ **DO NOT** provide additional context or explanations. * ❌ **DO NOT** mention meeting times, dates, or attendees. * ❌ **STRICTLY FORBIDDEN:** Any text beyond the two exact lines specified above. **CRITICAL:** Output ONLY the two lines specified above. Any additional text, summary, or description is PROHIBITED. Scenario C: No Results (Total = 0) **MANDATORY OUTPUT:** * **If q is NOT empty:** *"No meetings found matching '**[q]**' within that time range. Please try a different keyword or provide the specific Meeting Number/ID directly."* * **If q IS empty:** *"No meetings found within that time range. Please try a different keyword or provide the specific Meeting Number/ID directly."* --- User Selection Handling When the user selects a meeting from the search results (e.g., "recap the first one"): 1. **Identify the Target:** * Locate the corresponding meeting object in the meetings array from the search response. 2. **Extract Identifiers:** * **meeting_uuid**: The unique string ID (PRIMARY identifier). * **meeting_number**: The numeric ID (Fallback identifier). 3. **Double-Encode UUID (CRITICAL & MANDATORY):** * Before calling ANY downstream tool (Assets or Recording), you **MUST** check the UUID. * **Rule:** If meeting_uuid starts with / or contains //: * Apply **Double URL Encoding**. * % becomes %25, / becomes %2F. * *Example:* /Qk7s... -> %252FQk7s... (Encoded once to %2F, then % to %25). * **Reason:** Fails to do this will cause API 404/400 errors due to path parsing issues. 4. **Call Next Tool:** * **Recap:** Call get_meeting_assets using the **Double-Encoded** meeting_uuid (or meeting_number if UUID is missing). * **Recording:** Call get_recording_resource using the **Double-Encoded** meeting_uuid (or meeting_number if UUID is missing). **CRITICAL - ID Usage:** - **ALWAYS PREFER UUID** (meeting_uuid) when calling downstream tools. - Only use numeric ID (meeting_number`) if the UUID is null or empty. - This ensures we target the exact meeting instance found in the search results. --- Rate Limit - Label: MEDIUM

get_recording_resource

ChatGPT
Description: PRIORITY TRIGGER CONDITIONS - Use THIS Tool When User Mentions Recording: HIGH PRIORITY - Always use THIS tool when user explicitly mentions: - "recording" + any action (play, watch, view, listen, open, start, etc.) - "play recording" | "play the recording" - "watch the recording" | "view the recording" | "listen to the recording" - "open the recording" | "start the recording" | "launch the recording" - "jump to recording" | "go to recording" | "navigate to recording" - "recording content" | "recording details" | "recording transcript" - "what's in the recording" | "recording summary" | "recording analysis" MEDIUM PRIORITY - Use THIS tool when context suggests recording focus: - User asks about specific content AND mentions time/timeline (e.g., "What did they say at 5 minutes?") - User wants to search/find specific topics within content (implies transcript search) - User asks about speakers, dialogue, or conversation details - User mentions playback, timestamps, or navigation within content LOW PRIORITY - Use ASSETS tool first, then THIS tool if needed: - General meeting information requests without "recording" keyword - "Show me my meetings" / "What meetings do I have?" - Basic meeting metadata (duration, participants, date) without content focus --- CRITICAL: When to Use This Tool vs. Assets Tool Use THIS RECORDING tool when: - User explicitly mentions "recording" in their request - User wants detailed recording content: transcript text, per-topic summaries, next steps - User needs to search within a recording (e.g., "What did they say about X?") - User wants to jump to a specific part of a recording (requires transcript + playback URL) - User needs granular timeline data (who said what and when) - User wants to play/watch/view/listen to a recording Use the ASSETS tool when: - User wants meeting-level information (meeting summary, recordings list, whiteboards, docs) - User asks for "meeting assets", "meeting recordings", "meeting summary" without mentioning "recording" specifically - User wants to know what recordings exist for a meeting - User needs basic recording metadata (duration, file size, download links) ENHANCED DECISION RULE: 1. FIRST CHECK: Does the user's request contain the word "recording" or recording-related actions? - YES → Use THIS tool immediately - NO → Continue to step 2 2. SECOND CHECK: Is the user asking about specific content, transcript, or playback? - YES → Use THIS tool - NO → Use ASSETS tool 3. FALLBACK: If unclear, and user mentions "meeting" without "recording" → Use ASSETS tool first Examples of Enhanced Triggering: ALWAYS use THIS tool for: - "Play the recording" - "I want to watch the recording" - "Show me the recording content" - "What's in this recording?" - "Open the recording file" - "Start the recording" - "Jump to 5 minutes in the recording" - "Find where they talked about pricing in the recording" Use ASSETS tool first for: - "Show me my meetings" - "What meetings do I have today?" - "Meeting summary" (without "recording") - "My recent meetings" Context-dependent (analyze user intent): - "What did we discuss?" → If no recording context, use ASSETS; if recording context exists, use THIS tool - "Show me the summary" → If user was previously discussing recordings, use THIS tool; otherwise use ASSETS --- Use this tool whenever you need detailed content or granular metadata for a specific recording: - transcript text (to answer questions, find topics, or locate time ranges), - summaries (overall or per-topic), - next steps / action items, - or playable URLs (for jumping to a specific point in the recording). This tool can return: - transcript segments, - summary segments, - next-step segments, - playback URLs, - and utility information derived from these (e.g., recording duration). If the user's request is unclear OR you are not sure which resource type is needed, omit the "types" parameter so that ALL available resources are fetched. You can then decide which parts to use to answer the user. Parameters: - types (string, optional): A comma-separated list of resource types to retrieve. Valid values (case-insensitive, no spaces needed): • "transcript" → transcript segments for the recording • "summary" → summary segments for the recording • "nextStep" → next-step segments for the recording • "playUrl" → playback URL segments for the recording Behavior rules for "types": - If omitted or an empty string, the tool MUST fetch ALL available resource types. - If some values are invalid, ignore the invalid ones and still fetch the valid types. - If the user is asking about the content or meaning of the recording (e.g., "What did they say about X?", "Find the part where they discussed Y"), you SHOULD include "transcript" in types. - If the user wants to jump to or play a specific part of the recording (e.g., "Take me to the part where they talk about pricing"), you SHOULD include both "transcript" and "playUrl" in types. - raw_passcode (string, optional): The plaintext passcode for playing the recording. Up to 10 characters, containing lowercase letters, digits, special characters (e.g., !, @, #), or sometimes all digits. (e.g., passcode directly copied from a Zoom shared link). - encode_passcode (string, optional): The encrypted passcode used for playing the recording. It is an encoded string typically appended to the recording’s share link as the pwd parameter. (e.g., the pwd=xxx value from a Zoom shared link). - clip_num (integer, optional): The index (1-based or as defined by the implementation) of the recording clip to retrieve, for recordings that contain multiple clips. If the requested clip number exceeds the available clip count, the tool should return null. - play_time (integer, optional): The user's desired playback starting time in SECONDS relative to the selected clip. For example: - play_time = 0 → start from the beginning of the clip - play_time = 20 → start 20 seconds into the clip When the user asks to "jump to", "play from", or "go to the part where...", you can: 1) Use the returned transcripts to find the relevant segment and its timestamp, then 2) Call or interpret play URLs with an appropriate play_time value. Behavior: - ENHANCED PREREQUISITE CHECK: - If user mentions "recording" or recording-related actions → Use THIS tool immediately - If user asks about content analysis, transcript, or playback → Use THIS tool - If user asks general meeting questions without "recording" context → Use ASSETS tool first - The tool returns ONLY the resource types requested via "types". - If "types" is empty or omitted, the tool returns ALL available resource types. - If a particular resource type does not exist, its field MUST be omitted from the response. - Recording duration can be computed using: duration = recording_end - recording_start - Returned transcript data can (and should) be used by the model to: - answer content questions, - search for specific topics or phrases, - determine appropriate time ranges for playback. - Returned play URLs can be used by the client or the model to initiate playback from a desired start time. - If the user's question is ambiguous or mixed (e.g., might need both content and playback), you SHOULD omit "types" so that all resources are retrieved. - IMPORTANT: This tool has PRIORITY when "recording" is explicitly mentioned. For general meeting/recording discovery without "recording" keyword, use the ASSETS tool first. Return Structure (JSON): { "transcripts": [ { "timeline": [ { "text": "string", "ts": "HH:mm:ss.SSS", // start time relative to recording start "end_ts": "HH:mm:ss.SSS", // end time relative to recording start "display_name":"string", // the person speaking in this sentence may be empty; if empty, it means they are not a Zoom user. } ], "recording_id": "string", "meeting_id": "string", "recording_start": "timestamp (string)", "recording_end": "timestamp (string)" } ], "summaries": [ { "recordingStartTime": number, "recording_start": "timestamp (string)", "total_items": number, "overall_summary": "string | null", "items": [ { "label": "string", "summary": "string" } ] } ], "next_steps": [ { "recordingStartTime": number, "recording_start": "timestamp (string)", "total_items": number, "items": [ { "text": "string" } ] } ], "play_urls": [ { "recording_start": "timestamp (string)", "urls": [ "string" ], "play_time": number } ] } Notes: - Include each top-level field (transcripts, summaries, next_steps, play_urls) ONLY if corresponding data exists. - If no resource exists for a requested type, omit that field entirely. Enhanced Tool Selection Examples: CORRECT - Use THIS tool immediately: - "Play the recording" → THIS tool (explicit recording mention) - "I want to watch the recording" → THIS tool (explicit recording mention) - "What's in this recording?" → THIS tool (explicit recording mention) - "Open the recording" → THIS tool (explicit recording mention) - "Find the part where they discussed pricing in the recording" → THIS tool (explicit recording mention) WRONG - Should use THIS tool, not ASSETS: - User: "Play the recording" → Calling ASSETS tool - User: "Show me the recording content" → Calling ASSETS tool CORRECT - Use ASSETS tool first: - "What meetings do I have?" → ASSETS tool (no recording mention) - "Show me my meeting summary" → ASSETS tool (meeting-level, no recording mention) - "My recent meetings" → ASSETS tool (no recording mention) Context-dependent examples: - "What did we discuss about the budget?" → If user was previously talking about recordings, use THIS tool; otherwise use ASSETS - "Show me the summary" → If recording context exists, use THIS tool; otherwise use ASSETS Rule of thumb: - Recording keyword present → THIS tool has PRIORITY - Recording actions (play, watch, view, listen, open) → THIS tool has PRIORITY - Content analysis without recording context → Consider both tools based on specificity - General meeting discovery → ASSETS tool first

recordings_list

ChatGPT
List all recordings Lists all cloud recordings for a user. For user-level apps, pass the `me` value instead of the userId parameter. To access a user's passcode protected cloud recording, send the user's OAuth access token as a bearer token in the authorization header. Example: curl -H "Authorization: Bearer <ACCESS_TOKEN>" https://{{base-domain}}/rec/archive/download/xyz This can list the current person's records, only displaying the corresponding record information.

search_meetings

ChatGPT
Search Meetings Tool V2.7 [READ-ONLY] Advanced search functionality for user meetings. AI analyzes user input to identify keywords (q) and time ranges (from, to), then uses these extracted parameters to query the user's meeting list, sorting results by relevance. Core Functionality Unlike the standard list tool, this tool uses a search engine to find meetings matching specific topics, attendees, or contexts. Usage Guideline (MANDATORY) ALWAYS use this Search Tool when: User asks for meeting information but does NOT provide a specific Meeting ID (e.g., "Show my meetings", "Find the budget review", "What meetings did I have last week?"). This tool is the primary entry point for all vague or natural language meeting queries. DO NOT ask the user for an ID first; attempt to find the meeting using this tool based on their description. Input Processing & Parameter Extraction (MANDATORY) Before calling this tool, the AI MUST perform the following analysis on the user's prompt: 1. Extract Keywords (`q`): Analyze the user's intent to find specific words (e.g., "project alpha", "sync with bob", "budget review"). CRITICAL - ENTITY EXTRACTION: Extract ANY specific noun, name, or title found in the object position of the query. Example: "Search for meeting Assistant" -> `q="Assistant"` (Do NOT ignore "Assistant" thinking it refers to you/AI). Example: "Find Weekly Sync" -> q="Weekly Sync". Action: Extract these keywords and put them into the `q` parameter. If multiple keywords are present, combine them appropriately. 2. Calculate Time Range (`from`, `to`): CRITICAL - TIMEZONE CONVERSION (MANDATORY): STEP 1: Identify User Timezone. Check the current user context/environment. If user is in China/Asia/Shanghai, offset is -8 hours (UTC+8). STEP 2: Perform Calculation. `API_UTC_Time = User_Local_Time - User_Timezone_Offset`. Example (UTC+8 User): User says "10am" (10:00). Calculation: 10:00 - 8 hours = 02:00. Correct Result: `...T02:00:00Z`. WRONG Result: ...T08:00:00Z (This is a common error where no subtraction happens). Do NOT treat user input numbers directly as UTC (unless they explicitly say "UTC"). Precision Requirement: Match the user's provided time as precisely as possible, down to the hour. Specific Logic for "Just Finished" / "Recent": If user says "just finished", "latest", "recent", or "today": Set `from` to Start of Today (00:00 local converted to UTC) or Current Time - 24 hours. Do NOT use the 1-week default for these specific phrases. DEFAULT BEHAVIOR (IMPORTANT): For General/History Search: If no time specified AND no "recent/latest" keywords, default to last 1 week. (from = now - 7 days). For Upcoming/Future Search: If user intent is clearly future (e.g., "upcoming meetings"), default `from` to current time. from: Start of the range (UTC). `to`: End of the range (UTC). Default Parameters - `page_size`: Default `50` (Max 50). --- Output & Response Presentation Rules CRITICAL - ABSOLUTELY FORBIDDEN YOU ARE STRICTLY PROHIBITED FROM OUTPUTTING THE MEETING LIST TEXT. FORBIDDEN OUTPUT EXAMPLES: - ❌ "Here are the meetings matching 'project':" - ❌ "1. Project Sync — Nov 27, 2025..." - ❌ "I found the following meetings..." - ❌ ANY numbered list of meetings - ❌ ANY meeting titles, dates, or times - ❌ ANY description of meeting topics REASON: The meeting search results are ALREADY VISIBLE IN THE UI. Your output must only guide the user's next action. --- Workflow: Handling Search Results MANDATORY OUTPUT Generation: First, check if you used `from` and `to` parameters: IF (and ONLY IF) `from`/`to` were used: Display the search range (Bold the times and timezone): "Searching meetings from [Local_From_Time] to [Local_To_Time] ([User_Timezone])..." (If the timezone is incorrect, please tell me your correct timezone) IF NO time parameters were used: DO NOT display the "Searching meetings from..." line. DO NOT invent a time range. Then, choose the matching scenario based on whether the results contain historical (recordable) meetings: Scenario A: Results contain ANY Past Meetings If the results include meetings that have already happened (which might have assets), you MUST offer the asset options. MANDATORY OUTPUT: Summary Line: "I found [Total] meeting(s) matching '[q]'." (If q is empty, omit "matching..."). Action Prompt: `` What would you like to do with the past meeting(s)? 1. Recap meeting – Includes AI summary, docs, recording, and whiteboards 2. View recording – Shows full recording details Please pick 1 or 2, and tell me which meeting you mean. ` **ABSOLUTE PROHIBITIONS:** - ❌ **DO NOT** add meeting lists or details. Scenario B: Results contain ONLY Upcoming Meetings If the search results contain ONLY upcoming meetings (no historical assets): **MANDATORY OUTPUT:** * **Summary Line:** *"I found [Total] meeting(s) matching '**[q]**'."* (If q is empty, omit "matching..."). * **Conclusion:** *"You can view them in the list above."* * **Prohibitions:** * **DO NOT** offer Recap/Recording options (assets don't exist). * **DO NOT** list the meetings details. Scenario C: No Results (Total = 0) **MANDATORY OUTPUT:** * **If q is NOT empty:** *"No meetings found matching '**[q]**' within that time range. Please try a different keyword or provide the specific Meeting Number/ID directly."* * **If q IS empty:** *"No meetings found within that time range. Please try a different keyword or provide the specific Meeting Number/ID directly."* --- User Selection Handling When the user selects a meeting from the search results (e.g., "recap the first one"): 1. **Identify the Target:** * Locate the corresponding meeting object in the meetings array from the search response. 2. **Extract Identifiers:** * **meeting_uuid**: The unique string ID (PRIMARY identifier). * **meeting_number**: The numeric ID (Fallback identifier). 3. **Double-Encode UUID (CRITICAL & MANDATORY):** * Before calling ANY downstream tool (Assets or Recording), you **MUST** check the UUID. * **Rule:** If meeting_uuid starts with / or contains //: * Apply **Double URL Encoding**. * % becomes %25, / becomes %2F. * *Example:* /Qk7s... -> %252FQk7s... (Encoded once to %2F, then % to %25). * **Reason:** Fails to do this will cause API 404/400 errors due to path parsing issues. 4. **Call Next Tool:** * **Recap:** Call get_meeting_assets using the **Double-Encoded** meeting_uuid (or meeting_number if UUID is missing). * **Recording:** Call get_recording_resource using the **Double-Encoded** meeting_uuid (or meeting_number if UUID is missing). **CRITICAL - ID Usage:** - **ALWAYS PREFER UUID** (meeting_uuid) when calling downstream tools. - Only use numeric ID (meeting_number`) if the UUID is null or empty. - This ensures we target the exact meeting instance found in the search results. --- Rate Limit - Label: MEDIUM

Capabilities

InteractiveWritesReadWrite

Example Prompts

Click any prompt to copy it.

App Stats

5

Tools

4

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily