granola-mcp
Allows interaction with Discord API, enabling management of servers, channels, and messages via bot tokens.
Allows interaction with GitHub API, enabling management of repositories, issues, pull requests, and more.
Allows interaction with Gmail API, enabling sending, reading, and managing emails.
Allows interaction with Google Calendar API, enabling creation, reading, updating, and deletion of calendar events.
Allows interaction with Linear API, enabling management of issues, projects, and teams.
Allows interaction with Slack API, enabling sending messages, managing channels, and more.
Allows interaction with Spotify API, enabling control of playback, playlist management, and more.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@granola-mcpcreate a new MCP project with API key auth"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
granola-mcp
A Granola meeting notes MCP server built on the Dedalus platform.
Search through meeting history, retrieve meeting notes and transcripts, and extract business insights — all through AI assistants using the Model Context Protocol.
Prerequisites
Python 3.11+
A Granola account with Business or Enterprise plan
A Granola Personal API key
A Dedalus account
Quick Start
1. Create a Granola API Key
Open the Granola desktop app.
Go to Settings → API.
Click Create new key.
Copy the key (it starts with
grn_).
Note: Personal API keys require a Granola Business or Enterprise plan.
2. Configure Environment Variables
cp .env.example .envFill in your .env:
# Granola API Key
GRANOLA_API_KEY=grn_your-api-key-here
# Dedalus Platform (for the sample client)
DEDALUS_API_KEY=dsk-live-your-api-key
DEDALUS_API_URL=https://api.dedaluslabs.ai
DEDALUS_AS_URL=https://as.dedaluslabs.ai
# After deploying, set this to your slug
GRANOLA_MCP_SLUG=nickyhec/granola-mcp3. Deploy to Dedalus
Log in to the Dedalus Dashboard.
Go to Add Server and connect this GitHub repository.
In the server configuration, enter the
GRANOLA_API_KEYfrom your.env.Deploy. The dashboard will show your server slug (e.g.
nickyhec/granola-mcp).
4. Install Dependencies
uv sync5. Run the Client
uv run src/_client.py=== Granola MCP Agent ===
Server: nickyhec/granola-mcp
Type 'quit' or 'exit' to end the session.
You: What meetings did I have this week?
Assistant: ...Environment Variables
Variable | Description |
| Your Granola API key ( |
| Your Dedalus API key ( |
| API base URL (default: |
| Authorization server URL (default: |
| Your deployed server slug (e.g. |
Running the Server Locally
uv run src/main.pyThis starts the MCP server on port 8080. The _client.py connects through
Dedalus (not localhost). Use this for local testing with a direct MCP client.
Lint & Typecheck
uv run --group lint ruff format src/
uv run --group lint ruff check src/ --fix
uv run --group lint ty check src/Available Tools
Tool | Description |
| List note summaries with optional date filters and pagination |
| Get a full note by ID (owner, attendees, calendar event, summary) |
| Get a full note including its meeting transcript |
| Fetch notes from a recent time window (day, week, or month) |
| Filter notes by creation or update date ranges |
| Auto-paginate through all matching notes |
| Get meeting metadata plus summary text for concise responses |
| Get normalized transcript entries (speaker, text, timestamps) |
All tools are read-only — this server does not modify any data in Granola.
Tool Details
granola_list_notes
List note summaries with optional date filtering and cursor-based pagination.
Parameter | Type | Default | Description |
|
|
| ISO 8601 datetime upper bound |
|
|
| ISO 8601 datetime lower bound |
|
|
| Only notes updated after this time |
|
|
| Pagination cursor from previous response |
|
|
| Notes per page |
granola_get_note
Fetch a complete note by ID, including owner info, calendar event, attendees, and AI summary.
Parameter | Type | Description |
|
| Note ID (e.g. |
granola_get_note_with_transcript
Same as granola_get_note but also includes the full meeting transcript.
Parameter | Type | Description |
|
| Note ID (e.g. |
granola_get_recent_notes
Convenience wrapper that fetches notes from a relative time window.
Parameter | Type | Default | Description |
|
|
| Time window: |
|
|
| Notes per page |
granola_search_notes_by_date
Filter notes by specific date ranges. At least one date filter is required.
Parameter | Type | Default | Description |
|
|
| ISO 8601 datetime lower bound |
|
|
| ISO 8601 datetime upper bound |
|
|
| Only notes updated after this time |
|
|
| Notes per page |
granola_list_notes_paginated
Automatically follows cursor pagination to retrieve multiple pages of notes.
Parameter | Type | Default | Description |
|
|
| ISO 8601 datetime lower bound |
|
|
| ISO 8601 datetime upper bound |
|
|
| Only notes updated after this time |
|
|
| Maximum pages to fetch |
|
|
| Notes per page |
granola_get_meeting_summary
Returns just the meeting metadata and summary fields — no transcript or heavy content.
Parameter | Type | Description |
|
| Note ID (e.g. |
granola_get_transcript_text
Returns normalized transcript entries with speaker identification.
Parameter | Type | Description |
|
| Note ID (e.g. |
Architecture
Granola provides a REST API at https://public-api.granola.ai. The request
layer dispatches calls through the Dedalus HTTP enclave, which injects API
Key credentials transparently.
src/
├── granola/
│ ├── config.py # Connection definition (API Key / Bearer token)
│ ├── request.py # REST dispatch + coercion helpers
│ └── types.py # Typed dataclass models
├── tools/
│ ├── notes.py # Core note retrieval (list, get, get with transcript)
│ ├── search.py # Date filtering + pagination helpers
│ └── summaries.py # Summary + transcript extraction
├── server.py # MCPServer setup
├── main.py # Server entry point
└── _client.py # Interactive agent client (DAuth)Rate Limits
Granola enforces the following rate limits:
Burst capacity: 25 requests
Sustained rate: 5 requests/second (300/minute)
Rate limits apply per-workspace for Enterprise API keys and per-user for Personal API keys. The server does not currently implement automatic retry logic — if you hit rate limits, wait and retry.
Troubleshooting
"Failed to fetch note" / 404 errors
The Granola API only returns notes that have completed AI processing (summary and transcript generation). Notes that are still being processed or were never summarized will return 404.
API key not working
Verify you have a Business or Enterprise Granola plan (required for Personal API keys).
Check that the key starts with
grn_.Enterprise admins can disable Personal API key creation — check with your workspace admin.
Transcript format differences
Transcript format varies by recording platform:
macOS: Speaker
sourceis"microphone"(local) or"speaker"(remote audio).iOS: Speaker
sourceis"microphone"with optionaldiarization_labelfor speaker identification (e.g."Speaker A","Speaker B").
"Granola MCP server is currently unavailable"
The client routes through the Dedalus platform by slug. Common causes:
Server not deployed — deploy from the Dedalus Dashboard first.
Wrong slug — verify
GRANOLA_MCP_SLUGmatches your deployment.
Notes
The API only returns notes with completed AI processing (summary + transcript).
Personal API keys give access to notes you own, notes shared with you, and notes in shared private folders.
Enterprise API keys give access to all notes in the Team space.
Two API key types exist: Personal (user-scoped) and Enterprise (workspace-scoped).
API keys appear to be long-lived with no expiry.
All tools are read-only — this server does not create or modify notes.
Authentication uses API Key (Bearer token) via DAuth. The raw key is never exposed to the server.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/NickyHeC/granola-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server