Put an AI bot in your meetings from inside your editor.
Join, record, transcribe and summarize calls on Zoom, Google Meet and Microsoft Teams - or deploy a MIA voice agent that listens and talks back in the room. All through 19 tools and 10 skills, over the hosted MeetStream MCP server.
Nothing to run locally. No server to host. The MCP server is hosted at https://mcp.meetstream.ai/mcp, so once the plugin is installed every agent on your account gets the tools.
| Step | |
|---|---|
| 1 | Search "MeetStream" in the Cursor marketplace and click Add to Cursor |
| 2 | In Cursor Settings → MCP, click Connect next to meetstream |
| 3 | Sign in at app.meetstream.ai and click Allow - no key to copy |
That's it. Ask your agent to "list my MeetStream bots" to confirm it's wired up.
Tip
New to MeetStream? Create your first bot walks the whole flow in a few minutes, and How bots work explains what's happening underneath.
Plain language. The right skill loads itself based on what you say.
|
Record and understand a call
|
Build and automate
|
Most meeting bots sit silently and record. MIA joins as a real participant that listens, answers, and can call tools mid-conversation. MeetStream runs the audio bridge, so you host nothing.
| Choose | When |
|---|---|
pipeline |
You want to pick each provider, use a wake word, or tune interruptions and VAD |
realtime |
You want lowest latency with a single speech-to-speech model |
Important
Attaching an agent takes only agent_config_id. Passing socket_connection_url or live_audio_required alongside it is the single most common cause of a silent agent - those are for bring-your-own-bridge setups. The mia-voice-agents skill enforces this.
Two fields worth setting that most people miss: boostwords on the transcriber (fixes "it mishears our company name") and mcp_servers on the agent (turns a talking bot into one that does work). Full reference: Create MIA · MIA configurations · API.
Bot lifecycle - 7 tools
| Tool | Does | API |
|---|---|---|
create_bot |
Send a bot into a meeting | ref |
list_bots |
List your bots | ref |
get_bot_status |
Where it is right now | ref |
get_bot_detail |
Full record, incl. transcript_id |
ref |
get_bot_summary |
AI summary of the meeting | ref |
remove_bot |
Make it leave, keep the data | ref |
delete_bot_data |
Permanently erase media + transcripts | ref |
Transcription - 3 tools
| Tool | Does | API |
|---|---|---|
get_transcript |
Fetch by bot_id; resolves the transcript_id for you |
ref |
list_transcriptions |
All transcripts for a bot | ref |
transcribe_audio |
Re-transcribe stored audio | ref |
Provider choice matters: post-call · live · all providers · diarization · languages
Meeting data - 4 tools
| Tool | Does | API |
|---|---|---|
get_media_urls |
Presigned audio, video, per-participant, screenshots | ref |
get_participants |
Who was in the room | ref |
get_chats |
In-meeting chat | ref |
get_speaker_timeline |
Who spoke when | ref |
Live interaction & calendar - 5 tools
| Tool | Does | API |
|---|---|---|
send_chat_message |
Post into the meeting chat | ref |
send_image |
Show an image as the bot's video | ref |
list_calendar_events |
Upcoming synced events | ref |
schedule_calendar_bot |
Put a bot on an event | ref |
webhook_events_guide |
The event lifecycle, inline | ref |
Ten skills teach the agent how to use MeetStream well. They load automatically when the conversation matches - no command to remember.
| Skill | Loads when you say | Deep dive |
|---|---|---|
| join-meeting | "join this meeting", "send a bot to…", "record this call" | First bot |
| meeting-brief | "summarize that meeting", "action items", "who talked the most" | Speaker timeline |
| mia-voice-agents | "voice agent", "talking bot", "wake word", "MIA" | Create MIA |
| webhooks | "webhook", "callback_url", "my webhook isn't firing" | Events · Signatures |
| realtime-streaming | "live captions", "stream the audio", "websocket" | Live audio · Control patterns |
| recordings-and-media | "download the recording", "per-participant audio", "retention" | Retrieve · Per-participant |
| calendar-automation | "auto-join my meetings", "connect my calendar", "recurring" | Google · Outlook |
| platform-setup | "can't join Zoom", "waiting room", "signed-in bots", "Teams lobby" | Zoom · Meet · Teams |
| troubleshooting | "401", "403", "stuck on 202", "transcript never arrives" | Errors · Debugging |
| build-notetaker | "build a notetaker", "integrate MeetStream into my app" | Agent skills |
Why the skills matter more than the tools
The tools are just an API surface. The skills carry the hard-won details that stop an agent guessing wrong:
- MIA takes only
agent_config_id- adding bridge URLs silences the agent - Every ending arrives once as
event: "bot.stopped", with the reason inbot_event(bot.kicked,bot.notallowed,bot.denied,bot.failed); failures carrystatus_code: 500 - Streaming-only providers produce no post-call transcript: no
transcription.processed, and a transcript fetch returns202indefinitely get_transcripttakes thebot_id(REST takes thetranscript_id), and segments usetranscript, nottext202and507are not errors - 202 means poll again, 507 means your idempotent retry replayed- REST uses
Authorization: Token, the MCP server usesBearer- mixing them up returns 401 in_call_recording_timeouthas a hard 600 second floor
Note
Some capabilities are REST-only and deliberately not MCP tools: MIA agent configs, calendar connection, signed-in bot account management for Google and Teams (sending a signed-in bot works over MCP via create_bot's google_login_domain / teams_login_domain, MCP server 0.3.2+), Zoom authenticated joins, custom storage and pause/resume. The skills know the difference and route to REST instead of inventing a tool that doesn't exist.
There is no key to paste. The plugin's server entry is just the URL, so Cursor signs you in with OAuth: click Connect, sign in at app.meetstream.ai and click Allow. The dashboard then creates an API key for this connection, named after Cursor. To disconnect, delete that key on the API keys page. The hosted server is multi-tenant and stores no key of its own.
Prefer to manage a key yourself (for example in CI)? Add the server to ~/.cursor/mcp.json with a header instead, and turn off the plugin's own meetstream server so the tools do not appear twice:
{
"mcpServers": {
"meetstream": {
"url": "https://mcp.meetstream.ai/mcp",
"headers": { "Authorization": "Bearer ${env:MEETSTREAM_API_KEY}" }
}
}
}The MCP server is hosted only: do not use npx @meetstream/mcp, which is the old Node server, frozen at 0.3.0.
Auth reference: Authentication · MCP server setup
git clone https://github.com/meetstream-ai/meetstream-cursor-plugin.git
ln -s "$PWD/meetstream-cursor-plugin" ~/.cursor/plugins/local/meetstreamRestart Cursor. The symlink means edits apply on the next restart with no re-copying.
.cursor-plugin/plugin.json manifest (no variables: sign-in is OAuth)
mcp.json Cursor connector -> mcp.meetstream.ai
.mcp.json Claude Code / agent-plugin connector
skills/*/SKILL.md 10 skills
| What | Where | |
|---|---|---|
| 🔌 | MCP server - the same 19 tools for any MCP client, hosted at mcp.meetstream.ai/mcp |
github · docs |
| ⌨️ | CLI - drive MeetStream from your terminal | @meetstream/cli · docs |
| 🤖 | Claude Code plugin - /plugin marketplace add meetstream-ai/claude-plugin |
docs |
| 🧪 | Labs - runnable end-to-end templates | github |
| 📖 | Docs for agents - machine-readable docs for your own tooling | docs |
Start here · Documentation · API reference · API playground · Dashboard setup
Go deeper · How bots work · Webhooks & events · Scheduling bots · Idempotency & dedup · Usage & retention · Automatic leave
When stuck · Errors · Debugging bots · FAQ · Support · support@meetstream.ai
Built by MeetStream.ai · MIT