Skip to content

Commit af9db4a

Browse files
authored
Merge pull request #80 from tongtie/feat-k8s-mcp-server
feat: k8s mcp server
2 parents 5d7997f + 4e76620 commit af9db4a

File tree

14 files changed

+1969
-0
lines changed

14 files changed

+1969
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
DEFAULT_LLM_API_KEY=""
2+
DEFAULT_LLM_BASE_URL=""
3+
DEFAULT_LLM_MODEL_NAME=""
4+
5+
# ================================
6+
# Kubernetes MCP 基础配置
7+
# ================================
8+
9+
# MCP 传输模式: stdio, sse, streamable-http
10+
K8S_MCP_TRANSPORT=stdio
11+
12+
# 启用的工具集: config,core,helm (逗号分隔)
13+
K8S_MCP_TOOLSETS=config,core,helm
14+
15+
# 安全模式配置
16+
K8S_MCP_READ_ONLY=false
17+
K8S_MCP_DISABLE_DESTRUCTIVE=false
18+
19+
# SSE/Streamable HTTP 模式端口 (仅网络模式需要)
20+
K8S_MCP_PORT=8000
21+
22+
# ================================
23+
# 单集群配置
24+
# ================================
25+
26+
# kubeconfig 文件路径 (可选,默认使用 ~/.kube/config)
27+
KUBECONFIG=~/.kube/config
28+
29+
30+
# ================================
31+
# 调试配置 (可选)
32+
# ================================
33+
34+
# 启用调试日志
35+
DEBUG=0
36+
37+
# Python 路径 (通常不需要修改)
38+
PYTHONPATH=.
39+
40+
# ================================
41+
# 使用说明
42+
# ================================
43+
44+
# 1. 基础使用 (kubernetes_demo.py):
45+
# - 设置 LLM 配置
46+
# - 设置 KUBECONFIG
47+
# - 运行: python examples/mcp_tools/kubernetes_demo.py
48+
49+
50+
# ================================
51+
# 安全提醒
52+
# ================================
53+
54+
# - 生产环境建议使用 K8S_MCP_READ_ONLY=true
55+
# - 敏感环境建议使用 K8S_MCP_DISABLE_DESTRUCTIVE=true
56+
# - 确保 kubeconfig 文件权限设置正确 (600)
57+
# - 定期轮换 API 密钥和访问凭证
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# Kubernetes MCP 服务器
2+
3+
## 概述
4+
5+
Kubernetes MCP 服务器为 OxyGent 提供完整的 Kubernetes 集群管理功能,支持配置管理、核心资源操作和 Helm 模板化部署。
6+
7+
## 快速开始
8+
9+
### 1. 安装依赖
10+
11+
```bash
12+
pip install -r mcp_servers/kubernetes_mcp_server/requirements.txt
13+
```
14+
15+
### 2. 设置环境变量
16+
17+
注: 无K8S环境时,可以通过k8s `kind`在本地快速启动: https://kind.sigs.k8s.io/
18+
19+
```bash
20+
# 备份本地环境变量
21+
cp .env .env.bak
22+
23+
# 使用本mcp的环境变量文件
24+
cp mcp_servers/kubernetes_mcp_server/.env.example .env
25+
```
26+
27+
### 3. 基础使用
28+
29+
```bash
30+
31+
# 启动服务器 (stdio 模式)
32+
python -m mcp_servers.kubernetes_mcp_server.server --transport stdio
33+
34+
# 在 OxyGent 中使用
35+
python mcp_servers/kubernetes_mcp_server/kubernetes_demo.py
36+
```
37+
38+
## 功能特性
39+
40+
### 🔧 配置工具集 (config)
41+
- 查看 kubeconfig 配置和上下文
42+
- 列出所有可用的集群上下文
43+
- 切换当前上下文
44+
45+
### 🚀 核心工具集 (core)
46+
- **Pods**: 列出、查看、获取日志、执行命令
47+
- **Nodes**: 查看节点状态和资源使用
48+
- **Namespaces**: 管理命名空间
49+
- **Resources**: 通用资源操作
50+
- **Events**: 查看集群事件
51+
52+
### ⚙️ Helm 工具集 (helm)
53+
- 使用 Jinja2 模板渲染 Helm 风格配置
54+
- 部署和卸载应用
55+
- 无需 Helm 二进制依赖
56+
57+
## 使用示例
58+
59+
### 基础集群管理
60+
```python
61+
# 完整功能示例
62+
python examples/mcp_tools/kubernetes_demo.py
63+
```
64+
65+
66+
## 配置选项
67+
68+
### 环境变量
69+
- `K8S_MCP_TRANSPORT`: 传输模式 (stdio/sse/streamable-http)
70+
- `K8S_MCP_TOOLSETS`: 启用的工具集 (config,core,helm)
71+
- `K8S_MCP_READ_ONLY`: 只读模式
72+
- `K8S_MCP_DISABLE_DESTRUCTIVE`: 禁用破坏性操作
73+
- `KUBECONFIG`: kubeconfig 文件路径
74+
75+
### 命令行参数
76+
```bash
77+
python -m mcp_servers.kubernetes_mcp_server.server \
78+
--transport stdio \
79+
--toolsets config,core,helm \
80+
--read-only \
81+
--disable-destructive
82+
```
83+
84+
## 安全模式
85+
86+
### 只读模式
87+
```bash
88+
--read-only
89+
```
90+
- 禁用所有写操作
91+
- 仅支持查看和监控
92+
- 适合生产环境
93+
94+
### 禁用破坏性操作
95+
```bash
96+
--disable-destructive
97+
```
98+
- 保留创建和更新
99+
- 禁用删除操作
100+
- 适合测试环境
101+
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
"""
2+
Kubernetes MCP Server package initializer.
3+
4+
提供:
5+
- 全局 FastMCP 实例 (用于在各工具模块上通过 @mcp.tool 装饰器统一注册)
6+
- 非破坏模式与禁删/禁更新等安全开关的环境变量读取
7+
- 其他子模块将通过 `from . import mcp` 共享同一个 MCP 实例
8+
"""
9+
10+
from __future__ import annotations
11+
12+
import os
13+
from mcp.server.fastmcp import FastMCP
14+
15+
# 全局 MCP 实例:各工具模块通过 `from . import mcp` 引用此实例并注册工具
16+
# 运行传输模式由启动入口 server.py 控制 (stdio / sse / streamable-http)
17+
mcp = FastMCP()
18+
19+
# 安全与变更开关(环境变量控制)
20+
# - K8S_MCP_READ_ONLY=true: 仅允许只读/非破坏工具
21+
# - K8S_MCP_DISABLE_DESTRUCTIVE=true: 禁止 destructive 类操作(delete / update 等)
22+
# 注意:这两个开关的生效逻辑由 server.py 的工具过滤器与具体工具内部的保护共同保证
23+
_READ_ONLY = os.getenv("K8S_MCP_READ_ONLY", "").strip().lower() in {
24+
"1",
25+
"true",
26+
"yes",
27+
"on",
28+
}
29+
_DISABLE_DESTRUCTIVE = os.getenv("K8S_MCP_DISABLE_DESTRUCTIVE", "").strip().lower() in {
30+
"1",
31+
"true",
32+
"yes",
33+
"on",
34+
}
35+
36+
37+
def is_read_only() -> bool:
38+
"""
39+
返回是否启用只读模式(READ-ONLY)。
40+
该模式通常会移除 delete/update 等破坏性工具,仅保留只读与创建/更新安全工具的最小集合。
41+
"""
42+
return _READ_ONLY
43+
44+
45+
def is_disable_destructive() -> bool:
46+
"""
47+
返回是否禁用破坏性操作(DELETE/UPDATE 等)。
48+
在 READ-ONLY 未开启时,也可通过该开关细粒度限制工具集合。
49+
"""
50+
return _DISABLE_DESTRUCTIVE
51+
52+
53+
__all__ = [
54+
"mcp",
55+
"is_read_only",
56+
"is_disable_destructive",
57+
]

0 commit comments

Comments
 (0)