An MCP server for the Rootly API for Cursor, Windsurf, Claude, and other MCP clients.
Use the hosted MCP server. No local installation required.
- Streamable HTTP (recommended):
https://mcp.rootly.com/mcp - SSE (stable alternative):
https://mcp.rootly.com/sse - Code Mode:
https://mcp.rootly.com/mcp-codemode
Default remote config (HTTP streamable):
{
"mcpServers": {
"rootly": {
"url": "https://mcp.rootly.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_ROOTLY_API_TOKEN"
}
}
}
}SSE (alternative):
{
"mcpServers": {
"rootly": {
"url": "https://mcp.rootly.com/sse",
"headers": {
"Authorization": "Bearer YOUR_ROOTLY_API_TOKEN"
}
}
}
}Code Mode:
{
"mcpServers": {
"rootly": {
"url": "https://mcp.rootly.com/mcp-codemode",
"headers": {
"Authorization": "Bearer YOUR_ROOTLY_API_TOKEN"
}
}
}
}Claude Code
Streamable HTTP
claude mcp add --transport http rootly https://mcp.rootly.com/mcp \
--header "Authorization: Bearer YOUR_ROOTLY_API_TOKEN"Code Mode:
claude mcp add rootly-codemode --transport http https://mcp.rootly.com/mcp-codemode \
--header "Authorization: Bearer YOUR_ROOTLY_API_TOKEN"SSE (alternative):
claude mcp add --transport sse rootly-sse https://mcp.rootly.com/sse \
--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",
"headers": {
"Authorization": "Bearer YOUR_ROOTLY_API_TOKEN"
}
}
}
}Restart Claude Code after updating the config.
Gemini CLI
Install the extension:
gemini extensions install https://github.com/Rootly-AI-Labs/Rootly-MCP-serverOr 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>"
}
}
}
}Cursor
Add to .cursor/mcp.json or ~/.cursor/mcp.json:
{
"mcpServers": {
"rootly": {
"url": "https://mcp.rootly.com/mcp",
"headers": {
"Authorization": "Bearer <YOUR_ROOTLY_API_TOKEN>"
}
}
}
}Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"rootly": {
"serverUrl": "https://mcp.rootly.com/mcp",
"headers": {
"Authorization": "Bearer <YOUR_ROOTLY_API_TOKEN>"
}
}
}
}Codex
Add to ~/.codex/config.toml:
[mcp_servers.rootly]
url = "https://mcp.rootly.com/mcp"
bearer_token_env_var = "ROOTLY_API_TOKEN"Claude Desktop
Add to claude_desktop_config.json:
Note: The
--transport httpflag ensures HTTP streamable transport is used instead of auto-falling back to SSE.
{
"mcpServers": {
"rootly": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.rootly.com/mcp",
"--transport",
"http",
"--header",
"Authorization: Bearer <YOUR_ROOTLY_API_TOKEN>"
]
}
}
}Standalone CLI for incidents, alerts, services, and on-call operations.
Install via Homebrew:
brew install rootlyhq/tap/rootly-cliOr via Go:
go install github.com/rootlyhq/rootly-cli/cmd/rootly@latestFor more details, see the Rootly CLI repository.
Run the MCP server locally if you do not want to use the hosted service.
- Python 3.12 or higher
uvpackage managercurl -LsSf https://astral.sh/uv/install.sh | sh- Rootly API token
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.
{
"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"
}
}
}
}Choose one transport per server process:
- Streamable HTTP endpoint path:
/mcp - SSE endpoint path:
/sse - Code Mode (experimental) endpoint path:
/mcp-codemodein hosted dual-transport mode
Both hosted and self-hosted deployments expose all tools by default (read and write) for consistency. To restrict to read-only tools, start the server with --no-enable-write-tools or set ROOTLY_MCP_ENABLE_WRITE_TOOLS=false.
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,getIncident,get_server_version.
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-toolsThis 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,getIncident,get_server_version \
uv run python -m rootly_mcp_server --transport streamable-http --log-level ERRORThen connect an MCP client to http://127.0.0.1:8000/mcp and verify tools/list returns only:
get_server_version
getIncident
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=createIncident,createWorkflowTask,listTeams \
uv run python -m rootly_mcp_server --transport streamable-http --log-level ERRORExample 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-serverExample Docker run (SSE):
docker run -p 8000:8000 \
-e ROOTLY_TRANSPORT=sse \
-e ROOTLY_API_TOKEN=<YOUR_ROOTLY_API_TOKEN> \
rootly-mcp-serverExample Docker run (Dual transport + Code Mode):
docker run -p 8000:8000 \
-e ROOTLY_TRANSPORT=both \
-e ROOTLY_API_TOKEN=<YOUR_ROOTLY_API_TOKEN> \
rootly-mcp-server{
"mcpServers": {
"rootly": {
"command": "uvx",
"args": [
"--from",
"rootly-mcp-server",
"rootly-mcp-server"
],
"env": {
"ROOTLY_API_TOKEN": "<YOUR_ROOTLY_API_TOKEN>"
}
}
}
}- 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 incidentssuggest_solutions: Mines past incident resolutions to recommend actionable solutions
- MCP Resources: Exposes incident and team data as structured resources for easy AI reference
- Intelligent Pattern Recognition: Automatically identifies services, error types, and resolution patterns
- On-Call Health Integration: Detects workload health risk in scheduled responders
The default server configuration exposes 110 tools.
check_oncall_health_riskcheck_responder_availabilitycollect_incidentscreateIncident- create a new incident with a scoped set of fields for agent workflowscreate_override_recommendationfind_related_incidentsgetIncident- retrieve a single incident for direct verification, including PIR-related fieldsget_alert_by_short_idget_oncall_handoff_summaryget_oncall_schedule_summaryget_oncall_shift_metricsget_server_versionget_shift_incidentslist_endpointslist_incidentslist_shiftssearch_incidentssuggest_solutionsupdateIncident- scoped incident update tool forsummaryandretrospective_progress_status
attachAlert
createAlert
createEnvironment
createEscalationLevel
createEscalationLevelPaths
createEscalationPath
createEscalationPolicy
createFunctionality
createIncidentActionItem
createIncidentFormFieldSelection
createIncidentType
createOnCallRole
createOnCallShadow
createOverrideShift
createSchedule
createScheduleRotation
createScheduleRotationActiveDay
createScheduleRotationUser
createService
createSeverity
createTeam
createWorkflow
createWorkflowTask
deleteEscalationLevel
deleteEscalationPath
deleteEscalationPolicy
deleteSchedule
deleteScheduleRotation
getAlert
getCurrentUser
getEnvironment
getEscalationLevel
getEscalationPath
getEscalationPolicy
getFunctionality
getIncidentFormFieldSelection
getIncidentType
getOnCallRole
getOnCallShadow
getOverrideShift
getSchedule
getScheduleRotation
getScheduleShifts
getService
getSeverity
getTeam
getUser
getWorkflow
getWorkflowTask
listAlerts
listEnvironments
listEscalationLevels
listEscalationLevelsPaths
listEscalationPaths
listEscalationPolicies
listFunctionalities
listIncidentActionItems
listIncidentAlerts
listIncidentFormFieldSelections
listIncident_Types
listOnCallRoles
listOnCallShadows
listOverrideShifts
listScheduleRotationActiveDays
listScheduleRotationUsers
listScheduleRotations
listSchedules
listServices
listSeverities
listShifts
listTeams
listUsers
listWorkflows
listWorkflowTasks
updateAlert
updateEnvironment
updateEscalationLevel
updateEscalationPath
updateEscalationPolicy
updateFunctionality
updateIncidentFormFieldSelection
updateIncidentType
updateOnCallRole
updateOnCallShadow
updateOverrideShift
updateSchedule
updateScheduleRotation
updateService
updateSeverity
updateTeam
updateUser
updateWorkflow
updateWorkflowTask
Delete operations are intentionally scoped to screenshot coverage paths:
deleteSchedule, deleteScheduleRotation, deleteEscalationPolicy, deleteEscalationPath, deleteEscalationLevel.
Integrates with On-Call Health to detect workload health risk in scheduled responders.
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"
}
}
}
}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.
Pre-built Claude Code skills:
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 #12345It demonstrates a full incident response workflow using Rootly tools and GitHub context.
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"
)
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
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)
See CONTRIBUTING.md for developer setup and guidelines.
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.