Skip to main content
Glama
README.md
# Kubernetes MCP Server

python k8s-version license

**[English](README_EN.md)** | 中文

基于 MCP Python SDK(FastMCP Server API)的 Kubernetes MCP Server,提供完整的 Kubernetes API 操作功能。

## 🔥 主要特性

- **纯 API 实现**:完全通过 Kubernetes Python Client 实现,无需依赖 kubectl 命令行工具
- **标准 MCP 协议**:基于 MCP Python SDK 的 FastMCP Server API,遵循 MCP (Model Context Protocol) 标准
- **智能集群管理**:支持多集群配置管理,自动加载默认集群配置
- **全面的 K8s 操作**:支持 35 个工具函数,覆盖所有主要 Kubernetes 资源的完整 CRUD 操作
- **多租户认证**:可选 JWT 认证,支持多用户数据隔离、权限 Profile 分级、Tool 可见性过滤
- **集群诊断**:提供集群健康检查、资源使用分析等诊断功能
- **配置管理**:支持 kubeconfig 文件的保存、切换和管理
- **多传输协议**:支持 Stdio、标准 Streamable HTTP 与 SSE 兼容传输
- **容器化部署**:支持 Docker 和 Kubernetes 部署,包含完整的 k8s 清单文件
- **资源备份恢复**:支持命名空间和单个资源的备份恢复,按集群/命名空间/资源类型层级存储
- **变更验证预览**:自动验证资源操作并显示具体的变更内容,提供操作前的详细预览
- **配套 Agent Skill**:提供 `skills/k8s-manage/SKILL.md`,可直接用于 Cursor Agent / 其他 AI Agent,包含完整的工具清单、参数说明、操作流程和连接方式指引



## ⚡ 快速开始



### 环境要求

- Python 3.12+
- [uv](https://docs.astral.sh/uv/) 0.4+(统一管理依赖与运行环境,无需手动维护 venv 或 pip)
- 无需安装 kubectl(完全通过 Python API 实现)



### 安装 uv

```bash
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
```



### 安装依赖

```bash
# 同步依赖:自动创建 .venv、按 pyproject.toml 解析并安装所有运行时依赖
uv sync

# 如需开发工具(pytest / pylint / black / mypy 等)
uv sync --extra dev
```

> 后续新增/移除依赖请使用 `uv add <pkg>` / `uv remove <pkg>`,不要再使用 `pip install`。



### 本地配置

```bash
# 复制示例配置,按需修改 .env
cp env.example .env
```

服务启动时会自动读取当前工作目录下的 `.env`,但不会覆盖已经存在的系统环境变量。完整配置项见 `env.example`。

### 启动服务

```bash
# 默认 stdio 模式启动(推荐用于 MCP 客户端)
k8s-mcp-server

# 或明确指定 stdio 模式
k8s-mcp-server --transport stdio

# Streamable HTTP 模式启动(推荐 Cursor 等 HTTP MCP 客户端)
k8s-mcp-server --transport streamable --host 0.0.0.0 --port 8000

# SSE 模式启动(兼容旧 SSE 客户端)
k8s-mcp-server --transport sse --host 0.0.0.0 --port 8000

# 或使用 uvicorn 直接启动 HTTP 服务
uvicorn tools:app --host 0.0.0.0 --port 8000
```

> `uv sync` 会把 `k8s-mcp-server`、`mcp-admin` 和 `uvicorn` 安装到 `.venv/bin`(Windows 为 `.venv\Scripts`)。如未激活虚拟环境,可以使用 `uv run k8s-mcp-server ...` 临时运行。

**Stdio 模式**:通过标准输入输出与 MCP 客户端通信(默认)

**SSE 模式**:通过 Server-Sent Events 接口(`GET http://localhost:8000/sse` + `POST http://localhost:8000/message`)提供兼容服务

**Streamable HTTP 模式**:标准 MCP Streamable HTTP 单端点协议,推荐 Cursor 等客户端使用(`http://localhost:8000/mcp`)

#### Cursor MCP 配置

在 Cursor 全局 MCP 配置(如 `~/.cursor/mcp.json` 或项目 `.cursor/mcp.json`)中添加:

```json
{
  "mcpServers": {
    "k8s-mcp-server": {
      "url": "http://localhost:8000/mcp"
    }
  }
}
```

**启动服务**:`k8s-mcp-server --transport streamable --port 8000`

备选 Stdio 模式(无需先启动 HTTP 服务):

```json
{
  "mcpServers": {
    "k8s-mcp-server": {
      "command": "k8s-mcp-server",
      "args": ["--transport", "stdio"],
      "cwd": "项目路径"
    }
  }
}
```

配置后重启 Cursor 或执行 **Developer: Reload Window**,即可在 MCP 工具列表中看到工具。

> 未启用认证时可见 32 个工具;启用认证后 admin 角色可见全部 35 个,viewer 13 个、developer 21 个、operator 30 个。



#### Agent Skill(可选)

项目附带 Cursor Agent Skill 文件 `skills/k8s-manage/SKILL.md`,包含完整的工具清单、参数说明、连接方式和操作流程。将其安装到 Cursor 后,Agent 能自动发现并正确使用 K8s MCP 工具,无需手动提示。

安装方式:将 `skills/k8s-manage/` 目录复制到 `~/.cursor/skills/` 下:

```bash
# macOS / Linux
cp -r skills/k8s-manage ~/.cursor/skills/

# Windows
xcopy /E /I skills\k8s-manage %USERPROFILE%\.cursor\skills\k8s-manage
```

安装后 Cursor Agent 在涉及 K8s 集群管理的对话中会自动加载该 Skill。

### 容器化部署

```bash
# 构建 Docker 镜像
docker build -t k8s-mcp-server:latest .

# 运行容器
docker run -d --name k8s-mcp-server \
  -p 8000:8000 \
  -v $(pwd)/data:/app/data \
  k8s-mcp-server:latest

# 在 Kubernetes 中部署
kubectl apply -f k8s/
```



## 🏗️ 架构设计



### 核心组件

```
k8s-mcp-server/
├── services/
│   ├── __init__.py
│   ├── factory.py               # 服务实例工厂(按 kubeconfig_path 缓存)
│   ├── k8s_advanced_service.py  # Kubernetes 进阶服务(批量操作、备份恢复、RBAC、验证)
│   ├── dynamic_resource_service.py  # 动态资源服务(DynamicClient,支持 CRD 及任意 API 资源)
│   ├── k8s_api/                 # Kubernetes API 服务层(模块化)
│   │   ├── base.py, cluster_ops.py, pod_ops.py, workload_ops.py
│   │   ├── jobcronjob_ops.py, networking_storage_ops.py, service_config_ops.py
│   │   ├── autoscaling_policy_ops.py, rbac_ops.py, interactive_ops.py
│   │   └── resource_builders.py
│   └── k8s_advanced/            # 进阶服务逻辑(批量、备份、验证、RBAC)
│       ├── batch_ops.py, backup_restore.py, validation.py
│       ├── resource_conversion.py, rbac_advanced.py
│       └── base.py
├── tools/
│   ├── __init__.py              # FastMCP 实例和工具模块导入
│   ├── k8s_tools.py             # 核心 K8s 资源管理工具 (5个)
│   ├── cluster_tools.py         # 多集群配置管理 (9个)
│   ├── diagnostic_tools.py      # 集群诊断工具 (6个)
│   ├── batch_tools.py           # 批量操作工具 (8个)
│   ├── backup_tools.py          # 备份恢复工具 (4个)
│   └── auth_tools.py            # 认证与用户管理 (3个,仅认证模式可见)
├── utils/
│   ├── __init__.py
│   ├── cluster_config.py        # 集群配置管理类(支持多租户隔离)
│   ├── context.py               # 上下文管理
│   ├── fastmcp_custom.py        # 自定义 FastMCP(含 Tool 可见性过滤)
│   ├── auth_context.py          # 请求级用户上下文(contextvars)
│   ├── jwt_service.py           # JWT 签发/验证
│   ├── jwt_middleware.py        # ASGI JWT 认证中间件
│   ├── permission_profiles.py   # 权限 Profile 管理(内置 + 自定义)
│   ├── token_store.py           # JWT 签发记录持久化
│   ├── revocation_store.py      # JWT 撤销列表
│   ├── admin_routes.py          # 管理 API 路由
│   ├── k8s_helpers.py           # K8s 辅助函数
│   ├── k8s_parsers.py          # 参数解析
│   ├── param_parsers.py        # 参数解析
│   ├── operations_logger.py    # 操作日志
│   ├── backup_paths.py         # 备份路径
│   └── decorators.py, response.py, mcp_server.py
├── k8s/                         # Kubernetes 部署文件
│   ├── deployment.yaml          # 主要部署配置
│   ├── service.yaml             # 服务暴露配置
│   ├── configmap.yaml           # 配置管理
│   ├── pvc.yaml                 # 数据持久化
│   └── README.md                # 部署指南
├── data/
│   ├── clusters.json            # 集群配置存储
│   ├── kubeconfigs/             # kubeconfig 文件存储目录
│   ├── backup/                  # 备份存储(按集群/命名空间/资源类型层级)
│   └── copyfiles/               # Pod 文件拷贝本地保存目录
├── tests/                       # 回归测试
│   └── regression_test.py       # 同步/异步 37 个用例
├── skills/
│   └── k8s-manage/SKILL.md      # Skill(工具清单、参数、连接方式、操作流程)
├── docs/
│   └── TOOLS.md                 # 工具清单文档
├── Dockerfile                   # 容器镜像构建文件
├── .dockerignore                # Docker 构建排除文件
├── config.py                    # 服务配置
├── main.py                      # 服务启动入口
└── pyproject.toml               # 依赖列表
```



### Service 层架构

服务层采用三层设计,职责分离、便于扩展:


| 服务                            | 位置                                      | 角色        | 实现方式                                              | 覆盖范围                           |
| ----------------------------- | --------------------------------------- | --------- | ------------------------------------------------- | ------------------------------ |
| **KubernetesAPIService**      | services/k8s_api/                       | 底层 API 封装 | 强类型 API(V1Api、AppsV1Api 等),多 Mixin 模块化            | 内置资源(Pod、Deployment、Service 等) |
| **DynamicResourceService**    | dynamic_resource_service.py             | 动态资源操作    | DynamicClient,运行时发现 API                           | 任意资源(内置 + CRD + 未来新增)          |
| **KubernetesAdvancedService** | k8s_advanced_service.py + k8s_advanced/ | 编排与业务层    | 组合上述两者及 BatchOps、BackupRestore、Validation 等 Mixin | 批量操作、备份恢复、验证等                  |


**调用策略**:批量操作时优先使用预定义方法,若资源类型未命中则 fallback 到 `DynamicResourceService`,从而支持 CephFilesystem、KafkaTopic 等 CRD 及集群中所有可发现的 API 资源。服务实例通过 `services.factory.get_k8s_api_service()` / `get_k8s_advanced_service()` 获取,按 `kubeconfig_path` 缓存。

### 架构特点

1. **Service 层**:三层架构(API 层 + 动态层 + 编排层),内置资源与 CRD 统一入口
2. **Tool 层**:使用 `@mcp.tool` 装饰器定义 MCP 工具函数
3. **统一 MCP 实例**:所有工具共享同一个 FastMCP 实例
4. **双重传输**:同时支持 SSE 和 stdio 两种传输方式
5. **智能配置**:自动加载默认集群配置,无需每次指定 kubeconfig
6. **集群管理**:内置完整的多集群配置管理系统
7. **容器化支持**:提供 Docker 和 Kubernetes 部署支持



## 🛠️ 主要功能



### 工具分类总览


| 分类   | 模块               | 工具数 | 说明                                                |
| ---- | ---------------- | --- | ------------------------------------------------- |
| 认证管理 | auth_tools       | 3   | whoami、用户/Token 管理、权限 Profile 管理(仅认证模式可见)         |
| 核心工具 | k8s_tools        | 5   | 集群信息、Pod 日志(含 previous)、执行命令、Pod 文件拷贝、端口转发(含启停管理) |
| 集群管理 | cluster_tools    | 9   | 集群导入/切换、kubeconfig 管理                             |
| 诊断工具 | diagnostic_tools | 6   | 集群/节点/Pod 健康、资源使用、事件、节点管理(drain/cordon/uncordon)  |
| 批量操作 | batch_tools      | 8   | 批量增删改查、重启、发布操作、top 资源;支持集群所有 API 资源(含 CRD)        |
| 备份恢复 | backup_tools     | 4   | 命名空间/资源备份与恢复                                      |


**说明**:`list_clusters` 查看已导入的集群注册信息(省略 `name` 列出全部,指定 `name` 返回单个集群详情);`list_kubeconfigs` 列出 `data/kubeconfigs/` 目录下保存的 kubeconfig 文件。

### 认证与用户管理 (auth_tools.py)

> 仅在 `MCP_AUTH_ENABLED=true` 时可见。

- `whoami()` - 查看当前用户身份、角色、Token 有效期、已授权的集群与权限
- `admin_manage_users(action, ...)` - 用户与 Token 管理(admin 全功能;operator 限 viewer/developer 权限和 user 角色 token)
- `admin_manage_profiles(action, ...)` - 权限 Profile 模板管理(查看/创建/更新/删除自定义 profile,仅 admin)



### K8s 资源管理 (batch_tools.py)



#### 批量操作工具

- `batch_list_resources()` - 批量查询资源;`resource_types="all"` 可列出集群所有可用 API 资源类型
- `batch_create_resources()` - 批量创建资源(支持事务回滚)
- `batch_update_resources()` - 批量更新资源
- `batch_delete_resources()` - 批量删除资源
- `batch_describe_resources()` - 批量获取资源详细信息
- `batch_restart_resources()` - 批量重启资源(Deployment、StatefulSet、DaemonSet)
- `batch_rollout_resources()` - 批量发布操作:status 查看状态、undo 回滚(支持指定 revision)、pause 暂停、resume 恢复
- `batch_top_resources()` - 批量查看 Node/Pod 的 CPU、内存使用(类似 kubectl top,依赖 metrics-server)



### 核心工具 (k8s_tools.py)

- `get_cluster_info()` - 获取集群信息(API 版本、服务器地址等)
- `get_pod_logs()` - 获取 Pod 日志(支持 `previous` 获取上一实例日志)
- `exec_pod_command()` - 在 Pod 中执行命令
- `copy_pod_files()` - Pod 文件读写:from_pod 将文件内容返回给客户端(支持 `local_path` 直接保存到本地,二进制文件自动解码),to_pod 将客户端内容或本地文件写入 Pod
- `port_forward()` - Pod 端口转发管理:`action="start"` 启动转发、`action="stop"` 停止指定转发、`action="list"` 列出活跃会话;认证模式下按用户隔离



### 集群管理工具 (cluster_tools.py)

- `import_cluster()` - 导入集群配置(支持服务端文件路径或直接传入内容;自动校验证书与私钥匹配,部分 AI 模型传输长 base64 时可能损坏内容,校验失败时返回 curl 文件上传指引)
- `list_clusters(name?)` - 查看集群配置(省略 name 列出全部,指定 name 返回详情)
- `delete_cluster()` - 删除集群配置
- `set_default_cluster()` - 设置默认集群
- `test_cluster_connection()` - 测试集群连接(自动刷新服务缓存,从磁盘重载 kubeconfig)
- `load_kubeconfig()` - 加载 kubeconfig 文件(支持脱敏)
- `list_kubeconfigs()` - 列出所有保存的 kubeconfig 文件
- `delete_kubeconfig()` - 删除 kubeconfig 文件
- `get_kubeconfig_info()` - 获取 kubeconfig 详情或验证格式



### 诊断工具 (diagnostic_tools.py)

- `check_cluster_health()` - 检查集群健康状态,可选 `include_rbac_check` 附带 RBAC 权限冲突检测
- `check_node_health()` - 检查节点健康状态
- `check_pod_health()` - 检查 Pod 健康状态(支持筛选失败 Pod)
- `get_cluster_resource_usage()` - 获取集群资源使用情况(支持指定命名空间)
- `get_cluster_events()` - 获取集群事件
- `manage_node()` - 节点运维管理:`action="drain"` 排水(cordon + 驱逐 Pod)、`action="cordon"` 标记不可调度、`action="uncordon"` 恢复调度



#### 支持的批量操作资源类型

**支持集群中所有可发现的 API 资源**(含 CRD)。以下为内置优化类型,其他类型通过 DynamicClient 自动发现并操作。

**工作负载资源**:

- Deployment - 部署管理
- StatefulSet - 有状态应用
- DaemonSet - 守护进程集
- Job - 批处理任务(支持labels和annotations更新)
- CronJob - 定时任务

**网络与服务**:

- Service - 服务暴露
- Ingress - 入口控制器
- NetworkPolicy - 网络策略

**配置与存储**:

- ConfigMap - 配置管理
- Secret - 敏感信息管理
- StorageClass - 存储类
- PersistentVolume - 持久化卷
- PersistentVolumeClaim - 持久化卷声明
- ResourceQuota - 资源配额

**权限与身份管理**:

- Namespace - 命名空间
- ServiceAccount - 服务账户
- Role - 角色(命名空间级别)
- ClusterRole - 集群角色
- RoleBinding - 角色绑定(命名空间级别)
- ClusterRoleBinding - 集群角色绑定

**自动扩缩容**:

- HorizontalPodAutoscaler (HPA) - 水平Pod自动扩缩容



#### 批量操作特性

- **原子性操作**:支持事务性批量操作,失败时自动回滚
- **统一接口**:所有资源类型使用相同的批量操作接口
- **灵活参数**:支持完整资源定义和简化参数两种方式
- **错误处理**:详细的错误信息和成功/失败统计
- **向后兼容**:不影响现有的单资源操作功能



### 备份和恢复工具 (backup_tools.py)

- `backup_namespace()` - 备份命名空间中的指定内置资源和自定义资源
- `backup_resource()` - 备份单个资源,类型名、Kind 或复数名均可
- `restore_from_backup()` - 按备份写回。不存在则创建,已存在则替换
- `list_backups()` - 列出本地备份文件



#### 自动备份

`batch_update_resources` 与 `batch_delete_resources` 在变更前备份受影响资源的原样 YAML。任一资源备份失败则中止写操作。路径在响应的 `auto_backup` 中,可传给 `restore_from_backup`。

- 文件内容为 API 返回的资源 YAML,Secret 保留 `data`。恢复时不提交 `status`,以及 `uid`、`resourceVersion`、`generation`、`creationTimestamp`、`managedFields`、`selfLink`、`deletionTimestamp`、`deletionGracePeriodSeconds`
- 路径:`data/backup/<cluster>/namespaces/<ns>/resources/<type>/<name>/<name>_auto_<timestamp>.yaml`
- **保留期**:通过 `MCP_BACKUP_RETENTION_DAYS` 配置(默认 90 天,按文件 mtime 计算),超期后在后续备份操作时自动清理;设为 `0` 可关闭清理



### 变更验证预览系统

系统内置了自动的资源操作验证和预览功能,自动集成到所有写操作中:

#### 核心特性

- **自动验证**:所有创建、更新、删除操作自动执行验证检查
- **具体预览**:显示详细的变更内容,而非模糊的数量描述
- **操作支持性检查**:验证特定资源类型是否支持指定操作
- **风险提示**:删除操作显示不可逆风险警告



#### 预览输出示例

- **具体变更**:`labels.version: 1.0 → 2.0`
- **新增内容**:`data.redis.conf: 新增 = host: redis\nport: 6379`
- **RBAC规则**:`rules: 新增规则 [batch] jobs -> get,list,create`
- **删除提醒**:`⚠️ 将删除资源 configmap/test,此操作不可逆`



#### 支持的资源类型

涵盖所有主要 Kubernetes 资源的验证和预览:

- **工作负载**:Deployment, StatefulSet, DaemonSet, Job, CronJob
- **网络服务**:Service, Ingress, NetworkPolicy
- **配置存储**:ConfigMap, Secret, PVC, PV, StorageClass, ResourceQuota
- **权限管理**:ServiceAccount, Role, ClusterRole, RoleBinding, ClusterRoleBinding
- **集群资源**:Namespace, Node
- **自动扩缩容**:HorizontalPodAutoscaler (HPA)



### 🔥 特殊功能

- **优雅删除**:部分删除函数支持 `grace_period_seconds` 参数,实现优雅或强制删除
- **批量操作**:所有列表函数支持 `label_selector` 参数进行筛选
- **数据持久化**:支持配置和数据的持久化存储
- **健康检查**:提供容器健康检查端点
- **批量资源操作**:支持批量创建、更新、删除多个资源,支持事务回滚
- **发布管理**:支持 Deployment/StatefulSet/DaemonSet 的 status、undo(含指定 revision)、pause、resume
- **资源监控**:`batch_top_resources` 查看 Node/Pod 的 CPU、内存使用(依赖 metrics-server)
- **Pod 文件读写**:`copy_pod_files` 支持 Pod 文件双向传输,内容直接通过响应/参数传递,不依赖服务端磁盘
- **备份恢复**:支持命名空间和单个资源的备份恢复,按集群/命名空间/资源类型层级存储
- **权限 Profile**:内置 viewer/developer/operator/admin 四级权限模板,工具可见性与 K8s RBAC 严格匹配;低权限用户调用集群级工具时优雅降级(返回部分结果或友好提示);支持自定义 Profile、自动创建 K8s RBAC 资源;operator 可委托管理 viewer/developer 用户
- **变更验证预览**:自动验证所有写操作并显示具体变更内容,提供详细的操作预览



## 📝 使用示例



### 通过 MCP 客户端调用

所有功能都可以通过 MCP 客户端调用。系统支持自动加载默认集群配置:

```json
// 批量列出资源(使用默认集群配置)
{
  "method": "tools/call",
  "params": {
    "name": "batch_list_resources",
    "arguments": {
      "resource_types": "pods,nodes,namespaces",
      "namespace": "default"
    }
  }
}

// 批量删除资源(支持 grace_period_seconds)
{
  "method": "tools/call",
  "params": {
    "name": "batch_delete_resources",
    "arguments": {
      "resources": "[{\"kind\":\"Pod\",\"name\":\"my-pod\"}]",
      "namespace": "default",
      "grace_period_seconds": 30
    }
  }
}

// 批量创建资源
{
  "method": "tools/call",
  "params": {
    "name": "batch_create_resources",
    "arguments": {
      "resources": "[{\"kind\": \"Deployment\", \"metadata\": {\"name\": \"app1\"}, \"spec\": {\"name\": \"app1\", \"image\": \"nginx:latest\", \"replicas\": 3}}, {\"kind\": \"Service\", \"metadata\": {\"name\": \"app1-svc\"}, \"spec\": {\"name\": \"app1-svc\", \"selector\": {\"app\": \"app1\"}, \"ports\": [{\"port\": 80}]}}]",
      "namespace": "default"
    }
  }
}

// 备份命名空间
{
  "method": "tools/call",
  "params": {
    "name": "backup_namespace",
    "arguments": {
      "namespace": "my-app",
      "include_secrets": true
    }
  }
}

// 批量操作会自动显示验证和预览信息
// 更新操作会显示具体的变更内容,如:
// "📋 预览变化:"
// "   • replicas: 3 → 5"
// "   • labels.version: 1.0 → 2.0"

// 批量创建资源
{
  "method": "tools/call",
  "params": {
    "name": "batch_create_resources",
    "arguments": {
      "resources": [
        {
          "apiVersion": "apps/v1",
          "kind": "Deployment",
          "metadata": {"name": "app1", "namespace": "default"},
          "spec": {"replicas": 2, "selector": {"matchLabels": {"app": "app1"}}, "template": {"metadata": {"labels": {"app": "app1"}}, "spec": {"containers": [{"name": "app1", "image": "nginx:1.20"}]}}}
        },
        {
          "apiVersion": "v1",
          "kind": "Service",
          "metadata": {"name": "app1-svc", "namespace": "default"},
          "spec": {"selector": {"app": "app1"}, "ports": [{"port": 80, "targetPort": 80}]}
        }
      ],
      "namespace": "default"
    }
  }
}

// 批量更新Job的labels和annotations
{
  "method": "tools/call",
  "params": {
    "name": "batch_update_resources",
    "arguments": {
      "resources": [
        {
          "apiVersion": "batch/v1",
          "kind": "Job",
          "metadata": {
            "name": "job1",
            "namespace": "default",
            "labels": {"app": "batch-job", "version": "v2", "updated": "true"},
            "annotations": {"description": "Updated batch job", "last-modified": "2025-01-08"}
          }
        }
      ],
      "namespace": "default"
    }
  }
}

// 完全使用默认配置(集群和命名空间)
{
  "method": "tools/call",
  "params": {
    "name": "batch_list_resources",
    "arguments": {
      "resource_types": "pods",
      "namespace": "default"
    }
  }
}
```



### 响应格式

所有工具都返回标准化的响应格式:

```json
{
  "success": true,
  "pods": [...],
  "count": 5,
  "namespace": "default"
}
```



## 🐳 Docker 部署



### 构建镜像

```bash
# 构建镜像
docker build -t k8s-mcp-server:latest .

# 运行容器
docker run -d --name k8s-mcp-server \
  -p 8000:8000 \
  -v $(pwd)/data:/app/data \
  k8s-mcp-server:latest
```



### 环境变量

```bash
docker run -d \
  -e SSE_HOST=0.0.0.0 \
  -e SSE_PORT=8000 \
  -e LOG_LEVEL=INFO \
  -e DATA_DIR=/app/data \
  k8s-mcp-server:latest
```



## ☸️ Kubernetes 部署



### 快速部署

```bash
# 部署所有资源
kubectl apply -f k8s/

# 查看部署状态
kubectl get pods -l app=k8s-mcp-server
kubectl get svc k8s-mcp-server
```



### 部署组件

- **Deployment**: 主要应用部署,支持数据持久化
- **Service**: 服务暴露,支持 ClusterIP、NodePort、Ingress 方式
- **ConfigMap**: 环境变量和配置管理
- **PersistentVolumeClaim**: 数据持久化(集群配置、kubeconfig、备份、用户操作日志)



### 数据持久化

```yaml
# 数据存储卷(含集群配置、kubeconfig、备份、用户操作日志等)
- name: data-volume
  persistentVolumeClaim:
    claimName: k8s-mcp-server-data
```



### 健康检查

```yaml
livenessProbe:
  tcpSocket:
    port: 8000
  initialDelaySeconds: 30
  periodSeconds: 10

readinessProbe:
  tcpSocket:
    port: 8000
  initialDelaySeconds: 5
  periodSeconds: 5
```



## 🔧 配置



### 环境变量

项目提供 `env.example` 作为完整示例,可复制为 `.env` 用于本地启动。以下是常用配置:

```bash
# SSE 服务配置
SSE_HOST=0.0.0.0
SSE_PORT=8000

# 数据存储目录(自动创建)
DATA_DIR=./data                 # 集群配置、kubeconfig、备份等数据根目录

# 备份保留策略(按文件修改时间计算,过期自动清理;0 表示永不清理)
MCP_BACKUP_RETENTION_DAYS=90    # 默认 90 天

# MCP 路径配置
MCP_STREAMABLE_PATH=/mcp        # Streamable HTTP 单端点
MCP_SSE_PATH=/sse               # SSE 连接端点
MCP_MESSAGE_PATH=/message       # SSE 消息 POST 端点

# 日志级别
LOG_LEVEL=info

# 认证配置(可选,默认不启用)
MCP_AUTH_ENABLED=false          # 设为 true 启用 JWT 认证和多租户隔离
MCP_JWT_SECRET=                 # JWT 签名密钥(启用认证时必填)
MCP_JWT_ALGORITHM=HS256         # JWT 算法
MCP_TOKEN_MAX_EXPIRY=7776000    # Token 最大有效期(秒),默认 90 天
MCP_ADMIN_API_PREFIX=/admin     # 管理 API 路由前缀
```



### kubeconfig 管理

系统会将 kubeconfig 文件保存在 `data/kubeconfigs/` 目录下,支持:

- 多集群配置管理
- 配置文件的增删改查
- 集群间快速切换
- 自动加载默认集群配置



### 自动加载功能

系统提供智能的配置自动加载机制:

1. **默认集群**:设置一个集群为默认集群后,所有工具都会自动使用该集群的配置
2. **默认命名空间**:每个集群可以设置默认的命名空间
3. **参数优先级**:明确指定的参数 > 默认集群配置 > 系统默认值

这意味着您可以:

- 导入集群配置一次,后续无需每次指定 kubeconfig
- 大部分操作无需指定任何参数,直接使用默认配置



## 🔍 依赖说明



### 核心依赖

- **mcp**: MCP Python SDK 与 FastMCP Server API
- **kubernetes**: Kubernetes Python 客户端库
- **pyyaml**: YAML 配置文件解析
- **pydantic**: 数据验证和序列化
- **uvicorn**: ASGI 服务器



### 特别说明

❌ **不依赖 kubectl**:本项目完全通过 Kubernetes Python Client API 实现,无需安装 kubectl 命令行工具

✅ **仅需 kubeconfig**:只需要有效的 kubeconfig 文件即可连接和管理 Kubernetes 集群

## 🚀 高级功能



### 集群健康监控

系统提供全方位的集群健康检查:

- 节点状态监控
- 系统 Pod 健康检查
- API 服务器连通性检查
- 资源使用率分析
- 事件日志收集



### 资源分析

提供详细的资源使用分析:

- CPU/内存请求和限制统计
- 集群资源利用率计算
- 资源优化建议



### 多集群管理

支持管理多个 Kubernetes 集群:

- 集群配置存储和管理
- 快速切换集群上下文
- 集群列表和状态展示
- 默认集群自动加载
- 集群连接测试和验证



### 智能配置系统

提供完整的配置管理体系:

- **自动发现**:自动加载默认集群和命名空间配置
- **参数简化**:大部分操作无需指定冗余参数
- **配置验证**:完整的 kubeconfig 格式验证
- **错误处理**:友好的错误提示和自动回退机制



### 优雅删除机制

支持 Kubernetes 标准的优雅删除:

- **grace_period_seconds**: 设置优雅关闭等待时间
- **立即删除**: 设置为 0 实现强制删除
- **默认行为**: 使用 Kubernetes 默认的优雅删除策略



## 📚 开发指南



### 添加新工具

1. 在对应的工具模块中添加函数
2. 使用 `@mcp.tool` 装饰器
3. 通过 `KubernetesAPIService` 进行 API 调用

示例:

```python
@mcp.tool()
async def my_new_tool(kubeconfig_path: str = None, namespace: str = "default") -> str:
    """新工具描述"""
    try:
        from services.factory import get_k8s_api_service
        from utils.response import json_success, json_error
        k8s_service = get_k8s_api_service(kubeconfig_path)  # 按 kubeconfig_path 缓存
        result = await k8s_service.some_api_call(namespace=namespace)
        return json_success({"data": result})
    except Exception as e:
        return json_error(str(e))
```



### 扩展 API 服务

在 `services/k8s_api/` 的相应 Mixin 模块(如 `pod_ops.py`、`workload_ops.py`)中添加新的 API 方法:

```python
async def new_api_method(self, param1: str, grace_period_seconds: int = None) -> Dict[str, Any]:
    """新的 API 方法"""
    try:
        # 支持优雅删除
        body = client.V1DeleteOptions(grace_period_seconds=grace_period_seconds) if grace_period_seconds is not None else None
        
        # 使用 self.v1_api, self.apps_v1_api 等进行 API 调用
        result = self.v1_api.some_kubernetes_api(body=body)
        return self._format_result(result)
    except ApiException as e:
        raise Exception(f"API 调用失败: {e.reason}")
```



## 🚀 快速入门指南



### 1. 导入集群配置

```bash
# 启动服务
k8s-mcp-server

# 在 MCP 客户端中导入集群
import_cluster(
    name="生产环境",
    kubeconfig="/path/to/kubeconfig.yaml",
    namespace="default",
    is_default=True
)
```



### 2. 使用自动加载功能

一旦设置了默认集群,所有操作都可以简化:

```bash
# 批量列出 Pod(自动使用默认集群和命名空间)
batch_list_resources(resource_types="pods", namespace="default")

# 查看集群信息
get_cluster_info()

# 检查集群健康状态
check_cluster_health()

# 批量创建资源(含 Deployment)
batch_create_resources(resources="[{...}]", namespace="default")
```



### 3. 管理多集群

```bash
# 查看所有集群
list_clusters()

# 切换默认集群
set_default_cluster(name="测试环境")

# 测试集群连接
test_cluster_connection(name="生产环境")
```



### 4. 多租户认证(可选)

适用于团队/线上多人使用场景。

```bash
# 1. 启动服务(启用认证)
MCP_AUTH_ENABLED=true MCP_JWT_SECRET=your-secret-key \
  k8s-mcp-server --transport streamable --host 0.0.0.0 --port 8000

# 2. 生成管理员 Token
MCP_JWT_SECRET=your-secret-key mcp-admin bootstrap
# 输出:MCP_BOOTSTRAP_ADMIN_JWT=eyJhbGci...

# 3. 为用户签发 Token
MCP_JWT_SECRET=your-secret-key mcp-admin issue --user alice --expires 7776000

# 4. 通过 MCP Tool 为用户分配集群权限(管理员在 MCP 对话中执行)
# admin_manage_users(action="grant_access", user_id="alice",
#   cluster_name="prod", namespace="default", profile="developer")
```

用户在 MCP 客户端配置 Token(以 Cursor 为例):

```json
{
  "mcpServers": {
    "k8s-mcp-server": {
      "url": "http://your-server:8000/mcp",
      "headers": {
        "Authorization": "Bearer eyJhbGci..."
      }
    }
  }
}
```



#### 权限 Profile


| Profile     | 可见工具                        | K8s 权限                                                                 | 管理能力                    |
| ----------- | --------------------------- | ---------------------------------------------------------------------- | ----------------------- |
| `viewer`    | 13 个(只读 + 日志 + 连接测试 + 切换集群) | get/list/watch + pods/log                                              | —                       |
| `developer` | 21 个(读写 + exec)             | CRUD 工作负载 + pods/log、exec、portforward                                  | —                       |
| `operator`  | 30 个(+ 备份恢复、集群诊断、节点排水、用户管理) | 命名空间全操作 + rbac 只读 + ClusterRole(nodes/namespaces/events/metrics/drain) | 可管理 viewer/developer 用户 |
| `admin`     | 35 个(全部,含集群级操作)             | 使用 K8s admin kubeconfig,天然集群全权限                                        | 全部                      |




#### 安全机制

- **路径注入防护**:`kubeconfig_path` 仅允许指向当前用户自己的数据目录,阻止跨用户读取
- **输入校验**:`user_id`、`cluster_name`、`namespace` 等标识符强制格式校验(字母数字、连字符、下划线、点),防止路径穿越
- **operator 权限隔离**:operator 不能自我授权、不能操作高权限用户、不能签发 admin token。operator 自身的 K8s 操作权限限定在被授权的命名空间内,但其用户管理能力(`grant_access`)属于 MCP 平台级委派,可跨命名空间为用户分配 viewer/developer 权限(底层使用 admin kubeconfig 创建 RBAC),适合作为平台维护人员统一管理多团队接入
- **自定义 Profile 限制**:自定义 profile 不允许包含 `user_manage`/`profile_manage`/`cluster_ops` 保留分类或管理工具
- **Token 有效期上限**:默认最大 90 天(可通过 `MCP_TOKEN_MAX_EXPIRY` 调整)
- **撤销列表自动清理**:过期的 jti 会自动从撤销表中移除,防止无限增长
- **审计日志**:所有管理操作(签发/撤销 Token、授权/撤销集群权限)均记录到 `operations.log`
- **Operator RBAC 代理**:operator 调用 `grant_access` 时自动使用 admin 的高权限 kubeconfig 创建 K8s RBAC 资源
- **ClusterRole 联动**:operator profile 的 `grant_access` 额外创建 ClusterRole + ClusterRoleBinding(nodes、namespaces、events、metrics、pods/eviction),`revoke_access` 同步清理
- **集群级工具优雅降级**:`get_cluster_info` 对无集群级权限的用户返回部分结果(跳过 nodes/namespaces);`get_cluster_events` 在 ns=all 失败时提示指定命名空间;`test_cluster_connection` 使用 VersionApi 无需集群级权限
- **K8s 服务缓存失效**:`grant_access`/`revoke_access` 执行后自动失效目标用户的 K8s 客户端缓存,避免旧 token 被后续请求复用;`test_cluster_connection` 测试前自动失效该集群缓存并从磁盘重载 kubeconfig
- **import_cluster 证书校验**:导入时自动校验客户端证书与私钥是否匹配(`ssl.SSLContext.load_cert_chain`),不匹配立即拒绝并返回含 `curl` 文件上传指引的错误信息。直接传入 kubeconfig 内容是支持的,但部分 AI 模型在生成 tool call 参数时会损坏长 base64 字符串导致校验失败;此时错误信息会引导使用 `POST /admin/kubeconfigs/upload` 上传文件后再以服务端路径导入,绕过 LLM 文本生成环节
- **RBAC 模板即时同步**:`grant_access` 使用 K8s API 直接创建/替换 Role,确保模板变更立即生效,无需手动删除旧 Role
- **端口转发线程隔离**:port_forward 使用独立的 ApiClient 实例,避免 monkey-patch 污染共享 API 客户端
- **Tar slip 防护**:从 Pod 拷贝文件时校验 tar 成员路径,防止路径穿越写入目标目录之外



#### 管理 REST API


| 端点                          | 方法   | 说明                                                                                                                                                                |
| --------------------------- | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/admin/tokens/issue`       | POST | 签发 Token                                                                                                                                                          |
| `/admin/tokens/extend`      | POST | 延长 Token 实际生效时间(token 字符串不变,body: `{"jti": "..."}` 或 `{"user_id": "..."}`,可选 `expires_in_seconds` 默认 7776000;按 user_id 时只续期最近的一个 token;`user_id == 'admin'` 不纳入延期管理) |
| `/admin/tokens/revoke`      | POST | 撤销 Token                                                                                                                                                          |
| `/admin/tokens/revoked`     | GET  | 查看撤销列表                                                                                                                                                            |
| `/admin/tokens/cleanup`     | POST | 清理撤销列表与延期表中已过期记录                                                                                                                                                  |
| `/admin/users`              | GET  | 列出所有用户                                                                                                                                                            |
| `/admin/kubeconfigs/upload` | POST | 上传 kubeconfig 文件(供 `import_cluster` 证书校验失败时的降级方案,文件走 HTTP 二进制传输绕过 LLM)                                                                                            |




#### CLI 管理工具

```bash
mcp-admin bootstrap          # 生成管理员 Token
mcp-admin issue --user bob   # 签发用户 Token
mcp-admin extend --jti xxx --expires 7776000      # 延期单个 token(token 字符串不变;user_id == 'admin' 不可延期)
mcp-admin extend --user bob --expires 7776000     # 延期该用户最近的一个 token
mcp-admin migrate-extensions [--dry-run]         # 把 user_grants.json 里 active grant 迁入延期表(排除 user_id == 'admin',幂等)
                                                 # 启动时仅在 token_extensions.json 不存在时自动迁移一次;后续新增用户需运行 --overwrite 补齐
mcp-admin revoke --jti xxx   # 撤销单个 Token
mcp-admin revoke-user --user bob  # 撤销用户全部 Token
mcp-admin list-users         # 列出所有用户(含 extended_tokens 计数)
mcp-admin grant --user bob --cluster prod --namespace default --profile developer  # 分配权限
mcp-admin revoke-access --user bob --cluster prod --namespace default  # 撤销权限
mcp-admin list-profiles      # 列出所有 Profile
```

> 未激活虚拟环境时可使用 `uv run mcp-admin ...` 临时运行。



### 5. 容器化部署

```bash
# 构建并部署到 Kubernetes
docker build -t k8s-mcp-server:latest .
kubectl apply -f k8s/

# 查看部署状态
kubectl get pods -l app=k8s-mcp-server
kubectl logs -f deployment/k8s-mcp-server
```



## 🔄 更新说明



### 最新版本特性

- ✅ **35 个工具函数**:涵盖所有主要 Kubernetes 资源(含 CRD 动态发现)
- ✅ **优雅删除支持**:部分删除函数支持 `grace_period_seconds` 参数
- ✅ **容器化支持**:提供 Docker 和 Kubernetes 部署
- ✅ **数据持久化**:支持配置、用户操作日志及 Pod 拷贝文件(data/copyfiles)的持久化存储
- ✅ **健康检查**:提供完整的健康检查机制
- ✅ **多集群管理**:支持多集群配置和快速切换
- ✅ **批量操作**:支持集群所有可发现 API 资源的批量操作,包含事务回滚
- ✅ **发布管理**:支持 Deployment/StatefulSet/DaemonSet 的 status、undo(含指定 revision)、pause、resume
- ✅ **资源监控**:batch_top_resources 查看 Node/Pod CPU、内存使用(依赖 metrics-server)
- ✅ **Pod 文件读写**:copy_pod_files 支持 Pod 文件双向传输,支持 `local_path` 直接落盘(二进制自动解码,无中间 base64 文件)
- ✅ **多租户认证**:JWT 认证、权限 Profile 分级、Tool 可见性过滤、K8s RBAC 自动联动、输入校验与审计日志
- ✅ **备份恢复**:支持命名空间和资源级别的备份恢复
- ✅ **变更验证预览**:自动验证所有写操作,显示具体变更内容和操作风险
- ✅ **交互式操作**:支持 Pod 命令执行、端口转发(含启停管理)、日志(含 previous 上一实例)
- ✅ **多集群 kubeconfig**:batch、backup、rbac 等工具均支持 `kubeconfig_path` 参数指定目标集群



## ⚠️ 注意事项



### CronJob 兼容性说明

- ❌ 本项目(k8s-mcp-server)**不支持 batch/v1beta1 CronJob API**。
- ✅ 仅适用于 Kubernetes v1.25 及以上版本(即只支持 batch/v1 版本的 CronJob 资源)。
- ⏫ 如果你的集群版本低于 v1.25,或仍在使用 batch/v1beta1,请升级集群或手动迁移 CronJob 资源。



## 🧪 回归测试

```bash
# 运行全部回归测试(需可用的 K8s 集群)
python -m tests.regression_test

# 仅运行同步测试(无需集群)
REGRESSION_SKIP_ASYNC=1 python -m tests.regression_test
```

- **同步测试**(7 个):导入、资源构建器、参数解析、kubeconfig 验证、tools 导出等
- **异步测试**(30 个):覆盖 MCP 工具的实际调用,需集群连接
- **备份测试隔离**:`backup_namespace`、`backup_resource` 的回归测试使用临时目录,测试后自动删除,不影响正式备份数据



## 🤝 贡献

欢迎贡献代码!请确保:

1. 遵循现有的代码风格
2. 添加适当的错误处理
3. 更新相关文档
4. 添加测试用例
5. 支持优雅删除机制(如适用)



## 📄 许可证

MIT License - 详见 [LICENSE](./LICENSE) 文件

TDQS

C2.9/5.0

Scored across 32 tools

Disambiguation3/5

Most tools have distinct purposes, but several cluster-inspection tools overlap: get_cluster_info, check_cluster_health, and test_cluster_connection are easy to confuse, as are get_cluster_resource_usage and batch_top_resources. Kubeconfig and cluster-config management also has multiple adjacent tools (list_clusters, list_kubeconfigs, load_kubeconfig, get_kubeconfig_info), though descriptions help clarify.

Naming Consistency4/5

The server overwhelmingly uses snake_case verb_noun naming (get_cluster_info, check_node_health, batch_update_resources). Minor deviations like port_forward (verb without object) and noun-oriented backup/restore names are still readable and predictable.

Tool Count2/5

32 tools is heavy for a single server and exceeds the typical 25-tool threshold for maintainable scope. While Kubernetes administration is broad, the surface could be consolidated, especially around cluster health, kubeconfig, and batch operations.

Completeness4/5

Coverage is strong: cluster and node/pod health, logs, exec, file copy, port forwarding, generic batch CRUD, rollout operations, events, usage, and backup/restore are all present. Minor gaps remain, such as single-resource create/update/delete conveniences, scaling, and namespace management, but batch tools provide workarounds.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues