项目简介
MKP (Model Kontext Protocol Server for Kubernetes) 是一个基于 Model Context Protocol (MCP) 标准构建的服务器实现。它充当大型语言模型 (LLM) 应用与 Kubernetes 集群之间的桥梁,将 Kubernetes 的资源和操作转换为 LLM 可以理解和使用的结构化上下文 (Resources) 和可调用功能 (Tools)。这使得 LLM 应用能够安全、高效地查询、监控和管理 Kubernetes 环境。
主要功能点
- Kubernetes 资源管理: 允许 LLM 通过标准化的工具接口与 Kubernetes 资源交互,例如:
- 列出集群或命名空间下的特定类型资源(如 Pods, Deployments)。
- 获取特定资源的详细配置或状态,包括子资源(如获取 Pod 的日志)。
- 根据提供的清单创建或更新 Kubernetes 资源。
- 结构化上下文提供: MKP 可以将 Kubernetes 集群中存在的资源信息作为 MCP Resources 提供给 LLM 客户端,帮助 LLM 理解集群的当前状态和结构。用户可以选择是否启用此功能以控制 LLM 上下文的大小。
- 标准化协议通信: 使用 Model Context Protocol (MCP) 通过 JSON-RPC over SSE 等传输协议与 LLM 客户端通信,确保互操作性和扩展性。
- 基于 Kubernetes API Machinery: 直接使用 Kubernetes 官方 Go 客户端库与集群 API 服务器通信,无需依赖 'kubectl' 或 'helm' 等外部命令行工具,提高了效率和可靠性。
安装步骤
要构建并运行 MKP 服务器,您需要 Go 1.24 或更高版本以及 Task 工具。
- 克隆仓库:
git clone https://github.com/StacklokLabs/mkp.git cd mkp - 安装依赖:
task install - 构建服务器:
构建成功后,可执行文件将位于 './build' 目录下。task build
服务器配置(供 MCP 客户端使用)
MKP 服务器通常作为 MCP 客户端(如 LLM 代理或 ToolHive)的一个外部进程启动。MCP 客户端需要知道如何启动和连接到 MKP 服务器。以下是 MCP 客户端可能需要配置的 MKP 服务器启动信息示例:
- 'server name': 'kubernetes-mcp-server' (这是服务器在 MCP 网络中的唯一标识)
- 'command': './build/mkp-server' (这是您构建的 MKP 服务器二进制文件路径)
- 'args': 这是一个字符串数组,包含传递给服务器的命令行参数。常用的参数包括:
- '--kubeconfig /path/to/your/kubeconfig': 指定用于连接 Kubernetes 集群的 kubeconfig 文件路径。如果不指定,将尝试使用集群内配置或默认路径 '~/.kube/config'。
- '--addr :8080': 指定服务器监听的地址和端口。客户端将连接到此地址。
- '--serve-resources false': 如果您不想让服务器将所有 Kubernetes 资源暴露为 MCP Resources,可以设置为 'false'。默认为 'true'。
请注意,上述信息是为配置 MCP 客户端而提供的,您不需要在 MKP 服务器本身执行这些配置。
基本使用方法
- 启动 MKP 服务器: 在终端中运行您构建的 MKP 服务器二进制文件,例如:
服务器将启动并监听指定的地址。./build/mkp-server --kubeconfig /path/to/your/kubeconfig --addr :8080 - 连接 MCP 客户端: 配置您的 MCP 客户端(如 ToolHive 或兼容 LLM 代理),使其能够启动并连接到 MKP 服务器指定的地址和端口。
- LLM 交互: 一旦客户端连接成功,它将发现 MKP 服务器提供的 Kubernetes 工具 ('list_resources', 'get_resource', 'apply_resource') 和可选的资源上下文。LLM 可以通过调用这些工具并提供相应的参数(例如,调用 'list_resources' 工具并指定 'resource_type', 'group', 'version', 'resource', 'namespace' 参数)来执行 Kubernetes 操作并获取结果。
例如,LLM 可以通过调用 'get_resource' 工具,提供 'resource_type' 为 "namespaced", 'namespace' 为 "default", 'resource' 为 "pods", 'name' 为 "my-pod", 'subresource' 为 "logs" 等参数,来获取特定 Pod 的日志。
信息
分类
开发者工具