Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
4265e9e
adding auth based authentication instead of kubeconfigs
mfaizanse Nov 24, 2025
5891f15
updated
mfaizanse Nov 24, 2025
b87b3cf
test(http): try to reduce test flakiness (#489)
manusa Nov 21, 2025
c21d505
feat: add accesscontrol rest client
Cali0707 Nov 17, 2025
ec739d1
feat: expose accesscontrol rest client through Kubernetes interface
Cali0707 Nov 17, 2025
0806afb
feat(kubernetes): access control round tripper
manusa Nov 19, 2025
a4692b4
feat(kubernetes)!: simplified Kubernetes client access for toolsets
manusa Nov 20, 2025
6292abe
fix(kiali): Tool names with prefix kiali_ (#471)
aljesusg Nov 21, 2025
575490e
build(deps): bump github.com/mark3labs/mcp-go from 0.43.0 to 0.43.1 (…
dependabot[bot] Nov 24, 2025
5a699ac
build(deps): bump github.com/coreos/go-oidc/v3 from 3.16.0 to 3.17.0 …
dependabot[bot] Nov 24, 2025
6d24b66
feat(helm): add Helm chart for Kubernetes MCP Server deployment (#440)
sabre1041 Nov 24, 2025
9335ce0
chore(helm): correct typos in deployment files and README (#497)
manusa Nov 24, 2025
7282a2b
feat(config)!: consolidate custom config parsing into config.Extended…
manusa Nov 24, 2025
4c5c0ef
fix(kiali): misc follow-up changes for kiali toolsets (#498)
manusa Nov 24, 2025
0b0bca2
updated
mfaizanse Nov 25, 2025
3c01de5
updated
mfaizanse Nov 25, 2025
c69f1d6
updated
mfaizanse Nov 25, 2025
868ed22
updated
mfaizanse Nov 26, 2025
b969b4d
updated documentation
mfaizanse Nov 26, 2025
922054e
added tests
mfaizanse Nov 26, 2025
12b1a04
updated documentation
mfaizanse Nov 26, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ node_modules/

.npmrc
kubernetes-mcp-server
!charts/kubernetes-mcp-server
!cmd/kubernetes-mcp-server
!pkg/kubernetes-mcp-server
npm/kubernetes-mcp-server/README.md
Expand All @@ -27,3 +28,5 @@ python/build/
python/dist/
python/kubernetes_mcp_server.egg-info/
!python/kubernetes-mcp-server

config-dev.toml
54 changes: 29 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -208,12 +208,12 @@ The following sets of tools are available (toolsets marked with ✓ in the Defau

<!-- AVAILABLE-TOOLSETS-START -->

| Toolset | Description | Default |
|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
| config | View and manage the current local Kubernetes configuration (kubeconfig) | ✓ |
| core | Most common tools for Kubernetes management (Pods, Generic Resources, Events, etc.) | ✓ |
| helm | Tools for managing Helm charts and releases | ✓ |
| kiali | Most common tools for managing Kiali, check the [Kiali integration documentation](https://github.com/containers/kubernetes-mcp-server/blob/main/docs/KIALI_INTEGRATION.md) for more details. | |
| Toolset | Description | Default |
|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
| config | View and manage the current local Kubernetes configuration (kubeconfig) | ✓ |
| core | Most common tools for Kubernetes management (Pods, Generic Resources, Events, etc.) | ✓ |
| helm | Tools for managing Helm charts and releases | ✓ |
| kiali | Most common tools for managing Kiali, check the [Kiali documentation](https://github.com/containers/kubernetes-mcp-server/blob/main/docs/KIALI.md) for more details. | |

<!-- AVAILABLE-TOOLSETS-END -->

Expand Down Expand Up @@ -348,57 +348,57 @@ In case multi-cluster support is enabled (default) and you have access to multip

<summary>kiali</summary>

- **graph** - Check the status of my mesh by querying Kiali graph
- **kiali_graph** - Check the status of my mesh by querying Kiali graph
- `namespace` (`string`) - Optional single namespace to include in the graph (alternative to namespaces)
- `namespaces` (`string`) - Optional comma-separated list of namespaces to include in the graph

- **mesh_status** - Get the status of mesh components including Istio, Kiali, Grafana, Prometheus and their interactions, versions, and health status
- **kiali_mesh_status** - Get the status of mesh components including Istio, Kiali, Grafana, Prometheus and their interactions, versions, and health status

- **istio_config** - Get all Istio configuration objects in the mesh including their full YAML resources and details
- **kiali_istio_config** - Get all Istio configuration objects in the mesh including their full YAML resources and details

- **istio_object_details** - Get detailed information about a specific Istio object including validation and help information
- **kiali_istio_object_details** - Get detailed information about a specific Istio object including validation and help information
- `group` (`string`) **(required)** - API group of the Istio object (e.g., 'networking.istio.io', 'gateway.networking.k8s.io')
- `kind` (`string`) **(required)** - Kind of the Istio object (e.g., 'DestinationRule', 'VirtualService', 'HTTPRoute', 'Gateway')
- `name` (`string`) **(required)** - Name of the Istio object
- `namespace` (`string`) **(required)** - Namespace containing the Istio object
- `version` (`string`) **(required)** - API version of the Istio object (e.g., 'v1', 'v1beta1')

- **istio_object_patch** - Modify an existing Istio object using PATCH method. The JSON patch data will be applied to the existing object.
- **kiali_istio_object_patch** - Modify an existing Istio object using PATCH method. The JSON patch data will be applied to the existing object.
- `group` (`string`) **(required)** - API group of the Istio object (e.g., 'networking.istio.io', 'gateway.networking.k8s.io')
- `json_patch` (`string`) **(required)** - JSON patch data to apply to the object
- `kind` (`string`) **(required)** - Kind of the Istio object (e.g., 'DestinationRule', 'VirtualService', 'HTTPRoute', 'Gateway')
- `name` (`string`) **(required)** - Name of the Istio object
- `namespace` (`string`) **(required)** - Namespace containing the Istio object
- `version` (`string`) **(required)** - API version of the Istio object (e.g., 'v1', 'v1beta1')

- **istio_object_create** - Create a new Istio object using POST method. The JSON data will be used to create the new object.
- **kiali_istio_object_create** - Create a new Istio object using POST method. The JSON data will be used to create the new object.
- `group` (`string`) **(required)** - API group of the Istio object (e.g., 'networking.istio.io', 'gateway.networking.k8s.io')
- `json_data` (`string`) **(required)** - JSON data for the new object
- `kind` (`string`) **(required)** - Kind of the Istio object (e.g., 'DestinationRule', 'VirtualService', 'HTTPRoute', 'Gateway')
- `namespace` (`string`) **(required)** - Namespace where the Istio object will be created
- `version` (`string`) **(required)** - API version of the Istio object (e.g., 'v1', 'v1beta1')

- **istio_object_delete** - Delete an existing Istio object using DELETE method.
- **kiali_istio_object_delete** - Delete an existing Istio object using DELETE method.
- `group` (`string`) **(required)** - API group of the Istio object (e.g., 'networking.istio.io', 'gateway.networking.k8s.io')
- `kind` (`string`) **(required)** - Kind of the Istio object (e.g., 'DestinationRule', 'VirtualService', 'HTTPRoute', 'Gateway')
- `name` (`string`) **(required)** - Name of the Istio object
- `namespace` (`string`) **(required)** - Namespace containing the Istio object
- `version` (`string`) **(required)** - API version of the Istio object (e.g., 'v1', 'v1beta1')

- **validations_list** - List all the validations in the current cluster from all namespaces
- **kiali_validations_list** - List all the validations in the current cluster from all namespaces
- `namespace` (`string`) - Optional single namespace to retrieve validations from (alternative to namespaces)
- `namespaces` (`string`) - Optional comma-separated list of namespaces to retrieve validations from

- **namespaces** - Get all namespaces in the mesh that the user has access to
- **kiali_namespaces** - Get all namespaces in the mesh that the user has access to

- **services_list** - Get all services in the mesh across specified namespaces with health and Istio resource information
- **kiali_services_list** - Get all services in the mesh across specified namespaces with health and Istio resource information
- `namespaces` (`string`) - Comma-separated list of namespaces to get services from (e.g. 'bookinfo' or 'bookinfo,default'). If not provided, will list services from all accessible namespaces

- **service_details** - Get detailed information for a specific service in a namespace, including validation, health status, and configuration
- **kiali_service_details** - Get detailed information for a specific service in a namespace, including validation, health status, and configuration
- `namespace` (`string`) **(required)** - Namespace containing the service
- `service` (`string`) **(required)** - Name of the service to get details for

- **service_metrics** - Get metrics for a specific service in a namespace. Supports filtering by time range, direction (inbound/outbound), reporter, and other query parameters
- **kiali_service_metrics** - Get metrics for a specific service in a namespace. Supports filtering by time range, direction (inbound/outbound), reporter, and other query parameters
- `byLabels` (`string`) - Comma-separated list of labels to group metrics by (e.g., 'source_workload,destination_service'). Optional
- `direction` (`string`) - Traffic direction: 'inbound' or 'outbound'. Optional, defaults to 'outbound'
- `duration` (`string`) - Duration of the query period in seconds (e.g., '1800' for 30 minutes). Optional, defaults to 1800 seconds
Expand All @@ -410,14 +410,14 @@ In case multi-cluster support is enabled (default) and you have access to multip
- `service` (`string`) **(required)** - Name of the service to get metrics for
- `step` (`string`) - Step between data points in seconds (e.g., '15'). Optional, defaults to 15 seconds

- **workloads_list** - Get all workloads in the mesh across specified namespaces with health and Istio resource information
- **kiali_workloads_list** - Get all workloads in the mesh across specified namespaces with health and Istio resource information
- `namespaces` (`string`) - Comma-separated list of namespaces to get workloads from (e.g. 'bookinfo' or 'bookinfo,default'). If not provided, will list workloads from all accessible namespaces

- **workload_details** - Get detailed information for a specific workload in a namespace, including validation, health status, and configuration
- **kiali_workload_details** - Get detailed information for a specific workload in a namespace, including validation, health status, and configuration
- `namespace` (`string`) **(required)** - Namespace containing the workload
- `workload` (`string`) **(required)** - Name of the workload to get details for

- **workload_metrics** - Get metrics for a specific workload in a namespace. Supports filtering by time range, direction (inbound/outbound), reporter, and other query parameters
- **kiali_workload_metrics** - Get metrics for a specific workload in a namespace. Supports filtering by time range, direction (inbound/outbound), reporter, and other query parameters
- `byLabels` (`string`) - Comma-separated list of labels to group metrics by (e.g., 'source_workload,destination_service'). Optional
- `direction` (`string`) - Traffic direction: 'inbound' or 'outbound'. Optional, defaults to 'outbound'
- `duration` (`string`) - Duration of the query period in seconds (e.g., '1800' for 30 minutes). Optional, defaults to 1800 seconds
Expand All @@ -429,7 +429,7 @@ In case multi-cluster support is enabled (default) and you have access to multip
- `step` (`string`) - Step between data points in seconds (e.g., '15'). Optional, defaults to 15 seconds
- `workload` (`string`) **(required)** - Name of the workload to get metrics for

- **health** - Get health status for apps, workloads, and services across specified namespaces in the mesh. Returns health information including error rates and status for the requested resource type
- **kiali_health** - Get health status for apps, workloads, and services across specified namespaces in the mesh. Returns health information including error rates and status for the requested resource type
- `namespaces` (`string`) - Comma-separated list of namespaces to get health from (e.g. 'bookinfo' or 'bookinfo,default'). If not provided, returns health for all accessible namespaces
- `queryTime` (`string`) - Unix timestamp (in seconds) for the prometheus query. If not provided, uses current time. Optional
- `rateInterval` (`string`) - Rate interval for fetching error rate (e.g., '10m', '5m', '1h'). Default: '10m'
Expand All @@ -442,7 +442,7 @@ In case multi-cluster support is enabled (default) and you have access to multip
- `tail` (`integer`) - Number of lines to retrieve from the end of logs (default: 100)
- `workload` (`string`) **(required)** - Name of the workload to get logs for

- **app_traces** - Get distributed tracing data for a specific app in a namespace. Returns trace information including spans, duration, and error details for troubleshooting and performance analysis.
- **kiali_app_traces** - Get distributed tracing data for a specific app in a namespace. Returns trace information including spans, duration, and error details for troubleshooting and performance analysis.
- `app` (`string`) **(required)** - Name of the app to get traces for
- `clusterName` (`string`) - Cluster name for multi-cluster environments (optional)
- `endMicros` (`string`) - End time for traces in microseconds since epoch (optional)
Expand All @@ -452,7 +452,7 @@ In case multi-cluster support is enabled (default) and you have access to multip
- `startMicros` (`string`) - Start time for traces in microseconds since epoch (optional)
- `tags` (`string`) - JSON string of tags to filter traces (optional)

- **service_traces** - Get distributed tracing data for a specific service in a namespace. Returns trace information including spans, duration, and error details for troubleshooting and performance analysis.
- **kiali_service_traces** - Get distributed tracing data for a specific service in a namespace. Returns trace information including spans, duration, and error details for troubleshooting and performance analysis.
- `clusterName` (`string`) - Cluster name for multi-cluster environments (optional)
- `endMicros` (`string`) - End time for traces in microseconds since epoch (optional)
- `limit` (`integer`) - Maximum number of traces to return (default: 100)
Expand All @@ -462,7 +462,7 @@ In case multi-cluster support is enabled (default) and you have access to multip
- `startMicros` (`string`) - Start time for traces in microseconds since epoch (optional)
- `tags` (`string`) - JSON string of tags to filter traces (optional)

- **workload_traces** - Get distributed tracing data for a specific workload in a namespace. Returns trace information including spans, duration, and error details for troubleshooting and performance analysis.
- **kiali_workload_traces** - Get distributed tracing data for a specific workload in a namespace. Returns trace information including spans, duration, and error details for troubleshooting and performance analysis.
- `clusterName` (`string`) - Cluster name for multi-cluster environments (optional)
- `endMicros` (`string`) - End time for traces in microseconds since epoch (optional)
- `limit` (`integer`) - Maximum number of traces to return (default: 100)
Expand All @@ -477,6 +477,10 @@ In case multi-cluster support is enabled (default) and you have access to multip

<!-- AVAILABLE-TOOLSETS-TOOLS-END -->

## Helm Chart

A [Helm Chart](https://helm.sh) is available to simplify the deployment of the Kubernetes MCP server. Additional details can be found in the [chart README](./charts/kubernetes-mcp-server/README.md).

## 🧑‍💻 Development <a id="development"></a>

### Running with mcp-inspector
Expand Down
23 changes: 23 additions & 0 deletions charts/kubernetes-mcp-server/.helmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
13 changes: 13 additions & 0 deletions charts/kubernetes-mcp-server/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: v2
name: kubernetes-mcp-server
description: Helm Chart for the Kubernetes MCP Server
home: https://github.com/containers/kubernetes-mcp-server
keywords:
- kubernetes
- mcp
maintainers:
- name: Andrew Block
email: ablock@redhat.com
- name: Marc Nuri
email: marc.nuri@redhat.com
version: 0.1.0
Loading