> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Fireflies MCP server

The Fireflies MCP connector routes your AI agent's tool calls to Fireflies's own MCP server through Scalekit. Each user signs in to Fireflies once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 20 tools.

**Authentication:** OAuth 2.1/DCR
**Categories:** Transcription, Productivity, Collaboration
**Tools:** 20: 14 read, 4 write, 2 destructive
**Users sign in with:** OAuth
**OAuth app:** Scalekit's or your own
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=FIREFLIESMCP)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Fireflies MCP connection

   In **AgentKit > Connections**, create a Fireflies MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   Scalekit credentials are available for Fireflies MCP server, so you don't need to register an OAuth app.

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   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 = 'firefliesmcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Fireflies MCP:', 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: 'firefliesmcp_fireflies_get_active_meetings',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "firefliesmcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Fireflies MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="firefliesmcp_fireflies_get_active_meetings",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'firefliesmcp_fireflies_fetch',
  toolInput: {
    id: '<id>',
  },
  connector: 'firefliesmcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="firefliesmcp_fireflies_fetch",
    tool_input={
        "id": "<id>",
    },
    connection_name="firefliesmcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `firefliesmcp_fireflies_fetch`

Fireflies Fetch · Read-only

Retrieve the full transcript, metadata, and insights for a single Fireflies meeting by its ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): The Fireflies transcript ID of the meeting to fetch. Get it from the search tool.

Example input: `{"id":"<id>"}`

### `firefliesmcp_fireflies_get_active_meetings`

Fireflies Get Active Meetings · Read-only

List currently active (in-progress) meetings, including title, organizer, meeting link, start/end time, privacy, and state.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `email` (`string`, optional): Optional email address to filter active meetings by a specific user. Admins can query any team member; regular users can only use their own email or omit this field.
- `states` (`array`, optional): Meeting states to filter by. Accepted values: active, paused. If omitted, returns meetings in both states.

Example input: `{}`

### `firefliesmcp_fireflies_get_analytics`

Fireflies Get Analytics · Read-only

Retrieve team and per-user meeting analytics for a given date range.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `endTime` (`string`, optional): End of the analytics date range (ISO 8601 datetime).
- `startTime` (`string`, optional): Start of the analytics date range (ISO 8601 datetime).

Example input: `{}`

### `firefliesmcp_fireflies_get_channel`

Fireflies Get Channel · Read-only

Retrieve details of a specific Fireflies channel (folder) by its ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `channelId` (`string`, required): The ID of the channel/folder. Get it from the list_channels tool.

Example input: `{"channelId":"<channelId>"}`

### `firefliesmcp_fireflies_get_rule_executions`

Fireflies Get Rule Executions · Read-only

Retrieve automation rule execution logs grouped by meeting, with optional filters.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cursor` (`string`, optional): Pagination cursor from the previous response to fetch the next page.
- `dateFrom` (`string`, optional): Filter rule executions on or after this date (YYYY-MM-DD).
- `dateTo` (`string`, optional): Filter rule executions on or before this date (YYYY-MM-DD).
- `limit` (`integer`, optional): Maximum number of items to return.
- `meetingId` (`string`, optional): The Fireflies transcript ID of the meeting. Get it from the search tool.
- `ruleId` (`string`, optional): The ID of the automation rule to filter by.

Example input: `{}`

### `firefliesmcp_fireflies_get_soundbites`

Fireflies Get Soundbites · Read-only

Fetch a list of soundbite clips, optionally filtered by meeting or ownership.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `format` (`string`, optional): Response format. Accepted values: json, text, toon. One of: `toon`, `json`, `text`. Default: `toon`.
- `limit` (`number`, optional): Maximum number of items to return.
- `mine` (`boolean`, optional): Set to true to return only your own items.
- `my_team` (`boolean`, optional): Set to true to include items from your team members.
- `skip` (`number`, optional): Number of items to skip for pagination.
- `transcript_id` (`string`, optional): Filter soundbites to a specific meeting transcript ID. Get it from the search tool.

Example input: `{}`

### `firefliesmcp_fireflies_get_summary`

Fireflies Get Summary · Read-only

Fetch the meeting summary (keywords, action items, overview) for a meeting by its ID. Excludes transcript content; use fireflies_get_transcript for that.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `transcriptId` (`string`, required): The Fireflies transcript ID of the meeting to fetch the summary for. Get it from the search tool.

Example input: `{"transcriptId":"<transcriptId>"}`

### `firefliesmcp_fireflies_get_transcript`

Fireflies Get Transcript · Read-only

Fetch the detailed transcript (sentences and speakers) for a meeting by its ID. Excludes summary data; use fireflies_get_summary for that.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `transcriptId` (`string`, required): The Fireflies transcript ID of the meeting to fetch. Get it from the search tool.

Example input: `{"transcriptId":"<transcriptId>"}`

### `firefliesmcp_fireflies_get_transcripts`

Fireflies Get Transcripts · Read-only

Query multiple meeting transcripts using filter properties (date range, keyword, organizer/participant email, channel, etc). Returns basic metadata and summary, not full transcript content.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `channelId` (`string`, optional): Optional channel/folder ID to only include meetings in that channel. Get it from the list_channels tool.
- `date` (`number`, optional): Deprecated date filter. Use fromDate/toDate instead.
- `format` (`string`, optional): Response format. Accepted values: json, text, toon. One of: `toon`, `json`, `text`. Default: `toon`.
- `fromDate` (`string`, optional): Optional ISO 8601 date string (e.g. 2023-01-01) to filter meetings from this date.
- `keyword` (`string`, optional): Optional keyword to search for in meeting content.
- `limit` (`number`, optional): Maximum number of items to return.
- `mine` (`boolean`, optional): Set to true to return only your own items.
- `organizers` (`array`, optional): Array of organizer email addresses to filter meetings.
- `participants` (`array`, optional): Array of participant email addresses to filter meetings.
- `scope` (`string`, optional): Scope for keyword search. Accepted values: title, sentences, all. One of: `title`, `sentences`, `all`.
- `skip` (`number`, optional): Number of items to skip for pagination.
- `toDate` (`string`, optional): Optional ISO 8601 date string (e.g. 2023-12-31) to filter meetings until this date.

Example input: `{}`

### `firefliesmcp_fireflies_get_user`

Fireflies Get User · Read-only

Fetch account details for a Fireflies user; defaults to the currently authenticated user.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `userId` (`string`, optional): The Fireflies user ID. Leave empty to fetch the currently authenticated user.

Example input: `{}`

### `firefliesmcp_fireflies_get_user_contacts`

Fireflies Get User Contacts · Read-only

Fetch the contact list for the authenticated Fireflies user.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `format` (`string`, optional): Response format. Accepted values: json, text, toon. One of: `toon`, `json`, `text`. Default: `toon`.

Example input: `{}`

### `firefliesmcp_fireflies_get_usergroups`

Fireflies Get Usergroups · Read-only

Fetch user groups for the authenticated user or their team.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mine` (`boolean`, optional): Set to true to return only your own items.

Example input: `{}`

### `firefliesmcp_fireflies_list_channels`

Fireflies List Channels · Read-only

List all channels (folders) available to the authenticated user.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `firefliesmcp_fireflies_search`

Fireflies Search · Read-only

Search meeting transcripts using keywords or Fireflies mini-grammar syntax.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `query` (`string`, required): Search query using the mini grammar syntax. Can be simple keywords or complex filters using the grammar.
- `format` (`string`, optional): Response format. Accepted values: json, text, toon. One of: `toon`, `json`, `text`. Default: `toon`.

Example input: `{"query":"<query>"}`

### `firefliesmcp_fireflies_create_soundbite`

Fireflies Create Soundbite · Write

Create a short audio or transcript clip from a meeting recording by specifying start and end times.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `endTime` (`number`, required): End time of the soundbite clip in seconds from the beginning of the recording.
- `startTime` (`number`, required): Start time of the soundbite clip in seconds from the beginning of the recording.
- `transcriptId` (`string`, required): The Fireflies transcript ID of the meeting to clip. Get it from the search or fetch tool.
- `mediaType` (`string`, optional): The media type for the soundbite clip (e.g. audio or video).
- `name` (`string`, optional): A short label for the soundbite clip.
- `privacies` (`array`, optional): Access levels for the soundbite. Pass as a JSON array via the SDK.
- `summary` (`string`, optional): A brief description of what this soundbite captures.

Example input: `{"endTime":1,"startTime":1,"transcriptId":"<transcriptId>"}`

### `firefliesmcp_fireflies_share_meeting`

Fireflies Share Meeting · Write

Share a meeting transcript with one or more email addresses.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `emails` (`array`, required): Array of email addresses to share the meeting with (max 100)
- `meetingId` (`string`, required): The Fireflies transcript ID of the meeting. Get it from the search tool.
- `expiryDays` (`number`, optional): Number of days before the shared link expires. Leave empty for no expiry. One of: `7`, `14`, `30`.

Example input: `{"emails":[],"meetingId":"<meetingId>"}`

### `firefliesmcp_fireflies_update_meeting_privacy`

Fireflies Update Meeting Privacy · Write

Update the privacy level of a meeting transcript.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `meetingId` (`string`, required): The Fireflies transcript ID of the meeting. Get it from the search tool.
- `privacy` (`string`, required): Who can view this meeting. Accepted values: link, owner, participants, participatingteammates, teammatesandparticipants, teammates. One of: `link`, `owner`, `participants`, `participatingteammates`, `teammatesandparticipants`, `teammates`.

Example input: `{"meetingId":"<meetingId>","privacy":"link"}`

### `firefliesmcp_fireflies_update_meeting_title`

Fireflies Update Meeting Title · Write

Rename a meeting transcript by its ID.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `meetingId` (`string`, required): The Fireflies transcript ID of the meeting. Get it from the search tool.
- `title` (`string`, required): The new title for the meeting transcript.

Example input: `{"meetingId":"<meetingId>","title":"<title>"}`

### `firefliesmcp_fireflies_move_meeting`

Fireflies Move Meeting · Destructive

Move one or more meeting transcripts to a specified channel or folder.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `channelId` (`string`, required): The ID of the channel/folder. Get it from the list_channels tool.
- `meetingIds` (`array`, required): Array of meeting IDs / transcript IDs to move (max 5)

Example input: `{"channelId":"<channelId>","meetingIds":[]}`

### `firefliesmcp_fireflies_revoke_meeting_access`

Fireflies Revoke Meeting Access · Destructive

Revoke a previously shared meeting access for a specific email address.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `email` (`string`, required): The email address of the user whose access to revoke.
- `meetingId` (`string`, required): The Fireflies transcript ID of the meeting. Get it from the search tool.

Example input: `{"email":"<email>","meetingId":"<meetingId>"}`

## Related

Other Transcription connectors ([all 26](/agentkit/connectors/?category=transcription)):

- [Chorus](/agentkit/connectors/chorus/): Scalekit connector, Username and password, 9 tools
- [Diarize](/agentkit/connectors/diarize/): Scalekit connector, Access token, 3 tools
- [Gong](/agentkit/connectors/gong/): Scalekit connector, OAuth, 49 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
