Granola MCP
Vendor MCP6 toolsOAuth 2.1/DCRAIAutomationCommunicationTranscriptionConnect 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_get_account_info',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_get_account_info",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:
- List meeting folders, meetings — List the user’s Granola meeting folders
- Get account info, meetings, meeting transcript — Get the email, active workspace, and effective note-access scopes for the Granola account currently connected to this MCP session
- Query granola meetings — Query Granola about the user’s meetings using natural language
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_account_info#Get the email, active workspace, and effective note-access scopes for the Granola account currently connected to this MCP session.
When to use:
- User asks 'who am I signed in as?', 'which Granola account is this?', or 'what's my email?'
- User suspects they connected the wrong Granola account
- Meeting results may be incomplete or empty because of the user's Granola plan or workspace MCP access controls
- Before performing actions, to confirm identity if the user references a specific account
When scope-based access controls are active, mcp_note_access.scopes contains the note categories this connection can search:
- personal: notes the connected user owns, notes shared directly with them, and notes accessible through private folders
- public: notes accessible through workspace-visible Team Space folders
- Both scopes means both categories can be searched. These scopes describe access, not who captured or participated in a meeting.0 params
Get the email, active workspace, and effective note-access scopes for the Granola account currently connected to this MCP session. When to use: - User asks 'who am I signed in as?', 'which Granola account is this?', or 'what's my email?' - User suspects they connected the wrong Granola account - Meeting results may be incomplete or empty because of the user's Granola plan or workspace MCP access controls - Before performing actions, to confirm identity if the user references a specific account When scope-based access controls are active, mcp_note_access.scopes contains the note categories this connection can search: - personal: notes the connected user owns, notes shared directly with them, and notes accessible through private folders - public: notes accessible through workspace-visible Team Space folders - Both scopes means both categories can be searched. These scopes describe access, not who captured or participated in a meeting.
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_idstringrequiredMeeting UUIDschema_versionstringoptionalOptional schema version to use for tool executiontool_versionstringoptionalOptional tool version to use for tool executiongranolamcp_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_idsarrayrequiredArray of meeting UUIDs (max 10)schema_versionstringoptionalOptional schema version to use for tool executiontool_versionstringoptionalOptional tool version to use for tool executiongranolamcp_list_meeting_folders#List the user's Granola meeting folders. Returns folder ID, title, description, and note count including nested folders.
When to use:
- User asks about their folders or wants to browse meetings by folder
- User wants to narrow down meeting searches to a specific folder
Use the returned folder IDs with list_meetings (folder_id parameter) to list meetings within a specific folder.0 params
List the user's Granola meeting folders. Returns folder ID, title, description, and note count including nested folders. When to use: - User asks about their folders or wants to browse meetings by folder - User wants to narrow down meeting searches to a specific folder Use the returned folder IDs with list_meetings (folder_id parameter) to list meetings within a specific folder.
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
Filtering:
- Omit workspace_only and involvement to return every meeting the user is allowed to access
- For 'my meetings' or meetings the user was involved in, set both involvement conditions to true; true conditions combine using OR
- Set captured_by_me to true for meetings whose Granola notes the user captured, or false to exclude them
- Set listed_as_participant to true for meetings where the user is a known participant, or false to exclude them
- False involvement conditions are exclusions and combine with the positive conditions using AND; omit a condition to ignore it
- For Team Space or public workspace meetings, set workspace_only to true
- workspace_only and involvement combine using AND
Use get_meetings to retrieve detailed meeting content after identifying relevant meetings.
Use list_meeting_folders to discover folder IDs, then pass a folder_id to list meetings within a specific folder.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 Filtering: - Omit workspace_only and involvement to return every meeting the user is allowed to access - For 'my meetings' or meetings the user was involved in, set both involvement conditions to true; true conditions combine using OR - Set captured_by_me to true for meetings whose Granola notes the user captured, or false to exclude them - Set listed_as_participant to true for meetings where the user is a known participant, or false to exclude them - False involvement conditions are exclusions and combine with the positive conditions using AND; omit a condition to ignore it - For Team Space or public workspace meetings, set workspace_only to true - workspace_only and involvement combine using AND Use get_meetings to retrieve detailed meeting content after identifying relevant meetings. Use list_meeting_folders to discover folder IDs, then pass a folder_id to list meetings within a specific folder.
involvementobjectoptionalOptional involvement filter. Conditions set to true form an OR inclusion group. Conditions set to false are exclusions applied using AND. Omitted conditions are ignored.schema_versionstringoptionalOptional schema version to use for tool executiontime_rangestringoptionalTime range to query meetings fromtool_versionstringoptionalOptional tool version to use for tool executionworkspace_onlybooleanoptionalSet to true only when the user explicitly asks for Team Space, public workspace, or workspace-visible meetings. Omit to search every meeting the user is allowed to access.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.
querystringrequiredThe query to run on Granola meeting notesdocument_idsarrayoptionalOptional list of specific meeting IDs to limit context toschema_versionstringoptionalOptional schema version to use for tool executiontool_versionstringoptionalOptional tool version to use for tool execution