Kubernetes MCP 服务器
Kubernetes 模型上下文协议 (MCP) 服务器,提供通过标准化接口与 Kubernetes 集群交互的工具。
特征
API 资源发现:获取 Kubernetes 集群中所有可用的 API 资源
资源列表:列出任何类型的资源,并提供可选的命名空间和标签过滤
资源详情:获取特定 Kubernetes 资源的详细信息
资源描述:获取 Kubernetes 资源的全面描述
Pod Logs :从特定 Pod 检索日志
节点指标:获取特定节点的资源使用情况指标
Pod 指标:获取特定 Pod 的 CPU 和内存指标
事件列表:列出命名空间内或特定资源的事件。
资源创建:从清单创建新的 Kubernetes 资源。
标准化接口:使用 MCP 协议实现一致的工具交互
灵活配置:支持不同的 Kubernetes 上下文和资源范围
Related MCP server: MCP Server
先决条件
Go 1.20 或更高版本
访问 Kubernetes 集群
配置了适当集群访问权限的
kubectl
安装
克隆存储库:
安装依赖项:
构建服务器:
用法
启动服务器
运行服务器:
服务器将启动并在 stdin/stdout 上监听 MCP 协议消息。
可用工具
1. getAPIResources
检索 Kubernetes 集群中所有可用的 API 资源。
参数:
includeNamespaceScoped(布尔值):是否包含命名空间范围的资源(默认为 true)includeClusterScoped(布尔值):是否包含集群范围的资源(默认为 true)
例子:
2. listResources
列出特定资源类型的所有实例。
参数:
Kind(字符串,必需):要列出的资源类型(例如“Pod”、“Deployment”)namespace(字符串):列出资源的命名空间(如果省略,则列出所有命名空间的命名空间资源)labelSelector(字符串):通过标签选择器过滤资源
例子:
3. getResource
检索有关特定资源的详细信息。
参数:
kind(字符串,必需):要获取的资源类型(例如,“Pod”,“Deployment”)name(字符串,必需):要获取的资源的名称namespace(字符串):资源的命名空间(如果它是命名空间资源)
例子:
4. describeResource
根据给定的种类和名称描述 Kubernetes 集群中的资源,类似于kubectl describe 。
参数:
Kind(字符串,必需):要描述的资源类型(例如“Pod”、“Deployment”)name(字符串,必需):要描述的资源的名称namespace(字符串):资源的命名空间(如果它是命名空间资源)
例子:
5. getPodsLogs
检索 Kubernetes 集群中特定 pod 的日志。
参数:
Name(字符串,必需):要从中获取日志的 pod 的名称。namespace(字符串):pod 的命名空间(如果它是命名空间资源)。
例子:
6. getNodeMetrics
检索 Kubernetes 集群中特定节点的资源使用情况指标。
参数:
Name(字符串,必需):要从中获取指标的节点的名称。
例子:
7. getPodMetrics
检索 Kubernetes 集群中特定 pod 的 CPU 和内存指标。
参数:
namespace(字符串,必需):pod 的命名空间。podName(字符串,必需):pod 的名称。
例子:
8. getEvents
检索 Kubernetes 集群中特定命名空间或资源的事件。
参数:
namespace(字符串):用于获取事件的命名空间。如果省略,则所有命名空间的事件都会被考虑(前提是 RBAC 允许)。resourceName(字符串):用于过滤事件的特定资源的名称(例如,Pod 名称)。resourceKind(字符串):如果提供了resourceName,则为特定资源的种类(例如“Pod”)。
示例(命名空间事件):
示例(资源事件):
9. createorUpdateResource
从 YAML 或 JSON 清单在 Kubernetes 集群中创建新资源。
参数:
manifest(字符串,必需):要创建的资源的 YAML 或 JSON 清单。namespace(字符串,可选):创建资源时所用的命名空间。如果清单中包含命名空间,则可以省略此参数或使用它来覆盖它(具体行为可能取决于服务器实现)。
例子:
发展
项目结构
添加新工具
要添加新工具:
在
handlers/handlers.go中创建一个新的工具定义函数(例如MyNewTool() mcp.Tool)在
handlers/handlers.go中实现工具处理函数(例如,MyNewHandler(client *k8s.Client) func(...))使用
s.AddTool()在main.go中注册该工具及其处理程序
贡献
欢迎贡献!请参阅CONTRIBUTING.md了解如何为此项目做出贡献的详细信息。
执照
该项目根据 MIT 许可证获得许可 - 有关详细信息,请参阅LICENSE文件。