关于 MCP Kubernetes Server
MCP Kubernetes Server 为 AI 助手和其他 MCP 客户端提供 Kubernetes 集群查询、操作、监控与分析能力,并结合资源管理工具和常见分析提示词。
主要功能
- 01查看集群资源
- 02创建、更新、删除和扩缩资源
- 03监控集群及资源状态
- 04查看日志、事件和指标
- 05分析资源并提供建议
- 06使用 Kubernetes 分析提示词
适用场景
- 01查询 Pod、Deployment 或 Service 详情
- 02扩缩或重启 Deployment
- 03检查集群健康状况和节点状态
- 04查看资源日志和事件
MCP 相关
这是一个 MCP 服务,通过 `k8s://` URI 和工具向客户端开放 Kubernetes 资源查询、监控及操作能力,也提供常见 Kubernetes 分析提示词。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP Kubernetes 服务
一个 Kubernetes 管理 MCP(Model Context Protocol)服务,提供用于获取 Kubernetes 集群信息、执行操作、监控状态和分析资源的接口。
功能
- 集群信息:获取 Kubernetes 资源(Pod、部署、服务等)的详细信息
- 集群操作:对 Kubernetes 资源执行操作(创建、更新、删除、扩缩容等)
- 监控:监控 Kubernetes 集群和资源的状态
- 分析:分析 Kubernetes 资源并提供建议
- 提示词:包含用于常见 Kubernetes 分析任务的提示词
示例
示例 1

示例 2

示例 3

安装
从源代码安装
git clone https://github.com/yourusername/mcp-k8s-server.git
cd mcp-k8s-server
pip install -e .
使用 pip
pip install mcp-k8s-server
使用方法
直接运行
# Run with default settings
mcp-k8s-server
# Specify transport type
mcp-k8s-server --transport sse
# Specify port for SSE transport
mcp-k8s-server --port 8000
# Specify config file
mcp-k8s-server --config /path/to/config.yaml
使用 Docker
Dockerfile 使用 command 和 args 模式运行服务:
CMD ["python", "-m", "mcp_k8s_server.main", \
"--transport", "sse", \
"--port", "8000", \
"--host", "0.0.0.0", \
"--config", "/etc/rancher/rke2/rke2.yaml", \
"--debug"]
构建并运行 Docker 容器:
# Build the Docker image
docker build -t mcp-k8s-server .
# Run the Docker container
docker run -p 8000:8000 -v ~/.kube:/home/mcp/.kube mcp-k8s-server
或者,也可以使用提供的脚本:
# Make the script executable
chmod +x docker-run.sh
# Run the script
./docker-run.sh
此脚本会构建 Docker 镜像,并通过必要的卷挂载运行容器。
部署到 Kubernetes
# Apply the Kubernetes manifests
kubectl apply -f k8s/
部署到 Kubernetes 时,服务会自动使用集群内配置。k8s/ 目录中的 Kubernetes 清单已配置为:
- 创建具有适当权限的 ServiceAccount
- 挂载服务账户令牌和证书
- 使用命令行参数配置服务
你可以通过编辑清单自定义部署:
# k8s/deployment.yaml (example)
apiVersion: apps/v1
kind: Deployment
metadata:
name: mcp-k8s-server
# ...
spec:
# ...
template:
# ...
spec:
serviceAccountName: mcp-k8s-server # Uses the ServiceAccount defined in rbac.yaml
containers:
- name: mcp-k8s-server
# ...
command:
- python
- -m
- mcp_k8s_server.main
args:
- --transport
- sse
- --port
- "8000"
- --host
- "0.0.0.0"
- --config
- "/app/config/config.yaml"
- --debug
此方法使用 command 和 args 模式配置服务,这是 Kubernetes 中的常见模式。command 指定要运行的可执行文件,args 指定要传递给该可执行文件的命令行参数。
创建 Pod 时,Kubernetes 会自动设置 KUBERNETES_SERVICE_HOST 和 KUBERNETES_SERVICE_PORT 环境变量,因此无需在部署清单中指定它们。
配置
可以使用 YAML 配置文件、环境变量或命令行参数来配置服务。
集群内配置
在 Kubernetes 集群内运行时,服务会自动使用集群内配置。该配置依赖以下内容:
-
环境变量:
KUBERNETES_SERVICE_HOST:由 Kubernetes 设置为 Kubernetes API 服务的 IP 地址KUBERNETES_SERVICE_PORT:由 Kubernetes 设置为 Kubernetes API 服务的端口
-
服务账户令牌和证书:
/var/run/secrets/kubernetes.io/serviceaccount/token:服务账户令牌/var/run/secrets/kubernetes.io/serviceaccount/ca.crt:CA 证书
在 Pod 中运行时,这些内容由 Kubernetes 自动设置。如果你在 Kubernetes 集群外运行服务,但希望测试集群内配置,则需要手动设置这些环境变量,并创建令牌和证书文件。
在集群外运行时,服务会回退为使用 kubeconfig 文件。
在本地测试集群内配置
如果你想在本地(Kubernetes 集群之外)测试集群内配置,可以手动设置所需的环境变量和文件:
-
设置环境变量:
export KUBERNETES_SERVICE_HOST=<kubernetes-api-server-ip> export KUBERNETES_SERVICE_PORT=<kubernetes-api-server-port>你可以通过运行以下命令获取这些值:
kubectl cluster-info -
创建服务账户令牌和证书目录:
mkdir -p /var/run/secrets/kubernetes.io/serviceaccount/ -
复制你的 Kubernetes 证书并创建令牌:
# Copy the CA certificate kubectl config view --raw -o jsonpath='{.clusters[0].cluster.certificate-authority-data}' | base64 -d > /var/run/secrets/kubernetes.io/serviceaccount/ca.crt # Create a token file (you can use a service account token or generate a temporary one) echo "your-service-account-token" > /var/run/secrets/kubernetes.io/serviceaccount/token
请注意,此方法需要 root 权限才能在 /var/run/secrets/ 中创建文件。或者,你可以修改代码,在测试时使用其他路径。
配置文件
# config.yaml
server:
name: mcp-k8s-server
transport: both # stdio, sse, or both
port: 8000
host: 0.0.0.0
kubernetes:
config_path: ~/.kube/config
context: default
namespace: default
MCP 资源
该服务通过 Model Context Protocol(MCP)提供对 Kubernetes 资源的访问。资源由遵循 k8s:// 协议的 URI 模式标识。
资源 URI 模式
资源按层次结构组织:
k8s://resources- 所有可用 Kubernetes 资源的列表k8s://namespaces- 所有 Kubernetes 命名空间的列表k8s:///{namespace}- 某个命名空间中所有资源的概览
命名空间级资源
-
k8s://{namespace}/{resource_type}- 列出命名空间中某种类型的资源- 示例:
k8s://default/pods- 'default' 命名空间中的所有 Pod
- 示例:
-
k8s://{namespace}/{resource_type}/{name}- 获取特定的命名空间级资源- 示例:
k8s://default/deployments/nginx- 'default' 命名空间中的 'nginx' 部署
- 示例:
支持的资源类型:
podsdeploymentsservicespersistentvolumeclaimsevents
集群级资源
-
k8s:///{resource_type}- 列出某种类型的集群级资源- 示例:
k8s:///nodes- 集群中的所有节点
- 示例:
-
k8s:///{resource_type}/{name}- 获取特定的集群级资源- 示例:
k8s:///nodes/worker-1- 'worker-1' 节点
- 示例:
支持的资源类型:
nodespersistentvolumesnamespaces
MCP 工具
该服务提供以下 MCP 工具:
资源信息
get_resources:获取特定类型资源的列表get_resource:获取特定资源的详细信息get_resource_status:获取特定资源的状态get_resource_events:获取与特定资源相关的事件get_resource_logs:获取特定资源的日志
资源操作
create_resource:创建新资源update_resource:更新现有资源delete_resource:删除资源scale_deployment:扩缩部署restart_deployment:重启部署execute_command:在 Pod 中执行命令
监控
get_cluster_status:获取集群的整体状态get_node_status:获取集群节点的状态get_resource_metrics:获取特定资源的指标get_cluster_metrics:获取整个集群的指标check_cluster_health:对集群执行全面的健康检查并获取详细摘要
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。