From 42b9639327f17ce6518d227b9f2cdf82b19f3ed0 Mon Sep 17 00:00:00 2001 From: Roi Glinik Date: Thu, 5 Jun 2025 14:41:26 +0300 Subject: [PATCH 1/2] draft docs to run stdio server with holmes --- .../holmesgpt/remote_mcp_servers.rst | 149 ++++++++++++++++++ 1 file changed, 149 insertions(+) diff --git a/docs/configuration/holmesgpt/remote_mcp_servers.rst b/docs/configuration/holmesgpt/remote_mcp_servers.rst index 12f0dc15e..f5f83ce24 100644 --- a/docs/configuration/holmesgpt/remote_mcp_servers.rst +++ b/docs/configuration/holmesgpt/remote_mcp_servers.rst @@ -41,6 +41,155 @@ Example : MCP server configuration helm upgrade robusta robusta/robusta --values=generated_values.yaml --set clusterName= + +Example : Working with Stdio MCP servers +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +MCP currently supports three transport mechanisms: stdio, Server-Sent Events (SSE), and Streamable HTTP. +At this time, HolmesGPT is compatible only with MCP servers that use SSE. +However, many existing MCP servers—such as Dynatrace MCP—rely exclusively on the stdio transport. +To overcome this incompatibility, tools like Supergateway can act as a bridge by converting stdio-based MCPs into SSE-compatible endpoints. + +For this demo we will use + * `Dynatrace MCP `_ . + * `Supergateway `_ - runs MCP stdio-based servers over SSE. + +Check out supergatway docs to find out other useful flags. + +1. Run stdio MCP as SSE +"""""""""""""""""""""""""""""" +.. md-tab-set:: + + .. md-tab-item:: Docker + + This command runs the Dynatrace MCP server locally via Docker using Supergateway to wrap it with SSE support. + Credentials (e.g., API keys) should be stored in a .env file passed to Docker using --env-file. + you can change `"npx -y @dynatrace-oss/dynatrace-mcp-server@latest /"` to your specific MCP. + + .. code-block:: shell + + docker run --env-file .env -it --rm -p 8003:8003 supercorp/supergateway \ + --stdio "npx -y @dynatrace-oss/dynatrace-mcp-server@latest /" \ + --port 8003 \ + --logLevel debug + + Once the container starts, you should see logs similar to: + + .. code-block:: shell + + [supergateway] Starting... + [supergateway] Supergateway is supported by Supermachine (hosted MCPs) - https://supermachine.ai + [supergateway] - outputTransport: sse + [supergateway] - Headers: (none) + [supergateway] - port: 8003 + [supergateway] - stdio: npx -y @dynatrace-oss/dynatrace-mcp-server@latest / + [supergateway] - ssePath: /sse + [supergateway] - messagePath: /message + [supergateway] - CORS: disabled + [supergateway] - Health endpoints: (none) + [supergateway] Listening on port 8003 + [supergateway] SSE endpoint: http://localhost:8003/sse + [supergateway] POST messages: http://localhost:8003/message + + .. md-tab-item:: Kubernetes Pod + + | This will run dynatrace MCP server as a pod in your cluster. + | credentials are passed as env vars. + + .. code-block:: yaml + + apiVersion: v1 + kind: Pod + metadata: + name: dynatrace-mcp + labels: + app: dynatrace-mcp + spec: + containers: + - name: supergateway + image: supercorp/supergateway + env: + - name: DT_ENVIRONMENT + value: https://abcd1234.apps.dynatrace.com + - name: OAUTH_CLIENT_ID + value: dt0s02.SAMPLE + - name: OAUTH_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: dynatrace-credentials + key: client_secret + ports: + - containerPort: 8003 + args: + - "--stdio" + - "npx -y @dynatrace-oss/dynatrace-mcp-server@latest /" + - "--port" + - "8003" + - "--logLevel" + - "debug" + stdin: true + tty: true + --- + apiVersion: v1 + kind: Service + metadata: + name: dynatrace-mcp + spec: + selector: + app: dynatrace-mcp + ports: + - protocol: TCP + port: 8003 + targetPort: 8003 + type: ClusterIP + + +2. Add MCP server to holmes config. +"""""""""""""""""""""""""""""""""""""" + +With the MCP server running in SSE mode, we need to let HolmesGPT know of the mcp server. +Use this config according to your use case. + +**Configuration:** + +.. md-tab-set:: + + .. md-tab-item:: Robusta Helm Chart + + **Helm Values:** + + .. code-block:: yaml + + holmes: + mcp_servers: + mcp_server_1: + description: "Dynatrace observability platform. Bring real-time observability data directly into your development workflow." + url: "http://dynatrace-mcp.default.svc.cluster.local:8003" + + + Update your Helm values with the provided YAML configuration, then apply the changes with Helm upgrade: + + .. code-block:: bash + + helm upgrade robusta robusta/robusta --values=generated_values.yaml --set clusterName= + + 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?*. + .. md-tab-item:: Holmes CLI + + Use a config file, and pass it when running cli commands. + **custom_toolset.yaml:** + + .. code-block:: yaml + + mcp_servers: + mcp_server_1: + description: "Dynatrace observability platform. Bring real-time observability data directly into your development workflow." + url: "http://localhost:8003/sse" + + You can now use Holmes via the CLI with your configured MCP server. For example: + + .. code-block:: bash + holmes ask -t custom_toolset.yaml "Using dynatrace what issues do I have in my cluster?" \ No newline at end of file From 19425cafe7c933e5590e1d4a15c1e4bb904e778a Mon Sep 17 00:00:00 2001 From: Roi Glinik Date: Thu, 5 Jun 2025 15:56:53 +0300 Subject: [PATCH 2/2] minor changes. add loom video --- .../holmesgpt/remote_mcp_servers.rst | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/docs/configuration/holmesgpt/remote_mcp_servers.rst b/docs/configuration/holmesgpt/remote_mcp_servers.rst index f5f83ce24..cd9bdde6e 100644 --- a/docs/configuration/holmesgpt/remote_mcp_servers.rst +++ b/docs/configuration/holmesgpt/remote_mcp_servers.rst @@ -56,6 +56,16 @@ For this demo we will use Check out supergatway docs to find out other useful flags. +**See it in action** + +.. raw:: html + +
+ + + +
+ 1. Run stdio MCP as SSE """""""""""""""""""""""""""""" .. md-tab-set:: @@ -154,6 +164,25 @@ Use this config according to your use case. .. md-tab-set:: + .. md-tab-item:: Holmes CLI + + Use a config file, and pass it when running cli commands. + + **custom_toolset.yaml:** + + .. code-block:: yaml + + mcp_servers: + mcp_server_1: + description: "Dynatrace observability platform. Bring real-time observability data directly into your development workflow." + url: "http://localhost:8003/sse" + + You can now use Holmes via the CLI with your configured MCP server. For example: + + .. code-block:: bash + + holmes ask -t custom_toolset.yaml "Using dynatrace what issues do I have in my cluster?" + .. md-tab-item:: Robusta Helm Chart **Helm Values:** @@ -174,22 +203,3 @@ Use this config according to your use case. helm upgrade robusta robusta/robusta --values=generated_values.yaml --set clusterName= 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?*. - - .. md-tab-item:: Holmes CLI - - Use a config file, and pass it when running cli commands. - - **custom_toolset.yaml:** - - .. code-block:: yaml - - mcp_servers: - mcp_server_1: - description: "Dynatrace observability platform. Bring real-time observability data directly into your development workflow." - url: "http://localhost:8003/sse" - - You can now use Holmes via the CLI with your configured MCP server. For example: - - .. code-block:: bash - - holmes ask -t custom_toolset.yaml "Using dynatrace what issues do I have in my cluster?" \ No newline at end of file