返回市场
格兰诺拉-MCP服务器

格兰诺拉-MCP服务器

作者:MSH4R1F2 星标更新:2025-09-30

项目介绍

Granola 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

远程模式(Web部署)

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

第一步:获取您的Token

访问 Granola设置 并复制您的API Token。

第二步:配置环境

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

# 启用远程模式
GRANOLA_DOCUMENT_SOURCE=remote

# 添加您的Token
GRANOLA_API_TOKEN=your_actual_token_here

# 可选:自定义缓存(显示默认值)
# GRANOLA_CACHE_TTL_SECONDS=86400  # 24小时
# GRANOLA_CACHE_DIR=~/.granola/remote_cache

或者导出环境变量:

export GRANOLA_DOCUMENT_SOURCE=remote
export GRANOLA_API_TOKEN=your_token_here

第三步:运行服务器

granola-mcp

验证是否正常工作

使用示例脚本:

python examples/remote_source_example.py

使用MCP Inspector:

npx @modelcontextprotocol/inspector

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

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

常见配置

# 远程模式并自定义缓存TTL(1小时)
export GRANOLA_DOCUMENT_SOURCE=remote
export GRANOLA_API_TOKEN=your_token
export GRANOLA_CACHE_TTL_SECONDS=3600
granola-mcp

故障排除

错误:"需要API Token"
→ 设置 GRANOLA_API_TOKEN 环境变量

错误:"无效或已过期的Token"
→ 从 Granola设置 获取新的Token

文档未更新
→ 调用 granola.cache.refresh 工具或等待缓存TTL到期

📖 参阅 REMOTE_SOURCE_GUIDE.md 以获取全面的部署场景、安全性和高级配置文档。

使用MCP Inspector进行测试

MCP Inspector 是一个可视化测试工具,提供了一个基于Web的界面来与MCP服务器交互。它非常适合测试和调试您的Granola MCP服务器。

安装

npx @modelcontextprotocol/inspector

使用方法

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

    granola-mcp
    
  2. 启动Inspector:

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

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

Inspector特性

  • 可视化工具测试:使用用户友好的界面测试所有可用工具
  • 资源探索:浏览和阅读资源
  • 实时调试:查看请求/响应详情和错误消息
  • 配置管理:保存和加载服务器配置
  • CLI模式:编程使用Inspector进行自动化

配置文件

您可以创建一个配置文件以便于设置:

{
  "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仓库

工具

granola.conversations.list / granola.meetings.list

列出会议,可选过滤和分页。

输入参数:

{
  "q": "搜索查询字符串",
  "from_ts": "2024-01-01T00:00:00Z",
  "to_ts": "2024-12-31T23:59:59Z",
  "participants": ["John Doe", "Jane Smith"],
  "limit": 50,
  "cursor": "分页游标字符串"
}

参数详情:

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

返回值: 包含可选下一页游标的会议概要列表

granola.conversations.get / granola.meetings.get

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

输入参数:

{
  "id": "会议标识符123",
  "include": ["笔记", "元数据"]
}

参数详情:

  • id(必需):会议标识符
  • include(可选):要包含的字段列表(如["笔记", "元数据"]

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

granola.meetings.search

通过文本查询和高级过滤搜索会议。

输入参数:

{
  "q": "搜索查询字符串",
  "filters": {
    "participants": ["John Doe", "Jane Smith"],
    "platform": "zoom",
    "before": "2024-12-31T23:59:59Z",
    "after": "2024-01-01T00:00:00Z"
  },
  "limit": 50,
  "cursor": "分页游标字符串"
}

参数详情:

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

返回值: 包含分页的匹配会议概要列表

granola.meetings.export_markdown

将会议导出为Markdown格式。

输入参数:

{
  "id": "会议标识符123",
  "sections": ["标题", "笔记", "参会者", "链接"]
}

参数详情:

  • id(必需):会议标识符
  • sections(可选):要包含的部分列表(如["标题", "笔记", "参会者", "链接"]

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

granola.meetings.stats

获取会议统计和分析。

输入参数:

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

参数详情:

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

返回值: 统计包括按周期的会议数量和参与者数据

granola.cache.status

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

输入参数:

{}

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

granola.cache.refresh

手动刷新缓存,绕过TTL(适用于远程模式)。

输入参数:

{}

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

开发

运行测试:

pytest -q

格式化:

black . && isort .