mcpField
F
fireflies-transcript

fireflies-transcript

github.com/davidondrejProductivity4.2k121 installsUpdated today
Repository

About fireflies-transcript

fireflies-transcript is a read-only skill for retrieving meeting transcripts from Fireflies.ai as raw, speaker-labeled text. It is intended for agents handling transcript requests and includes steps to locate, fetch, and verify a meeting transcript.

Key features

  1. 01List and search meeting records
  2. 02Fetch transcript sentences and speakers
  3. 03Retrieve optional summaries and participants
  4. 04Verify transcript content before reporting

Use cases

  1. 01Find a meeting by date or title
  2. 02Save a speaker-labeled transcript to a file
  3. 03Check transcript speakers and topic

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/davidondrej/skills --skill fireflies-transcript

After installing, type/fireflies-transcriptin Claude Code to confirm it loaded.

Bundled filesagents/openai.yaml

Details

From the project README

Fireflies Transcript

Fetch any meeting transcript from Fireflies.ai as raw text via GraphQL. Read-only.

Auth (state-check first)

Load the API key from a local environment file (mode 600, never commit or print it):

source "$SERVICE_ENV_FILE"   # exports API_KEY
[ -n "$API_KEY" ] || echo "MISSING KEY - stop and tell the user"

Every call is a POST to https://api.fireflies.ai/graphql with Authorization: Bearer <API_KEY> and a JSON body {"query": "..."}.

Step 1 - find the meeting id

curl -sS -X POST https://api.fireflies.ai/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <API_KEY>" \
  -d '{"query":"{ transcripts(limit: 25) { id title date duration } }"}' \
  | jq -r '.data.transcripts[] | "\(.id) | \(.title) | \(.date)"'
  • date is epoch milliseconds. Convert on macOS: date -r $((1784127600000/1000)).
  • The transcripts(title:) filter is EXACT-match — it returns [] for partial names. List recent meetings and grep locally instead.
  • Ad-hoc meetings have no proper title (e.g. Untitled - Wed, 15 Jul 2026 17:00:55 CEST). Identify those by date/time, then confirm via content or speakers, not the title.
  • Paginate older meetings with skip: (e.g. transcripts(limit: 50, skip: 25)).

Step 2 - pull the raw transcript

QUERY='{ transcript(id: "MEETING_ID") { title sentences { speaker_name text } } }'
curl -sS -X POST https://api.fireflies.ai/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <API_KEY>" \
  -d "$(jq -nc --arg query "$QUERY" '{query: $query}')" \
  > /tmp/ff.json

# speaker-labeled raw text (usual deliverable)
jq -r '.data.transcript.sentences[] | "\(.speaker_name): \(.text)"' /tmp/ff.json

# bare text only
jq -r '.data.transcript.sentences[].text' /tmp/ff.json

Transcripts run to hundreds of sentences — save to a file, never dump to stdout/chat.

Optional extras on the same transcript(id:) query: summary { overview short_summary keywords }, participants, duration, meeting_link.

Failure modes

  • sentences: null — recording still processing or no audio captured; nothing to pull.
  • errors[] in the response instead of data — usually a bad field name; fix the query.
  • 401/invalid key — key was rotated; ask the user for a new one (Fireflies dashboard: Settings -> Developer settings), update the local environment file.

Verify before reporting done

A pull is successful only if the sentence count is > 0 and the speakers/topic match the meeting the user asked about — check the first few lines, don't trust the title alone.

Comments

Markdown supported