Skip to main content
Our Rootly integration allows Agents to learn about, filter, and take action on incidents happening in your infrastructure.
  • Rootly Incidents
  • list_recent_incidents: List recent Rootly incidents
  • get_incident_details: Retrieve incident details by ID
  • get_alert_details_for_incident: Get alert details for an incident
  • post_status_update: Post a status update to an incident
  • resolve_incident: Resolve an incident
  • mitigate_incident: Mitigate an incident
  • acknowledge_incident: Acknowledge an incident
  • add_incident_event: Add event to the incident timeline
  • log_investigation_finding: Log an investigation finding for root cause analysis
  • log_action_taken: Log an action taken during incident response
  • log_escalation: Log an incident escalation
  • log_communication: Log a communication event
  • get_incident_timeline: Get the complete timeline of events for an incident
  • update_incident_event: Update an existing incident event
  • delete_incident_event: Delete an incident event```

Prerequisites

To configure the Rootly integration you’ll need to generate a Rootly API key.
1

Open your Rootly Organization Settings

In the Rootly UI, navigate to your organization settings.
2

Generate API Token

Go to “Organization Settings > API Keys” and create a new token with the necessary permissions for incident management.

Configuration

Configure the Rootly plugin by running uv run unpage configure or by editing the ~/.unpage/profiles/<profile_name>/config.yaml file:
plugins:
  # ...
  rootly:
    enabled: true
    settings:
      api_key: <your api key> # required
Alternatively, you can set the ROOTLY_API_KEY environment variable.

Developing Agents

Your Agents can react to Rootly incidents by adding context from your Knowledge Graph, pulling Metrics, or running custom Shell Commands. Learn more about Creating Agents.

Running Locally

You can test your Agents locally on past or current Rootly incidents by passing in a Rootly incident ID or URL to unpage agent run:
uv run unpage agent run <agent_name> --rootly-incident 01234567-89ab-cdef-0123-456789abcdef
You can also use a full Rootly incident URL:
uv run unpage agent run <agent_name> --rootly-incident https://app.rootly.com/incidents/01234567-89ab-cdef-0123-456789abcdef
Alternatively, you can use the interactive quickstart to select from recent incidents:
uv run unpage agent quickstart
Unpage will fetch the incident automatically and send it to your Agent. The Agent thought process, tool calls, and output will be printed to stdout.

Webhooks

Agent workflows can run automatically by configuring Rootly to send webhooks to your Unpage Server. Configure your Rootly webhooks to send incident events to your Unpage Server endpoint at /webhook (like https://unpage.yourdomain.com/webhook). During development you can tunnel to your local Unpage instance using ngrok by running uv run unpage agent serve --tunnel (see Unpage Server for details). Unpage will now receive webhooks from Rootly and send them to the Router, which will decide which Agent workflow to run.
For production deployments with Rootly integration, see our Deployment Guide for complete setup instructions including Docker configuration and GitHub Actions CI/CD.

Tools

The Rootly plugin provides the following tools to Agents and MCP Clients:

get_incident_details

Get a Rootly incident by ID, including all incident details.Arguments
incident_id
string
required
The ID of the Rootly incident. Typically a UUID string. For example “01234567-89ab-cdef-0123-456789abcdef”.
Returns dict: The incident JSON payload, including all incident details.

get_alert_details_for_incident

Get the details of the alert(s) for a Rootly incident.Arguments
incident_id
string
required
The ID of the Rootly incident. Typically a UUID string. For example “01234567-89ab-cdef-0123-456789abcdef”.
Returns list[dict]: The list of alert details (incident events).

post_status_update

Post a status update to a Rootly incident.Arguments
incident_id
string
required
The ID of the Rootly incident. Typically a UUID string. For example “01234567-89ab-cdef-0123-456789abcdef”.
message
string
required
The status update message to post.
Returns None

resolve_incident

Resolve a Rootly incident.Arguments
incident_id
string
required
The ID of the Rootly incident. Typically a UUID string. For example “01234567-89ab-cdef-0123-456789abcdef”.
resolution_message
string
An optional message to include with the resolution.
Returns None

mitigate_incident

Mitigate a Rootly incident.Arguments
incident_id
string
required
The ID of the Rootly incident. Typically a UUID string. For example “01234567-89ab-cdef-0123-456789abcdef”.
Returns None

acknowledge_incident

Acknowledge a Rootly incident.Arguments
incident_id
string
required
The ID of the Rootly incident. Typically a UUID string. For example “01234567-89ab-cdef-0123-456789abcdef”.
Returns None

add_incident_event

Add a timeline event to a Rootly incident for root cause analysisArguments
incident_id
string
required
The ID of the Rootly incident. Typically a UUID string. For example “01234567-89ab-cdef-0123-456789abcdef”.
event_description
string
required
Description of the event/activity
visibility
string
Event visibility - “internal” or “external” (default: “internal”)
Returns dict: The created event data

list_recent_incidents

List recent Rootly incidentsArguments
limit
int
Maximum number of incidents to return (default: 10)
Returns list[dict]: List of recent incidents with their details

log_investigation_finding

Log an investigation finding for root cause analysisArguments
incident_id
string
required
The Rootly ID of the incident
finding
string
required
The investigation finding or discovery
source
string
Source of the finding (e.g., ‘logs’, ‘metrics’, ‘database’)
visibility
string
Event visibility - “internal” or “external” (default: “internal”)
Returns dict: The created event data

log_action_taken

Log an action taken during incident responseArguments
incident_id
string
required
The Rootly ID of the incident
action
string
required
The action that was taken
outcome
string
The result or outcome of the action
visibility
string
Event visibility - “internal” or “external” (default: “internal”)
Returns dict: The created event data

log_escalation

Log an incident escalationArguments
incident_id
string
required
The Rootly ID of the incident
escalated_to
string
required
Who or what team the incident was escalated to
reason
string
Reason for the escalation
visibility
string
Event visibility - “internal” or “external” (default: “internal”)
Returns dict: The created event data

log_communication

Log a communication event (e.g., customer notification, internal update)Arguments
incident_id
string
required
The Rootly ID of the incident
communication_type
string
required
Type of communication (e.g., “Customer Notification”, “Team Update”)
details
string
required
Details of the communication
visibility
string
Event visibility - “external” for customer-facing, “internal” for team-only (default: “external”)
Returns dict: The created event data

get_incident_timeline

Get the complete timeline of events for an incidentArguments
incident_id
string
required
The Rootly ID of the incident
Returns list: List of all events/timeline entries for the incident

update_incident_event

Update an existing incident eventArguments
event_id
string
required
The ID of the event to update
event_description
string
required
Updated description of the event
visibility
string
Event visibility - “internal” or “external” (default: “internal”)
Returns dict: The updated event data

delete_incident_event

Delete an incident eventArguments
event_id
string
required
The ID of the event to delete
Returns dict: Response from the deletion request
I