Koskamo

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.

TeamMeet MCP logo, by TeamMeetCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by TeamMeet
You need:Bearer key
MCP endpoint (Streamable HTTP)
https://teammeet.ai/mcp
Vendor documentation

What 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

Community listingRegistry 1.0.0
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
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Tools

18 advertised

start_meeting
Advertised by the server during the last successful anonymous check.

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.

start_meeting input schema
{
  "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
Advertised by the server during the last successful anonymous check.

List the meetings this key started that are still running, with how many people are in each.

list_meetings input schema
{
  "type": "object",
  "properties": {}
}
get_transcript
Advertised by the server during the last successful anonymous check.

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.

get_transcript input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

get_notes input schema
{
  "type": "object",
  "required": [
    "meeting"
  ],
  "properties": {
    "meeting": {
      "type": "string"
    }
  }
}
send_message
Advertised by the server during the last successful anonymous check.

Post a message into the meeting chat, from this agent, under its own name. Everyone in the room sees it.

send_message input schema
{
  "type": "object",
  "required": [
    "meeting",
    "text"
  ],
  "properties": {
    "text": {
      "type": "string"
    },
    "meeting": {
      "type": "string"
    }
  }
}
speak
Advertised by the server during the last successful anonymous check.

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.

speak input schema
{
  "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
Advertised by the server during the last successful anonymous check.

Generate a picture from a description and put it in the meeting for everyone to see.

draw input schema
{
  "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
Advertised by the server during the last successful anonymous check.

Recordings this key can see, newest first, with their share links.

list_recordings input schema
{
  "type": "object",
  "properties": {
    "meeting": {
      "type": "string"
    }
  }
}
send_feedback
Advertised by the server during the last successful anonymous check.

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.

send_feedback input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

submit_fix input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

import_transcript input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

send_notetaker input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

my_tasks input schema
{
  "type": "object",
  "properties": {
    "all": {
      "type": "boolean",
      "description": "Include finished and declined ones too."
    }
  }
}
get_task
Advertised by the server during the last successful anonymous check.

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.

get_task input schema
{
  "type": "object",
  "required": [
    "task"
  ],
  "properties": {
    "task": {
      "type": "string",
      "description": "The task id, tmt_…"
    }
  }
}
update_task
Advertised by the server during the last successful anonymous check.

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.

update_task input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

join_meeting input schema
{
  "type": "object",
  "required": [
    "meeting"
  ],
  "properties": {
    "meeting": {
      "type": "string",
      "description": "The meeting code, like abc-defg-hij, or its link."
    }
  }
}
listen
Advertised by the server during the last successful anonymous check.

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.

listen input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

hand_off input schema
{
  "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

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http teammeet-mcp https://teammeet.ai/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add teammeet-mcp --url https://teammeet.ai/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable teammeet-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "teammeet-mcp": {
      "url": "https://teammeet.ai/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "teammeet-mcp": {
      "type": "streamableHttp",
      "url": "https://teammeet.ai/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start teammeet-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "teammeet-mcp": {
      "type": "http",
      "url": "https://teammeet.ai/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http teammeet-mcp https://teammeet.ai/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "teammeet-mcp": {
      "url": "https://teammeet.ai/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.