Skip to content

Commit 80279d1

Browse files
committed
Merge branch 'master' into ROB-1323-cluster-status-init-crash-take-2
2 parents ce4f5d7 + cfd8999 commit 80279d1

5 files changed

Lines changed: 2078 additions & 1147 deletions

File tree

Dockerfile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ RUN find "/app/venv/lib/python3.11/site-packages/kubernetes/client/models/" -typ
5353
# Final stage
5454
FROM python:3.11-slim
5555

56+
5657
ENV ENV_TYPE=DEV
5758
ENV PYTHONUNBUFFERED=1
5859
ENV VIRTUAL_ENV=/app/venv
@@ -74,7 +75,8 @@ RUN apt-get update \
7475
# Patching CVE-2024-32002
7576
RUN git config --global core.symlinks false
7677

77-
# Remove setuptools-65.5.1 installed from python:3.11-slim base image as fix for CVE-2024-6345 until image will be updated
78+
# Temporary setuptools CVE fix untill python:3.12-slim image will be used.
79+
RUN rm -rf /usr/local/lib/python3.11/ensurepip/_bundled/setuptools-65.5.0-py3-none-any.whl
7880
RUN rm -rf /usr/local/lib/python3.11/site-packages/setuptools-65.5.1.dist-info
7981

8082
COPY --from=builder /app/venv /venv

docs/configuration/holmesgpt/remote_mcp_servers.rst

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,165 @@ Example : MCP server configuration
4141
4242
helm upgrade robusta robusta/robusta --values=generated_values.yaml --set clusterName=<YOUR_CLUSTER_NAME>
4343
44+
45+
Example : Working with Stdio MCP servers
46+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
47+
48+
MCP currently supports three transport mechanisms: stdio, Server-Sent Events (SSE), and Streamable HTTP.
49+
At this time, HolmesGPT is compatible only with MCP servers that use SSE.
50+
However, many existing MCP servers—such as Dynatrace MCP—rely exclusively on the stdio transport.
51+
To overcome this incompatibility, tools like Supergateway can act as a bridge by converting stdio-based MCPs into SSE-compatible endpoints.
52+
53+
For this demo we will use
54+
* `Dynatrace MCP <https://github.com/dynatrace-oss/dynatrace-mcp>`_ .
55+
* `Supergateway <https://github.com/supercorp-ai/supergateway>`_ - runs MCP stdio-based servers over SSE.
56+
57+
Check out supergatway docs to find out other useful flags.
58+
59+
**See it in action**
60+
61+
.. raw:: html
62+
63+
<div>
64+
<a href="https://www.loom.com/share/1b290511b79942c7b1d672a2a4cde105">
65+
<img style="max-width:300px;" src="https://cdn.loom.com/sessions/thumbnails/1b290511b79942c7b1d672a2a4cde105-ed4eed3f9d70b125-full-play.gif">
66+
</a>
67+
</div>
68+
69+
1. Run stdio MCP as SSE
70+
""""""""""""""""""""""""""""""
71+
.. md-tab-set::
72+
73+
.. md-tab-item:: Docker
74+
75+
This command runs the Dynatrace MCP server locally via Docker using Supergateway to wrap it with SSE support.
76+
Credentials (e.g., API keys) should be stored in a .env file passed to Docker using --env-file.
77+
you can change `"npx -y @dynatrace-oss/dynatrace-mcp-server@latest /"` to your specific MCP.
78+
79+
.. code-block:: shell
80+
81+
docker run --env-file .env -it --rm -p 8003:8003 supercorp/supergateway \
82+
--stdio "npx -y @dynatrace-oss/dynatrace-mcp-server@latest /" \
83+
--port 8003 \
84+
--logLevel debug
85+
86+
Once the container starts, you should see logs similar to:
87+
88+
.. code-block:: shell
89+
90+
[supergateway] Starting...
91+
[supergateway] Supergateway is supported by Supermachine (hosted MCPs) - https://supermachine.ai
92+
[supergateway] - outputTransport: sse
93+
[supergateway] - Headers: (none)
94+
[supergateway] - port: 8003
95+
[supergateway] - stdio: npx -y @dynatrace-oss/dynatrace-mcp-server@latest /
96+
[supergateway] - ssePath: /sse
97+
[supergateway] - messagePath: /message
98+
[supergateway] - CORS: disabled
99+
[supergateway] - Health endpoints: (none)
100+
[supergateway] Listening on port 8003
101+
[supergateway] SSE endpoint: http://localhost:8003/sse
102+
[supergateway] POST messages: http://localhost:8003/message
103+
104+
.. md-tab-item:: Kubernetes Pod
44105

106+
| This will run dynatrace MCP server as a pod in your cluster.
107+
| credentials are passed as env vars.
108+
109+
.. code-block:: yaml
110+
111+
apiVersion: v1
112+
kind: Pod
113+
metadata:
114+
name: dynatrace-mcp
115+
labels:
116+
app: dynatrace-mcp
117+
spec:
118+
containers:
119+
- name: supergateway
120+
image: supercorp/supergateway
121+
env:
122+
- name: DT_ENVIRONMENT
123+
value: https://abcd1234.apps.dynatrace.com
124+
- name: OAUTH_CLIENT_ID
125+
value: dt0s02.SAMPLE
126+
- name: OAUTH_CLIENT_SECRET
127+
valueFrom:
128+
secretKeyRef:
129+
name: dynatrace-credentials
130+
key: client_secret
131+
ports:
132+
- containerPort: 8003
133+
args:
134+
- "--stdio"
135+
- "npx -y @dynatrace-oss/dynatrace-mcp-server@latest /"
136+
- "--port"
137+
- "8003"
138+
- "--logLevel"
139+
- "debug"
140+
stdin: true
141+
tty: true
142+
---
143+
apiVersion: v1
144+
kind: Service
145+
metadata:
146+
name: dynatrace-mcp
147+
spec:
148+
selector:
149+
app: dynatrace-mcp
150+
ports:
151+
- protocol: TCP
152+
port: 8003
153+
targetPort: 8003
154+
type: ClusterIP
155+
156+
157+
2. Add MCP server to holmes config.
158+
""""""""""""""""""""""""""""""""""""""
159+
160+
With the MCP server running in SSE mode, we need to let HolmesGPT know of the mcp server.
161+
Use this config according to your use case.
162+
163+
**Configuration:**
164+
165+
.. md-tab-set::
45166

167+
.. md-tab-item:: Holmes CLI
168+
169+
Use a config file, and pass it when running cli commands.
170+
171+
**custom_toolset.yaml:**
172+
173+
.. code-block:: yaml
174+
175+
mcp_servers:
176+
mcp_server_1:
177+
description: "Dynatrace observability platform. Bring real-time observability data directly into your development workflow."
178+
url: "http://localhost:8003/sse"
179+
180+
You can now use Holmes via the CLI with your configured MCP server. For example:
181+
182+
.. code-block:: bash
183+
184+
holmes ask -t custom_toolset.yaml "Using dynatrace what issues do I have in my cluster?"
185+
186+
.. md-tab-item:: Robusta Helm Chart
187+
188+
**Helm Values:**
189+
190+
.. code-block:: yaml
191+
192+
holmes:
193+
mcp_servers:
194+
mcp_server_1:
195+
description: "Dynatrace observability platform. Bring real-time observability data directly into your development workflow."
196+
url: "http://dynatrace-mcp.default.svc.cluster.local:8003"
197+
198+
199+
Update your Helm values with the provided YAML configuration, then apply the changes with Helm upgrade:
200+
201+
.. code-block:: bash
202+
203+
helm upgrade robusta robusta/robusta --values=generated_values.yaml --set clusterName=<YOUR_CLUSTER_NAME>
46204
205+
After the deployment is complete, you can open the HolmesGPT chat in the Robusta SaaS UI and ask questions like *Using dynatrace what issues do I have in my cluster?*.

0 commit comments

Comments
 (0)