livekit-ops-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@livekit-ops-mcpSpin up a hackathon workshop for 8 teams"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
livekit-ops-mcp
An MCP server that gives an AI agent operator control of a LiveKit deployment, plus a workshop kit that runs a hackathon room-by-room in one call.
24 tools over stdio. TypeScript, @modelcontextprotocol/sdk, livekit-server-sdk. Works against livekit-server --dev with zero configuration and against LiveKit Cloud with three environment variables.
npx livekit-ops-mcp # after publish; or: node dist/index.jsWhat it is
LiveKit already has MCP on the agent side: the Agents framework can consume MCP tools, and docs.livekit.io serves a documentation MCP. What did not exist was the other direction: an MCP server that exposes the LiveKit server API (rooms, access tokens, participants, data messages, egress, ingress) so that Claude, Cursor, or any MCP client can operate a deployment by talking to it.
On top of that control plane sits a workshop kit, because the operator who needs this most is the person running a room full of developers:
workshop_spinup: one call creates a room per team, mints a scoped join token per seat, and a mentor token with admin and record rights per room.workshop_join_sheet: turns that manifest into a printable HTML sheet with a QR code per seat (or Markdown).workshop_status: which teams are in their rooms, which rooms are empty, who is publishing.workshop_broadcast: "30 minutes left, submit your repo link" to every team room at once.workshop_teardown: delete everything under the event prefix when the day ends.
Related MCP server: Concord
Why
Events and community work run on repetition: the same room setup, the same token hand-out, the same "who is stuck" walk around the room, the same cleanup. Making that a five-prompt conversation with an agent means a meetup or hackathon host spends the evening with developers instead of with a terminal. The same tools double as the feedback loop: workshop_status and participant_list show, in real time, where builders drop off, and every session leaves a manifest that says what was tried. That is the signal a developer advocate carries back to Product.
Install
git clone https://github.com/ExpertVagabond/livekit-ops-mcp
cd livekit-ops-mcp
npm install
npm run buildRun a local LiveKit server (no account needed):
# Docker
docker run --rm -p 7880:7880 -p 7881:7881 -p 7882:7882/udp \
livekit/livekit-server --dev --bind 0.0.0.0 --node-ip 127.0.0.1
# or Homebrew
brew install livekit && livekit-server --dev--dev uses the well-known keys devkey / secret, which are also this server's defaults. For LiveKit Cloud or your own deployment:
Variable | Default | Notes |
|
|
|
|
| |
|
| |
|
| Base for join links ( |
Claude Desktop / Claude Code / Cursor config:
{
"mcpServers": {
"livekit": {
"command": "node",
"args": ["/path/to/livekit-ops-mcp/dist/index.js"],
"env": {
"LIVEKIT_URL": "wss://your-project.livekit.cloud",
"LIVEKIT_API_KEY": "APIxxxxxxxx",
"LIVEKIT_API_SECRET": "..."
}
}
}
}Claude Code one-liner: claude mcp add livekit -- node /path/to/livekit-ops-mcp/dist/index.js
Tools
Tool | What it does |
| Round-trips ListRooms; reports host, key, latency, active rooms. Run first. |
| Create a room with empty/departure timeouts, participant cap, metadata |
| List rooms, filter by exact names or prefix |
| Delete a room and disconnect everyone |
| Replace room metadata (pushed to all participants) |
| Participants with state, permissions, published tracks |
| One participant, including track SIDs |
| Kick a participant |
| Server-side mute/unmute of a published track |
| Name, metadata, attributes, permissions |
| Mint a scoped join JWT (room, identity, TTL, publish/subscribe/data/admin/record grants) and a Meet join link |
| Verify a JWT against the configured secret and return its claims |
| Publish a data message into a room from the server (topic, reliable/lossy, per-identity targeting) |
| Record a room to MP4/OGG/MP3 or push to RTMP/SRT |
| List egress jobs (filter by room, active only) |
| Stop an egress job |
| RTMP / WHIP / URL ingress into a room; returns URL and stream key for OBS |
| List ingress endpoints |
| Delete an ingress endpoint |
| N team rooms + seat tokens + mentor tokens in one call; returns a manifest |
| Printable HTML (QR per seat) or Markdown join sheet from the manifest |
| Live per-room participant and publisher counts, empty rooms |
| One data message to every room under the event prefix |
| Delete every room under the event prefix ( |
Every tool returns both human-readable text and structuredContent. SDK errors come back as MCP error results with a hint (for example, egress and ingress need their services running; --dev alone has neither).
Run a hackathon in five prompts
With the server connected to Claude:
"Check the LiveKit server is up."
server_healthreturnsok: true, the host, and latency."Spin up the SF Voice Agent Hackathon: teams Otters, Herons, Foxes, Kestrels, four seats each, tokens good for ten hours."
workshop_spinupcreatessf-voice-agent-hackathon-ottersand the rest, mints 16 seat tokens and 4 mentor tokens, and returns the manifest."Make me a printable join sheet."
workshop_join_sheetrenders one page per team with a QR code per seat. Save it as HTML, print it, cut it into strips."How are the teams doing? Tell everyone there are 30 minutes left."
workshop_statusshows two rooms empty and one team with nobody publishing (go help them);workshop_broadcastdrops the timer message into every room."Tear it all down."
workshop_teardowndeletes every room under the prefix.room_listconfirms zero.
The same manifest feeds a recap: which teams stayed in their room the whole session, which never joined, and how many published media. Those numbers go into the event write-up and back to the product team.
Tests
Unit tests run against mocked SDK clients through a real MCP client (in-memory transport):
$ npm test
Test Files 3 passed (3)
Tests 21 passed (21)
$ npx tsc --noEmit
(exit 0)The integration smoke test runs against a real livekit-server --dev, drives every step through tools/call, and joins a real WebRTC participant with @livekit/rtc-node so participant_list and data_send are exercised for real. Output from 2026-09-14 against livekit-server 1.13.7 in Docker:
$ npm run smoke
[01] tools/list -> 24 tools: server_health, room_create, room_list, room_delete, room_update_metadata, participant_list, participant_get, participant_remove, participant_mute_track, participant_update, token_create, token_verify, data_send, egress_start_room_composite, egress_list, egress_stop, ingress_create, ingress_list, ingress_delete, workshop_spinup, workshop_join_sheet, workshop_status, workshop_broadcast, workshop_teardown
[02] server_health -> ok=true apiHost=http://localhost:7880 latencyMs=48.5 activeRooms=0
[03] workshop_spinup -> 2 rooms: smoke-mu1wxi2g-otters (sid RM_2CTLxz9gvyRy, 2 seats + mentor); smoke-mu1wxi2g-herons (sid RM_Kjqpeyyvvrwv, 2 seats + mentor)
[04] token_verify -> valid=true sub=otters-seat-1 room=smoke-mu1wxi2g-otters roomJoin=true
[05] room_list prefix=smoke-mu1wxi2g -> 2 rooms
[06] rtc-node Room.connect(ws://localhost:7880) as otters-seat-1 -> isConnected=true, server-side sid PA_5Z8GYhBztT3s
[07] participant_list smoke-mu1wxi2g-otters -> 1: otters-seat-1 [ACTIVE]
[08] participant_update -> name="Otter One"
[09] data_send -> 23 bytes; participant received "hello from the operator"
[10] workshop_broadcast -> 2 rooms
[11] workshop_status -> rooms=2 participants=1 empty=["smoke-mu1wxi2g-herons"]
[12] participant_remove -> removed=otters-seat-1; client saw Disconnected
[13] egress_list -> error (expected on --dev, no egress service): twirp error unknown: egress not connected (redis required)
[14] ingress_list -> error (expected on --dev, no ingress service): twirp error unknown: ingress not connected (redis required)
[15] workshop_join_sheet(markdown) -> 3157 chars, first line "# smoke mu1wxi2g: join sheet"
[16] workshop_teardown -> deleted 2: smoke-mu1wxi2g-otters, smoke-mu1wxi2g-herons
[17] room_list prefix=smoke-mu1wxi2g -> 0 rooms
SMOKE PASS: 17 steps, 0 failures against http://localhost:7880Docker on macOS note: pass --node-ip 127.0.0.1 to the server so ICE candidates point at the mapped ports; without it the signalling connects but media never does.
Layout
src/index.ts stdio entry
src/server.ts McpServer + tool registration
src/config.ts LIVEKIT_* env, dev defaults
src/clients.ts RoomService / Egress / Ingress / AccessToken behind one interface (mockable)
src/tools/*.ts rooms, participants, tokens, data, egress, ingress, workshop
scripts/smoke.ts integration smoke against a real server
test/unit/*.test.ts vitest, mocked clients through a real MCP clientPrior art
LiveKit Agents MCP client support (agents consuming MCP tools) and
livekit-examples/basic-mcpLiveKit Docs MCP at
https://docs.livekit.io/mcp(documentation search)Community voice agents wired to MCP servers (home-assistant-mcp-agent, voice-mcp-agent, and others)
None of these expose the server API to an MCP client; that is what this repo does.
License
MIT. Copyright (c) 2026 Matthew Karsten.
This server cannot be deployed
Maintenance
Related MCP Connectors
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Hosted runtime for persistent agent teams, durable workflows, memory, schedules, and goals.
Backend platform for AI agents: one agentstack.execute tool runs batched steps over +700 actions (hosting, storage, auth, payments, CRM, app builder).
Build, validate, and deploy multi-agent AI solutions from any AI environment.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage agents, webhooks, and P2P connectivity on the Anycast network, allowing operations like listing agents, creating tokens, and viewing connection stats.9 npmMIT
- AlicenseNot gradedqualityDmaintenanceProvides a multi-agent collaboration room with real-time messaging, file sharing, and coordination primitives for AI agents.2MIT
- AlicenseNot gradedqualityBmaintenancePeer-to-peer WebRTC communication for AI agents, connecting autonomous coding agents over low-latency WebRTC DataChannels with room-based signaling, video stream bridging, and multi-agent coordination — all exposed as MCP tools.8 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to initiate and control outbound telephone calls and answer inbound calls through Telnyx and LiveKit, with realtime voice conversations powered by Gemini Live or OpenAI Realtime.MIT