
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
- 1Open Windsurf → Cascade → the hammer/MCP icon → Configure (or edit ~/.codeium/windsurf/mcp_config.json).
- 2Paste the joinly config below.
- 3Fill in placeholder secrets, then save.
- 4Click Refresh in the MCP panel.
- 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_meetingJoin a meeting with a URL, participant name, and optional passcode.
leave_meetingLeave the current meeting.
speak_textSpeak text in the meeting using TTS (requires a 'text' parameter).
send_chat_messageSend a chat message in the meeting (requires a 'message' parameter).
mute_yourselfMute the agent's microphone.
unmute_yourselfUnmute the agent's microphone.
get_chat_historyGet the current meeting chat history in JSON format.
get_participantsGet 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.