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.json at 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.

  1. When you first use a Granola tool, Cursor may prompt you to connect.
  2. Complete the OAuth flow in the Cursor UI (e.g. “Connect” or “Sign in” for Granola).
  3. Authentication persists across sessions.
  4. 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

ToolDescriptionWhen to Use
query_granola_meetingsNatural language query over meeting notesPreferred for open-ended questions about meeting content, action items, decisions
list_meetingsList meetings by time rangeWhen you need meeting IDs and metadata for a date range
get_meetingsGet detailed meeting info (summary, participants, metadata)When you need summaries without full transcripts; supports up to 10 meeting IDs
get_meeting_transcriptGet full verbatim transcript by meeting IDUse 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_transcript calls — 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

NeedUseAvoid
”What was decided in LMNT calls this week?”query_granola_meetingsget_meeting_transcript for every meeting
List meetings for a client in a date rangelist_meetings
Meeting summary + participantsget_meetingsget_meeting_transcript
Full verbatim transcript for vault storageget_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):

  1. Use list_meetings to get meeting IDs.
  2. Fetch transcripts one at a time with get_meeting_transcript.
  3. Insert a 60-second delay between each fetch.
  4. 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)

  1. Get meeting ID from list_meetings.
  2. Call get_meeting_transcript with that ID.
  3. If rate limited, wait 60–120 seconds, then retry.
  4. 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_meetings or get_meetings when a summary is enough.

”Server granola not found”

  • Verify granola is 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)