{
  "markdown": "<!-- mcp-name: com.rootly/mcp-server -->\n# Rootly MCP Server\n\n[![PyPI version](https://badge.fury.io/py/rootly-mcp-server.svg)](https://pypi.org/project/rootly-mcp-server/)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/rootly-mcp-server)](https://pypi.org/project/rootly-mcp-server/)\n[![Python Version](https://img.shields.io/pypi/pyversions/rootly-mcp-server.svg)](https://pypi.org/project/rootly-mcp-server/)\n\nAn MCP server for the [Rootly API](https://docs.rootly.com/api-reference/overview) for Cursor, Windsurf, Claude, and other MCP clients.\n\n![Demo GIF](https://raw.githubusercontent.com/rootlyhq/rootly-mcp-server/refs/heads/main/rootly-mcp-server-demo.gif)\n\n## Quick Start\n\nUse the hosted MCP server. No local installation required.\n\n### Hosted Transport Options\n\n- **Streamable HTTP (recommended):** `https://mcp.rootly.com/mcp`\n- **SSE (stable alternative):** `https://mcp.rootly.com/sse`\n- **Code Mode:** `https://mcp.rootly.com/mcp-codemode`\n\nHosted tool profiles:\n\n- **Full (default):** use the URLs above as-is\n- **Slim (~70 tools):** add `?tool_profile=slim` to the hosted URL, for example `https://mcp.rootly.com/mcp?tool_profile=slim`\n- **Header alternative:** send `X-Rootly-Tool-Profile: slim`\n- **Server-wide default:** set `ROOTLY_MCP_HOSTED_TOOL_PROFILE=full|slim`\n- **Exact custom override:** set `ROOTLY_MCP_ENABLED_TOOLS=...`\n\n### General Remote Setup\n\n**With OAuth2 (recommended):**\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"url\": \"https://mcp.rootly.com/mcp\"\n    }\n  }\n}\n```\n\nYour MCP client handles OAuth2 login automatically — a browser window opens for you to authenticate with Rootly. No API token needed.\n\n**With API Token:**\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"url\": \"https://mcp.rootly.com/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer YOUR_ROOTLY_API_TOKEN\"\n      }\n    }\n  }\n}\n```\n\nSSE (alternative):\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"url\": \"https://mcp.rootly.com/sse\"\n    }\n  }\n}\n```\n\nCode Mode:\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"url\": \"https://mcp.rootly.com/mcp-codemode\"\n    }\n  }\n}\n```\n\n### Agent Setup\n\n<details>\n<summary><strong>Claude Code</strong></summary>\n\n<br>\n\n**With OAuth2 (recommended):**\n\n```bash\nclaude mcp add --transport http rootly https://mcp.rootly.com/mcp\n\n# Code Mode:\nclaude mcp add --transport http rootly-codemode https://mcp.rootly.com/mcp-codemode\n```\n\n**With API Token:**\n\n```bash\nclaude mcp add --transport http rootly https://mcp.rootly.com/mcp \\\n  --header \"Authorization: Bearer YOUR_ROOTLY_API_TOKEN\"\n```\n\n**Manual Configuration** — Create `.mcp.json` in your project root:\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"type\": \"http\",\n      \"url\": \"https://mcp.rootly.com/mcp\"\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary><strong>Gemini CLI</strong></summary>\n\n<br>\n\nInstall the extension:\n\n```bash\ngemini extensions install https://github.com/rootlyhq/rootly-mcp-server\n```\n\nOr configure manually in `~/.gemini/settings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"command\": \"uvx\",\n      \"args\": [\"--from\", \"rootly-mcp-server\", \"rootly-mcp-server\"],\n      \"env\": {\n        \"ROOTLY_API_TOKEN\": \"<YOUR_ROOTLY_API_TOKEN>\"\n      }\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary><strong>Cursor</strong></summary>\n\n<br>\n\nAdd to `.cursor/mcp.json` or `~/.cursor/mcp.json`:\n\n**With OAuth2 (recommended):**\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"url\": \"https://mcp.rootly.com/mcp\"\n    }\n  }\n}\n```\n\n**With API Token:**\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"url\": \"https://mcp.rootly.com/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer <YOUR_ROOTLY_API_TOKEN>\"\n      }\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary><strong>Windsurf</strong></summary>\n\n<br>\n\nAdd to `~/.codeium/windsurf/mcp_config.json`:\n\n**With OAuth2 (recommended):**\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"serverUrl\": \"https://mcp.rootly.com/mcp\"\n    }\n  }\n}\n```\n\n**With API Token:**\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"serverUrl\": \"https://mcp.rootly.com/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer <YOUR_ROOTLY_API_TOKEN>\"\n      }\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary><strong>Codex</strong></summary>\n\n<br>\n\nAdd to `~/.codex/config.toml`:\n\n**With OAuth2 (recommended):**\n\n```toml\n[mcp_servers.rootly]\nurl = \"https://mcp.rootly.com/mcp\"\n```\n\n**With API Token:**\n\n```toml\n[mcp_servers.rootly]\nurl = \"https://mcp.rootly.com/mcp\"\nbearer_token_env_var = \"ROOTLY_API_TOKEN\"\n```\n\n</details>\n\n<details>\n<summary><strong>Claude Desktop</strong></summary>\n\n<br>\n\n**With OAuth2 (recommended):**\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"url\": \"https://mcp.rootly.com/mcp\"\n    }\n  }\n}\n```\n\nClaude Desktop handles OAuth2 login automatically.\n\n**With API Token (via mcp-remote):**\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"mcp-remote\",\n        \"https://mcp.rootly.com/mcp\",\n        \"--transport\",\n        \"http\",\n        \"--header\",\n        \"Authorization: Bearer <YOUR_ROOTLY_API_TOKEN>\"\n      ]\n    }\n  }\n}\n```\n\n</details>\n\n## Rootly CLI\n\nStandalone CLI for incidents, alerts, services, and on-call operations.\n\nInstall via Homebrew:\n\n```bash\nbrew install rootlyhq/tap/rootly-cli\n```\n\nOr via Go:\n\n```bash\ngo install github.com/rootlyhq/rootly-cli/cmd/rootly@latest\n```\n\nFor more details, see the [Rootly CLI repository](https://github.com/rootlyhq/rootly-cli).\n\n## Alternative Installation (Local)\n\nRun the MCP server locally if you do not want to use the hosted service.\n\n### Prerequisites\n\n- Python 3.12 or higher\n- `uv` package manager\n  ```bash\n  curl -LsSf https://astral.sh/uv/install.sh | sh\n  ```\n- [Rootly API token](https://docs.rootly.com/api-reference/overview#how-to-generate-an-api-key%3F)\n\n### API Token Types\n\nChoose the token type based on the access you need:\n\n- **Global API Key**: Full access across the Rootly instance. Best for organization-wide visibility.\n- **Team API Key**: Access limited to entities owned by that team.\n- **Personal API Key**: Access matches the user who created it.\n\nA **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.\n\n### With uv\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"command\": \"uv\",\n      \"args\": [\n        \"tool\",\n        \"run\",\n        \"--from\",\n        \"rootly-mcp-server\",\n        \"rootly-mcp-server\"\n      ],\n      \"env\": {\n        \"ROOTLY_API_TOKEN\": \"<YOUR_ROOTLY_API_TOKEN>\",\n        \"ROOTLY_MCP_ENABLE_WRITE_TOOLS\": \"true\"\n      }\n    }\n  }\n}\n```\n\n## Self-Hosted Transport Options\n\nChoose one transport per server process:\n\n- **Streamable HTTP** endpoint path: `/mcp`\n- **SSE** endpoint path: `/sse`\n- **Code Mode (experimental)** endpoint path: `/mcp-codemode` in hosted dual-transport mode\n\nHosted and self-hosted deployments now both expose the full tool surface by default.\n\n- Hosted default: full surface\n- Hosted slim profile: about 70 high-usage tools via `?tool_profile=slim`\n- Self-hosted default: full surface\n\nTo restrict either deployment to read-only tools, start the server with `--no-enable-write-tools` or set `ROOTLY_MCP_ENABLE_WRITE_TOOLS=false`.\n\nFor hosted clients that want the smaller remote profile, append `?tool_profile=slim` to the MCP URL or send `X-Rootly-Tool-Profile: slim`.\n\n### AgentCat and Sentry telemetry\n\nHosted deployments can send MCP telemetry to AgentCat by setting\n`ROOTLY_MCPCAT_PROJECT_ID`. To also export AgentCat events to Sentry, provide\n`SENTRY_DSN` through the deployment's secret store. The optional\n`ENVIRONMENT` defaults to `production`, and `SENTRY_RELEASE` defaults to the\ninstalled Rootly MCP Server version. Sentry performance tracing is enabled when\nthe exporter is configured.\nFree-form event text is redacted and actor names are omitted from Sentry-bound\ntelemetry; stable internal actor IDs remain available for correlation.\n\nTelemetry runs on AgentCat v2 (MCP 2026-07-28 spec). Sessions are correlated via\na session_id carried in the tool list rather than stateful connections, which\nsuits our stateless hosted transport; `initialize` and `tools/list` events are no\nlonger published by the SDK.\n\nTo 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.\n\nTo 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`.\n\n### OpenAI Apps domain verification\n\nHosted deployments expose an unauthenticated domain-verification endpoint used by the OpenAI plugin directory:\n\n- **Endpoint:** `GET /.well-known/openai-apps-challenge`\n- **Environment variable:** `ROOTLY_OPENAI_APPS_CHALLENGE_TOKEN`\n\nSet `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.\n\nTo discover the exact tool names available under your current self-hosted configuration, run:\n\n```bash\nROOTLY_API_TOKEN=<YOUR_ROOTLY_API_TOKEN> \\\nuv run python -m rootly_mcp_server --list-tools\n```\n\nThis prints the effective MCP tool names after applying your current settings, including `ROOTLY_MCP_ENABLE_WRITE_TOOLS` and `ROOTLY_MCP_ENABLED_TOOLS`.\n\nSmoke-test a self-hosted allowlist:\n\n```bash\nROOTLY_API_TOKEN=<YOUR_ROOTLY_API_TOKEN> \\\nROOTLY_MCP_ENABLED_TOOLS=list_incidents,get_incident,get_server_version \\\nuv run python -m rootly_mcp_server --transport streamable-http --log-level ERROR\n```\n\nThen connect an MCP client to `http://127.0.0.1:8000/mcp` and verify `tools/list` returns only:\n\n```text\nget_server_version\nget_incident\nlist_incidents\n```\n\nTo include specific write tools for self-hosted testing, add both the write flag and the allowlist:\n\n```bash\nROOTLY_API_TOKEN=<YOUR_ROOTLY_API_TOKEN> \\\nROOTLY_MCP_ENABLE_WRITE_TOOLS=true \\\nROOTLY_MCP_ENABLED_TOOLS=create_incident,create_workflow_task,list_teams \\\nuv run python -m rootly_mcp_server --transport streamable-http --log-level ERROR\n```\n\nExample Docker run (Streamable HTTP):\n\n```bash\ndocker run -p 8000:8000 \\\n  -e ROOTLY_TRANSPORT=streamable-http \\\n  -e ROOTLY_API_TOKEN=<YOUR_ROOTLY_API_TOKEN> \\\n  -e ROOTLY_MCP_ENABLE_WRITE_TOOLS=true \\\n  rootly-mcp-server\n```\n\nExample Docker run (SSE):\n\n```bash\ndocker run -p 8000:8000 \\\n  -e ROOTLY_TRANSPORT=sse \\\n  -e ROOTLY_API_TOKEN=<YOUR_ROOTLY_API_TOKEN> \\\n  rootly-mcp-server\n```\n\nExample Docker run (Dual transport + Code Mode):\n\n```bash\ndocker run -p 8000:8000 \\\n  -e ROOTLY_TRANSPORT=both \\\n  -e ROOTLY_API_TOKEN=<YOUR_ROOTLY_API_TOKEN> \\\n  rootly-mcp-server\n```\n\n## Workflow-Focused Tool Subsets\n\nThe full hosted and self-hosted surface exposes 200+ tools. If you want tighter workflow-specific subsets, use `ROOTLY_MCP_ENABLED_TOOLS`:\n\n### 🚨 Incident Response (25 tools)\n*Essential tools for emergency responders and incident commanders*\n\n```bash\nROOTLY_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\"\n```\n\n### 📅 On-Call Management (35 tools)  \n*For schedule coordinators and on-call managers*\n\n```bash\nROOTLY_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_oncall_health_risk,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\"\n```\n\n### 📊 Monitoring & Alerting (40 tools)\n*For platform teams setting up observability*\n\n```bash\nROOTLY_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\"\n```\n\n### 📋 Post-Incident Analysis (30 tools)\n*For SREs doing retrospectives and process improvement*\n\n```bash\nROOTLY_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\"\n```\n\n### 📈 Analytics & Reporting (15 tools)\n*For leadership and metrics teams (read-only focus)*\n\n```bash\nROOTLY_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\"\n```\n\n### Multiple MCP Instances for Different Teams\n\nYou can run multiple MCP instances with different tool subsets:\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly-incident-response\": {\n      \"command\": \"uvx\", \"args\": [\"--from\", \"rootly-mcp-server\", \"rootly-mcp-server\"],\n      \"env\": {\n        \"ROOTLY_API_TOKEN\": \"<token>\",\n        \"ROOTLY_MCP_ENABLED_TOOLS\": \"list_incidents,get_incident,create_incident,find_related_incidents,suggest_solutions...\"\n      }\n    },\n    \"rootly-oncall-management\": {\n      \"command\": \"uvx\", \"args\": [\"--from\", \"rootly-mcp-server\", \"rootly-mcp-server\"],\n      \"env\": {\n        \"ROOTLY_API_TOKEN\": \"<token>\",\n        \"ROOTLY_MCP_ENABLED_TOOLS\": \"list_schedules,update_schedule,create_override_shift,get_oncall_shift_metrics...\"\n      }\n    }\n  }\n}\n```\n\n### With uvx\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"command\": \"uvx\",\n      \"args\": [\n        \"--from\",\n        \"rootly-mcp-server\",\n        \"rootly-mcp-server\"\n      ],\n      \"env\": {\n        \"ROOTLY_API_TOKEN\": \"<YOUR_ROOTLY_API_TOKEN>\"\n      }\n    }\n  }\n}\n```\n\n## Features\n\n- **Dynamic Tool Generation**: Automatically creates MCP resources from Rootly's OpenAPI (Swagger) specification\n- **Smart Pagination**: Uses bounded pagination and compact incident responses to prevent context window overflow\n- **API Filtering**: Limits exposed API endpoints for security and performance\n- **Intelligent Incident Analysis**: Smart tools that analyze historical incident data\n  - **`find_related_incidents`**: Uses TF-IDF similarity analysis to find historically similar incidents\n  - **`suggest_solutions`**: Mines past incident resolutions to recommend actionable solutions\n- **MCP Resources**: Exposes incidents, teams, on-call status, and workflow guides as structured resources for AI context\n- **Intelligent Pattern Recognition**: Automatically identifies services, error types, and resolution patterns\n- **On-Call Health Integration**: Detects workload health risk in scheduled responders\n\n## Supported Tools\n\nThe default tool surface depends on deployment profile:\n\n- Hosted default: about **218 tools**\n- Hosted slim profile: about **70 tools**\n- Self-hosted default: about **218 tools**\n\n### Custom Agentic Tools\n\n- `check_oncall_health_risk`\n- `check_responder_availability`\n- `collect_incidents`\n- `create_incident` - create a new incident with a scoped set of fields for agent workflows\n- `create_override_recommendation`\n- `find_related_incidents`\n- `get_incident` - retrieve a single incident for direct verification, including PIR-related fields\n- `get_alert_by_short_id`\n- `get_oncall_handoff_summary`\n- `get_oncall_schedule_summary`\n- `get_oncall_shift_metrics`\n- `get_server_version`\n- `get_shift_incidents`\n- `list_endpoints`\n- `list_incidents`\n- `list_shifts`\n- `search_incidents`\n- `suggest_solutions`\n- `update_incident` - scoped incident update tool for `summary` and `retrospective_progress_status`\n\n### OpenAPI-Generated Tools\n\n> **Tool naming:** all tools use `snake_case`. The historical `camelCase` names\n> (e.g. `getScheduleShifts`, `listIncidents`) are no longer advertised in\n> `tools/list`, but remain callable as hidden aliases — they are transparently\n> routed to their `snake_case` canonical. Update configs and `ROOTLY_MCP_ENABLED_TOOLS`\n> allowlists to the `snake_case` names; legacy camelCase allowlist entries are\n> auto-canonicalized.\n\n```text\nlist_workflow_runs\ncreate_incident_action_item\ncreate_incident_form_field_selection\ncreate_workflow_task\nget_alert\nget_alert_event\nget_alert_group\nget_alert_routing_rule\nget_alert_source\nget_alert_urgency\nget_catalog\nget_catalog_entity\nget_cause\nget_current_user\nget_custom_form\nget_environment\nget_escalation_level\nget_escalation_path\nget_escalation_policy\nget_form_field\nget_form_field_option\nget_functionality\nget_functionality_incidents_chart\nget_functionality_uptime_chart\nget_incident_action_items\nget_incident_form_field_selection\nget_incident_type\nget_on_call_role\nget_on_call_shadow\nget_override_shift\nget_schedule\nget_schedule_rotation\nget_schedule_shifts\nget_service\nget_service_incidents_chart\nget_service_uptime_chart\nget_severity\nget_status_page\nget_status_page_template\nget_team\nget_team_incidents_chart\nget_user\nget_workflow\nget_workflow_form_field_condition\nget_workflow_group\nget_workflow_task\nlist_alert_events\nlist_alert_groups\nlist_alert_routing_rules\nlist_alert_sources\nlist_alert_urgencies\nlist_alerts\nlist_all_incident_action_items\nlist_catalog_entities\nlist_catalogs\nlist_causes\nlist_custom_forms\nlist_environments\nlist_escalation_levels\nlist_escalation_levels_paths\nlist_escalation_paths\nlist_escalation_policies\nlist_form_field_options\nlist_form_fields\nlist_functionalities\nlist_incident_action_items\nlist_incident_alerts\nlist_incident_form_field_selections\nlist_incident_types\nlist_on_call_roles\nlist_on_call_shadows\nlist_override_shifts\nlist_schedule_rotation_active_days\nlist_schedule_rotation_users\nlist_schedule_rotations\nlist_schedules\nlist_services\nlist_severities\nlist_shifts\nlist_status_page_templates\nlist_status_pages\nlist_teams\nlist_users\nlist_workflow_form_field_conditions\nlist_workflow_groups\nlist_workflows\nlist_workflow_tasks\nupdate_environment\nupdate_escalation_level\nupdate_escalation_path\nupdate_escalation_policy\nupdate_functionality\nupdate_incident_type\nupdate_on_call_role\nupdate_on_call_shadow\nupdate_override_shift\nupdate_schedule\nupdate_schedule_rotation\nupdate_service\nupdate_severity\nupdate_team\nupdate_workflow\nupdate_incident_form_field_selection\nupdate_workflow_task\n```\n\n**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.\n\nDelete operations remain disabled in the default tool surface.\n\n## On-Call Health Integration\n\nIntegrates with [On-Call Health](https://oncallhealth.ai) to detect workload health risk in scheduled responders.\n\n### Setup\n\nSet the `ONCALLHEALTH_API_KEY` environment variable:\n\n```json\n{\n  \"mcpServers\": {\n    \"rootly\": {\n      \"command\": \"uvx\",\n      \"args\": [\"--from\", \"rootly-mcp-server\", \"rootly-mcp-server\"],\n      \"env\": {\n        \"ROOTLY_API_TOKEN\": \"your_rootly_token\",\n        \"ONCALLHEALTH_API_KEY\": \"och_live_your_key\"\n      }\n    }\n  }\n}\n```\n\n### Usage\n\n```\ncheck_oncall_health_risk(\n    start_date=\"2026-02-09\",\n    end_date=\"2026-02-15\"\n)\n```\n\nReturns at-risk users who are scheduled, recommended safe replacements, and action summaries.\n\n## Example Skills\n\nPre-built Claude Code skills:\n\n### 🚨 [Rootly Incident Responder](examples/skills/rootly-incident-responder.md)\n\nThis skill:\n- Analyzes production incidents with full context\n- Finds similar historical incidents using ML-based similarity matching\n- Suggests solutions based on past successful resolutions\n- Coordinates with on-call teams across timezones\n- Correlates incidents with recent code changes and deployments\n- Creates action items and remediation plans\n- Provides confidence scores and time estimates\n\n**Quick Start:**\n```bash\n# Copy the skill to your project\nmkdir -p .claude/skills\ncp examples/skills/rootly-incident-responder.md .claude/skills/\n\n# Then in Claude Code, invoke it:\n# @rootly-incident-responder analyze incident #12345\n```\n\nIt demonstrates a full incident response workflow using Rootly tools and GitHub context.\n\n### On-Call Shift Metrics\n\nGet 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.\n\n```\nget_oncall_shift_metrics(\n    start_date=\"2025-10-01\",\n    end_date=\"2025-10-31\",\n    group_by=\"user\"\n)\n```\n\n### On-Call Handoff Summary\n\nComplete handoff: current/next on-call + incidents during shifts.\n\n```python\n# All on-call (any timezone)\nget_oncall_handoff_summary(\n    team_ids=\"team-1,team-2\",\n    timezone=\"America/Los_Angeles\"\n)\n\n# Regional filter - only show APAC on-call during APAC business hours\nget_oncall_handoff_summary(\n    timezone=\"Asia/Tokyo\",\n    filter_by_region=True\n)\n```\n\nRegional filtering shows only people on-call during business hours (9am-5pm) in the specified timezone.\n\nReturns: `schedules` with `current_oncall`, `next_oncall`, and `shift_incidents`\n\n### MCP Resources for Context\n\nAI agents can access these resources for situational awareness:\n\n- **`incident://{incident_id}`** - Detailed incident information for specific incidents\n- **`team://{team_id}`** - Team details including name, color, and metadata  \n- **`rootly://incidents`** - List of recent incidents for quick reference\n- **`rootly://oncall-status`** - Current on-call status across all schedules (critical for incident response)\n- **`rootly://workflow-guide`** - Step-by-step workflow guidance for common operations\n\nExample usage: *\"Check the current on-call status\"* → AI reads `rootly://oncall-status` resource\n\n### Shift Incidents\n\nIncidents during a time period, with filtering by severity/status/tags.\n\n```python\nget_shift_incidents(\n    start_time=\"2025-10-20T09:00:00Z\",\n    end_time=\"2025-10-20T17:00:00Z\",\n    severity=\"critical\",  # optional\n    status=\"resolved\",    # optional\n    tags=\"database,api\"   # optional\n)\n```\n\nReturns: `incidents` list + `summary` (counts, avg resolution time, grouping)\n\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for developer setup and guidelines.\n\n## Play with it on Postman\n[<img src=\"https://run.pstmn.io/button.svg\" alt=\"Run In Postman\" style=\"width: 128px; height: 32px;\">](https://god.gw.postman.com/run-collection/45004446-1074ba3c-44fe-40e3-a932-af7c071b96eb?action=collection%2Ffork&source=rip_markdown&collection-url=entityId%3D45004446-1074ba3c-44fe-40e3-a932-af7c071b96eb%26entityType%3Dcollection%26workspaceId%3D4bec6e3c-50a0-4746-85f1-00a703c32f24)\n\n\n## About Rootly AI Labs\n\nThis project was developed by [Rootly AI Labs](https://labs.rootly.ai/), 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.\n![Rootly AI logo](https://github.com/rootlyhq/EventOrOutage/raw/main/rootly-ai.png)\n",
  "bytes": 25142,
  "sha": "e3c3c5edd5082ae2678d85680c5cf12ae8a4c61340c75a4c664c7da41f8aa741",
  "repo_slug": "rootly-ai-labs/rootly-mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_com_rootly_mcp_server_c5761a82/readme"
}