rootly-mcp-server 2.0.13__py3-none-any.whl → 2.0.15__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rootly-mcp-server
3
- Version: 2.0.13
3
+ Version: 2.0.15
4
4
  Summary: A Model Context Protocol server for Rootly APIs using OpenAPI spec
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
@@ -28,6 +28,10 @@ Description-Content-Type: text/markdown
28
28
 
29
29
  # Rootly MCP Server
30
30
 
31
+ [![PyPI version](https://badge.fury.io/py/rootly-mcp-server.svg)](https://pypi.org/project/rootly-mcp-server/)
32
+ [![PyPI - Downloads](https://img.shields.io/pypi/dm/rootly-mcp-server)](https://pypi.org/project/rootly-mcp-server/)
33
+ [![Python Version](https://img.shields.io/pypi/pyversions/rootly-mcp-server.svg)](https://pypi.org/project/rootly-mcp-server/)
34
+
31
35
  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.
32
36
 
33
37
  [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=rootly&config=eyJjb21tYW5kIjoibnB4IC15IG1jcC1yZW1vdGUgaHR0cHM6Ly9tY3Aucm9vdGx5LmNvbS9zc2UgLS1oZWFkZXIgQXV0aG9yaXphdGlvbjoke1JPT1RMWV9BVVRIX0hFQURFUn0iLCJlbnYiOnsiUk9PVExZX0FVVEhfSEVBREVSIjoiQmVhcmVyIDxZT1VSX1JPT1RMWV9BUElfVE9LRU4%2BIn19)
@@ -59,7 +63,7 @@ Configure your MCP-compatible editor (tested with Cursor) with one of the config
59
63
  "run",
60
64
  "--from",
61
65
  "rootly-mcp-server",
62
- "rootly-mcp-server",
66
+ "rootly-mcp-server"
63
67
  ],
64
68
  "env": {
65
69
  "ROOTLY_API_TOKEN": "<YOUR_ROOTLY_API_TOKEN>"
@@ -79,7 +83,7 @@ Configure your MCP-compatible editor (tested with Cursor) with one of the config
79
83
  "args": [
80
84
  "--from",
81
85
  "rootly-mcp-server",
82
- "rootly-mcp-server",
86
+ "rootly-mcp-server"
83
87
  ],
84
88
  "env": {
85
89
  "ROOTLY_API_TOKEN": "<YOUR_ROOTLY_API_TOKEN>"
@@ -139,46 +143,60 @@ Alternatively, connect directly to our hosted MCP server:
139
143
  - **Dynamic Tool Generation**: Automatically creates MCP resources from Rootly's OpenAPI (Swagger) specification
140
144
  - **Smart Pagination**: Defaults to 10 items per request for incident endpoints to prevent context window overflow
141
145
  - **API Filtering**: Limits exposed API endpoints for security and performance
142
- - **AI-Powered Incident Analysis**: Smart tools that learn from historical incident data
143
- - **`find_related_incidents`**: Uses TF-IDF similarity analysis to find historically similar incidents
146
+ - **Intelligent Incident Analysis**: Smart tools that analyze historical incident data
147
+ - **`find_related_incidents`**: Uses TF-IDF similarity analysis to find historically similar incidents
144
148
  - **`suggest_solutions`**: Mines past incident resolutions to recommend actionable solutions
145
149
  - **MCP Resources**: Exposes incident and team data as structured resources for easy AI reference
146
150
  - **Intelligent Pattern Recognition**: Automatically identifies services, error types, and resolution patterns
147
151
 
148
- ### Whitelisted Endpoints
149
-
150
- By default, the following Rootly API endpoints are exposed to the AI agent (see `allowed_paths` in `src/rootly_mcp_server/server.py`):
151
-
152
- ```
153
- /v1/incidents
154
- /v1/incidents/{incident_id}/alerts
155
- /v1/alerts
156
- /v1/alerts/{alert_id}
157
- /v1/severities
158
- /v1/severities/{severity_id}
159
- /v1/teams
160
- /v1/teams/{team_id}
161
- /v1/services
162
- /v1/services/{service_id}
163
- /v1/functionalities
164
- /v1/functionalities/{functionality_id}
165
- /v1/incident_types
166
- /v1/incident_types/{incident_type_id}
167
- /v1/incident_action_items
168
- /v1/incident_action_items/{incident_action_item_id}
169
- /v1/incidents/{incident_id}/action_items
170
- /v1/workflows
171
- /v1/workflows/{workflow_id}
172
- /v1/workflow_runs
173
- /v1/workflow_runs/{workflow_run_id}
174
- /v1/environments
175
- /v1/environments/{environment_id}
176
- /v1/users
177
- /v1/users/{user_id}
178
- /v1/users/me
179
- /v1/status_pages
180
- /v1/status_pages/{status_page_id}
181
- ```
152
+ ### Available Tools
153
+
154
+ **Alerts**
155
+ - `listIncidentAlerts`
156
+ - `listAlerts`
157
+ - `attachAlert`
158
+ - `createAlert`
159
+
160
+ **Environments**
161
+ - `listEnvironments`
162
+ - `createEnvironment`
163
+
164
+ **Functionalities**
165
+ - `listFunctionalities`
166
+ - `createFunctionality`
167
+
168
+ **Workflows**
169
+ - `listWorkflows`
170
+ - `createWorkflow`
171
+
172
+ **Incidents**
173
+ - `listIncidentActionItems`
174
+ - `createIncidentActionItem`
175
+ - `listIncident_Types`
176
+ - `createIncidentType`
177
+ - `search_incidents`
178
+ - `find_related_incidents`
179
+ - `suggest_solutions`
180
+
181
+ **On-Call**
182
+ - `get_oncall_shift_metrics`
183
+ - `get_oncall_handoff_summary`
184
+ - `get_shift_incidents`
185
+
186
+ **Services & Severities**
187
+ - `listServices`
188
+ - `createService`
189
+ - `listSeverities`
190
+ - `createSeverity`
191
+
192
+ **Teams & Users**
193
+ - `listTeams`
194
+ - `createTeam`
195
+ - `listUsers`
196
+ - `getCurrentUser`
197
+
198
+ **Meta**
199
+ - `list_endpoints`
182
200
 
183
201
  ### Why Path Limiting?
184
202
 
@@ -189,14 +207,14 @@ We limit exposed API paths for two key reasons:
189
207
 
190
208
  To expose additional paths, modify the `allowed_paths` variable in `src/rootly_mcp_server/server.py`.
191
209
 
192
- ### AI-Powered Smart Tools
210
+ ### Smart Analysis Tools
193
211
 
194
212
  The MCP server includes intelligent tools that analyze historical incident data to provide actionable insights:
195
213
 
196
214
  #### `find_related_incidents`
197
- Finds historically similar incidents using machine learning text analysis:
215
+ Finds historically similar incidents using text similarity analysis:
198
216
  ```
199
- find_related_incidents(incident_id="12345", similarity_threshold=0.3, max_results=5)
217
+ find_related_incidents(incident_id="12345", similarity_threshold=0.15, max_results=5)
200
218
  ```
201
219
  - **Input**: Incident ID, similarity threshold (0.0-1.0), max results
202
220
  - **Output**: Similar incidents with confidence scores, matched services, and resolution times
@@ -211,7 +229,7 @@ suggest_solutions(incident_title="Payment API errors", incident_description="Use
211
229
  ```
212
230
  - **Input**: Either incident ID OR title/description text
213
231
  - **Output**: Actionable solution recommendations with confidence scores and time estimates
214
- - **Use Case**: Get AI-powered suggestions based on successful past resolutions
232
+ - **Use Case**: Get intelligent suggestions based on successful past resolutions
215
233
 
216
234
  #### How It Works
217
235
  - **Text Similarity**: Uses TF-IDF vectorization and cosine similarity (scikit-learn)
@@ -228,6 +246,56 @@ For optimal results, ensure your Rootly incidents have descriptive:
228
246
 
229
247
  Example good resolution summary: `"Restarted auth-service, cleared Redis cache, and increased connection pool from 10 to 50"`
230
248
 
249
+ ### On-Call Shift Metrics
250
+
251
+ 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.
252
+
253
+ ```
254
+ get_oncall_shift_metrics(
255
+ start_date="2025-10-01",
256
+ end_date="2025-10-31",
257
+ group_by="user"
258
+ )
259
+ ```
260
+
261
+ ### On-Call Handoff Summary
262
+
263
+ Complete handoff: current/next on-call + incidents during shifts.
264
+
265
+ ```python
266
+ # All on-call (any timezone)
267
+ get_oncall_handoff_summary(
268
+ team_ids="team-1,team-2",
269
+ timezone="America/Los_Angeles"
270
+ )
271
+
272
+ # Regional filter - only show APAC on-call during APAC business hours
273
+ get_oncall_handoff_summary(
274
+ timezone="Asia/Tokyo",
275
+ filter_by_region=True
276
+ )
277
+ ```
278
+
279
+ Regional filtering shows only people on-call during business hours (9am-5pm) in the specified timezone.
280
+
281
+ Returns: `schedules` with `current_oncall`, `next_oncall`, and `shift_incidents`
282
+
283
+ ### Shift Incidents
284
+
285
+ Incidents during a time period, with filtering by severity/status/tags.
286
+
287
+ ```python
288
+ get_shift_incidents(
289
+ start_time="2025-10-20T09:00:00Z",
290
+ end_time="2025-10-20T17:00:00Z",
291
+ severity="critical", # optional
292
+ status="resolved", # optional
293
+ tags="database,api" # optional
294
+ )
295
+ ```
296
+
297
+ Returns: `incidents` list + `summary` (counts, avg resolution time, grouping)
298
+
231
299
  ## About Rootly AI Labs
232
300
 
233
301
  This 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.
@@ -261,7 +329,20 @@ To add new dependencies during development:
261
329
  uv pip install <package>
262
330
  ```
263
331
 
264
- ### 3. Verify Installation
332
+ ### 3. Set Up Git Hooks (Recommended for Contributors)
333
+
334
+ Install pre-commit hooks to automatically run linting and tests before commits:
335
+
336
+ ```bash
337
+ ./scripts/setup-hooks.sh
338
+ ```
339
+
340
+ This ensures code quality by running:
341
+ - Ruff linting
342
+ - Pyright type checking
343
+ - Unit tests
344
+
345
+ ### 4. Verify Installation
265
346
 
266
347
  The server should now be ready to use with your MCP-compatible editor.
267
348
 
@@ -1,12 +1,13 @@
1
1
  rootly_mcp_server/__init__.py,sha256=rvIuqIyuzgC7b9qSnylrdDP2zPO-7Ou9AoblR6re1co,629
2
2
  rootly_mcp_server/__main__.py,sha256=_F4p65_VjnN84RtmEdESVLLH0tO5tL9qBfb2Xdvbj2E,6480
3
3
  rootly_mcp_server/client.py,sha256=uit-YijR7OAJtysBoclqnublEDVkFfcb29wSzhpBv44,4686
4
- rootly_mcp_server/server.py,sha256=BX4bRTlzUBI0xNha-owy9FRSmBCpVRM2qgSv5m5SHzE,44413
4
+ rootly_mcp_server/server.py,sha256=Qmsv-BKNhsEj8_7S1glBgLEN6OlSKqOvMRgJ40ZFeCg,98716
5
5
  rootly_mcp_server/smart_utils.py,sha256=lvGN9ITyJjBkm7ejpYagd8VWodLKnC6FmwECfCOcGwM,22973
6
+ rootly_mcp_server/texttest.json,sha256=KV9m13kWugmW1VEpU80Irp50uCcLgJtV1YT-JzMogQg,154182
6
7
  rootly_mcp_server/utils.py,sha256=NyxdcDiFGlV2a8eBO4lKgZg0D7Gxr6xUIB0YyJGgpPA,4165
7
8
  rootly_mcp_server/data/__init__.py,sha256=fO8a0bQnRVEoRMHKvhFzj10bhoaw7VsI51czc2MsUm4,143
8
- rootly_mcp_server-2.0.13.dist-info/METADATA,sha256=86--37XF6dDVqGyzqdmNGbaq0gEzRtGC_gJrtoduQXY,8722
9
- rootly_mcp_server-2.0.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
10
- rootly_mcp_server-2.0.13.dist-info/entry_points.txt,sha256=NE33b8VgigVPGBkboyo6pvN1Vz35HZtLybxMO4Q03PI,70
11
- rootly_mcp_server-2.0.13.dist-info/licenses/LICENSE,sha256=c9w9ZZGl14r54tsP40oaq5adTVX_HMNHozPIH2ymzmw,11341
12
- rootly_mcp_server-2.0.13.dist-info/RECORD,,
9
+ rootly_mcp_server-2.0.15.dist-info/METADATA,sha256=stGxakp4C-3jGIZG7pqAm3wim_UxAlrTikO--kApdiE,10552
10
+ rootly_mcp_server-2.0.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
11
+ rootly_mcp_server-2.0.15.dist-info/entry_points.txt,sha256=NE33b8VgigVPGBkboyo6pvN1Vz35HZtLybxMO4Q03PI,70
12
+ rootly_mcp_server-2.0.15.dist-info/licenses/LICENSE,sha256=c9w9ZZGl14r54tsP40oaq5adTVX_HMNHozPIH2ymzmw,11341
13
+ rootly_mcp_server-2.0.15.dist-info/RECORD,,