Meeting-MCP 会议管理工具

@Meeting-Baas/meeting-mcp
1 Stars 879 次浏览 Meeting-Baas 更新于 2026-08-23

一种模型上下文协议服务器,使人工智能助手能够管理会议数据,包括创建会议机器人、搜索转录内容和组织日历事件。

该服务暂未提供标准配置,请参考 README 手动接入

服务介绍

Meeting BaaS MCP 服务器

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

概述

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

  • 邀请会议机器人:为您的视频会议创建并邀请能够自动录制和转录会议内容的机器人

    "为我明天的 Zoom 通话创建一个新的会议机器人"
    
  • 查询会议数据:无需观看整个录音,即可通过会议记录搜索特定信息

    "在我的最近会议中搜索关于季度预算的讨论"
    "找到昨天团队会议中所有提到 Project Apollo 的地方"
    "显示 Jane 发言的部分会议内容"
    
  • 管理日历事件:查看和组织日历条目及即将到来的会议

  • 访问录音信息:获取会议录音及其状态的元数据

先决条件

  • 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: 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
  • 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
  • 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
  • deleteCalendar: Permanently removes a calendar integration

    • Parameters: calendarId (UUID of the calendar)
    • Returns confirmation of successful deletion
  • 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
  • listEvents: Lists calendar events with comprehensive filtering options

    • Parameters: calendarId, plus optional filters like startDateGte, startDateLte, attendeeEmail, etc.
    • Returns detailed event listings with rich information
  • listEventsWithCredentials: Lists calendar events with credentials provided directly in the query

    • Parameters: calendarId, apiKey, plus same optional filters as listEvents
    • Returns the same detailed information as listEvents but with direct authentication
  • getEvent: Gets detailed information about a specific calendar event

    • Parameters: eventId (UUID of the event)
    • Returns comprehensive event details including attendees and recording status
  • scheduleRecording: Schedules a bot to record an upcoming meeting

    • Parameters: eventId, botName, plus optional settings like botImage, recordingMode, etc.
    • Returns confirmation of successful scheduling
  • scheduleRecordingWithCredentials: Schedules recording with credentials provided directly in the query

    • Parameters: eventId, apiKey, botName, plus same optional settings as scheduleRecording
    • Returns confirmation of successful scheduling
  • cancelRecording: Cancels a previously scheduled recording

    • Parameters: eventId, allOccurrences (optional, for recurring events)
    • Returns confirmation of successful cancellation
  • cancelRecordingWithCredentials: Cancels recording with credentials provided directly in the query

    • Parameters: eventId, apiKey, allOccurrences (optional)
    • Returns confirmation of successful cancellation
  • checkCalendarIntegration: Checks and diagnoses calendar integration status

    • No parameters required
    • Returns a comprehensive status report and troubleshooting tips

会议工具

  • 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 (记录会议的机器人)
    • 返回: 包含发言人信息的完整会议记录,格式为按发言人分组的段落
    • 示例输出:
      会议: "每周团队会议"
      时长: 45分钟30秒
      会议记录:
      
      John Smith: 大家好,感谢参加今天的电话会议。我们有很多关于Q3路线图和平台重新设计当前进展的内容需要讨论。
      
      Sarah Johnson: 谢谢John。我已经准备了一些关于我们昨天收到的用户测试结果的幻灯片。反馈总体上是积极的,但有一些地方我们需要解决。
      
  • findKeyMoments: 自动识别并分享会议中的重要时刻链接

    • 参数: botId, 可选的 meetingTitle, 可选的主题列表 topics 以及可选的 maxMoments
    • 返回: 根据会议记录自动检测出的关键时刻的Markdown格式列表,并附带链接
    • 使用AI驱动的分析来找到重要的时刻,而无需手动选择时间戳

QR码工具

  • generateQRCode: 创建一个可以用作机器人头像的AI生成的QR码图像
    • 参数:
      • type: QR码类型 (url, email, phone, sms, text)
      • to: QR码的目标 (URL, 邮件, 电话号码, 或文本)
      • prompt: 用于自定义QR码的AI提示 (最多1000个字符)。您可以通过在提示文本中输入"API key: qrc_your_key"或类似短语直接包含您的API密钥。
      • style: QR码样式 (style_default, style_dots, style_rounded, style_crystal)
      • useAsBotImage: 是否将生成的QR码用作机器人头像 (默认: true)
      • template: QR码模板ID (可选)
      • apiKey: 您的QR码AI API密钥 (可选,如果没有提供则使用默认值)
    • 返回: 生成的QR码图像的URL,可以直接与joinMeeting工具一起使用
    • 示例用法:
      "生成一个看起来像老虎的水晶风格的我的电子邮件lazare@spoke.app的QR码"
      
    • 带有API密钥的示例提示:
      "为我的网站https://example.com生成一个看起来像山景的QR码。使用API密钥: qrc_my-personal-api-key-123456"
      
    • 带正式参数的示例:
      "使用以下参数生成一个QR码:
      - 类型: email
      - 目标: john.doe@example.com
      - 提示: 创建一个看起来像山景的QR码
      - 样式: style_rounded
      - API密钥: qrc_my-personal-api-key-123456"
      

链接共享工具

  • shareableMeetingLink: 生成一个格式美观、可分享的会议录制链接

    • 参数:botId,以及可选的 timestamptitlespeakerNamedescription
    • 返回:可以直接在聊天中分享的带有元数据的 Markdown 格式的链接
    • 示例:
      📽️ **会议录制:每周团队同步**
      ⏱️ 时间戳:00:12:35
      🎤 发言人:Sarah Johnson
      📝 讨论新的产品路线图
      
      🔗 [查看录制](https://meetingbaas.com/viewer/abc123?t=755)
      
  • shareMeetingSegments: 创建一个包含会议中多个重要时刻的链接列表

    • 参数:botId 和一个包含时间戳、发言人和描述的 segments 数组
    • 返回:带有直接链接到每个时刻的 Markdown 格式段落列表
    • 适用于为长时间会议创建目录

示例工作流程

录制会议

  1. 为即将召开的会议创建一个机器人:

    "为我在 https://zoom.us/j/123456789 的 Zoom 会议创建一个机器人"
    
  2. 机器人将自动加入会议并开始录制。

  3. 检查录制状态:

    "我之前开始的 Zoom 通话的会议录制状态如何?"
    

日历集成和自动录制

  1. 获取获取 OAuth 凭证的指导:

    "我想集成我的 Google 日历。如何获取 OAuth 凭证?"
    
  2. 在集成前列出可用的日历:

    "列出我的可用 Google 日历。这是我的 OAuth 凭证:
    - 客户端 ID:my-client-id-123456789.apps.googleusercontent.com
    - 客户端密钥:my-client-secret-ABCDEF123456
    - 刷新令牌:my-refresh-token-ABCDEF123456789"
    
  3. 使用特定日历设置日历集成:

    "使用这些凭证集成我的 Google 日历:
    - 平台:Google
    - 客户端 ID:my-client-id-123456789.apps.googleusercontent.com
    - 客户端密钥:my-client-secret-ABCDEF123456
    - 刷新令牌:my-refresh-token-ABCDEF123456789
    - 原始日历 ID:primary@gmail.com"
    
  4. 查看即将举行的会议:

    "显示来自日历 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d 的即将举行的会议"
    
  5. 为即将举行的会议安排录制:

    "为我的团队会议安排录制,事件 ID 为 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d。
    使用以下配置设置机器人:
    - 名称:Team Meeting Bot
    - 录制模式:gallery_view
    - 进入消息:大家好,我在这里录制会议"
    
  6. 查看日历中所有已安排录制的会议:

    "显示我日历中所有已安排录制的会议"
    
  7. 取消先前安排的录制:

    "取消事件 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d 的录制"
    
  8. 如果缺少会议,则刷新日历数据:

    "强制重新同步我所有已连接的日历"
    

简化的日历集成

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

  1. 编辑配置文件:

    vim ~/Library/Application\ Support/Claude/claude_desktop_config.json
    
  2. botConfig 中添加 calendarOAuth 部分:

    "botConfig": {
      // 其他机器人配置...
    
      "calendarOAuth": {
        "platform": "Google",  // 或 "Microsoft"
        "clientId": "YOUR_OAUTH_CLIENT_ID",
        "clientSecret": "YOUR_OAUTH_CLIENT_SECRET", 
        "refreshToken": "YOUR_REFRESH_TOKEN",
        "rawCalendarId": "primary@gmail.com"  // 可选
      }
    }
    
  3. 保存文件并重启 Claude Desktop - 您的日历将自动集成。

这种方法省去了手动调用 OAuth 设置工具的需要,使日历集成成为一次性的配置任务。

注意: 日历集成完全是可选的。您可以通过简单地从配置中省略 calendarOAuth 部分来使用 Meeting BaaS 而无需连接日历。日历集成通过提供对即将举行的会议的访问和启用日历事件的自动记录来增强体验。

分析会议内容

  1. 获取会议的完整文字记录:

    "获取与 bot ID abc-123 的团队会议的文字记录"
    
  2. 查找会议中的关键时刻:

    "识别昨天的产品规划会议(bot ID xyz-456)中的关键时刻"
    
  3. 分享会议中的特定时刻:

    "创建一个可分享的链接,指向会议 abc-123 在时间戳 12:45 处 John 讨论预算的部分"
    

使用直接凭据工具

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

  1. 使用直接凭据列出事件:

    "使用 API 密钥 tesban 列出日历 5c99f8a4-f498-40d0-88f0-29f698c53c51 中参会者为 philipe@spoke.app 的事件"
    
  2. 使用直接凭据安排录制:

    "使用 API 密钥 tesban 和 bot 名称 'Weekly Meeting Bot' 安排事件 78d06b42-794f-4efe-8195-62db1f0052d5 的录制"
    
  3. 使用直接凭据取消录制:

    "使用 API 密钥 tesban 取消事件 97cd62f0-ea9b-42b3-add5-7a607ce6d80f 的录制"
    
  4. 使用直接凭据获取会议数据:

    "使用 API 密钥 tesban 获取会议 47de9462-bea7-406c-b79a-fd6b82c3de76 的数据"
    

使用 AI 生成的二维码作为机器人头像

  1. 生成包含你的联系信息和自定义设计的二维码:

    "使用以下参数生成一个二维码:
    - 类型:email
    - 收件人:john.doe@company.com
    - 提示:创建一个具有抽象蓝色图案的专业外观二维码,类似于企业标志
    - 样式:style_crystal"
    
  2. 在会议中使用生成的二维码作为机器人头像:

    "使用以下参数加入我的 Zoom 会议 https://zoom.us/j/123456789:
    - 机器人名称:二维码助手
    - 机器人图片:[生成的二维码的 URL]
    - 进入消息:大家好,我在这里记录会议。您可以扫描我的头像以获取我的联系方式。"
    
  3. 为方便分享而生成带有会议链接的二维码:

    "使用以下参数生成一个二维码:
    - 类型:url
    - 目标地址:https://zoom.us/j/123456789
    - 提示:创建一个中心有日历图标的多彩二维码
    - 样式:style_rounded"
    

访问会议录像

可以通过使用机器人 ID 的 Meeting 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:Meeting BaaS API 的基础 URL
  • DEFAULT_API_KEY:用于测试的默认 API 密钥

与 Claude Desktop 的集成

要与 Claude Desktop 集成:

  1. Edit the Claude Desktop configuration file:

    vim ~/Library/Application\ Support/Claude/claude_desktop_config.json
    
  2. Add the Meeting BaaS MCP server configuration:

    {
      "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
            }
          }
        }
      }
    }
    

    Note: Replace /path/to/meeting-mcp with the path to your local repository and YOUR_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.

  3. Restart Claude Desktop.

配置说明:

  • command 指定要使用的 shell
  • args 包含命令行参数:
    • cd 到你的项目目录
    • 使用错误输出重定向到 stderr 的方式构建项目
    • 使用环境变量 MCP_FROM_CLAUDE=true 运行服务器,以表明它正从 Claude Desktop 运行
  • headers 包含用于身份验证的 API 密钥:
    • x-api-key:访问会议服务所需的 Meeting 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 能力(可选)
      • 示例:
      {
        "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"]
      }
      

extra 字段非常灵活——你可以添加任何对你组织和用例有意义的结构化元数据。

与 Cursor 集成

要与 Cursor 集成:

  1. 打开 Cursor
  2. 前往设置
  3. 导航至“模型上下文协议”
  4. 添加新服务器:
    • 名称: "Meeting 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/: Meeting BaaS后端的API客户端
  • src/types/: TypeScript类型定义
  • src/config.ts: 服务器配置
  • src/utils/: 实用函数
    • logging.ts: 日志过滤和管理
    • tinyDb.ts: 持久化的机器人跟踪数据库

认证

服务器期望在x-api-key头部中接收一个API密钥进行认证。您可以在配置中设置默认的API密钥。

许多工具(名称中带有"WithCredentials")也支持直接认证,您可以在参数中直接提供API密钥而不是通过头部提供。

许可证

MIT

QR码API密钥配置

QR码生成工具需要来自QR Code AI API的API密钥。有几种方法可以提供此密钥:

  1. 直接在提示中:当使用generateQRCode工具时,在提示文本中直接包含您的API密钥,例如:"为我的网站https://example.com生成一个二维码,API密钥: 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密钥。

相关 MCP 服务