Speak AI MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SPEAK_API_KEY | Yes | Your Speak AI API key | |
| SPEAK_BASE_URL | No | API base URL | https://api.speakai.co |
| SPEAK_ACCESS_TOKEN | No | JWT access token (auto-fetched and refreshed) |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_signed_upload_urlA | 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. |
| upload_mediaA | Upload media from a URL — a direct/public file URL, a pre-signed S3 URL, or a shareable social/video link (YouTube, Instagram, TikTok, X, Facebook, Reddit, SoundCloud, and similar) which Speak resolves to the underlying media automatically. Processing is asynchronous — after uploading, use get_media_status to poll until state is 'processed' (typically 1-3 minutes for audio under 60 min), then use get_transcript and get_media_insights to retrieve results. For a single call that handles everything, use upload_and_analyze instead. For local files, use upload_local_file. (Vimeo links are not yet supported.) |
| list_mediaA | 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, get_media_insights, or ask_magic_prompt. For deep full-text search across transcripts, use search_media instead. |
| get_media_insightsA | 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 asking custom questions about a media file, use ask_magic_prompt instead. |
| get_transcriptA | 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. |
| update_transcript_speakersB | Update or rename speaker labels in a media transcript. |
| get_media_statusA | 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. |
| update_media_metadataB | Update metadata fields (name, description, tags, status) for an existing media file. |
| delete_mediaA | Permanently delete a media file and all associated transcripts and insights. |
| get_captionsA | Get captions for a media file. Captions are separate from full transcripts and are formatted for display/subtitles. |
| list_supported_languagesA | List all languages supported for transcription. Use the language codes when uploading media with a specific sourceLanguage. |
| get_media_statisticsA | Get workspace-level media statistics — total counts, processing status breakdown, storage usage, etc. |
| toggle_media_favoriteA | Mark or unmark media files as favorites for quick access. |
| reanalyze_mediaA | Re-run AI analysis on a media file using the latest models. Choose which parts to re-run via the flags below. |
| bulk_update_transcript_speakersA | Update or rename speaker labels across multiple media files in a single operation. Applies the same speaker mappings to every specified media file. Use this instead of calling update_transcript_speakers repeatedly when renaming speakers across a project or folder. |
| bulk_move_mediaA | Move multiple media files to a folder in a single operation. Use this for batch reorganization instead of updating media one by one. |
| create_text_noteA | Create a new text note in Speak AI for analysis. The content will be analyzed for insights, topics, and sentiment. |
| get_text_insightA | Retrieve AI-generated insights for a text note, including topics, sentiment, summaries, and action items. |
| reanalyze_textA | Trigger a re-analysis of an existing text note to regenerate insights with the latest AI models. |
| update_text_noteA | Update an existing text note's name, content, or metadata. Updating text content will trigger re-analysis. |
| export_mediaC | Export a media file's transcript or insights in various formats (pdf, docx, srt, vtt, txt, csv). |
| export_multiple_mediaB | Export multiple media files at once, optionally merged into a single file. |
| get_all_folder_viewsA | Retrieve all saved views across all folders. |
| get_folder_viewsA | Retrieve all saved views for a specific folder. |
| create_folder_viewA | Create a new saved view for a folder with a custom set of display columns. |
| update_folder_viewA | Update an existing saved view. Replaces the whole view, so |
| clone_folder_viewA | Duplicate an existing folder view into a target folder. |
| list_foldersA | List all folders in the workspace with pagination and sorting. |
| get_folder_infoB | Get detailed information about a specific folder including its contents. |
| create_folderA | Create a new folder in the workspace. |
| clone_folderB | Duplicate an existing folder and all of its contents. |
| update_folderA | Update a folder. |
| delete_folderA | Permanently delete a folder. Media within the folder will be moved, not deleted. |
| check_recorder_statusA | Check whether a recorder/survey is active and accepting submissions. |
| create_recorderB | Create a new recorder or survey for collecting audio/video submissions. |
| list_recordersA | List all recorders/surveys in the workspace. |
| clone_recorderA | Duplicate an existing recorder including all its settings and questions. |
| get_recorder_infoA | Get detailed information about a specific recorder including its settings and questions. |
| get_recorder_recordingsA | List all submissions/recordings collected by a specific recorder. |
| generate_recorder_urlA | Generate a shareable public URL for a recorder/survey. |
| update_recorder_settingsB | Update configuration settings for a recorder (branding, capture options, etc.). |
| update_recorder_questionsB | Update the survey questions and respondent-info settings for a recorder. |
| delete_recorderA | Permanently delete a recorder/survey. Existing recordings are preserved. |
| create_embedA | Create an embeddable player/transcript widget for a media file or a set of folders. Provide |
| update_embedA | Update an existing embed widget — appearance/feature toggles via |
| check_embedA | Check if an embed exists for a media file and retrieve its configuration. |
| get_embed_iframe_urlA | Get the iframe URL for embedding a media player/transcript on a webpage. |
| ask_magic_promptA | Ask an AI-powered question about your media using Speak AI's Magic Prompt. Supports querying a single file, multiple files, entire folders, or your whole workspace. Pass mediaIds for specific files, folderIds for entire folders, or omit both to search across all media. Use assistantType to get specialized responses (e.g., 'researcher' for academic analysis, 'sales' for deal insights). To continue a conversation, pass the promptId from a previous response. Returns a promptId — save it to continue the conversation with follow-up questions. |
| retry_magic_promptA | Retry a failed or incomplete Magic Prompt response. Use when a previous ask_magic_prompt call returned an error or incomplete answer. |
| get_chat_historyA | Get a list of recent Magic Prompt conversations. Returns conversation summaries with promptIds that can be used to continue conversations via ask_magic_prompt or retrieve full messages via get_chat_messages. |
| get_chat_messagesA | 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. |
| delete_chat_messageB | Delete a specific chat message from conversation history. |
| list_promptsA | List all available Magic Prompt templates. Use template IDs with ask_magic_prompt's assistantTemplateId parameter when using assistantType 'custom'. |
| get_favorite_promptsA | Get all prompts and answers that have been marked as favorites. Useful for finding saved insights and important AI-generated analysis. |
| toggle_prompt_favoriteA | Mark or unmark a chat message as a favorite for easy retrieval later. |
| update_chat_titleA | Update the title of a chat conversation for easier identification in history. |
| submit_chat_feedbackA | Submit feedback on a chat response (thumbs up/down). Helps improve AI answer quality. |
| get_chat_statisticsA | Get usage statistics for Magic Prompt / chat. Returns metrics on prompt usage, optionally filtered by date range. |
| export_chat_answerA | Export a specific Magic Prompt answer. Useful for saving AI-generated summaries, reports, or analysis results. |
| list_meeting_eventsA | List scheduled or completed meeting assistant events with filtering and pagination. |
| schedule_meeting_eventA | Schedule the Speak AI meeting assistant to join and record an upcoming meeting. |
| remove_assistant_from_meetingB | Remove the Speak AI assistant from an active or scheduled meeting. |
| delete_scheduled_assistantC | Cancel and delete a scheduled meeting assistant event. |
| get_live_meeting_transcriptA | 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. |
| list_fieldsA | List all custom fields defined in the workspace. |
| create_fieldB | Create a new custom field for categorizing and tagging media. |
| update_multiple_fieldsA | Set custom field values across media in a single batch operation. Scope the update with |
| update_fieldA | Update a specific custom field by ID. |
| list_automationsA | List automation rules in the workspace, with paging and filters. |
| list_automation_namesA | List automations as lightweight { name, id } pairs — useful for pickers without fetching full configs. |
| get_automationA | Get detailed information about a specific automation rule, including its trigger and step graph. |
| get_automation_runsA | Get the run history (executions) for an automation, with paging and optional status filter. |
| create_automationA | Create a new automation rule using the V2 graph model (trigger + ordered steps). Fetch valid step/trigger options with list_automation_triggers / list_automation_actions if unsure. |
| update_automationA | Update an existing automation rule. This replaces the whole automation (name, trigger, and steps), so fetch the current values with get_automation first and pass them all back with your changes. |
| toggle_automation_statusA | Toggle an automation rule between active and inactive. This flips the current state — call get_automation first if you need to know which way it will flip. |
| bulk_update_automation_statusA | Activate or deactivate multiple automations at once. |
| bulk_assign_automation_foldersA | Set the folder scope for multiple automations at once. Pass an empty folderIds array to remove the folder restriction (run on all folders). |
| run_automationsA | Manually run one or more automations against one or more media items now (outside the normal trigger). |
| delete_automationA | Permanently delete an automation rule. |
| list_automation_appsA | List the apps available in the automation catalog (e.g. Speak native + connected integrations). Use to discover what triggers/actions exist before building an automation. |
| list_automation_triggersA | List the trigger types available in the automation catalog. Optionally filter by app. |
| list_automation_actionsA | List the action/step types available in the automation catalog. Optionally filter by app. |
| create_webhookB | Create a new webhook to receive real-time notifications when events occur in Speak AI. |
| list_webhooksA | List all configured webhooks in the workspace. |
| update_webhookA | Update an existing webhook. This replaces the webhook config, so |
| delete_webhookA | Delete a webhook and stop receiving notifications at its endpoint. |
| search_mediaA | 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. |
| create_clipA | 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. |
| get_clipsA | List clips, optionally filtered by folder or media files. If clipId is provided, returns a single clip with its download URL (when processed). |
| update_clipB | Update a clip's title, description, or tags. |
| delete_clipA | Permanently delete a clip and its associated media file. |
| upload_and_analyzeA | Upload and transcribe media from a URL — a direct/public file URL, OR a shareable social/video link (YouTube, Instagram, TikTok, X, Facebook, Reddit, SoundCloud, and similar), which Speak resolves to the underlying media automatically. 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. (Vimeo links are not yet supported.) |
| upload_local_fileA | Upload a local file to Speak AI for transcription and analysis. Reads the file from disk, gets a pre-signed S3 URL, uploads the file, then creates the media entry. Works with any audio or video file on the local filesystem. After upload, use get_media_status to poll for completion, then get_transcript and get_media_insights. |
| list_usersA | 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_user_groupsA | 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. |
| create_user_groupA | 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. |
| update_user_groupA | 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. |
| delete_user_groupA | Delete a user group. This removes the group only; it does not delete the users themselves. |
| list_dashboardsA | List all analytics dashboards the caller can access, including share state. |
| get_dashboardA | Get a single dashboard's full config (widgets, filters, date range, folder scope). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| analyze-meeting | Upload a meeting recording and get a full analysis — transcript, insights, action items, and key takeaways. |
| research-across-media | Search for themes, patterns, or topics across multiple recordings or your entire media library. |
| meeting-brief | Prepare a brief from recent meetings — pull transcripts, extract decisions, and summarize open items. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| media-library | List of all media files in your Speak AI workspace |
| folders | List of all folders in your Speak AI workspace |
| supported-languages | List of supported transcription languages |
Latest Blog Posts
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/speakai/speakai-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server