格兰诺拉MCP(注:GranolaMCP可能是一个特定品牌、产品或项目的名称,根据上下文,“MCP”可能代表“麦片”、“多功能组件”或其他含义,但在此直接翻译为“格兰诺拉MCP”以保持原样,具体含义需结合上下文理解。)
一个全面的Python库和命令行界面(CLI)工具,用于访问和分析Granola.ai会议数据,其特点是一个完整的MCP(模型上下文协议)服务器,支持AI集成。
📋 更新日志
2025-07-04 - 新收集命令🎯
- 新已添加
granola collect从会议中导出自己记录的词语的命令 - 特性/功能自动过滤麦克风音频(您的语音)与系统音频(您听到的声音)
- 特色/功能按天整理导出的文本至
YYYY-MM-DD.txt文件 - 特色/功能支持灵活的日期范围(
--last 7d,--from/--to) - 特色/功能可选时间戳和会议元数据的包含
- 特色/功能最小词过滤以排除短语
- 用例(USE CASE)非常适合利用您自己的语音创建大型语言模型(LLM)训练数据集
概述
GranolaMCP通过多个接口提供对Granola.ai会议数据的全面访问:
- 📚 Python 库 - 以编程方式访问会议、会议记录和摘要
- 命令行界面 - 功能丰富的命令行界面,具备高级过滤和分析功能
- 🤖 MCP 服务器 - 用于AI集成的模型上下文协议服务器(如Claude等)
- 📊 数据分析与可视化 - 含ASCII图表的综合统计
数据源
GranolaMCP 完全基于本地缓存文件运行 - 它直接从Granola的本地缓存文件中读取会议数据(cache-v3.json) 而且无需向Granola的服务器发起任何API调用。这种方法提供了:
- 🔌 无网络依赖 - 完全离线工作
- ⚡ 快速访问 - 直接文件系统访问,无API速率限制
- 🔒 专注于隐私保护 - 您的会议数据永远不会离开您的机器
- 🛡️ 无认证 无需管理API密钥或令牌
可选方法可用: 虽然在这个库中并未实现,但从技术上讲,从Granola中提取访问令牌是可能的 supabase.json 配置文件并与Granola API直接通信。然而,对于大多数用例,基于缓存的方法提供了更好的性能、隐私和可靠性。
✨ 主要特点
核心数据访问
- 🔍 翻译为中文是:放大镜(用于查看细节或搜索) 智能JSON解析 - 处理Granola的复杂双JSON缓存结构
- 📝(记事本或笔记的图标,可译为“记事”或根据上下文译为“笔记”等) AI摘要提取 - 将人工智能生成的摘要与人工笔记区分开来
- 💬 获取完整文字记录 - 完整的带时间戳的说话者识别转录文本
- 📁 文件夹 文件夹整理 - 按文件夹组织会议(OPSWAT、Mozilla、个人等)
- 🕐 一小时(或表示时间流逝的符号) 准确的时长计算 - 根据转录时间确定的实际会议时长
- 🏷️(标签) 丰富的元数据 - 参与者、时间戳和会议背景
高级命令行界面
- 🎯(目标) 智能过滤 - 按日期、参与者、标题或文件夹筛选
- 📊(表格图标,无具体文字含义,通常用于表示数据或信息的展示) 桌面显示 - 清晰的表格展示转录/摘要的字数统计
- 🔍 翻译为中文是:🔍(这个符号本身没有直接的中文翻译,它通常被用作放大镜的图标,表示搜索或查看细节的意思,所以可以理解为“放大镜”或根据上下文翻译为“搜索”、“查看”等。) 智能搜索 - 在标题、内容和参与者中进行搜索
- 📈(上升趋势的折线图) 分析仪表板 - 会议频率、持续时间模式及趋势
- 🎨 表示“美术”或“艺术创作”的意思。 美观的输出 - 带颜色编码的、格式化的终端显示
- 📄 代表“文件”或“纸张”的意思。 出口能力 - 导出为带有完整格式的Markdown文件
用于AI集成的MCP服务器
- 🤖 机器人 8种综合工具 - 完全访问AI助手的会议数据
- 🔌(电源插头) Claude桌面集成 - 适用于Claude的即开即用配置
- 📡(天线/卫星信号) JSON-RPC 协议 - 标准MCP协议实现
- ⚡ 闪电符号(通常表示快速、活力、电或警示) 实时访问 - 实时访问您最新的会议数据
- 🛡️ 译为中文是“护盾”或“防御”。这个符号通常用来表示保护、防御或安全的意思。 强大的错误处理 - 对缺失数据和错误的优雅处理
企业级就绪功能
- 🐍(蛇) 零依赖 - 仅使用纯Python标准库
- ⚙️(齿轮符号,常用于表示机械、设置或调整等含义) 灵活配置 - 环境变量、.env 文件、CLI 参数
- 🕐 时区感知 - 正确的UTC时间转换为布里斯班(UTC+10)时区
- 📅 日历 灵活的日期解析 - 相对日期(3天、24小时、1周)和绝对日期
- 🎯(靶心,表示目标或精准) 准备就绪,可用于生产 - 全面的错误处理和日志记录
安装
# Install from source
git clone https://github.com/pedramamini/GranolaMCP.git
cd GranolaMCP
pip install -e .
# Or install from PyPI (when available)
pip install granola-mcp快速入门
1. 配置
复制示例配置文件并更新缓存路径:
cp .env.example .env编辑 .env 设置您的Granola缓存文件路径:
GRANOLA_CACHE_PATH=/Users/pedram/Library/Application Support/Granola/cache-v3.json2. 基本用法
from granola_mcp import GranolaParser
from granola_mcp.utils.date_parser import parse_date
from granola_mcp.core.timezone_utils import convert_utc_to_cst
# Initialize parser
parser = GranolaParser()
# Load and parse cache
cache_data = parser.load_cache()
meetings = parser.get_meetings()
print(f"Found {len(meetings)} meetings")
# Work with individual meetings
from granola_mcp.core.meeting import Meeting
for meeting_data in meetings[:5]: # First 5 meetings
meeting = Meeting(meeting_data)
print(f"Meeting: {meeting.title}")
print(f"Start: {meeting.start_time}")
print(f"Participants: {', '.join(meeting.participants)}")
if meeting.has_transcript():
transcript = meeting.transcript
print(f"Transcript: {transcript.word_count} words")
print("---")3. 日期解析示例
from granola_mcp.utils.date_parser import parse_date, get_date_range
# Parse relative dates
three_days_ago = parse_date("3d") # 3 days ago
last_week = parse_date("1w") # 1 week ago
yesterday = parse_date("24h") # 24 hours ago
# Parse absolute dates
specific_date = parse_date("2025-01-01")
specific_datetime = parse_date("2025-01-01 14:30:00")
# Get date ranges
start_date, end_date = get_date_range("1w", "1d") # From 1 week ago to 1 day ago4. 时区转换
from granola_mcp.core.timezone_utils import convert_utc_to_local
import datetime
# Convert UTC timestamp to Brisbane time (UTC+10)
utc_time = datetime.datetime.now(datetime.timezone.utc)
brisbane_time = convert_utc_to_local(utc_time)
print(f"UTC: {utc_time}")
print(f"Brisbane: {brisbane_time}")💻 CLI 使用方法
CLI 提供了强大的命令,用于利用高级功能探索和分析会议数据:
列出带有丰富显示的会议
# List recent meetings with word counts and folders
python -m granola_mcp list --last 7d
# Filter by folder (OPSWAT, Mozilla, Personal, etc.)
python -m granola_mcp list --folder Mozilla --limit 10
# Search meetings by title
python -m granola_mcp list --title-contains "standup" --folder OPSWAT
# Filter by participant and date range
python -m granola_mcp list --participant "john@example.com" --from 30d
# Sort by different criteria
python -m granola_mcp list --sort-by duration --reverse --limit 10表格输出功能:
- 会议ID(为便于阅读已缩写)
- 带智能截断的标题
- 本地时区的日期和时间
- 准确时长 根据转录时间(或:从转录时间表)
- 转录文字字数 (用于大数的6.0k格式)
- AI摘要字数统计 (来自提取的摘要)
- 文件夹整理 (Mozilla、OPSWAT、Personal 等)
显示会议详情
# Show meeting overview with availability indicators
python -m granola_mcp show
# Show AI-generated summary (structured content)
python -m granola_mcp show --summary
# Show human notes/transcript content
python -m granola_mcp show --notes
# Show full transcript with speakers
python -m granola_mcp show --transcript
# Show everything including metadata
python -m granola_mcp show --all会议展示功能:
- 清晰的可用性指示器(AI摘要:可用/不可用)
- 人工智能摘要与人类笔记的对比
- 完整的发言者识别转录文本
- 包含丰富元数据,并具备正确的时区转换功能
- 参与者名单和标签
导出会议
# Export meeting to markdown with full formatting
python -m granola_mcp export
# Export without transcript for summaries only
python -m granola_mcp export --no-transcript
# Save to file with proper formatting
python -m granola_mcp export > meeting.md统计与分析仪表板
# Comprehensive overview with meeting statistics
python -m granola_mcp stats --summary
# Meeting frequency analysis with ASCII charts
python -m granola_mcp stats --meetings-per-day --last 30d
python -m granola_mcp stats --meetings-per-week --last 12w
python -m granola_mcp stats --meetings-per-month --last 6m
# Duration analysis (only for meetings with transcripts)
python -m granola_mcp stats --duration-distribution
# Participant collaboration patterns
python -m granola_mcp stats --participant-frequency
# Time pattern analysis (peak hours, busiest days)
python -m granola_mcp stats --time-patterns
# Content analysis with word counts
python -m granola_mcp stats --word-analysis
# Complete analytics dashboard
python -m granola_mcp stats --all收集你自己的话语用于大语言模型(LLM)训练
# Collect your own words from last 7 days
granola collect --last 7d --output-dir ./my-words
# Collect from specific date range
granola collect --from 2025-01-01 --to 2025-01-31 --output-dir ./january-words
# Include timestamps and meeting metadata
granola collect --last 30d --output-dir ./my-words --include-timestamps --include-meeting-info
# Filter out very short utterances (minimum 3 words)
granola collect --last 30d --output-dir ./my-words --min-words 3
# Collect all available data
granola collect --last 2y --output-dir ./complete-dataset --min-words 1主要特点:
- 说话人分离自动过滤你听到的内容(系统源)中的你的发言(麦克风源)
- 日常组织创建独立的
YYYY-MM-DD.txt每天的文件 - 已准备好使用大型语言模型(LLM Ready)完美格式,用于从您自己的语音中创建训练数据集
- 灵活过滤日期范围、最小字数、可选元数据
- 文件管理安全地用相同内容覆盖现有文件
🤖 用于AI集成的MCP服务器
启动MCP服务器以与Claude Desktop等AI助手集成:
# Start MCP server
python -m granola_mcp.mcp
# Start with debug logging
python -m granola_mcp.mcp --debug
# Start with custom cache path
python -m granola_mcp.mcp --cache-path "/path/to/cache.json"Claude 桌面集成
添加到你的 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"granola-mcp": {
"command": "python",
"args": ["-m", "granola_mcp.mcp"],
"env": {
"GRANOLA_CACHE_PATH": "/Users/[username]/Library/Application Support/Granola/cache-v3.json"
}
}
}
}可用的MCP工具
服务器提供了10个全面的工具:
- 获取最近会议 - 获取最近的X次会议记录(追溯到必要的时间点)
- 列出会议 - 简单的会议列表,带有日期过滤器(默认显示最近3天)
- 搜索会议 - 使用文本、参与者和日期过滤器进行高级搜索
- 获取会议信息 - 完整的会议详情及元数据
- 获取转录本 - 完整的文字记录,附带发言者识别
- 获取会议记录 - 结构化的AI摘要和人工笔记
- 列出参与者 - 带有会议历史记录的参与者分析
- 获取统计数据 - 生成分析报告(摘要、频率、持续时间、模式)
- 出口会议 - 导出会议记录为Markdown格式
- 分析模式 - 分析会议模式和趋势
MCP使用示例
// Get the 5 most recent meetings (regardless of date)
{
"name": "get_recent_meetings",
"arguments": {
"count": 5
}
}
// List recent meetings (last 3 days by default)
{
"name": "list_meetings",
"arguments": {
"limit": 10
}
}
// List meetings from last week
{
"name": "list_meetings",
"arguments": {
"from_date": "7d",
"limit": 5
}
}
// Search meetings with text query
{
"name": "search_meetings",
"arguments": {
"query": "project review",
"from_date": "7d"
}
}
// Get complete meeting details
{
"name": "get_meeting",
"arguments": {
"meeting_id": "f47f8acd-70bd-49b7-8b0d-83c49eee07d1"
}
}
// Get meeting statistics
{
"name": "get_statistics",
"arguments": {
"stat_type": "summary"
}
}项目结构
granola_mcp/
├── __init__.py # Main package exports
├── core/ # Core functionality
│ ├── __init__.py
│ ├── parser.py # JSON cache parser
│ ├── meeting.py # Meeting data model
│ ├── transcript.py # Transcript data model
│ └── timezone_utils.py # UTC to CST conversion
├── utils/ # Utility functions
│ ├── __init__.py
│ ├── config.py # Configuration management
│ └── date_parser.py # Date parsing utilities
├── cli/ # CLI tools (Phase 2 & 4)
│ ├── __init__.py
│ ├── main.py # Main CLI entry point
│ ├── commands/ # CLI commands
│ │ ├── list.py # List meetings
│ │ ├── show.py # Show meeting details
│ │ ├── export.py # Export meetings
│ │ └── stats.py # Statistics & analytics
│ └── formatters/ # Output formatters
│ ├── colors.py # ANSI color utilities
│ ├── table.py # Table formatting
│ ├── markdown.py # Markdown export
│ └── charts.py # ASCII charts & visualizations
└── mcp/ # MCP server (Phase 3)
└── __init__.py要求
- Python 3.12或更高版本
- 无外部依赖(仅使用Python标准库)
许可证
MIT 许可证 - 详见 LICENSE 文件。
建筑学
见 ARCHITECTURE.md(文件名,可译为“架构.md”或保持原样,具体取决于上下文是否需要翻译文件名) 用于详细的架构文档。
路线图
见 ROADMAP.md 翻译为中文是:“路线图.md”(其中“.md”通常表示Markdown格式的文件) 用于制定发展路线图和未来规划。
