MCP-сервер Kubernetes
Сервер протокола контекста модели Kubernetes (MCP), предоставляющий инструменты для взаимодействия с кластерами Kubernetes через стандартизированный интерфейс.
Функции
Обнаружение ресурсов API : получите все доступные ресурсы API в вашем кластере Kubernetes.
Список ресурсов : список ресурсов любого типа с дополнительной фильтрацией пространств имен и меток.
Сведения о ресурсах : получите подробную информацию о конкретных ресурсах Kubernetes.
Описание ресурса : получите полное описание ресурсов Kubernetes.
Журналы модулей : извлечение журналов из определенных модулей.
Метрики узлов : получение метрик использования ресурсов для определенных узлов.
Метрики Pod : получение метрик ЦП и памяти для определенных модулей.
Список событий : список событий в пространстве имен или для определенного ресурса.
Создание ресурсов : создание новых ресурсов Kubernetes из манифеста.
Стандартизированный интерфейс : использует протокол MCP для согласованного взаимодействия инструментов.
Гибкая конфигурация : поддерживает различные контексты Kubernetes и области действия ресурсов.
Related MCP server: MCP Server
Предпосылки
Перейти к версии 1.20 или более поздней
Доступ к кластеру Kubernetes
kubectlнастроен с соответствующим доступом к кластеру
Установка
Клонируйте репозиторий:
git clone https://github.com/reza-gholizade/k8s-mcp-server.git
cd k8s-mcp-serverУстановить зависимости:
go mod downloadСборка сервера:
go build -o k8s-mcp-server main.goИспользование
Запуск сервера
Запустите сервер:
./k8s-mcp-serverСервер запустится и будет прослушивать stdin/stdout на предмет сообщений протокола MCP.
Доступные инструменты
1. getAPIResources
Извлекает все доступные ресурсы API в кластере Kubernetes.
Параметры:
includeNamespaceScoped(логическое значение): включать ли ресурсы области пространства имен (по умолчанию true)includeClusterScoped(логическое значение): включать ли ресурсы кластерной области (по умолчанию true)
Пример:
{
"jsonrpc": "2.0",
"id": 1,
"method": "getAPIResources",
"params": {
"arguments": {
"includeNamespaceScoped": true,
"includeClusterScoped": true
}
}
}2. listResources
Перечисляет все экземпляры определенного типа ресурса.
Параметры:
Kind(строка, обязательно): тип ресурса для списка (например, «Pod», «Deployment»).namespace(строка): пространство имен, из которого нужно вывести список ресурсов (если не указано иное, выводятся списки по всем пространствам имен для ресурсов с пространством имен)labelSelector(строка): Фильтрация ресурсов по селектору меток
Пример:
{
"jsonrpc": "2.0",
"id": 1,
"method": "listResources",
"params": {
"arguments": {
"Kind": "Pod",
"namespace": "default",
"labelSelector": "app=nginx"
}
}
}3. getResource
Извлекает подробную информацию о конкретном ресурсе.
Параметры:
kind(строка, обязательно): тип ресурса, который необходимо получить (например, «Pod», «Deployment»).name(строка, обязательно): имя ресурса, который нужно получитьnamespace(строка): пространство имен ресурса (если это ресурс с пространством имен)
Пример:
{
"jsonrpc": "2.0",
"id": 1,
"method": "getResource",
"params": {
"arguments": {
"kind": "Pod",
"name": "nginx-pod",
"namespace": "default"
}
}
}4. describeResource
Описывает ресурс в кластере Kubernetes на основе заданного типа и имени, аналогично kubectl describe .
Параметры:
Kind(строка, обязательно): тип описываемого ресурса (например, «Pod», «Deployment»).name(строка, обязательно): имя ресурса для описанияnamespace(строка): пространство имен ресурса (если это ресурс с пространством имен)
Пример:
{
"jsonrpc": "2.0",
"id": 1,
"method": "describeResource",
"params": {
"arguments": {
"Kind": "Pod",
"name": "nginx-pod",
"namespace": "default"
}
}
}5. getPodsLogs
Извлекает журналы определенного модуля в кластере Kubernetes.
Параметры:
Name(строка, обязательно): Имя модуля, из которого необходимо получить журналы.namespace(строка): пространство имен модуля (если это ресурс с пространством имен).
Пример:
{
"jsonrpc": "2.0",
"id": 1,
"method": "getPodsLogs",
"params": {
"arguments": {
"Name": "my-app-pod-12345",
"namespace": "production"
}
}
}6. getNodeMetrics
Извлекает метрики использования ресурсов для определенного узла в кластере Kubernetes.
Параметры:
Name(строка, обязательно): имя узла, из которого необходимо получить метрики.
Пример:
{
"jsonrpc": "2.0",
"id": 1,
"method": "getNodeMetrics",
"params": {
"arguments": {
"Name": "worker-node-1"
}
}
}7. getPodMetrics
Извлекает показатели ЦП и памяти для определенного модуля в кластере Kubernetes.
Параметры:
namespace(строка, обязательно): пространство имен модуля.podName(строка, обязательно): Имя модуля.
Пример:
{
"jsonrpc": "2.0",
"id": 1,
"method": "getPodMetrics",
"params": {
"arguments": {
"namespace": "default",
"podName": "my-app-pod-67890"
}
}
}8. getEvents
Извлекает события для определенного пространства имен или ресурса в кластере Kubernetes.
Параметры:
namespace(string): Пространство имен, из которого нужно получить события. Если не указано, рассматриваются события из всех пространств имен (если разрешено RBAC).resourceName(строка): имя определенного ресурса (например, имя Pod), по которому необходимо фильтровать события.resourceKind(строка): тип конкретного ресурса (например, «Pod»), если указаноresourceName.
Пример (события пространства имен):
{
"jsonrpc": "2.0",
"id": 1,
"method": "getEvents",
"params": {
"arguments": {
"namespace": "default"
}
}
}Пример (события ресурсов):
{
"jsonrpc": "2.0",
"id": 1,
"method": "getEvents",
"params": {
"arguments": {
"namespace": "production",
"resourceName": "my-app-pod-12345",
"resourceKind": "Pod"
}
}
}9. createorUpdateResource
Создает новый ресурс в кластере Kubernetes из манифеста YAML или JSON.
Параметры:
manifest(строка, обязательно): манифест YAML или JSON ресурса, который необходимо создать.namespace(string, необязательно): Пространство имен, в котором создается ресурс. Если манифест содержит пространство имен, этот параметр можно опустить или использовать для его переопределения (поведение может зависеть от реализации сервера).
Пример:
{
"jsonrpc": "2.0",
"id": 1,
"method": "createResource",
"params": {
"arguments": {
"namespace": "default",
"manifest": "apiVersion: v1\nkind: Pod\nmetadata:\n name: my-new-pod\nspec:\n containers:\n - name: nginx\n image: nginx:latest"
}
}
}Разработка
Структура проекта
.
├── handlers/ # Tool handlers
│ └── handlers.go # Implementation of MCP tools
├── pkg/ # Internal packages
│ └── k8s/ # Kubernetes client implementation
├── main.go # Server entry point
├── go.mod # Go module definition
└── go.sum # Go module checksumsДобавление новых инструментов
Чтобы добавить новый инструмент:
Создайте новую функцию определения инструмента (например,
MyNewTool() mcp.Tool) вhandlers/handlers.goРеализуйте функцию обработчика инструмента (например,
MyNewHandler(client *k8s.Client) func(...)) вhandlers/handlers.goЗарегистрируйте инструмент и его обработчик в
main.goс помощьюs.AddTool()
Внося вклад
Вклады приветствуются! Подробности о том, как внести вклад в этот проект, см. на сайте CONTRIBUTING.md.
Лицензия
Данный проект лицензирован по лицензии MIT — подробности см. в файле LICENSE .