使用说明
格兰诺拉MCP服务器
只读MCP服务器,通过MCP工具提供Granola会议服务。支持本地文件缓存和远程API源。
特点/特性
- ✅ 本地与远程资源使用本地缓存文件或直接从Granola API获取
- ✅ 已准备好进行Web部署部署到浏览器、边缘函数或无服务器平台
- ✅ 表示“正确”或“完成”。 智能缓存基于TTL的缓存,支持手动刷新
- ✅ 自动重试内置带有指数退避的重试逻辑
- ✅ 零依赖仅使用标准库的核心(可选FastMCP用于MCP运行时)
快速入门
本地模式(默认)
- 安装(开发版):
pip install -e .[dev,mcp]
- 运行服务器:
granola-mcp
- 环境变量(显示默认值):
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
使用方法
-
启动您的Granola MCP服务器:
granola-mcp -
启动检查器:
npx @modelcontextprotocol/inspector -
配置连接:
- 在浏览器中打开 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 .
