From 4d4c9fd8d51ccc0f0d45a0766b72d42c246b28a8 Mon Sep 17 00:00:00 2001 From: Ivan Despot <66276597+g-despot@users.noreply.github.com> Date: Mon, 9 Feb 2026 12:43:51 +0100 Subject: [PATCH 1/8] Updates for MCP --- weaviate/templates/weaviateServiceMCP.yaml | 34 +++++++++++++++++++++ weaviate/templates/weaviateStatefulset.yaml | 17 +++++++++++ weaviate/values.yaml | 21 +++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 weaviate/templates/weaviateServiceMCP.yaml diff --git a/weaviate/templates/weaviateServiceMCP.yaml b/weaviate/templates/weaviateServiceMCP.yaml new file mode 100644 index 0000000..69930c7 --- /dev/null +++ b/weaviate/templates/weaviateServiceMCP.yaml @@ -0,0 +1,34 @@ +{{ if .Values.mcpService.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ .Values.mcpService.name }} + labels: + app.kubernetes.io/name: weaviate + app.kubernetes.io/managed-by: {{ .Release.Service }} + {{- with .Values.mcpService.annotations }} + annotations: {{ toYaml . | nindent 4 }} + {{- end }} +spec: + type: {{ .Values.mcpService.type }} + selector: + app: weaviate + ports: + {{- range .Values.mcpService.ports }} + - {{ toYaml . | indent 6 | trim }} + targetPort: {{ .port }} + {{- end }} +{{ if eq .Values.mcpService.type "ClusterIP" -}} + {{ if .Values.mcpService.clusterIP }} + clusterIP: {{ .Values.mcpService.clusterIP }} + {{ end }} +{{ end }} +{{ if eq .Values.mcpService.type "LoadBalancer" -}} + {{- if gt (len .Values.mcpService.loadBalancerSourceRanges) 0 }} + loadBalancerSourceRanges: + {{- range $_, $sourceRange := .Values.mcpService.loadBalancerSourceRanges }} + - {{ $sourceRange }} + {{ end -}} + {{- end -}} +{{- end }} +{{ end }} diff --git a/weaviate/templates/weaviateStatefulset.yaml b/weaviate/templates/weaviateStatefulset.yaml index 7226296..240ca63 100644 --- a/weaviate/templates/weaviateStatefulset.yaml +++ b/weaviate/templates/weaviateStatefulset.yaml @@ -485,6 +485,18 @@ spec: {{- end }} {{- end }} {{- end }} + {{- if .Values.mcpService.enabled }} + - name: MCP_SERVER_ENABLED + value: "true" + - name: MCP_SERVER_PORT + value: {{ (index .Values.mcpService.ports 0).port | quote }} + - name: MCP_SERVER_WRITE_ACCESS_DISABLED + value: {{ .Values.mcpService.writeAccessDisabled | quote }} + {{- if .Values.mcpService.configPath }} + - name: MCP_SERVER_CONFIG_PATH + value: {{ .Values.mcpService.configPath | quote }} + {{- end }} + {{- end }} - name: CLUSTER_JOIN value: {{ .Values.service.name }}-headless.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }} ports: @@ -499,6 +511,11 @@ spec: containerPort: 50051 protocol: TCP {{- end }} + {{- if .Values.mcpService.enabled }} + - name: mcp + containerPort: {{ (index .Values.mcpService.ports 0).port }} + protocol: TCP + {{- end }} volumeMounts: - name: weaviate-config mountPath: /weaviate-config diff --git a/weaviate/values.yaml b/weaviate/values.yaml index 69ca521..43f539b 100644 --- a/weaviate/values.yaml +++ b/weaviate/values.yaml @@ -160,6 +160,27 @@ grpcService: clusterIP: annotations: {} +# The service controls how weaviate MCP endpoint is exposed to the outside world. +# MCP (Model Context Protocol) allows LLM clients to interact with Weaviate. +# This service is by default disabled. Set enabled to true to deploy the MCP service. +mcpService: + enabled: false + name: weaviate-mcp + ports: + - name: mcp + protocol: TCP + port: 9000 + type: ClusterIP + loadBalancerSourceRanges: [] + clusterIP: + annotations: {} + # Write access allows MCP clients to create/update objects. + # Disabled by default for safety. + writeAccessDisabled: true + # Path to a JSON or YAML config file inside the container for custom tool descriptions. + # Users must mount the file themselves (e.g. via extraVolumes/extraVolumeMounts or a ConfigMap). + configPath: "" + # The service monitor defines prometheus monitoring for a set of services # https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#monitoring.coreos.com/v1.ServiceMonitor # Make sure to set the following prometheus values if deploying observability with the kube-prometheus-stack helm chart: From 35ca14d50ad4c3d2be61cf6b1c7b71f6837d06f0 Mon Sep 17 00:00:00 2001 From: Ivan Despot <66276597+g-despot@users.noreply.github.com> Date: Mon, 9 Feb 2026 14:51:50 +0100 Subject: [PATCH 2/8] Update tests --- .cicd/test.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.cicd/test.sh b/.cicd/test.sh index 2c51a14..257040a 100755 --- a/.cicd/test.sh +++ b/.cicd/test.sh @@ -228,6 +228,20 @@ function check_creates_template() { check_string_existence "--set grpcService.enabled=true" "containerPort: 50051" check_string_existence "--set grpcService.enabled=true --set grpcService.name=weaviate-grpc-service-custom-name" "name: weaviate-grpc-service-custom-name" check_string_existence "--set grpcService.name=weaviate-grpc-defult-service-custom-name" "name: weaviate-grpc-defult-service-custom-name" + check_string_existence "--set mcpService.enabled=true" "containerPort: 9000" + check_string_existence "--set mcpService.enabled=true" "name: MCP_SERVER_ENABLED" + check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_ENABLED" "value: \"true\"" + check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_PORT" "value: \"9000\"" + check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_WRITE_ACCESS_DISABLED" "value: \"true\"" + check_setting_has_value "--set mcpService.enabled=true --set mcpService.writeAccessDisabled=false" "name: MCP_SERVER_WRITE_ACCESS_DISABLED" "value: \"false\"" + check_setting_has_value "--set mcpService.enabled=true --set mcpService.configPath=/custom/config.json" "name: MCP_SERVER_CONFIG_PATH" "value: \"/custom/config.json\"" + check_string_existence "--set mcpService.enabled=true --set mcpService.name=weaviate-mcp-service-custom-name" "name: weaviate-mcp-service-custom-name" + check_string_existence "--set mcpService.name=weaviate-mcp-default-service-custom-name" "name: weaviate-mcp-default-service-custom-name" + check_setting_has_value "--set mcpService.enabled=true --set mcpService.ports[0].port=9001" "name: MCP_SERVER_PORT" "value: \"9001\"" + check_string_existence "--set mcpService.enabled=true --set mcpService.ports[0].port=9001" "containerPort: 9001" + check_no_setting "" "name: MCP_SERVER_ENABLED" + check_no_setting "--set mcpService.enabled=false" "name: MCP_SERVER_ENABLED" + check_modules "--set mcpService.enabled=true --set modules.text2vec-contextionary.enabled=false --set modules.text2vec-transformers.enabled=true" "value: text2vec-transformers" check_string_existence "--set modules.text2vec-aws.enabled=true --set modules.text2vec-aws.secrets.AWS_ACCESS_KEY_ID=key --set modules.text2vec-aws.secrets.AWS_SECRET_ACCESS_KEY=secret" "name: AWS_ACCESS_KEY_ID" check_string_existence "--set modules.text2vec-aws.enabled=true --set modules.text2vec-aws.secrets.AWS_ACCESS_KEY_ID=key --set modules.text2vec-aws.secrets.AWS_SECRET_ACCESS_KEY=secret" "name: AWS_SECRET_ACCESS_KEY" check_string_existence "--set modules.multi2vec-aws.enabled=true --set modules.multi2vec-aws.secrets.AWS_ACCESS_KEY_ID=key --set modules.multi2vec-aws.secrets.AWS_SECRET_ACCESS_KEY=secret" "name: AWS_ACCESS_KEY_ID" From 6af8d751a4b44d0ec0b3910f13114a7699c8fe85 Mon Sep 17 00:00:00 2001 From: Ivan Despot <66276597+g-despot@users.noreply.github.com> Date: Mon, 9 Feb 2026 14:56:28 +0100 Subject: [PATCH 3/8] Fix test --- .cicd/test.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/.cicd/test.sh b/.cicd/test.sh index 257040a..2723e17 100755 --- a/.cicd/test.sh +++ b/.cicd/test.sh @@ -236,7 +236,6 @@ function check_creates_template() { check_setting_has_value "--set mcpService.enabled=true --set mcpService.writeAccessDisabled=false" "name: MCP_SERVER_WRITE_ACCESS_DISABLED" "value: \"false\"" check_setting_has_value "--set mcpService.enabled=true --set mcpService.configPath=/custom/config.json" "name: MCP_SERVER_CONFIG_PATH" "value: \"/custom/config.json\"" check_string_existence "--set mcpService.enabled=true --set mcpService.name=weaviate-mcp-service-custom-name" "name: weaviate-mcp-service-custom-name" - check_string_existence "--set mcpService.name=weaviate-mcp-default-service-custom-name" "name: weaviate-mcp-default-service-custom-name" check_setting_has_value "--set mcpService.enabled=true --set mcpService.ports[0].port=9001" "name: MCP_SERVER_PORT" "value: \"9001\"" check_string_existence "--set mcpService.enabled=true --set mcpService.ports[0].port=9001" "containerPort: 9001" check_no_setting "" "name: MCP_SERVER_ENABLED" From 783bec3db1252cbb240111e28aa6c3e488bc2f50 Mon Sep 17 00:00:00 2001 From: Jose Luis Franco Arza Date: Wed, 11 Feb 2026 11:40:34 +0100 Subject: [PATCH 4/8] Add support for mcpService.config. This commit enables the configuration of the mcp service directly in the values.yaml, by passing in yaml format whatever tools with descrption we might want to override. --- .cicd/test.sh | 8 +++++++- weaviate/templates/weaviateMCPConfig.yaml | 12 ++++++++++++ weaviate/templates/weaviateStatefulset.yaml | 13 +++++++++++-- weaviate/values.yaml | 17 ++++++++++++++--- 4 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 weaviate/templates/weaviateMCPConfig.yaml diff --git a/.cicd/test.sh b/.cicd/test.sh index 2723e17..9365630 100755 --- a/.cicd/test.sh +++ b/.cicd/test.sh @@ -234,8 +234,14 @@ function check_creates_template() { check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_PORT" "value: \"9000\"" check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_WRITE_ACCESS_DISABLED" "value: \"true\"" check_setting_has_value "--set mcpService.enabled=true --set mcpService.writeAccessDisabled=false" "name: MCP_SERVER_WRITE_ACCESS_DISABLED" "value: \"false\"" - check_setting_has_value "--set mcpService.enabled=true --set mcpService.configPath=/custom/config.json" "name: MCP_SERVER_CONFIG_PATH" "value: \"/custom/config.json\"" check_string_existence "--set mcpService.enabled=true --set mcpService.name=weaviate-mcp-service-custom-name" "name: weaviate-mcp-service-custom-name" + # MCP config tests + check_setting_has_value "--set mcpService.enabled=true --set mcpService.config.tools.test-tool.description=test-description" "name: MCP_SERVER_CONFIG_PATH" "value: \"/mcp-config/mcp-config.yaml\"" + check_string_existence "--set mcpService.enabled=true --set mcpService.config.tools.test-tool.description=test-description" "name: weaviate-mcp-config" + check_string_existence "--set mcpService.enabled=true --set mcpService.config.tools.test-tool.description=test-description" "mcp-config.yaml" + check_string_existence "--set mcpService.enabled=true --set mcpService.config.tools.test-tool.description=test-description" "test-description" + check_no_setting "--set mcpService.enabled=true" "name: MCP_SERVER_CONFIG_PATH" + check_no_setting "--set mcpService.enabled=true" "weaviate-mcp-config" check_setting_has_value "--set mcpService.enabled=true --set mcpService.ports[0].port=9001" "name: MCP_SERVER_PORT" "value: \"9001\"" check_string_existence "--set mcpService.enabled=true --set mcpService.ports[0].port=9001" "containerPort: 9001" check_no_setting "" "name: MCP_SERVER_ENABLED" diff --git a/weaviate/templates/weaviateMCPConfig.yaml b/weaviate/templates/weaviateMCPConfig.yaml new file mode 100644 index 0000000..6811481 --- /dev/null +++ b/weaviate/templates/weaviateMCPConfig.yaml @@ -0,0 +1,12 @@ +{{- if and .Values.mcpService.enabled .Values.mcpService.config }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: weaviate-mcp-config + labels: + app.kubernetes.io/name: weaviate + app.kubernetes.io/managed-by: {{ .Release.Service }} +data: + mcp-config.yaml: |- + {{ .Values.mcpService.config | toYaml | nindent 4 }} +{{- end }} diff --git a/weaviate/templates/weaviateStatefulset.yaml b/weaviate/templates/weaviateStatefulset.yaml index 240ca63..38d95bd 100644 --- a/weaviate/templates/weaviateStatefulset.yaml +++ b/weaviate/templates/weaviateStatefulset.yaml @@ -492,9 +492,9 @@ spec: value: {{ (index .Values.mcpService.ports 0).port | quote }} - name: MCP_SERVER_WRITE_ACCESS_DISABLED value: {{ .Values.mcpService.writeAccessDisabled | quote }} - {{- if .Values.mcpService.configPath }} + {{- if .Values.mcpService.config }} - name: MCP_SERVER_CONFIG_PATH - value: {{ .Values.mcpService.configPath | quote }} + value: "/mcp-config/mcp-config.yaml" {{- end }} {{- end }} - name: CLUSTER_JOIN @@ -525,6 +525,10 @@ spec: - name: weaviate-runtime-overrides mountPath: /config {{- end }} + {{- if and .Values.mcpService.enabled .Values.mcpService.config }} + - name: weaviate-mcp-config + mountPath: /mcp-config + {{- end }} {{- if index .Values "backups" "gcs" "enabled" }} {{- if or (index .Values "backups" "gcs" "secrets") (index .Values "backups" "gcs" "envSecrets") }} {{- if or (index .Values "backups" "gcs" "secrets" "GOOGLE_APPLICATION_CREDENTIALS") (index .Values "backups" "gcs" "envSecrets" "GOOGLE_APPLICATION_CREDENTIALS") }} @@ -577,6 +581,11 @@ spec: configMap: name: weaviate-runtime-overrides {{- end }} + {{- if and .Values.mcpService.enabled .Values.mcpService.config }} + - name: weaviate-mcp-config + configMap: + name: weaviate-mcp-config + {{- end }} - name: weaviate-config configMap: {{ if .Values.custom_config_map.enabled }}name: {{ .Values.custom_config_map.name }} {{ else }}name: weaviate-config{{ end }} diff --git a/weaviate/values.yaml b/weaviate/values.yaml index 43f539b..1355815 100644 --- a/weaviate/values.yaml +++ b/weaviate/values.yaml @@ -177,9 +177,20 @@ mcpService: # Write access allows MCP clients to create/update objects. # Disabled by default for safety. writeAccessDisabled: true - # Path to a JSON or YAML config file inside the container for custom tool descriptions. - # Users must mount the file themselves (e.g. via extraVolumes/extraVolumeMounts or a ConfigMap). - configPath: "" + # Custom MCP server configuration for tool descriptions. + # When set, a ConfigMap is created and mounted automatically. + # Example: + # config: + # tools: + # weaviate-collections-get-config: + # description: "Retrieves the schema configuration for one or all collections in the Weaviate database." + # weaviate-tenants-list: + # description: "Lists all tenants for a specific multi-tenant collection." + # weaviate-query-hybrid: + # description: "Performs a hybrid search combining vector similarity and keyword matching (BM25) on a collection." + # weaviate-objects-upsert: + # description: "Upserts (inserts or updates) one or more objects into a collection in batch." + config: # The service monitor defines prometheus monitoring for a set of services # https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#monitoring.coreos.com/v1.ServiceMonitor From cf76f81e16677f5beec03f995e6884190a398d58 Mon Sep 17 00:00:00 2001 From: Ivan Despot <66276597+g-despot@users.noreply.github.com> Date: Mon, 23 Mar 2026 11:09:40 +0100 Subject: [PATCH 5/8] Update env var --- .cicd/test.sh | 4 ++-- weaviate/templates/weaviateStatefulset.yaml | 4 ++-- weaviate/values.yaml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.cicd/test.sh b/.cicd/test.sh index 9365630..a976e35 100755 --- a/.cicd/test.sh +++ b/.cicd/test.sh @@ -232,8 +232,8 @@ function check_creates_template() { check_string_existence "--set mcpService.enabled=true" "name: MCP_SERVER_ENABLED" check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_ENABLED" "value: \"true\"" check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_PORT" "value: \"9000\"" - check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_WRITE_ACCESS_DISABLED" "value: \"true\"" - check_setting_has_value "--set mcpService.enabled=true --set mcpService.writeAccessDisabled=false" "name: MCP_SERVER_WRITE_ACCESS_DISABLED" "value: \"false\"" + check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_WRITE_ACCESS_ENABLED" "value: \"true\"" + check_setting_has_value "--set mcpService.enabled=true --set mcpService.writeAccessEnabled=false" "name: MCP_SERVER_WRITE_ACCESS_ENABLED" "value: \"false\"" check_string_existence "--set mcpService.enabled=true --set mcpService.name=weaviate-mcp-service-custom-name" "name: weaviate-mcp-service-custom-name" # MCP config tests check_setting_has_value "--set mcpService.enabled=true --set mcpService.config.tools.test-tool.description=test-description" "name: MCP_SERVER_CONFIG_PATH" "value: \"/mcp-config/mcp-config.yaml\"" diff --git a/weaviate/templates/weaviateStatefulset.yaml b/weaviate/templates/weaviateStatefulset.yaml index 38d95bd..ca3febc 100644 --- a/weaviate/templates/weaviateStatefulset.yaml +++ b/weaviate/templates/weaviateStatefulset.yaml @@ -490,8 +490,8 @@ spec: value: "true" - name: MCP_SERVER_PORT value: {{ (index .Values.mcpService.ports 0).port | quote }} - - name: MCP_SERVER_WRITE_ACCESS_DISABLED - value: {{ .Values.mcpService.writeAccessDisabled | quote }} + - name: MCP_SERVER_WRITE_ACCESS_ENABLED + value: {{ .Values.mcpService.writeAccessEnabled | quote }} {{- if .Values.mcpService.config }} - name: MCP_SERVER_CONFIG_PATH value: "/mcp-config/mcp-config.yaml" diff --git a/weaviate/values.yaml b/weaviate/values.yaml index d7a943c..a003499 100644 --- a/weaviate/values.yaml +++ b/weaviate/values.yaml @@ -176,7 +176,7 @@ mcpService: annotations: {} # Write access allows MCP clients to create/update objects. # Disabled by default for safety. - writeAccessDisabled: true + writeAccessEnabled: true # Custom MCP server configuration for tool descriptions. # When set, a ConfigMap is created and mounted automatically. # Example: From 7b20ccace34797cfa371b2ed9d36e97cd8f022c1 Mon Sep 17 00:00:00 2001 From: Ivan Despot <66276597+g-despot@users.noreply.github.com> Date: Mon, 23 Mar 2026 11:14:58 +0100 Subject: [PATCH 6/8] Update defaults and test --- .cicd/test.sh | 4 ++-- weaviate/values.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.cicd/test.sh b/.cicd/test.sh index a976e35..137f5a5 100755 --- a/.cicd/test.sh +++ b/.cicd/test.sh @@ -232,8 +232,8 @@ function check_creates_template() { check_string_existence "--set mcpService.enabled=true" "name: MCP_SERVER_ENABLED" check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_ENABLED" "value: \"true\"" check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_PORT" "value: \"9000\"" - check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_WRITE_ACCESS_ENABLED" "value: \"true\"" - check_setting_has_value "--set mcpService.enabled=true --set mcpService.writeAccessEnabled=false" "name: MCP_SERVER_WRITE_ACCESS_ENABLED" "value: \"false\"" + check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_WRITE_ACCESS_ENABLED" "value: \"false\"" + check_setting_has_value "--set mcpService.enabled=true --set mcpService.writeAccessEnabled=true" "name: MCP_SERVER_WRITE_ACCESS_ENABLED" "value: \"true\"" check_string_existence "--set mcpService.enabled=true --set mcpService.name=weaviate-mcp-service-custom-name" "name: weaviate-mcp-service-custom-name" # MCP config tests check_setting_has_value "--set mcpService.enabled=true --set mcpService.config.tools.test-tool.description=test-description" "name: MCP_SERVER_CONFIG_PATH" "value: \"/mcp-config/mcp-config.yaml\"" diff --git a/weaviate/values.yaml b/weaviate/values.yaml index a003499..61f7caa 100644 --- a/weaviate/values.yaml +++ b/weaviate/values.yaml @@ -176,7 +176,7 @@ mcpService: annotations: {} # Write access allows MCP clients to create/update objects. # Disabled by default for safety. - writeAccessEnabled: true + writeAccessEnabled: false # Custom MCP server configuration for tool descriptions. # When set, a ConfigMap is created and mounted automatically. # Example: From 0da5d3af54142601c4f8c4a0871acb1ea7799b24 Mon Sep 17 00:00:00 2001 From: Ivan Despot <66276597+g-despot@users.noreply.github.com> Date: Tue, 24 Mar 2026 09:10:48 +0100 Subject: [PATCH 7/8] Remove separate MCP port in favor of REST endpoint /v1/mcp Aligns with weaviate/weaviate#10847 which moves the MCP server from a dedicated port (9000) onto the main REST API at /v1/mcp. This removes the separate MCP service, MCP_SERVER_PORT env var, and MCP container port since MCP now inherits the existing REST port. Co-Authored-By: Claude Opus 4.6 (1M context) --- .cicd/test.sh | 5 --- weaviate/templates/weaviateServiceMCP.yaml | 34 --------------------- weaviate/templates/weaviateStatefulset.yaml | 7 ----- weaviate/values.yaml | 13 ++------ 4 files changed, 2 insertions(+), 57 deletions(-) delete mode 100644 weaviate/templates/weaviateServiceMCP.yaml diff --git a/.cicd/test.sh b/.cicd/test.sh index 137f5a5..643c95b 100755 --- a/.cicd/test.sh +++ b/.cicd/test.sh @@ -228,13 +228,10 @@ function check_creates_template() { check_string_existence "--set grpcService.enabled=true" "containerPort: 50051" check_string_existence "--set grpcService.enabled=true --set grpcService.name=weaviate-grpc-service-custom-name" "name: weaviate-grpc-service-custom-name" check_string_existence "--set grpcService.name=weaviate-grpc-defult-service-custom-name" "name: weaviate-grpc-defult-service-custom-name" - check_string_existence "--set mcpService.enabled=true" "containerPort: 9000" check_string_existence "--set mcpService.enabled=true" "name: MCP_SERVER_ENABLED" check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_ENABLED" "value: \"true\"" - check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_PORT" "value: \"9000\"" check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_WRITE_ACCESS_ENABLED" "value: \"false\"" check_setting_has_value "--set mcpService.enabled=true --set mcpService.writeAccessEnabled=true" "name: MCP_SERVER_WRITE_ACCESS_ENABLED" "value: \"true\"" - check_string_existence "--set mcpService.enabled=true --set mcpService.name=weaviate-mcp-service-custom-name" "name: weaviate-mcp-service-custom-name" # MCP config tests check_setting_has_value "--set mcpService.enabled=true --set mcpService.config.tools.test-tool.description=test-description" "name: MCP_SERVER_CONFIG_PATH" "value: \"/mcp-config/mcp-config.yaml\"" check_string_existence "--set mcpService.enabled=true --set mcpService.config.tools.test-tool.description=test-description" "name: weaviate-mcp-config" @@ -242,8 +239,6 @@ function check_creates_template() { check_string_existence "--set mcpService.enabled=true --set mcpService.config.tools.test-tool.description=test-description" "test-description" check_no_setting "--set mcpService.enabled=true" "name: MCP_SERVER_CONFIG_PATH" check_no_setting "--set mcpService.enabled=true" "weaviate-mcp-config" - check_setting_has_value "--set mcpService.enabled=true --set mcpService.ports[0].port=9001" "name: MCP_SERVER_PORT" "value: \"9001\"" - check_string_existence "--set mcpService.enabled=true --set mcpService.ports[0].port=9001" "containerPort: 9001" check_no_setting "" "name: MCP_SERVER_ENABLED" check_no_setting "--set mcpService.enabled=false" "name: MCP_SERVER_ENABLED" check_modules "--set mcpService.enabled=true --set modules.text2vec-contextionary.enabled=false --set modules.text2vec-transformers.enabled=true" "value: text2vec-transformers" diff --git a/weaviate/templates/weaviateServiceMCP.yaml b/weaviate/templates/weaviateServiceMCP.yaml deleted file mode 100644 index 69930c7..0000000 --- a/weaviate/templates/weaviateServiceMCP.yaml +++ /dev/null @@ -1,34 +0,0 @@ -{{ if .Values.mcpService.enabled }} -apiVersion: v1 -kind: Service -metadata: - name: {{ .Values.mcpService.name }} - labels: - app.kubernetes.io/name: weaviate - app.kubernetes.io/managed-by: {{ .Release.Service }} - {{- with .Values.mcpService.annotations }} - annotations: {{ toYaml . | nindent 4 }} - {{- end }} -spec: - type: {{ .Values.mcpService.type }} - selector: - app: weaviate - ports: - {{- range .Values.mcpService.ports }} - - {{ toYaml . | indent 6 | trim }} - targetPort: {{ .port }} - {{- end }} -{{ if eq .Values.mcpService.type "ClusterIP" -}} - {{ if .Values.mcpService.clusterIP }} - clusterIP: {{ .Values.mcpService.clusterIP }} - {{ end }} -{{ end }} -{{ if eq .Values.mcpService.type "LoadBalancer" -}} - {{- if gt (len .Values.mcpService.loadBalancerSourceRanges) 0 }} - loadBalancerSourceRanges: - {{- range $_, $sourceRange := .Values.mcpService.loadBalancerSourceRanges }} - - {{ $sourceRange }} - {{ end -}} - {{- end -}} -{{- end }} -{{ end }} diff --git a/weaviate/templates/weaviateStatefulset.yaml b/weaviate/templates/weaviateStatefulset.yaml index ca3febc..c1c1556 100644 --- a/weaviate/templates/weaviateStatefulset.yaml +++ b/weaviate/templates/weaviateStatefulset.yaml @@ -488,8 +488,6 @@ spec: {{- if .Values.mcpService.enabled }} - name: MCP_SERVER_ENABLED value: "true" - - name: MCP_SERVER_PORT - value: {{ (index .Values.mcpService.ports 0).port | quote }} - name: MCP_SERVER_WRITE_ACCESS_ENABLED value: {{ .Values.mcpService.writeAccessEnabled | quote }} {{- if .Values.mcpService.config }} @@ -511,11 +509,6 @@ spec: containerPort: 50051 protocol: TCP {{- end }} - {{- if .Values.mcpService.enabled }} - - name: mcp - containerPort: {{ (index .Values.mcpService.ports 0).port }} - protocol: TCP - {{- end }} volumeMounts: - name: weaviate-config mountPath: /weaviate-config diff --git a/weaviate/values.yaml b/weaviate/values.yaml index 61f7caa..20952b9 100644 --- a/weaviate/values.yaml +++ b/weaviate/values.yaml @@ -160,20 +160,11 @@ grpcService: clusterIP: annotations: {} -# The service controls how weaviate MCP endpoint is exposed to the outside world. # MCP (Model Context Protocol) allows LLM clients to interact with Weaviate. -# This service is by default disabled. Set enabled to true to deploy the MCP service. +# MCP is served on the main REST port at /v1/mcp, no separate port is needed. +# This is by default disabled. Set enabled to true to enable the MCP server. mcpService: enabled: false - name: weaviate-mcp - ports: - - name: mcp - protocol: TCP - port: 9000 - type: ClusterIP - loadBalancerSourceRanges: [] - clusterIP: - annotations: {} # Write access allows MCP clients to create/update objects. # Disabled by default for safety. writeAccessEnabled: false From 5d8d16360321df16b7b25057527871b91594cd91 Mon Sep 17 00:00:00 2001 From: Ivan Despot <66276597+g-despot@users.noreply.github.com> Date: Tue, 7 Apr 2026 13:00:56 +0200 Subject: [PATCH 8/8] Rename mcpService to mcp in Helm values Simplify the values key from `mcpService` to `mcp` since MCP is now served on the main REST port (/v1/mcp) and no longer needs a separate Kubernetes Service. Also add a `default false` fallback for writeAccessEnabled. Co-Authored-By: Claude Opus 4.6 (1M context) --- .cicd/test.sh | 24 ++++++++++----------- weaviate/templates/weaviateMCPConfig.yaml | 4 ++-- weaviate/templates/weaviateStatefulset.yaml | 10 ++++----- weaviate/values.yaml | 2 +- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.cicd/test.sh b/.cicd/test.sh index 643c95b..42a593a 100755 --- a/.cicd/test.sh +++ b/.cicd/test.sh @@ -228,20 +228,20 @@ function check_creates_template() { check_string_existence "--set grpcService.enabled=true" "containerPort: 50051" check_string_existence "--set grpcService.enabled=true --set grpcService.name=weaviate-grpc-service-custom-name" "name: weaviate-grpc-service-custom-name" check_string_existence "--set grpcService.name=weaviate-grpc-defult-service-custom-name" "name: weaviate-grpc-defult-service-custom-name" - check_string_existence "--set mcpService.enabled=true" "name: MCP_SERVER_ENABLED" - check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_ENABLED" "value: \"true\"" - check_setting_has_value "--set mcpService.enabled=true" "name: MCP_SERVER_WRITE_ACCESS_ENABLED" "value: \"false\"" - check_setting_has_value "--set mcpService.enabled=true --set mcpService.writeAccessEnabled=true" "name: MCP_SERVER_WRITE_ACCESS_ENABLED" "value: \"true\"" + check_string_existence "--set mcp.enabled=true" "name: MCP_SERVER_ENABLED" + check_setting_has_value "--set mcp.enabled=true" "name: MCP_SERVER_ENABLED" "value: \"true\"" + check_setting_has_value "--set mcp.enabled=true" "name: MCP_SERVER_WRITE_ACCESS_ENABLED" "value: \"false\"" + check_setting_has_value "--set mcp.enabled=true --set mcp.writeAccessEnabled=true" "name: MCP_SERVER_WRITE_ACCESS_ENABLED" "value: \"true\"" # MCP config tests - check_setting_has_value "--set mcpService.enabled=true --set mcpService.config.tools.test-tool.description=test-description" "name: MCP_SERVER_CONFIG_PATH" "value: \"/mcp-config/mcp-config.yaml\"" - check_string_existence "--set mcpService.enabled=true --set mcpService.config.tools.test-tool.description=test-description" "name: weaviate-mcp-config" - check_string_existence "--set mcpService.enabled=true --set mcpService.config.tools.test-tool.description=test-description" "mcp-config.yaml" - check_string_existence "--set mcpService.enabled=true --set mcpService.config.tools.test-tool.description=test-description" "test-description" - check_no_setting "--set mcpService.enabled=true" "name: MCP_SERVER_CONFIG_PATH" - check_no_setting "--set mcpService.enabled=true" "weaviate-mcp-config" + check_setting_has_value "--set mcp.enabled=true --set mcp.config.tools.test-tool.description=test-description" "name: MCP_SERVER_CONFIG_PATH" "value: \"/mcp-config/mcp-config.yaml\"" + check_string_existence "--set mcp.enabled=true --set mcp.config.tools.test-tool.description=test-description" "name: weaviate-mcp-config" + check_string_existence "--set mcp.enabled=true --set mcp.config.tools.test-tool.description=test-description" "mcp-config.yaml" + check_string_existence "--set mcp.enabled=true --set mcp.config.tools.test-tool.description=test-description" "test-description" + check_no_setting "--set mcp.enabled=true" "name: MCP_SERVER_CONFIG_PATH" + check_no_setting "--set mcp.enabled=true" "weaviate-mcp-config" check_no_setting "" "name: MCP_SERVER_ENABLED" - check_no_setting "--set mcpService.enabled=false" "name: MCP_SERVER_ENABLED" - check_modules "--set mcpService.enabled=true --set modules.text2vec-contextionary.enabled=false --set modules.text2vec-transformers.enabled=true" "value: text2vec-transformers" + check_no_setting "--set mcp.enabled=false" "name: MCP_SERVER_ENABLED" + check_modules "--set mcp.enabled=true --set modules.text2vec-contextionary.enabled=false --set modules.text2vec-transformers.enabled=true" "value: text2vec-transformers" check_string_existence "--set modules.text2vec-aws.enabled=true --set modules.text2vec-aws.secrets.AWS_ACCESS_KEY_ID=key --set modules.text2vec-aws.secrets.AWS_SECRET_ACCESS_KEY=secret" "name: AWS_ACCESS_KEY_ID" check_string_existence "--set modules.text2vec-aws.enabled=true --set modules.text2vec-aws.secrets.AWS_ACCESS_KEY_ID=key --set modules.text2vec-aws.secrets.AWS_SECRET_ACCESS_KEY=secret" "name: AWS_SECRET_ACCESS_KEY" check_string_existence "--set modules.multi2vec-aws.enabled=true --set modules.multi2vec-aws.secrets.AWS_ACCESS_KEY_ID=key --set modules.multi2vec-aws.secrets.AWS_SECRET_ACCESS_KEY=secret" "name: AWS_ACCESS_KEY_ID" diff --git a/weaviate/templates/weaviateMCPConfig.yaml b/weaviate/templates/weaviateMCPConfig.yaml index 6811481..e45578e 100644 --- a/weaviate/templates/weaviateMCPConfig.yaml +++ b/weaviate/templates/weaviateMCPConfig.yaml @@ -1,4 +1,4 @@ -{{- if and .Values.mcpService.enabled .Values.mcpService.config }} +{{- if and .Values.mcp.enabled .Values.mcp.config }} apiVersion: v1 kind: ConfigMap metadata: @@ -8,5 +8,5 @@ metadata: app.kubernetes.io/managed-by: {{ .Release.Service }} data: mcp-config.yaml: |- - {{ .Values.mcpService.config | toYaml | nindent 4 }} + {{ .Values.mcp.config | toYaml | nindent 4 }} {{- end }} diff --git a/weaviate/templates/weaviateStatefulset.yaml b/weaviate/templates/weaviateStatefulset.yaml index c1c1556..c1c7fbb 100644 --- a/weaviate/templates/weaviateStatefulset.yaml +++ b/weaviate/templates/weaviateStatefulset.yaml @@ -485,12 +485,12 @@ spec: {{- end }} {{- end }} {{- end }} - {{- if .Values.mcpService.enabled }} + {{- if .Values.mcp.enabled }} - name: MCP_SERVER_ENABLED value: "true" - name: MCP_SERVER_WRITE_ACCESS_ENABLED - value: {{ .Values.mcpService.writeAccessEnabled | quote }} - {{- if .Values.mcpService.config }} + value: {{ .Values.mcp.writeAccessEnabled | default false | quote }} + {{- if .Values.mcp.config }} - name: MCP_SERVER_CONFIG_PATH value: "/mcp-config/mcp-config.yaml" {{- end }} @@ -518,7 +518,7 @@ spec: - name: weaviate-runtime-overrides mountPath: /config {{- end }} - {{- if and .Values.mcpService.enabled .Values.mcpService.config }} + {{- if and .Values.mcp.enabled .Values.mcp.config }} - name: weaviate-mcp-config mountPath: /mcp-config {{- end }} @@ -574,7 +574,7 @@ spec: configMap: name: weaviate-runtime-overrides {{- end }} - {{- if and .Values.mcpService.enabled .Values.mcpService.config }} + {{- if and .Values.mcp.enabled .Values.mcp.config }} - name: weaviate-mcp-config configMap: name: weaviate-mcp-config diff --git a/weaviate/values.yaml b/weaviate/values.yaml index 20952b9..ccc3768 100644 --- a/weaviate/values.yaml +++ b/weaviate/values.yaml @@ -163,7 +163,7 @@ grpcService: # MCP (Model Context Protocol) allows LLM clients to interact with Weaviate. # MCP is served on the main REST port at /v1/mcp, no separate port is needed. # This is by default disabled. Set enabled to true to enable the MCP server. -mcpService: +mcp: enabled: false # Write access allows MCP clients to create/update objects. # Disabled by default for safety.