A local Model Context Protocol (MCP) server for Granola. It lets Claude (Desktop, Code, or any MCP client) read your Granola meetings, AI-enhanced notes, and raw transcripts — using the login session of the Granola desktop app already installed on your machine.
⚡ Before you set this up: Granola now ships an official hosted MCP server at
https://mcp.granola.ai/mcp. It uses OAuth (no local files, works on claude.ai web and mobile too) and is the zero-maintenance option. Use this project if you prefer a fully local integration that talks to Granola with your desktop app's own credentials, or want to customize the tools.To use the official server instead, add a "Granola" connector in Claude's settings → Connectors, or in Claude Code:
claude mcp add --transport http granola https://mcp.granola.ai/mcp
- Zero-config auth — reuses the Granola desktop app's login (no API keys). Supports both the current
stored-accounts.jsonand legacysupabase.jsontoken formats. - Cross-platform — macOS, Windows, and Linux paths supported.
- Meetings, notes & transcripts — list/search meetings, browse folders, read AI-enhanced notes as clean Markdown, and pull raw transcripts with speaker labels.
- Self-diagnosing — an
auth_statustool tells you exactly why a connection isn't working (missing file, expired token, encrypted install, …). - Private — runs entirely on your machine; only talks to
api.granola.ai.
| Tool | Description |
|---|---|
auth_status |
Diagnose local Granola authentication (run this first if things fail) |
list_workspaces |
List your Granola workspaces |
list_folders |
List folders with document counts |
list_meetings |
List recent meetings, with optional title search (limit, search) |
list_folder_meetings |
List meetings in a folder by name or id |
get_meeting_notes |
Read a meeting's AI-enhanced notes as Markdown |
get_meeting_transcript |
Raw transcript with Me/Them speaker labels and timestamps |
- The Granola desktop app, installed and logged in, on the same machine.
- Python 3.10+, and ideally uv (
brew install uv).
claude mcp add granola -- uvx --from git+https://github.com/bencockin/granola-mcp granola-mcpOpen ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows) and add:
{
"mcpServers": {
"granola": {
"command": "uvx",
"args": ["--from", "git+https://github.com/bencockin/granola-mcp", "granola-mcp"]
}
}
}Then fully quit and reopen Claude Desktop.
No uv? Clone the repo and use plain Python instead:
git clone https://github.com/bencockin/granola-mcp.git && cd granola-mcp python3 -m venv .venv && .venv/bin/pip install .and set
"command": "/path/to/granola-mcp/.venv/bin/granola-mcp"with"args": [].
Ask Claude things like:
- "Summarize my meeting from this morning."
- "What were the action items from the Weekly Sync?"
- "Search my Granola notes for mentions of 'budget'."
- "Give me the full transcript of my last meeting."
| Environment variable | Purpose |
|---|---|
GRANOLA_AUTH_PATH |
Explicit path to the Granola auth file, if yours lives somewhere unusual |
GRANOLA_TOKEN |
Provide an access token directly (skips reading local files) |
GRANOLA_CLIENT_VERSION |
Override the client version header sent to the API |
Ask Claude to run the auth_status tool — it reports exactly what was found.
- "No Granola auth file found" — make sure the Granola app is installed, opened, and logged in on this machine.
- "Granola rejected the access token (401)" — the token on disk went stale; open the Granola app so it refreshes its session, then retry.
- "This Granola install uses encrypted state (v6+)" — newer Granola versions can encrypt their local files (
supabase.json.enc,storage.dek). This server cannot read those installs; use the official hosted MCP server (see the note at the top) instead.
Granola does not publish a public REST API. This server reads the access token the Granola desktop app stores locally and calls the same api.granola.ai endpoints the app itself uses. Those endpoints are unofficial and may change without notice — if something breaks, the official MCP server is the stable path.
uv venv && uv pip install -e ".[dev]"
uv run pytest