Granola MCP Setup for Cursor
Version: 1.0
Date: February 2026
Owner: AI Team
1. Purpose
This guide enables Cursor AI agents to query and retrieve meeting transcripts from Granola.ai. Use this when the user asks about meeting content, action items, decisions, or transcripts from past calls. Granola records and transcribes meetings; the MCP provides programmatic access to search and fetch that content.
2. When to Use
- User asks: “what was discussed in recent LMNT calls?”, “find action items from this week’s meetings”, “get the transcript from that call”
- Extracting meeting summaries, decisions, or follow-ups for Linear tickets or vault documentation
- Syncing Granola transcripts to vault (e.g.
knowledge/clients/{client}/transcripts/)
Agent behavior: Use the Granola MCP tools to query or fetch meeting content. Prefer query_granola_meetings for natural language questions; use get_meeting_transcript only when the full verbatim transcript is required.
3. Installation & Configuration
Already configured in brainforge-platform
The brainforge-platform repo includes .cursor/mcp.json with the Granola MCP. When you open this repo as your Cursor workspace, the MCP is loaded automatically.
Location: .cursor/mcp.json (at repo root)
{
"mcpServers": {
"brainforge-google": {
"url": "https://google-workspace-mcp-production-bab7.up.railway.app/mcp",
"headers": {}
},
"figma": {
"url": "https://mcp.figma.com/mcp",
"headers": {}
},
"granola": {
"url": "https://mcp.granola.ai/mcp",
"headers": {}
},
"linear": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.linear.app/mcp"]
}
}
}When using a different workspace
If you open a different folder as your workspace, add the Granola entry to your user-level or workspace-level MCP config:
- User-level:
~/.cursor/mcp.json - Workspace-level:
.cursor/mcp.jsonat the root of the folder you opened
Merge the granola entry into your existing mcpServers object.
Reload after config changes
After editing mcp.json, reload the window: Command Palette → “Developer: Reload Window”.
4. OAuth Authentication
Granola MCP requires OAuth sign-in before tools are available.
- When you first use a Granola tool, Cursor may prompt you to connect.
- Complete the OAuth flow in the Cursor UI (e.g. “Connect” or “Sign in” for Granola).
- Authentication persists across sessions.
- If tools return “Server granola not found” or auth errors, ensure OAuth is completed and Cursor has been restarted after config changes.
5. Available Tools
| Tool | Description | When to Use |
|---|---|---|
query_granola_meetings | Natural language query over meeting notes | Preferred for open-ended questions about meeting content, action items, decisions |
list_meetings | List meetings by time range | When you need meeting IDs and metadata for a date range |
get_meetings | Get detailed meeting info (summary, participants, metadata) | When you need summaries without full transcripts; supports up to 10 meeting IDs |
get_meeting_transcript | Get full verbatim transcript by meeting ID | Use sparingly — only when exact quotes or full transcript are required; subject to strict rate limits |
6. Critical Limitations & Best Practices
Rate limits (important)
The Granola API enforces strict rate limiting, especially on get_meeting_transcript:
- Rate limit errors occur frequently when fetching multiple transcripts in quick succession.
- Best practice: Fetch transcripts sequentially with 30–60 second delays between requests.
- Avoid: Parallel or batched
get_meeting_transcriptcalls — they will trigger rate limits.
Reliable delay (use between transcript fetches):
python3 -c "import time; time.sleep(60)"If you hit “Rate limit exceeded”, wait 60–120 seconds before retrying.
When to use which tool
| Need | Use | Avoid |
|---|---|---|
| ”What was decided in LMNT calls this week?” | query_granola_meetings | get_meeting_transcript for every meeting |
| List meetings for a client in a date range | list_meetings | — |
| Meeting summary + participants | get_meetings | get_meeting_transcript |
| Full verbatim transcript for vault storage | get_meeting_transcript (one at a time, with delays) | Parallel fetches |
Rule of thumb: Use query_granola_meetings or get_meetings when a summary is sufficient. Reserve get_meeting_transcript for cases where the full transcript is required (e.g. saving to vault).
Fetching multiple transcripts for vault
When exporting many transcripts (e.g. all LMNT meetings for a date range):
- Use
list_meetingsto get meeting IDs. - Fetch transcripts one at a time with
get_meeting_transcript. - Insert a 60-second delay between each fetch.
- Save each transcript to the vault before fetching the next.
7. Usage Examples
Natural language query
"What were the action items from LMNT calls this week?"
"What was discussed about wholesale revenue in recent LMNT meetings?"
Use query_granola_meetings — it returns tailored responses with citation links to source notes.
List meetings by date range
Use list_meetings with time_range: this_week, last_week, last_30_days, or custom (with custom_start and custom_end in ISO format).
Get meeting summary (no full transcript)
Use get_meetings with an array of meeting IDs (max 10). Returns summary, participants, and metadata.
Fetch full transcript (with rate limit handling)
- Get meeting ID from
list_meetings. - Call
get_meeting_transcriptwith that ID. - If rate limited, wait 60–120 seconds, then retry.
- Save transcript to vault with consistent naming:
YYYY-MM-DD_{slug}_{meeting_id_short}.md.
8. Troubleshooting
”Rate limit exceeded”
- Wait 60–120 seconds before retrying.
- Ensure you are not making parallel transcript requests.
- Prefer
query_granola_meetingsorget_meetingswhen a summary is enough.
”Server granola not found”
- Verify
granolais in.cursor/mcp.json(or your user/workspace config). - Reload Cursor: Developer: Reload Window.
- Ensure you opened the workspace that contains the config.
OAuth / authentication issues
- Complete the OAuth flow in Cursor (connect Granola when prompted).
- Restart Cursor after connecting.
- Check Cursor Settings → MCP for Granola connection status.
Tools not appearing
- Confirm you opened brainforge-platform (or a workspace with Granola in
mcp.json). - Reload the window after config changes.
- Check that no other MCP config is overriding the Granola entry.
9. Reference
- Granola MCP URL:
https://mcp.granola.ai/mcp - Granola notes:
https://notes.granola.ai/(web UI) - Config location: mcp.json (repo root)