hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Integrations
Integrates with Google Calendar to list, manage, and retrieve calendar events. Enables scheduling recordings for meetings and connecting calendar data to meeting bots.
Allows bots to join and record Zoom meetings, automatically transcribing the content and making it searchable.
Meeting BaaS MCP Server
A Model Context Protocol (MCP) server that provides tools for managing meeting data, including transcripts, recordings, calendar events, and search functionality.
Overview
This project implements a Model Context Protocol (MCP) server that allows AI assistants like Claude and Cursor to access and manipulate meeting data. It exposes a set of tools and resources that can be used to:
- Invite Meeting Bots: Create and invite bots to your video conferences that automatically record and transcribe meetingsCopy
- Query Meeting Data: Search through meeting transcripts and find specific information without watching entire recordingsCopy
- Manage Calendar Events: View and organize calendar entries and upcoming meetings
- Access Recording Information: Get metadata about meeting recordings and their status
Prerequisites
- Node.js (v16 or later)
- npm
- MeetingBaaS Account: You need access to a MeetingBaaS account using your corporate email address
- All logs, bots, and shared links are available to colleagues with the same corporate domain (not personal emails like gmail.com)
- This enables seamless collaboration where all team members can access meeting recordings and transcripts created by anyone in your organization
Installation
- Clone the repository:Copy
- Install dependencies:Copy
- Build the project:Copy
Usage
Start the server:
By default, the server runs on port 7017 and exposes the MCP endpoint at http://localhost:7017/mcp
.
Available Tools
The server exposes several tools through the MCP protocol:
Calendar Tools
oauthGuidance
: Get detailed step-by-step instructions on setting up OAuth for Google or Microsoft calendars- No parameters required
- Returns comprehensive instructions for obtaining OAuth credentials and setting up calendar integration
listRawCalendars
: Lists available calendars from Google or Microsoft before integration- Parameters:
platform
("Google" or "Microsoft"),clientId
,clientSecret
,refreshToken
- Returns a list of available calendars with their IDs and primary status
- Parameters:
setupCalendarOAuth
: Integrates a calendar using OAuth credentials- Parameters:
platform
("Google" or "Microsoft"),clientId
,clientSecret
,refreshToken
,rawCalendarId
(optional) - Returns confirmation of successful integration with calendar details
- Parameters:
listCalendars
: Lists all integrated calendars- No parameters required
- Returns a list of all calendars with their names, email addresses, and UUIDs
getCalendar
: Gets detailed information about a specific calendar integration- Parameters:
calendarId
(UUID of the calendar) - Returns comprehensive calendar details
- Parameters:
deleteCalendar
: Permanently removes a calendar integration- Parameters:
calendarId
(UUID of the calendar) - Returns confirmation of successful deletion
- Parameters:
resyncAllCalendars
: Forces a refresh of all connected calendars- No parameters required
- Returns the status of the sync operation
listUpcomingMeetings
: Lists upcoming meetings from a calendar- Parameters:
calendarId
,status
(optional: "upcoming", "past", "all"),limit
(optional) - Returns a list of meetings with their names, times, and recording status
- Parameters:
listEvents
: Lists calendar events with comprehensive filtering options- Parameters:
calendarId
, plus optional filters likestartDateGte
,startDateLte
,attendeeEmail
, etc. - Returns detailed event listings with rich information
- Parameters:
listEventsWithCredentials
: Lists calendar events with credentials provided directly in the query- Parameters:
calendarId
,apiKey
, plus same optional filters aslistEvents
- Returns the same detailed information as
listEvents
but with direct authentication
- Parameters:
getEvent
: Gets detailed information about a specific calendar event- Parameters:
eventId
(UUID of the event) - Returns comprehensive event details including attendees and recording status
- Parameters:
scheduleRecording
: Schedules a bot to record an upcoming meeting- Parameters:
eventId
,botName
, plus optional settings likebotImage
,recordingMode
, etc. - Returns confirmation of successful scheduling
- Parameters:
scheduleRecordingWithCredentials
: Schedules recording with credentials provided directly in the query- Parameters:
eventId
,apiKey
,botName
, plus same optional settings asscheduleRecording
- Returns confirmation of successful scheduling
- Parameters:
cancelRecording
: Cancels a previously scheduled recording- Parameters:
eventId
,allOccurrences
(optional, for recurring events) - Returns confirmation of successful cancellation
- Parameters:
cancelRecordingWithCredentials
: Cancels recording with credentials provided directly in the query- Parameters:
eventId
,apiKey
,allOccurrences
(optional) - Returns confirmation of successful cancellation
- Parameters:
checkCalendarIntegration
: Checks and diagnoses calendar integration status- No parameters required
- Returns a comprehensive status report and troubleshooting tips
Meeting Tools
createBot
: Creates a meeting bot that can join video conferences to record and transcribe meetings- Parameters:
meeting_url
(URL of the meeting to join)name
(optional bot name)botImage
(optional URL to an image for the bot's avatar)entryMessage
(optional message the bot will send when joining)deduplicationKey
(optional key to override the 5-minute restriction on joining the same meeting)nooneJoinedTimeout
(optional timeout in seconds for bot to leave if no one joins)waitingRoomTimeout
(optional timeout in seconds for bot to leave if stuck in waiting room)speechToTextProvider
(optional provider for transcription: "Gladia", "Runpod", or "Default")speechToTextApiKey
(optional API key for the speech-to-text provider)streamingInputUrl
(optional WebSocket URL to stream audio input)streamingOutputUrl
(optional WebSocket URL to stream audio output)streamingAudioFrequency
(optional frequency for streaming: "16khz" or "24khz")extra
(optional object with additional metadata about the meeting, such as meeting type, custom summary prompt, search keywords)
- Returns: Bot details including ID and join status
- Parameters:
getBots
: Lists all bots and their associated meetingsgetBotsByMeeting
: Gets bots for a specific meeting URLgetRecording
: Retrieves recording information for a specific bot/meetinggetRecordingStatus
: Checks the status of a recording in progressgetMeetingData
: Gets transcript and recording data for a specific meeting- Parameters:
meetingId
(ID of the meeting to get data for) - Returns: Information about the meeting recording including duration and transcript segment count
- Parameters:
getMeetingDataWithCredentials
: Gets transcript and recording data using direct API credentials- Parameters:
meetingId
(ID of the meeting),apiKey
(API key for authentication) - Returns: Same information as
getMeetingData
but with direct authentication
- Parameters:
Transcript Tools
getMeetingTranscript
: Gets a meeting transcript with speaker names and content grouped by speaker- Parameters:
botId
(the bot that recorded the meeting) - Returns: Complete transcript with speaker information, formatted as paragraphs grouped by speaker
- Example output:Copy
- Parameters:
findKeyMoments
: Automatically identifies and shares links to important moments in a meeting- Parameters:
botId
, optionalmeetingTitle
, optional list oftopics
to look for, and optionalmaxMoments
- Returns: Markdown-formatted list of key moments with links, automatically detected based on transcript
- Uses AI-powered analysis to find significant moments without requiring manual timestamp selection
- Parameters:
QR Code Tools
generateQRCode
: Creates an AI-generated QR code image that can be used as a bot avatar- Parameters:
type
: Type of QR code (url, email, phone, sms, text)to
: Destination for the QR code (URL, email, phone number, or text)prompt
: AI prompt to customize the QR code (max 1000 characters). You can include your API key directly in the prompt text by typing "API key: qrc_your_key" or similar phrases.style
: Style of the QR code (style_default, style_dots, style_rounded, style_crystal)useAsBotImage
: Whether to use the generated QR code as the bot avatar (default: true)template
: Template ID for the QR code (optional)apiKey
: Your QR Code AI API key (optional, will use default if not provided)
- Returns: URL to the generated QR code image that can be used directly with the joinMeeting tool
- Example usage:Copy
- Example with API key in the prompt:Copy
- Example with formal parameter:Copy
- Parameters:
Link Sharing Tools
shareableMeetingLink
: Generates a nicely formatted, shareable link to a meeting recording- Parameters:
botId
, plus optionaltimestamp
,title
,speakerName
, anddescription
- Returns: Markdown-formatted link with metadata that can be shared directly in chat
- Example: Copy
- Parameters:
shareMeetingSegments
: Creates a list of links to multiple important moments in a meeting- Parameters:
botId
and an array ofsegments
with timestamps, speakers, and descriptions - Returns: Markdown-formatted list of segments with direct links to each moment
- Useful for creating a table of contents for a long meeting
- Parameters:
Example Workflows
Recording a Meeting
- Create a bot for your upcoming meeting:Copy
- The bot joins the meeting automatically and begins recording.
- Check recording status:Copy
Calendar Integration and Automatic Recording
- Get guidance on obtaining OAuth credentials:Copy
- List your available calendars before integration:Copy
- Set up calendar integration with a specific calendar:Copy
- View your upcoming meetings:Copy
- Schedule recording for an upcoming meeting:Copy
- Check all recordings scheduled in your calendar:Copy
- Cancel a previously scheduled recording:Copy
- Refresh calendar data if meetings are missing:Copy
Simplified Calendar Integration
For a simpler approach to calendar integration, you can directly configure your calendar OAuth credentials in the Claude Desktop configuration file:
- Edit the configuration file:Copy
- Add the
calendarOAuth
section to your botConfig:Copy - Save the file and restart Claude Desktop - your calendar will be automatically integrated.
This approach eliminates the need to manually call the OAuth setup tools, making calendar integration a one-time configuration task.
Note: Calendar integration is completely optional. You can use Meeting BaaS without connecting a calendar by simply omitting the
calendarOAuth
section from your configuration. Calendar integration enhances the experience by providing access to your upcoming meetings and enabling automatic recording of calendar events.
Analyzing Meeting Content
- Get the full transcript of a meeting:Copy
- Find key moments in a meeting:Copy
- Share a specific moment from a meeting:Copy
Using Direct Credential Tools
You can provide API credentials directly in your queries:
- List events with direct credentials:Copy
- Schedule a recording with direct credentials:Copy
- Cancel a recording with direct credentials:Copy
- Get meeting data with direct credentials:Copy
Using AI-Generated QR Codes as Bot Avatars
- Generate a QR code with your contact information and a custom design:Copy
- Use the generated QR code as a bot avatar in a meeting:Copy
- Generate a QR code with a meeting link for easy sharing:Copy
Accessing Meeting Recordings
Meeting recordings can be accessed directly through the Meeting BaaS viewer using the bot ID:
For example:
This viewer provides:
- The meeting video recording
- Synchronized transcript with speaker identification
- Navigation by speaker or topic
- Direct link sharing with teammates
When using the createBot
, getBots
, or search tools, you'll receive bot IDs that can be used to construct these viewer URLs for easy access to recordings.
Important: All meeting recordings and links are automatically shared with colleagues who have the same corporate email domain (e.g., @yourcompany.com). This allows your entire team to access recordings without requiring individual permissions, creating a collaborative environment where meeting knowledge is accessible to everyone in your organization.
Configuration
The server can be configured through environment variables or by editing the src/config.ts
file.
Key configuration options:
PORT
: The port the server listens on (default: 7017)API_BASE_URL
: The base URL for the Meeting BaaS APIDEFAULT_API_KEY
: Default API key for testing
Integration with Claude Desktop
To integrate with Claude Desktop:
- Edit the Claude Desktop configuration file:Copy
- Add the Meeting BaaS MCP server configuration:Note: ReplaceCopy
/path/to/meeting-mcp
with the path to your local repository andYOUR_API_KEY
with your actual API key.Important: Ensure you're using an API key associated with your corporate email account. All recordings, bot logs, and shared links will be automatically accessible to colleagues with the same email domain for seamless team collaboration.
Note about QR Code API: The QR Code API uses the same header name (
x-api-key
) as the Meeting BaaS API, but it must be configured separately. For QR Code generation functionality, you should use one of the methods described in the "QR Code API Key Configuration" section below, such as setting an environment variable or including the key directly in the prompt. - Restart Claude Desktop.
The configuration explained:
command
specifies the shell to useargs
contains the command line arguments:cd
to your project directory- Build the project with error output redirected to stderr
- Run the server with the
MCP_FROM_CLAUDE=true
environment variable to indicate it's running from Claude Desktop
headers
contains the API keys for authentication:x-api-key
: Your Meeting BaaS API key for accessing the meeting service
botConfig
allows you to customize the bot's appearance and behavior:name
: The name displayed for the bot in meetings (default: "Claude Assistant")image
: URL to a publicly accessible image to use as the bot's avatar (optional)entryMessage
: Message the bot will send when joining a meeting (optional)deduplicationKey
: A unique key to override the 5-minute restriction on joining the same meeting (optional)nooneJoinedTimeout
: Timeout in seconds for the bot to leave if no participants join (optional)waitingRoomTimeout
: Timeout in seconds for the bot to leave if stuck in waiting room (optional)speechToTextProvider
: Provider to use for transcription ("Gladia", "Runpod", "Default") (optional)speechToTextApiKey
: API key for the speech-to-text provider if required (optional)calendarOAuth
: Direct calendar integration with OAuth credentials (optional)platform
: "Google" or "Microsoft"clientId
: Your OAuth client IDclientSecret
: Your OAuth client secretrefreshToken
: Your OAuth refresh tokenrawCalendarId
: Optional ID of specific calendar to integrate
extra
: Additional metadata about meetings to enhance AI capabilities (optional)- Example:
Copy
The extra
field is extremely flexible - you can add any structured metadata that makes sense for your organization and use cases.
Integration with Cursor
To integrate with Cursor:
- Open Cursor
- Go to Settings
- Navigate to "Model Context Protocol"
- Add a new server with:
- Name: "Meeting BaaS MCP"
- Type: "sse"
- Server URL: "http://localhost:7017/mcp"
- Optionally add headers if authentication is required
Development
Build
Test with MCP Inspector
Development mode (with auto-reload)
Log Management
The server includes optimized logging with:
This command:
- Cleans up unnecessary log files and cached data
- Filters out repetitive ping messages from logs
- Reduces disk usage while preserving important log information
- Maintains a smaller log footprint for long-running servers
Project Structure
src/index.ts
: Main entry pointsrc/tools/
: Tool implementationssrc/resources/
: Resource definitionssrc/api/
: API client for the Meeting BaaS backendsrc/types/
: TypeScript type definitionssrc/config.ts
: Server configurationsrc/utils/
: Utility functionslogging.ts
: Log filtering and managementtinyDb.ts
: Persistent bot tracking database
Authentication
The server expects an API key in the x-api-key
header for authentication. You can configure the default API key in the configuration.
Direct authentication is also supported in many tools (named with "WithCredentials") where you can provide the API key directly as a parameter rather than in headers.
License
QR Code API Key Configuration
The QR code generator tool requires an API key from QR Code AI API. There are several ways to provide this:
- Directly in the prompt: Include your API key directly in the prompt text when using the
generateQRCode
tool, e.g., "Generate a QR code for my website https://example.com with API key: qrc_your_key" - As a parameter: Provide your API key as the
apiKey
parameter when using thegenerateQRCode
tool - Environment variable: Set the
QRCODE_API_KEY
environment variable - Claude Desktop config: Add the API key to your Claude Desktop configuration file located at:
- Mac/Linux:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
Example configuration:
Copy - Mac/Linux:
The tool will check for the API key in the order listed above. If no API key is provided, the default API key will be used if available.
You can obtain an API key by signing up at QR Code AI API.
This server cannot be installed
A Model Context Protocol server that enables AI assistants to manage meeting data, including creating meeting bots, searching transcripts, and organizing calendar events.