会议数据服务器

Granola MCP Server是一个通过MCP工具公开Granola会议数据的只读服务器,支持本地文件缓存和远程API源,适用于会议数据管理和分析。

  • by MSH4R1F
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 MSH4R1F/granola-mcp-server

使用说明

格兰诺拉MCP服务器

只读MCP服务器,通过MCP工具提供Granola会议服务。支持本地文件缓存和远程API源。

特点/特性

  • ✅ 本地与远程资源使用本地缓存文件或直接从Granola API获取
  • ✅ 已准备好进行Web部署部署到浏览器、边缘函数或无服务器平台
  • ✅ 表示“正确”或“完成”。 智能缓存基于TTL的缓存,支持手动刷新
  • ✅ 自动重试内置带有指数退避的重试逻辑
  • ✅ 零依赖仅使用标准库的核心(可选FastMCP用于MCP运行时)

快速入门

本地模式(默认)

  1. 安装(开发版):
pip install -e .[dev,mcp]
  1. 运行服务器:
granola-mcp
  1. 环境变量(显示默认值):
export GRANOLA_CACHE_PATH="~/Library/Application Support/Granola/cache-v3.json"
export GRANOLA_STDLIB_ONLY=true
export GRANOLA_USE_SQLITE=false

远程模式(网页部署)

在5分钟内启动并运行远程模式!

第一步:获取您的代币

访问 格兰诺拉麦片设置 并复制您的API令牌。

步骤2:配置环境

创建一个 .env 在项目根目录中的文件:

# Enable remote mode
GRANOLA_DOCUMENT_SOURCE=remote

# Add your token
GRANOLA_API_TOKEN=your_actual_token_here

# Optional: customize cache (defaults shown)
# GRANOLA_CACHE_TTL_SECONDS=86400  # 24 hours
# GRANOLA_CACHE_DIR=~/.granola/remote_cache

或者导出环境变量:

export GRANOLA_DOCUMENT_SOURCE=remote
export GRANOLA_API_TOKEN=your_token_here

步骤3:运行服务器

granola-mcp

验证其是否正常工作

使用示例脚本:

python examples/remote_source_example.py

使用MCP Inspector:

npx @modelcontextprotocol/inspector

然后测试 granola.meetings.list 工具。

检查缓存状态: 使用 granola.cache.status 用于验证远程模式是否已激活的工具。

常见配置

# Remote mode with custom cache TTL (1 hour)
export GRANOLA_DOCUMENT_SOURCE=remote
export GRANOLA_API_TOKEN=your_token
export GRANOLA_CACHE_TTL_SECONDS=3600
granola-mcp

故障排除

错误:“需要API令牌”
→ 设置 GRANOLA_API_TOKEN 环境变量

错误:“无效或已过期的令牌”
→ 从(某处)获取一个新令牌 格兰诺拉麦片设置

文档未更新
→ 打电话给 granola.cache.refresh 使用工具或等待缓存TTL过期

📖 代表书籍的符号,可翻译为“书”或直接以符号形式保留,根据上下文具体含义可灵活处理。若需具体描述其用途或含义,可进一步翻译为“表示书籍的符号”或“书本的标志”等。 见 《远程源指南.md》 关于部署场景、安全性和高级配置的全面文档。

使用MCP Inspector进行测试

这个(或“它”) MCP 检查器 这是一个视觉测试工具,提供了一个基于网页的界面用于与MCP服务器进行交互。它非常适合用于测试和调试您的Granola MCP服务器。

安装

npx @modelcontextprotocol/inspector

使用方法

  1. 启动您的Granola MCP服务器:

    granola-mcp
    
  2. 启动检查器:

    npx @modelcontextprotocol/inspector
    
  3. 配置连接:

    • 在浏览器中打开 http://localhost:6274
    • 将传输设置为“STDIO”
    • 将命令设置为 granola-mcp
    • 点击“连接”

检查员功能

  • 视觉工具测试测试所有可用工具,确保界面用户友好
  • 资源勘探浏览并互动式阅读资源
  • 实时调试查看请求/响应详情和错误信息
  • 配置管理保存和加载服务器配置
  • CLI 模式使用程序化方式调用检查器以实现自动化

配置文件

你可以创建一个配置文件以便更轻松地进行设置:

{
  "mcpServers": {
    "granola": {
      "command": "granola-mcp",
      "args": [],
      "env": {
        "GRANOLA_CACHE_PATH": "~/Library/Application Support/Granola/cache-v3.json",
        "GRANOLA_STDLIB_ONLY": "true",
        "GRANOLA_USE_SQLITE": "false"
      }
    }
  }
}

然后运行:

npx @modelcontextprotocol/inspector --config path/to/config.json --server granola

如需更多信息,请访问 MCP Inspector 仓库。

工具

格兰诺拉对话列表 / 格兰诺拉会议列表

列出会议,并支持可选的过滤和分页功能。

输入参数:

{
  "q": "search query string",
  "from_ts": "2024-01-01T00:00:00Z",
  "to_ts": "2024-12-31T23:59:59Z",
  "participants": ["John Doe", "Jane Smith"],
  "limit": 50,
  "cursor": "pagination_cursor_string"
}

参数详情:

  • q (可选):搜索查询字符串
  • from_ts (可选):用于下界过滤的ISO 8601时间戳
  • to_ts (可选):用于上限过滤的ISO 8601时间戳
  • participants (可选):用于过滤的参与者姓名列表
  • limit (可选):要返回的结果数量(1-500,默认:50)
  • cursor (可选):用于下一页的分页游标

返回值: 会议摘要列表,可选next_cursor用于分页

Granola.conversations.get / Granola.meetings.get 翻译为中文可以是:“获取Granola的对话/获取Granola的会议”。不过,这里的“Granola”可能是一个特定应用或系统的名称,具体翻译可能需要根据上下文或该名称在特定领域的含义来调整。如果“Granola”是某个知名平台或应用的名称,那么可能需要查找该名称的官方中文译名。但在此通用翻译中,我们将其保留为“Granola”,以保持原意

获取特定会议的详细信息。

输入参数:

{
  "id": "meeting_identifier_123",
  "include": ["notes", "metadata"]
}

参数详情:

  • id (必填):会议标识符
  • include (可选):要包含的字段列表(["notes", "metadata"])

返回值: 完整的会议记录,包含笔记、概览、总结及元数据

格兰诺拉会议搜索

通过文本查询和高级筛选功能搜索会议。

输入参数:

{
  "q": "search query string",
  "filters": {
    "participants": ["John Doe", "Jane Smith"],
    "platform": "zoom",
    "before": "2024-12-31T23:59:59Z",
    "after": "2024-01-01T00:00:00Z"
  },
  "limit": 50,
  "cursor": "pagination_cursor_string"
}

参数详情:

  • q (必填):搜索查询字符串
  • filters (可选):高级过滤器对象,包含:
    • participants (可选):参与者姓名列表
    • platform (可选):平台过滤器("zoom", "meet", "teams", "other")
    • before (可选):用于上限的 ISO 8601 时间戳
    • after (可选):用于下限的ISO 8601时间戳
  • limit (可选):结果数量(1-500,默认:50)
  • cursor (可选):分页游标

返回值: 带分页功能的匹配会议摘要列表

granola.meetings.export_markdown 翻译为中文是:“格兰诺拉会议导出Markdown”

将会议导出为Markdown格式。

输入参数:

{
  "id": "meeting_identifier_123",
  "sections": ["header", "notes", "attendees", "links"]
}

参数详情:

  • id (必填):会议标识符
  • sections (可选):要包含的章节列表["header", "notes", "attendees", "links"])

返回值: 以Markdown格式编写的会议内容

granola.meetings.stats 翻译为中文可以是:“格兰诺拉会议统计数据” 或者更简洁地表达为 “格兰诺拉会议统计”。这里,“granola”可能是一个特定名称或品牌,而“meetings.stats”则指的是与会议相关的统计数据

获取会议统计数据和分析报告。

输入参数:

{
  "window": "30d",
  "group_by": "day"
}

参数详情:

  • window (可选):时间窗口("7d", "30d", "90d")
  • group_by (可选):分组周期("day", "week")

返回值: 包括按时间段划分的会议次数统计和参与者数据的统计

格兰诺拉(Granola)缓存状态

获取缓存(本地或远程)的信息。

输入参数:

{}

返回值: 缓存信息包括路径、大小、最后加载时间戳和配置文件类型

格兰诺拉(Granola)缓存刷新

手动刷新缓存,绕过TTL(在远程模式下非常有用)。

输入参数:

{}

返回: 刷新状态、消息、会议数量和缓存信息

发展

运行测试:

pytest -q

格式:

black . && isort .