granola-meeting-notes

star 3

Use when the user asks about meeting notes, transcripts, action items, project lists from meetings, meeting prep, weekly digests, or mentions Granola. Also use when asked "what did we discuss", "who was in the meeting", "what did I commit to", "what were the decisions", "recap my meetings", "who said what", or wants to search/export meeting history. Triggers on keywords like meeting, discussed, action items, transcript, recap, digest, attendees, commitments.

cathrynlavery By cathrynlavery schedule Updated 3/16/2026

name: granola-meeting-notes description: Use when the user asks about meeting notes, transcripts, action items, project lists from meetings, meeting prep, weekly digests, or mentions Granola. Also use when asked "what did we discuss", "who was in the meeting", "what did I commit to", "what were the decisions", "recap my meetings", "who said what", or wants to search/export meeting history. Triggers on keywords like meeting, discussed, action items, transcript, recap, digest, attendees, commitments.

Granola Meeting Notes

Access Granola meeting notes, transcripts, and summaries from Claude Code.

Primary: Granola MCP tools (mcp__granola__*) Fallback: Local CLI at ./bin/granola.js (relative to this skill's directory)


MCP Tools (Primary)

Granola has an official MCP server at https://mcp.granola.ai/mcp. When connected, tools appear as mcp__granola__* in your session.

Setup

claude mcp add granola --transport http https://mcp.granola.ai/mcp

You'll be prompted to authenticate via Granola on first use.

Available Tools

Tool Purpose Key Parameters
mcp__granola__list_meetings List recent meetings with title, date, attendees days (number)
mcp__granola__get_meetings Search meetings by content, notes, transcripts search terms
mcp__granola__get_meeting_transcript Fetch full raw transcript for a meeting meeting id
mcp__granola__query_granola_meetings Natural language queries across all meetings query (string)

Usage Pattern

1. mcp__granola__list_meetings({ days: 7 })            → browse recent meetings
2. mcp__granola__get_meeting_transcript({ id: "..." })  → get full transcript
3. mcp__granola__query_granola_meetings({ query: "..." }) → semantic search

Prompt Recipes

Step-by-step patterns using MCP tools as the primary method.

"What did we discuss yesterday?"

  1. mcp__granola__list_meetings({ days: 2 }) → find yesterday's meetings
  2. mcp__granola__get_meeting_transcript({ id }) → get full transcript for each
  3. Summarize: key topics, decisions made, action items

"Give me my action items from this week"

  1. mcp__granola__list_meetings({ days: 7 }) → get all meetings this week
  2. mcp__granola__get_meeting_transcript({ id }) for each meeting
  3. Scan for commitments — look for: "I'll do", "can you", "let's", "by Friday", "action item", "follow up", "need to"
  4. Group by owner and present as a checklist with meeting source

"Prep me for my meeting with [person]"

  1. mcp__granola__query_granola_meetings({ query: "[person name]" }) → find meetings with that person
  2. Get transcripts for the most recent 2-3 matches
  3. Summarize: last meeting date, what was discussed, open action items, unresolved topics

"Weekly digest"

  1. mcp__granola__list_meetings({ days: 7 }) → get all meetings
  2. Fetch transcripts for each meeting
  3. Compile: meetings by day, key decisions, action items by person, recurring themes

"Compile a project list from my meetings"

  1. mcp__granola__list_meetings({ days: N }) (user specifies timeframe, default 14)
  2. Fetch transcripts for each meeting
  3. Produce structured markdown:
    • Individual meeting summaries (title, date, attendees, key points, decisions, action items)
    • Master project list (project name, description, status, key people, open items, related meetings)
    • Open action items grouped by person
  4. Save to user's specified location (default: ~/Desktop/project-list.md)

"What decisions did we make about [topic]?"

  1. mcp__granola__query_granola_meetings({ query: "[topic]" }) → find relevant meetings
  2. mcp__granola__get_meeting_transcript({ id }) for each match
  3. Extract decision segments — look for: "let's go with", "we decided", "agreed", "the plan is"
  4. Present chronologically with meeting date and context

"Who said what about [topic]?"

  1. mcp__granola__query_granola_meetings({ query: "[topic]" }) or list + fetch transcripts
  2. Filter for segments mentioning the topic
  3. Attribute by speaker: source: "microphone" = the user, source: "system" = other speakers
  4. Present as attributed quotes with timestamps

"Compare meeting A vs meeting B"

  1. Get both transcripts via mcp__granola__get_meeting_transcript
  2. Summarize each independently
  3. Highlight: what changed, new decisions, shifted priorities, contradictions

"Export meetings for [person/project]"

  1. mcp__granola__query_granola_meetings({ query: "[person/project]" }) → find relevant meetings
  2. Fetch transcripts and compile into markdown
  3. Save to user-specified location or ~/Desktop/meeting-exports/

CLI Fallback

Use the CLI only if MCP tools are not available in the session (e.g., server disconnected or auth expired).

Prerequisites

  • Granola desktop app installed and logged in on macOS
  • Node.js 18+

ESM Fix

If you get ESM/import errors, copy the CLI to /tmp first:

cp ./bin/granola.js /tmp/granola.cjs

Then use node /tmp/granola.cjs <command> for all commands below.

CLI Reference

Location: ./bin/granola.js (relative to this skill's directory)

Command Description
list [--days N] List meetings from last N days (default: 7)
show <id> [--transcript] Show meeting details; --transcript fetches full transcript
search <query> Search by title, notes, or attendee name
export <id> [--output DIR] [--transcript] Export meeting to markdown file
dump [--days N] [--output FILE] Bulk export all meetings + transcripts to JSON

Partial IDs work (first 8 characters).

CLI Examples

node /tmp/granola.cjs list --days 7
node /tmp/granola.cjs show abc12345 --transcript
node /tmp/granola.cjs search "Sarah"
node /tmp/granola.cjs dump --days 14 --output /tmp/meetings.json

Architecture

Component Source
All meeting data (MCP) Granola cloud API via https://mcp.granola.ai/mcp (HTTP transport)
Auth (MCP) Handled by Granola's MCP server (browser auth on first connect)
Metadata (CLI fallback) Local cache: ~/Library/Application Support/Granola/cache-v*.json
Transcripts (CLI fallback) API: POST https://api.granola.ai/v1/get-document-transcript
Auth (CLI fallback) WorkOS token: ~/Library/Application Support/Granola/supabase.json

Transcript segments have text, source ("microphone" = user, "system" = others), start_timestamp, end_timestamp. Transcripts are speech-to-text — names and technical terms may be misspelled.


Troubleshooting

Problem Fix
MCP tools not in session Run claude mcp list — if granola not connected, re-add with claude mcp add
MCP auth expired Remove and re-add: claude mcp remove granola && claude mcp add granola --transport http https://mcp.granola.ai/mcp
ESM/import errors (CLI) cp CLI to /tmp/granola.cjs and run from there
API returns 401 Auth token expired — re-open Granola desktop app to refresh
Empty transcript array Meeting wasn't recorded or was too short
Missing attendees Attendee data comes from Google Calendar — check calendar event
Install via CLI
npx skills add https://github.com/cathrynlavery/granola-skill --skill granola-meeting-notes
Repository Details
star Stars 3
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator
cathrynlavery
cathrynlavery Explore all skills →