Plugin ID: granola | Auth: API Key (Bearer token, grn_ prefix)
Two distinct auth provider ids and two parallel sets of tools, so the model can pick personal vs team based on the user’s prompt without guessing which credential to use:
| Auth provider id | Connected via | Tools |
|---|
granola-personal | Dashboard “Granola (Personal)” tile (Personal tools section) | granola.personal.notes.list, granola.personal.notes.get |
granola-enterprise | Dashboard “Granola (Enterprise)” tile (Team tools section) | granola.enterprise.notes.list, granola.enterprise.notes.get |
Both flavors call the same public API (https://public-api.granola.ai/v1/notes) — the difference is which Bearer token gets used at request time. Notes only appear in the response once they have a completed AI summary and transcript.
Tool descriptions are written so the model can disambiguate from natural-language prompts. Personal tools say “your own personal Granola account”; enterprise tools say “your team’s shared Granola Enterprise workspace (notes from teammates included)”. search_tools will return only the scopes the user has connected.
Personal scope
granola.personal.notes.list
Name: List Personal Meeting Notes
Lists meeting notes from the user’s own Granola account, paginated.
| Parameter | Type | Required | Default | Description |
|---|
created_after | string | No | — | ISO-8601 datetime to filter notes created after this time |
limit | integer | No | 25 | Max notes to return |
cursor | string | No | — | Pagination cursor from a previous response |
Output:
{
"notes": [
{
"id": "not_abc123",
"title": "Weekly Standup",
"summary": "Discussed sprint progress and blockers...",
"created_at": "2026-04-20T10:00:00Z",
"updated_at": "2026-04-20T10:30:00Z"
}
],
"next_cursor": "cursor_xyz"
}
granola.personal.notes.get
Name: Get Personal Meeting Note
Fetch a single note by ID. Setting include_transcript: true returns the full transcript alongside the summary.
| Parameter | Type | Required | Default | Description |
|---|
noteId | string | Yes | — | Note ID (prefixed with not_) |
include_transcript | boolean | No | false | Include the full meeting transcript |
Output:
{
"id": "not_abc123",
"title": "Weekly Standup",
"summary": "Discussed sprint progress and blockers...",
"transcript": "Speaker 1: Let's start with updates...",
"created_at": "2026-04-20T10:00:00Z",
"updated_at": "2026-04-20T10:30:00Z"
}
Enterprise scope
granola.enterprise.notes.list and granola.enterprise.notes.get have identical schemas to their personal counterparts. The only difference is the credential used (Granola Enterprise API key vs personal key) and the resulting visibility — enterprise sees notes across the team’s workspace.