Meeting BaaS
STDIOMCP server providing tools for managing meeting data, transcripts, recordings, and calendar events.
MCP server providing tools for managing meeting data, transcripts, recordings, and calendar events.
A Model Context Protocol (MCP) server that provides tools for managing meeting data, including transcripts, recordings, calendar events, and search functionality.
To use Meeting BaaS with Claude Desktop:
Edit the Claude Desktop configuration file:
vim ~/Library/Application\ Support/Claude/claude_desktop_config.json
Add the Meeting BaaS configuration:
"meetingbaas": { "command": "/bin/bash", "args": [ "-c", "cd /path/to/meeting-mcp && (npm run build 1>&2) && export MCP_FROM_CLAUDE=true && node dist/index.js" ], "headers": { "x-api-key": "YOUR_API_KEY" } }
For calendar integration, you can add the calendarOAuth
section to your botConfig
:
"botConfig": { "calendarOAuth": { "platform": "Google", // or "Microsoft" "clientId": "YOUR_OAUTH_CLIENT_ID", "clientSecret": "YOUR_OAUTH_CLIENT_SECRET", "refreshToken": "YOUR_REFRESH_TOKEN", "rawCalendarId": "[email protected]" // Optional } }
Save the file and restart Claude Desktop.
Note: Calendar integration is optional. Meeting BaaS can be used without connecting a calendar by simply omitting the
calendarOAuth
section.
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 meetings
"Create a new meeting bot for my Zoom call tomorrow"
Query Meeting Data: Search through meeting transcripts and find specific information without watching entire recordings
"Search my recent meetings for discussions about the quarterly budget"
"Find all mentions of Project Apollo in yesterday's team meeting"
"Show me parts of the meeting where Jane was speaking"
Manage Calendar Events: View and organize calendar entries and upcoming meetings
Access Recording Information: Get metadata about meeting recordings and their status
Clone the repository:
git clone <repository-url> cd mcp-baas
Install dependencies:
npm install
Build the project:
npm run build
Start the server:
npm run start
By default, the server runs on port 7017 and exposes the MCP endpoint at http://localhost:7017/mcp
.
The server exposes several tools through the MCP protocol:
oauthGuidance
: Get detailed step-by-step instructions on setting up OAuth for Google or Microsoft calendars
listRawCalendars
: Lists available calendars from Google or Microsoft before integration
platform
("Google" or "Microsoft"), clientId
, clientSecret
, refreshToken
setupCalendarOAuth
: Integrates a calendar using OAuth credentials
platform
("Google" or "Microsoft"), clientId
, clientSecret
, refreshToken
, rawCalendarId
(optional)listCalendars
: Lists all integrated calendars
getCalendar
: Gets detailed information about a specific calendar integration
calendarId
(UUID of the calendar)deleteCalendar
: Permanently removes a calendar integration
calendarId
(UUID of the calendar)resyncAllCalendars
: Forces a refresh of all connected calendars
listUpcomingMeetings
: Lists upcoming meetings from a calendar
calendarId
, status
(optional: "upcoming", "past", "all"), limit
(optional)listEvents
: Lists calendar events with comprehensive filtering options
calendarId
, plus optional filters like startDateGte
, startDateLte
, attendeeEmail
, etc.listEventsWithCredentials
: Lists calendar events with credentials provided directly in the query
calendarId
, apiKey
, plus same optional filters as listEvents
listEvents
but with direct authenticationgetEvent
: Gets detailed information about a specific calendar event
eventId
(UUID of the event)scheduleRecording
: Schedules a bot to record an upcoming meeting
eventId
, botName
, plus optional settings like botImage
, recordingMode
, etc.scheduleRecordingWithCredentials
: Schedules recording with credentials provided directly in the query
eventId
, apiKey
, botName
, plus same optional settings as scheduleRecording
cancelRecording
: Cancels a previously scheduled recording
eventId
, allOccurrences
(optional, for recurring events)cancelRecordingWithCredentials
: Cancels recording with credentials provided directly in the query
eventId
, apiKey
, allOccurrences
(optional)checkCalendarIntegration
: Checks and diagnoses calendar integration status
createBot
: Creates a meeting bot that can join video conferences to record and transcribe meetings
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)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
meetingId
(ID of the meeting to get data for)getMeetingDataWithCredentials
: Gets transcript and recording data using direct API credentials
meetingId
(ID of the meeting), apiKey
(API key for authentication)getMeetingData
but with direct authenticationgetMeetingTranscript
: Gets a meeting transcript with speaker names and content grouped by speaker
botId
(the bot that recorded the meeting)Meeting: "Weekly Team Meeting"
Duration: 45m 30s
Transcript:
John Smith: Hello everyone, thanks for joining today's call. We have a lot to cover regarding the Q3 roadmap and our current progress on the platform redesign.
Sarah Johnson: Thanks John. I've prepared some slides about the user testing results we got back yesterday. The feedback was generally positive but there are a few areas we need to address.
findKeyMoments
: Automatically identifies and shares links to important moments in a meeting
botId
, optional meetingTitle
, optional list of topics
to look for, and optional maxMoments
generateQRCode
: Creates an AI-generated QR code image that can be used as a bot avatar
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)"Generate a QR code with my email [email protected] that looks like a Tiger in crystal style"
"Generate a QR code for my website https://example.com that looks like a mountain landscape. Use API key: qrc_my-personal-api-key-123456"
"Generate a QR code with the following parameters:
- Type: email
- To: [email protected]
- Prompt: Create a QR code that looks like a mountain landscape
- Style: style_rounded
- API Key: qrc_my-personal-api-key-123456"
shareableMeetingLink
: Generates a nicely formatted, shareable link to a meeting recording
botId
, plus optional timestamp
, title
, speakerName
, and description
📽️ **Meeting Recording: Weekly Team Sync**
⏱️ Timestamp: 00:12:35
🎤 Speaker: Sarah Johnson
📝 Discussing the new product roadmap
🔗 [View Recording](https://meetingbaas.com/viewer/abc123?t=755)
shareMeetingSegments
: Creates a list of links to multiple important moments in a meeting
botId
and an array of segments
with timestamps, speakers, and descriptionsCreate a bot for your upcoming meeting:
"Create a bot for my Zoom meeting at https://zoom.us/j/123456789"
The bot joins the meeting automatically and begins recording.
Check recording status:
"What's the status of my meeting recording for the Zoom call I started earlier?"
Get guidance on obtaining OAuth credentials:
"I want to integrate my Google Calendar. How do I get OAuth credentials?"
List your available calendars before integration:
"List my available Google calendars. Here are my OAuth credentials:
- Client ID: my-client-id-123456789.apps.googleusercontent.com
- Client Secret: my-client-secret-ABCDEF123456
- Refresh Token: my-refresh-token-ABCDEF123456789"
Set up calendar integration with a specific calendar:
"Integrate my Google Calendar using these credentials:
- Platform: Google
- Client ID: my-client-id-123456789.apps.googleusercontent.com
- Client Secret: my-client-secret-ABCDEF123456
- Refresh Token: my-refresh-token-ABCDEF123456789
- Raw Calendar ID: [email protected]"
View your upcoming meetings:
"Show me my upcoming meetings from calendar 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"
Schedule recording for an upcoming meeting:
"Schedule a recording for my team meeting with event ID 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d.
Configure the bot with:
- Name: Team Meeting Bot
- Recording Mode: gallery_view
- Entry Message: Hello everyone, I'm here to record the meeting"
Check all recordings scheduled in your calendar:
"Show me all meetings in my calendar that have recordings scheduled"
Cancel a previously scheduled recording:
"Cancel the recording for event 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d"
Refresh calendar data if meetings are missing:
"Force a resync of all my connected calendars"
Get the full transcript of a meeting:
"Get the transcript from my team meeting with bot ID abc-123"
Find key moments in a meeting:
"Identify key moments from yesterday's product planning meeting with bot ID xyz-456"
Share a specific moment from a meeting:
"Create a shareable link to the part of meeting abc-123 at timestamp 12:45 where John was talking about the budget"
You can provide API credentials directly in your queries:
List events with direct credentials:
"List events from calendar 5c99f8a4-f498-40d0-88f0-29f698c53c51 using API key tesban where attendee is [email protected]"
Schedule a recording with direct credentials:
"Schedule a recording for event 78d06b42-794f-4efe-8195-62db1f0052d5 using API key tesban with bot name 'Weekly Meeting Bot'"
Cancel a recording with direct credentials:
"Cancel the recording for event 97cd62f0-ea9b-42b3-add5-7a607ce6d80f using API key tesban"
Get meeting data with direct credentials:
"Get meeting data for meeting 47de9462-bea7-406c-b79a-fd6b82c3de76 using API key tesban"
Generate a QR code with your contact information and a custom design:
"Generate a QR code with the following parameters:
- Type: email
- To: [email protected]
- Prompt: Create a professional-looking QR code with abstract blue patterns that resemble a corporate logo
- Style: style_crystal"
Use the generated QR code as a bot avatar in a meeting:
"Join my Zoom meeting at https://zoom.us/j/123456789 with the following parameters:
- Bot name: QR Code Assistant
- Bot image: [URL from the generated QR code]
- Entry message: Hello everyone, I'm here to record the meeting. You can scan my avatar to get my contact information."
Generate a QR code with a meeting link for easy sharing:
"Generate a QR code with the following parameters:
- Type: url
- To: https://zoom.us/j/123456789
- Prompt: Create a colorful QR code with a calendar icon in the center
- Style: style_rounded"
Meeting recordings can be accessed directly through the Meeting BaaS viewer using the bot ID:
https://meetingbaas.com/viewer/{BOT_ID}
For example:
https://meetingbaas.com/viewer/67738f48-2360-4f9e-a999-275a74208ff5
This viewer provides:
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.
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 testingTo integrate with Cursor:
npm run build
npm run inspect
npm run dev
The server includes optimized logging with:
npm run cleanup
This command:
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 functions
logging.ts
: Log filtering and managementtinyDb.ts
: Persistent bot tracking databaseThe 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.
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 the generateQRCode
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:
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%\Claude\claude_desktop_config.json
Example configuration:
{ "headers": { "x-api-key": "qrc_your_key_here" } }
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.