rootly-mcp-server 2.2.12__tar.gz → 2.2.13__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.github/workflows/ci.yml +1 -1
  2. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/CHANGELOG.md +136 -2
  3. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/PKG-INFO +115 -29
  4. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/README.md +111 -26
  5. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/pyproject.toml +4 -3
  6. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/code_mode.py +132 -3
  7. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/server.py +63 -15
  8. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_code_mode_module.py +116 -2
  9. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_server.py +168 -1
  10. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/uv.lock +14 -12
  11. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.dockerignore +0 -0
  12. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.gitattributes +0 -0
  13. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.github/dependabot.yml +0 -0
  14. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.github/workflows/dependency-review.yml +0 -0
  15. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.github/workflows/pypi-release.yml +0 -0
  16. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.gitignore +0 -0
  17. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.semaphore/deploy-staging.yml +0 -0
  18. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.semaphore/deploy.yml +0 -0
  19. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.semaphore/semaphore.yml +0 -0
  20. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.semaphore/update-task-definition.sh +0 -0
  21. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/CONTRIBUTING.md +0 -0
  22. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/Dockerfile +0 -0
  23. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/LICENSE +0 -0
  24. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/examples/skills/README.md +0 -0
  25. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/gemini-extension.json +0 -0
  26. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/rootly-mcp-server-demo.gif +0 -0
  27. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/rootly_openapi.json +0 -0
  28. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/scripts/setup-hooks.sh +0 -0
  29. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/server.json +0 -0
  30. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/__init__.py +0 -0
  31. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/__main__.py +0 -0
  32. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/client.py +0 -0
  33. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/data/__init__.py +0 -0
  34. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/exceptions.py +0 -0
  35. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/legacy_server.py +0 -0
  36. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/mcp_error.py +0 -0
  37. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/monitoring.py +0 -0
  38. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/och_client.py +0 -0
  39. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/pagination.py +0 -0
  40. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/payload_stripping.py +0 -0
  41. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/security.py +0 -0
  42. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/server_defaults.py +0 -0
  43. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/smart_utils.py +0 -0
  44. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/spec_transform.py +0 -0
  45. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/__init__.py +0 -0
  46. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/alerts.py +0 -0
  47. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/incidents.py +0 -0
  48. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/oncall.py +0 -0
  49. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/resources.py +0 -0
  50. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/transport.py +0 -0
  51. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/utils.py +0 -0
  52. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/validators.py +0 -0
  53. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/README.md +0 -0
  54. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/conftest.py +0 -0
  55. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/integration/local/test_basic.py +0 -0
  56. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/integration/local/test_smart_tools.py +0 -0
  57. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/integration/remote/test_essential.py +0 -0
  58. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/test_client.py +0 -0
  59. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_alert_stripping.py +0 -0
  60. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_authentication.py +0 -0
  61. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_exceptions.py +0 -0
  62. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_http_headers.py +0 -0
  63. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_legacy_server_module.py +0 -0
  64. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_main_transport.py +0 -0
  65. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_mcp_error_module.py +0 -0
  66. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_och_client.py +0 -0
  67. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_oncall_handoff.py +0 -0
  68. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_oncall_metrics.py +0 -0
  69. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_oncall_new_tools.py +0 -0
  70. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_oncall_severity_normalization.py +0 -0
  71. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_payload_stripping_module.py +0 -0
  72. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_security.py +0 -0
  73. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_server_defaults_module.py +0 -0
  74. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_smart_utils.py +0 -0
  75. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_tools.py +0 -0
  76. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_transport_module.py +0 -0
  77. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_utils.py +0 -0
  78. {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_validators.py +0 -0
@@ -77,7 +77,7 @@ jobs:
77
77
 
78
78
  - name: Upload coverage to Codecov
79
79
  if: matrix.python-version == '3.12'
80
- uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5
80
+ uses: codecov/codecov-action@1af58845a975a7985b0beb0cbe6fbbb71a41dbad # v5
81
81
  with:
82
82
  file: ./coverage.xml
83
83
  flags: unittests
@@ -7,9 +7,143 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.2.13] - 2026-03-26
11
+
12
+ ### Changed
13
+ - Simplified the README quick start and added clearer hosted remote configuration examples for HTTP streamable, SSE, and Code Mode
14
+ - Upgraded `fastmcp[code-mode]` to `3.1.1` and refreshed CI dependencies
15
+
16
+ ### Fixed
17
+ - Validate hosted `Authorization` headers earlier and log auth header state to make malformed token issues easier to diagnose
18
+ - Hardened Code Mode `execute` by normalizing common client-prefixed tool names and returning clearer parser, import, and runtime errors
19
+
20
+ ### Security
21
+ - Patched vulnerable `authlib` and `requests` dependencies
22
+
23
+ ## [2.2.12] - 2026-03-18
24
+
25
+ ### Added
26
+ - Added MCP-level pagination to `list_shifts`, including pagination metadata and validation for invalid page numbers
27
+
28
+ ### Changed
29
+ - Slimmed heavy collection payloads for generated tools such as `listUsers`, `listServices`, and `listShifts`
30
+ - Clarified Code Mode tool discovery and pagination guidance for paginated calls
31
+ - Added and simplified Claude Code setup examples in the documentation
32
+
33
+ ### Fixed
34
+ - Trimmed `get_shift_incidents` results to avoid oversized responses
35
+ - Preserved incidents that started before a shift but were resolved during it
36
+
37
+ ## [2.2.11] - 2026-03-16
38
+
39
+ ### Added
40
+ - Added `updateIncident` for scoped incident updates in the PIR lifecycle
41
+ - Added `getIncident` and incident readback support for PIR verification
42
+
43
+ ### Changed
44
+ - Updated `search_incidents` to include retrospective progress status in readback results
45
+ - Scoped GitHub Actions workflow permissions more tightly
46
+
47
+ ### Fixed
48
+ - Made Code Mode `execute` compatible with older Monty runtimes
49
+ - Patched vulnerable `black` and `PyJWT` dependencies
50
+ - Fixed CI usage of `actions/upload-artifact`
51
+
52
+ ## [2.2.10] - 2026-03-12
53
+
54
+ ### Added
55
+ - Added a hosted Code Mode endpoint and enabled Code Mode by default in hosted dual-mode deployments
56
+ - Added streamable HTTP and SSE dual-transport support in a single hosted process
57
+ - Added screenshot coverage, escalation APIs, and tighter allowlist path matching
58
+ - Added structured tool-usage telemetry for Datadog, including transport-aware metrics and hashed identity context
59
+ - Added Gemini CLI extension support and editor-specific setup documentation
60
+ - Added branch-based staging deployment pipeline support
61
+
62
+ ### Changed
63
+ - Reorganized Quick Start documentation by editor and added Rootly CLI guidance
64
+ - Refreshed vulnerable runtime dependencies and normalized log severity handling
65
+
66
+ ### Fixed
67
+ - Restored legacy server parity while preserving compatibility with FastMCP 3.x `list_tools()` and `send()` behavior
68
+ - Forwarded auth tokens correctly in hosted SSE and streamable HTTP paths
69
+ - Reduced hosted auth noise, improved graceful shutdown behavior, and preserved error context across multi-call tools
70
+ - Fixed non-string incident severity handling in `shift_incidents`
71
+
72
+ ## [2.2.9] - 2026-02-24
73
+
74
+ ### Fixed
75
+ - Added an auth header event hook for hosted mode so downstream API requests consistently carry the caller's bearer token
76
+
77
+ ## [2.2.8] - 2026-02-24
78
+
79
+ ### Added
80
+ - Added filter parameters to `listAlerts`
81
+ - Added transport and hosting mode to the Rootly `User-Agent`
82
+
83
+ ### Security
84
+ - Hardened the Dockerfile and added `.dockerignore`
85
+
86
+ ## [2.2.6] - 2026-02-19
87
+
88
+ ### Added
89
+ - Added `get_alert_by_short_id` so alerts can be fetched by short ID or full alert URL
90
+
91
+ ### Changed
92
+ - Reduced alert API response payload size significantly and added User-Agent tracking
93
+
94
+ ### Fixed
95
+ - Included alert `url` and `created_at` in alert field selection
96
+ - Removed the `timeout` parameter from `FastMCP.from_openapi()` for FastMCP 3.0 compatibility
97
+
98
+ ## [2.2.4] - 2026-02-18
99
+
100
+ ### Added
101
+ - Added MCP registry metadata
102
+
103
+ ### Fixed
104
+ - Enforced JSON:API headers through an `httpx` event hook to resolve hosted `415` errors more reliably
105
+
106
+ ## [2.2.3] - 2026-02-05
107
+
108
+ ### Added
109
+ - Added debug logging for HTTP requests and headers
110
+
111
+ ## [2.2.2] - 2026-02-05
112
+
113
+ ### Fixed
114
+ - Removed existing content-type headers case-insensitively before setting JSON:API headers
115
+
116
+ ## [2.2.1] - 2026-02-05
117
+
118
+ ### Fixed
119
+ - Always set JSON:API headers regardless of request kwargs to prevent hosted `415` failures
120
+
121
+ ## [2.2.0] - 2026-02-05
122
+
123
+ ### Changed
124
+ - Replaced `burnout` terminology with `health risk` across the On-Call Health feature set
125
+
126
+ ## [2.1.4] - 2026-02-05
127
+
128
+ ### Fixed
129
+ - Resolved hosted MCP `415 Unsupported Media Type` errors
130
+
131
+ ## [2.1.3] - 2026-02-05
132
+
133
+ ### Added
134
+ - Added the On-Call Health integration for burnout-risk detection
135
+ - Added unit tests for the On-Call Health integration
136
+
137
+ ### Changed
138
+ - Streamlined the README and moved development setup details into `CONTRIBUTING.md`
139
+
140
+ ### Fixed
141
+ - Added proper type hints to `och_client.py`
142
+
143
+ ## [2.1.2] - 2026-02-05
144
+
10
145
  ### Added
11
- - Gemini CLI extension support via `gemini-extension.json` manifest
12
- - Gemini CLI installation instructions in README
146
+ - Added on-call AI workflow tools
13
147
 
14
148
  ## [2.1.1] - 2026-02-04
15
149
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rootly-mcp-server
3
- Version: 2.2.12
3
+ Version: 2.2.13
4
4
  Summary: Secure Model Context Protocol server for Rootly APIs with AI SRE capabilities, comprehensive error handling, and input validation
5
5
  Project-URL: Homepage, https://github.com/Rootly-AI-Labs/Rootly-MCP-server
6
6
  Project-URL: Issues, https://github.com/Rootly-AI-Labs/Rootly-MCP-server/issues
@@ -21,12 +21,13 @@ Classifier: Topic :: Software Development :: Build Tools
21
21
  Classifier: Topic :: System :: Monitoring
22
22
  Classifier: Topic :: System :: Systems Administration
23
23
  Requires-Python: >=3.12
24
+ Requires-Dist: authlib>=1.6.9
24
25
  Requires-Dist: brotli>=1.2.0
25
- Requires-Dist: fastmcp[code-mode]==3.1.0
26
+ Requires-Dist: fastmcp[code-mode]==3.1.1
26
27
  Requires-Dist: httpx==0.28.1
27
28
  Requires-Dist: numpy>=1.24.0
28
29
  Requires-Dist: pydantic==2.12.5
29
- Requires-Dist: requests==2.32.5
30
+ Requires-Dist: requests==2.33.0
30
31
  Requires-Dist: scikit-learn>=1.3.0
31
32
  Provides-Extra: dev
32
33
  Requires-Dist: bandit>=1.7.0; extra == 'dev'
@@ -45,17 +46,75 @@ Description-Content-Type: text/markdown
45
46
  [![Python Version](https://img.shields.io/pypi/pyversions/rootly-mcp-server.svg)](https://pypi.org/project/rootly-mcp-server/)
46
47
  [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=rootly&config=eyJ1cmwiOiJodHRwczovL21jcC5yb290bHkuY29tL3NzZSIsImhlYWRlcnMiOnsiQXV0aG9yaXphdGlvbiI6IkJlYXJlciA8WU9VUl9ST09UTFlfQVBJX1RPS0VOPiJ9fQ==)
47
48
 
48
- An MCP server for the [Rootly API](https://docs.rootly.com/api-reference/overview) that integrates seamlessly with MCP-compatible editors like Cursor, Windsurf, and Claude. Resolve production incidents in under a minute without leaving your IDE.
49
+ An MCP server for the [Rootly API](https://docs.rootly.com/api-reference/overview) for Cursor, Windsurf, Claude, and other MCP clients.
49
50
 
50
51
  ![Demo GIF](https://raw.githubusercontent.com/Rootly-AI-Labs/Rootly-MCP-server/refs/heads/main/rootly-mcp-server-demo.gif)
51
52
 
52
53
  ## Quick Start
53
54
 
54
- The fastest way to get started is to connect to our hosted MCP server no installation required.
55
+ Use the hosted MCP server. No local installation required.
55
56
 
56
- ### Claude Code
57
+ ### Hosted Transport Options
57
58
 
58
- **Hosted Server (Recommended)**
59
+ - **Streamable HTTP (recommended):** `https://mcp.rootly.com/mcp`
60
+ - **SSE (fallback):** `https://mcp.rootly.com/sse`
61
+ - **Code Mode:** `https://mcp.rootly.com/mcp-codemode`
62
+
63
+ ### General Remote Setup
64
+
65
+ Default remote config (HTTP streamable):
66
+
67
+ ```json
68
+ {
69
+ "mcpServers": {
70
+ "rootly": {
71
+ "url": "https://mcp.rootly.com/mcp",
72
+ "headers": {
73
+ "Authorization": "Bearer YOUR_ROOTLY_API_TOKEN"
74
+ }
75
+ }
76
+ }
77
+ }
78
+ ```
79
+
80
+ SSE fallback:
81
+
82
+ ```json
83
+ {
84
+ "mcpServers": {
85
+ "rootly": {
86
+ "url": "https://mcp.rootly.com/sse",
87
+ "headers": {
88
+ "Authorization": "Bearer YOUR_ROOTLY_API_TOKEN"
89
+ }
90
+ }
91
+ }
92
+ }
93
+ ```
94
+
95
+ Code Mode:
96
+
97
+ ```json
98
+ {
99
+ "mcpServers": {
100
+ "rootly": {
101
+ "url": "https://mcp.rootly.com/mcp-codemode",
102
+ "headers": {
103
+ "Authorization": "Bearer YOUR_ROOTLY_API_TOKEN"
104
+ }
105
+ }
106
+ }
107
+ }
108
+ ```
109
+
110
+ ### Agent Setup
111
+
112
+ <details>
113
+ <summary><strong>Claude Code</strong></summary>
114
+
115
+ <br>
116
+
117
+ **Streamable HTTP**
59
118
 
60
119
  ```bash
61
120
  claude mcp add --transport http rootly https://mcp.rootly.com/mcp \
@@ -78,7 +137,7 @@ claude mcp add --transport sse rootly-sse https://mcp.rootly.com/sse \
78
137
 
79
138
  **Manual Configuration**
80
139
 
81
- Alternatively, create `.mcp.json` in your project root:
140
+ Create `.mcp.json` in your project root:
82
141
 
83
142
  ```json
84
143
  {
@@ -94,9 +153,14 @@ Alternatively, create `.mcp.json` in your project root:
94
153
  }
95
154
  ```
96
155
 
97
- Then restart Claude Code so it reloads the updated configuration.
156
+ Restart Claude Code after updating the config.
157
+
158
+ </details>
98
159
 
99
- ### Gemini CLI
160
+ <details>
161
+ <summary><strong>Gemini CLI</strong></summary>
162
+
163
+ <br>
100
164
 
101
165
  Install the extension:
102
166
 
@@ -120,7 +184,12 @@ Or configure manually in `~/.gemini/settings.json`:
120
184
  }
121
185
  ```
122
186
 
123
- ### Cursor
187
+ </details>
188
+
189
+ <details>
190
+ <summary><strong>Cursor</strong></summary>
191
+
192
+ <br>
124
193
 
125
194
  Add to `.cursor/mcp.json` or `~/.cursor/mcp.json`:
126
195
 
@@ -137,7 +206,12 @@ Add to `.cursor/mcp.json` or `~/.cursor/mcp.json`:
137
206
  }
138
207
  ```
139
208
 
140
- ### Windsurf
209
+ </details>
210
+
211
+ <details>
212
+ <summary><strong>Windsurf</strong></summary>
213
+
214
+ <br>
141
215
 
142
216
  Add to `~/.codeium/windsurf/mcp_config.json`:
143
217
 
@@ -154,7 +228,12 @@ Add to `~/.codeium/windsurf/mcp_config.json`:
154
228
  }
155
229
  ```
156
230
 
157
- ### Codex
231
+ </details>
232
+
233
+ <details>
234
+ <summary><strong>Codex</strong></summary>
235
+
236
+ <br>
158
237
 
159
238
  Add to `~/.codex/config.toml`:
160
239
 
@@ -164,7 +243,12 @@ url = "https://mcp.rootly.com/mcp"
164
243
  bearer_token_env_var = "ROOTLY_API_TOKEN"
165
244
  ```
166
245
 
167
- ### Claude Desktop
246
+ </details>
247
+
248
+ <details>
249
+ <summary><strong>Claude Desktop</strong></summary>
250
+
251
+ <br>
168
252
 
169
253
  Add to `claude_desktop_config.json`:
170
254
 
@@ -185,9 +269,11 @@ Add to `claude_desktop_config.json`:
185
269
  }
186
270
  ```
187
271
 
272
+ </details>
273
+
188
274
  ## Rootly CLI
189
275
 
190
- We also offer a standalone CLI for managing incidents, alerts, services, on-call schedules, and more directly from your terminal.
276
+ Standalone CLI for incidents, alerts, services, and on-call operations.
191
277
 
192
278
  Install via Homebrew:
193
279
 
@@ -205,7 +291,7 @@ For more details, see the [Rootly CLI repository](https://github.com/rootlyhq/ro
205
291
 
206
292
  ## Alternative Installation (Local)
207
293
 
208
- If you prefer to run the MCP server locally, configure your editor with one of the options below. The package will be automatically downloaded and installed when you first open your editor.
294
+ Run the MCP server locally if you do not want to use the hosted service.
209
295
 
210
296
  ### Prerequisites
211
297
 
@@ -214,17 +300,17 @@ If you prefer to run the MCP server locally, configure your editor with one of t
214
300
  ```bash
215
301
  curl -LsSf https://astral.sh/uv/install.sh | sh
216
302
  ```
217
- - [Rootly API token](https://docs.rootly.com/api-reference/overview#how-to-generate-an-api-key%3F) with appropriate permissions (see below)
303
+ - [Rootly API token](https://docs.rootly.com/api-reference/overview#how-to-generate-an-api-key%3F)
218
304
 
219
- ### API Token Permissions
305
+ ### API Token Types
220
306
 
221
- The MCP server requires a Rootly API token. Choose the appropriate token type based on your needs:
307
+ Choose the token type based on the access you need:
222
308
 
223
- - **Global API Key** (Recommended): Full access to all entities across your Rootly instance. Required for organization-wide visibility across teams, schedules, and incidents.
224
- - **Team API Key**: Team Admin permissions with full read/edit access to entities owned by that team. Suitable for team-specific workflows.
225
- - **Personal API Key**: Inherits the permissions of the user who created it. Works for individual use cases but may have limited visibility.
309
+ - **Global API Key**: Full access across the Rootly instance. Best for organization-wide visibility.
310
+ - **Team API Key**: Access limited to entities owned by that team.
311
+ - **Personal API Key**: Access matches the user who created it.
226
312
 
227
- For full functionality of tools like `get_oncall_handoff_summary`, `get_oncall_shift_metrics`, and organization-wide incident search, a **Global API Key** is recommended.
313
+ A **Global API Key** is recommended for tools like `get_oncall_handoff_summary`, `get_oncall_shift_metrics`, and org-wide incident search.
228
314
 
229
315
  ### With uv
230
316
 
@@ -254,7 +340,7 @@ Choose one transport per server process:
254
340
 
255
341
  - **Streamable HTTP** endpoint path: `/mcp`
256
342
  - **SSE** endpoint path: `/sse`
257
- - **Code Mode (experimental)** endpoint path: `/mcp-codemode` in hosted dual-transport mode. Set `ROOTLY_CODE_MODE_ENABLED=false` to disable it or `ROOTLY_CODE_MODE_PATH` to customize the path.
343
+ - **Code Mode (experimental)** endpoint path: `/mcp-codemode` in hosted dual-transport mode
258
344
 
259
345
  Example Docker run (Streamable HTTP):
260
346
 
@@ -317,7 +403,7 @@ docker run -p 8000:8000 \
317
403
 
318
404
  ## Supported Tools
319
405
 
320
- The default server configuration currently exposes **101 tools** (including custom agentic tools and OpenAPI-generated tools).
406
+ The default server configuration exposes **101 tools**.
321
407
 
322
408
  ### Custom Agentic Tools
323
409
 
@@ -433,7 +519,7 @@ Delete operations are intentionally scoped to screenshot coverage paths:
433
519
 
434
520
  ## On-Call Health Integration
435
521
 
436
- Rootly MCP integrates with [On-Call Health](https://oncallhealth.ai) to detect workload health risk in scheduled responders.
522
+ Integrates with [On-Call Health](https://oncallhealth.ai) to detect workload health risk in scheduled responders.
437
523
 
438
524
  ### Setup
439
525
 
@@ -467,11 +553,11 @@ Returns at-risk users who are scheduled, recommended safe replacements, and acti
467
553
 
468
554
  ## Example Skills
469
555
 
470
- Want to get started quickly? We provide pre-built Claude Code skills that showcase the full power of the Rootly MCP server:
556
+ Pre-built Claude Code skills:
471
557
 
472
558
  ### 🚨 [Rootly Incident Responder](examples/skills/rootly-incident-responder.md)
473
559
 
474
- An AI-powered incident response specialist that:
560
+ This skill:
475
561
  - Analyzes production incidents with full context
476
562
  - Finds similar historical incidents using ML-based similarity matching
477
563
  - Suggests solutions based on past successful resolutions
@@ -490,7 +576,7 @@ cp examples/skills/rootly-incident-responder.md .claude/skills/
490
576
  # @rootly-incident-responder analyze incident #12345
491
577
  ```
492
578
 
493
- This skill demonstrates a complete incident response workflow using Rootly's intelligent tools combined with GitHub integration for code correlation.
579
+ It demonstrates a full incident response workflow using Rootly tools and GitHub context.
494
580
 
495
581
  ### On-Call Shift Metrics
496
582
 
@@ -6,17 +6,75 @@
6
6
  [![Python Version](https://img.shields.io/pypi/pyversions/rootly-mcp-server.svg)](https://pypi.org/project/rootly-mcp-server/)
7
7
  [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=rootly&config=eyJ1cmwiOiJodHRwczovL21jcC5yb290bHkuY29tL3NzZSIsImhlYWRlcnMiOnsiQXV0aG9yaXphdGlvbiI6IkJlYXJlciA8WU9VUl9ST09UTFlfQVBJX1RPS0VOPiJ9fQ==)
8
8
 
9
- An MCP server for the [Rootly API](https://docs.rootly.com/api-reference/overview) that integrates seamlessly with MCP-compatible editors like Cursor, Windsurf, and Claude. Resolve production incidents in under a minute without leaving your IDE.
9
+ An MCP server for the [Rootly API](https://docs.rootly.com/api-reference/overview) for Cursor, Windsurf, Claude, and other MCP clients.
10
10
 
11
11
  ![Demo GIF](https://raw.githubusercontent.com/Rootly-AI-Labs/Rootly-MCP-server/refs/heads/main/rootly-mcp-server-demo.gif)
12
12
 
13
13
  ## Quick Start
14
14
 
15
- The fastest way to get started is to connect to our hosted MCP server no installation required.
15
+ Use the hosted MCP server. No local installation required.
16
16
 
17
- ### Claude Code
17
+ ### Hosted Transport Options
18
18
 
19
- **Hosted Server (Recommended)**
19
+ - **Streamable HTTP (recommended):** `https://mcp.rootly.com/mcp`
20
+ - **SSE (fallback):** `https://mcp.rootly.com/sse`
21
+ - **Code Mode:** `https://mcp.rootly.com/mcp-codemode`
22
+
23
+ ### General Remote Setup
24
+
25
+ Default remote config (HTTP streamable):
26
+
27
+ ```json
28
+ {
29
+ "mcpServers": {
30
+ "rootly": {
31
+ "url": "https://mcp.rootly.com/mcp",
32
+ "headers": {
33
+ "Authorization": "Bearer YOUR_ROOTLY_API_TOKEN"
34
+ }
35
+ }
36
+ }
37
+ }
38
+ ```
39
+
40
+ SSE fallback:
41
+
42
+ ```json
43
+ {
44
+ "mcpServers": {
45
+ "rootly": {
46
+ "url": "https://mcp.rootly.com/sse",
47
+ "headers": {
48
+ "Authorization": "Bearer YOUR_ROOTLY_API_TOKEN"
49
+ }
50
+ }
51
+ }
52
+ }
53
+ ```
54
+
55
+ Code Mode:
56
+
57
+ ```json
58
+ {
59
+ "mcpServers": {
60
+ "rootly": {
61
+ "url": "https://mcp.rootly.com/mcp-codemode",
62
+ "headers": {
63
+ "Authorization": "Bearer YOUR_ROOTLY_API_TOKEN"
64
+ }
65
+ }
66
+ }
67
+ }
68
+ ```
69
+
70
+ ### Agent Setup
71
+
72
+ <details>
73
+ <summary><strong>Claude Code</strong></summary>
74
+
75
+ <br>
76
+
77
+ **Streamable HTTP**
20
78
 
21
79
  ```bash
22
80
  claude mcp add --transport http rootly https://mcp.rootly.com/mcp \
@@ -39,7 +97,7 @@ claude mcp add --transport sse rootly-sse https://mcp.rootly.com/sse \
39
97
 
40
98
  **Manual Configuration**
41
99
 
42
- Alternatively, create `.mcp.json` in your project root:
100
+ Create `.mcp.json` in your project root:
43
101
 
44
102
  ```json
45
103
  {
@@ -55,9 +113,14 @@ Alternatively, create `.mcp.json` in your project root:
55
113
  }
56
114
  ```
57
115
 
58
- Then restart Claude Code so it reloads the updated configuration.
116
+ Restart Claude Code after updating the config.
117
+
118
+ </details>
59
119
 
60
- ### Gemini CLI
120
+ <details>
121
+ <summary><strong>Gemini CLI</strong></summary>
122
+
123
+ <br>
61
124
 
62
125
  Install the extension:
63
126
 
@@ -81,7 +144,12 @@ Or configure manually in `~/.gemini/settings.json`:
81
144
  }
82
145
  ```
83
146
 
84
- ### Cursor
147
+ </details>
148
+
149
+ <details>
150
+ <summary><strong>Cursor</strong></summary>
151
+
152
+ <br>
85
153
 
86
154
  Add to `.cursor/mcp.json` or `~/.cursor/mcp.json`:
87
155
 
@@ -98,7 +166,12 @@ Add to `.cursor/mcp.json` or `~/.cursor/mcp.json`:
98
166
  }
99
167
  ```
100
168
 
101
- ### Windsurf
169
+ </details>
170
+
171
+ <details>
172
+ <summary><strong>Windsurf</strong></summary>
173
+
174
+ <br>
102
175
 
103
176
  Add to `~/.codeium/windsurf/mcp_config.json`:
104
177
 
@@ -115,7 +188,12 @@ Add to `~/.codeium/windsurf/mcp_config.json`:
115
188
  }
116
189
  ```
117
190
 
118
- ### Codex
191
+ </details>
192
+
193
+ <details>
194
+ <summary><strong>Codex</strong></summary>
195
+
196
+ <br>
119
197
 
120
198
  Add to `~/.codex/config.toml`:
121
199
 
@@ -125,7 +203,12 @@ url = "https://mcp.rootly.com/mcp"
125
203
  bearer_token_env_var = "ROOTLY_API_TOKEN"
126
204
  ```
127
205
 
128
- ### Claude Desktop
206
+ </details>
207
+
208
+ <details>
209
+ <summary><strong>Claude Desktop</strong></summary>
210
+
211
+ <br>
129
212
 
130
213
  Add to `claude_desktop_config.json`:
131
214
 
@@ -146,9 +229,11 @@ Add to `claude_desktop_config.json`:
146
229
  }
147
230
  ```
148
231
 
232
+ </details>
233
+
149
234
  ## Rootly CLI
150
235
 
151
- We also offer a standalone CLI for managing incidents, alerts, services, on-call schedules, and more directly from your terminal.
236
+ Standalone CLI for incidents, alerts, services, and on-call operations.
152
237
 
153
238
  Install via Homebrew:
154
239
 
@@ -166,7 +251,7 @@ For more details, see the [Rootly CLI repository](https://github.com/rootlyhq/ro
166
251
 
167
252
  ## Alternative Installation (Local)
168
253
 
169
- If you prefer to run the MCP server locally, configure your editor with one of the options below. The package will be automatically downloaded and installed when you first open your editor.
254
+ Run the MCP server locally if you do not want to use the hosted service.
170
255
 
171
256
  ### Prerequisites
172
257
 
@@ -175,17 +260,17 @@ If you prefer to run the MCP server locally, configure your editor with one of t
175
260
  ```bash
176
261
  curl -LsSf https://astral.sh/uv/install.sh | sh
177
262
  ```
178
- - [Rootly API token](https://docs.rootly.com/api-reference/overview#how-to-generate-an-api-key%3F) with appropriate permissions (see below)
263
+ - [Rootly API token](https://docs.rootly.com/api-reference/overview#how-to-generate-an-api-key%3F)
179
264
 
180
- ### API Token Permissions
265
+ ### API Token Types
181
266
 
182
- The MCP server requires a Rootly API token. Choose the appropriate token type based on your needs:
267
+ Choose the token type based on the access you need:
183
268
 
184
- - **Global API Key** (Recommended): Full access to all entities across your Rootly instance. Required for organization-wide visibility across teams, schedules, and incidents.
185
- - **Team API Key**: Team Admin permissions with full read/edit access to entities owned by that team. Suitable for team-specific workflows.
186
- - **Personal API Key**: Inherits the permissions of the user who created it. Works for individual use cases but may have limited visibility.
269
+ - **Global API Key**: Full access across the Rootly instance. Best for organization-wide visibility.
270
+ - **Team API Key**: Access limited to entities owned by that team.
271
+ - **Personal API Key**: Access matches the user who created it.
187
272
 
188
- For full functionality of tools like `get_oncall_handoff_summary`, `get_oncall_shift_metrics`, and organization-wide incident search, a **Global API Key** is recommended.
273
+ A **Global API Key** is recommended for tools like `get_oncall_handoff_summary`, `get_oncall_shift_metrics`, and org-wide incident search.
189
274
 
190
275
  ### With uv
191
276
 
@@ -215,7 +300,7 @@ Choose one transport per server process:
215
300
 
216
301
  - **Streamable HTTP** endpoint path: `/mcp`
217
302
  - **SSE** endpoint path: `/sse`
218
- - **Code Mode (experimental)** endpoint path: `/mcp-codemode` in hosted dual-transport mode. Set `ROOTLY_CODE_MODE_ENABLED=false` to disable it or `ROOTLY_CODE_MODE_PATH` to customize the path.
303
+ - **Code Mode (experimental)** endpoint path: `/mcp-codemode` in hosted dual-transport mode
219
304
 
220
305
  Example Docker run (Streamable HTTP):
221
306
 
@@ -278,7 +363,7 @@ docker run -p 8000:8000 \
278
363
 
279
364
  ## Supported Tools
280
365
 
281
- The default server configuration currently exposes **101 tools** (including custom agentic tools and OpenAPI-generated tools).
366
+ The default server configuration exposes **101 tools**.
282
367
 
283
368
  ### Custom Agentic Tools
284
369
 
@@ -394,7 +479,7 @@ Delete operations are intentionally scoped to screenshot coverage paths:
394
479
 
395
480
  ## On-Call Health Integration
396
481
 
397
- Rootly MCP integrates with [On-Call Health](https://oncallhealth.ai) to detect workload health risk in scheduled responders.
482
+ Integrates with [On-Call Health](https://oncallhealth.ai) to detect workload health risk in scheduled responders.
398
483
 
399
484
  ### Setup
400
485
 
@@ -428,11 +513,11 @@ Returns at-risk users who are scheduled, recommended safe replacements, and acti
428
513
 
429
514
  ## Example Skills
430
515
 
431
- Want to get started quickly? We provide pre-built Claude Code skills that showcase the full power of the Rootly MCP server:
516
+ Pre-built Claude Code skills:
432
517
 
433
518
  ### 🚨 [Rootly Incident Responder](examples/skills/rootly-incident-responder.md)
434
519
 
435
- An AI-powered incident response specialist that:
520
+ This skill:
436
521
  - Analyzes production incidents with full context
437
522
  - Finds similar historical incidents using ML-based similarity matching
438
523
  - Suggests solutions based on past successful resolutions
@@ -451,7 +536,7 @@ cp examples/skills/rootly-incident-responder.md .claude/skills/
451
536
  # @rootly-incident-responder analyze incident #12345
452
537
  ```
453
538
 
454
- This skill demonstrates a complete incident response workflow using Rootly's intelligent tools combined with GitHub integration for code correlation.
539
+ It demonstrates a full incident response workflow using Rootly tools and GitHub context.
455
540
 
456
541
  ### On-Call Shift Metrics
457
542