granola

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Granola Meeting Intelligence

Granola 会议智能

Access Joel's Granola meeting notes via the
granola
CLI, which wraps the Granola MCP server through
mcporter
.
通过
granola
CLI访问Joel的Granola会议笔记,该CLI通过
mcporter
封装了Granola MCP服务器。

Setup

配置说明

  • Binary:
    ~/.local/bin/granola
  • Source:
    ~/Code/joelhooks/granola-cli
  • Config:
    ~/.config/granola-cli/mcporter.json
  • Transport: MCP via mcporter (NOT direct API, NOT npm package)
  • Auth: Uses Granola's local credentials automatically
  • 二进制文件:
    ~/.local/bin/granola
  • 源码路径:
    ~/Code/joelhooks/granola-cli
  • 配置文件:
    ~/.config/granola-cli/mcporter.json
  • 传输方式: 通过mcporter使用MCP(非直接API,非npm包)
  • 认证: 自动使用Granola的本地凭证

CLI Commands

CLI 命令

List meetings

列出会议

bash
granola meetings [--range this_week|last_week|last_30_days|custom] [--start YYYY-MM-DD] [--end YYYY-MM-DD]
bash
granola meetings [--range this_week|last_week|last_30_days|custom] [--start YYYY-MM-DD] [--end YYYY-MM-DD]

Get meeting details (summary, participants)

获取会议详情(摘要、参会人员)

bash
granola meeting <meeting-id>
bash
granola meeting <meeting-id>

Get full transcript

获取完整转录文本

bash
granola meeting <meeting-id> --transcript
bash
granola meeting <meeting-id> --transcript

Search meetings

搜索会议

bash
granola search "<query>"
bash
granola search "<query>"

Check auth/connection

检查认证/连接

bash
granola --help
Returns
"connected": true
if MCP transport is working.
bash
granola --help
如果MCP传输正常,会返回
"connected": true

Output Format

输出格式

All commands return agent-first JSON with HATEOAS
next_actions
:
json
{
  "ok": true,
  "command": "granola meetings",
  "result": { ... },
  "next_actions": [
    { "command": "granola meeting <id>", "description": "Get details" }
  ]
}
所有命令返回以Agent为核心的JSON格式,包含HATEOAS风格的
next_actions
字段:
json
{
  "ok": true,
  "command": "granola meetings",
  "result": { ... },
  "next_actions": [
    { "command": "granola meeting <id>", "description": "Get details" }
  ]
}

Important Notes

重要说明

  • Timestamps are UTC. Granola returns all dates in UTC. A meeting showing "5:01 PM" on Feb 26 is actually 9:01 AM PST. Always convert when displaying to Joel or writing to Vault files.
  • Codex cannot run Granola. The MCP transport (mcporter) requires a local socket that Codex sandboxes can't open (
    EPERM
    ). Always pull transcripts from pi/gateway sessions, not codex tasks.
  • 时间戳为UTC时区:Granola返回的所有日期均为UTC时区。例如显示为2月26日下午5:01的会议,实际为太平洋标准时间上午9:01。在向Joel展示或写入Vault文件时,务必进行时区转换。
  • Codex无法运行Granola:MCP传输(mcporter)需要本地套接字,而Codex沙箱无法打开该套接字(错误码
    EPERM
    )。请始终从pi/gateway会话中提取转录文本,而非通过Codex任务。

Known Limitations

已知限制

  • Rate limiting:
    get_meeting_transcript
    endpoint rate-limits aggressively. Don't batch transcript pulls — space them out.
  • Concurrency: Keep concurrency at 1 for transcript fetches. Original concurrency of 3 overwhelmed the API.
  • Granola app not required locally: The MCP server handles auth via stored creds, Granola desktop app does NOT need to be running.
  • 速率限制
    get_meeting_transcript
    接口的速率限制非常严格。请勿批量拉取转录文本,需间隔执行。
  • 并发限制:拉取转录文本时请将并发数保持为1。原并发数3会导致API过载。
  • 无需本地运行Granola应用:MCP服务器通过存储的凭证处理认证,无需运行Granola桌面应用。

MCP Tools (underlying)

底层MCP工具

The granola CLI wraps these MCP tools:
  1. query_granola_meetings
    — NL search with citations
  2. list_meetings
    — by time range
  3. get_meetings
    — details by ID array
  4. get_meeting_transcript
    — verbatim transcript by ID
granola CLI封装了以下MCP工具:
  1. query_granola_meetings
    — 带引用的自然语言搜索
  2. list_meetings
    — 按时间范围列出会议
  3. get_meetings
    — 通过ID数组获取会议详情
  4. get_meeting_transcript
    — 通过ID获取逐字转录文本

Pipeline Integration

流水线集成

When a new meeting is detected, fire an Inngest event:
bash
curl -X POST "http://localhost:8288/e/$EVENT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "meeting/noted",
    "data": {
      "meeting_id": "<id>",
      "title": "<title>",
      "date": "<YYYY-MM-DD>",
      "source": "granola",
      "participants": ["Person A", "Person B"]
    }
  }'
Inngest functions that process meetings:
  • check/granola-meetings
    — event-triggered check for new meetings
  • granola-check-cron
    — hourly cron (
    7 * * * *
    ) polling for new meetings
  • granola-backfill
    — bulk backfill all meetings
当检测到新会议时,触发一个Inngest事件:
bash
curl -X POST "http://localhost:8288/e/$EVENT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "meeting/noted",
    "data": {
      "meeting_id": "<id>",
      "title": "<title>",
      "date": "<YYYY-MM-DD>",
      "source": "granola",
      "participants": ["Person A", "Person B"]
    }
  }'
处理会议的Inngest函数:
  • check/granola-meetings
    — 事件触发的新会议检查
  • granola-check-cron
    — 每小时定时任务(
    7 * * * *
    )轮询新会议
  • granola-backfill
    — 批量补录所有会议

Related

相关资源

  • ADR-0055: Granola Meeting Intelligence Pipeline
  • Source repo:
    ~/Code/joelhooks/granola-cli
  • Inngest functions:
    packages/system-bus/src/inngest/functions/check-granola.ts
  • Meeting analysis:
    packages/system-bus/src/inngest/functions/meeting-analyze.ts
  • Transcript indexing:
    packages/system-bus/src/inngest/functions/meeting-transcript-index.ts
  • ADR-0055: Granola 会议智能流水线
  • 源码仓库:
    ~/Code/joelhooks/granola-cli
  • Inngest函数:
    packages/system-bus/src/inngest/functions/check-granola.ts
  • 会议分析:
    packages/system-bus/src/inngest/functions/meeting-analyze.ts
  • 转录文本索引:
    packages/system-bus/src/inngest/functions/meeting-transcript-index.ts