MCP App Store
by KeenEthics
Zoom icon

Zoom

By Zoom Communications, Inc

Get New App Alerts

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

ask

ChatGPT
Ask READ-ONLY Returns one synthesized answer with citations from the user's accessible Zoom workspace and connected files. Datasource scopes are zoom_meeting, zoom_chat_message, zoom_chat_session, zoom_canvas, zoom_my_notes, zoom_phone_call, zoom_phone_sms, zoom_phone_voicemail and third_party_file. Tool selection Ask suits summaries, explanations, comparisons, status, decisions, owners, risks, themes, and action items. Search suits get, find, list, browse, and open requests returning matching records. Ask planning 1. Form the request. Supply the complete natural-language task through query. Ask combines semantic retrieval, content retrieval, and reasoning. Relative or local time expressions are resolved internally using the user's time zone from their Zoom profile, so callers do not supply UTC boundaries or separately request the time zone. 2. Route by requested object. Select datasources for the artifacts the user wants returned; a person, meeting, date, or platform that identifies an artifact is a constraint, not another requested family. Combine datasources only when the user independently requests multiple families or the requested artifact can belong to multiple families and the wording does not disambiguate it. - zoom_my_notes covers authorized notes and attendee-side transcripts from Zoom, third-party, and in-person meetings, including notes created by the user, shared with them, or moved outside the My Notes folder; “My Notes” is a product collection rather than a creator filter. - zoom_meeting covers host-owned meeting records, summaries, cloud recordings, and their recording transcripts. - When a transcript request does not specify whether it means an attendee-side/My Notes transcript or a recording transcript, include both zoom_my_notes and zoom_meeting; meeting context alone does not resolve that ambiguity. - zoom_chat_session covers chat groups and channels. - zoom_chat_message covers message content. - zoom_canvas covers Zoom Docs. - zoom_phone_call covers Zoom Phone call records. - zoom_phone_sms covers Zoom Phone SMS messages. - zoom_phone_voicemail covers Zoom Phone voicemail records. - third_party_file covers connected files and uses source for the provider; if source values are unknown, request third_party_file from Search Describe Capabilities before Ask. 3. Set context. Restrict datasources when the evidence scope is known. If it is broad or unclear, omit datasources to search all supported Ask sources. Use context_resources for known resources and chat_history for prior turns. Datasource selection changes retrieval scope, not the synthesized response format. Ask does not accept metadata filters or return pageable raw records. Search provides exact counts, pagination, and field-level filtering. An Ask answer does not change the meaning of an empty exact Search result. Parameters - `query` (string, required) — Complete natural-language question or instruction. - `chat_history` (array, optional) — Prior {role, content} turns in chronological order. Ask is stateless when history is omitted. - `context_resources` (array, optional) — Known resources to include as context, identified by datasource and datasource-specific identifiers. A third-party file uses source and file_id. - `datasources` (array, optional) — Strictly limits retrieval to the listed datasource scopes. A third-party scope uses source; omission searches all supported Ask sources. Response Returns request_id, an assistant message, and citations. Citations may contain a title, excerpt, URL, entity type, datasource, and datasource-specific metadata. message.content is the completed synthesis rather than raw evidence and can be presented directly with its citations. Formatting should preserve its meaning and attribution without introducing additional claims.

canvas_add_file_collaborators

ChatGPT
Adds collaborators (Zoom users, Team Chat channels, or email addresses) to a Zoom Canvas (formerly Zoom Docs) file, granting them a specified access role. Only doc or data table file types are supported. When to Use Use this tool when a user wants to share a Canvas file with one or more people or channels by assigning them viewer, commenter, editor, or co-owner permissions. Must Do - Each collaborator entry must include exactly one identifier: user_id, channel_id, or email - Each collaborator entry must include a role (viewer, commenter, editor, or co-owner) - Provide between 1 and 50 collaborators per request - The target file must be of type doc or data table Must NOT Do - Do not include more than one identifier field (user_id, channel_id, email) per collaborator entry - Do not use this tool on unsupported file types (e.g., spreadsheets, presentations)

canvas_list_file_collaborators

ChatGPT
Retrieves the list of collaborators for a specified Zoom Canvas (formerly Zoom Docs) file (supports doc and data table file types only). When to Use Use this tool when you need to view who has access to a Zoom Canvas file, including their roles and collaborator types (user, channel, or email). Must Do - Provide a valid fileId from Zoom Canvas - Only use with doc or data table file types Output Returns up to 50 collaborators, each containing: - collaborator_id: Use this ID when removing or modifying a collaborator - collaborator_type: One of user, channel, or email - role: One of viewer, commenter, editor, or co-owner - collaborator_name: Display name - Conditional identity field: user_id (if type=user), channel_id (if type=channel), or email (if type=email)

canvas_modify_file_collaborator_role

ChatGPT
Modifies the role of an existing collaborator on a Zoom Canvas (formerly Zoom Docs) file. Only doc or data table file types are supported. When to Use Use this tool when you need to change a collaborator's permission level (e.g., upgrading a viewer to an editor, or demoting a co-owner to a commenter) on a specific Zoom Canvas file. Must Do - Provide the file ID, collaborator ID, and the new role - Ensure the target file is of type doc or data table - Use one of the valid role values: viewer, commenter, editor, or co-owner

canvas_remove_file_collaborator

ChatGPT
Removes a specified collaborator from a file in Zoom Canvas (formerly Zoom Docs). Only doc or data table file types are supported. When to Use Use this tool when a user wants to revoke a collaborator's access to a specific Zoom Canvas file (doc or data table). Prerequisites - You must have the file ID of the target document in Zoom Canvas. - You must have the collaborator item ID to identify which collaborator to remove (obtainable via a "list collaborators" operation). Must Do - Ensure the target file is of type doc or data table before attempting removal. Must NOT Do - Do not use this tool on unsupported file types (e.g., files other than doc or data table).

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_file_content

ChatGPT
Tool Description [DEPRECATED] This tool is deprecated. Please use hub_get_file_content instead for all future file content retrieval tasks. Retrieves the full Markdown content and file name of an existing Zoom Docs (Zoom Canvas) document using its file ID. When to Use ⚠️ This tool is deprecated. Use `hub_get_file_content` as the replacement. Only use this tool as a fallback if hub_get_file_content is unavailable. Use this tool when you need to read the full content of a Zoom Docs file by its file ID, in either structured XML format (for block-level editing) or plain Markdown format (for reading only). Must Do - Always prefer hub_get_file_content over this tool for all new tasks. - Use xml format when block-level editing is planned, as it is the ONLY format that exposes block IDs required by block-level edit tools (docs_file_insert_blocks, docs_file_update_block, docs_file_delete_block, docs_file_replace_range_of_blocks). - Use markdown format only when plain text reading is sufficient and no block-level editing is needed. Must NOT Do - Do NOT use markdown format when block-level editing is planned, as it does not expose block IDs.

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

hub_create_file_from_content

ChatGPT
Tool Description Creates a new Zoom Hub file (doc, paper_doc, or spreadsheet) from plain-text content and returns the file ID and deep link. Prerequisites - parent_id is OPTIONAL. - DO NOT specify parent_id unless the user explicitly tells you where to save the file. - If the user does not mention a folder or location, omit parent_id entirely — do not default it to "root" or empty string. - Only provide parent_id when the user explicitly provides a valid folder ID or path. ✅ Correct: omit parent_id when user says "Generate a sample sales spreadsheet for me." ❌ Wrong: parent_id = "root" ← do not assume this as default When to Use Use this tool when the user wants to create a new document, paper document, or spreadsheet in Zoom Hub with specific text content (Markdown for docs/paper_docs, CSV for spreadsheets). Prerequisites - For parent_id: use empty string or "root" to place in the caller's My Files folder, or provide a valid folder ID owned by or shared with the caller Must Do - Set file_type to one of: doc, paper_doc, or spreadsheet - Use Markdown format for doc or paper_doc content - Use CSV format for spreadsheet content - Keep content size ≤ 100 KB Must NOT Do - Do not use file_type=presentation — slide-deck import is not supported Error Handling - 400 REASON_PARAMS_INVALID: Invalid parameters (e.g., attempting to create a presentation or exceeding content size limit)

hub_get_file_content

ChatGPT
Tool Description Exports the plain-text content of a Zoom Hub file (doc, spreadsheet, presentation, or paper_doc) in a specified format (markdown, xml, or csv). File ID Extraction from URL If the user provides a Zoom Hub spreadsheet URL, extract file_id using this rule: URL pattern: https://<host>/spreadsheet/{file_id} https://<host>/spreadsheet/{file_id}/{sheet_id} https://<host>/spreadsheet/{file_id}/{sheet_id}?... - Always extract ONLY the first path segment after /spreadsheet/ as file_id - The second path segment is the Sheet Tab ID — it is NOT part of file_id, ignore it - Query parameters (e.g., ?from=sheets) should also be ignored ✅ Examples: https://sheets.zoomd.us/spreadsheet/orLkROyAQvuIBEWFnj6F7g → file_id = "orLkROyAQvuIBEWFnj6F7g" https://sheets.zoomd.us/spreadsheet/orLkROyAQvuIBEWFnj6F7g/q2sbq?from=sheets → file_id = "orLkROyAQvuIBEWFnj6F7g" ❌ Wrong: file_id = "orLkROyAQvuIBEWFnj6F7g/q2sbq" ← never include sheet_id in file_id When to Use Use this tool when you need to read or extract the textual content of a Zoom Hub file for analysis, display, or processing. Prerequisites - You must have a valid file_id for an existing Hub file - The file type must support the requested export format (see format compatibility below) Must Do - Provide both file_id and format parameters (both required) - Ensure the format matches the file type: - doc: use markdown or xml - spreadsheet: use csv (only first sheet exported) - presentation: use markdown - paper_doc: use markdown Must NOT Do - Do not request a format incompatible with the file type (returns 400 error) - Do not attempt to export files larger than 100 KB (bounded by size limit, returns 400 error) Error Handling - 400 REASON_PARAMS_INVALID: Mismatched file type and format combination, or file size exceeds 100 KB limit

in_meeting_control

ChatGPT
In-meeting controls In-meeting controls include starting, stopping, pausing, and resuming a recording; inviting participants; updating the waiting room with a custom message; and starting, stopping, or disabling the Zoom AI. Note: This API's recording control only works for cloud recordings, not for local recordings.

meeting_create

ChatGPT
Create a Zoom meeting Use for scheduling a new meeting. Not for editing an existing one, looking one up, or webinars. Derive topic and start_time from what the user has already told you, including earlier turns and any document or message they shared. Ask only when the context doesn't yield them — and never invent a title or a time. timezone is an IANA ID, e.g. "America/Los_Angeles", or "UTC". Use the user's timezone when you already have it — from the client context, their profile, or earlier in the conversation. Otherwise ask. Do not derive it from their language, their country, or the server clock. Send start_time as a local timestamp with no zone suffix ("2026-03-25T15:00:00") paired with timezone — never a "Z" suffix, even for UTC. A past start_time silently defaults to now, so resolve relative times ("tomorrow 3pm") against the user's current date in that timezone before calling. The host defaults to userId: "me". Don't ask who is hosting — only set userId or schedule_for when the user names someone else. For type 8, recurrence needs repeat_interval plus one of end_date_time or end_times. Omit password unless asked; the account generates one when required. start_url grants host access to anyone holding it and expires in 2 hours — return it only to the host, on request. Limit: 100 meetings/day/host. A 429 means it's spent; do not retry.

meeting_delete

ChatGPT
Delete a meeting Delete a meeting. Prerequisites: * For recurring meetings, the occurrence_id is required to delete a specific occurrence. If not provided, the entire recurring series will be deleted.

meeting_update

ChatGPT
Update a meeting Updates meeting details. Prerequisites The `start_time` value must be a future date. If the value is omitted or a date is in the past, the API ignores this value and does not update any recurring meetings. The recurrence object is required only when updating the entire series of a recurring meeting with type=8. This API has a rate limit of 100 requests per day*. You can update a meeting for a maximum of 100 times within a 24-hour period.

my_notes_get_note_content

ChatGPT
Retrieves a specific note from Zoom My Notes, including user-authored content, AI-generated content, and associated transcript. This covers all notes including from Zoom meetings, 3rd party meetings (eg. Microsoft Teams, Google Meet), and in-person meetings. When to Use This Tool Use this tool for any user request that mentions "note" or "notes" in any form — "my notes", "meeting notes", "what did I write down", "AI notes", "notes from my 1:1", or similar. How to Use - Provide the unique noteId of the note to fetch. This can be obtained using the search tool. - Set include=transcript explicitly when the user needs the transcript along with the note content. Usage Notes - Notes must never be reported as unavailable without first calling this tool - Do not report that no transcripts are available unless include=transcriptwas set in the request.

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_describe_capabilities

ChatGPT
Search Describe Capabilities READ-ONLY Returns authoritative per-datasource metadata for constructing Search filters; it returns no user content. Supported datasources are zoom_meeting, zoom_chat_message, zoom_chat_session, zoom_canvas, zoom_my_notes, zoom_phone_call, zoom_phone_sms, zoom_phone_voicemail, third_party_file, and calendar. Capability planning Use this tool before invoking Search when the request has been routed to the Search workflow and slot decoding identifies metadata constraints. A request containing only full-text terms and datasource scope needs no capability discovery. When required: 1. Recognize slots. Metadata slots include identifiers; type, subtype, or format; view, provider, owner, or hierarchy; people or organization; time ranges; boolean state or asset availability; and numeric thresholds. Natural-language expressions of these concepts are slots even without API field names. 2. Resolve time context. For a relative or local time slot, obtain the user's current time zone from user or client context. If unavailable, ask and wait; call neither this tool nor Search until the zone is known. Never infer a zone. 3. Request capabilities. Request every selected datasource. If selection is uncertain, request several schemas together rather than guessing. 4. Construct filters. Resolve each slot from the response's field name, type, enum, filterable/searchable flags, and operator restrictions. Resolve time fields separately for each datasource. Never transfer fields between schemas or enforce metadata only through query. A filterable field supports its documented filter operators; a searchable field supports top-level query or supported match. Parameters - `datasources` (array, optional) — Datasource schemas to return. Multiple values are supported; omission returns all schemas. Response Returns {"data": {<datasource>: [<field>, ...]}}. Fields include field_name, field_type, description, filterable, searchable, and optional enum.

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

WritesInteractive

Example Prompts

Click any prompt to copy it.

Similar Apps