This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new ef459c21e82 fix(helm): add MCP HTTPRoute configuration (#42219)
ef459c21e82 is described below

commit ef459c21e8293f5a7669a05a9a1bd9fbbfb19d65
Author: David <[email protected]>
AuthorDate: Thu Jul 23 02:08:16 2026 +0200

    fix(helm): add MCP HTTPRoute configuration (#42219)
---
 helm/superset/Chart.yaml                |  2 +-
 helm/superset/README.md                 |  6 ++-
 helm/superset/templates/httproute.yaml  | 12 +++++
 helm/superset/tests/httproute_test.yaml | 92 +++++++++++++++++++++++++++++++++
 helm/superset/values.yaml               |  9 +++-
 5 files changed, 116 insertions(+), 5 deletions(-)

diff --git a/helm/superset/Chart.yaml b/helm/superset/Chart.yaml
index eae4b2a793d..a9b5b768d27 100644
--- a/helm/superset/Chart.yaml
+++ b/helm/superset/Chart.yaml
@@ -29,7 +29,7 @@ maintainers:
   - name: craig-rueda
     email: [email protected]
     url: https://github.com/craig-rueda
-version: 0.22.1 # See 
[README](https://github.com/apache/superset/blob/master/helm/superset/README.md#versioning)
 for version details.
+version: 0.22.2 # See 
[README](https://github.com/apache/superset/blob/master/helm/superset/README.md#versioning)
 for version details.
 dependencies:
   - name: postgresql
     version: 16.7.27
diff --git a/helm/superset/README.md b/helm/superset/README.md
index d9f74c1ce33..7758277b6f9 100644
--- a/helm/superset/README.md
+++ b/helm/superset/README.md
@@ -23,7 +23,7 @@ NOTE: This file is generated by helm-docs: 
https://github.com/norwoodj/helm-docs
 
 # superset
 
-![Version: 
0.22.1](https://img.shields.io/badge/Version-0.22.1-informational?style=flat-square)
+![Version: 
0.22.2](https://img.shields.io/badge/Version-0.22.2-informational?style=flat-square)
 
 Apache Superset is a modern, enterprise-ready business intelligence web 
application
 
@@ -131,7 +131,7 @@ Alternatively, perform a fresh install. This is a one-time 
migration; subsequent
 | httproute.hostnames | list | `[]` | Hostnames that match against the HTTP 
Host header (templated) |
 | httproute.labels | object | `{}` | Additional labels to add to the HTTPRoute 
|
 | httproute.parentRefs | list | `[]` | Gateways this HTTPRoute attaches to |
-| httproute.rules | list | 
`[{"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]` | Routing rules. 
Each rule is backed by the Superset service. Set `weight` per rule to leave 
room for traffic splitting (defaults to 1). When `supersetWebsockets.enabled` 
is true, an extra rule routing `supersetWebsockets.ingress.path` to the `-ws` 
service is appended automatically, mirroring the ingress behavior. |
+| httproute.rules | list | 
`[{"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]` | Routing rules. 
Each rule is backed by the Superset service. Set `weight` per rule to leave 
room for traffic splitting (defaults to 1). When `supersetWebsockets.enabled` 
is true, an extra rule routing `supersetWebsockets.ingress.path` to the `-ws` 
service is appended automatically, mirroring the ingress behavior. When both 
`supersetMcp.enabled` and `supersetMcp.httproute.enabled` are true, an extra r 
[...]
 | image.pullPolicy | string | `"IfNotPresent"` |  |
 | image.repository | string | 
`"apachesuperset.docker.scarf.sh/apache/superset"` |  |
 | image.tag | string | `nil` |  |
@@ -266,6 +266,8 @@ Alternatively, perform a fresh install. This is a one-time 
migration; subsequent
 | supersetMcp.extraContainers | list | `[]` | Launch additional containers 
into supersetMcp pods |
 | supersetMcp.extraInitContainers | list | `[]` | Extra init containers 
appended after supersetMcp initContainers |
 | supersetMcp.forceReload | bool | `false` | If true, forces deployment to 
reload on each upgrade |
+| supersetMcp.httproute.enabled | bool | `false` | If true, the MCP server 
will be exposed via the HTTPRoute /mcp subpath |
+| supersetMcp.httproute.path | string | `"/mcp"` |  |
 | supersetMcp.ingress.enabled | bool | `false` | If true, the MCP server will 
be exposed via the ingress /mcp subpath |
 | supersetMcp.ingress.path | string | `"/mcp"` |  |
 | supersetMcp.ingress.pathType | string | `"Prefix"` |  |
diff --git a/helm/superset/templates/httproute.yaml 
b/helm/superset/templates/httproute.yaml
index 38cb5099ce5..2d9325bfdd6 100644
--- a/helm/superset/templates/httproute.yaml
+++ b/helm/superset/templates/httproute.yaml
@@ -80,4 +80,16 @@ spec:
             type: PathPrefix
             value: {{ .Values.supersetWebsockets.ingress.path }}
     {{- end }}
+    {{- if and .Values.supersetMcp.enabled 
.Values.supersetMcp.httproute.enabled }}
+    - backendRefs:
+        - group: ''
+          kind: Service
+          name: {{ $fullName }}-mcp
+          port: {{ .Values.supersetMcp.service.port }}
+          weight: 1
+      matches:
+        - path:
+            type: PathPrefix
+            value: {{ .Values.supersetMcp.httproute.path }}
+    {{- end }}
 {{- end }}
diff --git a/helm/superset/tests/httproute_test.yaml 
b/helm/superset/tests/httproute_test.yaml
new file mode 100644
index 00000000000..72f7a42e613
--- /dev/null
+++ b/helm/superset/tests/httproute_test.yaml
@@ -0,0 +1,92 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+suite: HTTPRoute
+templates:
+  - httproute.yaml
+tests:
+  - it: routes the general Superset path
+    set:
+      httproute.enabled: true
+    asserts:
+      - lengthEqual:
+          path: spec.rules
+          count: 1
+      - equal:
+          path: spec.rules[0].backendRefs[0].name
+          value: RELEASE-NAME-superset
+      - equal:
+          path: spec.rules[0].backendRefs[0].port
+          value: 8088
+      - equal:
+          path: spec.rules[0].matches[0].path.value
+          value: /
+
+  - it: routes the WebSocket path when WebSockets are enabled
+    set:
+      httproute.enabled: true
+      supersetWebsockets.enabled: true
+    asserts:
+      - lengthEqual:
+          path: spec.rules
+          count: 2
+      - equal:
+          path: spec.rules[1].backendRefs[0].name
+          value: RELEASE-NAME-superset-ws
+      - equal:
+          path: spec.rules[1].backendRefs[0].port
+          value: 8080
+      - equal:
+          path: spec.rules[1].matches[0].path.value
+          value: /ws
+
+  - it: does not route the WebSocket path when WebSockets are disabled
+    set:
+      httproute.enabled: true
+      supersetWebsockets.enabled: false
+    asserts:
+      - lengthEqual:
+          path: spec.rules
+          count: 1
+
+  - it: routes the MCP path when MCP HTTPRoute is enabled
+    set:
+      httproute.enabled: true
+      supersetMcp.enabled: true
+      supersetMcp.httproute.enabled: true
+    asserts:
+      - lengthEqual:
+          path: spec.rules
+          count: 2
+      - equal:
+          path: spec.rules[1].backendRefs[0].name
+          value: RELEASE-NAME-superset-mcp
+      - equal:
+          path: spec.rules[1].backendRefs[0].port
+          value: 5008
+      - equal:
+          path: spec.rules[1].matches[0].path.value
+          value: /mcp
+
+  - it: does not route MCP when MCP HTTPRoute is disabled
+    set:
+      httproute.enabled: true
+      supersetMcp.enabled: true
+      supersetMcp.httproute.enabled: false
+    asserts:
+      - lengthEqual:
+          path: spec.rules
+          count: 1
diff --git a/helm/superset/values.yaml b/helm/superset/values.yaml
index aa7c199622e..e33ff652fb7 100644
--- a/helm/superset/values.yaml
+++ b/helm/superset/values.yaml
@@ -277,7 +277,9 @@ httproute:
   # per rule to leave room for traffic splitting (defaults to 1). When
   # `supersetWebsockets.enabled` is true, an extra rule routing
   # `supersetWebsockets.ingress.path` to the `-ws` service is appended
-  # automatically, mirroring the ingress behavior.
+  # automatically, mirroring the ingress behavior. When both 
`supersetMcp.enabled` and
+  # `supersetMcp.httproute.enabled` are true, an extra rule routing
+  # `supersetMcp.httproute.path` to the `-mcp` service is also appended.
   rules:
     - matches:
         - path:
@@ -987,7 +989,6 @@ supersetWebsockets:
   # -- Set priorityClassName for supersetWebsockets pods
   priorityClassName: ~
 
-
 supersetMcp:
   # -- Enables the Superset MCP Server. To expose it via the shared ingress at 
/mcp,
   # also set supersetMcp.ingress.enabled=true.
@@ -1015,6 +1016,10 @@ supersetMcp:
     enabled: false
     path: /mcp
     pathType: Prefix
+  httproute:
+    # -- If true, the MCP server will be exposed via the HTTPRoute /mcp subpath
+    enabled: false
+    path: /mcp
   service:
     type: ClusterIP
     annotations: {}

Reply via email to