Working from cache-v3.json rather than an API means it is offline, private, and not rate-limited — the trade is that it sees whatever Granola has already synced locally. The split between AI summary and human notes is the useful part: you can ask for what the model wrote versus what you wrote, rather than one merged blob.
A server that reads Granola's local cache file and exposes meetings, transcripts and summaries — plus analytics — as eight tools.
- list_meetings and get_meeting — the roster with filters, and full detail on one meeting
- get_transcript returns the speaker-identified transcript; get_meeting_notes separates the AI summary from human notes
- search_meetings searches across titles, content and participants; list_participants lists who was in them
- get_recent_meetings pulls the latest; analyze_patterns and get_statistics report frequency and duration trends
- export_meeting writes a meeting out to markdown
- Everything runs offline against the cache file, so meeting data never leaves the machine
Granola installed, with GRANOLA_CACHE_PATH pointing at its cache-v3.json. Install from source with pip install -e . Pure Python standard library — no third-party dependencies, no API key, no account. It reads the cache directly and makes no calls to Granola's servers.
One command — pip install -e .
