fireflies-observability
Set up comprehensive observability for Fireflies.ai integrations with metrics, traces, and alerts. Use when implementing monitoring for Fireflies.ai operations, setting up dashboards, or configuring alerting for Fireflies.ai integration health. Trigger with phrases like "fireflies monitoring", "fireflies metrics", "fireflies observability", "monitor fireflies", "fireflies alerts", "fireflies tracing".
Install
mkdir -p .claude/skills/fireflies-observability && curl -L -o skill.zip "https://mcp.directory/api/skills/download/8849" && unzip -o skill.zip -d .claude/skills/fireflies-observability && rm skill.zipInstalls to .claude/skills/fireflies-observability
About this skill
Fireflies.ai Observability
Overview
Monitor Fireflies.ai integration health: API connectivity, webhook delivery, transcript processing latency, and seat utilization. Built for Prometheus/Grafana but adaptable to any metrics system.
Prerequisites
- Fireflies Business+ plan (for full API access)
- Prometheus + Grafana (or equivalent metrics stack)
- Webhook endpoint deployed and receiving events
Instructions
Step 1: Instrument the GraphQL Client
// lib/fireflies-instrumented.ts
import { Counter, Histogram, Gauge } from "prom-client";
const apiRequests = new Counter({
name: "fireflies_api_requests_total",
help: "Total Fireflies API requests",
labelNames: ["operation", "status"],
});
const apiLatency = new Histogram({
name: "fireflies_api_latency_seconds",
help: "Fireflies API request latency",
labelNames: ["operation"],
buckets: [0.1, 0.25, 0.5, 1, 2, 5, 10],
});
const FIREFLIES_API = "https://api.fireflies.ai/graphql";
export async function firefliesQueryInstrumented(
operation: string,
query: string,
variables?: any
) {
const timer = apiLatency.startTimer({ operation });
try {
const res = await fetch(FIREFLIES_API, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.FIREFLIES_API_KEY}`,
},
body: JSON.stringify({ query, variables }),
});
const json = await res.json();
if (json.errors) {
apiRequests.inc({ operation, status: json.errors[0].code || "error" });
throw new Error(json.errors[0].message);
}
apiRequests.inc({ operation, status: "success" });
return json.data;
} catch (err) {
apiRequests.inc({ operation, status: "failure" });
throw err;
} finally {
timer();
}
}
Step 2: Webhook Event Metrics
const webhookEvents = new Counter({
name: "fireflies_webhook_events_total",
help: "Webhook events received",
labelNames: ["event_type", "status"],
});
const webhookProcessingTime = new Histogram({
name: "fireflies_webhook_processing_seconds",
help: "Time to process webhook events",
buckets: [0.1, 0.5, 1, 5, 10, 30],
});
const transcriptQueue = new Gauge({
name: "fireflies_transcript_queue_depth",
help: "Number of transcripts queued for processing",
});
export async function handleWebhookWithMetrics(event: any) {
const timer = webhookProcessingTime.startTimer();
transcriptQueue.inc();
try {
await processTranscriptReady(event.meetingId);
webhookEvents.inc({ event_type: event.eventType, status: "success" });
} catch (err) {
webhookEvents.inc({ event_type: event.eventType, status: "error" });
throw err;
} finally {
timer();
transcriptQueue.dec();
}
}
Step 3: Health Check Probe
const healthStatus = new Gauge({
name: "fireflies_health_status",
help: "Fireflies API health (1=healthy, 0=unhealthy)",
});
// Run every 5 minutes
async function healthProbe() {
try {
const start = Date.now();
const data = await firefliesQueryInstrumented("health_check", "{ user { email } }");
const latencyMs = Date.now() - start;
healthStatus.set(1);
console.log(`Fireflies health: OK (${latencyMs}ms)`);
} catch (err) {
healthStatus.set(0);
console.error(`Fireflies health: FAILED - ${(err as Error).message}`);
}
}
setInterval(healthProbe, 5 * 60 * 1000);
Step 4: Seat Utilization Tracking
const seatUtilization = new Gauge({
name: "fireflies_seat_utilization",
help: "Transcripts per user",
labelNames: ["user_email"],
});
const totalSeats = new Gauge({
name: "fireflies_total_seats",
help: "Total Fireflies seats",
});
// Run daily
async function trackSeatUtilization() {
const data = await firefliesQueryInstrumented("seat_audit", `{
users { email num_transcripts }
}`);
totalSeats.set(data.users.length);
for (const user of data.users) {
seatUtilization.set({ user_email: user.email }, user.num_transcripts);
}
const inactive = data.users.filter((u: any) => u.num_transcripts < 2);
if (inactive.length > 3) {
console.warn(`${inactive.length} seats with <2 transcripts -- review for cost savings`);
}
}
Step 5: Alerting Rules
# prometheus/rules/fireflies.yml
groups:
- name: fireflies
rules:
- alert: FirefliesAPIDown
expr: fireflies_health_status == 0
for: 10m
labels:
severity: critical
annotations:
summary: "Fireflies API unreachable for 10+ minutes"
- alert: FirefliesHighErrorRate
expr: rate(fireflies_api_requests_total{status!="success"}[5m]) > 0.1
for: 5m
labels:
severity: warning
annotations:
summary: "Fireflies API error rate >10% over 5 minutes"
- alert: FirefliesRateLimited
expr: rate(fireflies_api_requests_total{status="too_many_requests"}[5m]) > 0
labels:
severity: warning
annotations:
summary: "Fireflies API rate limiting detected"
- alert: FirefliesWebhookBacklog
expr: fireflies_transcript_queue_depth > 50
for: 15m
labels:
severity: warning
annotations:
summary: "Webhook processing backlog exceeds 50 transcripts"
- alert: FirefliesSlowProcessing
expr: histogram_quantile(0.95, rate(fireflies_webhook_processing_seconds_bucket[1h])) > 30
labels:
severity: warning
annotations:
summary: "Webhook processing P95 exceeds 30 seconds"
Step 6: Dashboard Panels (Grafana)
Key panels to create:
- API Health:
fireflies_health_status(stat panel, green/red) - Request Rate:
rate(fireflies_api_requests_total[5m])by status - Latency P50/P95/P99:
histogram_quantileonfireflies_api_latency_seconds - Webhook Events/Hour:
increase(fireflies_webhook_events_total[1h]) - Queue Depth:
fireflies_transcript_queue_depth(gauge) - Seat Utilization:
fireflies_seat_utilization(table, sorted ascending)
Error Handling
| Alert | Cause | Response |
|---|---|---|
| API Down | Fireflies outage or key revoked | Check status page, verify API key |
| High Error Rate | Schema change or auth issue | Inspect error codes in logs |
| Rate Limited | Burst of requests | Enable request queuing |
| Webhook Backlog | Processing bottleneck | Scale webhook workers |
Output
- Instrumented GraphQL client with latency and error metrics
- Webhook event tracking with queue depth monitoring
- Health probe running on 5-minute interval
- Prometheus alerting rules for critical conditions
Resources
Next Steps
For incident response, see fireflies-incident-runbook.
More by jeremylongshore
View all skills by jeremylongshore →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
pdf-to-markdown
aliceisjustplaying
Convert entire PDF documents to clean, structured Markdown for full context loading. Use this skill when the user wants to extract ALL text from a PDF into context (not grep/search), when discussing or analyzing PDF content in full, when the user mentions "load the whole PDF", "bring the PDF into context", "read the entire PDF", or when partial extraction/grepping would miss important context. This is the preferred method for PDF text extraction over page-by-page or grep approaches.
Related MCP Servers
Browse all serversCoroot offers a robust data observability platform with Prometheus process monitoring, software network monitoring, and
The most comprehensive MCP integration platform with 333+ integrations and 20,421+ real-time tools. Connect your AI assi
Desktop Commander MCP unifies code management with advanced source control, git, and svn support—streamlining developmen
Deep Research MCP — an AI research assistant and LLM research tool for multi-step web search, content analysis, and synt
Empower AI with the Exa MCP Server—an AI research tool for real-time web search, academic data, and smarter, up-to-date
Cloudflare Observability offers advanced network monitoring software, delivering insights and trends for smarter network
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.