Meetings
Hrida.ai includes a built-in AI Meeting Suite that brings video conferencing, automated meeting notes, scheduling, and multi-agent collaboration together in one platform. Each capability is delivered as a plugin — you configure exactly what you need via the admin panel without touching configuration files.
The Meeting Suite is off by default. Enable it with ENABLE_MEETINGS=true in your .env or via Admin Panel → Settings → Meetings.
Four Plugins in One Suite
| Plugin | What it does | Provider options |
|---|---|---|
| Video Conferencing | Self-hosted or cloud video rooms with SSO via JWT | Jitsi Meet, Zoom |
| Meeting Notes | Upload recording audio → Whisper transcription → Ollama AI summary + action items | Whisper (local or containerized) |
| Scheduling | Schedules meetings that sync directly with the built-in Calendar | Built-in Calendar (no external service) |
| Multi-Agent Room | A chat room where Facilitator, Analyst, and Summarizer agents collaborate on any topic | Existing hrida-ai-studio AgentSkills |
All four plugins share a single Meeting Session record that links the Jitsi room, notes, calendar event, and agent channel together.
Architecture
Admin Panel → Meetings → Plugins
↓ configure one or more plugins
↓
POST /api/v1/meetings/sessions/ ← create a session via any plugin
↓
MeetingSession (DB)
├── provider_session_id (Jitsi room / Zoom ID)
├── channel_id (agent room only)
├── calendar_event_id (Scheduling creates a CalendarEvent directly)
└── recording_url (set when Zoom webhook fires)
Inbound webhooks:
POST /api/v1/webhooks/meetings/{plugin_id}
← Zoom meeting.ended, etc.
Quick Start
New to the Meeting Suite? The Getting Started guide walks you through enabling the feature, adding your first plugin, and starting a meeting in under 5 minutes.
Adding Your First Plugin
- Navigate to Admin Panel → Settings → Meetings.
- Click + Add Plugin and select a type from the dropdown.
- Fill in the config fields (API keys, secrets, domain). Required fields are marked with *.
- Click Save.
- The Meeting Suite immediately appears in the sidebar under Meetings.
Navigating the Meeting Suite
Once enabled, the Meetings icon appears in the sidebar. The suite has three views:
| View | URL | Purpose |
|---|---|---|
| Meetings | /meetings | Dashboard — list sessions, start a new meeting |
| Schedule | /meetings/schedule | Book a meeting synced with your built-in Calendar |
| Notes | /meetings/notes | All meeting transcriptions and AI summaries |
Clicking a session row in the dashboard navigates to the Meeting Room (/meetings/room/{id}) which shows the video iframe and a collapsible notes panel side-by-side.
Real-Time Updates
All four plugins push state changes to the admin panel and meeting room page via WebSocket:
| Socket event | When fired | UI effect |
|---|---|---|
events:meeting_notes | New notes saved after transcription | Notes panel auto-updates |
events:meeting_session | Session status changes (active → ended) | Room header updates status badge |
events:channel | Agent room: agent posts a response | Message appears in chat |
Docker Compose Overlay
The Meeting Suite ships as a separate compose overlay so it doesn't affect deployments that don't need it.
docker compose \
-f docker-compose.yaml \
-f docker-compose.meetings.yaml \
up -dThe overlay adds Jitsi Meet (web, prosody, jicofo, jvb), a Whisper ASR API container, and an hrida-mcpo tool server. All services join the existing openhridaai-network and share postgres/redis.
See Video Conferencing for the full Jitsi setup walkthrough.
Agent Integration
There are two ways for an agent to interact with meetings, depending on how much access it needs.
Option A — create_meeting built-in tool (no extra setup)
Grant the create_meeting tool to any Agent Builder agent node or Skill. It can create a session via any enabled plugin and return the join URL — that's it. No Docker overlay, no tool server config. See Starting a Meeting → From an agent for usage.
Option B — hrida-mcpo-meetings (full API access)
For broader capabilities — listing sessions, joining existing rooms, reading notes, posting to a multi-agent room — deploy hrida-mcpo-meetings (port 8094) from the Docker Compose overlay.
hrida-mcpo (the proxy this overlay uses) only wraps real MCP servers (stdio/sse/streamable-http) as OpenAPI — it has no mode that takes an arbitrary REST API's OpenAPI spec and turns it into MCP tools directly. hrida-mcpo-meetings is a hand-written stdio MCP server (scripts/meetings-agent/, config in hrida-mcpo/config.json/config.docker.json alongside hr-agent) that calls hrida-ai-studio's own /api/v1/meetings and /api/v1/meeting-configs REST endpoints and exposes a curated set of tools — not the entire API surface.
It authenticates as a single Meeting Manager service account (see scripts/meetings-agent/create_service_account.py) — meetings created through it are attributed to that account, not to whichever user is chatting. No admin promotion is required: list_meeting_plugins/list_meeting_types only need the features.meetings permission (on by default for every user), and session-management calls (create_meeting, list_my_meetings, etc.) are already scoped to whatever the service account itself created.
Add it as a tool server in Admin Panel → Settings → Tool Servers:
http://hrida-mcpo-meetings:8000/meetings-agent (Docker internal)
http://localhost:8094/meetings-agent (host access)
Agents with this tool server attached can call:
list_meeting_types— which plugin types this deployment supportslist_meeting_plugins— configured, enabled plugins (each has aconfig_idneeded to create a meeting)create_meeting— start a session via any configured pluginlist_my_meetings/get_meeting— check the service account's own sessionsupdate_meeting— rename, reschedule, or change participantsjoin_meeting— get a fresh join token for an existing sessionend_meeting/delete_meeting— close out or remove a session
Use create_meeting for the common case (an agent decides to start a meeting as part of a conversation, attributed to the real triggering user). Reach for hrida-mcpo-meetings when an agent needs to manage existing sessions or list available plugins — capabilities create_meeting deliberately doesn't expose — and you're fine with those actions running as the shared service account rather than the individual user.
API Reference
| Endpoint | Description |
|---|---|
GET /api/v1/meeting-configs/types | List supported plugin types + config schemas |
GET /api/v1/meeting-configs/ | List configured plugins |
POST /api/v1/meeting-configs/ | Create plugin (admin) |
PATCH /api/v1/meeting-configs/{id} | Update plugin config (admin) |
DELETE /api/v1/meeting-configs/{id} | Remove plugin (admin) |
POST /api/v1/meetings/sessions/ | Create a meeting session |
GET /api/v1/meetings/sessions/ | List user's sessions |
GET /api/v1/meetings/sessions/{id} | Get a session (creator, participant, or admin only) |
POST /api/v1/meetings/sessions/{id}/join | Get fresh join token (creator, participant, or admin only) |
POST /api/v1/meetings/sessions/{id}/end | Mark a session as ended (creator or admin only) |
POST /api/v1/meetings/notes/ | Upload audio → transcribe → summarize |
GET /api/v1/meetings/notes/ | List your own meeting notes |
GET /api/v1/meetings/notes/session/{id} | List notes for a session (creator, participant, or admin only) |
POST /api/v1/meetings/agents/{id}/message | Post to agent room (creator, participant, or admin only) |
GET /api/v1/meetings/agents/{id}/history | Agent room message history (creator, participant, or admin only) |
POST /api/v1/webhooks/meetings/{plugin_id} | Inbound webhook from provider (signed) |
Access Control
A meeting session is visible and joinable only by:
- The creator — the user who started the meeting
- Participants — user IDs/emails included when the session was created
- Admins — always have full access to every session, for support and moderation
This applies consistently across the session itself, its notes/transcripts, its join token, and (for Multi-Agent Rooms) its message history — knowing a session ID alone is never enough to access someone else's meeting.
Inbound provider webhooks (Zoom) are authenticated separately via HMAC signature verification using the plugin's configured webhook_secret — see the plugin's setup guide for the exact header and signing scheme. A webhook with no configured secret is rejected, not silently accepted. Scheduling has no inbound webhook — meetings are created directly against the built-in Calendar.
Environment Variables
| Variable | Default | Description |
|---|---|---|
ENABLE_MEETINGS | false | Master switch for the meeting suite |
ENABLE_MEETING_VIDEO | true | Enable video conferencing plugin |
ENABLE_MEETING_NOTES | true | Enable Whisper + Ollama notes plugin |
ENABLE_MEETING_SCHEDULE | true | Enable the built-in Calendar scheduling plugin |
ENABLE_MEETING_AGENTS | true | Enable multi-agent room plugin |
WHISPER_API_URL | (empty) | External Whisper ASR endpoint (set by Docker overlay) |
Related
- Video Conferencing — Jitsi Meet self-hosted setup, JWT SSO, Zoom integration
- Meeting Notes — Whisper transcription + Ollama AI summary
- Scheduling — Schedule meetings synced with the built-in Calendar, no external service
- Multi-Agent Room — Collaborative agent discussion rooms
- Incident Management — Connect on-call providers for incident-triggered meetings