Skip to main content
Glama
Rootly MCP server

Rootly MCP server

Official
by rootlyhq

Rootly MCP Server

PyPI version PyPI - Downloads Python Version

An MCP server for the Rootly API for Cursor, Windsurf, Claude, and other MCP clients.

Demo GIF

Quick Start

Use the hosted MCP server. No local installation required.

Hosted Transport Options

  • Streamable HTTP (recommended): https://mcp.rootly.com/mcp

  • Code Mode: https://mcp.rootly.com/mcp-codemode

  • SSE (deprecated, removed after 2026-11-20): https://mcp.rootly.com/sse

WARNING

SSE is deprecated. The hosted https://mcp.rootly.com/sse endpoint and the self-hosted --transport sse option will be removed after 2026-11-20. Switch your client to Streamable HTTP (https://mcp.rootly.com/mcp) or Code Mode (https://mcp.rootly.com/mcp-codemode); for most clients that means changing the URL and, if your client config has one, setting the transport to http/streamable-http. SSE responses now carry Deprecation, Sunset and Link: rel="successor-version" headers.

Toolsets

Every client loads the whole tool list into the model's context: the full surface is about 125k tokens. Tools are grouped into toolsets (the same model as GitHub's and Datadog's MCP servers) so a client can load only what it needs. Recommended: ?toolsets=core, about 29 tools and 10k tokens. Without a selection you still get every tool, so existing configurations keep working.

Toolset

What it covers

core (recommended)

Everyday incident response: find and update incidents, alerts, who is on call (~29 tools)

incidents

Action items, events, roles, retrospectives, form field selections, meeting recordings

alerts

Alerts, alert sources, routes and routing rules, urgencies, heartbeats, live call routers

oncall

Schedules, rotations, shifts, overrides, escalation policies and paths

workflows

Workflows, workflow tasks and runs, playbooks

catalog

Services, functionalities, teams, environments, catalogs

status_pages

Status pages, templates, pulses

config

Severities, causes, incident types, forms, retrospective processes, dashboards

users

Users, notification rules, contact methods

ai

AI SRE investigations, AI automations and skills

observability

Rootly Observability logs and patterns

audit

Audit log

  • Pick toolsets: https://mcp.rootly.com/mcp?toolsets=core,workflows, or send X-MCP-Toolsets: core,workflows

  • Everything: ?toolsets=all (about 280 tools)

  • Read-only: add readonly=true (or X-MCP-Readonly: true), e.g. ?toolsets=all&readonly=true. Any value other than false/0/no/off turns it on. Write tools are hidden and refused, and the server also refuses any non-GET request to the Rootly API on that connection. It is a per-connection guard; for a hard guarantee, connect with a Rootly API key whose role cannot write

  • Deprecated: ?tool_profile= and X-Rootly-Tool-Profile. They still work (full/all mean ?toolsets=all; slim keeps its fixed ~85-tool list) and will be removed; switch to ?toolsets=. Each use is logged so remaining clients can be found

  • Server-wide default: ROOTLY_MCP_TOOLSETS=core,alerts sets what a client gets with no selection (default all); ROOTLY_MCP_HOSTED_TOOL_PROFILE=slim makes slim the default instead

  • Exact custom override: ROOTLY_MCP_ENABLED_TOOLS=... replaces toolsets entirely

A tool outside the selection is refused with the toolset that holds it (list_workflows is not available here: it is in the 'workflows' toolset ... Reconnect with ?toolsets=core,workflows), and the server instructions list every toolset, so an assistant can tell you the exact change. Code Mode (/mcp-codemode) always has the full catalog; readonly=true applies there too, to every tool a script calls. readonly also applies under the slim profile and ROOTLY_MCP_ENABLED_TOOLS.

General Remote Setup

With OAuth2 (recommended):

{
  "mcpServers": {
    "rootly": {
      "url": "https://mcp.rootly.com/mcp"
    }
  }
}

Your MCP client handles OAuth2 login automatically — a browser window opens for you to authenticate with Rootly. No API token needed.

With API Token:

{
  "mcpServers": {
    "rootly": {
      "url": "https://mcp.rootly.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_ROOTLY_API_TOKEN"
      }
    }
  }
}

Code Mode:

{
  "mcpServers": {
    "rootly": {
      "url": "https://mcp.rootly.com/mcp-codemode"
    }
  }
}

If your config still points at https://mcp.rootly.com/sse, replace it with https://mcp.rootly.com/mcp before 2026-11-20 (SSE is deprecated, see above).

Agent Setup

With OAuth2 (recommended):

claude mcp add --transport http rootly https://mcp.rootly.com/mcp

# Code Mode:
claude mcp add --transport http rootly-codemode https://mcp.rootly.com/mcp-codemode

With API Token:

claude mcp add --transport http rootly https://mcp.rootly.com/mcp \
  --header "Authorization: Bearer YOUR_ROOTLY_API_TOKEN"

Manual Configuration — Create .mcp.json in your project root:

{
  "mcpServers": {
    "rootly": {
      "type": "http",
      "url": "https://mcp.rootly.com/mcp"
    }
  }
}

Install the extension:

gemini extensions install https://github.com/rootlyhq/rootly-mcp-server

Or configure manually in ~/.gemini/settings.json:

{
  "mcpServers": {
    "rootly": {
      "command": "uvx",
      "args": ["--from", "rootly-mcp-server", "rootly-mcp-server"],
      "env": {
        "ROOTLY_API_TOKEN": "<YOUR_ROOTLY_API_TOKEN>"
      }
    }
  }
}

Add to .cursor/mcp.json or ~/.cursor/mcp.json:

With OAuth2 (recommended):

{
  "mcpServers": {
    "rootly": {
      "url": "https://mcp.rootly.com/mcp"
    }
  }
}

With API Token:

{
  "mcpServers": {
    "rootly": {
      "url": "https://mcp.rootly.com/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_ROOTLY_API_TOKEN>"
      }
    }
  }
}

Add to ~/.codeium/windsurf/mcp_config.json:

With OAuth2 (recommended):

{
  "mcpServers": {
    "rootly": {
      "serverUrl": "https://mcp.rootly.com/mcp"
    }
  }
}

With API Token:

{
  "mcpServers": {
    "rootly": {
      "serverUrl": "https://mcp.rootly.com/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_ROOTLY_API_TOKEN>"
      }
    }
  }
}

Add to ~/.codex/config.toml:

With OAuth2 (recommended):

[mcp_servers.rootly]
url = "https://mcp.rootly.com/mcp"

With API Token:

[mcp_servers.rootly]
url = "https://mcp.rootly.com/mcp"
bearer_token_env_var = "ROOTLY_API_TOKEN"

With OAuth2 (recommended):

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "rootly": {
      "url": "https://mcp.rootly.com/mcp"
    }
  }
}

Claude Desktop handles OAuth2 login automatically.

With API Token (via mcp-remote):

{
  "mcpServers": {
    "rootly": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.rootly.com/mcp",
        "--transport",
        "http",
        "--header",
        "Authorization: Bearer <YOUR_ROOTLY_API_TOKEN>"
      ]
    }
  }
}

Register the hosted server in Unity Gateway so Supervisor Agent, AI Playground, and other Databricks agents can use it:

  1. In your workspace, open Unity Gateway > MCPs, click + MCP, and choose Connect an existing MCP server.

  2. Pick a catalog and schema, name the MCP, and create a new connection with URL https://mcp.rootly.com/mcp.

  3. Choose an authentication method:

    • Dynamic Client Registration (recommended): each user signs in to Rootly with their own account.

    • Bearer token: paste a Rootly API token.

  4. Click Create & load tools, click Login if prompted, and select the tools to expose.

Or create the connection with the Databricks SDK:

from databricks.sdk import WorkspaceClient
from databricks.sdk.service import catalog as c

WorkspaceClient().connections.create(
    name="rootly_connection",
    parent="schemas/main.default",
    connection_type=c.ConnectionType.HTTP,
    options={
        "host": "https://mcp.rootly.com",
        "port": "443",
        "base_path": "/mcp",
        "bearer_token": "<YOUR_ROOTLY_API_TOKEN>",
    },
)

The full profile exposes about 250 tools. Use Unity Gateway tool selection to expose only what your agents need. See docs/databricks-marketplace.md for the Marketplace listing details.

Related MCP server: OpsLevel MCP

Rootly CLI

Standalone CLI for incidents, alerts, services, and on-call operations.

Install via Homebrew:

brew install rootlyhq/tap/rootly-cli

Or via Go:

go install github.com/rootlyhq/rootly-cli/cmd/rootly@latest

For more details, see the Rootly CLI repository.

Alternative Installation (Local)

Run the MCP server locally if you do not want to use the hosted service.

Prerequisites

  • Python 3.12 or higher

  • uv package manager

    curl -LsSf https://astral.sh/uv/install.sh | sh
  • Rootly API token

API Token Types

Choose the token type based on the access you need:

  • Global API Key: Full access across the Rootly instance. Best for organization-wide visibility.

  • Team API Key: Access limited to entities owned by that team.

  • Personal API Key: Access matches the user who created it.

A Global API Key is recommended for organization-wide queries and for actions that modify data, especially when workflows may span multiple teams, schedules, or incidents.

With uv

{
  "mcpServers": {
    "rootly": {
      "command": "uv",
      "args": [
        "tool",
        "run",
        "--from",
        "rootly-mcp-server",
        "rootly-mcp-server"
      ],
      "env": {
        "ROOTLY_API_TOKEN": "<YOUR_ROOTLY_API_TOKEN>",
        "ROOTLY_MCP_ENABLE_WRITE_TOOLS": "true"
      }
    }
  }
}

Self-Hosted Transport Options

Choose one transport per server process:

  • Streamable HTTP endpoint path: /mcp

  • SSE (deprecated, removed after 2026-11-20) endpoint path: /sse. --transport sse logs a deprecation warning at startup; use --transport streamable-http instead.

  • Code Mode (experimental) endpoint path: /mcp-codemode in hosted dual-transport mode. One execute call may make at most 50 tool calls; set ROOTLY_CODE_MODE_MAX_TOOL_CALLS to a positive integer to change that.

  • Hosted default: full surface; ?toolsets=core for the recommended small one (see Toolsets)

  • Hosted slim profile (deprecated): about 85 high-usage tools via ?tool_profile=slim

  • Self-hosted default: full surface (ROOTLY_MCP_TOOLSETS narrows it)

To restrict either deployment to read-only tools, start the server with --no-enable-write-tools or set ROOTLY_MCP_ENABLE_WRITE_TOOLS=false.

For hosted clients, choose toolsets with ?toolsets= on the MCP URL or the X-MCP-Toolsets header (see Toolsets).

AgentCat and Sentry telemetry

Hosted deployments can send MCP telemetry to AgentCat by setting ROOTLY_MCPCAT_PROJECT_ID. To also export AgentCat events to Sentry, provide SENTRY_DSN through the deployment's secret store. The optional ENVIRONMENT defaults to production, and SENTRY_RELEASE defaults to the installed Rootly MCP Server version. Sentry performance tracing is enabled when the exporter is configured. Free-form event text is redacted and actor names are omitted from Sentry-bound telemetry; stable internal actor IDs remain available for correlation.

AgentCat's enable_tool_call_context and enable_report_missing options are disabled. The SDK does not add an analytics context parameter or the get_more_tools feedback tool. Tool-call telemetry remains enabled, including arguments, responses, timing, errors, and configured identity information, subject to the existing redaction hooks.

Telemetry runs on AgentCat v2 (MCP 2026-07-28 spec). Session correlation uses the SDK's hook mode (resolve_session_id): the server derives the session from the request. The key always starts with the caller (authenticated user, or a digest of the token), then the client's Mcp-Session-Id when it sends one, otherwise the UTC hour. No session_id parameter or session instructions are added to tool schemas. Clients holding a cached tool list that still send context or session_id are tolerated; the stray argument is dropped before validation. initialize and tools/list events are no longer published by the SDK.

To override the hosted or self-hosted default profile entirely, set ROOTLY_MCP_ENABLED_TOOLS (or pass --enabled-tools) with a comma-separated allowlist of exact tool names. When that variable is set, it fully replaces the default selection.

To expose only a specific subset of MCP tools on a self-hosted deployment, set ROOTLY_MCP_ENABLED_TOOLS (or pass --enabled-tools) with a comma-separated allowlist of exact tool names, for example list_incidents,get_incident,get_server_version.

PostHog MCP analytics

Setting POSTHOG_PROJECT_TOKEN (and optionally POSTHOG_HOST, default https://us.i.posthog.com) sends $mcp_* events to PostHog with the same privacy settings as AgentCat: no injected context, conversation_id or llm_model parameters, credential scrubbing before send, and hosted users identified by Rootly user ID only.

When AgentCat is also configured, both run side by side. posthog.mcp's MCP SDK 1.x code path cannot handle AgentCat's middleware directly, so the server wraps it in an adapter first. On the stateless hosted transport, PostHog sessions are tied together through the Mcp-Session-Id header minted at initialize. AgentCat's session resolver also reads that header (scoped to the authenticated caller), so with PostHog on, AgentCat groups those clients' calls per connection instead of per hour.

OpenAI Apps domain verification

Hosted deployments expose an unauthenticated domain-verification endpoint used by the OpenAI plugin directory:

  • Endpoint: GET /.well-known/openai-apps-challenge

  • Environment variable: ROOTLY_OPENAI_APPS_CHALLENGE_TOKEN

Set ROOTLY_OPENAI_APPS_CHALLENGE_TOKEN to the token generated in the OpenAI submission portal. The endpoint returns that exact token as text/plain (with Cache-Control: no-store), and returns 404 when the variable is unset or empty. The token is read from the environment at request time — never hardcode or commit it. The route is served on both the dual-transport (--transport both) and profiled streamable-HTTP hosted deployments and is not subject to Bearer authentication.

To discover the exact tool names available under your current self-hosted configuration, run:

ROOTLY_API_TOKEN=<YOUR_ROOTLY_API_TOKEN> \
uv run python -m rootly_mcp_server --list-tools

This prints the effective MCP tool names after applying your current settings, including ROOTLY_MCP_ENABLE_WRITE_TOOLS and ROOTLY_MCP_ENABLED_TOOLS.

Smoke-test a self-hosted allowlist:

ROOTLY_API_TOKEN=<YOUR_ROOTLY_API_TOKEN> \
ROOTLY_MCP_ENABLED_TOOLS=list_incidents,get_incident,get_server_version \
uv run python -m rootly_mcp_server --transport streamable-http --log-level ERROR

Then connect an MCP client to http://127.0.0.1:8000/mcp and verify tools/list returns only:

get_server_version
get_incident
list_incidents

To include specific write tools for self-hosted testing, add both the write flag and the allowlist:

ROOTLY_API_TOKEN=<YOUR_ROOTLY_API_TOKEN> \
ROOTLY_MCP_ENABLE_WRITE_TOOLS=true \
ROOTLY_MCP_ENABLED_TOOLS=create_incident,create_workflow_task,list_teams \
uv run python -m rootly_mcp_server --transport streamable-http --log-level ERROR

Example Docker run (Streamable HTTP):

docker run -p 8000:8000 \
  -e ROOTLY_TRANSPORT=streamable-http \
  -e ROOTLY_API_TOKEN=<YOUR_ROOTLY_API_TOKEN> \
  -e ROOTLY_MCP_ENABLE_WRITE_TOOLS=true \
  rootly-mcp-server

Example Docker run (SSE, deprecated: removed after 2026-11-20, use Streamable HTTP above):

docker run -p 8000:8000 \
  -e ROOTLY_TRANSPORT=sse \
  -e ROOTLY_API_TOKEN=<YOUR_ROOTLY_API_TOKEN> \
  rootly-mcp-server

Example Docker run (Dual transport + Code Mode; the /sse endpoint it also serves is deprecated):

docker run -p 8000:8000 \
  -e ROOTLY_TRANSPORT=both \
  -e ROOTLY_API_TOKEN=<YOUR_ROOTLY_API_TOKEN> \
  rootly-mcp-server

Workflow-Focused Tool Subsets

The full surface exposes about 280 tools. Toolsets cover most needs; for an exact list, use ROOTLY_MCP_ENABLED_TOOLS:

🚨 Incident Response (25 tools)

Essential tools for emergency responders and incident commanders

ROOTLY_MCP_ENABLED_TOOLS="list_incidents,get_incident,create_incident,update_incident,search_incidents,find_related_incidents,suggest_solutions,create_incident_action_item,list_incident_action_items,update_incident_form_field_selection,list_teams,get_current_user,list_services,list_severities,get_alert,list_alerts,get_alert_by_short_id,list_escalation_policies,get_escalation_policy,list_on_call_roles,list_schedules,get_schedule_shifts,get_oncall_handoff_summary,get_shift_incidents,list_endpoints"

📅 On-Call Management (33 tools)

For schedule coordinators and on-call managers

ROOTLY_MCP_ENABLED_TOOLS="list_schedules,get_schedule,update_schedule,get_schedule_shifts,list_shifts,create_schedule_rotation,update_schedule_rotation,list_schedule_rotations,get_schedule_rotation,list_schedule_rotation_users,update_schedule_rotation_user,create_on_call_shadow,update_on_call_shadow,list_on_call_shadows,create_override_shift,update_override_shift,list_override_shifts,list_on_call_roles,update_on_call_role,get_oncall_schedule_summary,get_oncall_shift_metrics,check_responder_availability,create_override_recommendation,list_teams,get_team,list_users,get_user,get_current_user,list_escalation_policies,update_escalation_policy,list_escalation_paths,update_escalation_path,list_escalation_levels"

📊 Monitoring & Alerting (40 tools)

For platform teams setting up observability

ROOTLY_MCP_ENABLED_TOOLS="list_alerts,get_alert,get_alert_by_short_id,create_alert_group,update_alert_group,list_alert_groups,create_alert_routing_rule,update_alert_routing_rule,list_alert_routing_rules,list_alert_events,get_alert_event,update_alert_event,create_heartbeat,update_heartbeat,list_heartbeats,get_heartbeat,create_pulse,update_pulse,list_pulses,get_pulse,create_dashboard,update_dashboard,list_dashboards,get_dashboard,create_dashboard_panel,update_dashboard_panel,list_status_pages,get_status_page,update_status_page,list_status_page_templates,get_status_page_template,list_communications_templates,update_communications_template,create_live_call_router,update_live_call_router,list_services,list_teams,get_current_user,list_environments,list_severities,list_endpoints"

📋 Post-Incident Analysis (30 tools)

For SREs doing retrospectives and process improvement

ROOTLY_MCP_ENABLED_TOOLS="get_incident,update_incident,find_related_incidents,suggest_solutions,list_incident_action_items,create_incident_action_item,update_incident_form_field_selection,create_post_incident_review,update_post_incident_review,list_post_incident_reviews,get_post_incident_review,create_retrospective_step,update_retrospective_step,list_retrospective_steps,create_retrospective_process,update_retrospective_process,list_retrospective_processes,create_playbook,update_playbook,list_playbooks,get_playbook,create_playbook_task,update_playbook_task,list_causes,get_cause,update_cause,list_incident_types,get_incident_type,update_incident_type,get_current_user"

📈 Analytics & Reporting (15 tools)

For leadership and metrics teams (read-only focus)

ROOTLY_MCP_ENABLED_TOOLS="list_incidents,search_incidents,collect_incidents,list_teams,list_services,list_schedules,get_oncall_shift_metrics,get_shift_incidents,list_dashboards,get_dashboard,list_alerts,list_heartbeats,list_pulses,get_current_user,list_endpoints"

Multiple MCP Instances for Different Teams

You can run multiple MCP instances with different tool subsets:

{
  "mcpServers": {
    "rootly-incident-response": {
      "command": "uvx", "args": ["--from", "rootly-mcp-server", "rootly-mcp-server"],
      "env": {
        "ROOTLY_API_TOKEN": "<token>",
        "ROOTLY_MCP_ENABLED_TOOLS": "list_incidents,get_incident,create_incident,find_related_incidents,suggest_solutions..."
      }
    },
    "rootly-oncall-management": {
      "command": "uvx", "args": ["--from", "rootly-mcp-server", "rootly-mcp-server"],
      "env": {
        "ROOTLY_API_TOKEN": "<token>",
        "ROOTLY_MCP_ENABLED_TOOLS": "list_schedules,update_schedule,create_override_shift,get_oncall_shift_metrics..."
      }
    }
  }
}

With uvx

{
  "mcpServers": {
    "rootly": {
      "command": "uvx",
      "args": [
        "--from",
        "rootly-mcp-server",
        "rootly-mcp-server"
      ],
      "env": {
        "ROOTLY_API_TOKEN": "<YOUR_ROOTLY_API_TOKEN>"
      }
    }
  }
}

Features

  • Dynamic Tool Generation: Automatically creates MCP resources from Rootly's OpenAPI (Swagger) specification

  • Smart Pagination: Uses bounded pagination and compact incident responses to prevent context window overflow

  • API Filtering: Limits exposed API endpoints for security and performance

  • Intelligent Incident Analysis: Smart tools that analyze historical incident data

    • find_related_incidents: Uses TF-IDF similarity analysis to find historically similar incidents

    • suggest_solutions: Mines past incident resolutions to recommend actionable solutions

  • MCP Resources: Exposes incidents, teams, on-call status, and workflow guides as structured resources for AI context

  • Intelligent Pattern Recognition: Automatically identifies services, error types, and resolution patterns

  • On-Call Health Integration (self-hosted only): Detects workload health risk in scheduled responders

Supported Tools

The default tool surface depends on deployment profile:

  • Hosted default: about 280 tools

  • Hosted ?toolsets=core (recommended): about 29 tools

  • Hosted slim profile (deprecated): about 85 tools

  • Self-hosted default: about 280 tools

Custom Agentic Tools

  • check_oncall_health_risk - self-hosted only

  • check_responder_availability

  • collect_incidents

  • create_incident - create a new incident with a scoped set of fields for agent workflows

  • create_override_recommendation

  • find_related_incidents

  • get_incident - retrieve a single incident for direct verification, including PIR-related fields

  • get_alert_by_short_id

  • get_investigation - an AI SRE investigation's verdict, evidence, causal chain and open questions (by id, or latest for an alert/incident)

  • get_investigation_progress - follow a running investigation; call again with after_cursor until done

  • get_oncall_handoff_summary

  • get_oncall_schedule_summary

  • get_oncall_shift_metrics

  • get_server_version

  • get_shift_incidents

  • list_endpoints

  • list_investigations

  • list_incidents

  • list_shifts

  • search_incidents

  • start_investigation, cancel_investigation - start or cancel an AI SRE investigation; write tools

  • suggest_solutions

  • update_incident - update native incident fields with severity validation; retrospective status changes require the Rootly UI

OpenAPI-Generated Tools

Tool naming: all tools use snake_case. The historical camelCase names (e.g. getScheduleShifts, listIncidents) are no longer advertised in tools/list, but remain callable as hidden aliases — they are transparently routed to their snake_case canonical. Update configs and ROOTLY_MCP_ENABLED_TOOLS allowlists to the snake_case names; legacy camelCase allowlist entries are auto-canonicalized.

list_workflow_runs
create_incident_action_item
create_incident_form_field_selection
create_workflow_task
get_alert
get_alert_event
get_alert_group
get_alert_routing_rule
get_alert_source
get_alert_urgency
get_catalog
get_catalog_entity
get_catalog_property
get_cause
get_current_user
get_custom_form
get_environment
get_escalation_level
get_escalation_path
get_escalation_policy
get_form_field
get_form_field_option
get_functionality
get_functionality_incidents_chart
get_functionality_uptime_chart
get_incident_action_items
get_incident_form_field_selection
get_incident_type
get_on_call_role
get_on_call_shadow
get_override_shift
get_schedule
get_schedule_rotation
get_schedule_shifts
get_service
get_service_incidents_chart
get_service_uptime_chart
get_severity
get_status_page
get_status_page_template
get_team
get_team_incidents_chart
get_user
get_workflow
get_workflow_form_field_condition
get_workflow_group
get_workflow_task
list_alert_events
list_alert_groups
list_alert_routing_rules
list_alert_sources
list_alert_urgencies
list_alerts
list_all_incident_action_items
list_catalog_entities
list_catalog_properties
list_catalogs
list_causes
list_custom_forms
list_environments
list_escalation_levels
list_escalation_levels_paths
list_escalation_paths
list_escalation_policies
list_form_field_options
list_form_fields
list_functionalities
list_incident_action_items
list_incident_alerts
list_incident_form_field_selections
list_incident_types
list_observability_logs
list_observability_patterns
count_observability_logs
list_on_call_roles
list_on_call_shadows
list_override_shifts
list_schedule_rotation_active_days
list_schedule_rotation_users
list_schedule_rotations
list_schedules
list_services
list_severities
list_shifts
list_status_page_templates
list_status_pages
list_teams
list_users
list_workflow_form_field_conditions
list_workflow_groups
list_workflows
list_workflow_tasks
update_environment
update_escalation_level
update_escalation_path
update_escalation_policy
update_functionality
update_incident_type
update_on_call_role
update_on_call_shadow
update_override_shift
update_schedule
update_schedule_rotation
update_service
update_severity
update_team
update_workflow
update_incident_form_field_selection
update_workflow_task

Major Expansion: This version includes 50+ new endpoints covering communications, dashboards, playbooks, post-incident reviews, monitoring, and advanced form management - while carefully excluding security-sensitive operations like API key management, user creation/deletion, role management, and webhook configuration.

Delete operations remain disabled in the default tool surface.

On-Call Health Integration (Self-Hosted Only)

Integrates with On-Call Health to detect workload health risk in scheduled responders.

check_oncall_health_risk is unavailable on the hosted MCP service, including the full and slim profiles, SSE, Streamable HTTP, and Code Mode. It is not registered in hosted mode, so an API key or ROOTLY_MCP_ENABLED_TOOLS allowlist cannot enable it. Ordinary on-call scheduling and incident tools remain available.

Self-hosted deployments retain this integration. Operators are responsible for appropriate employee disclosure and data handling for their deployment.

Setup

Set the ONCALLHEALTH_API_KEY environment variable:

{
  "mcpServers": {
    "rootly": {
      "command": "uvx",
      "args": ["--from", "rootly-mcp-server", "rootly-mcp-server"],
      "env": {
        "ROOTLY_API_TOKEN": "your_rootly_token",
        "ONCALLHEALTH_API_KEY": "och_live_your_key"
      }
    }
  }
}

Usage

check_oncall_health_risk(
    start_date="2026-02-09",
    end_date="2026-02-15"
)

Returns at-risk users who are scheduled, recommended safe replacements, and action summaries.

Example Skills

Pre-built Claude Code skills:

🚨 Rootly Incident Responder

This skill:

  • Analyzes production incidents with full context

  • Finds similar historical incidents using ML-based similarity matching

  • Suggests solutions based on past successful resolutions

  • Coordinates with on-call teams across timezones

  • Correlates incidents with recent code changes and deployments

  • Creates action items and remediation plans

  • Provides confidence scores and time estimates

Quick Start:

# Copy the skill to your project
mkdir -p .claude/skills
cp examples/skills/rootly-incident-responder.md .claude/skills/

# Then in Claude Code, invoke it:
# @rootly-incident-responder analyze incident #12345

It demonstrates a full incident response workflow using Rootly tools and GitHub context.

On-Call Shift Metrics

Get on-call shift metrics for any time period, grouped by user, team, or schedule. Includes primary/secondary role tracking, shift counts, hours, and days on-call.

get_oncall_shift_metrics(
    start_date="2025-10-01",
    end_date="2025-10-31",
    group_by="user"
)

On-Call Handoff Summary

Complete handoff: current/next on-call + incidents during shifts.

# All on-call (any timezone)
get_oncall_handoff_summary(team_ids="team-1,team-2", timezone="America/Los_Angeles")

# Regional filter - only show APAC on-call during APAC business hours
get_oncall_handoff_summary(timezone="Asia/Tokyo", filter_by_region=True)

Regional filtering shows only people on-call during business hours (9am-5pm) in the specified timezone.

Returns: schedules with current_oncall, next_oncall, and shift_incidents

MCP Resources for Context

AI agents can access these resources for situational awareness:

  • incident://{incident_id} - Detailed incident information for specific incidents

  • team://{team_id} - Team details including name, color, and metadata

  • rootly://incidents - List of recent incidents for quick reference

  • rootly://oncall-status - Current on-call status across all schedules (critical for incident response)

  • rootly://workflow-guide - Step-by-step workflow guidance for common operations

Example usage: "Check the current on-call status" → AI reads rootly://oncall-status resource

Shift Incidents

Incidents during a time period, with filtering by severity/status/tags.

get_shift_incidents(
    start_time="2025-10-20T09:00:00Z",
    end_time="2025-10-20T17:00:00Z",
    severity="critical",  # optional
    status="resolved",  # optional
    tags="database,api",  # optional
)

Returns: incidents list + summary (counts, avg resolution time, grouping)

Contributing

See CONTRIBUTING.md for developer setup and guidelines.

Play with it on Postman

About Rootly AI Labs

This project was developed by Rootly AI Labs, where we're building the future of system reliability and operational excellence. As an open-source incubator, we share ideas, experiment, and rapidly prototype solutions that benefit the entire community. Rootly AI logo

Available Tools

274 tools
attach_alertAttach AlertC

Attach alerts to an incident from provided data

Inputs: data (required), incident_id (required). Returns: object

cancel_investigationCancel InvestigationB
DestructiveIdempotent

Cancel a running investigation.

Inputs: investigation_id (required). Returns: object

check_oncall_health_riskCheck Oncall Health RiskA
Read-only

Check if any at-risk responders (based on On-Call Health analysis) are scheduled for on-call.

Integrates with On-Call Health (oncallhealth.ai) to identify responders with elevated workload health risk and checks if they are scheduled during the specified period. Optionally recommends safe replacement responders.

Privacy: This tool surfaces identifiable employee workload health data from On-Call Health. It is an opt-in feature — an administrator must explicitly configure the ONCALLHEALTH_API_KEY environment variable to enable it.

Available only in self-hosted deployments. Requires ONCALLHEALTH_API_KEY environment variable.

Inputs: end_date (required), start_date (required), och_threshold, och_analysis_id, +1 more. Returns: object

check_responder_availabilityCheck Responder AvailabilityA
Read-only

Check if specific users are scheduled for on-call in a date range.

Use this to verify if at-risk users (from On-Call Health) are scheduled, or to check availability before assigning new shifts.

Returns scheduled users with their shifts and total hours, plus users who are not scheduled. Shift times and hours are clipped to the requested window; date-only end dates include that entire UTC day.

Inputs: end_date (required), user_ids (required), start_date (required). Returns: object

collect_incidentsCollect IncidentsA
Read-only

Collect a bounded working set of incidents across multiple pages for audits and analysis.

Use this instead of list_incidents when you want a compact batch of incidents in one tool call, while keeping payload size under control.

Argument caps: max_results <= 100, batch_size between 10 and 100. Values outside those bounds are clamped and reported, not rejected.

Inputs: sort, query, teams, status, +8 more. Returns: object

count_observability_logsCount Observability LogsA
Read-only

Count logs matching a Logs explorer query, grouped by service, index, severity or an attribute key (@http.status_code). Answers questions like "errors per service in the last 6h" (filter[query]=severity:error, filter[from]=now-6h, group_by=service). Values are ordered by count, largest first; meta.total counts every matching log, and each value's logs_query drills into its rows with GET /v1/observability/logs (null for a blank value, which the query syntax cannot select, or when the drill-down would exceed the query limits: 512 characters or 20 clauses). A log can carry an attribute key more than once (log, resource and scope attributes), so attribute counts can add up to more than meta.total; when logs match but none have the attribute, data is empty and meta.warnings has code attribute_missing. Requires a personal or Global API key (Team API Keys are group-scoped and get 403 unsupported_api_key) or an OAuth token with the obs.logs:read (or all) scope, and the Observability logs read permission. A Global API key uses its service user's Observability role, which starts as the team's default Observability role. Limited to 60 requests per minute per token; on this endpoint the X-RateLimit-* headers report that per-minute budget, not the default API limit. Every 429 returns the errors envelope with code rate_limited and a Retry-After header.

Inputs: group_by, filter_to, page_size, filter_from, +1 more. Returns: object

create_alertCreate AlertC

Creates a new alert from provided data

Inputs: data (required). Returns: object

create_alert_eventCreate Alert EventC

Creates a new alert event

Inputs: alert_id (required), data. Returns: object

create_alert_groupCreate Alert GroupB

Creates a new alert group. Note: For enhanced functionality and future compatibility, consider using the advanced alert grouping with conditions field instead of the legacy group_by_alert_title, group_by_alert_urgency, and attributes fields.

Inputs: data (required). Returns: object

create_alert_routeCreate Alert RouteB

Creates a new alert route from provided data. Note: This endpoint requires access to Advanced Alert Routing. If you're unsure whether you have access to this feature, please contact Rootly customer support.

Asynchronous Rule Creation

For organizations with large numbers of routing rules, Rootly supports asynchronous rule processing to improve performance. When enabled, rule creation happens in the background.

Asynchronous processing is also applied automatically, whether or not it is enabled for your organization, when a request carries a rule graph too large to save within the request timeout. Size is measured in total dependent records — rules plus their condition groups, conditions and destinations — and for an update it includes the rules already on the route, not just those in the payload.

Important: Whenever rules are processed asynchronously, the rules list in the API response will not be up-to-date immediately after creation. You should refetch the alert route, or poll the async rule creation status endpoint with the request_id you supplied, to confirm the rules have landed.

If you experience slow operations when managing alert routes with many rules, contact Rootly customer support to enable asynchronous rule processing for your organization.

Inputs: data. Returns: object

create_alert_routing_ruleCreate Alert Routing RuleA

Creates a new alert routing rule from provided data. Note: If you are an advanced alert routing user, you should use the Alert Routes endpoint instead of this endpoint. If you don't know whether you are an advanced user, please contact Rootly customer support.

Inputs: data (required). Returns: object

create_alerts_sourceCreate Alerts SourceC

Creates a new alert source from provided data

Inputs: data (required). Returns: object

create_alert_urgencyCreate Alert UrgencyD

Creates a new alert urgency from provided data

Inputs: data (required). Returns: object

create_catalogCreate CatalogC

Creates a new catalog from provided data

Inputs: data (required). Returns: object

create_catalog_entityCreate Catalog EntityC

Creates a new Catalog Entity from provided data

Inputs: data (required), catalog_id (required). Returns: object

create_catalog_entity_propertyCreate Catalog Entity PropertyA

Deprecated: This endpoint is deprecated, please use the fields attribute on catalog entities or native catalog endpoints (teams, services, functionalities, incident_types, causes, environments) to set field values instead.

Creates a new Catalog Entity Property from provided data.

Inputs: data (required), catalog_entity_id (required). Returns: object

create_catalog_propertyCreate Catalog PropertyC

Creates a new Catalog Property - returns catalog_properties type

Inputs: data (required), catalog_id (required).

create_causeCreate CauseC

Creates a new cause from provided data

Inputs: data (required). Returns: object

create_custom_fieldCreate Custom FieldB

[DEPRECATED] Use form field endpoints instead. Creates a new custom field from provided data

Inputs: data (required). Returns: object

create_custom_formCreate Custom FormC

Creates a new custom form from provided data

Inputs: data (required). Returns: object

create_dashboardCreate DashboardC

Creates a new dashboard from provided data

Inputs: data (required). Returns: object

create_environmentCreate EnvironmentC

Creates a new environment from provided data

Inputs: data (required). Returns: object

create_escalation_levelCreate Escalation LevelC

Creates a new escalation level from provided data

Inputs: data (required), escalation_policy_id (required). Returns: object

create_escalation_level_pathsCreate Escalation Level PathsC

Creates a new escalation level from provided data

Inputs: data (required), escalation_policy_path_id (required). Returns: object

create_escalation_pathCreate Escalation PathC

Creates a new escalation path from provided data

Inputs: data (required), escalation_policy_id (required). Returns: object

create_escalation_policyCreate Escalation PolicyC

Creates a new escalation policy from provided data

Inputs: data (required). Returns: object

create_form_fieldCreate Form FieldC

Creates a new form_field from provided data

Inputs: data (required). Returns: object

create_form_field_optionCreate Form Field OptionC

Creates a new form_field_option from provided data

Inputs: data (required), form_field_id (required). Returns: object

create_form_setCreate Form SetC

Creates a new form_set from provided data

Inputs: data (required). Returns: object

create_functionalityCreate FunctionalityC

Creates a new functionality from provided data

Inputs: data (required). Returns: object

create_heartbeatCreate HeartbeatC

Creates a new heartbeat from provided data

Inputs: data (required). Returns: object

create_incidentCreate IncidentC

Create an incident with a scoped set of fields for agent-driven workflows.

Inputs: title, summary, team_ids, service_ids, +3 more. Returns: object

create_incident_action_itemCreate Incident Action ItemC

Creates a new action item from provided data

Inputs: data (required), incident_id (required). Returns: object

create_incident_custom_field_selectionCreate Incident Custom Field SelectionA

[DEPRECATED] Use form field endpoints instead. Creates a new incident custom field selection from provided data

Inputs: data (required), incident_id (required). Returns: object

create_incident_eventCreate Incident EventC

Creates a new event from provided data

Inputs: data (required), incident_id (required). Returns: object

create_incident_form_field_selectionCreate Incident Form Field SelectionC

Creates a new incident form field selection from provided data

Inputs: data (required), incident_id (required). Returns: object

create_incident_typeCreate Incident TypeC

Creates a new incident_type from provided data

Inputs: data (required). Returns: object

create_live_call_routerCreate Live Call RouterC

Creates a new Live Call Router from provided data

Inputs: data (required). Returns: object

create_on_call_roleCreate On Call RoleC

Creates a new On-Call Role from provided data

Inputs: data (required). Returns: object

create_on_call_shadowCreate On Call ShadowC

Creates a new on call shadow configuration from provided data

Inputs: data (required), schedule_id (required). Returns: object

create_override_recommendationCreate Override RecommendationA
Read-only

Recommend replacement responders for an override shift.

Finds users in the same schedule rotation who are not already heavily loaded during the period.

Returns recommended replacements sorted by current load (lowest first), plus a ready-to-use override payload for the top recommendation.

Inputs: end_date (required), start_date (required), schedule_id (required), original_user_id (required), +1 more. Returns: object

create_override_shiftCreate Override ShiftC

Creates a new override shift from provided data. If any existing override shifts overlap with the specified time range, they will be automatically deleted and replaced by the new override. This endpoint is idempotent: re-sending an identical override (same user and same start/end time) returns the existing override with a 200 status and does not recreate it.

Inputs: data (required), schedule_id (required). Returns: object

create_playbookCreate PlaybookC

Creates a new playbook from provided data

Inputs: data (required). Returns: object

create_pulseCreate PulseC

Creates a new pulse from provided data

Inputs: data (required). Returns: object

create_retrospective_processCreate Retrospective ProcessC

Creates a new retrospective process from provided data

Inputs: data (required). Returns: object

create_scheduleCreate ScheduleC

Creates a new schedule from provided data

Inputs: data (required). Returns: object

create_schedule_rotationCreate Schedule RotationC

Creates a new schedule rotation from provided data

Inputs: data (required), schedule_id (required). Returns: object

create_schedule_rotation_active_dayCreate Schedule Rotation Active DayC

Creates a new schedule rotation active day from provided data

Inputs: data (required), schedule_rotation_id (required). Returns: object

create_schedule_rotation_userCreate Schedule Rotation UserC

Creates a new schedule rotation user from provided data

Inputs: schedule_rotation_id (required), data. Returns: object

create_serviceCreate ServiceC

Creates a new service from provided data

Inputs: data (required). Returns: object

create_severityCreate SeverityC

Creates a new severity from provided data

Inputs: data (required). Returns: object

create_status_pageCreate Status PageC

Creates a new status page from provided data

Inputs: data (required). Returns: object

create_status_page_templateCreate Status Page TemplateC

Creates a new template from provided data

Inputs: body (required), title (required), created_at (required), updated_at (required), +8 more. Returns: object

create_sub_statusCreate Sub StatusC

Creates a new Sub-Status from provided data

Inputs: data (required). Returns: object

create_teamCreate TeamC

Creates a new team from provided data

Inputs: data (required). Returns: object

create_user_email_addressCreate User Email AddressC

Creates a new user email address from provided data

Inputs: data (required), user_id (required). Returns: object

create_user_notification_ruleCreate User Notification RuleC

Creates a new user notification rule from provided data

Inputs: data (required), user_id (required). Returns: object

create_user_phone_numberCreate User Phone NumberC

Creates a new user phone number from provided data

Inputs: data (required), user_id (required). Returns: object

create_workflowCreate WorkflowD

Creates a new workflow from provided data

Inputs: data (required). Returns: object

create_workflow_form_field_conditionCreate Workflow Form Field ConditionC

Creates a new workflow form field condition from provided data

Inputs: data (required), workflow_id (required). Returns: object

create_workflow_groupCreate Workflow GroupC

Creates a new workflow group from provided data

Inputs: data (required). Returns: object

create_workflow_runCreate Workflow RunC

Creates a new workflow run from provided data

Inputs: data (required), workflow_id (required). Returns: object

create_workflow_taskCreate Workflow TaskC

Creates a new workflow task from provided data

Inputs: data (required), workflow_id (required). Returns: object

get_alertGet AlertC
Read-only

Retrieves a specific alert by id

Inputs: id (required), fields_alerts (required), include. Returns: object

get_alert_by_short_idGet Alert By Short IdA
Read-only

Get alert details by short_id or alert URL. Use this when a user pastes an alert URL or short_id from a pager notification and wants to investigate the alert.

Inputs: short_id (required). Returns: object

get_alert_eventGet Alert EventA
Read-only

Retrieves a specific alert_event by id

Inputs: id (required). Returns: object

get_alert_groupGet Alert GroupB
Read-only

Retrieves a specific alert group by id

Inputs: id (required). Returns: object

get_alert_routeGet Alert RouteA
Read-only

Get a specific alert route by id. Note: This endpoint requires access to Advanced Alert Routing. If you're unsure whether you have access to this feature, please contact Rootly customer support.

Optional Parameters

  • show_nested_ids (query parameter): When set to true, the response will include IDs for all nested resources (destinations, condition_groups, conditions). This is useful when you need to reference these nested resources for updates or deletions via PATCH requests.

Example: GET /v1/alert_routes/{id}?show_nested_ids=true

Inputs: id (required), show_nested_ids. Returns: object

get_alert_routing_ruleGet Alert Routing RuleA
Read-only

Retrieves a specific alert routing rule by id. Note: If you are an advanced alert routing user, you should use the Alert Routes endpoint instead of this endpoint. If you don't know whether you are an advanced user, please contact Rootly customer support.

Inputs: id (required). Returns: object

get_alerts_sourceGet Alerts SourceC
Read-only

Retrieves a specific alert source by id

Inputs: id (required). Returns: object

get_alert_urgencyGet Alert UrgencyB
Read-only

Retrieves a specific alert urgency by id

Inputs: id (required). Returns: object

get_catalogGet CatalogC
Read-only

Retrieves a specific catalog by id

Inputs: id (required). Returns: object

get_catalog_entityGet Catalog EntityB
Read-only

Retrieves a specific Catalog Entity by id

Inputs: id (required), include. Returns: object

get_catalog_entity_propertyGet Catalog Entity PropertyA
Read-only

Deprecated: This endpoint is deprecated, please use include=fields on catalog entities or native catalog endpoints (teams, services, functionalities, incident_types, causes, environments) to retrieve field values instead.

Retrieves a specific Catalog Entity Property by id.

Inputs: id (required), include. Returns: object

get_catalog_propertyGet Catalog PropertyB
Read-only

Retrieves a specific Catalog Property by id - returns catalog_properties type

Inputs: id (required).

get_causeGet CauseC
Read-only

Retrieves a specific cause by id

Inputs: id (required). Returns: object

get_current_userGet Current UserC
Read-only

Get current user

Inputs: no named parameters. Returns: object

get_custom_fieldGet Custom FieldC
Read-only

Retrieves a specific custom_field by id

Inputs: id (required), include. Returns: object

get_custom_field_optionGet Custom Field OptionA
Read-only

[DEPRECATED] Use form field endpoints instead. Retrieves a specific custom field option by id

Inputs: id (required). Returns: object

get_custom_formGet Custom FormB
Read-only

Retrieves a specific custom form by id

Inputs: id (required). Returns: object

get_dashboardGet DashboardC
Read-only

Retrieves a specific dashboard by id

Inputs: id (required), include. Returns: object

get_dashboard_panelGet Dashboard PanelB
Read-only

Retrieves a specific dashboard panel by id

Inputs: id (required), range, period, time_zone. Returns: object

get_environmentGet EnvironmentC
Read-only

Retrieves a specific environment by id

Inputs: id (required). Returns: object

get_escalation_levelGet Escalation LevelC
Read-only

Retrieves a specific escalation level by id

Inputs: id (required). Returns: object

get_escalation_pathGet Escalation PathC
Read-only

Retrieves a specific escalation path by id

Inputs: id (required), include. Returns: object

get_escalation_policyGet Escalation PolicyB
Read-only

Retrieves a specific escalation policy by id

Inputs: id (required), include. Returns: object

get_form_fieldGet Form FieldC
Read-only

Retrieves a specific form_field by id

Inputs: id (required), include. Returns: object

get_form_field_optionGet Form Field OptionA
Read-only

Retrieves a specific form_field_option by id

Inputs: id (required). Returns: object

get_form_field_placementGet Form Field PlacementC
Read-only

Retrieves a specific form_field_placement by id

Inputs: id (required). Returns: object

get_form_field_placement_conditionGet Form Field Placement ConditionB
Read-only

Retrieves a specific form_field_placement_condition by id

Inputs: id (required). Returns: object

get_form_setGet Form SetC
Read-only

Retrieves a specific form_set by id

Inputs: id (required). Returns: object

get_form_set_conditionGet Form Set ConditionC
Read-only

Retrieves a specific form_set_condition by id

Inputs: id (required). Returns: object

get_functionalityGet FunctionalityC
Read-only

Retrieves a specific functionality by id

Inputs: id (required). Returns: object

get_functionality_incidents_chartGet Functionality Incidents ChartC
Read-only

Get functionality incidents chart

Inputs: id (required), period (required), include, page_size, +2 more. Returns: object

get_functionality_uptime_chartGet Functionality Uptime ChartC
Read-only

Get functionality uptime chart

Inputs: id (required), period. Returns: object

get_heartbeatGet HeartbeatB
Read-only

Retrieves a specific heartbeat by id

Inputs: id (required). Returns: object

get_incidentGet IncidentA
Read-only

Retrieve a single incident with PIR-related fields for direct verification.

Inputs: incident_id (required). Returns: object

get_incident_action_itemsGet Incident Action ItemsC
Read-only

Retrieves a specific incident_action_item by id

Inputs: id (required). Returns: object

get_incident_custom_field_selectionGet Incident Custom Field SelectionA
Read-only

[DEPRECATED] Use form field endpoints instead. Retrieves a specific incident custom field selection by id

Inputs: id (required), include, fields_incidents. Returns: object

get_incident_form_field_selectionGet Incident Form Field SelectionC
Read-only

Retrieves a specific incident form field selection by id

Inputs: id (required), include, fields_incidents. Returns: object

get_incident_meeting_transcriptsGet Incident Meeting TranscriptsA
Read-only

Read what was said on an incident's calls (Rootly Meeting Scribe).

Returns the spoken transcript of each recorded call for the incident, as text per speaker turn, alongside Scribe's own summary. Covers Google Meet, Zoom and Microsoft Teams calls that Scribe recorded.

Use this to catch up on a call you missed, or to pull decisions and actions out of an incident bridge. Recordings where nobody spoke are skipped rather than returned empty.

Inputs: incident_id (required), max_recordings. Returns: object

get_incident_retrospectiveGet Incident RetrospectiveA
Read-only

Fetch the written retrospective for one incident.

Answers "what did we learn from INC-4460" in a single call. Returns the document's title, content and status alongside the incident it belongs to, and reports the incident's retrospective progress so a blank document is distinguishable from one nobody has started.

The route exists only in this direction: /post_mortems cannot be filtered by incident, and the document carries no reference back to one, so the id has to come from the incident's own relationship. Doing that here keeps a caller from having to know it. Use list_incident_post_mortems to search across retrospectives instead.

Inputs: incident_id (required). Returns: object

get_incident_retrospective_stepGet Incident Retrospective StepB
Read-only

Retrieves a specific incident retrospective step by id

Inputs: id (required), include, fields_incidents. Returns: object

get_incident_sub_statusGet Incident Sub StatusC
Read-only

Retrieves a specific incident_sub_status by id

Inputs: id (required), include, fields_incidents. Returns: object

get_incident_typeGet Incident TypeB
Read-only

Retrieves a specific incident_type by id

Inputs: id (required), include, fields_incidents. Returns: object

get_investigationGet InvestigationA
Read-only

Get an investigation's verdict: summary, root cause, confidence, hypotheses, evidence, causal chain and open_questions (what Rootly couldn't verify, so you can check them with tools only you have).

Inputs: alert_id, incident_id, investigation_id. Returns: object

get_investigation_progressGet Investigation ProgressA
Read-only

Follow a running investigation. Returns new steps and tool calls since after_cursor, waiting up to wait_seconds for them. Keep calling with after_cursor=next_cursor until done is true.

Inputs: investigation_id (required), after_cursor, wait_seconds. Returns: object

get_live_call_routerGet Live Call RouterB
Read-only

Retrieves a specific Live Call Router by id

Inputs: id (required). Returns: object

get_meeting_recordingGet Meeting RecordingB
Read-only

Retrieve a single meeting recording session including its status, duration, speaker count, word count, and transcript summary.

Inputs: id (required), include. Returns: object

get_oncall_handoff_summaryGet Oncall Handoff SummaryA
Read-only

Get current on-call handoff summary. Shows who's currently on-call and who's next. Optionally fetch incidents (set include_incidents=True, but slower). Each responder's role is their On-Call role (e.g. Responder, Admin); shifts themselves carry no role.

Use filter_by_region=True with a timezone to see only people on-call during business hours in that region (e.g., timezone='Asia/Tokyo', filter_by_region=True shows only APAC on-call during APAC business hours).

Useful for:

  • Quick on-call status checks

  • Daily handoff meetings

  • Regional on-call status (APAC, EU, Americas)

  • Team coordination across timezones

Inputs: team_ids, timezone, schedule_ids, filter_by_region, +1 more. Returns: object

get_on_call_roleGet On Call RoleB
Read-only

Retrieves a specific On-Call Role by id

Inputs: id (required). Returns: object

get_oncall_schedule_summaryGet Oncall Schedule SummaryA
Read-only

Get compact on-call schedule summary for a date range.

Returns one entry per user per schedule (not raw shifts), with aggregated hours. Optimized for AI agent context windows.

Use this instead of list_shifts when you need:

  • Aggregated hours per responder

  • Schedule coverage overview

  • Responder load analysis with warnings

One row per user per schedule, so the response stays the same size whether the range is a week or a year. For individual shift times, or for one person's schedule, use list_shifts instead.

Ranges longer than the upstream cap are split into windows and merged automatically.

Inputs: end_date (required), start_date (required), team_ids, schedule_ids, +1 more. Returns: object

get_on_call_shadowGet On Call ShadowA
Read-only

Retrieves a specific On Call Shadow configuration by ID

Inputs: id (required). Returns: object

get_oncall_shift_metricsGet Oncall Shift MetricsA
Read-only

📊 Get on-call workload metrics and shift statistics - ESSENTIAL for fairness and planning.

WHEN TO USE: • Monthly/quarterly reviews of on-call distribution • Before adjusting schedules to ensure fair workload • For management reporting on on-call burden • When investigating potential on-call burnout

Returns shift counts, total hours, and statistics grouped by user, schedule, or team.

Examples:

  • Monthly report: start_date='2025-10-01', end_date='2025-10-31'

  • Specific user: start_date='2025-10-01', end_date='2025-10-31', user_ids='123,456'

  • Specific team: team_ids='team-1' (will query schedules for that team first)

Inputs: end_date (required), start_date (required), group_by, team_ids, +2 more. Returns: object

get_override_shiftGet Override ShiftA
Read-only

Retrieves a specific override shift by id

Inputs: id (required). Returns: object

get_playbookGet PlaybookC
Read-only

Retrieves a specific playbook by id

Inputs: id (required), include. Returns: object

get_playbook_taskGet Playbook TaskC
Read-only

Retrieves a specific playbook_task by id

Inputs: id (required). Returns: object

get_pulseGet PulseA
Read-only

Retrieves a specific pulse by id

Inputs: id (required). Returns: object

get_retrospective_processGet Retrospective ProcessC
Read-only

Retrieves a specific retrospective process by id

Inputs: id (required), include. Returns: object

get_retrospective_process_groupGet Retrospective Process GroupC
Read-only

Retrieves a specific Retrospective Process Group by id

Inputs: id (required), include. Returns: object

get_retrospective_stepGet Retrospective StepB
Read-only

Retrieves a specific retrospective step by id

Inputs: id (required). Returns: object

get_scheduleGet ScheduleC
Read-only

Retrieves a specific schedule by id

Inputs: id (required). Returns: object

get_schedule_rotationGet Schedule RotationC
Read-only

Retrieves a specific schedule rotation by id

Inputs: id (required). Returns: object

get_schedule_shiftsGet Schedule ShiftsA
Read-only

List shifts for one schedule over a date range.

Replaces the generated getScheduleShifts, which passed the range straight through and failed with Datetime range exceeds 1 month on anything longer than the upstream accepts. Ranges longer than that are split into windows and merged here, so a two-month question is a normal request.

Use list_shifts instead when the question spans schedules or filters by user.

Inputs: id (required), end_date, start_date. Returns: object

get_server_versionGet Server VersionA
Read-only

Get the Rootly MCP server version.

Returns the current version of the deployed MCP server. Useful for checking if the server has been updated.

Inputs: no named parameters. Returns: object

get_serviceGet ServiceC
Read-only

Retrieves a specific service by id

Inputs: id (required). Returns: object

get_service_incidents_chartGet Service Incidents ChartC
Read-only

Get service incidents chart

Inputs: id (required), period (required), include, page_size, +2 more. Returns: object

get_service_uptime_chartGet Service Uptime ChartC
Read-only

Get service uptime chart

Inputs: id (required), period. Returns: object

get_severityGet SeverityB
Read-only

Retrieves a specific severity by id

Inputs: id (required). Returns: object

get_shift_coverage_requestGet Shift Coverage RequestC
Read-only

Retrieves a specific shift coverage request.

Inputs: id (required). Returns: object

get_shift_incidentsGet Shift IncidentsB
Read-only

Get incidents and alerts that occurred during a specific shift or time period.

Useful for:

  • Shift handoff summaries showing what happened during the shift

  • Post-shift debriefs and reporting

  • Incident analysis by time period

  • Understanding team workload during specific shifts

Returns incident details including severity, status, duration, and basic summary.

Inputs: end_time (required), start_time (required), tags, status, +2 more. Returns: object

get_status_pageGet Status PageC
Read-only

Retrieves a specific status page by id

Inputs: id (required). Returns: object

get_status_page_templateGet Status Page TemplateB
Read-only

Retrieves a specific status_page_template by id

Inputs: id (required). Returns: object

get_sub_statusGet Sub StatusC
Read-only

Retrieves a specific Sub-Status by id

Inputs: id (required). Returns: object

get_teamGet TeamC
Read-only

Retrieves a specific team by id

Inputs: id (required), include. Returns: object

get_team_incidents_chartGet Team Incidents ChartC
Read-only

Get team incidents chart

Inputs: id (required), period (required), include, page_size, +2 more. Returns: object

get_userGet UserC
Read-only

Retrieves a specific user by id

Inputs: id (required), include. Returns: object

get_user_email_addressesGet User Email AddressesB
Read-only

Retrieves all email addresses for the specified user

Inputs: user_id (required). Returns: object

get_user_phone_numbersGet User Phone NumbersA
Read-only

Retrieves all phone numbers for the specified user

Inputs: user_id (required). Returns: object

get_workflowGet WorkflowC
Read-only

Retrieves a specific workflow by id

Inputs: id (required), include. Returns: object

get_workflow_form_field_conditionGet Workflow Form Field ConditionC
Read-only

Retrieves a specific workflow form field condition by id

Inputs: id (required). Returns: object

get_workflow_groupGet Workflow GroupC
Read-only

Retrieves a specific workflow group by id

Inputs: id (required). Returns: object

get_workflow_taskGet Workflow TaskB
Read-only

Retrieves a specific workflow_task by id

Inputs: id (required). Returns: object

list_alert_eventsList Alert EventsC
Read-only

List alert_events

Inputs: alert_id (required), fields_alerts (required), include, page_size, +21 more. Returns: object

list_alert_groupsList Alert GroupsD
Read-only

List alert groups

Inputs: include, filter_name_eq, filter_name_in, filter_slug_eq, +5 more. Returns: object

list_alert_routesList Alert RoutesB
Read-only

List all alert routes for the current team with filtering and pagination. Note: This endpoint requires access to Advanced Alert Routing. If you're unsure whether you have access to this feature, please contact Rootly customer support.

Inputs: sort, page_size, filter_name, page_number, +9 more. Returns: object

list_alert_routing_rulesList Alert Routing RulesB
Read-only

List alert routing rules. Note: If you are an advanced alert routing user, you should use the Alert Routes endpoint instead of this endpoint. If you don't know whether you are an advanced user, please contact Rootly customer support.

Inputs: sort, include, page_size, filter_name, +14 more. Returns: object

list_alertsList AlertsD
Read-only

List alerts

Inputs: fields_alerts (required), include, page_size, page_after, +47 more. Returns: object

list_alerts_sourcesList Alerts SourcesD
Read-only

List alert sources

Inputs: sort, include, page_size, filter_name, +5 more. Returns: object

list_alert_urgenciesList Alert UrgenciesD
Read-only

List alert urgencies

Inputs: sort, include, page_size, filter_name, +10 more. Returns: object

list_all_incident_action_itemsList All Incident Action ItemsC
Read-only

List all action items for an organization

Inputs: sort, include, page_size, filter_kind, +32 more. Returns: object

list_all_meeting_recordingsList All Meeting RecordingsA
Read-only

List meeting recordings across the organization. Returns the current user's standalone recordings plus incident-backed recordings the user can access. Supports filtering by status, platform, and created_by.

Inputs: status, platform, created_by. Returns: object

list_auditsList AuditsA
Read-onlyIdempotent

Read the Rootly audit log: who changed which configuration object, when, and what changed.

Each record carries the action, the acting user, the source, and the before-and-after value of every modified field. Use it to answer "who changed this escalation policy", "what did this workflow look like before", or to collect change evidence for a compliance review.

Covers roughly 60 resource types at the object level and is retained indefinitely. Two limits worth knowing: schedule rotations, escalation levels and shift overrides are not audited, and sign-in events are kept separately from this log.

Returns a single page of at most 25 records, newest first, alongside total_matching so a wider search can be narrowed with the filters. It does not walk the whole log, so a full compliance export belongs on the REST endpoint rather than here.

Requires an API token whose role has the "Audits - read" permission.

Inputs: since, until, source, user_id, +4 more. Returns: object

list_catalog_entitiesList Catalog EntitiesD
Read-only

List Catalog Entities

Inputs: catalog_id (required), sort, include, page_size, +23 more. Returns: object

list_catalog_entity_propertiesList Catalog Entity PropertiesA
Read-only

Deprecated: This endpoint is deprecated, please use include=fields on catalog entities or native catalog endpoints (teams, services, functionalities, incident_types, causes, environments) to retrieve field values instead.

List Catalog Entity Properties.

Inputs: catalog_entity_id (required), sort, include, page_size, +7 more. Returns: object

list_catalog_propertiesList Catalog PropertiesC
Read-only

List Catalog Properties - returns catalog_properties type

Inputs: catalog_id (required).

list_catalogsList CatalogsD
Read-only

List catalogs

Inputs: sort, include, page_size, filter_name, +21 more. Returns: object

list_causesList CausesD
Read-only

List causes

Inputs: include, page_size, filter_name, filter_slug, +14 more. Returns: object

list_custom_fieldsList Custom FieldsB
Read-only

[DEPRECATED] Use form field endpoints instead. List Custom fields

Inputs: sort, include, page_size, filter_kind, +24 more. Returns: object

list_custom_formsList Custom FormsD
Read-only

List custom forms

Inputs: sort, page_size, filter_name, filter_slug, +7 more. Returns: object

list_dashboardsList DashboardsD
Read-only

List dashboards

Inputs: include, page_size, page_number. Returns: object

list_endpointsList EndpointsA
Read-only

List all available Rootly API endpoints with their descriptions.

Inputs: no named parameters.

list_environmentsList EnvironmentsD
Read-only

List environments

Inputs: sort, include, page_size, filter_name, +20 more. Returns: object

list_escalation_levelsList Escalation LevelsC
Read-only

List escalation levels

Inputs: escalation_policy_id (required), include, page_size, page_number. Returns: object

list_escalation_levels_pathsList Escalation Levels PathsC
Read-only

List escalation levels

Inputs: escalation_policy_path_id (required), include, page_size, page_number. Returns: object

list_escalation_pathsList Escalation PathsC
Read-only

List escalation paths

Inputs: escalation_policy_id (required), include, page_size, page_number, +1 more. Returns: object

list_escalation_policiesList Escalation PoliciesD
Read-only

List escalation policies

Inputs: include, page_size, filter_name, page_number, +14 more. Returns: object

list_form_field_optionsList Form Field OptionsD
Read-only

List form_field_options

Inputs: form_field_id (required), include, page_size, page_number, +2 more. Returns: object

list_form_fieldsList Form FieldsD
Read-only

List form_fields

Inputs: include, page_size, filter_kind, filter_name, +25 more. Returns: object

list_form_setsList Form SetsB
Read-only

List form_sets. Without filter[resource_type], returns incident form sets and, when Problem Management is enabled, problem form sets. Pass filter[resource_type]=incident to list only incident form sets.

Inputs: include, page_size, filter_slug, page_number, +6 more. Returns: object

list_functionalitiesList FunctionalitiesD
Read-only

List functionalities

Inputs: sort, include, page_size, filter_name, +19 more. Returns: object

list_heartbeatsList HeartbeatsD
Read-only

List heartbeats

Inputs: include, page_size, filter_name, filter_slug, +6 more. Returns: object

list_incident_action_itemsList Incident Action ItemsC
Read-only

List incident action items

Inputs: incident_id (required), include, page_size, page_number, +1 more. Returns: object

list_incident_alertsList Incident AlertsC
Read-only

List incident alerts

Inputs: incident_id (required), fields_alerts (required), include, page_size, +20 more. Returns: object

list_incident_custom_field_selectionsList Incident Custom Field SelectionsA
Read-only

[DEPRECATED] Use form field endpoints instead. List incident custom field selections

Inputs: incident_id (required), include, page_size, page_number, +1 more. Returns: object

list_incident_eventsList Incident EventsC
Read-only

List incident events

Inputs: incident_id (required), include, page_size, page_number, +1 more. Returns: object

list_incident_form_field_selectionsList Incident Form Field SelectionsC
Read-only

List incident form field selections

Inputs: incident_id (required), include, page_size, page_number, +1 more. Returns: object

list_incident_post_mortemsList Incident Post MortemsA
Read-only

Browse retrospectives across incidents.

Answers "the last five retrospectives", "published ones for this team since June", or "how many are still draft". Each result carries the document's analysis -- summary, causes, impact, actions. A recognised Timeline is dropped and the record says so with timeline_omitted, because a minute-by-minute log is a third of a document and rarely what a browse is after. What remains is still capped, and a record cut that way carries content_truncated with its real content_chars. Use get_incident_retrospective for one document whole, Timeline included and nothing cut.

Filtering happens upstream for status, severity, team, service and dates. Free-text search is not offered here because the API's search matches titles only, and titles are generated from the incident name -- it cannot find a retrospective by what it says. Use get_incident_retrospective when the incident is already known.

Inputs: sort, status, severity, team_ids, +5 more. Returns: object

list_incident_rolesList Incident RolesA
Read-only

List role assignments for an incident (who is Commander, Scribe, etc.).

Returns one entry per defined role with role metadata and the assigned user (or user_id: null for roles that are defined on the incident but not yet assigned). Use this to answer questions like "who is the incident commander?", "is there a postmortem owner?", or "list all roles for INC-4460".

Implementation note: this wraps GET /v1/incidents/{id}?include=roles and flattens the JSON:API included array of incident_role_assignments into a flat table so callers don't need to walk the relationships graph.

Inputs: incident_id (required). Returns: object

list_incidentsList IncidentsA
Read-only

🚨 List incidents with structured filters - ESSENTIAL for incident response.

WHEN TO USE: • During incident response to check for related ongoing incidents • For shift handoffs to review recent incidents by team/service • For post-incident analysis to find patterns by severity/date range • For audit workflows requiring specific filtering criteria

Use this when you need date-range, team, service, severity, or status filters. For simple text searches, prefer search_incidents instead.

Argument caps: page_size <= 100. Values outside the bounds are clamped and reported, not rejected.

Inputs: sort, query, teams, status, +8 more. Returns: object

list_incident_typesList Incident TypesD
Read-only

List incident types

Inputs: sort, include, page_size, filter_name, +20 more. Returns: object

list_investigationsList InvestigationsB
Read-only

List AI SRE investigations you can see, newest first.

Inputs: status, outcome, alert_id, page_size, +2 more. Returns: object

list_live_call_routersList Live Call RoutersD
Read-only

List Live Call Routers

Inputs: sort, include, page_size, filter_name, +7 more. Returns: object

list_meeting_recordingsList Meeting RecordingsA
Read-only

List all meeting recording sessions for an incident. Returns recordings sorted by session number. Each recording represents one bot session with its own transcript, status, and metadata.

Inputs: incident_id (required), include, page_size, page_number, +1 more. Returns: object

list_observability_logsList Observability LogsA
Read-only

Search Rootly Observability logs with the Logs explorer query syntax (service:, severity:, index:, trace_id:, @attribute:value, OR inside field groups, - negation, * prefix, free text). Rows are newest first, clipped and redacted. meta.query and meta.window echo the effective query and window. Requires a personal or Global API key (Team API Keys are group-scoped and get 403 unsupported_api_key) or an OAuth token with the obs.logs:read (or all) scope, and the Observability logs read permission. A Global API key uses its service user's Observability role, which starts as the team's default Observability role. Limited to 60 requests per minute per token; on this endpoint the X-RateLimit-* headers report that per-minute budget, not the default API limit. Every 429 returns the errors envelope with code rate_limited and a Retry-After header.

Inputs: filter_to, page_size, filter_from, page_cursor, +1 more. Returns: object

list_observability_patternsList Observability PatternsA
Read-only

List log patterns (clustered log templates) with counts against the previous window of the same length. Only service:, severity: and pattern: filters apply; others are echoed in meta.ignored_filters. Each pattern's logs_query drills into matching rows with GET /v1/observability/logs; it is omitted when that query would exceed the /logs length or clause limits. Requires a personal or Global API key (Team API Keys are group-scoped and get 403 unsupported_api_key) or an OAuth token with the obs.logs:read (or all) scope, and the Observability logs read permission. A Global API key uses its service user's Observability role, which starts as the team's default Observability role. Limited to 60 requests per minute per token; on this endpoint the X-RateLimit-* headers report that per-minute budget, not the default API limit. Every 429 returns the errors envelope with code rate_limited and a Retry-After header.

Inputs: sort, filter_to, page_size, filter_from, +2 more. Returns: object

list_on_call_rolesList On Call RolesC
Read-only

List On-Call Roles

Inputs: sort, include, page_size, filter_name, +7 more. Returns: object

list_on_call_shadowsList On Call ShadowsC
Read-only

List shadow shifts for schedule

Inputs: schedule_id (required), include, page_size, page_number. Returns: object

list_override_shiftsList Override ShiftsD
Read-only

List override shifts

Inputs: schedule_id (required), include, page_size, page_number. Returns: object

list_playbooksList PlaybooksD
Read-only

List playbooks

Inputs: include, page_size, page_number. Returns: object

list_pulsesList PulsesD
Read-only

List pulses

Inputs: include, page_size, filter_refs, page_number, +36 more. Returns: object

list_retrospective_processesList Retrospective ProcessesC
Read-only

List retrospective processes

Inputs: include, page_size, page_number. Returns: object

list_schedule_rotation_active_daysList Schedule Rotation Active DaysD
Read-only

List schedule rotation active days

Inputs: schedule_rotation_id (required), include, page_size, page_number. Returns: object

list_schedule_rotationsList Schedule RotationsD
Read-only

List schedule rotations

Inputs: schedule_id (required), sort, include, page_size, +1 more. Returns: object

list_schedule_rotation_usersList Schedule Rotation UsersC
Read-only

List schedule rotation users

Inputs: schedule_rotation_id (required), include, page_size, page_number. Returns: object

list_schedulesList SchedulesD
Read-only

List schedules

Inputs: include, page_size, filter_name, page_number, +14 more. Returns: object

list_servicesList ServicesD
Read-only

List services

Inputs: sort, include, page_size, filter_name, +29 more. Returns: object

list_severitiesList SeveritiesD
Read-only

List severities

Inputs: sort, include, page_size, filter_name, +25 more. Returns: object

list_shift_coverage_requestsList Shift Coverage RequestsB
Read-only

List active shift coverage requests for a schedule.

Inputs: schedule_id (required). Returns: object

list_shiftsList ShiftsA
Read-only

List on-call shifts with reliable filtering, enrichment, and MCP-level pagination.

Unlike the raw API, this tool:

  • Actually filters by user_ids (client-side filtering)

  • Includes user_name, user_email, schedule_name, team_name

  • Calculates total_hours for each shift

  • Returns a predictable paginated result for MCP clients

Use this instead of the auto-generated listShifts when you need user filtering or dependable pagination on large tenants.

Answers questions about individual shifts: who is on call at a given time, when a handoff happens, which shifts were overrides, or one person's schedule (via user_ids). For questions about totals across a team -- hours per responder, coverage, load -- use get_oncall_schedule_summary, whose response size depends on team size rather than on how long a range you asked for.

Ranges longer than the upstream cap are split into windows and merged automatically, so a multi-month range is a normal request.

Inputs: to_date (required), from_date (required), user_ids, page_size, +3 more. Returns: object

list_status_pagesList Status PagesD
Read-only

List status pages

Inputs: sort, include, page_size, filter_name, +15 more. Returns: object

list_status_page_templatesList Status Page TemplatesC
Read-only

List status page templates

Inputs: status_page_id (required), include, page_size, page_number. Returns: object

list_sub_statusesList Sub StatusesD
Read-only

List Sub-Statuses

Inputs: include, page_size, filter_name, filter_slug, +6 more. Returns: object

list_teamsList TeamsD
Read-only

List teams

Inputs: sort, include, page_size, filter_name, +34 more. Returns: object

list_user_notification_rulesList User Notification RulesC
Read-only

List user notification rules

Inputs: user_id (required), sort, include, page_size, +1 more. Returns: object

list_usersList UsersD
Read-only

List users

Inputs: sort, include, page_size, page_number, +6 more. Returns: object

list_workflow_form_field_conditionsList Workflow Form Field ConditionsC
Read-only

List workflow form field conditions

Inputs: workflow_id (required), include, page_size, page_number. Returns: object

list_workflow_groupsList Workflow GroupsD
Read-only

List workflow groups

Inputs: include, page_size, filter_kind, filter_name, +5 more. Returns: object

list_workflow_runsList Workflow RunsC
Read-only

List workflow runs

Inputs: workflow_id (required), include, page_size, page_number, +4 more. Returns: object

list_workflowsList WorkflowsD
Read-only

List workflows

Inputs: sort, include, page_size, filter_name, +15 more. Returns: object

list_workflow_tasksList Workflow TasksD
Read-only

List workflow tasks

Inputs: workflow_id (required), include, page_size, filter_name, +11 more. Returns: object

patch_alert_routePatch Alert RouteC
Idempotent

Updates an alert route. Note: This endpoint requires access to Advanced Alert Routing. If you're unsure whether you have access to this feature, please contact Rootly customer support.

Inputs: id (required), data (required). Returns: object

search_incidentsSearch IncidentsA
Read-only

Search incidents with flexible pagination control.

Use page_number=0 to fetch all matching results across multiple pages. Use page_number>0 to fetch a specific page.

max_results (also accepted as limit) caps how many incidents come back in either mode: across pages when page_number=0, and within the page otherwise. Left unset, a single page returns page_size incidents and page_number=0 stops at 5.

Argument caps: page_size <= 20, max_results <= 10. Values outside those bounds are clamped and reported, not rejected.

Inputs: query, page_size, max_results, page_number. Returns: object

start_investigationStart InvestigationA

Start an AI SRE investigation on one alert or incident. Then follow it with get_investigation_progress.

Inputs: rerun, alert_id, incident_id. Returns: object

suggest_solutionsSuggest SolutionsA
Read-only

💡 Get actionable solution recommendations from similar resolved incidents - KEY for incident response.

WHEN TO USE: • AFTER find_related_incidents to get specific resolution steps • When team is stuck on how to resolve the current incident • To speed up incident resolution with proven solutions • For training new responders on resolution patterns

Provide either incident_id OR title/description. Defaults to resolved incidents for solution mining.

Argument caps: max_solutions <= 10. Values outside the bounds are clamped and reported, not rejected.

Inputs: incident_id, max_solutions, status_filter, incident_title, +1 more. Returns: object

update_alertUpdate AlertD
Idempotent

Updates an alert

Inputs: id (required), data. Returns: object

update_alert_eventUpdate Alert EventA
Idempotent

Updates a specific alert event. Only alert events with kind 'note' (user-created notes) can be updated. System-generated events are immutable to maintain audit trail integrity.

Inputs: id (required), data. Returns: object

update_alert_groupUpdate Alert GroupB
Idempotent

Update a specific alert group by id. Note: For enhanced functionality and future compatibility, consider using the advanced alert grouping with conditions field instead of the legacy group_by_alert_title, group_by_alert_urgency, and attributes fields.

Inputs: id (required), data (required). Returns: object

update_alert_routeUpdate Alert RouteA
Idempotent

Update a specific alert route by id. Note: This endpoint requires access to Advanced Alert Routing. If you're unsure whether you have access to this feature, please contact Rootly customer support.

Asynchronous Rule Creation

For organizations with large numbers of routing rules, Rootly supports asynchronous rule processing to improve performance. When enabled, rule updates happen in the background.

Asynchronous processing is also applied automatically, whether or not it is enabled for your organization, when a request carries a rule graph too large to save within the request timeout. Size is measured in total dependent records — rules plus their condition groups, conditions and destinations — and includes the rules already on the route, not just those in the payload, so a small payload against a large route may still be processed asynchronously.

Important: Whenever rules are processed asynchronously, the rules list in the API response will not be up-to-date immediately after update. You should refetch the alert route, or poll the async rule creation status endpoint with the request_id you supplied, to confirm the rules have landed.

If you experience slow operations when managing alert routes with many rules, contact Rootly customer support to enable asynchronous rule processing for your organization.

Inputs: id (required), data (required). Returns: object

update_alert_routing_ruleUpdate Alert Routing RuleB
Idempotent

Update a specific alert routing rule by id. Note: If you are an advanced alert routing user, you should use the Alert Routes endpoint instead of this endpoint. If you don't know whether you are an advanced user, please contact Rootly customer support.

Inputs: id (required), data (required). Returns: object

update_alerts_sourceUpdate Alerts SourceC
Idempotent

Update a specific alert source by id

Inputs: id (required), data (required). Returns: object

update_alert_urgencyUpdate Alert UrgencyC
Idempotent

Update a specific alert urgency by id

Inputs: id (required), data (required). Returns: object

update_catalogUpdate CatalogC
Idempotent

Update a specific catalog by id

Inputs: id (required), data (required). Returns: object

update_catalog_entityUpdate Catalog EntityC
Idempotent

Update a specific Catalog Entity by id

Inputs: id (required), data (required). Returns: object

update_catalog_entity_propertyUpdate Catalog Entity PropertyA
Idempotent

Deprecated: This endpoint is deprecated, please use the fields attribute on catalog entities or native catalog endpoints (teams, services, functionalities, incident_types, causes, environments) to set field values instead.

Update a specific Catalog Entity Property by id.

Inputs: id (required), data (required). Returns: object

update_catalog_propertyUpdate Catalog PropertyC
Idempotent

Update a specific catalog_property by id - returns catalog_properties type

Inputs: id (required), data (required).

update_causeUpdate CauseC
Idempotent

Update a specific cause by id

Inputs: id (required), data (required). Returns: object

update_custom_fieldUpdate Custom FieldA
Idempotent

[DEPRECATED] Use form field endpoints instead. Update a specific custom field by id

Inputs: id (required), data (required). Returns: object

update_custom_field_optionUpdate Custom Field OptionA
Idempotent

[DEPRECATED] Use form field endpoints instead. Update a specific custom field option by id

Inputs: id (required), data (required). Returns: object

update_custom_formUpdate Custom FormC
Idempotent

Update a specific custom form by id

Inputs: id (required), data (required). Returns: object

update_dashboardUpdate DashboardC
Idempotent

Update a specific dashboard by id

Inputs: id (required), data (required). Returns: object

update_dashboard_panelUpdate Dashboard PanelC
Idempotent

Update a specific dashboard panel by id

Inputs: id (required), data (required). Returns: object

update_environmentUpdate EnvironmentC
Idempotent

Update a specific environment by id

Inputs: id (required), data (required). Returns: object

update_escalation_levelUpdate Escalation LevelB
Idempotent

Update a specific escalation level by id

Inputs: id (required), data (required). Returns: object

update_escalation_pathUpdate Escalation PathC
Idempotent

Update a specific escalation path by id

Inputs: id (required), data (required). Returns: object

update_escalation_policyUpdate Escalation PolicyC
Idempotent

Update a specific escalation policy by id

Inputs: id (required), data (required). Returns: object

update_form_fieldUpdate Form FieldC
Idempotent

Update a specific form_field by id

Inputs: id (required), data (required). Returns: object

update_form_field_optionUpdate Form Field OptionC
Idempotent

Update a specific form_field_option by id

Inputs: id (required), data (required). Returns: object

update_form_field_placementUpdate Form Field PlacementC
Idempotent

Update a specific form_field_placement by id

Inputs: id (required), data (required). Returns: object

update_form_field_placement_conditionUpdate Form Field Placement ConditionC
Idempotent

Update a specific form_field_placement_condition by id

Inputs: id (required), data (required). Returns: object

update_form_setUpdate Form SetC
Idempotent

Update a specific form_set by id

Inputs: id (required), data (required). Returns: object

update_form_set_conditionUpdate Form Set ConditionC
Idempotent

Update a specific form_set_condition by id

Inputs: id (required), data (required). Returns: object

update_functionalityUpdate FunctionalityC
Idempotent

Update a specific functionality by id

Inputs: id (required), data (required). Returns: object

update_heartbeatUpdate HeartbeatC
Idempotent

Update a specific heartbeat by id

Inputs: id (required), data (required). Returns: object

update_incidentUpdate IncidentA
Idempotent

Update native incident fields via PUT /v1/incidents/{id}.

Only the arguments you provide are sent, so unspecified fields — including the lifecycle status — are left untouched.

Inputs: incident_id (required), title, status, summary, +14 more. Returns: object

update_incident_action_itemUpdate Incident Action ItemC
Idempotent

Update a specific incident action item by id

Inputs: id (required), data (required). Returns: object

update_incident_custom_field_selectionUpdate Incident Custom Field SelectionA
Idempotent

[DEPRECATED] Use form field endpoints instead. Update a specific incident custom field selection by id

Inputs: id (required), data (required). Returns: object

update_incident_form_field_selectionUpdate Incident Form Field SelectionC
Idempotent

Update a specific incident form field selection by id

Inputs: id (required), data (required). Returns: object

update_incident_retrospective_stepUpdate Incident Retrospective StepC
Idempotent

Update a specific incident retrospective step by id

Inputs: id (required), data (required). Returns: object

update_incident_sub_statusUpdate Incident Sub StatusC
Idempotent

Update a specific incident_sub_status by id

Inputs: id (required), data (required). Returns: object

update_incident_typeUpdate Incident TypeC
Idempotent

Update a specific incident_type by id

Inputs: id (required), data (required). Returns: object

update_live_call_routerUpdate Live Call RouterC
Idempotent

Update a specific Live Call Router by id

Inputs: id (required), data (required). Returns: object

update_on_call_roleUpdate On Call RoleC
Idempotent

Update a specific On-Call Role by id

Inputs: id (required), data (required). Returns: object

update_on_call_shadowUpdate On Call ShadowC
Idempotent

Update a specific on call shadow configuration by id

Inputs: id (required), data (required). Returns: object

update_override_shiftUpdate Override ShiftC
Idempotent

Update a specific override shift by id

Inputs: id (required), data (required). Returns: object

update_playbookUpdate PlaybookC
Idempotent

Update a specific playbook by id

Inputs: id (required), data (required). Returns: object

update_playbook_taskUpdate Playbook TaskC
Idempotent

Update a specific playbook task by id

Inputs: id (required), data (required). Returns: object

update_pulseUpdate PulseC
Idempotent

Update a specific pulse by id

Inputs: id (required), data (required). Returns: object

update_retrospective_processUpdate Retrospective ProcessC
Idempotent

Updates a specific retrospective process by id

Inputs: id (required), data (required). Returns: object

update_retrospective_process_groupUpdate Retrospective Process GroupC
Idempotent

Update a specific Retrospective Process Group by id

Inputs: id (required), data (required). Returns: object

update_retrospective_stepUpdate Retrospective StepC
Idempotent

Update a specific retrospective step by id

Inputs: id (required), data (required). Returns: object

update_scheduleUpdate ScheduleC
Idempotent

Updates a specific schedule by id

Inputs: id (required), data (required). Returns: object

update_schedule_rotationUpdate Schedule RotationB
Idempotent

Update a specific schedule rotation by id

Inputs: id (required), data (required). Returns: object

update_serviceUpdate ServiceC
Idempotent

Update a specific service by id

Inputs: id (required), data (required). Returns: object

update_severityUpdate SeverityC
Idempotent

Update a specific severity by id

Inputs: id (required), data (required). Returns: object

update_status_pageUpdate Status PageC
Idempotent

Update a specific status page by id

Inputs: id (required), data (required). Returns: object

update_status_page_templateUpdate Status Page TemplateC
Idempotent

Update a specific template event by id

Inputs: id (required), body (required), title (required), created_at (required), +8 more. Returns: object

update_sub_statusUpdate Sub StatusC
Idempotent

Update a specific Sub-Status by id

Inputs: id (required), data (required). Returns: object

update_teamUpdate TeamC
Idempotent

Update a specific team by id

Inputs: id (required), data (required). Returns: object

update_workflowUpdate WorkflowC
Idempotent

Update a specific workflow by id

Inputs: id (required), data (required). Returns: object

update_workflow_form_field_conditionUpdate Workflow Form Field ConditionC
Idempotent

Update a specific workflow form field condition by id

Inputs: id (required), data (required). Returns: object

update_workflow_groupUpdate Workflow GroupC
Idempotent

Update a specific workflow group by id

Inputs: id (required), data (required). Returns: object

update_workflow_taskUpdate Workflow TaskC
Idempotent

Update a specific workflow task by id

Inputs: id (required), data (required). Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.4/5.0

    Scored across 274 tools

    Disambiguation2/5

    The set is dominated by near-duplicate surface: list_incidents vs search_incidents vs collect_incidents, list_alerts vs get_alert_by_short_id, update_alert_route vs patch_alert_route, list_alert_routes vs list_alert_routing_rules, list_escalation_levels vs list_escalation_levels_paths, list_meeting_recordings vs list_all_meeting_recordings, and a large deprecated custom_field/catalog_entity_property family that shadows the form_field endpoints. A handful of tools (list_incidents/search_incidents/collect_incidents, list_shifts/get_oncall_schedule_summary) carry good disambiguating prose, but most of the 274 entries give an agent no reliable basis for choosing among siblings.

    Naming Consistency3/5

    The dominant convention is verb_noun snake_case (list_x/get_x/create_x/update_x), which is readable, but deviations accumulate: patch_alert_route alongside update_alert_route, singular/plural mismatches (get_alerts_source, create_alerts_source vs list_alerts_sources, create_alert), and purpose-verb names (search_incidents, collect_incidents, find_related_incidents, suggest_solutions, check_responder_availability, start_investigation). Individually minor, but at 274 tools the irregularities make name-based discovery unreliable.

    Tool Count1/5

    274 tools is an extreme mismatch for any single MCP surface — it is essentially a whole REST API dumped into one server namespace, including deprecated endpoints the descriptions themselves tell you not to use. An agent cannot hold this tool list in context or select reliably from it; meaningful scoping or curated subsets would be required.

    Completeness4/5

    Coverage of the incident-management domain is unusually thorough: incidents, alerts and alert routing, on-call schedules/shifts/overrides, escalation policies, retrospects, workflows, forms, catalogs, status pages, audit log and observability all have read/write operations, plus higher-level agent tools (find_related_incidents, suggest_solutions, on-call health). The main gap is the near-total absence of delete/archive operations, which leaves lifecycle dead ends for resources an agent can create but not remove.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers