k8s-mcp-server

Integrations

  • Provides a comprehensive interface for managing Kubernetes clusters, including resource discovery, listing, detailed inspection, log retrieval, metrics collection, event tracking, and resource creation through a standardized MCP protocol.

  • Supports creation of Kubernetes resources from YAML manifests, enabling deployment of complex resources through the createorUpdateResource tool.

MCP-сервер Kubernetes

Сервер протокола контекста модели Kubernetes (MCP), предоставляющий инструменты для взаимодействия с кластерами Kubernetes через стандартизированный интерфейс.

Функции

  • Обнаружение ресурсов API : получите все доступные ресурсы API в вашем кластере Kubernetes.
  • Список ресурсов : список ресурсов любого типа с дополнительной фильтрацией пространств имен и меток.
  • Сведения о ресурсах : получите подробную информацию о конкретных ресурсах Kubernetes.
  • Описание ресурса : получите полное описание ресурсов Kubernetes.
  • Журналы модулей : извлечение журналов из определенных модулей.
  • Метрики узлов : получение метрик использования ресурсов для определенных узлов.
  • Метрики Pod : получение метрик ЦП и памяти для определенных модулей.
  • Список событий : список событий в пространстве имен или для определенного ресурса.
  • Создание ресурсов : создание новых ресурсов Kubernetes из манифеста.
  • Стандартизированный интерфейс : использует протокол MCP для согласованного взаимодействия инструментов.
  • Гибкая конфигурация : поддерживает различные контексты Kubernetes и области действия ресурсов.

Предпосылки

  • Перейти к версии 1.20 или более поздней
  • Доступ к кластеру Kubernetes
  • kubectl настроен с соответствующим доступом к кластеру

Установка

  1. Клонируйте репозиторий:
git clone https://github.com/reza-gholizade/k8s-mcp-server.git cd k8s-mcp-server
  1. Установить зависимости:
go mod download
  1. Сборка сервера:
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

Добавление новых инструментов

Чтобы добавить новый инструмент:

  1. Создайте новую функцию определения инструмента (например, MyNewTool() mcp.Tool ) в handlers/handlers.go
  2. Реализуйте функцию обработчика инструмента (например, MyNewHandler(client *k8s.Client) func(...) ) в handlers/handlers.go
  3. Зарегистрируйте инструмент и его обработчик в main.go с помощью s.AddTool()

Внося вклад

Вклады приветствуются! Подробности о том, как внести вклад в этот проект, см. на сайте CONTRIBUTING.md.

Лицензия

gholizade.net@gmail.com

Данный проект лицензирован по лицензии MIT — подробности см. в файле LICENSE .

-
security - not tested
A
license - permissive license
-
quality - not tested

local-only server

The server can only run on the client's local machine because it depends on local resources.

Сервер протокола контекста модели Kubernetes (MCP), предоставляющий инструменты для взаимодействия с кластерами Kubernetes через стандартизированный интерфейс.

  1. Функции
    1. Предпосылки
      1. Установка
        1. Использование
          1. Запуск сервера
          2. Доступные инструменты
        2. Разработка
          1. Структура проекта
          2. Добавление новых инструментов
        3. Внося вклад
          1. Лицензия

            Related MCP Servers

            • -
              security
              A
              license
              -
              quality
              This project is intended as a both MCP server connecting to Kubernetes and a library to build more servers for any custom resources in Kubernetes.
              Last updated -
              267
              Go
              MIT License
              • Linux
              • Apple

            View all related MCP servers

            ID: 3a39wbpiwp