TeamMeet MCP
An MCP server that allows AI agents to start meetings, read transcripts with speaker attribution, post chat messages, speak in rooms, draw images, and manage recordings via a WebSocket or HTTP interface.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://teammeet.ai/mcpWhat you can do with it
- Start a new meeting and generate a join link
- Read meeting transcripts with verified speaker names
- Post messages or speak aloud in an active meeting
- List and retrieve links for meeting recordings
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- teammeet 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 18 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Tools
18 advertised
start_meeting
Start a new meeting and get its code and link. The link works in any browser with no account and no download. Nobody can join a meeting that was not started this way.
{
"type": "object",
"properties": {
"mode": {
"enum": [
"meet",
"align",
"agenda",
"brainstorm",
"legal"
],
"type": "string",
"description": "What the AI in the room should do with what is said. \"meet\" keeps live notes; \"agenda\" tracks topics you supply; \"brainstorm\" draws pictures from the conversation; \"align\" runs a decision protocol; \"legal\" is a two-party call with Counsel, an AI counsel that reads the draft aloud and proposes wording both parties must accept (the host calls it in from the room). Defaults to brainstorm."
},
"topics": {
"type": "array",
"items": {
"type": "string"
},
"description": "Agenda topics, if mode is agenda."
}
}
}list_meetings
List the meetings this key started that are still running, with how many people are in each.
{
"type": "object",
"properties": {}
}get_transcript
The full transcript of a meeting, with who said each line. Speaker attribution here is not a guess from a mixed audio stream — each microphone is transcribed separately, so the name on a line is the connection the words arrived on.
{
"type": "object",
"required": [
"meeting"
],
"properties": {
"since": {
"type": "number",
"description": "Only lines after this epoch-ms timestamp."
},
"meeting": {
"type": "string",
"description": "The meeting code, like abc-defg-hij."
}
}
}get_notes
What the room has read out of the conversation so far — decisions, open questions, actions and live disagreements. Every item carries a verbatim quote from the transcript; anything that failed that check is marked unverified rather than presented as fact.
{
"type": "object",
"required": [
"meeting"
],
"properties": {
"meeting": {
"type": "string"
}
}
}send_message
Post a message into the meeting chat, from this agent, under its own name. Everyone in the room sees it.
{
"type": "object",
"required": [
"meeting",
"text"
],
"properties": {
"text": {
"type": "string"
},
"meeting": {
"type": "string"
}
}
}speak
Say something out loud in the meeting. It is spoken through the room's speakers and joins the transcript, so it is on the record like anything else that was said. Use sparingly — this interrupts people.
{
"type": "object",
"required": [
"meeting",
"text"
],
"properties": {
"text": {
"type": "string",
"description": "Keep it to a sentence or two. Nobody wants to be read a paragraph."
},
"meeting": {
"type": "string"
}
}
}draw
Generate a picture from a description and put it in the meeting for everyone to see.
{
"type": "object",
"required": [
"meeting",
"prompt"
],
"properties": {
"kind": {
"enum": [
"visual",
"diagram",
"infographic",
"meme"
],
"type": "string",
"description": "diagram and infographic render legible labels; visual and meme are for imagery."
},
"prompt": {
"type": "string"
},
"meeting": {
"type": "string"
}
}
}list_recordings
Recordings this key can see, newest first, with their share links.
{
"type": "object",
"properties": {
"meeting": {
"type": "string"
}
}
}send_feedback
File something you noticed about Team Meet — a bug, a confusing moment, an idea. It goes on the list the product is built from; repeats are counted and move the item up. Be specific: the page, what you expected, what happened. Set fix=true when the person wants the platform itself changed: it becomes a fix request, an AI engineer turns it into a pull request, and a person reviews it before it ships. The reply carries a link to follow it.
{
"type": "object",
"required": [
"text"
],
"properties": {
"fix": {
"type": "boolean",
"description": "true = the person wants this FIXED in the platform; it becomes a pull request."
},
"kind": {
"enum": [
"bug",
"idea",
"confusing",
"praise",
"question"
],
"type": "string"
},
"page": {
"type": "string",
"description": "The URL or path where you noticed it."
},
"text": {
"type": "string",
"description": "What you noticed, in one or a few sentences."
},
"actual": {
"type": "string"
},
"expected": {
"type": "string"
},
"severity": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "5 = blocks the task, 1 = polish"
}
}
}submit_fix
Open a pull request against Team Meet: a unified diff (`git diff` output) you wrote against its source, for a fix request. Give feedback_id to attach it to an existing request (see send_feedback, or GET /api/fixes for the open ones), or give text to file the request and attach the fix in one step. Nothing is applied automatically — a person reviews and merges. Run the tests your change touches first (AGENTS.md says which) and report them.
{
"type": "object",
"required": [
"diff"
],
"properties": {
"body": {
"type": "string",
"description": "What changed and why, and how you checked it."
},
"diff": {
"type": "string",
"description": "Unified diff against the source, with diff --git headers."
},
"page": {
"type": "string"
},
"text": {
"type": "string",
"description": "If there is no feedback_id: what is being fixed, as a person would report it."
},
"tests": {
"type": "object",
"properties": {
"failed": {
"type": "integer"
},
"passed": {
"type": "integer"
},
"command": {
"type": "string"
}
}
},
"title": {
"type": "string",
"description": "One line, like a commit subject."
},
"feedback_id": {
"type": "string",
"description": "The fix request this resolves."
}
}
}import_transcript
Bring a meeting transcript or a chat log from another tool into the dashboard of the account this key was minted by — .vtt/.srt captions (Zoom, Google Meet, Teams, Fireflies, Grain), Otter-style text, Read AI JSON, any JSON list of turns with names and times, or the chats: Google Meet's chat log, Zoom's meeting_saved_chat.txt, a WhatsApp export. Speaker labels are kept exactly as written; a chat is filed as a chat. Returns the meeting id and link.
{
"type": "object",
"required": [
"name",
"text"
],
"properties": {
"name": {
"type": "string",
"description": "The file name, with its extension — it says what format this is and often carries the date."
},
"text": {
"type": "string",
"description": "The whole file as text."
},
"title": {
"type": "string",
"description": "A title for the meeting, if the file name is not one."
},
"started_at": {
"type": "string",
"description": "ISO 8601 start time, if the file does not say."
}
}
}send_notetaker
Send the TeamMeet notetaker to a Zoom, Google Meet, Microsoft Teams or Webex meeting you did not host. It joins as a participant, records, and when the call ends the transcript, recap and action items land in the dashboard of the account this key was minted by. Needs a key minted while signed in. Metered in minutes per month by plan.
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The meeting link."
},
"name": {
"type": "string",
"description": "What the bot is called in the call. Default \"TeamMeet notetaker\"."
},
"join_at": {
"type": "string",
"description": "ISO 8601 time to join, for a meeting later today. Omit to join now."
}
}
}my_tasks
What your calls have handed to you — the person this TeamMeet connector belongs to — to do: who asked, what they asked for, which call, and where each one has got to. Open ones first. Use get_task for the whole of one.
{
"type": "object",
"properties": {
"all": {
"type": "boolean",
"description": "Include finished and declined ones too."
}
}
}get_task
One task handed to you from a call, in full: the words the person asked in, who they are, the lines of the call just before (each with the microphone it came in on), and any TeamMeet fix request it is about.
{
"type": "object",
"required": [
"task"
],
"properties": {
"task": {
"type": "string",
"description": "The task id, tmt_…"
}
}
}update_task
Say where a task has got to. The call it came from sees it in its chat: "working" when you start, "done" with a short note and the link to what you made (a pull request, a document), or "blocked" with what you need from a person.
{
"type": "object",
"required": [
"task",
"status"
],
"properties": {
"note": {
"type": "string",
"description": "Two plain sentences at most."
},
"task": {
"type": "string",
"description": "The task id, tmt_…"
},
"links": {
"type": "array",
"items": {
"type": "string"
},
"description": "Links to what you made."
},
"status": {
"enum": [
"working",
"done",
"blocked"
],
"type": "string"
}
}
}join_meeting
Join a TeamMeet call you are in, as your own agent — "<your name>'s Claude" appears in the call, announced in its chat, and anyone in it can remove you. Then call listen to hear it. You can only join a call the person this connector belongs to is in (signed in) or started.
{
"type": "object",
"required": [
"meeting"
],
"properties": {
"meeting": {
"type": "string",
"description": "The meeting code, like abc-defg-hij, or its link."
}
}
}listen
Wait for what happens next in a call you joined: new transcript lines with who said each (ground truth — every microphone is transcribed on its own), new chat messages, and tasks handed to you. Returns as soon as there is something, or after wait_seconds. Pass back the "next" value as since. Keep calling it to stay in the call; you leave after 90 seconds without one.
{
"type": "object",
"required": [
"meeting"
],
"properties": {
"since": {
"type": "number",
"description": "The \"next\" value from the last listen. Omit for the last few minutes."
},
"meeting": {
"type": "string"
},
"wait_seconds": {
"type": "number",
"description": "How long to wait for something new, up to 45. Default 25."
}
}
}hand_off
Hand a task to another person's agent, from the call you are in — they see it in the call and send it to their Claude with one press. Name the person as they appear in the call.
{
"type": "object",
"required": [
"meeting",
"to",
"task"
],
"properties": {
"to": {
"type": "string",
"description": "The person's name as it shows in the call."
},
"task": {
"type": "string",
"description": "What their agent should do, in plain words."
},
"meeting": {
"type": "string"
}
}
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 556 ms
- 95th percentile latency
- 556 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 556 ms · metadata changed · 18 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http teammeet-mcp https://teammeet.ai/mcpCodex
codex mcp add teammeet-mcp --url https://teammeet.ai/mcpCursor
{
"mcpServers": {
"teammeet-mcp": {
"url": "https://teammeet.ai/mcp"
}
}
}Cline
{
"mcpServers": {
"teammeet-mcp": {
"type": "streamableHttp",
"url": "https://teammeet.ai/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"teammeet-mcp": {
"type": "http",
"url": "https://teammeet.ai/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http teammeet-mcp https://teammeet.ai/mcpClaude Desktop
{
"mcpServers": {
"teammeet-mcp": {
"url": "https://teammeet.ai/mcp"
}
}
}Windsurf
{
"mcpServers": {
"teammeet-mcp": {
"serverUrl": "https://teammeet.ai/mcp"
}
}
}Let your agent find its tools
Find servers like TeamMeet MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.