Meeting BaaS MCP Server

by Meeting-Baas
Verified

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.

会议 BaaS MCP 服务器

模型上下文协议 (MCP) 服务器提供用于管理会议数据的工具,包括记录、录音、日历事件和搜索功能。

概述

该项目实现了一个模型上下文协议 (MCP) 服务器,允许 Claude 和 Cursor 等 AI 助手访问和操作会议数据。它公开了一组工具和资源,可用于:

  • 邀请会议机器人:创建并邀请机器人参加您的视频会议,自动记录和转录会议内容
    "Create a new meeting bot for my Zoom call tomorrow"
  • 查询会议数据:搜索会议记录并查找特定信息,无需观看整个记录
    "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"
  • 管理日历事件:查看和组织日历条目和即将召开的会议
  • 访问记录信息:获取有关会议记录及其状态的元数据

先决条件

  • Node.js(v16 或更高版本)
  • npm
  • MeetingBaaS 帐户:您需要使用公司电子邮件地址访问 MeetingBaaS 帐户
    • 所有日志、机器人和共享链接均可供具有相同公司域名的同事使用(而不是像 gmail.com 这样的个人电子邮件)
    • 这样可以实现无缝协作,所有团队成员都可以访问组织中任何人创建的会议记录和文字记录

安装

  1. 克隆存储库:
    git clone <repository-url> cd mcp-baas
  2. 安装依赖项:
    npm install
  3. 构建项目:
    npm run build

用法

启动服务器:

npm run start

默认情况下,服务器在端口 7017 上运行,并在http://localhost:7017/mcp公开 MCP 端点。

可用工具

服务器通过 MCP 协议公开了几个工具:

日历工具

  • oauthGuidance :获取有关为 Google 或 Microsoft 日历设置 OAuth 的详细分步说明
    • 无需参数
    • 返回获取 OAuth 凭证和设置日历集成的全面说明
  • listRawCalendars :在集成之前列出 Google 或 Microsoft 提供的日历
    • 参数: platform (“Google”或“Microsoft”)、 clientIdclientSecretrefreshToken
    • 返回可用日历及其 ID 和主要状态的列表
  • setupCalendarOAuth :使用 OAuth 凭证集成日历
    • 参数: platform (“Google”或“Microsoft”)、 clientIdclientSecretrefreshTokenrawCalendarId (可选)
    • 返回与日历详细信息成功集成的确认
  • listCalendars :列出所有集成日历
    • 无需参数
    • 返回所有日历及其名称、电子邮件地址和 UUID 的列表
  • getCalendar :获取有关特定日历集成的详细信息
    • 参数: calendarId (日历的UUID)
    • 返回全面的日历详细信息
  • deleteCalendar :永久删除日历集成
    • 参数: calendarId (日历的UUID)
    • 返回删除成功的确认
  • resyncAllCalendars :强制刷新所有连接的日历
    • 无需参数
    • 返回同步操作的状态
  • listUpcomingMeetings :列出日历中即将举行的会议
    • 参数: calendarIdstatus (可选:“即将到来”、“过去”、“全部”)、 limit (可选)
    • 返回会议列表,包括会议名称、时间和记录状态
  • listEvents :列出日历事件,并提供全面的过滤选项
    • 参数: calendarId ,以及可选过滤器,如startDateGtestartDateLteattendeeEmail等。
    • 返回包含丰富信息的详细事件列表
  • listEventsWithCredentials :列出查询中直接提供的凭据的日历事件
    • 参数: calendarIdapiKey ,以及与listEvents相同的可选过滤器
    • 返回与listEvents相同的详细信息,但带有直接身份验证
  • getEvent :获取有关特定日历事件的详细信息
    • 参数: eventId (事件的UUID)
    • 返回全面的活动详细信息,包括出席者和录制状态
  • scheduleRecording :安排机器人记录即将召开的会议
    • 参数: eventIdbotName ,以及可选设置,如botImagerecordingMode等。
    • 返回成功调度的确认
  • scheduleRecordingWithCredentials :使用查询中直接提供的凭据安排录制
    • 参数: eventIdapiKeybotName ,以及与scheduleRecording相同的可选设置
    • 返回成功调度的确认
  • cancelRecording :取消之前安排的录制
    • 参数: eventIdallOccurrences (可选,用于重复事件)
    • 返回成功取消的确认
  • cancelRecordingWithCredentials :使用查询中直接提供的凭据取消录制
    • 参数: eventIdapiKeyallOccurrences (可选)
    • 返回成功取消的确认
  • checkCalendarIntegration :检查并诊断日历集成状态
    • 无需参数
    • 返回全面的状态报告和故障排除提示

会议工具

  • createBot :创建一个可以加入视频会议来记录和转录会议的会议机器人
    • 参数:
      • meeting_url (要加入的会议的 URL)
      • name (可选机器人名称)
      • botImage (机器人头像图像的可选 URL)
      • entryMessage (机器人加入时发送的可选消息)
      • deduplicationKey (可选键,用于覆盖加入同一场会议的 5 分钟限制)
      • nooneJoinedTimeout (如果没有人加入,机器人离开的可选超时时间(秒))
      • waitingRoomTimeout (如果被困在等候室,则机器人离开的可选超时时间(秒))
      • speechToTextProvider (可选的转录提供商:“Gladia”、“Runpod”或“Default”)
      • speechToTextApiKey (语音转文本提供商的可选 API 密钥)
      • streamingInputUrl (用于流式音频输入的可选 WebSocket URL)
      • streamingOutputUrl (可选的 WebSocket URL,用于流音频输出)
      • streamingAudioFrequency (可选流频率:“16khz”或“24khz”)
      • extra (可选对象,包含有关会议的附加元数据,例如会议类型、自定义摘要提示、搜索关键字)
    • 返回:机器人详细信息,包括 ID 和加入状态
  • getBots :列出所有机器人及其相关会议
  • getBotsByMeeting :获取特定会议 URL 的机器人
  • getRecording :检索特定机器人/会议的记录信息
  • getRecordingStatus :检查正在进行的录音的状态
  • getMeetingData :获取特定会议的记录和录音数据
    • 参数: meetingId (要获取数据的会议的ID)
    • 返回:有关会议记录的信息,包括持续时间和记录片段数
  • getMeetingDataWithCredentials :使用直接 API 凭证获取记录和录音数据
    • 参数: meetingId (会议ID)、 apiKey (用于身份验证的API密钥)
    • 返回:与getMeetingData相同的信息,但具有直接身份验证

成绩单工具

  • getMeetingTranscript :获取会议记录,其中包含发言人姓名和按发言人分组的内容
    • 参数: botId (录制会议的机器人)
    • 返回:包含演讲者信息的完整记录,按演讲者分组格式化为段落
    • 示例输出:
      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 :自动识别并分享会议中重要时刻的链接
    • 参数: botId 、可选的meetingTitle 、可选的要查找的topics列表以及可选的maxMoments
    • 返回:带有链接的关键时刻的 Markdown 格式列表,根据成绩单自动检测
    • 使用人工智能分析来查找重要时刻,无需手动选择时间戳

二维码工具

  • generateQRCode :创建可用作机器人头像的 AI 生成的二维码图像
    • 参数:
      • type :二维码类型(url、电子邮件、电话、短信、文本)
      • to :二维码的目的地(URL、电子邮件、电话号码或文本)
      • prompt :AI 提示自定义二维码(最多 1000 个字符)。您可以直接在提示文本中输入“API key: qrc_your_key”或类似短语,包含您的 API 密钥。
      • style :二维码样式(style_default、style_dots、style_rounded、style_crystal)
      • useAsBotImage :是否使用生成的二维码作为机器人头像(默认值:true)
      • template :二维码的模板 ID(可选)
      • apiKey :您的 QR Code AI API 密钥(可选,如果未提供则使用默认密钥)
    • 返回:生成的二维码图像的 URL,可直接与 joinMeeting 工具一起使用
    • 使用示例:
      "Generate a QR code with my email lazare@spoke.app that looks like a Tiger in crystal style"
    • 提示中包含 API 密钥的示例:
      "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: john.doe@example.com - Prompt: Create a QR code that looks like a mountain landscape - Style: style_rounded - API Key: qrc_my-personal-api-key-123456"

链接共享工具

  • shareableMeetingLink :生成格式良好、可共享的会议记录链接
    • 参数: botId ,以及可选的timestamptitlespeakerNamedescription
    • 返回:Markdown 格式的链接,其中包含可在聊天中直接共享的元数据
    • 例子:
      📽️ **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 :创建指向会议中多个重要时刻的链接列表
    • 参数: botId以及包含时间戳、发言人和描述的segments数组
    • 返回:Markdown 格式的片段列表,包含每个时刻的直接链接
    • 适用于创建长时间会议的目录

示例工作流程

录制会议

  1. 为即将召开的会议创建一个机器人:
    "Create a bot for my Zoom meeting at https://zoom.us/j/123456789"
  2. 机器人会自动加入会议并开始录制。
  3. 检查录音状态:
    "What's the status of my meeting recording for the Zoom call I started earlier?"

日历集成和自动记录

  1. 获取有关获取 OAuth 凭证的指导:
    "I want to integrate my Google Calendar. How do I get OAuth credentials?"
  2. 集成之前列出您的可用日历:
    "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"
  3. 设置与特定日历的日历集成:
    "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: primary@gmail.com"
  4. 查看即将召开的会议:
    "Show me my upcoming meetings from calendar 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"
  5. 安排即将召开的会议的录制:
    "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"
  6. 检查日历中安排的所有录音:
    "Show me all meetings in my calendar that have recordings scheduled"
  7. 取消之前安排的录制:
    "Cancel the recording for event 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d"
  8. 如果缺少会议,则刷新日历数据:
    "Force a resync of all my connected calendars"

简化日历集成

为了更简单地实现日历集成,您可以直接在 Claude Desktop 配置文件中配置日历 OAuth 凭据:

  1. 编辑配置文件:
    vim ~/Library/Application\ Support/Claude/claude_desktop_config.json
  2. calendarOAuth部分添加到您的 botConfig:
    "botConfig": { // other bot configuration... "calendarOAuth": { "platform": "Google", // or "Microsoft" "clientId": "YOUR_OAUTH_CLIENT_ID", "clientSecret": "YOUR_OAUTH_CLIENT_SECRET", "refreshToken": "YOUR_REFRESH_TOKEN", "rawCalendarId": "primary@gmail.com" // Optional } }
  3. 保存文件并重新启动 Claude Desktop - 您的日历将自动集成。

这种方法无需手动调用 OAuth 设置工具,从而使日历集成成为一次性配置任务。

**注意:**日历集成完全可选。您只需在配置中省略calendarOAuth部分,即可在不连接日历的情况下使用会议 BaaS。日历集成功能可让您访问即将召开的会议,并自动记录日历事件,从而提升使用体验。

分析会议内容

  1. 获取会议的完整记录:
    "Get the transcript from my team meeting with bot ID abc-123"
  2. 找到会议中的关键时刻:
    "Identify key moments from yesterday's product planning meeting with bot ID xyz-456"
  3. 分享会议中的特定时刻:
    "Create a shareable link to the part of meeting abc-123 at timestamp 12:45 where John was talking about the budget"

使用直接凭证工具

您可以在查询中直接提供 API 凭证:

  1. 列出具有直接凭证的事件:
    "List events from calendar 5c99f8a4-f498-40d0-88f0-29f698c53c51 using API key tesban where attendee is philipe@spoke.app"
  2. 使用直接凭证安排录音:
    "Schedule a recording for event 78d06b42-794f-4efe-8195-62db1f0052d5 using API key tesban with bot name 'Weekly Meeting Bot'"
  3. 使用直接凭证取消录音:
    "Cancel the recording for event 97cd62f0-ea9b-42b3-add5-7a607ce6d80f using API key tesban"
  4. 使用直接凭证获取会议数据:
    "Get meeting data for meeting 47de9462-bea7-406c-b79a-fd6b82c3de76 using API key tesban"

使用人工智能生成的二维码作为机器人头像

  1. 生成包含您的联系信息和自定义设计的二维码:
    "Generate a QR code with the following parameters: - Type: email - To: john.doe@company.com - Prompt: Create a professional-looking QR code with abstract blue patterns that resemble a corporate logo - Style: style_crystal"
  2. 使用生成的二维码作为会议中的机器人头像:
    "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."
  3. 生成带有会议链接的二维码,以便于分享:
    "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"

访问会议记录

可以使用机器人 ID 直接通过会议 BaaS 查看器访问会议记录:

https://meetingbaas.com/viewer/{BOT_ID}

例如:

https://meetingbaas.com/viewer/67738f48-2360-4f9e-a999-275a74208ff5

该查看器提供:

  • 会议录像
  • 同步文字记录,可识别说话人
  • 按演讲者或主题导航
  • 与队友直接共享链接

当使用createBotgetBots或搜索工具时,您将收到可用于构建这些查看器 URL 的机器人 ID,以便轻松访问录音。

重要提示:所有会议录音和链接都会自动与使用相同公司邮箱域名(例如 @yourcompany.com)的同事共享。这样,您的整个团队无需单独授权即可访问录音,从而营造一个协作环境,让组织中的每个人都能访问会议内容。

配置

可以通过环境变量或编辑src/config.ts文件来配置服务器。

关键配置选项:

  • PORT :服务器监听的端口(默认值:7017)
  • API_BASE_URL :会议 BaaS API 的基本 URL
  • DEFAULT_API_KEY :用于测试的默认 API 密钥

与 Claude Desktop 集成

与 Claude Desktop 集成:

  1. 编辑Claude桌面配置文件:
    vim ~/Library/Application\ Support/Claude/claude_desktop_config.json
  2. 添加会议 BaaS MCP 服务器配置:
    { "mcpServers": { "meetingbaas": { "command": "/bin/bash", "args": [ "-c", "cd /path/to/meeting-mcp && (npm run build 1>&2) && MCP_FROM_CLAUDE=true node dist/index.js" ], "headers": { "x-api-key": "YOUR_API_KEY_FOR_MEETING_BAAS" }, "botConfig": { "name": "Meeting Assistant", "image": "https://meetingbaas.com/static/972043b7d604bca0d4b0048c7dd67ad2/fc752/previewFeatures.avif", "entryMessage": "Hello, I'm a bot from Meeting Baas. I'll be taking notes for this meeting.", "deduplicationKey": "unique_key_to_override_restriction", "nooneJoinedTimeout": 600, "waitingRoomTimeout": 600, "speechToTextProvider": "Gladia", "speechToTextApiKey": "YOUR_SPEECH_TO_TEXT_API_KEY", "extra": { "meetingType": "sales", "summaryPrompt": "Focus on action items and decision points", "searchKeywords": ["budget", "timeline", "deliverables"], "timeStampHighlights": [ {"time": "00:05:23", "note": "Discussion about Q2 sales numbers"}, {"time": "00:12:47", "note": "Team disagreement on marketing strategy"} ], "participants": ["John Smith", "Jane Doe", "Bob Johnson"], "project": "Project Phoenix", "department": "Engineering", "priority": "High", "followupDate": "2023-12-15", "tags": ["technical", "planning", "retrospective"] }, // Optional: Direct calendar OAuth integration // Add this section only if you want to enable calendar integration "calendarOAuth": { "platform": "Google", // or "Microsoft" "clientId": "YOUR_OAUTH_CLIENT_ID", "clientSecret": "YOUR_OAUTH_CLIENT_SECRET", "refreshToken": "YOUR_REFRESH_TOKEN", "rawCalendarId": "primary@gmail.com" // Optional - specific calendar ID } } } } }
    **注意:**/path/to/meeting-mcp替换为您本地存储库的路径,并将YOUR_API_KEY替换为您实际的 API 密钥。

    **重要提示:**请确保您使用的 API 密钥与您的公司邮箱账户关联。所有录音、机器人日志和共享链接将自动提供给使用相同邮箱域名的同事,从而实现无缝的团队协作。

    **关于二维码 API 的注意事项:**二维码 API 使用与会议 BaaS API 相同的标头名称 ( x-api-key ),但必须单独配置。要使用二维码生成功能,您应该使用下面“二维码 API 密钥配置”部分中描述的方法之一,例如设置环境变量或直接在提示符中包含密钥。

  3. 重新启动 Claude Desktop。

配置说明:

  • command指定要使用的 shell
  • args包含命令行参数:
    • cd到你的项目目录
    • 构建项目并将错误输出重定向到 stderr
    • 使用MCP_FROM_CLAUDE=true环境变量运行服务器,以指示它从 Claude Desktop 运行
  • headers包含用于身份验证的 API 密钥:
    • x-api-key :用于访问会议服务的会议 BaaS API 密钥
  • botConfig允许您自定义机器人的外观和行为:
    • name :会议中显示的机器人名称(默认值:“Claude Assistant”)
    • image :可公开访问的图像的 URL,用作机器人的头像(可选)
    • entryMessage :机器人加入会议时发送的消息(可选)
    • deduplicationKey :用于覆盖加入同一场会议的 5 分钟限制的唯一密钥(可选)
    • nooneJoinedTimeout :如果没有参与者加入,机器人离开的超时时间(秒)(可选)
    • waitingRoomTimeout :如果机器人被困在等候室,则以秒为单位超时离开(可选)
    • speechToTextProvider :用于转录的提供商(“Gladia”,“Runpod”,“Default”)(可选)
    • speechToTextApiKey :语音转文本提供商的 API 密钥(如果需要)(可选)
    • calendarOAuth :使用 OAuth 凭证直接集成日历(可选)
      • platform :“Google”或“Microsoft”
      • clientId :您的 OAuth 客户端 ID
      • clientSecret :您的 OAuth 客户端密钥
      • refreshToken :您的 OAuth 刷新令牌
      • rawCalendarId :需要集成的特定日历的可选 ID
    • extra :有关会议的附加元数据,用于增强 AI 能力(可选)
      • 例如:GXP38

extra字段非常灵活 - 您可以添加任何适合您的组织和用例的结构化元数据。

与 Cursor 集成

与 Cursor 集成:

  1. 打开游标
  2. 前往“设置”
  3. 导航至“模型上下文协议”
  4. 添加新服务器:
    • 名称:“会议 BaaS MCP”
    • 类型:“sse”
    • 服务器 URL:“ http://localhost:7017/mcp
    • 如果需要身份验证,可以选择添加标头

发展

建造

npm run build

使用 MCP Inspector 进行测试

npm run inspect

开发模式(自动重新加载)

npm run dev

日志管理

该服务器包括优化的日志记录:

npm run cleanup

此命令:

  • 清理不必要的日志文件和缓存数据
  • 从日志中过滤掉重复的 ping 消息
  • 减少磁盘使用量,同时保留重要的日志信息
  • 为长期运行的服务器维护较小的日志占用空间

项目结构

  • src/index.ts :主入口点
  • src/tools/ :工具实现
  • src/resources/ :资源定义
  • src/api/ :会议 BaaS 后端的 API 客户端
  • src/types/ :TypeScript 类型定义
  • src/config.ts :服务器配置
  • src/utils/ :实用程序函数
    • logging.ts :日志过滤和管理
    • tinyDb.ts :持久机器人跟踪数据库

验证

服务器需要x-api-key标头中的 API 密钥进行身份验证。您可以在配置中配置默认 API 密钥。

许多工具(以“WithCredentials”命名)也支持直接身份验证,您可以直接将 API 密钥作为参数提供,而不是在标题中提供。

执照

麻省理工学院

二维码 API 密钥配置

二维码生成器工具需要 QR Code AI API 的 API 密钥。您可以通过以下几种方式获取密钥:

  1. 直接在提示中:使用generateQRCode工具时,直接在提示文本中包含您的 API 密钥,例如“使用 API 密钥为我的网站https://example.com生成二维码:qrc_your_key”
  2. 作为参数:使用generateQRCode工具时,提供您的 API 密钥作为apiKey参数
  3. 环境变量:设置QRCODE_API_KEY环境变量
  4. Claude Desktop 配置:将 API 密钥添加到位于以下位置的 Claude Desktop 配置文件中:
    • Mac/Linux: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json

    示例配置:

    { "headers": { "x-api-key": "qrc_your_key_here" } }

该工具将按上述顺序检查 API 密钥。如果未提供 API 密钥,则会使用默认 API 密钥(如果可用)。

您可以通过在QR Code AI API注册来获取 API 密钥。

ID: ew8cdvc1u0