Speak AI
About
Official MCP server for Speak AI, transcribe meetings, analyze media, extract insights, and search across your entire audio/video library. 81 tools, 5 resources, 3 prompts. Upload recordings, get AI-powered transcripts and summaries, ask questions across files, create clips, sche
Details
- Transport
- SSE
Explore
- 83 MCP tools for media, AI chat, folders, and automations
- 5 resources for direct data access without tool calls
- 3 pre-built workflow prompts for multi-step tasks
- 28 CLI commands for scripting and automation
- Transcribe, analyze, search, and manage media at scale
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
Speak AICommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
| Command | Description |
|---|---|
| config set-key [key] | Set your API key (interactive if no key given) |
| config show | Show current configuration |
| config test | Validate API key and test connectivity |
| config set-url <url> | Set custom API base URL |
| init | Interactive setup — configure key and auto-detect MCP clients |
Detects installed MCP clients and configures them automatically:
npm install -g @speakai/mcp-server
speakai-mcp init
<details>
<summary>Claude Desktop</summary>
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"speak-ai": {
"command": "npx",
"args": ["-y", "@speakai/mcp-server"],
"env": {
"SPEAK_API_KEY": "your-api-key"
}
}
}
}
</details>
<details>
<summary>Claude Code</summary>
export SPEAK_API_KEY="your-api-key"
claude mcp add speak-ai -- npx -y @speakai/mcp-server
</details>
<details>
<summary>Cursor</summary>
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"speak-ai": {
"command": "npx",
"args": ["-y", "@speakai/mcp-server"],
"env": {
"SPEAK_API_KEY": "your-api-key"
}
}
}
}
</details>
<details>
<summary>Windsurf</summary>
Add to ~/.windsurf/mcp.json:
{
"mcpServers": {
"speak-ai": {
"command": "npx",
"args": ["-y", "@speakai/mcp-server"],
"env": {
"SPEAK_API_KEY": "your-api-key"
}
}
}
}
</details>
<details>
<summary>VS Code</summary>
Add to ~/.vscode/mcp.json:
{
"mcpServers": {
"speak-ai": {
"command": "npx",
"args": ["-y", "@speakai/mcp-server"],
"env": {
"SPEAK_API_KEY": "your-api-key"
}
}
}
}
</details>
<details>
<summary>Any MCP Client (STDIO)</summary>
SPEAK_API_KEY=your-key npx @speakai/mcp-server
</details>
| Variable | Required | Default | Description |
|---|---|---|---|
| SPEAK_API_KEY | Yes | -- | Your Speak AI API key |
| SPEAK_ACCESS_TOKEN | No | Auto-managed | JWT access token (auto-fetched and refreshed) |
| SPEAK_BASE_URL | No | https://api.speakai.co | API base URL |
---
The MCP server and CLI handle token management automatically. If you're calling the REST API directly, here's the full auth flow:
Step 1 — Get an access token:
curl -X POST https://api.speakai.co/v1/auth/accessToken \
-H "Content-Type: application/json" \
-H "x-speakai-key: YOUR_API_KEY"
Response:
{
"data": {
"email": "[email protected]",
"accessToken": "eyJhbG...",
"refreshToken": "eyJhbG..."
}
}
Step 2 — Use the token on all subsequent requests:
curl https://api.speakai.co/v1/media \
-H "x-speakai-key: YOUR_API_KEY" \
-H "x-access-token: ACCESS_TOKEN_FROM_STEP_1"
Step 3 — Refresh before expiry:
curl -X POST https://api.speakai.co/v1/auth/refreshToken \
-H "Content-Type: application/json" \
-H "x-speakai-key: YOUR_API_KEY" \
-H "x-access-token: CURRENT_ACCESS_TOKEN" \
-d '{"refreshToken": "REFRESH_TOKEN_FROM_STEP_1"}'
Token Lifetimes:
| Token | Expiry | How to Renew |
|---|---|---|
| Access token | 80 minutes | Refresh endpoint or re-authenticate |
| Refresh token | 24 hours | Re-authenticate with API key |
Auth Rate Limits: 5 requests per 60 seconds on both /v1/auth/accessToken and /v1/auth/refreshToken.
get_signed_upload_url
Get a pre-signed S3 URL for direct file upload
upload_media
Upload media from a public URL for transcription
upload_local_file
Upload a local file directly from disk
upload_and_analyze
Upload, wait for processing, return transcript + insights in one call
list_media
List and search media files with filters, pagination, and optional inline data (transcripts, speakers, keywords) via `include` param
get_media_insights
Get AI insights — topics, sentiment, summaries, action items
get_transcript
Get full transcript with speaker labels and timestamps
get_captions
Get subtitle-formatted captions for a media file
update_transcript_speakers
Rename speaker labels in a transcript
bulk_update_transcript_speakers
Rename speaker labels across multiple media files in one call (max 500)
get_media_status
Check processing status (pending -> processed)
update_media_metadata
Update name, description, tags, or folder
delete_media
Permanently delete a media file
toggle_media_favorite
Mark or unmark media as a favorite
reanalyze_media
Re-run AI analysis with latest models
bulk_move_media
Move multiple media files to a folder in one call
ask_magic_prompt
Ask AI questions about media, folders, or your whole workspace
retry_magic_prompt
Retry a failed or incomplete AI response
get_chat_history
List recent Magic Prompt conversations
get_chat_messages
Get full message history for conversations
delete_chat_message
Delete a specific chat message
list_prompts
List available AI prompt templates
get_favorite_prompts
Get all favorited prompts and answers
toggle_prompt_favorite
Mark or unmark a chat message as favorite
update_chat_title
Rename a chat conversation
submit_chat_feedback
Rate a chat response (thumbs up/down)
get_chat_statistics
Get Magic Prompt usage statistics
export_chat_answer
Export a conversation or answer
list_folders
List all folders with pagination and sorting
get_folder_info
Get folder details and contents
create_folder
Create a new folder
clone_folder
Duplicate a folder and its contents
update_folder
Rename or update a folder
delete_folder
Delete a folder (media is preserved)
get_all_folder_views
List all saved views across folders
get_folder_views
List views for a specific folder
create_folder_view
Create a saved view with custom filters
update_folder_view
Update a saved view
clone_folder_view
Duplicate a view
create_recorder
Create a new recorder or survey
list_recorders
List all recorders
get_recorder_info
Get recorder details and questions
clone_recorder
Duplicate a recorder
get_recorder_recordings
List all submissions
generate_recorder_url
Get a shareable public URL
update_recorder_settings
Update branding and permissions
update_recorder_questions
Update survey questions
check_recorder_status
Check if recorder is active
delete_recorder
Delete a recorder
list_automations
List automation rules
get_automation
Get automation details
create_automation
Create an automation rule
update_automation
Update an automation
toggle_automation_status
Enable or disable an automation
create_clip
Create a highlight clip from time ranges across media files
get_clips
List clips or get a specific clip with download URL
update_clip
Update clip title, description, or tags
delete_clip
Permanently delete a clip
list_fields
List all custom fields
create_field
Create a custom field
update_field
Update a custom field
update_multiple_fields
Batch update multiple fields
create_webhook
Create a webhook for event notifications
list_webhooks
List all webhooks
update_webhook
Update a webhook
delete_webhook
Delete a webhook
list_meeting_events
List scheduled and completed events
schedule_meeting_event
Schedule AI assistant to join a meeting
remove_assistant_from_meeting
Remove assistant from active meeting
delete_scheduled_assistant
Cancel a scheduled meeting assistant
create_embed
Create an embeddable player widget
update_embed
Update embed settings
check_embed
Check if embed exists for media
get_embed_iframe_url
Get iframe URL for your website
create_text_note
Create a text note for AI analysis
get_text_insight
Get AI insights for a text note
reanalyze_text
Re-run AI analysis on a text note
update_text_note
Update note content (triggers re-analysis)
export_media
Export as PDF, DOCX, SRT, VTT, TXT, or CSV
export_multiple_media
Batch export with optional merge into one file
<details>
<summary>Media (16 tools)</summary>
| Tool | Description |
|---|---|
| get_signed_upload_url | Get a pre-signed S3 URL for direct file upload |
| upload_media | Upload media from a public URL for transcription |
| upload_local_file | Upload a local file directly from disk |
| upload_and_analyze | Upload, wait for processing, return transcript + insights in one call |
| list_media | List and search media files with filters, pagination, and optional inline data (transcripts, speakers, keywords) via include param |
| get_media_insights | Get AI insights — topics, sentiment, summaries, action items |
| get_transcript | Get full transcript with speaker labels and timestamps |
| get_captions | Get subtitle-formatted captions for a media file |
| update_transcript_speakers | Rename speaker labels in a transcript |
| bulk_update_transcript_speakers | Rename speaker labels across multiple media files in one call (max 500) |
| get_media_status | Check processing status (pending -> processed) |
| update_media_metadata | Update name, description, tags, or folder |
| delete_media | Permanently delete a media file |
| toggle_media_favorite | Mark or unmark media as a favorite |
| reanalyze_media | Re-run AI analysis with latest models |
| bulk_move_media | Move multiple media files to a folder in one call |
</details>
<details>
<summary>Magic Prompt / AI Chat (12 tools)</summary>
| Tool | Description |
|---|---|
| ask_magic_prompt | Ask AI questions about media, folders, or your whole workspace |
| retry_magic_prompt | Retry a failed or incomplete AI response |
| get_chat_history | List recent Magic Prompt conversations |
| get_chat_messages | Get full message history for conversations |
| delete_chat_message | Delete a specific chat message |
| list_prompts | List available AI prompt templates |
| get_favorite_prompts | Get all favorited prompts and answers |
| toggle_prompt_favorite | Mark or unmark a chat message as favorite |
| update_chat_title | Rename a chat conversation |
| submit_chat_feedback | Rate a chat response (thumbs up/down) |
| get_chat_statistics | Get Magic Prompt usage statistics |
| export_chat_answer | Export a conversation or answer |
</details>
<details>
<summary>Folders & Views (11 tools)</summary>
| Tool | Description |
|---|---|
| list_folders | List all folders with pagination and sorting |
| get_folder_info | Get folder details and contents |
| create_folder | Create a new folder |
| clone_folder | Duplicate a folder and its contents |
| update_folder | Rename or update a folder |
| delete_folder | Delete a folder (media is preserved) |
| get_all_folder_views | List all saved views across folders |
| get_folder_views | List views for a specific folder |
| create_folder_view | Create a saved view with custom filters |
| update_folder_view | Update a saved view |
| clone_folder_view | Duplicate a view |
</details>
<details>
<summary>Recorder / Survey (10 tools)</summary>
| Tool | Description |
|---|---|
| create_recorder | Create a new recorder or survey |
| list_recorders | List all recorders |
| get_recorder_info | Get recorder details and questions |
| clone_recorder | Duplicate a recorder |
| get_recorder_recordings | List all submissions |
| generate_recorder_url | Get a shareable public URL |
| update_recorder_settings | Update branding and permissions |
| update_recorder_questions | Update survey questions |
| check_recorder_status | Check if recorder is active |
| delete_recorder | Delete a recorder |
</details>
<details>
<summary>Automations (5 tools)</summary>
| Tool | Description |
|---|---|
| list_automations | List automation rules |
| get_automation | Get automation details |
| create_automation | Create an automation rule |
| update_automation | Update an automation |
| toggle_automation_status | Enable or disable an automation |
</details>
<details>
<summary>Clips (4 tools)</summary>
| Tool | Description |
|---|---|
| create_clip | Create a highlight clip from time ranges across media files |
| get_clips | List clips or get a specific clip with download URL |
| update_clip | Update clip title, description, or tags |
| delete_clip | Permanently delete a clip |
</details>
<details>
<summary>Custom Fields (4 tools)</summary>
| Tool | Description |
|---|---|
| list_fields | List all custom fields |
| create_field | Create a custom field |
| update_field | Update a custom field |
| update_multiple_fields | Batch update multiple fields |
</details>
<details>
<summary>Webhooks (4 tools)</summary>
| Tool | Description |
|---|---|
| create_webhook | Create a webhook for event notifications |
| list_webhooks | List all webhooks |
| update_webhook | Update a webhook |
| delete_webhook | Delete a webhook |
</details>
<details>
<summary>Meeting Assistant (4 tools)</summary>
| Tool | Description |
|---|---|
| list_meeting_events | List scheduled and completed events |
| schedule_meeting_event | Schedule AI assistant to join a meeting |
| remove_assistant_from_meeting | Remove assistant from active meeting |
| delete_scheduled_assistant | Cancel a scheduled meeting assistant |
</details>
<details>
<summary>Media Embed (4 tools)</summary>
| Tool | Description |
|---|---|
| create_embed | Create an embeddable player widget |
| update_embed | Update embed settings |
| check_embed | Check if embed exists for media |
| get_embed_iframe_url | Get iframe URL for your website |
</details>
<details>
<summary>Text Notes (4 tools)</summary>
| Tool | Description |
|---|---|
| create_text_note | Create a text note for AI analysis |
| get_text_insight | Get AI insights for a text note |
| reanalyze_text | Re-run AI analysis on a text note |
| update_text_note | Update note content (triggers re-analysis) |
</details>
<details>
<summary>Exports (2 tools)</summary>
| Tool | Description |
|---|---|
| export_media | Export as PDF, DOCX, SRT, VTT, TXT, or CSV |
| export_multiple_media | Batch export with optional merge into one file |
</details>
<details>
<summary>Media Statistics & Languages (2 tools)</summary>
| Tool | Description |
|---|---|
| get_media_statistics | Get workspace-level stats — counts, storage, processing breakdown |
| list_supported_languages | List all supported transcription languages |
</details>
<details>
<summary>Search / Analytics (1 tool)</summary>
| Tool | Description |
|---|---|
| search_media | Deep search across transcripts, insights, and metadata with filters |
</details>
---
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"speak ai": {
"speak-ai": {
"command": "npx",
"args": [
"-y",
"@speakai/mcp-server"
],
"env": {
"SPEAK_API_KEY": "your-api-key"
}
}
}
}
}
McpServers
{
"speak-ai": {
"command": "npx",
"args": [
"-y",
"@speakai/mcp-server"
],
"env": {
"SPEAK_API_KEY": "your-api-key"
}
}
}
<p align="center">

</p>
<h1 align="center">Speak AI MCP Server & CLI</h1>
<p align="center">
Connect Claude, Cursor, Windsurf, and other AI assistants to your <a href="https://speakai.co">Speak AI</a> workspace.<br/>
83 tools, 5 resources, 3 prompts, 28 CLI commands — transcribe, analyze, search, and manage media at scale.
</p>
<p align="center">
<a href="https://www.npmjs.com/package/@speakai/mcp-server"></a>
<a href="https://modelcontextprotocol.io"></a>
<a href="https://opensource.org/licenses/MIT"></a>
</p>
---
Quick Start
1. Get Your API Key
1. Go to Speak AI API Keys
2. Copy your API Key
2. Choose How to Use It
| Method | Best for |
|---|---|
| CLI | Scripts, pipelines, quick one-off tasks |
| MCP Server | AI assistants (Claude, Cursor, Windsurf, VS Code) |
| Both | Full power — agents orchestrate, CLI automates |
---
Setup
Auto-Setup (Recommended)
Detects installed MCP clients and configures them automatically:
npm install -g @speakai/mcp-server
speakai-mcp init
Manual Setup
<details>
<summary>Claude Desktop</summary>
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"speak-ai": {
"command": "npx",
"args": ["-y", "@speakai/mcp-server"],
"env": {
"SPEAK_API_KEY": "your-api-key"
}
}
}
}
</details>
<details>
<summary>Claude Code</summary>
export SPEAK_API_KEY="your-api-key"
claude mcp add speak-ai -- npx -y @speakai/mcp-server
</details>
<details>
<summary>Cursor</summary>
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"speak-ai": {
"command": "npx",
"args": ["-y", "@speakai/mcp-server"],
"env": {
"SPEAK_API_KEY": "your-api-key"
}
}
}
}
</details>
<details>
<summary>Windsurf</summary>
Add to ~/.windsurf/mcp.json:
{
"mcpServers": {
"speak-ai": {
"command": "npx",
"args": ["-y", "@speakai/mcp-server"],
"env": {
"SPEAK_API_KEY": "your-api-key"
}
}
}
}
</details>
<details>
<summary>VS Code</summary>
Add to ~/.vscode/mcp.json:
{
"mcpServers": {
"speak-ai": {
"command": "npx",
"args": ["-y", "@speakai/mcp-server"],
"env": {
"SPEAK_API_KEY": "your-api-key"
}
}
}
}
</details>
<details>
<summary>Any MCP Client (STDIO)</summary>
SPEAK_API_KEY=your-key npx @speakai/mcp-server
</details>
Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
| SPEAK_API_KEY | Yes | -- | Your Speak AI API key |
| SPEAK_ACCESS_TOKEN | No | Auto-managed | JWT access token (auto-fetched and refreshed) |
| SPEAK_BASE_URL | No | https://api.speakai.co | API base URL |
---
MCP Tools (83)
<details>
<summary>Media (16 tools)</summary>
| Tool | Description |
|---|---|
| get_signed_upload_url | Get a pre-signed S3 URL for direct file upload |
| upload_media | Upload media from a public URL for transcription |
| upload_local_file | Upload a local file directly from disk |
| upload_and_analyze | Upload, wait for processing, return transcript + insights in one call |
| list_media | List and search media files with filters, pagination, and optional inline data (transcripts, speakers, keywords) via include param |
| get_media_insights | Get AI insights — topics, sentiment, summaries, action items |
| get_transcript | Get full transcript with speaker labels and timestamps |
| get_captions | Get subtitle-formatted captions for a media file |
| update_transcript_speakers | Rename speaker labels in a transcript |
| bulk_update_transcript_speakers | Rename speaker labels across multiple media files in one call (max 500) |
| get_media_status | Check processing status (pending -> processed) |
| update_media_metadata | Update name, description, tags, or folder |
| delete_media | Permanently delete a media file |
| toggle_media_favorite | Mark or unmark media as a favorite |
| reanalyze_media | Re-run AI analysis with latest models |
| bulk_move_media | Move multiple media files to a folder in one call |
</details>
<details>
<summary>Magic Prompt / AI Chat (12 tools)</summary>
| Tool | Description |
|---|---|
| ask_magic_prompt | Ask AI questions about media, folders, or your whole workspace |
| retry_magic_prompt | Retry a failed or incomplete AI response |
| get_chat_history | List recent Magic Prompt conversations |
| get_chat_messages | Get full message history for conversations |
| delete_chat_message | Delete a specific chat message |
| list_prompts | List available AI prompt templates |
| get_favorite_prompts | Get all favorited prompts and answers |
| toggle_prompt_favorite | Mark or unmark a chat message as favorite |
| update_chat_title | Rename a chat conversation |
| submit_chat_feedback | Rate a chat response (thumbs up/down) |
| get_chat_statistics | Get Magic Prompt usage statistics |
| export_chat_answer | Export a conversation or answer |
</details>
<details>
<summary>Folders & Views (11 tools)</summary>
| Tool | Description |
|---|---|
| list_folders | List all folders with pagination and sorting |
| get_folder_info | Get folder details and contents |
| create_folder | Create a new folder |
| clone_folder | Duplicate a folder and its contents |
| update_folder | Rename or update a folder |
| delete_folder | Delete a folder (media is preserved) |
| get_all_folder_views | List all saved views across folders |
| get_folder_views | List views for a specific folder |
| create_folder_view | Create a saved view with custom filters |
| update_folder_view | Update a saved view |
| clone_folder_view | Duplicate a view |
</details>
<details>
<summary>Recorder / Survey (10 tools)</summary>
| Tool | Description |
|---|---|
| create_recorder | Create a new recorder or survey |
| list_recorders | List all recorders |
| get_recorder_info | Get recorder details and questions |
| clone_recorder | Duplicate a recorder |
| get_recorder_recordings | List all submissions |
| generate_recorder_url | Get a shareable public URL |
| update_recorder_settings | Update branding and permissions |
| update_recorder_questions | Update survey questions |
| check_recorder_status | Check if recorder is active |
| delete_recorder | Delete a recorder |
</details>
<details>
<summary>Automations (5 tools)</summary>
| Tool | Description |
|---|---|
| list_automations | List automation rules |
| get_automation | Get automation details |
| create_automation | Create an automation rule |
| update_automation | Update an automation |
| toggle_automation_status | Enable or disable an automation |
</details>
<details>
<summary>Clips (4 tools)</summary>
| Tool | Description |
|---|---|
| create_clip | Create a highlight clip from time ranges across media files |
| get_clips | List clips or get a specific clip with download URL |
| update_clip | Update clip title, description, or tags |
| delete_clip | Permanently delete a clip |
</details>
<details>
<summary>Custom Fields (4 tools)</summary>
| Tool | Description |
|---|---|
| list_fields | List all custom fields |
| create_field | Create a custom field |
| update_field | Update a custom field |
| update_multiple_fields | Batch update multiple fields |
</details>
<details>
<summary>Webhooks (4 tools)</summary>
…
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.


