Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to Granola

Scalekit connector
Open markdown

The Granola connector lets your AI agent act in each user's Granola account. Each user connects their own Granola access token once, and Scalekit sends it with every call, so your agent never handles credentials. Your agent calls the Granola API as the user through Scalekit's API proxy.

Tools
9
What they doRead · write · destructive
6 · 2 · 16 read2 write1 destructive
Users sign in with

What you can do

  • Read meeting notes: list and fetch notes with titles, attendees, calendar details, and AI-generated summaries
  • Get transcripts: pull the full transcript of any meeting, paging through long conversations
  • Browse folders: list workspace folders and use them to filter notes
  • Manage webhooks: create, update, list, and delete endpoints that receive events when notes are generated or edited
  • Review audit events: list workspace audit events filtered by action and date range

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. 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>
  3. Create the Granola connection

    In AgentKit > Connections, create a Granola connection. The name you give it is the connection_name your code passes. See Configure connections.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'granola'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Granola:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'granola_audit_events_list',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user opens the link once and enters their Granola credentials there. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • granola_audit_events_listList paginated audit events for the Granola workspace, optionally filtered by action (exact match or prefix) and a date range.Read-only

    List Audit Events

    List paginated audit events for the Granola workspace, optionally filtered by action (exact match or prefix) and a date range.

    Inputs

    actionstring
    Filter by an exact action name or prefix, e.g. 'note.' to match all note-related actions.
    cursorstring
    Pagination cursor from the previous response to fetch the next page of results.
    occurred_afterstring
    Only return events that occurred on or after this date. ISO 8601 format (e.g., 2024-01-01 or 2024-01-01T00:00:00Z).
    occurred_beforestring
    Only return events that occurred before this date. ISO 8601 format (e.g., 2024-12-31 or 2024-12-31T23:59:59Z).
    page_sizeinteger
    Number of audit events to return per page (1-30). Defaults to 10.
  • granola_folders_listList all folders accessible in the Granola workspace, with pagination.Read-only

    List Folders

    List all folders accessible in the Granola workspace, with pagination. Use folder IDs from this tool to filter notes or scope webhook endpoints.

    Inputs

    cursorstring
    Pagination cursor from the previous response to fetch the next page of results.
    page_sizeinteger
    Number of folders to return per page (1-30). Defaults to 10.
  • granola_note_getRetrieve a single Granola meeting note by its ID.Read-only

    Get Note

    Retrieve a single Granola meeting note by its ID. Returns the full note including title, owner, calendar event details, attendees, folder memberships, and AI-generated summary. Optionally include the full transcript with speaker labels and timestamps.

    Inputs

    note_idstringrequired
    The unique identifier of the note to retrieve. Format: not_XXXXXXXXXXXXXX.
    includestring
    Pass 'transcript' to include the full meeting transcript with speaker source and timestamps.one of transcript
  • granola_note_transcript_getRetrieve the full meeting transcript for a Granola note, paginated with a cursor.Read-only

    Get Note Transcript

    Retrieve the full meeting transcript for a Granola note, paginated with a cursor. Use this instead of granola_note_get's include=transcript option when a transcript is too large to inline, or when you need to page through a long transcript explicitly.

    Inputs

    note_idstringrequired
    The unique identifier of the note whose transcript should be retrieved. Format: not_XXXXXXXXXXXXXX.
    cursorstring
    Pagination cursor from a previous response to fetch the next page of transcript entries.
    page_sizeinteger
    Number of transcript entries to return per page (1-100). Defaults to 50.
  • granola_notes_listList all accessible meeting notes in the Granola workspace with pagination and date filtering.Read-only

    List Notes

    List all accessible meeting notes in the Granola workspace with pagination and date filtering. Returns note IDs, titles, owners, calendar event details, attendees, folder memberships, and AI-generated summaries. Only notes shared in workspace-wide folders are accessible.

    Inputs

    created_afterstring
    Filter notes created on or after this date. ISO 8601 format (e.g., 2024-01-01 or 2024-01-01T00:00:00Z).
    created_beforestring
    Filter notes created before this date. ISO 8601 format (e.g., 2024-12-31 or 2024-12-31T23:59:59Z).
    cursorstring
    Pagination cursor from the previous response to fetch the next page of results.
    page_sizeinteger
    Number of notes to return per page (1–30). Defaults to 10.
    updated_afterstring
    Filter notes updated after this date. ISO 8601 format (e.g., 2024-06-01 or 2024-06-01T00:00:00Z).
  • granola_webhook_endpoints_listList all webhook endpoints configured for the Granola workspace, including their URL, scopes, subscribed event types, and enabled state.Read-only

    List Webhook Endpoints

    List all webhook endpoints configured for the Granola workspace, including their URL, scopes, subscribed event types, and enabled state.

    Inputs

    This tool takes no inputs.

  • granola_webhook_endpoint_createRegister a new HTTPS webhook endpoint to receive Granola event deliveries (e.g.Write

    Create Webhook Endpoint

    Register a new HTTPS webhook endpoint to receive Granola event deliveries (e.g. note generated or edited). Returns a signing_secret used to verify delivered payloads.

    Inputs

    scopesarrayrequired
    Which note visibility scopes this endpoint should receive events for. At least one of: personal, public, workspace.
    urlstringrequired
    The publicly reachable HTTPS URL that Granola should deliver events to.
    eventsarray
    Which event types to subscribe to. If omitted, defaults to all event types. At least one of: note.access_granted, note.edited, note.generated.
    folder_idsarray
    Restrict delivered events to notes in these folders only (up to 100 folder IDs). If omitted, events are not filtered by folder.
  • granola_webhook_endpoint_updateUpdate an existing Granola webhook endpoint's URL, scopes, subscribed events, folder filter, or enabled state.Write

    Update Webhook Endpoint

    Update an existing Granola webhook endpoint's URL, scopes, subscribed events, folder filter, or enabled state. Only the fields provided are changed.

    • Idempotent

    Inputs

    webhook_endpoint_idstringrequired
    The unique identifier of the webhook endpoint to update. Format: whe_XXXXXXXXXXXXXX.
    enabledboolean
    Enable or disable this webhook endpoint without deleting it.
    eventsarray
    New set of event types to subscribe to. At least one of: note.access_granted, note.edited, note.generated.
    folder_idsarray
    New list of folder IDs to restrict delivered events to (up to 100). Pass an empty array to remove the folder filter entirely.
    scopesarray
    New set of note visibility scopes this endpoint should receive events for. At least one of: personal, public, workspace.
    urlstring
    New publicly reachable HTTPS URL for Granola to deliver events to.