Remote MCP ServersΒΆ

Warning

Remote MCP servers are in Tech Preview stage.

HolmesGPT can integrate with remote MCP servers using SSE mode. This capability enables HolmesGPT to access external data sources and tools in real time. This guide provides step-by-step instructions for configuring HolmesGPT to connect with remote MCP servers over SSE.

Example : MCP server configurationΒΆ

Helm Values:

holmes:
  mcp_servers:
    mcp_server_1:
      # human-readable description of the mcp server (this is not seen by the AI model - its just for users)
      description: "Remote mcp server"
      url: "http://example.com:8000/sse"

    mcp_server_2:
      description: "MCP server that runs in my cluster"
      url: "http://<service-name>.<namespace>.svc.cluster.local:<service-port>"
      config:
        headers:
          key: "{{ env.my_mcp_server_key }}" # You can use holmes environment variables as headers for the MCP server requests.

Update your Helm values with the provided YAML configuration, then apply the changes with Helm upgrade:

helm upgrade robusta robusta/robusta --values=generated_values.yaml --set clusterName=<YOUR_CLUSTER_NAME>

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

Check out supergatway docs to find out other useful flags.

See it in action

1. Run stdio MCP as SSEΒΆ

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.

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:

[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
This will run dynatrace MCP server as a pod in your cluster.
credentials are passed as env vars.
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:

Use a config file, and pass it when running cli commands.

custom_toolset.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:

holmes ask -t custom_toolset.yaml  "Using dynatrace what issues do I have in my cluster?"

Helm Values:

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:

helm upgrade robusta robusta/robusta --values=generated_values.yaml --set clusterName=<YOUR_CLUSTER_NAME>

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?.