Skip to main content

Overview

Vexa exposes a Model Context Protocol (MCP) server that lets AI agents join meetings, fetch transcripts, manage recordings, and interact with participants. Any MCP-compatible client (Claude Desktop, Cursor, custom agents) can use Vexa as a tool provider. The MCP server wraps the full Vexa REST API and adds agent-friendly features like meeting URL parsing and bundled post-meeting summaries.

Setup

1. Get an API key

Create a user and token via the Admin API, or use an existing key.

2. Configure your MCP client

Add Vexa to your client’s MCP server configuration:
{
  "mcpServers": {
    "vexa": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://api.cloud.vexa.ai/mcp",
        "--header", "Authorization: Bearer ${VEXA_API_KEY}"
      ],
      "env": {
        "VEXA_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}
For self-hosted deployments, replace the URL with your MCP service endpoint (default: http://localhost:18888).

3. Authentication

The MCP server accepts API keys via:
MethodFormat
Bearer token (preferred)Authorization: Bearer <api_key>
API key headerX-API-Key: <api_key>

Tools

Meeting Management

Extract platform, meeting ID, and passcode from any meeting URL.
POST /parse-meeting-link
{
  "meeting_url": "https://meet.google.com/abc-defg-hij"
}
Response:
{
  "platform": "google_meet",
  "native_meeting_id": "abc-defg-hij",
  "passcode": null,
  "warnings": []
}
Supported URL formats:
  • Google Meet: https://meet.google.com/xxx-yyyy-zzz
  • Zoom: https://zoom.us/j/12345678901?pwd=abc123
  • Teams: https://teams.live.com/meet/<ID>?p=<PASSCODE>
Teams teams.microsoft.com/l/meetup-join/... URLs are not supported for anonymous bot joins. Use the teams.live.com/meet/ format with a passcode.

request-meeting-bot

Send a bot to join a meeting. Accepts either a full URL (auto-parsed) or explicit platform + meeting ID.
POST /request-meeting-bot
{
  "meeting_url": "https://meet.google.com/abc-defg-hij",
  "bot_name": "Vexa Notetaker",
  "language": "en"
}
Or with explicit fields:
{
  "platform": "google_meet",
  "native_meeting_id": "abc-defg-hij",
  "language": "en"
}
FieldTypeRequiredDescription
meeting_urlstringNoFull meeting URL (auto-parsed)
native_meeting_idstringNoPlatform-specific meeting ID
platformstring"google_meet"google_meet, teams, or zoom
languagestringNoLanguage code (e.g., en, es)
bot_namestringNoDisplay name for the bot
passcodestringNoRequired for Teams meetings

bot-status

Check status of all running bots.
GET /bot-status

bot-config

Update a running bot’s configuration.
PUT /bot-config/{platform}/{meeting_id}
{ "language": "es" }

bot (DELETE)

Remove a bot from a meeting.
DELETE /bot/{platform}/{meeting_id}

Transcripts

meeting-transcript

Fetch the full transcript for a meeting.
GET /meeting-transcript/{platform}/{meeting_id}
Returns meeting metadata, segments with speaker attribution, and notes. Create a temporary public URL for sharing a transcript.
POST /transcript-share-link/{platform}/{meeting_id}
Response:
{
  "share_id": "QlS7Rkkrxn9g6sadFmUwkg",
  "url": "https://share.dev.vexa.ai/public/transcripts/QlS7Rkkrxn9g6sadFmUwkg.txt",
  "expires_at": "2025-01-15T12:00:00Z",
  "expires_in_seconds": 900
}

Recordings

recordings (GET)

List recordings with pagination.
GET /recordings?limit=10&offset=0

recordings/{id} (GET)

Get a single recording with its media files.

recordings/{id} (DELETE)

Delete a recording and its storage files.

recordings/{id}/media/{media_id}/download

Get a download URL for a media file.

Recording Configuration

recording-config (GET)

Get the user’s default recording settings.

recording-config (PUT)

Update recording settings.
PUT /recording-config
{
  "enabled": true,
  "capture_modes": ["audio"]
}

Meetings

meetings (GET)

List all meetings for the authenticated user.

meeting (PATCH)

Update meeting metadata (name, participants, languages, notes).
PATCH /meeting/{platform}/{meeting_id}
{
  "name": "Weekly Standup",
  "notes": "Discussed Q1 roadmap",
  "participants": ["Alice", "Bob"],
  "languages": ["en"]
}

meeting (DELETE)

Purge transcripts and anonymize meeting data.

Bundles

meeting-bundle

Get a compact post-meeting summary combining status, notes, recordings, and an optional share link.
POST /meeting-bundle
{
  "meeting_platform": "google_meet",
  "meeting_id": "abc-defg-hij",
  "include_segments": false,
  "include_share_link": true,
  "share_ttl_seconds": 86400,
  "include_recordings": true,
  "include_media_download_urls": false
}
FieldTypeDefaultDescription
meeting_platformstringPlatform identifier
meeting_idstringNative meeting ID
include_segmentsboolfalseInclude full transcript segments
include_share_linkbooltrueGenerate a temporary share URL
share_ttl_secondsint86400Share link expiration (seconds)
include_recordingsbooltrueInclude recording metadata
include_media_download_urlsboolfalseInclude presigned download URLs

Prompts

The MCP server provides pre-built prompts for common agent workflows:
PromptUse caseKey arguments
vexa.meeting_prepParse link, send bot, attach notesmeeting_url, notes
vexa.during_meetingCheck bot status, get live transcriptmeeting_platform, meeting_id
vexa.post_meetingFetch bundle, produce follow-upsmeeting_platform, meeting_id
vexa.teams_link_helpTroubleshoot Teams link issuesmeeting_url

Self-Hosted MCP Endpoint

When running Vexa locally, the MCP server is available at http://localhost:18888. Update your MCP client configuration accordingly:
{
  "mcpServers": {
    "vexa": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "http://localhost:18888/mcp",
        "--header", "Authorization: Bearer ${VEXA_API_KEY}"
      ],
      "env": {
        "VEXA_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}