Rootly Incident Management
Overview
Incidents are the primary resource in Rootly — the central record for any production issue, outage, or service degradation. Rootly is used by SRE and platform engineering teams to coordinate response in real time and drive continuous improvement via postmortems. In MSP environments, Rootly typically manages internal infrastructure incidents rather than per-client ticketing, but can be configured with team-based routing to support multi-customer workflows.
The incident system supports:
- Automated Detection - Incidents created from monitoring alert integrations (Datadog, PagerDuty, Prometheus, Grafana, Sentry, etc.)
- Manual Creation - On-call engineers and responders create incidents via Slack, web UI, or API
- AI-Assisted Analysis -
find_related_incidentsandsuggest_solutionssurface past patterns and recommendations - Real-Time Coordination - Slack channel auto-creation, Zoom bridges, timeline tracking
- Post-Incident Learning - Automated postmortem generation and action item tracking
All read and write operations on incidents are available through the Rootly MCP tools.
Anti-triggers
"Incident" names three different objects across this marketplace, and the routing test is what the operator does next: coordinate a response and write it up (this skill), approve a remediation on a compromised endpoint, or answer a customer under an SLA clock.
- A confirmed security incident — malware, intrusion, a host to
contain. That object carries a SOC-recommended remediation to approve,
not a response team to assemble; use
huntress-incidents, orsentinelone-alertsfor raw EDR detections. - A customer ticket typed "Incident" — ITIL ticket classification
inside a PSA or helpdesk, where the deliverable is an SLA-timed
response and a billable time entry rather than a war room; use
freshdesk-ticketing,halopsa-tickets,connectwise-psa-tickets, orautotask-tickets. - A PagerDuty incident — a different vendor with a different
lifecycle (
triggered → acknowledged → resolved, notdetected → in_triage → mitigated → resolved → closed); usepagerduty-incidents. - The retrospective written after resolution — postmortem content
and its action items are
rootly-postmortems; this skill covers action items only as live response tasks. - What fired and who it routed to — alert sources, routing rules,
and escalation policies are
rootly-alerts. - A monitoring or uptime incident — an incident opened by a failing
health check, whose deliverable is a status-page update rather than a
response team, is
betterstack-incidents.
MCP Tools
Core Incident Tools
| Tool | Description | Key Parameters |
|---|---|---|
incidents_get |
List and search incidents | status, severity, page[number], page[size] |
incidents_post |
Create a new incident | title, severity_id, team_ids, service_ids |
incidents_by_incident_id_alerts_post |
Attach an alert to an incident | incident_id, alert data |
incidents_by_incident_id_alerts_get |
List alerts attached to an incident | incident_id |
incidents_by_incident_id_action_items_post |
Create an action item on an incident | incident_id, summary, assignee_id |
incidents_by_incident_id_action_items_get |
List action items on an incident | incident_id |
AI Analysis Tools
| Tool | Description | Key Parameters |
|---|---|---|
find_related_incidents |
Find historically similar incidents using TF-IDF | query or incident_id |
suggest_solutions |
Suggest remediation steps based on past resolutions | incident_id or description |
Supporting Lookups
| Tool | Description |
|---|---|
severities_get |
List configured severity levels (ID, slug, color) |
services_get |
List services to scope incident to the right owner |
teams_get |
List teams for incident assignment and routing |
incident_types_get |
List incident types (bug, outage, performance, etc.) |
environments_get |
List environments (production, staging, etc.) |
users_get |
List users for assignment |
Discover Available Tools
Call list_endpoints to get the current list of all available API endpoints and tool names from the Rootly OpenAPI specification.
Key Concepts
Incident Lifecycle
┌───────────┐ Triage starts ┌────────────┐ Contained ┌───────────┐
│ detected │ ─────────────────> │ in_triage │ ────────────> │ mitigated │
└───────────┘ └────────────┘ └───────────┘
│
Full fix done
▼
┌──────────┐
│ resolved │
└──────────┘
│
PIR complete
▼
┌────────┐
│ closed │
└────────┘
Key lifecycle timestamps on the incident record:
| Timestamp | Meaning |
|---|---|
detected_at |
Alert fired or issue first observed |
acknowledged_at |
Responder acknowledged the page |
in_triage_at |
Active investigation started |
started_at |
Response team coordinating |
mitigated_at |
Immediate impact contained |
resolved_at |
Issue fully resolved |
closed_at |
Post-incident review complete |
cancelled_at |
False alarm; incident cancelled |
Severity Levels
Severities are configurable per Rootly organization. Common conventions:
| Severity | Typical Name | Description | SLA Target |
|---|---|---|---|
| SEV-1 / Critical | P1 | Complete outage or data loss; business-critical impact | Immediate (15 min) |
| SEV-2 / High | P2 | Major feature degraded; significant user impact | 30 minutes |
| SEV-3 / Medium | P3 | Partial degradation; workaround available | 2 hours |
| SEV-4 / Low | P4 | Minor issue; minimal user impact | Next business day |
Note: Severity IDs are UUIDs in Rootly. Always call
severities_getto map severity slugs to IDs before creating an incident.
Incident Status Values
Rootly uses free-text status descriptors alongside timestamps. Common values:
detected— Newly created, not yet acknowledgedin_triage— Actively being investigatedmitigated— Impact contained, monitoring for recurrenceresolved— Issue fixed, normal operation restoredcancelled— False alarm or invalid incident
Field Reference
| Field | Type | Description |
|---|---|---|
id |
string | UUID of the incident |
sequential_id |
integer | Human-readable incident number (e.g., INC-342) |
title |
string | Short summary of the incident |
summary |
string | Detailed description of impact and current status |
status |
string | Current lifecycle status |
severity |
object | Severity record with slug, color, description |
services |
array | Affected services |
environments |
array | Affected environments (production, staging) |
teams |
array | Teams assigned to respond |
labels |
array | Custom tags for filtering and reporting |
started_at |
datetime | When the incident started |
resolved_at |
datetime | When the incident was resolved (null if open) |
slack_channel_id |
string | Auto-created Slack channel for coordination |
url |
string | Web UI link to the incident |
Common Workflows
Triage New Incidents
- Call
incidents_getwithstatus=in_triageorstatus=detected, sorted by severity - For each high-severity incident, review title and summary
- Call
find_related_incidentswith theincident_idto surface similar past incidents - Call
suggest_solutionswith theincident_idto get AI-generated remediation suggestions - Create action items via
incidents_by_incident_id_action_items_postfor each remediation step - Update status as the incident progresses
Create an Incident
- Call
severities_getto find the correct severity ID for the impact level - Call
services_getto identify which service is affected - Call
teams_getto find the on-call team to assign - Call
incidents_postwithtitle,severity_id,service_ids,team_ids - Attach any triggering alerts via
incidents_by_incident_id_alerts_post
Investigate a Specific Incident
- Find the incident via
incidents_getor bysequential_id - Call
find_related_incidents— look for recurring patterns (same service, same time of day, same symptoms) - Call
suggest_solutions— surface past resolutions that worked for similar incidents - Review action items via
incidents_by_incident_id_action_items_get - Review attached alerts via
incidents_by_incident_id_alerts_get
Daily Incident Review
- Call
incidents_getwith a 24-hour window andstatus=resolved - Count by severity for a daily health summary
- Identify incidents that exceeded SLA targets (compare
detected_atvsresolved_at) - Flag any incidents without postmortem action items for follow-up
Cross-Vendor PSA Ticket Correlation
Rootly incidents often correspond to PSA service tickets for MSP billing:
- When an incident is created or resolved, create a matching ticket in your PSA (ConnectWise, HaloPSA, Autotask, etc.)
- Include the Rootly
sequential_id(e.g., INC-342) andurlin the PSA ticket body - Map Rootly severity → PSA priority: SEV-1 → Critical, SEV-2 → High, SEV-3 → Medium, SEV-4 → Low
- When the Rootly incident resolves, update the PSA ticket with resolution summary from
summary - Use action items as sub-tasks in the PSA ticket for follow-up work
On-Call Handoff Summary
Before handing off to the next on-call engineer:
- Call
get_oncall_handoff_summaryto see current and next on-call status plus open incidents - Call
incidents_getwithstatus=in_triageto review any actively open incidents - Add handoff notes as action items on open incidents
- See the oncall skill for full on-call workflows
Error Handling
Common Errors
| Error | HTTP Code | Resolution |
|---|---|---|
| Invalid API token | 401 | Regenerate at Account > Manage API Keys |
| Insufficient permissions | 403 | Token may be Team-scoped; use an Account or Global token |
| Incident not found | 404 | Verify incident_id; use incidents_get to list active incidents |
| Severity ID invalid | 422 | Call severities_get to get valid IDs before creating |
| Rate limited | 429 | Back off 30 seconds; retry with exponential backoff |
Authentication Error
401 Unauthorized
Verify your Rootly API token:
- Generate at Account > Manage API Keys
- Token type: Global (full access) or Team (limited to team resources)
- Pass as: Authorization: Bearer <token>
Best Practices
- Use AI analysis first — Always call
find_related_incidentsandsuggest_solutionsbefore manual investigation - Track action items — Every resolved incident should have at least one follow-up action item
- Attach alerts — Link the triggering alert to the incident for audit trail completeness
- Scope to the right team — Include
team_idswhen creating incidents so on-call routing works correctly - Map severity consistently — Use
severities_getto confirm slug-to-ID mapping rather than hardcoding - Use sequential IDs in external tools — Reference
INC-{sequential_id}in PSA tickets and Slack - Check on-call health — Use
check_oncall_health_riskbefore major deployments or planned maintenance
Related Skills
- On-Call Management — On-call schedules, handoffs, shift metrics
- API Patterns — Auth, pagination, all available tools