alerts_list
List configured alert definitions across both axes of the rule engine. Modern alerts (table alerts, class-scoped: syslog_log / event_log / eve_log / device_down / storage) and legacy alerts (per-device tracker thresholds, surfaced via the _hell view) are fetched, normalized, merged, filtered, and paginated.
Wraps GET /api/alerts (modern) and POST /api/getAlerts (legacy). Both endpoints return their full catalog; this tool applies the filters and pagination client-side, so the LLM doesn't need to know which axis a filter applies to.
Output rows carry a source discriminator and a synthetic id string (e.g. "modern:42" / "legacy:17") so dedup is unambiguous; the original numeric id is on raw_id. Modern rows carry class, severity, and last-evaluated stats. Legacy rows carry type (tracker kind), device_id, and tracker_name.
Modern rows carry NO throttle / renotify fields, on purpose: since 21.93 no modern class consults them (log-stream classes are one-fire and edge-triggered per event key; device_down and storage are stateful and diff open incidents), so they explain nothing about when a modern alert re-fires. Do not claim a modern alert is flap-damped or on a renotify timer — it isn't. Legacy trackers DO still renotify on a timer, but that config lives on the trigger and is not returned here either.
last_result_count is NOT the same measure across classes. For syslog_log / event_log / eve_log it is the raw match count from the last evaluation BEFORE edge-trigger dedup — a steady nonzero means the pattern keeps matching, NOT that anything was notified (repeat matches of an already-seen occurrence are suppressed). For device_down it is a level: devices currently down and in scope, so nonzero means an outage is open right now. For storage it is likewise a level: volumes currently low (or held open because their reading is unreadable/stale) and in scope. Never sum or compare the two. last_evaluated_at is the last scheduler tick that touched the alert; legacy rows have no equivalent. For what actually fired and was delivered, use alerts_history.
Filters (all optional, AND-combined): scope (modern|legacy|all, default all), class (modern only — silently ignored on legacy rows), severity (int or array), enabled (bool), device_id (legacy only — modern alerts are class-wide), search (case-insensitive substring on label).
Pagination: per_page defaults to 50 (max 200), page is 1-indexed. meta.total is the post-filter count; meta.has_more flags more pages. tag-scoped server-side at the legacy axis (legacy rows for devices outside the user's slug set are filtered by Laravel before this tool sees them).
Permission: alerts. Example: alerts_list({severity: 1, enabled: true, search: "router", per_page: 20})
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-indexed page number (default 1). | |
| class | No | Modern-only filter on the alert class (silently ignored on legacy rows). | |
| scope | No | Which axis to query: 'modern' (alerts table), 'legacy' (_hell view), or 'all' (default). | |
| search | No | Case-insensitive substring match on label. | |
| enabled | No | Restrict to enabled (true) or disabled (false) alerts. | |
| per_page | No | Rows per page (default 50, max 200). | |
| severity | No | Severity int or array of ints. Modern uses 1-5 (lower=worse). Legacy varies by tracker type; passing an int filters both axes. | |
| device_id | No | Legacy-only: restrict to a single device id. Ignored on modern rows. |