Granola MCP
Connect to Granola MCP to search meeting notes, inspect meeting details, and retrieve transcripts from Granola's official MCP server.
Connect to Granola MCP to search meeting notes, inspect detailed meeting metadata, and retrieve verbatim meeting transcripts from Granola’s official MCP server.
Supports authentication: OAuth 2.1
What you can build with this connector
| Use case | Tools involved |
|---|---|
| Ask natural-language questions across meeting notes | granolamcp_query_granola_meetings |
| List meetings for a date range | granolamcp_list_meetings |
| Fetch full details for specific meetings | granolamcp_get_meetings |
| Retrieve exact spoken wording from a meeting | granolamcp_get_meeting_transcript |
Key concepts:
- Official MCP server: This connector uses Granola’s hosted MCP endpoint at
https://mcp.granola.ai/mcp. - OAuth with browser sign-in: Authentication uses Granola’s OAuth flow with PKCE and dynamic client registration.
- Read-only access: The available tools retrieve meeting notes, summaries, metadata, and transcripts. They do not create or modify meetings.
- Query first for open-ended questions: Prefer
granolamcp_query_granola_meetingswhen the user asks broad questions about meeting content or decisions.
Set up the agent connector
Section titled “Set up the agent connector”- In your agent connector settings, choose Granola MCP.
- Start the connection flow and sign in to your Granola account in the browser.
- Approve access to Granola’s official MCP server.
- Return to the app once the OAuth flow completes.
Connect a user’s Granola account and query Granola’s official MCP server through Scalekit. Scalekit handles the OAuth flow, token storage, and tool execution automatically.
Granola MCP is primarily used through Scalekit tools. Use scalekit_client.actions.execute_tool() to search meeting notes, list meetings, fetch meeting details, and retrieve transcripts without calling the upstream MCP server directly.
Tool Calling
Use this connector when you want an agent to work with Granola meeting content, including summaries, notes, attendees, and transcripts.
- Use
granolamcp_query_granola_meetingsfor natural-language questions such as decisions, action items, or follow-ups from past meetings. - Use
granolamcp_list_meetingsto find meetings in a time window before drilling into specific meeting IDs. - Use
granolamcp_get_meetingswhen you already know the Granola meeting IDs and need richer metadata or notes. - Use
granolamcp_get_meeting_transcriptwhen exact wording matters and you need the verbatim transcript instead of summarized notes.
import osfrom scalekit.client import ScalekitClient
scalekit_client = ScalekitClient( client_id=os.environ["SCALEKIT_CLIENT_ID"], client_secret=os.environ["SCALEKIT_CLIENT_SECRET"], env_url=os.environ["SCALEKIT_ENV_URL"],)
auth_link = scalekit_client.actions.get_authorization_link( connection_name="granolamcp", identifier="user_123",)print("Authorize Granola MCP:", auth_link.link)input("Press Enter after authorizing...")
connected_account = scalekit_client.actions.get_or_create_connected_account( connection_name="granolamcp", identifier="user_123",)
tool_response = scalekit_client.actions.execute_tool( tool_name="granolamcp_query_granola_meetings", connected_account_id=connected_account.connected_account.id, tool_input={ "query": "What decisions and follow-ups came out of last week's customer calls?" },)print("Granola response:", tool_response)import { ScalekitClient } from '@scalekit-sdk/node';import 'dotenv/config';
const scalekit = new ScalekitClient( process.env.SCALEKIT_ENV_URL!, process.env.SCALEKIT_CLIENT_ID!, process.env.SCALEKIT_CLIENT_SECRET!);const actions = scalekit.actions;
const { link } = await actions.getAuthorizationLink({ connectionName: 'granolamcp', identifier: 'user_123',});console.log('Authorize Granola MCP:', link);process.stdout.write('Press Enter after authorizing...');await new Promise((resolve) => process.stdin.once('data', resolve));
const connectedAccount = await actions.getOrCreateConnectedAccount({ connectionName: 'granolamcp', identifier: 'user_123',});
const toolResponse = await actions.executeTool({ toolName: 'granolamcp_query_granola_meetings', connectedAccountId: connectedAccount?.id, toolInput: { query: "What decisions and follow-ups came out of last week's customer calls?", },});console.log('Granola response:', toolResponse.data);Tool list
Section titled “Tool list”granolamcp_get_meeting_transcript
Section titled “granolamcp_get_meeting_transcript”Get the full transcript for a specific Granola meeting by ID. Returns only the verbatim transcript content, not summaries or notes.
| Name | Type | Required | Description |
|---|---|---|---|
meeting_id | string | Yes | Meeting UUID |
schema_version | string | No | Optional schema version to use for tool execution |
tool_version | string | No | Optional tool version to use for tool execution |
granolamcp_get_meetings
Section titled “granolamcp_get_meetings”Get detailed meeting information for one or more Granola meetings by ID. Returns private notes, AI-generated summary, attendees, and metadata.
| Name | Type | Required | Description |
|---|---|---|---|
meeting_ids | array<string> | Yes | Array of meeting UUIDs (max 10) |
schema_version | string | No | Optional schema version to use for tool execution |
tool_version | string | No | Optional tool version to use for tool execution |
granolamcp_list_meetings
Section titled “granolamcp_list_meetings”List the user’s Granola meeting notes within a time range. Returns meeting titles and metadata.
| Name | Type | Required | Description |
|---|---|---|---|
custom_end | string | No | ISO date for custom range end. Required if time_range is custom. |
custom_start | string | No | ISO date for custom range start. Required if time_range is custom. |
schema_version | string | No | Optional schema version to use for tool execution |
time_range | string | No | Time range to query meetings from. One of this_week, last_week, last_30_days, or custom. Defaults to last_30_days. |
tool_version | string | No | Optional tool version to use for tool execution |
granolamcp_query_granola_meetings
Section titled “granolamcp_query_granola_meetings”Query Granola about the user’s meetings using natural language. Returns a tailored response with inline citations that reference source meeting notes.
| Name | Type | Required | Description |
|---|---|---|---|
document_ids | array<string> | No | Optional list of specific meeting IDs to limit context to |
query | string | Yes | The query to run on Granola meeting notes |
schema_version | string | No | Optional schema version to use for tool execution |
tool_version | string | No | Optional tool version to use for tool execution |