jitsi-mcp-server

jitsi-mcp-server

MCP server that enables AI agents to join Jitsi Meet rooms, send/receive chat, record meetings, and monitor participants using headless Chrome.

Category
Visit Server

README

Jitsi MCP Server

MCP (Model Context Protocol) server for Jitsi Meet that allows AI agents to:

  • Join/leave meetings - Connect to any Jitsi Meet room
  • Read/write chat - Full bidirectional chat support
  • Record meetings - Capture video/audio streams locally
  • Get meeting state - Participants, recording status, etc.

Architecture

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   AI Agent      │────▶│  MCP Server     │────▶│  Jitsi Meet     │
│  (Claude, etc)  │     │  (this server)  │     │  (browser)      │
└─────────────────┘     └─────────────────┘     └─────────────────┘
                               │
                               ▼
                        ┌─────────────────┐
                        │  Puppeteer      │
                        │  (Chrome)       │
                        └─────────────────┘

This server uses Puppeteer to control a headless Chrome browser that joins Jitsi meetings. The MCP interface exposes tools and resources for AI agents to interact with the meeting.

Prerequisites

  • Node.js 18+
  • Chrome/Chromium (installed automatically by Puppeteer)

Installation

cd jitsi-mcp-server
npm install
npm run build

Configuration

Copy .env.example to .env and configure:

cp .env.example .env
Variable Description Default
JITSI_SERVER_URL Jitsi Meet server URL https://meet.jit.si
JITSI_DISPLAY_NAME Bot display name AI Assistant
JITSI_JWT_APP_ID JWT app ID (for private servers) -
JITSI_JWT_SECRET JWT secret (for private servers) -
RECORDINGS_DIR Where to save recordings ./recordings
RECORDING_FORMAT Video format (webm/mp4) webm
PORT HTTP server port 3000
HOST HTTP server host 0.0.0.0
HEADLESS Run browser headless true

Usage

Stdio Transport (for Claude Desktop, etc.)

npm start
# or
node dist/index.js

Add to Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "jitsi": {
      "command": "node",
      "args": ["/path/to/jitsi-mcp-server/dist/index.js"],
      "env": {
        "JITSI_SERVER_URL": "https://meet.jit.si",
        "JITSI_DISPLAY_NAME": "Claude Assistant"
      }
    }
  }
}

HTTP/SSE Transport

npm run dev
# or for production
node dist/http-server.js

Connect via SSE at http://localhost:3000/sse

MCP Tools

Tool Description
jitsi_join_meeting Join a Jitsi room
jitsi_leave_meeting Leave current meeting
jitsi_send_chat Send chat message
jitsi_get_chat_history Get chat messages
jitsi_get_participants List participants
jitsi_get_meeting_state Get full meeting state
jitsi_toggle_mute Mute/unmute microphone
jitsi_toggle_video Enable/disable camera
jitsi_start_recording Start screen recording
jitsi_stop_recording Stop and save recording
jitsi_take_screenshot Capture meeting screenshot

MCP Resources

URI Description
jitsi://meeting/state Current meeting state
jitsi://meeting/participants Participant list
jitsi://meeting/chat Chat history
jitsi://meeting/screenshot Live screenshot

REST API (HTTP mode only)

When running in HTTP mode, these endpoints are available:

# Join a meeting
POST /api/join
{"roomName": "my-room", "displayName": "Bot"}

# Leave meeting
POST /api/leave

# Send chat message
POST /api/chat
{"message": "Hello!"}

# Get chat history
GET /api/chat

# Get meeting state
GET /api/state

# Get participants
GET /api/participants

# Start recording
POST /api/recording/start

# Stop recording
POST /api/recording/stop

# Get screenshot
GET /api/screenshot

Example Agent Usage

// Using the MCP client
const response = await mcpClient.callTool('jitsi_join_meeting', {
  roomName: 'daily-standup',
  displayName: 'AI Scribe',
  startMuted: true,
  startWithVideoOff: true,
});

// Send a greeting
await mcpClient.callTool('jitsi_send_chat', {
  message: 'Hello! I\'m here to take notes for this meeting.',
});

// Start recording
await mcpClient.callTool('jitsi_start_recording', {});

// ... meeting happens ...

// Get chat history for summarization
const chat = await mcpClient.callTool('jitsi_get_chat_history', {});

// Stop recording
await mcpClient.callTool('jitsi_stop_recording', {});

// Leave
await mcpClient.callTool('jitsi_leave_meeting', {});

Private Jitsi Servers

For self-hosted Jitsi with JWT authentication:

  1. Configure your Jitsi server for JWT auth
  2. Set JITSI_JWT_APP_ID and JITSI_JWT_SECRET in .env
  3. The server will automatically generate JWTs for joining meetings

Important Notes

Audio Recording

Audio recording captures remote participants' audio via WebRTC. For reliable audio capture:

  • Set HEADLESS=false in your .env file
  • The browser needs a real audio context to capture WebRTC streams

Jitsi Server Compatibility

  • meet.jit.si: Works with anonymous users if a logged-in moderator starts the meeting first
  • Self-hosted: Full anonymous access typically available
  • Alternative servers: Tested with meet.ffmuc.net and others

Chat

The bot automatically enters a chat nickname when required by the Jitsi interface.

Limitations

  • Headless Audio: Audio recording may not work reliably in headless mode
  • Video Recording: Currently audio-only; video frames are not captured
  • Private Messages: Only public chat is supported

Development

# Run in development mode with hot reload
npm run dev

# Run HTTP server in dev mode
npm run dev:http

# Build
npm run build

# Run tests
npm test

# Lint
npm run lint

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured