fireflies.ai
fireflies.
A meeting transcript — list/search, fetch one (full sentences +
setup & usage
create an API key in Fireflies (app.fireflies.ai → Integrations → API — see the integration docs), then paste it into oto.
fireflies transcribes your meetings and gives access to transcripts, control of a meeting IN PROGRESS, its Q&A assistant AskFred and organization data, in 7 tools:
fireflies_transcript(op="list", keyword="budget", mine=True)fireflies_transcript(op="get", transcript_id="...") (summary, sentences, analytics, participants — all in one call)fireflies_transcript(op="upload", url="https://...", title="...") — the URL must be publicly accessiblefireflies_transcript(op="update_title"|"update_privacy"|"update_channel", ...)fireflies_transcript(op="share", transcript_id="...", emails=[...])fireflies_transcript(op="create_upload_url", content_type="audio/mpeg", file_size=...) then, once the bytes have been sent to the returned URL, op="confirm_upload" — flow undocumented by Fireflies, discovered live via introspection (the PUT of the bytes is done outside the agent, as for Grain)fireflies_live_meeting(op="list_active")fireflies_live_meeting(op="add_bot", meeting_link="https://zoom.us/...")fireflies_live_meeting(op="create_action_item"|"create_soundbite", meeting_id="...", prompt="...")fireflies_askfred(op="create_thread", query="...") (searches across several meetings; pass transcript_id to target a single meeting)fireflies_askfred(op="continue_thread", thread_id="...", query="...")fireflies_user(op="list"|"groups")fireflies_channel(op="list")fireflies_bite(op="create", transcript_id="...", start_time=120, end_time=145)fireflies_org(op="analytics", start_time="...", end_time="...")fireflies_org(op="contacts")Fireflies configures its webhooks (V1 as well as V2) exclusively from its web interface (Settings, then Integrations → API → Webhook) — there is no GraphQL query or mutation to create/list/delete a webhook subscription. This connector therefore deliberately has no *_webhook tool: configuration is done directly on app.fireflies.ai.
Built from the Fireflies documentation (no accessible OpenAPI spec — docs.fireflies.ai/api-reference/openapi.json is listed in the sitemap but returns 404 on fetch). The live API, however, exposes GraphQL introspection — tested on 2026-08-20 against a real key, 27/30 methods conforming on the first try, 3 real bugs fixed (wrong argument type on list_transcripts, nonexistent field on get_askfred_thread, typo on the API's own side on createBite).
⚠️ Fireflies itself does NOT validate that a `channel_id` exists on op="update_channel" — assigning a nonexistent channel id silently succeeds on the Fireflies side, and no mutation allows "unassigning" a channel once set. This connector protects against it: fireflies_transcript(op="update_channel", ...) checks the id against fireflies_channel(op="list") and refuses an unknown id BEFORE calling Fireflies — no need to do it yourself.
this connector accepts multiple comptes: each stored credential becomes a named account (one name per compte), at your level, your team's or your org's.
_account="<name>" on the tool; list them: oto_identity(op='list', connector='fireflies') (scope='org' or scope='group' for the org's or team's)oto_identity(op='set', connector='fireflies', identity_id='<name>'); rename: op='rename' with new_name_account) and adding upoutils
usage
claude plugin marketplace add otomata-tech/oto-plugin — mcp + skill configured.pipx install oto-cli then oto fireflies …