MCP App Store
by KeenEthics

Overview

Speak AI transcribes and analyzes your interviews, sales calls, research sessions, webinars, podcasts, and team meetings. This connector brings that library into your AI assistant, so instead of scrubbing hours of audio, you just ask. Capture: Send a meeting assistant to Zoom, Google Meet, Microsoft Teams, or Webex. Upload audio, video, or text. Run async voice and video surveys with custom questions. Analyze: Search transcripts and insights across thousands of recordings at once, with citations. Pull decisions, action items, owners, risks, sentiment, themes, and exact quotes. Act: Create clips, highlights, captions, notes, folders, fields, and embeds from chat. Chain steps with automations and webhooks: auto-tag new recordings, route insights to other tools, or run a custom prompt against every new upload. Share and organize: Export answers, transcripts, captions, and clips. Generate embed links and shareable views. Bulk move media, update transcripts and speakers, and clone setups across teams. Who it's for: researchers, revenue and customer-success teams, meeting-heavy operators, and media and content workflows: anyone who records conversations and wants to stop re-listening to find what matters. Your recordings stay in your Speak AI workspace. The connector only queries them with the permissions you allow. Limitations: the connector works only with recordings in the Speak AI workspace you connect. Deleting, overwriting, and anything that sends data outside Speak AI are marked so your assistant can check with you before running them.

Tools

add_comment

ChatGPT
Add a comment to a media file. Three kinds: on the whole file (no quote or range), on words in the transcript (quote, or range plus expectedTranscriptRevision, exactly as in apply_label), or a reply to a thread (parentId, with no span of its own). Replies go one level deep, so parentId must be a thread's first comment. A reply notifies the thread's starter in Speak, unless the starter wrote the reply. mediaLabelId links the comment to a labelled span on this file. A 409 that says the transcript changed means someone edited it after your revision was read: read the transcript again (get_transcript) and retry with the new range or quote. Nothing was saved. Requires the comments create permission (every member by default). The change is recorded in your Speak Notifications under Comment (type comment).

add_speak_label_sets

ChatGPT
Add ready-made label groups from Speak: sales_qa (Unprofessional, Slang, Objection, Great moment, Compliance risk), research (Pain point, Motivation, Quote for report, Surprise, Follow-up), meetings (Decision, Action item, Risk, Open question) and transcript_feedback (Wrong split, Misheard word, Wrong speaker, Bad translation). Safe to repeat: a group or label that already exists with the same name is reused, and a set whose group name is taken by a plain label is skipped (listed in skippedSets). Requires the labels create permission (every member by default). The change is recorded in your Speak Notifications under Label (type label).

add_voice_faq_suggestion

ChatGPT
Write an FAQ suggestion's question/answer into the voice agent's attached knowledge base as a new document, and mark the suggestion added. Requires the OWNER or ADMIN role. Fails with 409 if the suggestion was already added or dismissed, or if the agent has no knowledge base collection to write into.

add_voice_kb_gap

ChatGPT
Write a knowledge-base gap's answer into the voice agent's attached knowledge base as a new document, and mark the gap added. Requires the OWNER or ADMIN role. Fails with 409 if the gap was already added or dismissed, or if the agent has no knowledge base collection to write into.

analyze_voice_instruction_gaps

ChatGPT
Advisory only — compares a voice agent's current instructions against anchors/original intent/recent call summaries you supply and suggests up to 3 patches. Requires the OWNER or ADMIN role. Nothing is written; pass a suggestion's suggestedPatch to apply_voice_instruction_gap to actually apply it.

analyze_voice_kb_gaps

ChatGPT
Trigger knowledge-base gap analysis over a voice agent's recent calls. Requires the OWNER or ADMIN role. Runs in the background and returns immediately — new gaps appear in list_voice_kb_gaps once analysis finishes, not synchronously with this response.

apply_label

ChatGPT
Apply one or more labels to a span of words in a media file's transcript. Give the span as quote (words copied from get_transcript; this tool finds their position and the current transcriptRevision for you) or as range plus expectedTranscriptRevision. If the same span already has labels, the new ones are added to it. Check the returned anchor.exact to confirm the right words were labelled. A 409 that says the transcript changed means someone edited it after your revision was read: read the transcript again (get_transcript) and retry with the new range or quote. Nothing was saved. A 400 means the range is outside the transcript or a label is archived, a group, or not in this workspace. Requires the labels assign permission (every member by default). The change is recorded in your Speak Notifications under Label (type label).

apply_voice_instruction_gap

ChatGPT
Insert a suggested instruction patch into a voice agent's instructions and persist the result. Requires the OWNER or ADMIN role. suggestedPatch is typically taken directly from analyze_voice_instruction_gaps.

archive_label

ChatGPT
Archive a label so it can no longer be applied; archiving a group archives its labels too. Labels already applied to transcripts stay where they are, and restore_label undoes this. Safe to repeat. Returns archivedCount. Requires the labels delete permission (owners and admins by default). The change is recorded in your Speak Notifications under Label (type label).

bulk_create_voice_agent_resources

ChatGPT
Add up to 100 documents/links to a voice agent's knowledge base in one call. Requires the OWNER or ADMIN role. The URLs are not fetched; each entry's title, description, and URL slug is embedded independently. Use this instead of calling create_voice_agent_resource in a loop.

bulk_move_media

ChatGPT
Move multiple media files to a folder in a single operation. Use this for batch reorganization instead of updating media one by one.

bulk_update_transcript_speakers

ChatGPT
Normalise speaker names that are ALREADY correct across multiple media files — for example changing "Frederik S." to "Frederik" everywhere. Applies the same mapping to every specified media file. NOT a way to identify a speaker across a project: neither the numeric id nor a default label such as "Speaker 1" refers to the same person in different files, because speakers are numbered per file in order of appearance. Renaming "Speaker 1" across many files will label a different person in each one. Identify the speakers in each file first (get_transcript, or an identify-speakers automation), then use this tool only to tidy up naming that is already correct. Match by the speaker's current LABEL, not by numeric id. A file whose speakers do not match the mapping is left unchanged and reported as failed. Re-sending a mapping that has already been applied is a safe no-op, so do not retry a call that reported success.

cancel_voice_test_run

ChatGPT
Cancel a voice agent test run. Requires the OWNER or ADMIN role. Valid from queued, running, or paused. The run stops at its next AI call. Terminal — a cancelled run can never be resumed.

check_embed

ChatGPT
Check if an embed exists for a media file and retrieve its configuration.

check_recorder_status

ChatGPT
Check whether a recorder/survey is active and accepting submissions.

clone_folder

ChatGPT
Create a new folder copied from an existing folder's name and description. Media in the source folder is not copied. Set isSaveDefaultView to also copy the source folder's default view.

clone_folder_view

ChatGPT
Duplicate an existing folder view into a target folder.

clone_recorder

ChatGPT
Duplicate an existing recorder including all its settings and questions. The copy gets its own public link, accepts submissions right away and sends the same submission emails, webhooks and automations as any recorder. Fires the workspace's embed_recorder.created webhook if one is registered.

create_clip

ChatGPT
Create a highlight clip from one or more media files by specifying time ranges. Clips are processed asynchronously (states: queued, processing, completed, failed) — use get_clips to check status. Maximum total clip duration is 30 minutes. Use multiple timeRanges to stitch segments from different media files together.

create_dashboard

ChatGPT
Create an analytics dashboard. Only title is required — source defaults to the whole workspace and dateRange to last30days. Add widgets by listing their types (the MCP assigns ids and lays them out automatically), scope with source ({type:"folders",folderIds} | {type:"team"} | {type:"workspace"}) and dateRange ({preset}), and optionally group widgets into sections. Design guidance: lead with a narrative widget as the first widget; group sections by the QUESTION they answer, not by widget type; don't pad — every widget earns its place (aim for 4-16 widgets on a full build); if something can't be expressed by the widget catalog, put it in a narrative widget's focus instead of faking it. Call list_dashboard_widgets first for the widget catalog, config vocabulary, design rules, and full examples. Creating a dashboard does not share it publicly; only share_dashboard creates a public link. If settings.feedback.sheetWebhookUrl is set, each Feedback submission made on the shared dashboard is posted to that external Google Apps Script URL. Shared dashboard links cache widget data, so field and media edits can take up to about 5 minutes to show for date ranges that include today (15 at most) and up to about 17 minutes for past ranges (60 at most); any dashboard update refreshes it at once. Viewer settings (the settings input): Do not pass settings unless the user explicitly asks to change this dashboard's viewer settings. Saving fields, feedback or fieldEdits moves that dashboard onto the settings flow immediately: its media pages use these groups and this Feedback setup from then on. Each section (fields, feedback, fieldEdits, labels, comments, profiles) replaces that whole section when sent; a section left out keeps its saved value. Call get_dashboard first and resend every key of the section you change; a key left out resets to its default. Get field ids from list_fields. Ids that are not the company's fields are dropped when saving and returned in droppedFieldIds. When feedback.isEnabled is true, pass a non-empty feedback.fieldIds (score fields) rather than leaving it empty. Only set feedback.sheetWebhookUrl when the user gives the Apps Script URL. fieldEdits.fieldIds may list only fields that have allowed values (the server rejects any other field with a 400) and that the dashboard's media pages show; pass an empty fieldIds to turn field editing off. Labels and comments on the shared link are off until the user asks to turn them on. Mode 'apply' (labels) or 'reply' (comments) lets a link viewer write as one of the dashboard's feedback submitter names (feedback.submitters, even while feedback itself is off), or as another typed name only when feedback.allowOtherSubmitter is true. Anyone holding the share link can pick any of those names, because the link has no sign-in (an accepted risk; every entry is marked as made via this dashboard), so confirm the names with the user before saving a write mode. With no submitter names nobody can write. Label groups that are not active refuse the whole save with a 400 rather than being dropped. Saving only settings.profiles does not move media pages onto the settings flow. settings.profiles is a list of up to 5 groups, one per custom field (a field may appear only once), each with a label (for example Speakers or Products) and entries that give a value of that field a name, image, description and link. Entry names must equal that field's values (trim, case-insensitive), and a name or id listed twice in a group is rejected with a 400; they are matched by display string, so renaming a value in the media fields orphans its profile. Names, descriptions, links and images are PUBLIC to anyone with the dashboard link: write plain text only, no HTML, and confirm the descriptions and links with the user before saving. This MCP cannot upload images: leave imageKey out, or pass one copied unchanged from get_dashboard. To add an image over the API, POST it (multipart, JPEG/PNG/WEBP/GIF, max 2 MB) to /v1/dashboards/:dashboardId/profile-image and use the returned imageKey.

create_embed

ChatGPT
Create an embeddable player/transcript widget for a media file or a set of folders. Provide mediaId for a single-media embed, or folderIds for a folder/library embed. If an embed already exists for that media or folder set, it is returned instead. A single-media embed is viewable by anyone with the link while the media's privacy mode is public (the default); a folder embed is created with an auto-generated password. Use update_embed to change privacy or the password, or to show labels and comments (meta isLabels, isComments; off by default), or to brand a shared dashboard (meta logo, logoDark, theme, backgroundColor, primaryColor, titleColor, fontFamily).

create_field

ChatGPT
Create a new custom field for categorizing and tagging media. The response starts with the new field's id; use that id (not _id) wherever a field id is needed.

create_folder

ChatGPT
Create a new folder in the workspace, optionally assigned to users or user groups.

create_folder_view

ChatGPT
Create a new saved view for a folder with a custom set of display columns.

create_label

ChatGPT
Create a label, or a label group with isGroup true. Labels are shared by the whole workspace and are applied to transcript words with apply_label. A label can sit in one group (parentId); groups cannot be nested, and a group has no color. Names are unique among active labels under the same parent, ignoring case and extra spaces: 409 means the name is taken. Requires the labels create permission (every member by default). The change is recorded in your Speak Notifications under Label (type label).

create_recorder

ChatGPT
Create a new recorder or survey for collecting audio/video submissions. The recorder is live as soon as it is created: anyone with its public link can submit. By default each submission emails the recorder owner (if they opted in) and any users in notifyUsers, and emails a confirmation to the respondent when they give an email (see notification), and it fires the workspace's embed_recorder.recording_received webhook and recording_received automations. Creating the recorder fires the workspace's embed_recorder.created webhook if one is registered.

create_text_note

ChatGPT
Create a new text note in Speak AI for analysis. The content will be analyzed for insights, topics, and sentiment.

create_user_group

ChatGPT
Create a new user group and assign members. Member ids come from list_users. Fails with a 409 if a group with the same name already exists in the company.

create_voice_agent

ChatGPT
Create a voice agent. Requires the OWNER or ADMIN role. name, personality, instructions, and voice (provider + voiceId) are required; everything else can be set now or later with update_voice_agent. Call list_voice_avatars or list_voices first to get valid ids.

create_voice_agent_from_prompt

ChatGPT
Create a new voice agent from a plain-English description, via an LLM call. Requires the OWNER or ADMIN role. Saves a draft agent, then generates and saves its name, personality, instructions, chat settings, and default voice, speech-to-text, and LLM settings. Does not assign a phone number. The response includes the new agentId plus either the generated agent, or needsFollowUp: true with a followUpQuestion when the prompt is too vague. In that case the draft agent still exists with placeholder settings; call generate_voice_agent_config on that agentId with more detail.

create_voice_agent_resource

ChatGPT
Add one document/link to a voice agent's knowledge base. Requires the OWNER or ADMIN role. The server does not fetch the URL; it embeds the title, description, and URL slug so the agent can retrieve the link during live calls.

create_voice_question

ChatGPT
Attach a question template to a voice agent. Requires the OWNER or ADMIN role. agentId and templateId are both required and must belong to your company (or, for templateId, be a public system template) — 404 if either isn't found. Returns 409 if the agent already has an enabled question whose template has the same name, ignoring case and spacing (they save to the same answer key); disable or delete that question first, or create this one with enabled: false.

create_voice_question_template

ChatGPT
Create a company-scoped question template — the "custom question" a user names themselves rather than picking from Speak's shared library. Requires the OWNER or ADMIN role. The server stamps companyId and forces isSystemTemplate to false, so this template is only ever visible to your company.

create_webhook

ChatGPT
Create an outbound webhook. From then on, Speak automatically POSTs a JSON payload to callbackUrl, an external endpoint, for each subscribed event (event type, ids such as mediaId or folderId, state, and for chat events the prompt and answer text).

delete_chat_conversation

ChatGPT
Delete an entire chat conversation from conversation history, so it and its messages no longer appear. No tool can restore it.

delete_clip

ChatGPT
Permanently delete a clip and its associated media file.

delete_comment

ChatGPT
Delete a comment. Deleting a thread's first comment keeps its replies visible under an empty placeholder. You can always delete your own comments; deleting someone else's needs the comments delete permission (owners and admins by default), otherwise 403. The change is recorded in your Speak Notifications under Comment (type comment).

delete_dashboard

ChatGPT
Soft-delete a dashboard. This also deactivates its public share link.

delete_folder

ChatGPT
Permanently delete a folder. The folder must be empty: the request is refused if it still holds any media or if it is the workspace's last folder, so move or delete its media first.

delete_media

ChatGPT
Permanently delete a media file and all associated transcripts and insights.

delete_recorder

ChatGPT
Permanently delete a recorder/survey. Its public link stops accepting submissions. Existing recordings are preserved. Fires the workspace's embed_recorder.deleted webhook if one is registered.

delete_scheduled_assistant

ChatGPT
Cancel and delete a scheduled meeting assistant event.

delete_user_group

ChatGPT
Permanently delete a user group. The users themselves are not deleted, but members lose any access that was shared with the group (for example dashboards assigned to it).

delete_voice_agent

ChatGPT
Delete a voice agent. Requires the OWNER or ADMIN role. The agent is marked deleted and no tool can restore it: it stops appearing in list_voice_agents, and its share link, embedded widget, questions, and test suite stop working. Its stored data is not erased, past conversations stay in list_voice_conversations, and phone numbers assigned to it are not released.

delete_voice_agent_resource

ChatGPT
Soft-delete a voice agent resource — it stops appearing in lists and the agent stops searching it, but the document is not physically removed. Requires the OWNER or ADMIN role.

delete_voice_question

ChatGPT
Permanently remove a question from a voice agent and decrement the underlying template's usageCount. Requires the OWNER or ADMIN role. The template itself is not deleted and can be attached to another agent later.

delete_webhook

ChatGPT
Permanently delete an outbound webhook and its delivery attempt history; its endpoint stops receiving notifications. Cannot be undone.

dismiss_voice_faq_suggestion

ChatGPT
Mark a voice agent's FAQ suggestion dismissed without writing anything to the knowledge base. Requires the OWNER or ADMIN role.

dismiss_voice_kb_gap

ChatGPT
Mark a voice agent's knowledge-base gap dismissed without writing anything to the knowledge base. Requires the OWNER or ADMIN role.

duplicate_dashboard

ChatGPT
Clone an existing dashboard into a new dashboard owned by the caller. The copy keeps the source's widgets (same widget ids), sections, filters, and viewer settings, gets a "<name> (copy)" title, has no shared users and no public link, and starts at revision 0. Edit it afterwards with update_dashboard.

export_chat_answer

ChatGPT
Export a specific AI Chat answer. Useful for saving AI-generated summaries, reports, or analysis results.

export_media

ChatGPT
Export a media file's transcript, insights or labels in various formats (pdf, docx, srt, vtt, txt, csv). Use fileType csv-labels for a labels CSV with one row per labelled passage and label (file name, group, label, times, speaker, excerpt, author, status, confidence, comment count). Generates the file and returns it without saving or sharing anything.

export_multiple_media

ChatGPT
Export multiple media files at once, optionally merged into a single file. With fileType csv-labels you get one labels CSV per file that has labels (files without labels are skipped), or one merged CSV with isMerged; it fails with not found when none of the files has labels.

generate_recorder_url

ChatGPT
Retrieve the existing shareable URL and embed iframe code for a recorder/survey. Read-only lookup: returns the recorder's pre-existing share link; it does not create, modify, or publish anything.

generate_voice_agent_config

ChatGPT
Run the same prompt-to-config generation as create_voice_agent_from_prompt, but against an existing agent instead of creating a new one. Requires the OWNER or ADMIN role. On success the generated config is saved onto the agent immediately, overwriting its current name, personality, instructions, chat settings, and voice, speech-to-text, and LLM settings. If the prompt is too thin and manualInstructions was not sent, the response has needsFollowUp: true with a follow-up question instead — call this again with more detail.

generate_voice_faq_suggestions

ChatGPT
Trigger FAQ clustering over a voice agent's recent calls. Requires the OWNER or ADMIN role. Runs in the background and returns immediately — new suggestions appear in list_voice_faq_suggestions once generation finishes, not synchronously with this response.

generate_voice_test_suite

ChatGPT
Auto-generate a default test suite for a voice agent from its configuration (name, personality, instructions, welcome message, topics to avoid), via an LLM call. Requires the OWNER or ADMIN role. Overwrites the suite's existing scenarios.

get_active_voice_test_run

ChatGPT
Get a voice agent's currently active test run (queued, running, or paused). Returns null in data.run if none is active — not a 404.

get_agent_analytics

ChatGPT
Owner analytics for one voice agent over a date range. Returns the range used; conversation totals with completion rate, average duration and returning callers; conversations per day split into web and phone; where callers are, their devices, browsers and traffic sources; web callers who left without saying anything and the number of open knowledge gaps (questions the agent could not answer); leads captured, handoffs and action items; engagement, sentiment, top topics, end reasons and satisfaction; busiest hours, weekdays and languages; and web versus phone counts. Test calls are left out unless includeTests is true, and the count of test calls is always returned. Leave start empty for all time; a start more than 5 years before end is moved up to 5 years. A cross-company agentId returns 404.

get_all_folder_views

ChatGPT
Retrieve all saved views across all folders.

get_captions

ChatGPT
Get captions for a media file. Captions are separate from full transcripts and are formatted for display/subtitles.

get_chat_history

ChatGPT
Get a list of recent AI Chat conversations. Returns conversation summaries with promptIds that can be used to retrieve full messages via get_chat_messages.

get_chat_messages

ChatGPT
Get full message history for conversations. Can filter by promptId for a specific conversation, by media/folder, or search across all chat messages. Returns questions, answers, references, and metadata.

get_chat_statistics

ChatGPT
Get usage statistics for AI Chat / chat. Returns metrics on prompt usage, optionally filtered by date range.

get_clips

ChatGPT
List clips, optionally filtered by folder or media files. If clipId is provided, returns a single clip with its download URL (when processed).

get_dashboard

ChatGPT
Get a single dashboard's full spec: title, description, source, date range, sections, widgets, and the current revision (pass that revision back to update_dashboard). Saved viewer settings, including settings.profiles groups (fieldId, label, imageShape, and entries with id, name, description, link, imageKey, and a signed imageUrl preview that is ignored if sent back), are included when the server returns them.

get_dashboard_speakers_insight

ChatGPT
Compute a speakers breakdown for a given folder scope, date range, and field filters. Standalone analytics — does not require a dashboard to exist.

get_embed_iframe_url

ChatGPT
Get the iframe URL for embedding a media player/transcript on a webpage.

get_embed_session

ChatGPT
Viewing analytics for an embed the user owns: one visit in full. Returns the visit with the media it opened (time watched, plays, seeks, furthest position, completed), the questions asked in chat, and a paged list of its events in time order, plus how many earlier visits the same viewer has made to this embed. Use eventsPage and eventsPageSize to read long timelines.

get_embed_session_summary

ChatGPT
Owner analytics for an embed: totals across its visits for a date range. Returns KPIs (sessions, unique and returning visitors, identified viewers, average active time, media opens, time watched, questions and sessions with questions), sessions and visitors per day, top traffic sources, and a paged table of media with opens, unique viewers, plays, time watched, completion rate, questions and downloads.

get_favorite_prompts

ChatGPT
Get all prompts and answers that have been marked as favorites. Useful for finding saved insights and important AI-generated analysis.

get_folder_info

ChatGPT
Get detailed information about a specific folder including its contents.

get_folder_views

ChatGPT
Retrieve all saved views for a specific folder.

get_live_meeting_transcript

ChatGPT
Fetch new sentences from an in-progress or just-ended meeting transcript. Identify the meeting via meetingAssistantEventId (preferred) or mediaId. Pass back the previous response's nextCursor as sinceEndInSec to receive only what's been added since.

get_media_insights

ChatGPT
Retrieve AI-generated insights for a processed media file — topics, sentiment, keywords, action items, summaries, and more. The media must be in 'processed' state (check with get_media_status first). For a video, data.thumbnail has the thumbnail: url, source (auto or custom), pending while a requested frame is being made, and error if that frame failed.

get_media_statistics

ChatGPT
Get workspace-level media statistics — total counts, processing status breakdown, storage usage, etc.

get_media_status

ChatGPT
Check the processing status of a media file. States: pending → transcribing → analyzing → processed (or failed). Poll this after upload_media until state is 'processed', then use get_transcript and get_media_insights to retrieve results. For a video, data.thumbnail has the thumbnail: url, source (auto or custom), pending while a requested frame is being made, and error if that frame failed.

get_recorder_info

ChatGPT
Get detailed information about a specific recorder including its settings and questions.

get_recorder_recordings

ChatGPT
List all submissions/recordings collected by a specific recorder.

get_signed_upload_url

ChatGPT
Get a pre-signed S3 URL for direct file upload to Speak AI storage. After getting the URL, PUT your file to it, then call upload_media with the S3 URL. For a simpler workflow, use upload_local_file instead which handles all steps automatically.

get_text_insight

ChatGPT
Retrieve AI-generated insights for a text note, including topics, sentiment, summaries, and action items.

get_transcript

ChatGPT
Retrieve the full transcript for a media file with speaker labels and timestamps. Works on processed media and also returns the partial, in-progress transcript while a meeting bot is still recording (LIVE_TRANSCRIPT state). To fetch only the new sentences added since your previous call during a live meeting, use get_live_meeting_transcript instead. Use update_transcript_speakers to rename speaker labels after reviewing. For subtitle-formatted output, use get_captions instead.

get_voice_agent

ChatGPT
Fetch a single voice agent by its agentId. Returns the full agent configuration. A cross-company agentId returns 404.

get_voice_agent_setup_guide

ChatGPT
Discovery + how-to helper for building and operating a Speak AI voice agent end to end. Returns the four configuration pieces every agent is built from, which tool covers each one, the recommended build order, and how testing/questions/knowledge-base/intelligence tools chain together after the agent exists. Call this before create_voice_agent or create_voice_agent_from_prompt if you are not already familiar with this tool surface.

get_voice_conversation

ChatGPT
Fetch a single voice conversation by its conversationId, including transcript, usage, costs, and analysis. A cross-company conversationId returns 404.

get_voice_question

ChatGPT
Fetch a single voice agent question by its fieldId, scoped to your company.

get_voice_test_baseline

ChatGPT
Get a voice agent's best-scoring completed test run, used to detect regressions on later runs. Returns null in data.baseline if no run has completed yet.

get_voice_test_score_history

ChatGPT
Get completed-run score points for a voice agent, most recent first, for charting. Capped at 100 regardless of limit. Only status=completed runs are included.

get_voice_test_suite

ChatGPT
Get a voice agent's test suite (its scenarios and run settings). Returns null in data.suite if none has been created yet — not a 404.

list_dashboard_widgets

ChatGPT
Discovery + how-to helper for building and customizing dashboards. Returns every widget type with what it shows and the exact strict config shape it accepts, the shared vocabulary (metric grammar, groupBy, per-widget binding, filters, thresholds, sources, date-range presets, sections), design rules for composing a dashboard that reads well, two complete worked example payloads, and tips for managing dashboards. Call this before create_dashboard / update_dashboard.

list_dashboards

ChatGPT
List all analytics dashboards the caller can access, including share state and each dashboard's current revision (needed for update_dashboard).

list_embed_sessions

ChatGPT
Viewing analytics for an embed the user owns: list the visits (sessions) to one embed, newest first by default. Each visit shows when it started and was last active, whether it is still live, total and active time, media opened, time watched, questions asked, traffic source and campaign tags, whether it was a bot, and the viewer's identity if they chose to share it. Returns sessions with totalCount, page and pageSize. Use get_embed_session with a session's _id for its full timeline.

list_fields

ChatGPT
List all custom fields defined in the workspace. Each field returns a slug (for example regulator_comment) alongside its id, name, and type. Put {{field.<slug>}} in the prompt text you send and Speak substitutes that field's value for the media before the model sees it. A slug is unique per company and never changes when the field is renamed, so prefer it over the field name. A field with no slug yet resolves by id in the same token. Every other tool that takes a field id wants this id (12 characters), never the database _id.

list_folders

ChatGPT
List all folders in the workspace with pagination and sorting.

list_labels

ChatGPT
List the workspace's labels as a tree: groups (isGroup true) carry their labels in labels, and ungrouped labels sit at the top level. Each item has labelId, name, description, color, parentId, source (speak for Speak label sets), usageCount and isActive. Use the labelIds of non-group labels with apply_label. Anyone in the workspace can read labels.

list_media

ChatGPT
List and search media files in the workspace with filtering, pagination, and sorting. Use filterName for text search, mediaType to filter by audio/video/text, folderId for folder-specific results, and from/to for date ranges. Use the include param to embed additional data (transcripts, speakers, keywords) inline with each result, avoiding N+1 API calls. Returns mediaIds you can pass to get_transcript or get_media_insights. For deep full-text search across transcripts, use search_media instead.

list_media_comments

ChatGPT
List the comment threads on a media file, with the file's current transcriptRevision. Each thread is its first comment with replies (oldest first). A comment on words carries an anchor (startWord, endWord, exact, times, status as in list_media_labels); a whole-file comment has none. A deleted first comment that has replies stays with an empty body and isDeleted true. Anyone who can open the file can read its comments.

list_media_labels

ChatGPT
List the labels applied to a media file's transcript, in transcript order, with the file's current transcriptRevision. Each item has mediaLabelId, labelIds and an anchor: startWord and endWord (inclusive word indices), exact (the labelled words), startInSec, endInSec, speakerIds and status. Status active means the same words; shifted means the transcript was edited and most of the words survived; needs_review means the words changed too much, so anchor holds a suggested range and lastResolved the last confirmed one (confirm or move it with update_media_label). Anyone who can open the file can read its labels.

list_meeting_events

ChatGPT
List scheduled or completed meeting assistant events with filtering and pagination.

list_prompts

ChatGPT
List recent AI Chat messages across the workspace, newest first, with each prompt, answer, references, and the media or folder it ran on. Returns messages from the 25 most recently updated conversations in the workspace, filtered to those the caller can access, so a member may see fewer.

list_recorders

ChatGPT
List all recorders/surveys in the workspace.

list_supported_languages

ChatGPT
List all languages supported for transcription. Use the language codes when uploading media with a specific sourceLanguage.

list_user_groups

ChatGPT
List all user groups in the company. Each group includes its members (hydrated names/emails) and member ids. Use this to discover group ids and current membership before updating or deleting a group.

list_users

ChatGPT
List the users (members) in the workspace/company, with their ids, names, emails, and permissions. Use the returned _id values when assigning members to user groups.

list_voice_agent_resources

ChatGPT
List the knowledge documents/links a voice agent searches during calls — separate from KB gaps and FAQ suggestions, which are the self-improvement layer that surfaces what an agent is missing, not the content itself.

list_voice_agents

ChatGPT
List the voice agents in the company (newest first). Each agent includes its agentId, name, personality/instructions, and voice/stt/llm/avatar configuration. Use the returned agentId with get_voice_agent or to filter list_voice_conversations.

list_voice_avatars

ChatGPT
List the video avatars available to attach to a voice agent (your company's own uploads plus the shared system catalog). Use the returned avatarId with create_voice_agent or update_voice_agent.

list_voice_conversations

ChatGPT
List the company's voice conversations (newest first). Optionally filter to a single agent. Each conversation includes its conversationId, agentId, status, duration, transcript summary, and usage/costs. Use conversationId with get_voice_conversation for the full record.

list_voice_faq_suggestions

ChatGPT
List a voice agent's pending FAQ suggestions — questions multiple callers asked in similar form, clustered and drafted into a reusable question/answer pair. Up to the 20 largest clusters, largest first.

list_voice_kb_gaps

ChatGPT
List a voice agent's pending knowledge-base gaps — questions callers asked that the agent answered with low confidence or an explicit "I don't know," surfaced automatically after calls. Up to the 50 most recent pending gaps, newest first.

list_voice_question_templates

ChatGPT
List the question templates visible to your company: Speak's shared system templates, plus your own company's templates. Use the returned templateId with create_voice_question.

list_voice_questions

ChatGPT
List the questions configured on a voice agent, in the order it asks them. Each is an agent-level instance of a question template with its own required/attempts/no-response settings and optional field mapping.

list_voice_test_runs

ChatGPT
List a voice agent's test runs, most recent first. Capped at 100 regardless of limit.

list_voices

ChatGPT
List the text-to-speech voices available to a voice agent. Use the returned provider/voiceId with create_voice_agent or update_voice_agent's voice field. When an agent's llm.model is a Live (speech-to-speech) model, its usable voices are a fixed, smaller set scoped to that model instead of this full catalog.

list_webhooks

ChatGPT
List all configured webhooks in the workspace.

merge_labels

ChatGPT
Merge one label into another: every place the source label is applied moves onto the target (a span that had both keeps one), then the source is archived with mergedInto set. This cannot be undone by restore_label. Both must be active, non-group labels and different. Returns movedCount. Requires both the labels update and labels delete permissions; only owners and admins have labels delete by default. The change is recorded in your Speak Notifications under Label (type label).

pause_voice_test_run

ChatGPT
Pause a voice agent's test run. Requires the OWNER or ADMIN role. Valid only from queued or running. Takes effect after the current scenario finishes.

reanalyze_media

ChatGPT
Re-run AI analysis on a media file using the latest models. Choose which parts to re-run via the flags below. Overwrites the existing results for the selected parts.

reanalyze_text

ChatGPT
Trigger a re-analysis of an existing text note to regenerate insights with the latest AI models. Overwrites the note's current insights and sentiment.

remove_assistant_from_meeting

ChatGPT
Remove the Speak AI assistant from an active or scheduled meeting.

remove_media_label

ChatGPT
Remove a labelled span from a transcript. The label itself stays in the workspace, and comments linked to the span stay without the link. Requires the labels assign permission (every member by default). The change is recorded in your Speak Notifications under Label (type label).

reorder_voice_questions

ChatGPT
Set the order a voice agent asks its questions in. Requires the OWNER or ADMIN role. Bulk-writes the order value on each listed question (written directly, not resequenced), then returns the agent's full question list in its new order. Entries whose fieldId doesn't belong to agentId are silently skipped.

resolve_comment

ChatGPT
Resolve a comment thread, or reopen it with resolved false. Only a thread's first comment can be resolved (400 on a reply). Resolving or reopening someone else's thread notifies its starter in Speak. Requires the comments update permission (every member by default). The change is recorded in your Speak Notifications under Comment (type comment).

restore_label

ChatGPT
Restore an archived label; restoring a group also restores its archived labels. A label whose name is now used by an active label stays archived and is counted in skippedCount. 409 means the label's own name is taken (rename the active one first); a merged label cannot be restored, and a label cannot be restored while its group is archived. Requires the labels delete permission (owners and admins by default). The change is recorded in your Speak Notifications under Label (type label).

resume_voice_test_run

ChatGPT
Resume a paused voice agent test run, transitioning it back to running. Requires the OWNER or ADMIN role. Valid only from paused. The run continues from the next scenario.

schedule_meeting_event

ChatGPT
Schedule the Speak AI meeting assistant to join and record an online meeting (Zoom, Google Meet, Microsoft Teams, or Webex). The assistant joins as a participant other attendees can see, at meetingDate or right away when meetingDate is omitted.

search_media

ChatGPT
Deep search across all media transcripts, insights, and metadata. Returns matching media with sentiment data, tags, and content excerpts. Use this to find specific topics, keywords, or themes across your entire library. For filtering by media type, folder, tags, or speakers, use the filterList parameter. Results are scoped by date range — defaults to current year if not specified.

set_media_thumbnail

ChatGPT
Set a custom thumbnail for a video. Send exactly one of imageUrl, imageBase64 or atSeconds. The image must be JPEG, PNG or WebP and at most 10 MB; the type is judged from the file bytes, not the name. atSeconds uses the video frame at that moment; this tool waits up to 60 seconds for the frame and returns its url, or says it is still processing (check later with get_media_status, which carries the thumbnail field). Each call replaces the current custom thumbnail, and there is no way back to the automatic one. Needs permission to edit the media. Errors: 400 bad input, unsupported image, blocked link or failed frame; 413 image too large; 409 a frame is already being made; 503 frame service busy, try again shortly.

share_dashboard

ChatGPT
Enable public sharing for a dashboard and return its share token + embed id. WARNING: by default the public link resolves with no passphrase, so anyone with the token can view the dashboard data until an owner sets one.

start_voice_test_run

ChatGPT
Start a test run of a voice agent's scripted test suite. The run sends each enabled scenario's user messages to the agent as text, in order, and grades every criterion; it does not place phone calls. Requires the OWNER or ADMIN role. Returns the run in queued status; poll get_active_voice_test_run for progress and results. Returns 404 if the agent or its test suite does not exist, and 409 if the suite has no enabled scenarios or the agent already has a queued, running, or paused run.

submit_chat_feedback

ChatGPT
Submit feedback on a chat response (thumbs up/down). Replaces any earlier feedback on that message, and the score and reason are shared with the Speak AI team for review.

toggle_media_favorite

ChatGPT
Mark or unmark media files as favorites for quick access.

toggle_prompt_favorite

ChatGPT
Mark or unmark a chat message as a favorite for easy retrieval later.

update_chat_title

ChatGPT
Update the title of a chat conversation for easier identification in history.

update_clip

ChatGPT
Update a clip's title, description, or tags.

update_comment

ChatGPT
Edit the text of a comment. Only the comment's author can edit its text (403 otherwise). To resolve or reopen a thread, use resolve_comment. The change is recorded in your Speak Notifications under Comment (type comment).

update_dashboard

ChatGPT
Update a dashboard. Two modes. (1) Metadata-only: pass just icon/assignTo/filters/isDefault/settings, with no spec fields and no revision, except that saving settings.profiles also needs the revision from get_dashboard (a stale one returns a 409). (2) Spec update: pass the FULL spec — title, source, dateRange, sections, widgets — plus revision. Widgets and sections are REPLACED, not merged, so call get_dashboard first and resend everything you want to keep. revision is the optimistic-concurrency token from get_dashboard/list_dashboards: the server accepts the write only if it still matches, then increments it. A 409 conflict means another writer saved first — re-fetch with get_dashboard, rebuild your changes on the fresh spec, and retry with the new revision. If settings.feedback.sheetWebhookUrl is set, each Feedback submission made on the shared dashboard is posted to that external Google Apps Script URL. Shared dashboard links cache widget data, so field and media edits can take up to about 5 minutes to show for date ranges that include today (15 at most) and up to about 17 minutes for past ranges (60 at most); any dashboard update refreshes it at once. Viewer settings (the settings input): Do not pass settings unless the user explicitly asks to change this dashboard's viewer settings. Saving fields, feedback or fieldEdits moves that dashboard onto the settings flow immediately: its media pages use these groups and this Feedback setup from then on. Each section (fields, feedback, fieldEdits, labels, comments, profiles) replaces that whole section when sent; a section left out keeps its saved value. Call get_dashboard first and resend every key of the section you change; a key left out resets to its default. Get field ids from list_fields. Ids that are not the company's fields are dropped when saving and returned in droppedFieldIds. When feedback.isEnabled is true, pass a non-empty feedback.fieldIds (score fields) rather than leaving it empty. Only set feedback.sheetWebhookUrl when the user gives the Apps Script URL. fieldEdits.fieldIds may list only fields that have allowed values (the server rejects any other field with a 400) and that the dashboard's media pages show; pass an empty fieldIds to turn field editing off. Labels and comments on the shared link are off until the user asks to turn them on. Mode 'apply' (labels) or 'reply' (comments) lets a link viewer write as one of the dashboard's feedback submitter names (feedback.submitters, even while feedback itself is off), or as another typed name only when feedback.allowOtherSubmitter is true. Anyone holding the share link can pick any of those names, because the link has no sign-in (an accepted risk; every entry is marked as made via this dashboard), so confirm the names with the user before saving a write mode. With no submitter names nobody can write. Label groups that are not active refuse the whole save with a 400 rather than being dropped. Saving only settings.profiles does not move media pages onto the settings flow. settings.profiles is a list of up to 5 groups, one per custom field (a field may appear only once), each with a label (for example Speakers or Products) and entries that give a value of that field a name, image, description and link. Entry names must equal that field's values (trim, case-insensitive), and a name or id listed twice in a group is rejected with a 400; they are matched by display string, so renaming a value in the media fields orphans its profile. Names, descriptions, links and images are PUBLIC to anyone with the dashboard link: write plain text only, no HTML, and confirm the descriptions and links with the user before saving. This MCP cannot upload images: leave imageKey out, or pass one copied unchanged from get_dashboard. To add an image over the API, POST it (multipart, JPEG/PNG/WEBP/GIF, max 2 MB) to /v1/dashboards/:dashboardId/profile-image and use the returned imageKey.

update_embed

ChatGPT
Update an existing embed widget: appearance/feature toggles via meta, and privacy. Passing mediaId with privacyMode sets that privacy mode on the media file itself; a public mode makes the media viewable by anyone with the embed link. Setting privacyMode clears any existing password unless a new one is supplied in the same call.

update_field

ChatGPT
Update a specific custom field by ID. name must always be supplied (the server replaces the field config).

update_folder

ChatGPT
Update a folder. name must always be supplied (the server replaces the folder config). Pass assignTo to replace who can access it; omit it to keep the current assignment.

update_folder_view

ChatGPT
Update an existing saved view. Replaces the whole view, so name, isDefault and columns must all be supplied.

update_label

ChatGPT
Rename, recolor, describe, move or reorder a label or group. Send only the fields to change. parentId null moves a label to the top level. An archived label cannot be edited (restore_label first), and a group cannot take a color or a parent. 409 means another active label under the same parent already has the name. Requires the labels update permission (every member by default). The change is recorded in your Speak Notifications under Label (type label).

update_media_label

ChatGPT
Change a labelled span on a transcript. Do exactly one of: labelIds to replace its labels; action keep to confirm its current anchor (after the transcript was edited and its status is shifted or needs_review); or action replace with a new quote or range to move it. A 409 that says the transcript changed means someone edited it after your revision was read: read the transcript again (get_transcript) and retry with the new range or quote. Nothing was saved. Keep also answers 409 when the anchor was built on an older revision: list_media_labels again first. Requires the labels assign permission (every member by default). The change is recorded in your Speak Notifications under Label (type label).

update_media_metadata

ChatGPT
Update metadata fields (name, description, tags, status) for an existing media file.

update_multiple_fields

ChatGPT
Set custom field values across media in a single batch operation, overwriting existing values. Scope the update with mediaIds, or with folderId to update every media in that folder; when both are given only mediaIds is used. Empty values are skipped, so this cannot clear a field. Shared dashboard links cache widget data, so field and media edits can take up to about 5 minutes to show for date ranges that include today (15 at most) and up to about 17 minutes for past ranges (60 at most); any dashboard update refreshes it at once.

update_recorder_questions

ChatGPT
Update the survey questions and respondent-info settings for a recorder. The questions array replaces the recorder's existing questions, and changes apply to the recorder's live public page right away.

update_recorder_settings

ChatGPT
Update configuration settings for a recorder (branding, capture options, etc.). Only the supplied settings change, and they apply to the recorder's live public page right away. name must always be supplied.

update_text_note

ChatGPT
Update an existing text note's name, content, or metadata. New text replaces the existing text. A note that has not been analyzed yet is analyzed after the update; an already analyzed note is not re-analyzed, so call reanalyze_text afterwards if its insights should reflect the new text.

update_transcript_speakers

ChatGPT
Update or rename speaker labels in a single media transcript. Call get_transcript first to read the speaker list — a speaker's label is whatever it was last renamed to, not a fixed value, so ids from an earlier turn may be stale. Renaming a speaker to a name another speaker already has is refused as a collision. Re-sending a rename that has already been applied is a safe no-op, so do not retry a call that reported success.

update_transcription

ChatGPT
Edit the official transcript text of a single media file by finding and replacing text. Replaces every occurrence of the original text with the replacement (leave replacement empty to delete the text) and reports how many occurrences were replaced. Use update_transcript_speakers to rename speaker labels instead.

update_user_group

ChatGPT
Update a user group's name and member list. NOTE: the users array is a FULL REPLACEMENT, not a delta — any member id you omit is removed from the group. Fetch the current members with list_user_groups first and send the complete list.

update_voice_agent

ChatGPT
Update a voice agent. Requires the OWNER or ADMIN role. Send only the top-level fields you want to change; agentId, companyId, and userId are immutable and silently dropped if sent. Object fields (voice, llm, avatar, chatSettings) each replace the stored object whole, not merge -- fetch get_voice_agent first and resend every key of an object field you're not fully replacing.

update_voice_agent_resource

ChatGPT
Partially update a voice agent resource — send at least one field. Requires the OWNER or ADMIN role. agentId cannot be changed. Changing url, title, or description re-triggers embedding.

update_voice_faq_suggestion

ChatGPT
Edit a still-pending FAQ suggestion's question and/or answer before adding it. Requires the OWNER or ADMIN role. Fails with 400 if the suggestion was already added or dismissed.

update_voice_question

ChatGPT
Partially update a voice agent question — only the fields you send are changed. Requires the OWNER or ADMIN role. agentId and templateId are fixed after create; sending them is silently dropped. Returns 409 when setting enabled: true on a disabled question while another enabled question on the same agent has a template with the same name, ignoring case and spacing (they save to the same answer key); other edits to an existing duplicate still succeed.

update_voice_test_suite

ChatGPT
Create or update a voice agent's test suite. Requires the OWNER or ADMIN role. Upserts. Send the full scenarios array you want to keep — it replaces the stored one, it is not merged.

update_webhook

ChatGPT
Update an existing webhook. This is a partial update — only the fields you supply are changed; callbackUrl is always required, the rest are left untouched if omitted.

upload_and_analyze

ChatGPT
Upload and transcribe media from a URL — a direct/public file URL, OR a shareable social/video page link, which Speak resolves to the underlying media automatically. Supported page links: YouTube, TikTok, Instagram, X/Twitter, Facebook, Reddit, SoundCloud, Twitch, Dailymotion, Streamable, Snapchat, Pinterest, Tumblr, Bilibili, VK, OK.ru and Rutube. Vimeo and Loom page links are not supported. Each accepted upload creates a media item. Returns media_id immediately; after this returns, poll get_media_status until state is 'processed' (typically 1-3 min for under 60min audio), then call get_media_insights for AI summaries. This async pattern is required for remote MCP transports — long blocking calls die at proxy idle timeouts.

upload_and_analyze_batch

ChatGPT
Import up to 25 audio or video URLs in one call. Each URL is imported the same way as upload_and_analyze, and transcription starts for each one. At most 5 uploads run at once. Each URL may be a direct public file URL or a page link from a supported platform, which the server resolves to the underlying media. Supported page links: YouTube, TikTok, Instagram, X/Twitter, Facebook, Reddit, SoundCloud, Twitch, Dailymotion, Streamable, Snapchat, Pinterest, Tumblr, Bilibili, VK, OK.ru and Rutube. Vimeo and Loom page links are not supported. Each accepted upload creates a media item. A failed URL does not stop the others, and the result lists every URL as uploaded (with its mediaId) or failed (with the reason). Returns once the uploads are accepted. Use get_media_status per mediaId, or list_media on the folder, to follow processing.

upload_media

ChatGPT
Import an audio or video file into Speak AI from a URL and start transcription. Accepts a direct public file URL, a URL returned by get_signed_upload_url, or a page link from a supported platform, which the server resolves to the underlying media. Supported page links: YouTube, TikTok, Instagram, X/Twitter, Facebook, Reddit, SoundCloud, Twitch, Dailymotion, Streamable, Snapchat, Pinterest, Tumblr, Bilibili, VK, OK.ru and Rutube. Vimeo and Loom page links are not supported. Creates a media item. The request fails if the file exceeds the plan's size limit or its duration cannot be read. Returns mediaId and state right away while processing continues in the background. Use get_media_status until state is 'processed', then get_transcript and get_media_insights.

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps