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.
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.github/workflows/ci.yml +1 -1
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/CHANGELOG.md +136 -2
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/PKG-INFO +115 -29
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/README.md +111 -26
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/pyproject.toml +4 -3
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/code_mode.py +132 -3
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/server.py +63 -15
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_code_mode_module.py +116 -2
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_server.py +168 -1
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/uv.lock +14 -12
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.dockerignore +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.gitattributes +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.github/dependabot.yml +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.github/workflows/dependency-review.yml +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.github/workflows/pypi-release.yml +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.gitignore +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.semaphore/deploy-staging.yml +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.semaphore/deploy.yml +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.semaphore/semaphore.yml +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/.semaphore/update-task-definition.sh +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/CONTRIBUTING.md +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/Dockerfile +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/LICENSE +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/examples/skills/README.md +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/gemini-extension.json +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/rootly-mcp-server-demo.gif +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/rootly_openapi.json +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/scripts/setup-hooks.sh +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/server.json +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/__init__.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/__main__.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/client.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/data/__init__.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/exceptions.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/legacy_server.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/mcp_error.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/monitoring.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/och_client.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/pagination.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/payload_stripping.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/security.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/server_defaults.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/smart_utils.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/spec_transform.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/__init__.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/alerts.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/incidents.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/oncall.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/resources.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/transport.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/utils.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/validators.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/README.md +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/conftest.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/integration/local/test_basic.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/integration/local/test_smart_tools.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/integration/remote/test_essential.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/test_client.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_alert_stripping.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_authentication.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_exceptions.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_http_headers.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_legacy_server_module.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_main_transport.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_mcp_error_module.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_och_client.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_oncall_handoff.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_oncall_metrics.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_oncall_new_tools.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_oncall_severity_normalization.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_payload_stripping_module.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_security.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_server_defaults_module.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_smart_utils.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_tools.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_transport_module.py +0 -0
- {rootly_mcp_server-2.2.12 → rootly_mcp_server-2.2.13}/tests/unit/test_utils.py +0 -0
- {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@
|
|
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
|
-
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
[](https://pypi.org/project/rootly-mcp-server/)
|
|
46
47
|
[](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)
|
|
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
|

|
|
51
52
|
|
|
52
53
|
## Quick Start
|
|
53
54
|
|
|
54
|
-
|
|
55
|
+
Use the hosted MCP server. No local installation required.
|
|
55
56
|
|
|
56
|
-
###
|
|
57
|
+
### Hosted Transport Options
|
|
57
58
|
|
|
58
|
-
**
|
|
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
|
-
|
|
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
|
-
|
|
156
|
+
Restart Claude Code after updating the config.
|
|
157
|
+
|
|
158
|
+
</details>
|
|
98
159
|
|
|
99
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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)
|
|
303
|
+
- [Rootly API token](https://docs.rootly.com/api-reference/overview#how-to-generate-an-api-key%3F)
|
|
218
304
|
|
|
219
|
-
### API Token
|
|
305
|
+
### API Token Types
|
|
220
306
|
|
|
221
|
-
|
|
307
|
+
Choose the token type based on the access you need:
|
|
222
308
|
|
|
223
|
-
- **Global API Key
|
|
224
|
-
- **Team API Key**:
|
|
225
|
-
- **Personal API Key**:
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
556
|
+
Pre-built Claude Code skills:
|
|
471
557
|
|
|
472
558
|
### 🚨 [Rootly Incident Responder](examples/skills/rootly-incident-responder.md)
|
|
473
559
|
|
|
474
|
-
|
|
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
|
-
|
|
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
|
[](https://pypi.org/project/rootly-mcp-server/)
|
|
7
7
|
[](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)
|
|
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
|

|
|
12
12
|
|
|
13
13
|
## Quick Start
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Use the hosted MCP server. No local installation required.
|
|
16
16
|
|
|
17
|
-
###
|
|
17
|
+
### Hosted Transport Options
|
|
18
18
|
|
|
19
|
-
**
|
|
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
|
-
|
|
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
|
-
|
|
116
|
+
Restart Claude Code after updating the config.
|
|
117
|
+
|
|
118
|
+
</details>
|
|
59
119
|
|
|
60
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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)
|
|
263
|
+
- [Rootly API token](https://docs.rootly.com/api-reference/overview#how-to-generate-an-api-key%3F)
|
|
179
264
|
|
|
180
|
-
### API Token
|
|
265
|
+
### API Token Types
|
|
181
266
|
|
|
182
|
-
|
|
267
|
+
Choose the token type based on the access you need:
|
|
183
268
|
|
|
184
|
-
- **Global API Key
|
|
185
|
-
- **Team API Key**:
|
|
186
|
-
- **Personal API Key**:
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
516
|
+
Pre-built Claude Code skills:
|
|
432
517
|
|
|
433
518
|
### 🚨 [Rootly Incident Responder](examples/skills/rootly-incident-responder.md)
|
|
434
519
|
|
|
435
|
-
|
|
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
|
-
|
|
539
|
+
It demonstrates a full incident response workflow using Rootly tools and GitHub context.
|
|
455
540
|
|
|
456
541
|
### On-Call Shift Metrics
|
|
457
542
|
|