MCP Directory

How to add joinly to Windsurf

Make your meetings accessible to AI agents — let them join, talk, and act in Zoom, Meet & Teams calls in real time. Paste the config into ~/.codeium/windsurf/mcp_config.json and restart Windsurf.

Last updated June 14, 2026 · 527 · http · no auth

Windsurf config for joinly

docker pull ghcr.io/joinly-ai/joinly:latest
{
  "mcpServers": {
    "joinly": {
      "serverUrl": "http://localhost:8000/mcp/"
    }
  }
}

Remote server — no local install needed. Restart the client after saving the config.

Setup steps

  1. 1Open Windsurf → Cascade → the hammer/MCP icon → Configure (or edit ~/.codeium/windsurf/mcp_config.json).
  2. 2Paste the joinly config below.
  3. 3Fill in placeholder secrets, then save.
  4. 4Click Refresh in the MCP panel.
  5. 5joinly's tools become available to Cascade.

Before you start

  • Docker (to pull and run ghcr.io/joinly-ai/joinly)
  • A .env file with an LLM provider API key (e.g. OPENAI_API_KEY, or Anthropic/Ollama config)
  • An MCP client to connect to the server (e.g. the joinly-client package via uvx, or a custom client)
  • Optional: NVIDIA Container Toolkit and CUDA >= 12.6 for the GPU image; provider API keys for ElevenLabs/Deepgram if used

What joinly can do in Windsurf

join_meeting

Join a meeting with a URL, participant name, and optional passcode.

leave_meeting

Leave the current meeting.

speak_text

Speak text in the meeting using TTS (requires a 'text' parameter).

send_chat_message

Send a chat message in the meeting (requires a 'message' parameter).

mute_yourself

Mute the agent's microphone.

unmute_yourself

Unmute the agent's microphone.

get_chat_history

Get the current meeting chat history in JSON format.

get_participants

Get the current meeting participants in JSON format.

Security

Self-hosted and privacy-first. The server itself requires no auth on its local MCP endpoint (default http://localhost:8000/mcp/), so do not expose port 8000 to untrusted networks. Provider API keys (LLM, ElevenLabs, Deepgram, etc.) are supplied via a .env file passed to the container. The agent can speak, send chat, and read transcripts/participants/video in live meetings — treat it as an active meeting participant.

joinly + Windsurf FAQ

Where is the Windsurf config file?

Windsurf reads MCP servers from ~/.codeium/windsurf/mcp_config.json. Paste the joinly config there under the "mcpServers" key and restart the client.

Is joinly safe to use with Windsurf?

Self-hosted and privacy-first. The server itself requires no auth on its local MCP endpoint (default http://localhost:8000/mcp/), so do not expose port 8000 to untrusted networks. Provider API keys (LLM, ElevenLabs, Deepgram, etc.) are supplied via a .env file passed to the container. The agent can speak, send chat, and read transcripts/participants/video in live meetings — treat it as an active meeting participant.

How do I connect to the joinly MCP server?

Start the server with `docker run -p 8000:8000 ghcr.io/joinly-ai/joinly:latest`, then connect an MCP client to the streamable-HTTP endpoint at http://localhost:8000/mcp/. The README recommends the joinly-client package: `uvx joinly-client --joinly-url http://localhost:8000/mcp/ --env-file .env <MeetingUrl>`.

Which meeting platforms are supported?

Google Meet, Zoom, and Microsoft Teams, plus any meeting reachable over a browser.

Which LLM, STT, and TTS providers can I use?

Bring-your-own-LLM (OpenAI, Anthropic/Claude, or local Ollama). STT supports Whisper (local, default) or Deepgram. TTS supports Kokoro (local, default), ElevenLabs, or Deepgram.

View repo Full joinly page