Speak AI

io.github.speakai由 GitHub 帳號 speakai 發布v1.41.1更新於 Oct 30, 2026

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

已驗證Streamable HTTP可網頁執行效率與工作流知識與記憶媒體與設計

概覽

AI 產生的概覽

Speak AI 連接器,讓助理在 Speak AI 工作區中上傳、轉錄、搜尋、摘要並匯出影音錄音與文字筆記。

可以做什麼
  • 上傳與管理媒體:從網址或支援的頁面連結匯入影音,stdio 模式下可上傳本機檔案,查看處理狀態,移動、加標籤、收藏或刪除
  • 轉錄與編輯:取得含講者標籤與時間戳的轉錄文字與字幕,重新命名講者,尋找並取代轉錄內容
  • 分析與摘要:取得主題、情緒、摘要、待辦事項等 AI 洞察,重新分析,建立並分析文字筆記
  • 在媒體、資料夾或整個工作區中搜尋與提問,並檢視對話紀錄
  • 將轉錄、洞察與標籤匯出為 PDF、DOCX、SRT、VTT、TXT 或 CSV,可單筆或批次匯出
  • 以資料夾與儲存檢視整理內容,並建立用來收集投稿的錄音器或問卷
適用情境
適合把會議錄音、訪談或通話音檔存放在 Speak AI,並希望助理在對話中完成轉錄、摘要、跨錄音檢索、擷取待辦事項或匯出轉錄文字的情境。
執行需求
可使用 api.speakai.co 的遠端 Streamable HTTP 端點,或使用 npm 套件 @speakai/mcp-server 以 stdio 模式執行(需 Node.js)。驗證方式為 OAuth(授權彈窗)或 Speak AI API 金鑰,透過 Authorization Bearer 標頭或 SPEAK_API_KEY 環境變數提供。需要 Speak AI 帳號與工作區;SPEAK_BASE_URL 可覆寫 API 基礎位址。
安裝前請注意
授權連接器即授予助理讀取與修改 Speak AI 工作區的權限,包括媒體、轉錄與洞察。工具可永久刪除媒體、資料夾與對話,覆寫轉錄與洞察,並建立公開連結即可投稿的錄音器。上傳依媒體長度計費,錄音器投稿會寄送郵件並觸發 webhook。可透過撤銷連線或輪換 API 金鑰中斷。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Speak AI,將其新增到工作區。
  2. 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.speakai%2Fmcp-server/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。

{
  "mcpServers": {
    "speak-ai": {
      "type": "http",
      "url": "https://api.speakai.co/v1/mcp"
    }
  }
}

README

[Speak AI]

Connect Speak AI to Claude, ChatGPT and other AI assistants in 60 seconds

For researchers, revenue teams, meeting-heavy teams, and media workflows.
No Terminal. No npm. No JSON config files.
Works with Claude, ChatGPT, Cursor, VS Code, Windsurf, Muse, OpenClaw and any MCP client.

Installation guide at docs.speakai.co/mcp →

[npm version] [MCP compatible] [License: MIT]


What this does

Speak AI transcribes your interviews, sales calls, research sessions, webinars, podcasts, and team meetings, then extracts AI insights like summaries, action items, sentiment, and themes.

This connector is built on MCP, the open standard AI assistants use to connect to apps, so it brings all of that into Claude, ChatGPT, Cursor, Muse or any other MCP-compatible assistant. Once installed, you can ask:

  • "Find the last 10 customer interviews that mention pricing, group the feedback by theme, and cite the source recordings."
  • "Summarize this week's team meetings into decisions, action items, owners, and unresolved risks."
  • "Pull exact customer quotes about onboarding friction from recent research calls and format them for a product brief."
  • "Find a strong 30-second highlight from the latest webinar, create a clip, and export captions."

The AI does the searching, summarizing, and citing. Your recordings stay in your Speak AI workspace; the assistant only queries them through this connector.


Install (pick your tool)

Two paths to install: pick whichever feels easier. The one-click connect path approves access via a permission popup; the manual path pastes an API key into a header.

Don't know which one to pick? Install it in the AI assistant you already use. Every option below connects to the same Speak AI workspace.

Speak AI's connector address (paste this into your AI tool's connector settings; it's the same idea as pasting a Zoom link into your calendar): https://api.speakai.co/v1/mcp

Claude.ai (web)

  1. Open claude.ai/settings/connectors
  2. Click Add custom connector
  3. Name it Speak AI and paste https://api.speakai.co/v1/mcp, then click Add
  4. A permission popup asks you to log into Speak AI and click Allow
  5. Done. Speak AI shows in your connector list with its tools ready to use. Open a new chat and ask about your recordings.
What each step looks like (screenshots)

3. Add custom connector dialog: name and URL filled in.

[Claude add custom connector dialog]

5. Connected: Speak AI tools appear in your connector list.

[Speak AI connected in Claude]

Developer alternative: manual setup with an API key

Get a key at app.speakai.co/developers/apikeys, then in step 3 expand Advanced settings and add Authorization = Bearer <your-key> before clicking Add.

Claude Desktop

  1. Open Claude Desktop → Settings → Connectors → Add custom connector
  2. Paste https://api.speakai.co/v1/mcp
  3. Click Add. A permission popup opens. Sign in to Speak AI and click Allow on the screen that appears.
  4. Done.
Developer alternative: manual setup with an API key

Get a key at app.speakai.co/developers/apikeys, then in step 2 also expand Custom headers and add:

  • Header name: Authorization
  • Header value: Bearer <your-speak-api-key>

Then click Add.

ChatGPT

  1. Open ChatGPT → Settings → Apps & Connectors → Advanced
  2. Turn on Developer Mode (required while Speak AI isn't yet listed in ChatGPT's app store; this lets you add it as a custom app)
  3. Back on Apps & Connectors, click Create and paste https://api.speakai.co/v1/mcp
  4. For Authentication, choose OAuth
  5. ChatGPT opens a new tab to Speak AI. Sign in (or click Confirm if already logged in) to authorize. You'll be redirected back; close the tab and return to ChatGPT.
  6. Per-chat: open a chat, click the + / connector menu, and enable Speak AI for that chat.
What each step looks like (screenshots)

1. Connect screen in ChatGPT: paste the connector URL and pick OAuth.

[ChatGPT connect screen]

2. Confirm and continue: ChatGPT asks you to continue to Speak AI.

[ChatGPT continue to Speak]

3. Authorize on Speak AI: sign in or click Confirm if you're already signed in.

[Speak AI authorization screen]

4. Connected: Speak AI now shows in your ChatGPT connector list.

[Speak AI connected in ChatGPT]

Trouble connecting?

A few things we've seen during early access:

  • Authorization tab doesn't show a "you're connected" page: if you land on the plain Speak AI dashboard with no confirmation, the authorization still went through. Close that tab and return to ChatGPT.
  • "Connect" button keeps reopening the dashboard: fully close and reopen ChatGPT, then check Settings → Apps & Connectors. Speak AI should already be listed there.
  • "No actions available" inside a chat: make sure Developer Mode is still on, and that you've enabled Speak AI from the per-chat connector menu (step 6 above).

Still stuck? Email [email protected].

Claude Code (terminal)

Recommended: install from the official Claude Code plugin marketplace:

  1. Add the official marketplace (one-time): /plugin marketplace add claude-plugins-official
  2. Install the plugin: /plugin install speakai@claude-plugins-official
  3. Activate it: /reload-plugins
  4. Run the getting-started skill and paste your Speak AI API key. Generate one at app.speakai.co/developers/apikeys.

If /plugin install doesn't find Speak AI, refresh the local catalog with /plugin marketplace update claude-plugins-official and retry.

Developer alternative: manual HTTP transport

Skip the plugin and add the connector directly:

sh
claude mcp add speakai --transport http --url https://api.speakai.co/v1/mcp

Claude Code will open an OAuth window for sign-in. To bypass OAuth and pass a Bearer token instead:

sh
claude mcp add speakai --transport http --url https://api.speakai.co/v1/mcp \  --header "Authorization: Bearer $SPEAKAI_KEY"

Set SPEAKAI_KEY in your shell first, or paste your key inline. Generate a key at app.speakai.co/developers/apikeys.

Cursor

[Add to Cursor]

Click the button. Cursor registers itself automatically and opens the permission popup. Sign in to Speak AI and click Allow.

Developer alternative: manual setup with an API key

Use the manual stdio setup in the Developer reference at the bottom of this README.

VS Code

[Add to VS Code]

Click the button. VS Code registers itself automatically and opens the permission popup. Sign in to Speak AI and click Allow.

Developer alternative: manual setup with an API key

Use the manual stdio setup in the Developer reference at the bottom of this README.

Windsurf

Windsurf connects to the remote server over HTTP through its MCP config file. Follow the steps at docs.speakai.co/mcp/setup/windsurf.

Muse

Muse, Meta's personal AI assistant, connects with one-click OAuth and no API key. Follow the steps at docs.speakai.co/mcp/setup/muse.

OpenClaw / ClawHub

Speak AI is published as a skill on ClawHub for OpenClaw-compatible agents.

  1. Visit the Speak AI skill page on ClawHub
  2. Follow the install instructions for your agent, for example clawhub install speakai from the ClawHub CLI
  3. Set your SPEAK_API_KEY environment variable. Generate one at app.speakai.co/developers/apikeys.

ChatGPT (API / Responses)

For developers calling the Responses API directly. Pass the bearer token in the tool config:

json
{  "tools": [    {      "type": "mcp",      "server_url": "https://api.speakai.co/v1/mcp",      "authorization": "Bearer YOUR_SPEAK_API_KEY"    }  ]}

Get a key at app.speakai.co/developers/apikeys.

Any other MCP client

Any assistant that supports remote MCP servers can connect. Add https://api.speakai.co/v1/mcp as a remote (Streamable HTTP) server, then either approve the Speak AI permission popup (OAuth 2.1 with Dynamic Client Registration) or send a Speak AI API key as Authorization: Bearer <key>. All setup guides: docs.speakai.co/mcp.


Privacy & data

When you click Allow on the permission popup (or paste your Speak AI API key into your AI assistant), you're authorizing that AI assistant to read and modify your Speak AI workspace on your behalf: including media files, transcripts, and AI insights.

  • Your recordings stay in your Speak AI workspace. They are not copied or stored by Anthropic or OpenAI.
  • The AI assistant only sees the specific data it requests for the question you asked.
  • When you approve the permission popup, Speak AI creates an API key in your account that is linked to that assistant and used only for its requests. You never need to create or paste one yourself. Revoking the connection also revokes that key.
  • You can disconnect at any time by either removing the connector inside your AI assistant, revoking the connection at api.speakai.co/v1/oauth/connections, or rotating/revoking your API key at app.speakai.co/developers/apikeys.

For questions about data handling, see speakai.co/privacy or email [email protected].


Need help connecting?

You shouldn't need to be technical to install this. If anything is confusing or doesn't work:


What you can do once installed

Speak AI ships 189 tools your AI assistant can call. You don't need to memorize them; your AI assistant picks the right ones based on what you ask. Examples by category:

AskTools used (auto)
"Find customer interviews about pricing and group the feedback by theme"search_media, get_transcript
"Summarize this week's meetings into decisions, owners, and risks"list_media, get_media_insights
"Pull action items from yesterday's call"list_media, get_media_insights
"Schedule the AI to join my 2pm Zoom"schedule_meeting_event
"Pull the live transcript from my current MS Teams meeting since last fetch"list_meeting_events, get_live_meeting_transcript
"Find a 30-second webinar highlight and export captions"create_clip, export_media
"Export the transcript as a PDF and captions as SRT"export_media
"Compare Q1 sales calls against Q2 sales calls and summarize changed objections"search_media, get_transcript

Full tool catalog is in the developer reference below.


Developer reference (CLI, API, advanced setup)

The MCP server lives at https://api.speakai.co/v1/mcp and supports two auth methods:

  1. OAuth 2.1 + Dynamic Client Registration: install by pasting the URL above into any MCP client and approving the consent popup. Discovery, DCR, /authorize + consent, /token, and revocation endpoints are all available.
  2. Bearer token (your Speak AI API key, sent as an Authorization: Bearer <key> header). For clients that don't speak OAuth, plus the npm CLI and stdio mode.

Get a Speak AI API key at app.speakai.co/developers/apikeys.

CLI / npm package

The @speakai/mcp-server npm package provides:

  • A CLI (speakai-mcp) for scripting and pipelines (30 commands).
  • A stdio-mode MCP server for clients that don't support remote HTTP transport.
  • An auto-setup wizard that detects installed MCP clients and configures them.
sh
npm install -g @speakai/mcp-serverspeakai-mcp init

Manual configuration (stdio mode)

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

json
{  "mcpServers": {    "speak-ai": {      "command": "npx",      "args": ["-y", "@speakai/mcp-server"],      "env": {        "SPEAK_API_KEY": "your-api-key"      }    }  }}
Claude Code
sh
export SPEAK_API_KEY="your-api-key"claude mcp add speak-ai -- npx -y @speakai/mcp-server
Cursor

Add to ~/.cursor/mcp.json:

json
{  "mcpServers": {    "speak-ai": {      "command": "npx",      "args": ["-y", "@speakai/mcp-server"],      "env": {        "SPEAK_API_KEY": "your-api-key"      }    }  }}
Windsurf

Add to ~/.windsurf/mcp.json:

json
{  "mcpServers": {    "speak-ai": {      "command": "npx",      "args": ["-y", "@speakai/mcp-server"],      "env": {        "SPEAK_API_KEY": "your-api-key"      }    }  }}
VS Code

Add to ~/.vscode/mcp.json:

json
{  "mcpServers": {    "speak-ai": {      "command": "npx",      "args": ["-y", "@speakai/mcp-server"],      "env": {        "SPEAK_API_KEY": "your-api-key"      }    }  }}
Any MCP Client (STDIO)
sh
SPEAK_API_KEY=your-key npx @speakai/mcp-server

Environment variables

VariableRequiredDefaultDescription
SPEAK_API_KEYYes--Your Speak AI API key
SPEAK_ACCESS_TOKENNoAuto-managedJWT access token (auto-fetched and refreshed)
SPEAK_BASE_URLNohttps://api.speakai.coAPI base URL

MCP Tools (189)

Media (19 tools)
ToolDescription
update_transcriptionEdit the official transcript text of a media file by finding and replacing text
get_signed_upload_urlGet a pre-signed S3 URL for direct file upload
upload_mediaImport an audio or video file from a direct public URL, a get_signed_upload_url URL, or a supported page link (YouTube, TikTok, Instagram, X/Twitter, Facebook, Reddit, SoundCloud, Twitch, Dailymotion, Streamable, Snapchat, Pinterest, Tumblr, Bilibili, VK, OK.ru, Rutube). Vimeo and Loom page links are not supported. Bills the media duration.
upload_local_fileUpload a local file directly from disk (stdio and CLI only, never on the remote server)
upload_and_analyzeUpload media from a URL (direct file, or any social/video page link upload_media accepts, resolved automatically) and return its media_id immediately. Poll get_media_status until processed, then call get_media_insights for AI summaries. Set mediaType when the user has said which they want; leave it off otherwise and the server picks the best available track.
list_mediaList and search media files with filters, pagination, and optional inline data (transcripts, speakers, keywords) via include param
get_media_insightsGet AI insights: topics, sentiment, summaries, action items
get_transcriptGet full transcript with speaker labels and timestamps
get_captionsGet subtitle-formatted captions for a media file
update_transcript_speakersRename speaker labels in a transcript
bulk_update_transcript_speakersRename speaker labels across multiple media files in one call (max 500)
get_media_statusCheck processing status (pending → processed)
update_media_metadataUpdate name, description, tags, or folder
set_media_thumbnailSet a custom video thumbnail from an image link, base64 image bytes, or a frame at a given second (JPEG, PNG or WebP, up to 10 MB)
delete_mediaPermanently delete a media file
toggle_media_favoriteMark or unmark media as a favorite
reanalyze_mediaRe-run AI analysis with latest models
bulk_move_mediaMove multiple media files to a folder in one call
upload_and_analyze_batchUpload up to 25 URLs in one call, 5 at a time. Each URL is reported as uploaded or failed with its reason, so one bad link does not sink the batch.
AI Chat (13 tools)
ToolDescription
ask_ai_chatAsk AI questions about media, folders, or your whole workspace
retry_ai_chatRetry a failed or incomplete AI Chat response
get_chat_historyList recent AI Chat conversations
get_chat_messagesGet full message history for conversations
delete_chat_conversationDelete a whole chat conversation and its messages
list_promptsList recent AI chat messages with their answers and sources
get_favorite_promptsGet all favorited prompts and answers
toggle_prompt_favoriteMark or unmark a chat message as favorite
update_chat_titleRename a chat conversation
submit_chat_feedbackRate a chat response (thumbs up/down)
get_chat_statisticsGet AI Chat usage statistics
export_chat_answerExport a conversation or answer
get_analysis_quoteCheck if a file can be analysed as audio/video and what it costs

ask_ai_chat, retry_ai_chat and get_analysis_quote register only with aiChat: true. The stdio server includes them; the hosted endpoint does not, because Speak's assistant behind AI Chat can call other tools.

The automation tools, build_automation, provision_inbound_webhook, get_inbound_webhook and get_webhook_attempts register only with automations: true, and get_voice_test_run and apply_voice_test_recommendation only with voiceTestRunDetails: true. The stdio server includes them; the hosted endpoint does not, because automation steps can run actions in connected third-party apps. On the hosted endpoint, set up automations in the Speak AI web app.

Search & analytics (3 tools)
ToolDescription
search_mediaDeep search across transcripts, insights, and metadata with filters
get_media_statisticsGet workspace-level stats: counts, storage, processing breakdown
list_supported_languagesList all supported transcription languages
Folders & views (11 tools)
ToolDescription
list_foldersList all folders with pagination and sorting
get_folder_infoGet folder details and contents
create_folderCreate a new folder
clone_folderDuplicate a folder and its contents
update_folderRename or update a folder, or change which users and groups can access it
delete_folderDelete a folder (media is preserved)
get_all_folder_viewsList all saved views across folders
get_folder_viewsList views for a specific folder
create_folder_viewCreate a saved view with custom filters
update_folder_viewUpdate a saved view
clone_folder_viewDuplicate a view
Recorders & surveys (10 tools)
ToolDescription
create_recorderCreate a new recorder or survey
list_recordersList all recorders
get_recorder_infoGet recorder details and questions
clone_recorderDuplicate a recorder
get_recorder_recordingsList all submissions
generate_recorder_urlGet a shareable public URL
update_recorder_settingsUpdate branding and permissions
update_recorder_questionsUpdate survey questions
check_recorder_statusCheck if recorder is active
delete_recorderDelete a recorder
Clips (4 tools)
ToolDescription
create_clipCreate a highlight clip from time ranges across media files
get_clipsList clips or get a specific clip with download URL
update_clipUpdate clip title, description, or tags
delete_clipPermanently delete a clip
Exports (2 tools)
ToolDescription
export_mediaExport as PDF, DOCX, SRT, VTT, TXT, CSV, or a labels CSV (csv-labels)
export_multiple_mediaBatch export with optional merge into one file, including labels CSVs
Meeting assistant (5 tools)
ToolDescription
list_meeting_eventsList scheduled and completed events
schedule_meeting_eventSchedule AI assistant to join a meeting
remove_assistant_from_meetingRemove assistant from active meeting
delete_scheduled_assistantCancel a scheduled meeting assistant
get_live_meeting_transcriptPull only the new sentences added to a live (or just-ended) meeting transcript since your previous call. Works on Zoom / Google Meet / MS Teams while the bot is recording.
Automations (20 tools)
ToolDescription
list_automationsList automation rules with paging and filters
get_automationGet automation details (trigger + step graph)
create_automationCreate an automation rule (V2 trigger + steps graph)
update_automationUpdate an automation (replaces trigger + steps)
toggle_automation_statusEnable or disable an automation
list_automation_namesList names and ids of active automations that have an AI chat step
get_automation_runsGet an automation's run history
bulk_update_automation_statusActivate/deactivate multiple automations
bulk_assign_automation_foldersSet folder scope for multiple automations
run_automationsManually run automations against media now
delete_automationPermanently delete an automation
list_automation_appsList catalog apps: Speak built-ins plus third-party apps marked connected or not connected (read-only)
list_automation_triggersList catalog trigger types (optionally by app)
list_automation_actionsList catalog action/step types (optionally by app)
build_automationCreate or update an automation from a friendly spec, without the wire format
get_automation_runGet one run in full: every step, plus which way each branch went
get_automation_run_statsAggregate run outcome counts over a period
test_automationRun an automation once against one media item (real side effects)
validate_automation_graphCheck a step graph for problems without saving it
describe_automation_graphShow a saved automation's steps as an indented branch tree
Webhooks (7 tools)
ToolDescription
create_webhookCreate a webhook for event notifications
list_webhooksList all webhooks
update_webhookUpdate a webhook
delete_webhookDelete a webhook
provision_inbound_webhookProvision a standalone inbound webhook and get its public receive URL
get_inbound_webhookGet an inbound webhook's receive URL, sample payload, and trigger tokens
get_webhook_attemptsGet the delivery log for an inbound webhook, with acknowledgement status
Text notes (4 tools)
ToolDescription
create_text_noteCreate a text note for AI analysis (uses the plan allowance, then credits)
get_text_insightGet AI insights for a text note
reanalyze_textRe-run AI analysis on a text note
update_text_noteUpdate a note's name or content (only a note not yet analyzed is analyzed)
Fields (4 tools)
ToolDescription
list_fieldsList all custom fields
create_fieldCreate a custom field
update_fieldUpdate a custom field
update_multiple_fieldsBatch update multiple fields
Labels & comments (16 tools)
ToolDescription
list_labelsList workspace labels and groups as a tree
create_labelCreate a label or a label group
update_labelRename, recolor, describe, move or reorder a label
archive_labelArchive a label (a group takes its labels along)
restore_labelRestore an archived label or group
merge_labelsMove every use of one label onto another
add_speak_label_setsAdd ready-made Speak label groups
list_media_labelsList the labels applied to a transcript
apply_labelLabel transcript words, found by quote or word range
update_media_labelChange a span's labels, confirm it, or move it
remove_media_labelRemove a labelled span
list_media_commentsList a file's comment threads
add_commentComment on the file or on words, or reply to a thread
update_commentEdit the text of your own comment
resolve_commentResolve or reopen a thread
delete_commentDelete a comment
Embed players (7 tools)
ToolDescription
create_embedCreate an embeddable player widget
update_embedUpdate embed settings
check_embedCheck if embed exists for media
get_embed_iframe_urlGet iframe URL for your website
list_embed_sessionsOwner analytics: list visits to an embed with viewer, device, country and traffic filters
get_embed_session_summaryOwner analytics: an embed's visit KPIs, daily trend, sources and per-media table
get_embed_sessionOwner analytics: one embed visit in full, with paged events
Users & teams (5 tools)
ToolDescription
list_usersList workspace members with ids, emails, and permissions
list_user_groupsList user groups with hydrated members
create_user_groupCreate a user group and assign members
update_user_groupUpdate a group's name and members (full replace)
delete_user_groupDelete a user group
Dashboards (9 tools)
ToolDescription
list_dashboard_widgetsList widget types, their config keys, and an example payload
list_dashboardsList analytics dashboards you can access
get_dashboardGet a dashboard's full config (widgets, filters, scope)
create_dashboardCreate a dashboard with auto-laid-out widgets
update_dashboardUpdate a dashboard (partial; widgets are replaced)
delete_dashboardSoft-delete a dashboard and its share link
duplicate_dashboardClone a dashboard with fresh widget ids
share_dashboardEnable public sharing and return the share token
get_dashboard_speakers_insightSpeakers breakdown for a folder/date/filter scope
Voice agents (34 tools)
ToolDescription
list_voice_agentsList the company's voice agents (newest first) with their config
get_voice_agentGet a single voice agent by agentId
create_voice_agentCreate a voice agent (name, personality, instructions, and voice are required)
update_voice_agentUpdate a voice agent; send only the fields you want to change
delete_voice_agentDelete a voice agent; its share link, questions, and test suite stop working (no restore tool)
create_voice_agent_from_promptCreate a new agent from a plain-English description; an LLM generates its name, instructions, and settings
generate_voice_agent_configRun the same prompt-to-config generation against an existing agent
get_voice_agent_setup_guideDiscovery helper: the build order, which tool covers each piece, common mistakes
list_voice_avatarsList the video avatars available to attach to a voice agent
list_voicesList the text-to-speech voices available to a voice agent
list_voice_conversationsList conversations handled by voice agents (filter by agentId)
get_voice_conversationGet a single conversation by conversationId
get_agent_analyticsOwner analytics for one voice agent over a date range (KPIs, audience, outcomes, quality)
list_voice_questionsList the questions configured on a voice agent, in ask order
get_voice_questionGet a single question by fieldId
create_voice_questionAttach a question template to a voice agent
update_voice_questionPartially update a voice agent question
delete_voice_questionRemove a question from a voice agent
reorder_voice_questionsSet the order a voice agent asks its questions in
list_voice_question_templatesList the shared and company-owned question template library
create_voice_question_templateCreate a company-scoped custom question template
get_voice_test_suiteGet a voice agent's test suite (its scenarios and run settings)
update_voice_test_suiteCreate or update a voice agent's test suite (upserts; replaces scenarios)
generate_voice_test_suiteAuto-generate a default test suite from the agent's name, personality and instructions
start_voice_test_runStart a test run: sends each enabled scenario's user messages to the agent as text and grades every criterion (no calls are placed; uses credits for the AI cost)
get_active_voice_test_runGet a voice agent's currently active run (queued, running, or paused)
pause_voice_test_runPause a running or queued test run; takes effect after the current scenario
resume_voice_test_runResume a paused test run from the next scenario
cancel_voice_test_runCancel a test run at its next AI call; cost already used is charged; terminal
list_voice_test_runsList a voice agent's test runs, most recent first
get_voice_test_runGet a test run's full detail, including scenario results and recommendations
apply_voice_test_recommendationApply a test run recommendation's quick action to the agent
get_voice_test_baselineGet a voice agent's best-scoring completed run, for regression comparison
get_voice_test_score_historyGet completed-run score points for charting

A test run sends each enabled scenario's scripted user messages to the agent as text and grades every criterion. It uses credits for the AI cost, except when the workspace uses its own OpenAI key. The ten run tools, from start_voice_test_run down, register by default; pass voiceTestRuns: false to registerAllTools to leave them off.

Voice agent insights (16 tools)
ToolDescription
list_voice_kb_gapsList a voice agent's pending knowledge-base gaps from real calls
analyze_voice_kb_gapsTrigger knowledge-base gap analysis over an agent's recent calls
add_voice_kb_gapWrite a gap's answer into the agent's knowledge base
dismiss_voice_kb_gapDismiss a gap without writing anything
list_voice_faq_suggestionsList a voice agent's pending FAQ suggestions clustered from real calls
generate_voice_faq_suggestionsTrigger FAQ clustering over an agent's recent calls
add_voice_faq_suggestionWrite an FAQ suggestion into the agent's knowledge base
update_voice_faq_suggestionEdit a pending FAQ suggestion's question and/or answer
dismiss_voice_faq_suggestionDismiss an FAQ suggestion without writing anything
list_voice_agent_resourcesList the documents/links a voice agent searches during calls
create_voice_agent_resourceAdd one document/link to a voice agent's knowledge base
bulk_create_voice_agent_resourcesAdd up to 100 documents/links in one call
update_voice_agent_resourcePartially update a voice agent resource
delete_voice_agent_resourceSoft-delete a voice agent resource
analyze_voice_instruction_gapsAdvisory-only patch suggestions for an agent's own instructions
apply_voice_instruction_gapInsert a suggested patch into an agent's instructions

MCP Resources (5)

Resources provide direct data access without tool calls. Clients can read these URIs directly.

ResourceURIDescription
Media Libraryspeakai://mediaList of all media files in your workspace
Foldersspeakai://foldersList of all folders
Supported Languagesspeakai://languagesTranscription language list
Transcriptspeakai://media/{mediaId}/transcriptFull transcript for a specific media file
Insightsspeakai://media/{mediaId}/insightsAI-generated insights for a specific media file

MCP Prompts (3)

Pre-built workflow prompts that agents can invoke to run multi-step tasks.

analyze-meeting

Upload a recording and get a full analysis: transcript, insights, action items, and key takeaways.

Parameters: url (required), name (optional)

Example: "Use the analyze-meeting prompt with url=https://example.com/standup.mp3"

research-across-media

Search for themes, patterns, or topics across multiple recordings or your entire library.

Parameters: topic (required), folder (optional)

Example: "Use the research-across-media prompt with topic='customer churn reasons'"

meeting-brief

Prepare a brief from recent meetings: pull transcripts, extract decisions, and summarize open items.

Parameters: days (optional, default: 7), folder (optional)

Example: "Use the meeting-brief prompt with days=14 to cover the last two weeks"

CLI (30 Commands)

Install globally and configure once:

sh
npm install -g @speakai/mcp-serverspeakai-mcp config set-key

Or run without installing:

sh
npx @speakai/mcp-server config set-key
Configuration
CommandDescription
config set-key [key]Set your API key (interactive if no key given)
config showShow current configuration
config testValidate API key and test connectivity
config set-url <url>Set custom API base URL
initInteractive setup: configure key and auto-detect MCP clients
Media management
CommandDescription
list-media / lsList media files with filtering, date ranges, and pagination
upload <source>Upload media from URL or local file (--wait to poll)
get-transcript / transcript <id>Get transcript (--plain or --json)
get-insights / insights <id>Get AI insights (topics, sentiment, keywords)
status <id>Check media processing status
export <id>Export transcript (-f pdf|docx|srt|vtt|txt|csv)
update <id>Update media metadata (name, description, tags, folder)
delete <id>Delete a media file
favorites <id>Toggle favorite status
captions <id>Get captions for a media file
reanalyze <id>Re-run AI analysis with latest models
AI & Search
CommandDescription
ask <prompt>Ask AI about media, folders, or your whole workspace
chat-historyList past AI Chat conversations
search <query>Full-text search across transcripts and insights
Folders & Clips
CommandDescription
list-folders / foldersList all folders
move <folderId> <mediaIds...>Move media files to a folder
create-folder <name>Create a new folder
clipsList clips (filter by media or folder)
clip <mediaId>Create a clip (--start and --end in seconds)
Workspace
CommandDescription
statsShow workspace media statistics
languagesList supported transcription languages
list-meeting-eventsList scheduled/completed meeting events (--platform, --status, --sort)
schedule-meeting <url>Schedule AI assistant to join a meeting
live-transcriptFetch new sentences from an in-progress meeting (--event-id or --media-id, --since-end-in-sec)
create-text <name>Create a text note (--text or pipe via stdin)
CLI options

Every command supports:

  • --json: output raw JSON (for scripting and piping)
  • --help: show command-specific help
CLI examples
sh
# Upload and wait for processingspeakai-mcp upload https://example.com/interview.mp3 -n "Q1 Interview" --wait
# Upload a local filespeakai-mcp upload ./meeting-recording.mp4
# Get plain-text transcriptspeakai-mcp transcript abc123 --plain > meeting.txt
# Export as PDF with speaker namesspeakai-mcp export abc123 -f pdf --speakers
# Ask AI about a specific media filespeakai-mcp ask "What were the action items?" -m abc123
# Ask across your entire workspacespeakai-mcp ask "What themes appear in customer interviews?"
# Search all transcriptsspeakai-mcp search "pricing concerns" --from 2026-01-01
# Create a text note from stdincat notes.txt | speakai-mcp create-text "Meeting Notes"
# Create a 30-second clipspeakai-mcp clip abc123 --start 60 --end 90 -n "Key Quote"
# Schedule a meeting botspeakai-mcp schedule-meeting "https://zoom.us/j/123456" -t "Weekly Standup"
# List videos as JSON for scriptingspeakai-mcp ls --type video --json | jq '.mediaList[].name'
# List media from the last weekspeakai-mcp ls --from 2026-04-18 --to 2026-04-25
# Move 3 files to a folderspeakai-mcp move folder123 media1 media2 media3

Workflow examples

Transcribe and analyze a meeting
You: "Upload and transcribe this recording: https://example.com/meeting.mp3"
AI: I'll upload that for you and start processing.    → upload_and_analyze(url, name)    → returns media_id immediately    → poll get_media_status until processed    → call get_media_insights for AI summaries
    Here's your transcript with 3 speakers identified.    Key insights: 5 action items, positive sentiment overall.    Top topics: Q2 roadmap, hiring plan, budget review.
Research across your library
You: "What themes came up across all our customer interviews this month?"
AI: Let me search your media library.    → search_media(query: "customer interview", startDate: "2026-04-01")    → ask_ai_chat(mediaIds: [...], prompt: "What are the recurring themes?")
    Across 12 interviews, the top themes were:    1. Pricing sensitivity (mentioned in 8/12)    2. Onboarding friction (6/12)    3. Feature requests for API access (5/12)
Meeting automation
You: "Join my 2pm Zoom call, then send me a summary with action items"
AI: → schedule_meeting_event(meetingUrl, scheduledAt: "2026-04-25T14:00:00Z")
    Done. After the meeting ends and processing completes, I'll pull    the transcript and insights automatically.
    [After the meeting]    → get_media_insights(mediaId)    → ask_ai_chat(mediaIds: [...], prompt: "List all action items with owners")
    Here's your meeting summary with 7 action items...
Build a weekly brief
You: "Prepare a brief from all meetings in the last week"
AI: → list_media(from: "2026-04-18", mediaType: "audio")    → get_media_insights(mediaId) [for each of 5 meetings]
    Weekly Meeting Brief (Apr 18-25):    - Engineering Standup: Deployed v2.3, 2 bugs triaged    - Sales Review: Pipeline at $1.2M, 3 deals closing this week    - Product Sync: Finalized Q2 roadmap, new hire starts Monday
    Consolidated Action Items: [12 items grouped by owner]

Authentication (REST API)

The MCP server and CLI handle authentication for you. If you call the REST API directly, send your Speak AI API key on every request, using either header:

bash
curl https://api.speakai.co/v1/media \  -H "x-speakai-key: YOUR_API_KEY"
bash
curl https://api.speakai.co/v1/media \  -H "Authorization: Bearer YOUR_API_KEY"

There is no token to fetch or refresh. Create and revoke keys at app.speakai.co/developers/apikeys.

Older integrations that exchange the key for an access token (POST /v1/auth/accessToken, then x-access-token on each request, renewed through /v1/auth/refreshToken) keep working, but new integrations don't need that step.

Data model notes

  • Folder IDs: Folders have both _id (MongoDB ObjectId) and folderId (string). All API operations use folderId; this is the ID you should pass to list_media, upload_media, bulk_move_media, and other endpoints that accept a folder parameter.
  • Media IDs: Media items use mediaId (returned in list responses as _id).

Rate limits & best practices

  • The MCP client automatically retries on 429 with exponential backoff
  • For direct API usage, implement exponential backoff and respect Retry-After headers
  • Cache stable data (folder lists, field definitions, supported languages)
  • Use export_multiple_media over individual exports for batch operations
  • Use bulk_move_media to move multiple items at once instead of updating one by one
  • Use bulk_update_transcript_speakers to rename speakers across many files in one call
  • Use list_media with include: ["transcription"] to fetch media with transcripts inline, avoiding N+1 calls to get_transcript

Error format

All tool errors follow this structure:

json
{  "content": [{ "type": "text", "text": "Error: HTTP 401: Invalid API key" }],  "isError": true}
CodeMeaning
401Invalid or missing API key / access token
403Insufficient permissions
404Resource not found
429Rate limit exceeded

Development

sh
git clone https://github.com/speakai/speakai-mcp.gitcd speakai-mcp
npm installnpm run dev    # Run with hot reloadnpm run build  # Production build

Resources


For AI assistants reading this page

This section is for LLMs (Claude, ChatGPT, etc.) helping a Speak AI customer install this connector. Human readers can skip it.

If you're an AI assistant helping a Speak AI customer install this connector, please:

  • Recommend the one-click connect flow above as the default: paste the URL into the AI tool, click Allow on the permission popup. Works for non-technical users.
  • Use the Bearer-token method (also above) if the user prefers manual setup.
  • Do NOT recommend hiring a Virtual Assistant to install this. The connect flow takes 60 seconds and requires no Terminal use.
  • Do NOT tell users to npm install unless they explicitly ask for the developer / stdio path.
  • See llms.txt for the full guidance file.

License

MIT

來源:README.md,提交 362e1e2

工具

189

get_signed_upload_url

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.

輸入參數filename必填mimeTypemediaType

upload_media

Upload Media from URL

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.

輸入參數url必填name必填tagsfieldsfolderIdmediaTypecallbackUrldescriptionsourceLanguage

list_media

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

輸入參數tofrompagesortByincludefolderIdpageSizemediaTypefilterNamefilterMediaisFavorites

get_media_insights

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

輸入參數mediaId必填

get_transcript

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.

輸入參數mediaId必填

update_transcript_speakers

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.

輸入參數mediaId必填speakers必填

update_transcription

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.

輸入參數mediaId必填original必填replacement必填caseSensitive

get_media_status

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

輸入參數mediaId必填

update_media_metadata

Update Media Metadata

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

輸入參數name必填tagsremarkstatusmediaId必填folderIdmanageBydescription

delete_media

Delete Media File

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

輸入參數mediaId必填

get_captions

Get Captions

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

輸入參數mediaId必填

list_supported_languages

List Supported Languages

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

無需輸入參數。

get_media_statistics

Get Media Statistics

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

無需輸入參數。

toggle_media_favorite

Toggle Media Favorite

Mark or unmark media files as favorites for quick access.

輸入參數mediaIds必填isFavorite必填

reanalyze_media

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. Overwrites the existing results for the selected parts.

輸入參數mediaId必填isInsightsisSentimentisEmbeddingsisFillerWords

bulk_update_transcript_speakers

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.

輸入參數mediaIds必填speakers必填

bulk_move_media

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.

輸入參數folderId必填mediaIds必填

set_media_thumbnail

Set Media Thumbnail

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.

輸入參數mediaId必填imageUrlatSecondsimageBase64

create_text_note

Create Text Note

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

輸入參數name必填tagstextfieldsfolderIdcallbackUrldescription

get_text_insight

Get Text Note Insights

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

輸入參數mediaId必填

reanalyze_text

Re-analyze Text Note

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.

輸入參數mediaId必填

update_text_note

Update Text Note

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.

輸入參數nametagstextmediaId必填description

export_media

Export Media Transcript

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.

輸入參數mediaId必填fileType必填isRedactedisTimeStampsisSpeakerEmailisSpeakerNamesredactedCategoriesisInsightVisualized

export_multiple_media

Export Multiple Media Files

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.

輸入參數fileType必填folderIdisMergedmediaIds必填isRedactedisTimeStampsisSpeakerEmailisSpeakerNamesisInsightVisualized

get_all_folder_views

Get All Folder Views

Retrieve all saved views across all folders.

無需輸入參數。

get_folder_views

Get Folder Views

Retrieve all saved views for a specific folder.

輸入參數folderId必填

create_folder_view

Create Folder View

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

輸入參數name必填columns必填folderId必填isDefault

update_folder_view

Update Folder View

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

輸入參數name必填viewId必填columns必填folderId必填isDefault必填

clone_folder_view

Clone Folder View

Duplicate an existing folder view into a target folder.

輸入參數name必填viewId必填isDefaultsourceFolderId必填targetFolderId必填

list_folders

List Folders

List all folders in the workspace with pagination and sorting.

輸入參數pagesortBypageSize

get_folder_info

Get Folder Info

Get detailed information about a specific folder including its contents.

輸入參數folderId必填

create_folder

Create Folder

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

輸入參數name必填assignTodescription

clone_folder

Clone Folder

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.

輸入參數nameassignTofolderId必填descriptionisSaveDefaultView

update_folder

Update Folder

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.

輸入參數name必填assignTofolderId必填description

delete_folder

Delete Folder

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.

輸入參數folderId必填

check_recorder_status

Check Recorder Status

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

輸入參數token必填

create_recorder

Create Recorder

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.

輸入參數metaname必填optionsdurationfolderIddescriptionnotifyUsersnotificationisAutoAnalyzesourceLanguageclientInformation

list_recorders

List Recorders

List all recorders/surveys in the workspace.

輸入參數pagesortBypageSize

clone_recorder

Clone Recorder

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.

輸入參數namefolderIdrecorderId必填description

get_recorder_info

Get Recorder Info

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

輸入參數recorderId必填

get_recorder_recordings

Get Recorder Submissions

List all submissions/recordings collected by a specific recorder.

輸入參數recorderId必填

generate_recorder_url

Get Recorder Share URL

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.

輸入參數recorderId必填

update_recorder_settings

Update Recorder Settings

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.

輸入參數metaname必填optionsdurationfolderIdrecorderId必填descriptionnotifyUsersnotificationisAutoAnalyzesourceLanguage

update_recorder_questions

Update Recorder Questions

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.

輸入參數nameemailconsentquestions必填recorderId必填

delete_recorder

Delete Recorder

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.

輸入參數recorderId必填

create_embed

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

輸入參數mediaIdfolderIds

update_embed

Update Embed Widget

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.

輸入參數metaembedId必填mediaIdpasswordprivacyMode

check_embed

Check Embed Exists

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

輸入參數mediaId必填

get_embed_iframe_url

Get Embed Iframe URL

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

輸入參數mediaId必填

list_embed_sessions

List Embed Sessions

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.

輸入參數tofrompagesortdevicesearchviewercountryembedId必填mediaIdtrafficpageSize另有 4 個

get_embed_session_summary

Get Embed Session Summary

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.

輸入參數totzfromembedId必填trafficmediaPageincludeOwnermediaPageSize

get_embed_session

Get Embed Session

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.

輸入參數id必填embedId必填eventsPageeventsPageSize

ask_ai_chat

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. Set analysisMediaId + analysisInput to have the model listen to the audio or watch the video instead of reading the transcript alone. That is a premium feature and costs credits per hour of media — call get_analysis_quote first to check eligibility and price. Each question is charged to the account's chat usage. The assistant can also call other Speak AI tools and actions in the user's connected third-party apps (for example, sending a message), so a prompt can change data or send content outside this chat.

輸入參數tagsprompt必填endDatefieldIdfiltersfieldIdsfolderIdmediaIdspromptIdspeakersfolderIdsstartDate另有 5 個

get_analysis_quote

Get Analysis Quote

Check whether a media file can be analysed as audio or video, and what it will cost, before running ask_ai_chat with analysisInput. Returns { eligible, credits, seconds } and, when not eligible, a plain-English reason — an unavailable file is a normal result here, not an error. This is the only check that accounts for both the account's premium opt-in and the server-wide switch, so call it before committing to an expensive run.

輸入參數mediaId必填modelIdanalysisInput必填

retry_ai_chat

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. The turn runs again with its original settings, replaces the earlier answer for that message, and is charged to the account's chat usage again. Like ask_ai_chat, the assistant can call other Speak AI tools and actions in connected third-party apps.

輸入參數promptId必填messageId必填

get_chat_history

Get Chat History

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.

輸入參數limit

get_chat_messages

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.

輸入參數pagequeryfolderIdmediaIdspageSizepromptId

delete_chat_conversation

Delete Chat Conversation

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

輸入參數promptId必填

list_prompts

List Recent Chat Messages

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.

無需輸入參數。

get_favorite_prompts

Get Favorite Prompts

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

無需輸入參數。

toggle_prompt_favorite

Toggle Prompt Favorite

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

輸入參數promptId必填messageId必填isFavorite必填

update_chat_title

Rename Chat

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

輸入參數title必填promptId必填

submit_chat_feedback

Submit Chat Feedback

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.

輸入參數score必填reasonpromptId必填messageId必填

get_chat_statistics

Get Chat Statistics

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

輸入參數endDatestartDate

export_chat_answer

Export Chat Answer

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

輸入參數fileType必填promptId必填messageId必填

list_meeting_events

List Meeting Events

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

輸入參數pagepageSizeplatformTypemeetingStatus

schedule_meeting_event

Schedule AI Meeting Assistant

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.

輸入參數title必填folderIdmeetingURL必填meetingDatemeetingLanguage

remove_assistant_from_meeting

Remove Assistant from Meeting

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

輸入參數meetingAssistantEventId必填

delete_scheduled_assistant

Cancel Scheduled Meeting Assistant

Cancel and delete a scheduled meeting assistant event.

輸入參數meetingAssistantEventId必填

get_live_meeting_transcript

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.

輸入參數mediaIdsinceEndInSecmeetingAssistantEventId

list_fields

List Custom Fields

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

無需輸入參數。

create_field

Create Custom Field

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.

輸入參數name必填type必填promptdescriptionotherValuesprivacyModeallowedValuesallowedValuesModenotApplicableValues

update_multiple_fields

Bulk Update Custom Field Values

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.

輸入參數fields必填folderIdmediaIds

update_field

Update Custom Field

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

輸入參數id必填name必填typepromptdescriptionotherValuesprivacyModeallowedValuesallowedValuesModenotApplicableValues

list_labels

List Labels

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.

輸入參數searchstatus

create_label

Create Label

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

輸入參數name必填colorisGroupparentIdsortOrderdescription

update_label

Update Label

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

輸入參數namecolorlabelId必填parentIdsortOrderdescription

archive_label

Archive Label

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

輸入參數labelId必填

restore_label

Restore Label

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

輸入參數labelId必填

merge_labels

Merge Labels

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

輸入參數labelId必填targetLabelId必填

add_speak_label_sets

Add Speak Label Sets

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

輸入參數sets必填

list_media_labels

List Media Labels

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.

輸入參數statusmediaId必填

apply_label

Apply Label

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

輸入參數quoterangemediaId必填labelIds必填occurrenceexpectedTranscriptRevision

update_media_label

Update Media Label

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

輸入參數quoterangeactionmediaId必填labelIdsoccurrencemediaLabelId必填expectedTranscriptRevision

remove_media_label

Remove Media Label

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

輸入參數mediaId必填mediaLabelId必填

list_media_comments

List Media Comments

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.

輸入參數filtermediaId必填

add_comment

Add Comment

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

輸入參數body必填quoterangemediaId必填parentIdoccurrencemediaLabelIdexpectedTranscriptRevision

update_comment

Update Comment

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

輸入參數body必填mediaId必填commentId必填

resolve_comment

Resolve Comment

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

輸入參數mediaId必填resolvedcommentId必填

delete_comment

Delete Comment

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

輸入參數mediaId必填commentId必填

list_automations

List Automations

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

輸入參數pagequerysortByrunTypeisActivepageSizefolderIds

list_automation_names

List Automation Names

List the names and ids of active automations that contain an AI chat (magic prompt) step. Inactive automations and automations without an AI chat step are not included; use list_automations for the full list.

無需輸入參數。

get_automation

Get Automation Details

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

輸入參數automationId必填

get_automation_runs

Get Automation Runs

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

輸入參數pagestatuspageSizeautomationId必填

create_automation

Create Automation

Create an automation: a trigger plus ordered steps (V2 graph model). The automation is active by default and then runs on its own every time its trigger fires. Depending on its steps, each run can send email to any address, post to the workspace's Slack, send HTTP requests to any webhook URL, fetch a file from a URL into Speak, run actions in connected third-party apps through Composio. An inbound-webhook trigger creates a public URL that accepts payloads (returned as inboundWebhook.inboundUrl). A Composio app-event trigger subscribes to events on the connected third-party account. Valid trigger and step types come from list_automation_triggers and list_automation_actions. To map inbound-webhook payload fields, send a test payload to the URL with ?test=1, read the tokens with get_inbound_webhook, then call update_automation.

輸入參數name必填steps必填runTypetrigger必填isActivescheduletriggersdescription

update_automation

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. The saved steps run automatically on later triggers and can send email, post to Slack, call webhook URLs, and run actions in connected third-party apps. Changing a Composio app-event trigger updates the subscription on that third-party account.

輸入參數name必填steps必填runTypetrigger必填isActivescheduletriggersdescriptionautomationId必填

toggle_automation_status

Toggle Automation Status

Toggle an automation rule between active and inactive. This flips the current state, so call get_automation first if you need to know which way it will flip. An active automation runs on its own every time its trigger fires, and its steps can send email, post to Slack, call webhook URLs, and run actions in connected third-party apps. For a Composio app-event trigger, this also creates or removes the event subscription on the connected third-party account.

輸入參數automationId必填

bulk_update_automation_status

Bulk Update Automation Status

Activate or deactivate multiple automations at once. An active automation runs on its own every time its trigger fires, and its steps can send email, post to Slack, call webhook URLs, and run actions in connected third-party apps. For Composio app-event triggers, this also creates or removes the event subscription on the connected third-party account.

輸入參數isActive必填automationIds必填

bulk_assign_automation_folders

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

輸入參數folderIds必填automationIds必填

run_automations

Run Automations

Manually run one or more automations against one or more media items now (outside the normal trigger). Only active automations run; inactive or unknown automation ids and unknown media ids are skipped without an error. The runs happen in the background and this returns only an acknowledgement, so check results with get_automation_runs. Every step executes for real: it can send email, post to Slack, call webhook URLs, and run actions in connected third-party apps.

輸入參數mediaIds必填automationIds必填

delete_automation

Delete Automation

Permanently delete an automation rule. If it has an inbound webhook URL, that URL stops accepting payloads, and any event subscription it holds on a connected third-party account through Composio is removed.

輸入參數automationId必填

get_automation_run

Get Automation Run

Get one automation run in full: every step, in dependency order, with what it produced and why it stopped. Use this after test_automation or to explain a run that went the wrong way. On a branched automation the run's overall status is not the whole story — a filter that stops one leg marks the entire run "killed" even when the other leg finished its work — so read the per-step summary this returns, not just the status.

輸入參數runId必填automationId必填

get_automation_run_stats

Get Automation Run Stats

Aggregate run counts for an automation over a period — how many completed, failed, or were stopped.

輸入參數daysautomationId必填

test_automation

Test Automation

Run one automation once against one media item to see which way it branches. This is a real run, not a dry run, and it works on inactive automations too. Only the run's own status notifications are suppressed and translation steps are skipped. Notify steps still send their email or Slack message, outbound webhooks still fire, and Composio actions still run against the connected third-party account. Confirm with the user before testing an automation that sends anything outside Speak. It needs a mediaId and sends no webhook payload, so on an inbound-webhook automation the payload tokens resolve to empty. Returns a runId; read the result with get_automation_run.

輸入參數mediaId必填automationId必填

validate_automation_graph

Validate Automation Graph

Check a step graph without saving anything. Reports the same problems create_automation and update_automation would refuse — branch wiring, rules a condition cannot actually read, shapes the Speak web editor could not reopen — plus non-blocking warnings. Use it to iterate on a branched automation instead of discovering the problems one failed save at a time.

輸入參數steps必填runTypetrigger

describe_automation_graph

Describe Automation Graph

Show a saved automation's steps as an indented branch tree instead of a flat list. Worth calling before update_automation, which replaces the whole automation: editing one leg means re-sending every step with its dependsOn intact, and this shows what the shape currently is.

輸入參數automationId必填

list_automation_apps

List Automation Apps

List the apps in Speak's automation catalog: Speak's built-in apps plus, when enabled, third-party apps available through Composio, each marked connected or not_connected for this user. Read-only: the list comes from Speak's own catalog and the user's saved connections, and no third-party service is called. Use the app slugs with list_automation_triggers and list_automation_actions.

無需輸入參數。

list_automation_triggers

List Automation Triggers

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

輸入參數app

list_automation_actions

List Automation Actions

List the step types (actions) available in Speak's automation catalog, optionally for one app slug, plus the fields each filter or condition step can test. Read-only: served from Speak's own catalog and the user's saved connections, with no third-party calls. Listing an action does not run it.

輸入參數app

create_webhook

Create Webhook

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

輸入參數eventscallbackUrl必填description

list_webhooks

List Webhooks

List all configured webhooks in the workspace.

無需輸入參數。

update_webhook

Update Webhook

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.

輸入參數eventswebhookId必填callbackUrl必填description

provision_inbound_webhook

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.

無需輸入參數。

get_inbound_webhook

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

輸入參數childKeywebhookIdautomationId

get_webhook_attempts

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.

輸入參數pagepageSizewebhookId必填

delete_webhook

Delete Webhook

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

輸入參數webhookId必填

search_media

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.

輸入參數query必填endDatestartDatefilterList

create_clip

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.

輸入參數tagstitle必填mediaType必填timeRanges必填descriptionmergeStrategy

get_clips

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

輸入參數clipIdfolderIdmediaIds

update_clip

Update Clip

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

輸入參數tagstitleclipId必填description

delete_clip

Delete Clip

Permanently delete a clip and its associated media file.

輸入參數clipId必填

build_automation

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. create_automation takes the raw wire format instead. Passing automationId replaces that whole automation. The automation is active by default and then runs on its own every time its trigger fires: upload steps fetch a file from any URL, slack notify steps post to the workspace's Slack, and call_webhook steps send HTTP requests to any URL. An inbound_webhook trigger creates a public URL that accepts payloads.

輸入參數name必填steps必填trigger必填isActiveorTriggersdescriptionautomationId

upload_and_analyze

Upload and Analyze Media

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.

輸入參數url必填nametagsfolderIdmediaTypesourceLanguage

upload_and_analyze_batch

Upload and Analyze Several URLs

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.

輸入參數tagsurls必填folderIdmediaTypeconcurrencysourceLanguage

upload_local_file

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. Each upload creates a media item. After upload, use get_media_status to poll for completion, then get_transcript and get_media_insights.

輸入參數nametagsfilePath必填folderIdmediaTypesourceLanguage

list_users

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.

輸入參數pagesortBypageSizefilterName

list_user_groups

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.

無需輸入參數。

create_user_group

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.

輸入參數usersdescription必填

update_user_group

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.

輸入參數_id必填users必填description必填

delete_user_group

Delete User Group

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

輸入參數id必填

list_dashboards

List Dashboards

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

無需輸入參數。

get_dashboard

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

輸入參數dashboardId必填

list_dashboard_widgets

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.

無需輸入參數。

create_dashboard

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

輸入參數icontitle必填sourcefilterswidgetsassignTosectionssettingsdateRangeisDefaultdescription

update_dashboard

Update Dashboard

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 feedba

輸入參數icontitlesourcefilterswidgetsassignTorevisionsectionssettingsdateRangeisDefaultdashboardId必填另有 1 個

delete_dashboard

Delete Dashboard

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

輸入參數dashboardId必填

duplicate_dashboard

Duplicate Dashboard

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.

輸入參數dashboardId必填

share_dashboard

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.

輸入參數dashboardId必填

get_dashboard_speakers_insight

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.

輸入參數endDatestartDatefilterListfolderScope

list_voice_agents

List Voice Agents

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.

無需輸入參數。

get_voice_agent

Get Voice Agent

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

輸入參數agentId必填

list_voice_conversations

List Voice Conversations

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.

輸入參數pagelimitagentId

get_voice_conversation

Get Voice Conversation

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

輸入參數conversationId必填

get_agent_analytics

Get Voice Agent Analytics

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.

輸入參數tzendstartagentId必填compareincludeTests

create_voice_agent

Create Voice Agent

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.

輸入參數llmname必填voice必填avatarfolderIdpersonality必填chatSettingsinstructions必填enableWebSearchconversationMode

update_voice_agent

Update Voice Agent

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.

輸入參數llmnamevoiceavataragentId必填folderIdpersonalitychatSettingsinstructionsenableWebSearchconversationMode

list_voice_avatars

List Voice Avatars

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_voices

List Voices

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.

無需輸入參數。

delete_voice_agent

Delete Voice Agent

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.

輸入參數agentId必填

create_voice_agent_from_prompt

Create Voice Agent From Prompt

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.

輸入參數nameprompt必填manualInstructions

generate_voice_agent_config

Generate Voice Agent Config

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.

輸入參數prompt必填agentId必填manualInstructions

get_voice_agent_setup_guide

Get Voice Agent Setup Guide

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_test_suite

Get Voice Test Suite

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.

輸入參數agentId必填

update_voice_test_suite

Update Voice Test Suite

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.

輸入參數agentId必填scenariosmaxCostPerRunscheduledCronautoRunOnKbUpdateautoRunOnInstructionSave

generate_voice_test_suite

Generate Voice Test Suite

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.

輸入參數agentId必填

start_voice_test_run

Start Voice Agent Test Run

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.

輸入參數agentId必填

get_active_voice_test_run

Get Active Voice Test Run

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.

輸入參數agentId必填

pause_voice_test_run

Pause Voice Test Run

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.

輸入參數runId必填agentId必填

resume_voice_test_run

Resume Voice Test Run

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.

輸入參數runId必填agentId必填

cancel_voice_test_run

Cancel Voice Test Run

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.

輸入參數runId必填agentId必填

list_voice_test_runs

List Voice Test Runs

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

輸入參數limitagentId必填

get_voice_test_run

Get Voice Test Run

Get a test run's full detail, including scenarioResults and recommendations. Scoped to your company; agentId is not used to filter this lookup, only runId.

輸入參數runId必填agentId必填

apply_voice_test_recommendation

Apply Voice Test Recommendation

Apply a test run recommendation's quick action to the agent (e.g. patch_instructions appends the suggested fix to the agent's instructions). Requires the OWNER or ADMIN role.

輸入參數recId必填runId必填agentId必填

get_voice_test_baseline

Get Voice Test Baseline

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.

輸入參數agentId必填

get_voice_test_score_history

Get Voice Test Score History

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.

輸入參數limitagentId必填

list_voice_questions

List Voice Questions

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.

輸入參數agentId必填enabledOnly

get_voice_question

Get Voice Question

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

輸入參數fieldId必填

create_voice_question

Create Voice Question

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.

輸入參數orderagentId必填enabledrequiredtemplateId必填customConfigmappedFieldIdtriggerConditionmaxPromptAttemptsnoResponseBehavior

update_voice_question

Update Voice Question

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.

輸入參數orderenabledfieldId必填requiredcustomConfigmappedFieldIdtriggerConditionmaxPromptAttemptsnoResponseBehavior

delete_voice_question

Delete Voice Question

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.

輸入參數fieldId必填

reorder_voice_questions

Reorder Voice Questions

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.

輸入參數agentId必填fieldOrders必填

list_voice_question_templates

List Voice Question Templates

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.

輸入參數category

create_voice_question_template

Create Voice Question Template

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.

輸入參數name必填tagscategory必填isPublicfieldType必填description必填defaultConfig必填

list_voice_kb_gaps

List Voice KB Gaps

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.

輸入參數agentId必填

analyze_voice_kb_gaps

Analyze Voice KB Gaps

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.

輸入參數agentId必填

add_voice_kb_gap

Add Voice KB Gap

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.

輸入參數gapId必填titleansweragentId必填

dismiss_voice_kb_gap

Dismiss Voice KB Gap

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

輸入參數gapId必填agentId必填

list_voice_faq_suggestions

List Voice FAQ Suggestions

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.

輸入參數agentId必填

generate_voice_faq_suggestions

Generate Voice FAQ Suggestions

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.

輸入參數agentId必填

add_voice_faq_suggestion

Add Voice FAQ Suggestion

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.

輸入參數answeragentId必填questionsuggestionId必填

update_voice_faq_suggestion

Update Voice FAQ Suggestion

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.

輸入參數answeragentId必填questionsuggestionId必填

dismiss_voice_faq_suggestion

Dismiss Voice FAQ Suggestion

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

輸入參數agentId必填suggestionId必填

list_voice_agent_resources

List Voice Agent Resources

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.

輸入參數pagelimitsearchagentId

create_voice_agent_resource

Create Voice Agent Resource

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.

輸入參數url必填title必填action必填agentId必填contentTypedescription必填

bulk_create_voice_agent_resources

Bulk Create Voice Agent Resources

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.

輸入參數agentId必填resources必填

update_voice_agent_resource

Update Voice Agent Resource

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.

輸入參數urltitleactionresourceId必填contentTypedescription

delete_voice_agent_resource

Delete Voice Agent Resource

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.

輸入參數resourceId必填

analyze_voice_instruction_gaps

Analyze Voice Instruction Gaps

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.

輸入參數agentId必填anchorsoriginalPromptconversationSummaries

apply_voice_instruction_gap

Apply Voice Instruction Gap

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.

輸入參數agentId必填suggestedPatch必填insertAfterSection

版本歷史

17
  1. v1.41.1最新Oct 30, 2026
  2. v1.40.1Oct 29, 2026
  3. v1.39.0Oct 19, 2026
  4. v1.38.2Oct 16, 2026
  5. v1.38.1Oct 16, 2026
  6. v1.37.0Oct 15, 2026
  7. v1.35.0Oct 15, 2026
  8. v1.34.1Oct 14, 2026
  9. v1.33.2Oct 13, 2026
  10. v1.33.1Oct 9, 2026
  11. v1.30.0Oct 7, 2026
  12. v1.29.0Oct 5, 2026
  13. v1.28.6Oct 5, 2026
  14. v1.28.5Oct 4, 2026
  15. v1.28.2Oct 3, 2026
  16. v1.28.1Oct 2, 2026
  17. v1.23.1Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。