rootly-mcp-server 2.2.11__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.11 → rootly_mcp_server-2.2.13}/.github/workflows/ci.yml +1 -1
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/CHANGELOG.md +136 -2
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/PKG-INFO +134 -26
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/README.md +130 -23
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/pyproject.toml +4 -3
- rootly_mcp_server-2.2.13/src/rootly_mcp_server/code_mode.py +294 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/server.py +63 -15
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/oncall.py +117 -21
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/transport.py +228 -0
- rootly_mcp_server-2.2.13/tests/unit/test_code_mode_module.py +273 -0
- rootly_mcp_server-2.2.13/tests/unit/test_oncall_handoff.py +475 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_server.py +168 -1
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_transport_module.py +126 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/uv.lock +14 -12
- rootly_mcp_server-2.2.11/src/rootly_mcp_server/code_mode.py +0 -160
- rootly_mcp_server-2.2.11/tests/unit/test_code_mode_module.py +0 -149
- rootly_mcp_server-2.2.11/tests/unit/test_oncall_handoff.py +0 -69
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/.dockerignore +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/.gitattributes +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/.github/dependabot.yml +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/.github/workflows/dependency-review.yml +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/.github/workflows/pypi-release.yml +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/.gitignore +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/.semaphore/deploy-staging.yml +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/.semaphore/deploy.yml +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/.semaphore/semaphore.yml +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/.semaphore/update-task-definition.sh +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/CONTRIBUTING.md +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/Dockerfile +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/LICENSE +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/examples/skills/README.md +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/gemini-extension.json +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/rootly-mcp-server-demo.gif +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/rootly_openapi.json +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/scripts/setup-hooks.sh +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/server.json +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/__init__.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/__main__.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/client.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/data/__init__.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/exceptions.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/legacy_server.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/mcp_error.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/monitoring.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/och_client.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/pagination.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/payload_stripping.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/security.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/server_defaults.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/smart_utils.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/spec_transform.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/__init__.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/alerts.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/incidents.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/tools/resources.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/utils.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/src/rootly_mcp_server/validators.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/README.md +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/conftest.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/integration/local/test_basic.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/integration/local/test_smart_tools.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/integration/remote/test_essential.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/test_client.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_alert_stripping.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_authentication.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_exceptions.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_http_headers.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_legacy_server_module.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_main_transport.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_mcp_error_module.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_och_client.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_oncall_metrics.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_oncall_new_tools.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_oncall_severity_normalization.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_payload_stripping_module.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_security.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_server_defaults_module.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_smart_utils.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_tools.py +0 -0
- {rootly_mcp_server-2.2.11 → rootly_mcp_server-2.2.13}/tests/unit/test_utils.py +0 -0
- {rootly_mcp_server-2.2.11 → 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,15 +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
|
|
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**
|
|
57
118
|
|
|
58
119
|
```bash
|
|
59
120
|
claude mcp add --transport http rootly https://mcp.rootly.com/mcp \
|
|
@@ -74,7 +135,32 @@ claude mcp add --transport sse rootly-sse https://mcp.rootly.com/sse \
|
|
|
74
135
|
--header "Authorization: Bearer YOUR_ROOTLY_API_TOKEN"
|
|
75
136
|
```
|
|
76
137
|
|
|
77
|
-
|
|
138
|
+
**Manual Configuration**
|
|
139
|
+
|
|
140
|
+
Create `.mcp.json` in your project root:
|
|
141
|
+
|
|
142
|
+
```json
|
|
143
|
+
{
|
|
144
|
+
"mcpServers": {
|
|
145
|
+
"rootly": {
|
|
146
|
+
"type": "sse",
|
|
147
|
+
"url": "https://mcp.rootly.com/sse",
|
|
148
|
+
"headers": {
|
|
149
|
+
"Authorization": "Bearer YOUR_ROOTLY_API_TOKEN"
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Restart Claude Code after updating the config.
|
|
157
|
+
|
|
158
|
+
</details>
|
|
159
|
+
|
|
160
|
+
<details>
|
|
161
|
+
<summary><strong>Gemini CLI</strong></summary>
|
|
162
|
+
|
|
163
|
+
<br>
|
|
78
164
|
|
|
79
165
|
Install the extension:
|
|
80
166
|
|
|
@@ -98,7 +184,12 @@ Or configure manually in `~/.gemini/settings.json`:
|
|
|
98
184
|
}
|
|
99
185
|
```
|
|
100
186
|
|
|
101
|
-
|
|
187
|
+
</details>
|
|
188
|
+
|
|
189
|
+
<details>
|
|
190
|
+
<summary><strong>Cursor</strong></summary>
|
|
191
|
+
|
|
192
|
+
<br>
|
|
102
193
|
|
|
103
194
|
Add to `.cursor/mcp.json` or `~/.cursor/mcp.json`:
|
|
104
195
|
|
|
@@ -115,7 +206,12 @@ Add to `.cursor/mcp.json` or `~/.cursor/mcp.json`:
|
|
|
115
206
|
}
|
|
116
207
|
```
|
|
117
208
|
|
|
118
|
-
|
|
209
|
+
</details>
|
|
210
|
+
|
|
211
|
+
<details>
|
|
212
|
+
<summary><strong>Windsurf</strong></summary>
|
|
213
|
+
|
|
214
|
+
<br>
|
|
119
215
|
|
|
120
216
|
Add to `~/.codeium/windsurf/mcp_config.json`:
|
|
121
217
|
|
|
@@ -132,7 +228,12 @@ Add to `~/.codeium/windsurf/mcp_config.json`:
|
|
|
132
228
|
}
|
|
133
229
|
```
|
|
134
230
|
|
|
135
|
-
|
|
231
|
+
</details>
|
|
232
|
+
|
|
233
|
+
<details>
|
|
234
|
+
<summary><strong>Codex</strong></summary>
|
|
235
|
+
|
|
236
|
+
<br>
|
|
136
237
|
|
|
137
238
|
Add to `~/.codex/config.toml`:
|
|
138
239
|
|
|
@@ -142,7 +243,12 @@ url = "https://mcp.rootly.com/mcp"
|
|
|
142
243
|
bearer_token_env_var = "ROOTLY_API_TOKEN"
|
|
143
244
|
```
|
|
144
245
|
|
|
145
|
-
|
|
246
|
+
</details>
|
|
247
|
+
|
|
248
|
+
<details>
|
|
249
|
+
<summary><strong>Claude Desktop</strong></summary>
|
|
250
|
+
|
|
251
|
+
<br>
|
|
146
252
|
|
|
147
253
|
Add to `claude_desktop_config.json`:
|
|
148
254
|
|
|
@@ -163,9 +269,11 @@ Add to `claude_desktop_config.json`:
|
|
|
163
269
|
}
|
|
164
270
|
```
|
|
165
271
|
|
|
272
|
+
</details>
|
|
273
|
+
|
|
166
274
|
## Rootly CLI
|
|
167
275
|
|
|
168
|
-
|
|
276
|
+
Standalone CLI for incidents, alerts, services, and on-call operations.
|
|
169
277
|
|
|
170
278
|
Install via Homebrew:
|
|
171
279
|
|
|
@@ -183,7 +291,7 @@ For more details, see the [Rootly CLI repository](https://github.com/rootlyhq/ro
|
|
|
183
291
|
|
|
184
292
|
## Alternative Installation (Local)
|
|
185
293
|
|
|
186
|
-
|
|
294
|
+
Run the MCP server locally if you do not want to use the hosted service.
|
|
187
295
|
|
|
188
296
|
### Prerequisites
|
|
189
297
|
|
|
@@ -192,17 +300,17 @@ If you prefer to run the MCP server locally, configure your editor with one of t
|
|
|
192
300
|
```bash
|
|
193
301
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
194
302
|
```
|
|
195
|
-
- [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)
|
|
196
304
|
|
|
197
|
-
### API Token
|
|
305
|
+
### API Token Types
|
|
198
306
|
|
|
199
|
-
|
|
307
|
+
Choose the token type based on the access you need:
|
|
200
308
|
|
|
201
|
-
- **Global API Key
|
|
202
|
-
- **Team API Key**:
|
|
203
|
-
- **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.
|
|
204
312
|
|
|
205
|
-
|
|
313
|
+
A **Global API Key** is recommended for tools like `get_oncall_handoff_summary`, `get_oncall_shift_metrics`, and org-wide incident search.
|
|
206
314
|
|
|
207
315
|
### With uv
|
|
208
316
|
|
|
@@ -232,7 +340,7 @@ Choose one transport per server process:
|
|
|
232
340
|
|
|
233
341
|
- **Streamable HTTP** endpoint path: `/mcp`
|
|
234
342
|
- **SSE** endpoint path: `/sse`
|
|
235
|
-
- **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
|
|
236
344
|
|
|
237
345
|
Example Docker run (Streamable HTTP):
|
|
238
346
|
|
|
@@ -295,7 +403,7 @@ docker run -p 8000:8000 \
|
|
|
295
403
|
|
|
296
404
|
## Supported Tools
|
|
297
405
|
|
|
298
|
-
The default server configuration
|
|
406
|
+
The default server configuration exposes **101 tools**.
|
|
299
407
|
|
|
300
408
|
### Custom Agentic Tools
|
|
301
409
|
|
|
@@ -411,7 +519,7 @@ Delete operations are intentionally scoped to screenshot coverage paths:
|
|
|
411
519
|
|
|
412
520
|
## On-Call Health Integration
|
|
413
521
|
|
|
414
|
-
|
|
522
|
+
Integrates with [On-Call Health](https://oncallhealth.ai) to detect workload health risk in scheduled responders.
|
|
415
523
|
|
|
416
524
|
### Setup
|
|
417
525
|
|
|
@@ -445,11 +553,11 @@ Returns at-risk users who are scheduled, recommended safe replacements, and acti
|
|
|
445
553
|
|
|
446
554
|
## Example Skills
|
|
447
555
|
|
|
448
|
-
|
|
556
|
+
Pre-built Claude Code skills:
|
|
449
557
|
|
|
450
558
|
### 🚨 [Rootly Incident Responder](examples/skills/rootly-incident-responder.md)
|
|
451
559
|
|
|
452
|
-
|
|
560
|
+
This skill:
|
|
453
561
|
- Analyzes production incidents with full context
|
|
454
562
|
- Finds similar historical incidents using ML-based similarity matching
|
|
455
563
|
- Suggests solutions based on past successful resolutions
|
|
@@ -468,7 +576,7 @@ cp examples/skills/rootly-incident-responder.md .claude/skills/
|
|
|
468
576
|
# @rootly-incident-responder analyze incident #12345
|
|
469
577
|
```
|
|
470
578
|
|
|
471
|
-
|
|
579
|
+
It demonstrates a full incident response workflow using Rootly tools and GitHub context.
|
|
472
580
|
|
|
473
581
|
### On-Call Shift Metrics
|
|
474
582
|
|