# Speak AI (npm · @speakai/mcp-server)

Search recordings, summarize meetings, create clips, and automate workflows from your AI assistant.

- Trust score: 69/100 (medium)
- Change this week: +59
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `api.speakai.co`: 38/100, [markdown](https://verifymcp.io/servers/speakai-mcp-server/v1-mcp.md), [page](https://verifymcp.io/servers/speakai-mcp-server/v1-mcp)
- npm · `@speakai/mcp-server`: 69/100 (this document), [markdown](https://verifymcp.io/servers/speakai-mcp-server/speakai-mcp-server.md), [page](https://verifymcp.io/servers/speakai-mcp-server/speakai-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@speakai/mcp-server`
- Version: `1.18.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (111 of 112), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (111 of 112), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 3 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 78/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 14959 tokens (~130/item across 115 items; 112 tools + 3 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add speakai-mcp-server -- npx -y @speakai/mcp-server
```

### Codex

```bash
codex mcp add speakai-mcp-server -- npx -y @speakai/mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "speakai-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@speakai/mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add speakai-mcp-server --command npx --arg -y --arg @speakai/mcp-server
```

### Hermes

```yaml
mcp_servers:
  speakai-mcp-server:
    command: "npx"
    args: ["-y", "@speakai/mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "speakai-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@speakai/mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 69, +23)

- [security regression] Provenance: fail → unverified
- [security regression] Install scripts: pass → unverified
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [functional regression] Maintenance: pass → unverified
- [functional regression] License: pass → unverified
- [functional improvement] Dependency health: unverified → partial
- [functional] Licence: MIT

### 2026-08-01 (score 46, −10)

- [security regression] Known CVEs: partial → unverified
- [functional regression] Dependency health: partial → unverified

### 2026-07-31 (score 56, +50)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 6, −2)

- [functional regression] Security disclosure: fail → unverified
- [functional regression] Dependency health: partial → unverified
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Tool coverage: 100
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: unverified
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: fail
- [functional] Package version: 1.17.1 → 1.18.0

### 2026-07-28 (score 8, −2)

- [functional regression] Security disclosure: unverified → fail

### 2026-07-27 (score 10)

First indexed and scored.

## MCP tools (112)

### `get_signed_upload_url` (~120 tokens)

Get Signed Upload URL

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.

Input parameters:

- `filename` (string, required): Original filename including extension
- `isVideo` (boolean, required): Set true for video files, false for audio files
- `mimeType` (string, required): MIME type of the file, e.g. "audio/mp4" or "video/mp4"

Output parameters:

- `data`: Response payload from the Speak AI API

### `upload_media` (~330 tokens)

Upload Media from URL

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.)

Input parameters:

- `callbackUrl` (string): Webhook callback URL for this specific upload
- `description` (string): Description of the media file
- `fields` (array): Custom field values to attach to the media
- `folderId` (string): ID of the folder to place the media in
- `mediaType` (string, required): Type of media: "audio" or "video"
- `name` (string, required): Display name for the media file
- `sourceLanguage` (string): BCP-47 language code for transcription, e.g. "en-US" or "he-IL"
- `tags` (string): Comma-separated tags for the media
- `url` (string, required): Direct/public media file URL, pre-signed S3 URL, or a shareable social/video page link (e.g. an Instagram reel or TikTok URL) — page links are resolved to the underlying media server-side.

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_media` (~412 tokens)

List Media Files

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_ai_chat. For deep full-text search across transcripts, use search_media instead.

Input parameters:

- `filterMedia` (integer): Filter: 0=Uploaded, 1=Assigned, 2=Both (default: 2)
- `filterName` (string): Filter media by partial name match
- `folderId` (string): Filter media within a specific folder
- `from` (string): Start date for date range filter (ISO 8601)
- `include` (array): Additional data to include with each media item. Without this, only metadata is returned. Use 'transcription' to include full transcripts inline, 'speakers' for speaker details, 'keywords' for extrac…
- `isFavorites` (boolean): Filter to only show favorited media
- `mediaType` (string): Filter by media type: "audio", "video", or "text"
- `page` (integer): Page number for pagination (0-based, default: 0)
- `pageSize` (integer): Number of results per page (default: 25, max: 100). Page through larger sets rather than raising this — with include: ['transcription'] each result carries a full transcript, and an oversized respons…
- `sortBy` (string): Sort field and direction, e.g. "createdAt:desc" or "name:asc"
- `to` (string): End date for date range filter (ISO 8601)

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_media_insights` (~80 tokens)

Get Media Insights

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_ai_chat instead.

Input parameters:

- `mediaId` (string, required): Unique identifier of the media file

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_transcript` (~115 tokens)

Get Transcript

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.

Input parameters:

- `mediaId` (string, required): Unique identifier of the media file

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_transcript_speakers` (~146 tokens)

Rename Transcript Speakers

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.

Input parameters:

- `mediaId` (string, required): Unique identifier of the media file
- `speakers` (array, required): Speakers to rename. Each entry maps one existing speaker to its new name; speakers not listed are left untouched.

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_transcription` (~128 tokens)

Update Transcription Text

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.

Input parameters:

- `caseSensitive` (boolean): Match case exactly when finding the original text
- `mediaId` (string, required): Unique identifier of the media file
- `original` (string, required): Text to find in the transcript
- `replacement` (string, required): Text to replace it with (empty string deletes the matched text)

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_media_status` (~71 tokens)

Get Media Status

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.

Input parameters:

- `mediaId` (string, required): Unique identifier of the media file

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_media_metadata` (~141 tokens)

Update Media Metadata

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

Input parameters:

- `description` (string): Description or notes for the media
- `folderId` (string): Move media to this folder ID
- `manageBy` (string): User ID to assign management of this media to
- `mediaId` (string, required): Unique identifier of the media file
- `name` (string, required): Display name for the media (required — the server replaces the metadata)
- `remark` (string): Internal remark or note
- `status` (string): Media status value
- `tags` (array): Array of tags to assign to the media

Output parameters:

- `data`: Response payload from the Speak AI API

### `delete_media` (~37 tokens)

Delete Media File

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

Input parameters:

- `mediaId` (string, required): Unique identifier of the media file to delete

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_captions` (~46 tokens)

Get Captions

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

Input parameters:

- `mediaId` (string, required): Unique identifier of the media file

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_supported_languages` (~29 tokens)

List Supported Languages

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

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_media_statistics` (~27 tokens)

Get Media Statistics

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

Output parameters:

- `data`: Response payload from the Speak AI API

### `toggle_media_favorite` (~53 tokens)

Toggle Media Favorite

Mark or unmark media files as favorites for quick access.

Input parameters:

- `isFavorite` (boolean, required): true to mark as favorite, false to unmark
- `mediaIds` (array, required): Media file IDs to update

Output parameters:

- `data`: Response payload from the Speak AI API

### `reanalyze_media` (~105 tokens)

Re-analyze Media

Re-run AI analysis on a media file using the latest models. Choose which parts to re-run via the flags below.

Input parameters:

- `isEmbeddings` (boolean): Re-generate embeddings
- `isFillerWords` (boolean): Re-run filler-word detection
- `isInsights` (boolean): Re-run insights analysis
- `isSentiment` (boolean): Re-run sentiment analysis
- `mediaId` (string, required): Unique identifier of the media file to re-analyze

Output parameters:

- `data`: Response payload from the Speak AI API

### `bulk_update_transcript_speakers` (~261 tokens)

Bulk Rename Speakers Across Files

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.

Input parameters:

- `mediaIds` (array, required): Array of media IDs to update speakers for (max 500 per call)
- `speakers` (array, required): Speaker mappings applied to every file in mediaIds. Speakers not listed, and files with no matching speaker, are left untouched.

Output parameters:

- `data`: Response payload from the Speak AI API

### `bulk_move_media` (~64 tokens)

Bulk Move Media Files

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

Input parameters:

- `folderId` (string, required): Target folder ID to move media into
- `mediaIds` (array, required): Array of media IDs to move

Output parameters:

- `data`: Response payload from the Speak AI API

### `create_text_note` (~134 tokens)

Create Text Note

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

Input parameters:

- `callbackUrl` (string): Webhook callback URL for completion notification
- `description` (string): Description for the text note
- `fields` (array): Custom field values to attach to the text note
- `folderId` (string): ID of the folder to place the note in
- `name` (string, required): Title/name for the text note
- `tags` (string): Comma-separated tags or array of tag strings
- `text` (string): Full text content to analyze

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_text_insight` (~44 tokens)

Get Text Note Insights

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

Input parameters:

- `mediaId` (string, required): Unique identifier of the text note

Output parameters:

- `data`: Response payload from the Speak AI API

### `reanalyze_text` (~46 tokens)

Re-analyze Text Note

Trigger a re-analysis of an existing text note to regenerate insights with the latest AI models.

Input parameters:

- `mediaId` (string, required): Unique identifier of the text note to reanalyze

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_text_note` (~105 tokens)

Update Text Note

Update an existing text note's name, content, or metadata. Updating text content will trigger re-analysis.

Input parameters:

- `description` (string): Updated description
- `folderId` (string): Move to a different folder
- `mediaId` (string, required): Unique identifier of the text note
- `name` (string): New name for the text note
- `tags` (string): Updated comma-separated tags
- `text` (string): New text content (will trigger re-analysis)

Output parameters:

- `data`: Response payload from the Speak AI API

### `export_media` (~145 tokens)

Export Media Transcript

Export a media file's transcript or insights in various formats (pdf, docx, srt, vtt, txt, csv).

Input parameters:

- `fileType` (string, required): Desired export format
- `isInsightVisualized` (boolean): Include insight visualizations
- `isRedacted` (boolean): Apply PII redaction to export
- `isSpeakerEmail` (boolean): Include speaker emails in export
- `isSpeakerNames` (boolean): Include speaker names in export
- `isTimeStamps` (boolean): Include timestamps in export
- `mediaId` (string, required): Unique identifier of the media file
- `redactedCategories` (array): Specific categories to redact

Output parameters:

- `data`: Response payload from the Speak AI API

### `export_multiple_media` (~149 tokens)

Export Multiple Media Files

Export multiple media files at once, optionally merged into a single file.

Input parameters:

- `fileType` (string, required): Desired export format
- `folderId` (string): Folder ID for the merged export
- `isInsightVisualized` (boolean): Include insight visualizations
- `isMerged` (boolean): Merge all exports into a single file
- `isRedacted` (boolean): Apply PII redaction to export
- `isSpeakerEmail` (boolean): Include speaker emails in export
- `isSpeakerNames` (boolean): Include speaker names in export
- `isTimeStamps` (boolean): Include timestamps in export
- `mediaIds` (array, required): Array of media IDs to export

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_all_folder_views` (~18 tokens)

Get All Folder Views

Retrieve all saved views across all folders.

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_folder_views` (~31 tokens)

Get Folder Views

Retrieve all saved views for a specific folder.

Input parameters:

- `folderId` (string, required): Unique identifier of the folder

Output parameters:

- `data`: Response payload from the Speak AI API

### `create_folder_view` (~82 tokens)

Create Folder View

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

Input parameters:

- `columns` (array, required): Ordered list of columns shown in the view
- `folderId` (string, required): Unique identifier of the folder
- `isDefault` (boolean): Whether this view is the folder's default view
- `name` (string, required): Display name for the view

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_folder_view` (~110 tokens)

Update Folder View

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

Input parameters:

- `columns` (array, required): Ordered list of columns shown in the view
- `folderId` (string, required): Unique identifier of the folder
- `isDefault` (boolean, required): Whether this view is the folder's default view
- `name` (string, required): Display name for the view
- `viewId` (string, required): Unique identifier of the view to update

Output parameters:

- `data`: Response payload from the Speak AI API

### `clone_folder_view` (~102 tokens)

Clone Folder View

Duplicate an existing folder view into a target folder.

Input parameters:

- `isDefault` (boolean): Whether the cloned view becomes the target folder's default
- `name` (string, required): Display name for the cloned view
- `sourceFolderId` (string, required): Folder that currently holds the view
- `targetFolderId` (string, required): Folder to copy the view into (must differ from sourceFolderId)
- `viewId` (string, required): Unique identifier of the view to clone

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_folders` (~79 tokens)

List Folders

List all folders in the workspace with pagination and sorting.

Input parameters:

- `page` (integer): Page number (0-based, default: 0)
- `pageSize` (integer): Results per page (default: 20, max: 500)
- `sortBy` (string): Sort field and direction, e.g. "createdAt:desc"

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_folder_info` (~33 tokens)

Get Folder Info

Get detailed information about a specific folder including its contents.

Input parameters:

- `folderId` (string, required): Unique identifier of the folder

Output parameters:

- `data`: Response payload from the Speak AI API

### `create_folder` (~39 tokens)

Create Folder

Create a new folder in the workspace.

Input parameters:

- `description` (string): Optional folder description
- `name` (string, required): Display name for the new folder

Output parameters:

- `data`: Response payload from the Speak AI API

### `clone_folder` (~91 tokens)

Clone Folder

Duplicate an existing folder and all of its contents.

Input parameters:

- `assignTo` (array): User IDs to assign the cloned folder to
- `description` (string): Description for the cloned folder
- `folderId` (string, required): ID of the folder to clone
- `isSaveDefaultView` (boolean): Whether to copy the source folder's default view
- `name` (string): Name for the cloned folder

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_folder` (~62 tokens)

Update Folder

Update a folder. `name` must always be supplied (the server replaces the folder config).

Input parameters:

- `description` (string): Optional folder description
- `folderId` (string, required): Unique identifier of the folder
- `name` (string, required): Display name for the folder

Output parameters:

- `data`: Response payload from the Speak AI API

### `delete_folder` (~40 tokens)

Delete Folder

Permanently delete a folder. Media within the folder will be moved, not deleted.

Input parameters:

- `folderId` (string, required): Unique identifier of the folder to delete

Output parameters:

- `data`: Response payload from the Speak AI API

### `check_recorder_status` (~34 tokens)

Check Recorder Status

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

Input parameters:

- `token` (string, required): Unique token identifying the recorder

Output parameters:

- `data`: Response payload from the Speak AI API

### `create_recorder` (~390 tokens)

Create Recorder

Create a new recorder or survey for collecting audio/video submissions.

Input parameters:

- `clientInformation` (object): Respondent info & questions: { name:boolean, email:boolean, questions:[…], consent?:{ isEnabled, title, description, yesButtonLabel, noButtonLabel, isRequired, fieldId? } }. Question shape — Each: {…
- `description` (string): Recorder description
- `duration` (object): Recording duration: { minDuration, maxDuration } in seconds
- `folderId` (string): Folder to store recordings in
- `isAutoAnalyze` (boolean): Whether to auto-analyze submissions
- `meta` (object): Branding/customization: { primaryColor, backgroundImg, logo, fontColor, fontFamily, theme, customCSS, hideWaveform, hideTitle, hideDescription, hideSubmitButton, submitButtonLabel, countdown, hideIma…
- `name` (string, required): Display name for the recorder
- `notification` (object): Notification toggles: { upload, client } — booleans
- `notifyUsers` (array): User IDs to notify on new submissions
- `options` (object): Capture options: { audio, video, screenShare, liveTranscription, upload:{ file, text, multiple, url } } — all booleans
- `sourceLanguage` (string): Transcription language code (e.g. en-US)

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_recorders` (~77 tokens)

List Recorders

List all recorders/surveys in the workspace.

Input parameters:

- `page` (integer): Page number (0-based, default: 0)
- `pageSize` (integer): Results per page (default: 20, max: 500)
- `sortBy` (string): Sort field, e.g. "createdAt:desc"

Output parameters:

- `data`: Response payload from the Speak AI API

### `clone_recorder` (~71 tokens)

Clone Recorder

Duplicate an existing recorder including all its settings and questions.

Input parameters:

- `description` (string): Description for the cloned recorder
- `folderId` (string): Folder for the cloned recorder
- `name` (string): Name for the cloned recorder
- `recorderId` (string, required): ID of the recorder to clone

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_recorder_info` (~36 tokens)

Get Recorder Info

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

Input parameters:

- `recorderId` (string, required): Unique identifier of the recorder

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_recorder_recordings` (~36 tokens)

Get Recorder Submissions

List all submissions/recordings collected by a specific recorder.

Input parameters:

- `recorderId` (string, required): Unique identifier of the recorder

Output parameters:

- `data`: Response payload from the Speak AI API

### `generate_recorder_url` (~35 tokens)

Generate Recorder Share URL

Generate a shareable public URL for a recorder/survey.

Input parameters:

- `recorderId` (string, required): Unique identifier of the recorder

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_recorder_settings` (~257 tokens)

Update Recorder Settings

Update configuration settings for a recorder (branding, capture options, etc.). `name` must always be supplied.

Input parameters:

- `description` (string): Recorder description
- `duration` (object): Recording duration: { minDuration, maxDuration } in seconds
- `folderId` (string): Folder to store recordings in
- `isAutoAnalyze` (boolean): Whether to auto-analyze submissions
- `meta` (object): Branding/customization: { primaryColor, backgroundImg, logo, fontColor, fontFamily, theme, customCSS, hideWaveform, hideTitle, hideDescription, hideSubmitButton, submitButtonLabel, countdown, hideIma…
- `name` (string, required): Display name for the recorder
- `notification` (object): Notification toggles: { upload, client } — booleans
- `notifyUsers` (array): User IDs to notify on new submissions
- `options` (object): Capture options: { audio, video, screenShare, liveTranscription, upload:{ file, text, multiple, url } } — all booleans
- `recorderId` (string, required): Unique identifier of the recorder
- `sourceLanguage` (string): Transcription language code (e.g. en-US)

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_recorder_questions` (~221 tokens)

Update Recorder Questions

Update the survey questions and respondent-info settings for a recorder.

Input parameters:

- `consent` (object): Consent screen: { isEnabled, title, description, yesButtonLabel, noButtonLabel, isRequired, fieldId? }
- `email` (boolean): Whether to collect the respondent's email
- `name` (boolean): Whether to collect the respondent's name
- `questions` (array, required): Survey questions. Each: { question, isRequired, answerType, options?, includeOther?, fieldId? }. answerType must be one of: "single", "multiple", "checkbox", "radiobutton", "dropdownlist", "date", "t…
- `recorderId` (string, required): Unique identifier of the recorder

Output parameters:

- `data`: Response payload from the Speak AI API

### `delete_recorder` (~37 tokens)

Delete Recorder

Permanently delete a recorder/survey. Existing recordings are preserved.

Input parameters:

- `recorderId` (string, required): Unique identifier of the recorder to delete

Output parameters:

- `data`: Response payload from the Speak AI API

### `create_embed` (~85 tokens)

Create Embed Widget

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.

Input parameters:

- `folderIds` (array): Folder IDs to embed (for a folder/library embed)
- `mediaId` (string): Media file to embed (for a single-media embed)

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_embed` (~180 tokens)

Update Embed Widget

Update an existing embed widget — appearance/feature toggles via `meta`, plus scope and privacy.

Input parameters:

- `embedId` (string, required): Unique identifier of the embed
- `embedType` (string): Embed type
- `folderIds` (array): Folder IDs the embed covers
- `mediaId` (string): Media file the embed points to
- `meta` (object): Embed appearance & feature toggles: { backgroundImg, logo, primaryColor, titleColor, chatWelcomeMessage, assistantTemplateId, isTitle, isDescription, isRemarks, isDataVizDownloadable, isSEOIndexing,…
- `privacyMode` (string): Privacy mode for the embed

Output parameters:

- `data`: Response payload from the Speak AI API

### `check_embed` (~36 tokens)

Check Embed Exists

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

Input parameters:

- `mediaId` (string, required): Unique identifier of the media file

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_embed_iframe_url` (~40 tokens)

Get Embed Iframe URL

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

Input parameters:

- `mediaId` (string, required): Unique identifier of the media file

Output parameters:

- `data`: Response payload from the Speak AI API

### `ask_ai_chat` (~490 tokens)

Ask AI Chat

Ask an AI-powered question about your media using Speak AI's AI Chat. 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.

Input parameters:

- `assistantTemplateId` (string): Required when assistantType is 'custom'. ID of a custom assistant template from list_prompts.
- `assistantType` (string): Assistant persona: 'general' (default), 'researcher' (academic), 'marketer' (content), 'sales' (deals), 'recruiter' (hiring). Use 'custom' with assistantTemplateId.
- `endDate` (string): End date for date range filter (ISO 8601, e.g., '2025-03-31')
- `fieldId` (string): Scope the prompt to a single custom field
- `fieldIds` (array): Scope the prompt to multiple custom fields (max 10)
- `filters` (object): Advanced filter object to scope which media the prompt runs over
- `folderId` (string): Single folder ID to scope the query to. Use folderIds for multiple folders.
- `folderIds` (array): Array of folder IDs to scope the query to. Omit along with mediaIds to search across all media.
- `isIndividualPrompt` (boolean): When true, processes each media file separately instead of combining context. Useful for comparing responses across files.
- `mediaIds` (array): Array of media IDs to query. Omit along with folderIds to search across all media in your workspace.
- `prompt` (string, required): The question or prompt to ask about the media
- `promptId` (string): ID of an existing conversation to continue. Pass this to maintain chat context across multiple questions.
- `speakers` (array): Filter to specific speaker IDs from the transcript
- `startDate` (string): Start date for date range filter (ISO 8601, e.g., '2025-01-01')
- `tags` (array): Filter media by tags

Output parameters:

- `data`: Response payload from the Speak AI API

### `retry_ai_chat` (~64 tokens)

Retry AI Chat

Retry a failed or incomplete AI Chat response. Use when a previous ask_ai_chat call returned an error or incomplete answer.

Input parameters:

- `messageId` (string, required): ID of the specific message to retry
- `promptId` (string, required): ID of the conversation containing the failed message

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_chat_history` (~62 tokens)

Get Chat History

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

Input parameters:

- `limit` (integer): Number of recent conversations to return (default: 10)

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_chat_messages` (~145 tokens)

Get Chat Messages

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.

Input parameters:

- `folderId` (string): Filter messages by folder ID
- `mediaIds` (string): Filter by media IDs (comma-separated)
- `page` (integer): Page number for pagination (0-based, default: 0)
- `pageSize` (integer): Results per page (default: 25, max: 500)
- `promptId` (string): Filter to a specific conversation by its ID
- `query` (string): Search text in prompts and answers

Output parameters:

- `data`: Response payload from the Speak AI API

### `delete_chat_message` (~32 tokens)

Delete Chat Message

Delete a specific chat message from conversation history.

Input parameters:

- `promptId` (string, required): ID of the message to delete

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_prompts` (~35 tokens)

List Prompt Templates

List all available AI Chat templates. Use template IDs with ask_ai_chat's assistantTemplateId parameter when using assistantType 'custom'.

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_favorite_prompts` (~34 tokens)

Get Favorite Prompts

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

Output parameters:

- `data`: Response payload from the Speak AI API

### `toggle_prompt_favorite` (~71 tokens)

Toggle Prompt Favorite

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

Input parameters:

- `isFavorite` (boolean, required): true to mark as favorite, false to remove
- `messageId` (string, required): ID of the specific message to favorite/unfavorite
- `promptId` (string, required): ID of the conversation

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_chat_title` (~48 tokens)

Rename Chat

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

Input parameters:

- `promptId` (string, required): ID of the conversation to rename
- `title` (string, required): New title for the conversation

Output parameters:

- `data`: Response payload from the Speak AI API

### `submit_chat_feedback` (~86 tokens)

Submit Chat Feedback

Submit feedback on a chat response (thumbs up/down). Helps improve AI answer quality.

Input parameters:

- `messageId` (string, required): ID of the message to rate
- `promptId` (string, required): ID of the conversation
- `reason` (string): Optional explanation for the feedback
- `score` (number, required): Feedback score: 1 for thumbs up, -1 for thumbs down

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_chat_statistics` (~64 tokens)

Get Chat Statistics

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

Input parameters:

- `endDate` (string): End date for stats (ISO 8601)
- `startDate` (string): Start date for stats (ISO 8601)

Output parameters:

- `data`: Response payload from the Speak AI API

### `export_chat_answer` (~71 tokens)

Export Chat Answer

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

Input parameters:

- `fileType` (string, required): Export file format
- `messageId` (string, required): ID of the specific message/answer to export
- `promptId` (string, required): ID of the conversation to export

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_meeting_events` (~122 tokens)

List Meeting Events

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

Input parameters:

- `meetingStatus` (string): Filter by status (e.g. scheduled, completed, cancelled)
- `page` (integer): Page number (0-based, default: 0)
- `pageSize` (integer): Results per page (default: 20, max: 500)
- `platformType` (string): Filter by platform. Allowed values: zoom, googleMeet, microsoftTeams, webex. Comma-separate for multiple. Must match these exact strings — server validates strictly.

Output parameters:

- `data`: Response payload from the Speak AI API

### `schedule_meeting_event` (~104 tokens)

Schedule AI Meeting Assistant

Schedule the Speak AI meeting assistant to join and record an upcoming meeting.

Input parameters:

- `folderId` (string): Folder ID to store the recording in
- `meetingDate` (string): ISO 8601 datetime for when the meeting starts
- `meetingLanguage` (string): Transcription language code for the meeting (e.g. en-US)
- `meetingURL` (string, required): URL of the meeting to join
- `title` (string, required): Display title for the event

Output parameters:

- `data`: Response payload from the Speak AI API

### `remove_assistant_from_meeting` (~41 tokens)

Remove Assistant from Meeting

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

Input parameters:

- `meetingAssistantEventId` (string, required): Unique identifier of the meeting assistant event

Output parameters:

- `data`: Response payload from the Speak AI API

### `delete_scheduled_assistant` (~39 tokens)

Cancel Scheduled Meeting Assistant

Cancel and delete a scheduled meeting assistant event.

Input parameters:

- `meetingAssistantEventId` (string, required): Unique identifier of the meeting assistant event to cancel

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_live_meeting_transcript` (~144 tokens)

Get Live Meeting Transcript

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.

Input parameters:

- `mediaId` (string): Media id of the live meeting. Either this or meetingAssistantEventId is required.
- `meetingAssistantEventId` (string): Meeting assistant event id from list_meeting_events. Either this or mediaId is required.
- `sinceEndInSec` (number): Pass the nextCursor value from your previous response to skip already-seen sentences. Omit on the first call.

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_fields` (~17 tokens)

List Custom Fields

List all custom fields defined in the workspace.

Output parameters:

- `data`: Response payload from the Speak AI API

### `create_field` (~157 tokens)

Create Custom Field

Create a new custom field for categorizing and tagging media.

Input parameters:

- `allowedValues` (array): Allowed values for select/multi-select field types
- `allowedValuesMode` (string): Whether one or multiple allowed values can be selected
- `description` (string): Optional description for the field
- `name` (string, required): Display name for the field
- `notApplicableValues` (string): Value(s) treated as not-applicable
- `otherValues` (boolean): Whether values outside allowedValues are permitted
- `privacyMode` (string): Privacy mode for the field
- `prompt` (string): AI prompt used to auto-populate the field
- `type` (string, required): Field type (text, number, select, etc.)

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_multiple_fields` (~92 tokens)

Bulk Update Custom Field Values

Set custom field values across media in a single batch operation. Scope the update with `folderId` (all media in a folder) and/or `mediaIds`.

Input parameters:

- `fields` (array, required): Array of field id/value pairs to set
- `folderId` (string): Apply the field values to all media in this folder
- `mediaIds` (array): Apply the field values to these specific media files

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_field` (~172 tokens)

Update Custom Field

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

Input parameters:

- `allowedValues` (array): Allowed values for select/multi-select field types
- `allowedValuesMode` (string): Whether one or multiple allowed values can be selected
- `description` (string): Optional description for the field
- `id` (string, required): Unique identifier of the field
- `name` (string, required): Display name for the field
- `notApplicableValues` (string): Value(s) treated as not-applicable
- `otherValues` (boolean): Whether values outside allowedValues are permitted
- `privacyMode` (string): Privacy mode for the field
- `prompt` (string): AI prompt used to auto-populate the field
- `type` (string): Field type

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_automations` (~117 tokens)

List Automations

List automation rules in the workspace, with paging and filters.

Input parameters:

- `folderIds` (string): Comma-separated folder ids to filter by
- `isActive` (boolean): Filter by active state
- `page` (integer): 0-based page index
- `pageSize` (integer): Results per page
- `query` (string): Free-text search over automation names
- `runType` (string): Filter by run type
- `sortBy` (string): Sort expression, e.g. "createdAt:desc"

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_automation_names` (~31 tokens)

List Automation Names

List automations as lightweight { name, id } pairs — useful for pickers without fetching full configs.

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_automation` (~38 tokens)

Get Automation Details

Get detailed information about a specific automation rule, including its trigger and step graph.

Input parameters:

- `automationId` (string, required): Unique identifier of the automation

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_automation_runs` (~76 tokens)

Get Automation Runs

Get the run history (executions) for an automation, with paging and optional status filter.

Input parameters:

- `automationId` (string, required): Unique identifier of the automation
- `page` (integer): 0-based page index
- `pageSize` (integer): Results per page
- `status` (string): Filter runs by status

Output parameters:

- `data`: Response payload from the Speak AI API

### `create_automation` (~1474 tokens)

Create Automation

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. For inbound-webhook automations the response includes inboundWebhook.inboundUrl (where to POST payloads) — recommended flow: create, send a test payload to the URL with ?test=1, call get_inbound_webhook to see mappable payload tokens, then update_automation to wire tokens/fieldsMap.

Input parameters:

- `description` (string): Optional description
- `isActive` (boolean): Whether the automation is active (defaults to true)
- `name` (string, required): Display name for the automation
- `runType` (string): Run type: "instant" (default, runs on trigger) or "schedule" (cron)
- `schedule` (object): Required when runType="schedule": { timePeriod: "today"|"yesterday"|"last7days"|"last14days"|"thisWeek", repeatAt: string }
- `steps` (array, required): Ordered array of graph steps (1-20). Each step is an object: { stepId: string (unique within the array), stepType: one of "speak-upload" | "magic-prompt" | "translation" | "filter" | "condition" | "n…
- `trigger` (object, required): Trigger object (the automation's root). Always include triggerSlug. Supported shapes: - Media analyzed in folder(s): { type: "folders", triggerSlug: "media_analyzed", folderIds: string[] (min 1) } -…
- `triggers` (array): Optional additional "Or" triggers (max 10): the automation runs when ANY of them fires, sharing the same steps. Each entry mirrors the trigger shapes above but cannot be an inbound webhook and carrie…

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_automation` (~1424 tokens)

Update Automation

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.

Input parameters:

- `automationId` (string, required): Unique identifier of the automation
- `description` (string): Optional description
- `isActive` (boolean): Whether the automation is active (defaults to true)
- `name` (string, required): Display name for the automation
- `runType` (string): Run type: "instant" (default, runs on trigger) or "schedule" (cron)
- `schedule` (object): Required when runType="schedule": { timePeriod: "today"|"yesterday"|"last7days"|"last14days"|"thisWeek", repeatAt: string }
- `steps` (array, required): Ordered array of graph steps (1-20). Each step is an object: { stepId: string (unique within the array), stepType: one of "speak-upload" | "magic-prompt" | "translation" | "filter" | "condition" | "n…
- `trigger` (object, required): Trigger object (the automation's root). Always include triggerSlug. Supported shapes: - Media analyzed in folder(s): { type: "folders", triggerSlug: "media_analyzed", folderIds: string[] (min 1) } -…
- `triggers` (array): Optional additional "Or" triggers (max 10): the automation runs when ANY of them fires, sharing the same steps. Each entry mirrors the trigger shapes above but cannot be an inbound webhook and carrie…

Output parameters:

- `data`: Response payload from the Speak AI API

### `toggle_automation_status` (~54 tokens)

Toggle Automation Status

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.

Input parameters:

- `automationId` (string, required): Unique identifier of the automation

Output parameters:

- `data`: Response payload from the Speak AI API

### `bulk_update_automation_status` (~53 tokens)

Bulk Update Automation Status

Activate or deactivate multiple automations at once.

Input parameters:

- `automationIds` (array, required): Automation ids to update
- `isActive` (boolean, required): true to activate, false to deactivate, for all listed automations

Output parameters:

- `data`: Response payload from the Speak AI API

### `bulk_assign_automation_folders` (~74 tokens)

Bulk Assign Automation Folders

Set the folder scope for multiple automations at once. Pass an empty folderIds array to remove the folder restriction (run on all folders).

Input parameters:

- `automationIds` (array, required): Automation ids to update
- `folderIds` (array, required): Folder ids to scope the automations to. Empty array = all folders.

Output parameters:

- `data`: Response payload from the Speak AI API

### `run_automations` (~59 tokens)

Run Automations

Manually run one or more automations against one or more media items now (outside the normal trigger).

Input parameters:

- `automationIds` (array, required): Automation ids to run
- `mediaIds` (array, required): Media ids to run the automations against

Output parameters:

- `data`: Response payload from the Speak AI API

### `delete_automation` (~31 tokens)

Delete Automation

Permanently delete an automation rule.

Input parameters:

- `automationId` (string, required): Unique identifier of the automation to delete

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_automation_apps` (~40 tokens)

List Automation Apps

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.

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_automation_triggers` (~41 tokens)

List Automation Triggers

List the trigger types available in the automation catalog. Optionally filter by app.

Input parameters:

- `app` (string): Filter triggers to a specific app slug

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_automation_actions` (~42 tokens)

List Automation Actions

List the action/step types available in the automation catalog. Optionally filter by app.

Input parameters:

- `app` (string): Filter actions to a specific app slug

Output parameters:

- `data`: Response payload from the Speak AI API

### `create_webhook` (~67 tokens)

Create Webhook

Create a new webhook to receive real-time notifications when events occur in Speak AI.

Input parameters:

- `callbackUrl` (string, required): HTTPS endpoint URL to receive webhook payloads
- `description` (string): Optional description for the webhook
- `events` (array): Array of event types to subscribe to

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_webhooks` (~18 tokens)

List Webhooks

List all configured webhooks in the workspace.

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_webhook` (~83 tokens)

Update Webhook

Update an existing webhook. This replaces the webhook config, so `callbackUrl` must always be supplied.

Input parameters:

- `callbackUrl` (string, required): HTTPS endpoint URL to receive webhook payloads
- `description` (string): Optional description for the webhook
- `events` (array): Updated array of event types
- `webhookId` (string, required): Unique identifier of the webhook

Output parameters:

- `data`: Response payload from the Speak AI API

### `provision_inbound_webhook` (~88 tokens)

Provision Inbound Webhook

Provision a standalone inbound webhook and get its public receive URL (inboundUrl) BEFORE creating an automation. Webhook-first flow: provision, send a test payload to the URL (append ?test=1 to only capture a sample without running anything), inspect mappable payload paths with get_inbound_webhook, then pass the webhookId as trigger.webhookId to create_automation.

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_inbound_webhook` (~185 tokens)

Get Inbound Webhook

Get an inbound webhook's public receive URL, captured sample payload, and the ready-to-paste {{trigger.payload.*}} tokens for mapping payload values into automation steps (speak-upload name/sourceUrl, fieldsMap custom-field values, notify/outbound-webhook templates). Pass either the webhookId or the automationId of an inbound-webhook automation. If no sample has been captured yet, send a test payload to the inboundUrl first (append ?test=1 to capture without running the automation).

Input parameters:

- `automationId` (string): Automation id — resolves the bound webhookId and childKey automatically
- `childKey` (string): Override the dot-path used to narrow mappable payload paths (defaults to the automation's trigger.childKey)
- `webhookId` (string): Inbound webhook id (from provision_inbound_webhook or an automation's trigger.webhookId)

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_webhook_attempts` (~104 tokens)

Get Webhook Attempts

Get the delivery log for an inbound webhook: each received request with its HTTP acknowledgement status (200 = sample captured, 202 = accepted and run started, 401/403 = rejected) and the automation run it started. Use get_automation_runs for the run outcomes themselves.

Input parameters:

- `page` (integer): 0-based page index
- `pageSize` (integer): Results per page
- `webhookId` (string, required): Unique identifier of the inbound webhook

Output parameters:

- `data`: Response payload from the Speak AI API

### `delete_webhook` (~35 tokens)

Delete Webhook

Delete a webhook and stop receiving notifications at its endpoint.

Input parameters:

- `webhookId` (string, required): Unique identifier of the webhook to delete

Output parameters:

- `data`: Response payload from the Speak AI API

### `search_media` (~175 tokens)

Search Media Library

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.

Input parameters:

- `endDate` (string): End date for search range (ISO 8601). Defaults to now.
- `filterList` (array): Advanced filters for narrowing search results by tags, speakers, media type, sentiment, folder, etc.
- `query` (string, required): Search query — searches across transcripts, insights, and metadata
- `startDate` (string): Start date for search range (ISO 8601). Defaults to start of current year.

Output parameters:

- `data`: Response payload from the Speak AI API

### `create_clip` (~159 tokens)

Create Highlight Clip

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.

Input parameters:

- `description` (string): Description of the clip
- `mediaType` (string, required): Output media type
- `mergeStrategy` (string): How to merge multiple segments (default: CONCATENATE)
- `tags` (array): Tags for the clip
- `timeRanges` (array, required): Array of time ranges to include in the clip. Each specifies a source media and start/end times.
- `title` (string, required): Title for the clip

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_clips` (~80 tokens)

List Clips

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

Input parameters:

- `clipId` (string): Get a specific clip by ID
- `folderId` (string): Filter clips by folder ID
- `mediaIds` (array): Filter clips by source media file IDs

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_clip` (~60 tokens)

Update Clip

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

Input parameters:

- `clipId` (string, required): ID of the clip to update
- `description` (string): New description
- `tags` (array): New tags
- `title` (string): New title

Output parameters:

- `data`: Response payload from the Speak AI API

### `delete_clip` (~33 tokens)

Delete Clip

Permanently delete a clip and its associated media file.

Input parameters:

- `clipId` (string, required): ID of the clip to delete

Output parameters:

- `data`: Response payload from the Speak AI API

### `build_automation` (~955 tokens)

Build Automation

High-level automation builder: create (or update) a Speak automation from a friendly spec without knowing the wire format. Accepts folder/custom-field NAMES (resolved to ids; missing folders are auto-created), payload.<path> shorthand for webhook tokens, and simple step types (filter, branch, upload, ai_chat, translate, notify, call_webhook). For inbound-webhook automations the result includes the receive URL and mappable payload tokens. Prefer this over create_automation unless you need raw control.

Input parameters:

- `automationId` (string): Update this existing automation instead of creating a new one (full replace)
- `description` (string): Optional description
- `isActive` (boolean): Whether the automation is active (default true)
- `name` (string, required): Display name for the automation
- `orTriggers` (array): Additional "Or" triggers (same shape as trigger, but inbound_webhook is not allowed here). The automation runs when ANY trigger fires.
- `steps` (array, required): Ordered actions. Each step is an object with a `do` key plus its options. String values may be literals, "payload.<path>" shorthand (converted to {{trigger.payload.<path>}} only when it is the ENTIRE…
- `trigger` (object, required): What starts the automation. Object with: - on (required): "media_analyzed" | "inbound_webhook" | "field_updated" - folders: array of folder names or ids (required for media_analyzed; missing folders…

Output parameters:

- `data`: Response payload from the Speak AI API

### `upload_and_analyze` (~279 tokens)

Upload and Analyze Media

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.)

Input parameters:

- `folderId` (string): Folder ID to place the media in
- `mediaType` (string): Media type (default: audio)
- `name` (string): Display name for the media (defaults to filename from URL)
- `sourceLanguage` (string): BCP-47 language code (e.g., 'en-US', 'he-IL')
- `tags` (string): Comma-separated tags
- `url` (string, required): Direct/public media file URL, or a shareable social/video page link (e.g. an Instagram reel, TikTok, YouTube, or X post URL) — page links are resolved to the underlying media server-side. Pass the UR…

Output parameters:

- `data`: Response payload from the Speak AI API

### `upload_local_file` (~175 tokens)

Upload Local File

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.

Input parameters:

- `filePath` (string, required): Absolute path to the local audio or video file
- `folderId` (string): Folder ID to place the media in
- `mediaType` (string): Media type (auto-detected from extension if omitted)
- `name` (string): Display name (defaults to filename)
- `sourceLanguage` (string): BCP-47 language code (e.g., 'en-US')
- `tags` (string): Comma-separated tags

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_users` (~152 tokens)

List Users

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.

Input parameters:

- `filterName` (string): Search text. Plain text matches first/last name or email; prefix with "email:" or "name:" to scope, e.g. "email:jane@acme.com".
- `page` (integer): 0-based page index (default 0)
- `pageSize` (integer): Results per page (default 50)
- `sortBy` (string): Sort expression "field:asc" or "field:desc", e.g. "createdAt:desc", "email:asc"

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_user_groups` (~49 tokens)

List User Groups

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.

Output parameters:

- `data`: Response payload from the Speak AI API

### `create_user_group` (~73 tokens)

Create User Group

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.

Input parameters:

- `description` (string, required): Group name
- `users` (array): User _id strings to add as members (fetch via list_users)

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_user_group` (~109 tokens)

Update User Group

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.

Input parameters:

- `_id` (string, required): Group _id to update (from list_user_groups)
- `description` (string, required): New group name
- `users` (array, required): Full replacement list of member _id strings (omitted users are removed)

Output parameters:

- `data`: Response payload from the Speak AI API

### `delete_user_group` (~45 tokens)

Delete User Group

Delete a user group. This removes the group only; it does not delete the users themselves.

Input parameters:

- `id` (string, required): Group _id to delete (from list_user_groups)

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_dashboards` (~35 tokens)

List Dashboards

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

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_dashboard` (~70 tokens)

Get Dashboard

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).

Input parameters:

- `dashboardId` (string, required): Dashboard business id (the dashboardId field from list_dashboards, not the Mongo _id)

Output parameters:

- `data`: Response payload from the Speak AI API

### `list_dashboard_widgets` (~97 tokens)

List Dashboard Widgets

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.

Output parameters:

- `data`: Response payload from the Speak AI API

### `create_dashboard` (~434 tokens)

Create Dashboard

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.

Input parameters:

- `assignTo` (array): User ids, or group ids in the "<groupId> (G)" convention, to share view access with
- `dateRange` (object): Date range — strict preset only, no free-form start/end dates
- `description` (string): Dashboard description, max 280 chars
- `filters` (object): Field filters. filters.filterList is an array of { fieldName, fieldOperator?, fieldValue?: string[], fieldCondition? }. Other keys pass through but only filterList is enforced.
- `icon` (string): Icon identifier
- `isDefault` (boolean): Make this the company default dashboard
- `sections` (array): Optional named widget groups (tabs). Each references widgets by their explicit ids; widgets in no section form the implicit Overview group.
- `source` (object): Data source: {type:"folders", folderIds:[...]} | {type:"team"} | {type:"workspace"}
- `title` (string, required): Dashboard name, max 60 chars (the only required field)
- `widgets` (array): Widgets to place on the dashboard, in order (max 24). The MCP assigns ids and computes a tidy two-per-row grid layout matching the Speak UI unless you pass explicit id/layout.

Output parameters:

- `data`: Response payload from the Speak AI API

### `update_dashboard` (~444 tokens)

Update Dashboard

Update a dashboard. Two modes. (1) Metadata-only: pass just icon/assignTo/filters/isDefault — no spec fields, no revision needed. (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.

Input parameters:

- `assignTo` (array): User ids, or group ids in the "<groupId> (G)" convention, to share view access with
- `dashboardId` (string, required): Dashboard business id
- `dateRange` (object): Date range — strict preset only, no free-form start/end dates
- `description` (string): Dashboard description, max 280 chars
- `filters` (object): Field filters. filters.filterList is an array of { fieldName, fieldOperator?, fieldValue?: string[], fieldCondition? }. Other keys pass through but only filterList is enforced.
- `icon` (string): Icon identifier
- `isDefault` (boolean): Make this the company default dashboard
- `revision` (integer): The revision loaded from get_dashboard. Required for spec updates; mismatch returns a 409 conflict.
- `sections` (array): Optional named widget groups (tabs). Each references widgets by their explicit ids; widgets in no section form the implicit Overview group.
- `source` (object): Data source: {type:"folders", folderIds:[...]} | {type:"team"} | {type:"workspace"}
- `title` (string): Dashboard name — required (with revision) when updating the spec
- `widgets` (array): Widgets to place on the dashboard, in order (max 24). The MCP assigns ids and computes a tidy two-per-row grid layout matching the Speak UI unless you pass explicit id/layout.

Output parameters:

- `data`: Response payload from the Speak AI API

### `delete_dashboard` (~36 tokens)

Delete Dashboard

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

Input parameters:

- `dashboardId` (string, required): Dashboard business id to delete

Output parameters:

- `data`: Response payload from the Speak AI API

### `duplicate_dashboard` (~70 tokens)

Duplicate Dashboard

Clone an existing dashboard. The copy gets fresh widget ids, a "<name> (copy)" title, cleared sharing, and its revision reset to 0. Ideal for cloning a fully-configured dashboard, then tweaking it via update_dashboard.

Input parameters:

- `dashboardId` (string, required): Source dashboard business id to clone

Output parameters:

- `data`: Response payload from the Speak AI API

### `share_dashboard` (~65 tokens)

Share Dashboard

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.

Input parameters:

- `dashboardId` (string, required): Dashboard business id to share

Output parameters:

- `data`: Response payload from the Speak AI API

### `get_dashboard_speakers_insight` (~88 tokens)

Get Dashboard Speakers Insight

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

Input parameters:

- `endDate` (string): ISO end date
- `filterList` (array): Field filter rules
- `folderScope` (array): Folder ids to scope to
- `startDate` (string): ISO start date

Output parameters:

- `data`: Response payload from the Speak AI API

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/speakai-mcp-server/speakai-mcp-server#diagnostics

## Score history

- 2026-08-03: 69
- 2026-08-02: 69
- 2026-08-01: 46
- 2026-07-31: 56
- 2026-07-30: 6
- 2026-07-28: 8
- 2026-07-27: 10

## Links

- npm package: https://www.npmjs.com/package/@speakai/mcp-server
- Socket report: https://socket.dev/npm/package/@speakai/mcp-server
- Repository: https://github.com/speakai/speakai-mcp
- Website: https://mcp.speakai.co/
- Changelog RSS feed: https://verifymcp.io/servers/speakai-mcp-server/speakai-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/speakai-mcp-server/speakai-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/speakai-mcp-server/speakai-mcp-server
