Skip to content
Back to skills

Granola

ASecurity

Access and process Granola meeting notes and transcripts via the granola CLI (MCP-backed). Use when pulling meeting data, analyzing transcripts, backfilling meetings, or any task involving Granola meeting content.

  • 64 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added May 28, 2026
toolsbashapi

Works with

  • cli
  • api
  • mcp

Security analysis

A100/100

Scanned September 20, 2026

npx -y skills add joelhooks/joelclaw --skill granola --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Granola?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Granola
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/joelhooks-granola/badge)](https://www.skillsdirectory.com/skills/joelhooks-granola)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: granola
displayName: Granola Meeting Intelligence
description: Access and process Granola meeting notes and transcripts via the granola CLI (MCP-backed). Use when pulling meeting data, analyzing transcripts, backfilling meetings, or any task involving Granola meeting content.
version: 0.1.0
author: joel
tags:
  - granola
  - meetings
  - transcripts
  - mcp
disable-model-invocation: true
---

# Granola Meeting Intelligence

Access Joel's Granola meeting notes via the `granola` CLI, which wraps the Granola MCP server through `mcporter`.

## 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

## CLI Commands

### List meetings
```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>
```

### Get full transcript
```bash
granola meeting <meeting-id> --transcript
```

### Search meetings
```bash
granola search "<query>"
```

### Check auth/connection
```bash
granola --help
```
Returns `"connected": true` if MCP transport is working.

## 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" }
  ]
}
```

## 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.
- **Discover actual access:** Use Executor’s saved Granola connection and current integration contract. Historical sandbox EPERM is not a universal capability limit. Start with summaries; raw evidence needs the required scoped drilldown receipt.

## 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.

## MCP Tools (underlying)

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

## 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

## 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`

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.