Granola MCP connector
OAuth 2.0 aiautomationcommunicationConnect to Granola MCP using OAuth 2.1 with MCP discovery and dynamic client registration.
Granola MCP connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret> -
Authorize and make your first call
Section titled “Authorize and make your first call”quickstart.ts 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.actionsconst connector = 'granolamcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Granola MCP:', link)process.stdout.write('Press Enter after authorizing...')await new Promise(r => process.stdin.once('data', r))// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'granolamcp_list_meetings',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "granolamcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Granola MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="granolamcp_list_meetings",connection_name=connection_name,identifier=identifier,)print(result)
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- Get meetings, meeting transcript — Get detailed meeting information for one or more Granola meetings by ID
- Query granola meetings — Query Granola about the user’s meetings using natural language
- List meetings — List the user’s Granola meeting notes within a time range
Common workflows
Section titled “Common workflows”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.
tool_response = actions.execute_tool( connection_name='granolamcp', identifier='user_123', tool_name="granolamcp_query_granola_meetings", tool_input={ "query": "What decisions and follow-ups came out of last week's customer calls?" },)print("Granola response:", tool_response)const toolResponse = await actions.executeTool({ connector: 'granolamcp', identifier: 'user_123', toolName: 'granolamcp_query_granola_meetings', 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”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
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.
Use this when the user needs exact quotes, specific wording, or wants to review what was literally said in a meeting. For summarized content or action items, use query_granola_meetings or list_meetings/get_meetings instead. 3 params
Get the full transcript for a specific Granola meeting by ID. Returns only the verbatim transcript content, not summaries or notes. Use this when the user needs exact quotes, specific wording, or wants to review what was literally said in a meeting. For summarized content or action items, use query_granola_meetings or list_meetings/get_meetings instead.
meeting_id string required Meeting UUID schema_version string optional Optional schema version to use for tool execution tool_version string optional Optional tool version to use for tool execution granolamcp_get_meetings
#
Get detailed meeting information for one or more Granola meetings by ID. Returns private notes, AI-generated summary, attendees, and metadata.
Use this when you already have specific meeting IDs (e.g. from list_meetings results). For open-ended questions about meeting content, use query_granola_meetings instead. 3 params
Get detailed meeting information for one or more Granola meetings by ID. Returns private notes, AI-generated summary, attendees, and metadata. Use this when you already have specific meeting IDs (e.g. from list_meetings results). For open-ended questions about meeting content, use query_granola_meetings instead.
meeting_ids array required Array of meeting UUIDs (max 10) schema_version string optional Optional schema version to use for tool execution tool_version string optional Optional tool version to use for tool execution granolamcp_list_meetings
#
List the user's Granola meeting notes within a time range. Returns meeting titles and metadata.
IMPORTANT: For short-term questions about recent meeting details, prefer using query_granola_meetings instead.
When to use:
- User asks to list their meetings
- User asks about action items, decisions, or summaries from meetings over a longer or specific date range
- User asks about content from their meeting transcripts
- User references 'Granola notes' or 'meeting notes' or 'transcripts'
When NOT to use:
- User is asking about upcoming calendar events or scheduling
- User wants to create/modify calendar invites
Use get_meetings to retrieve detailed meeting content after identifying relevant meetings. 5 params
List the user's Granola meeting notes within a time range. Returns meeting titles and metadata. IMPORTANT: For short-term questions about recent meeting details, prefer using query_granola_meetings instead. When to use: - User asks to list their meetings - User asks about action items, decisions, or summaries from meetings over a longer or specific date range - User asks about content from their meeting transcripts - User references 'Granola notes' or 'meeting notes' or 'transcripts' When NOT to use: - User is asking about upcoming calendar events or scheduling - User wants to create/modify calendar invites Use get_meetings to retrieve detailed meeting content after identifying relevant meetings.
custom_end string optional ISO date for custom range end (required if time_range is 'custom') custom_start string optional ISO date for custom range start (required if time_range is 'custom') schema_version string optional Optional schema version to use for tool execution time_range string optional Time range to query meetings from tool_version string optional Optional tool version to use for tool execution granolamcp_query_granola_meetings
#
Query Granola about the user's meetings using natural language. Returns a tailored response with inline citation links in mark (e.g. [[0]](url)) that reference source meeting notes.
IMPORTANT: The response includes numbered citation links to specific Granola meeting notes. These citations MUST be preserved in your response to the user — they provide transparency and allow the user to verify information by clicking through to the original notes.
When to use:
- User asks about what was discussed, decided, or action-items from meetings
- User asks about follow-ups, todos, or commitments from recent meetings
- User references 'Granola notes' or 'meeting notes'
When NOT to use:
- User is asking about calendar scheduling or upcoming events
- User explicitly asks for a specific meeting by ID (use get_meetings instead)
Prioritize using query_granola_meetings over list_meetings/get_meetings for open-ended or natural language queries about meeting content. 4 params
Query Granola about the user's meetings using natural language. Returns a tailored response with inline citation links in mark (e.g. [[0]](url)) that reference source meeting notes. IMPORTANT: The response includes numbered citation links to specific Granola meeting notes. These citations MUST be preserved in your response to the user — they provide transparency and allow the user to verify information by clicking through to the original notes. When to use: - User asks about what was discussed, decided, or action-items from meetings - User asks about follow-ups, todos, or commitments from recent meetings - User references 'Granola notes' or 'meeting notes' When NOT to use: - User is asking about calendar scheduling or upcoming events - User explicitly asks for a specific meeting by ID (use get_meetings instead) Prioritize using query_granola_meetings over list_meetings/get_meetings for open-ended or natural language queries about meeting content.
query string required The query to run on Granola meeting notes document_ids array optional Optional list of specific meeting IDs to limit context to schema_version string optional Optional schema version to use for tool execution tool_version string optional Optional tool version to use for tool execution