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.

Kubernetes MCP Server

Ein Kubernetes Model Context Protocol (MCP)-Server, der Tools für die Interaktion mit Kubernetes-Clustern über eine standardisierte Schnittstelle bereitstellt.

Merkmale

  • API-Ressourcenerkennung : Holen Sie sich alle verfügbaren API-Ressourcen in Ihrem Kubernetes-Cluster
  • Ressourcenauflistung : Listen Sie Ressourcen aller Art mit optionaler Namespace- und Labelfilterung auf
  • Ressourcendetails : Erhalten Sie detaillierte Informationen zu bestimmten Kubernetes-Ressourcen
  • Ressourcenbeschreibung : Erhalten Sie umfassende Beschreibungen der Kubernetes-Ressourcen
  • Pod-Protokolle : Rufen Sie Protokolle von bestimmten Pods ab
  • Knotenmetriken : Erhalten Sie Metriken zur Ressourcennutzung für bestimmte Knoten
  • Pod-Metriken : Erhalten Sie CPU- und Speichermetriken für bestimmte Pods
  • Ereignisliste : Listet Ereignisse innerhalb eines Namespace oder für eine bestimmte Ressource auf.
  • Ressourcenerstellung : Erstellen Sie neue Kubernetes-Ressourcen aus einem Manifest.
  • Standardisierte Schnittstelle : Verwendet das MCP-Protokoll für eine konsistente Tool-Interaktion
  • Flexible Konfiguration : Unterstützt verschiedene Kubernetes-Kontexte und Ressourcenbereiche

Voraussetzungen

  • Go 1.20 oder höher
  • Zugriff auf einen Kubernetes-Cluster
  • kubectl mit entsprechendem Clusterzugriff konfiguriert

Installation

  1. Klonen Sie das Repository:
git clone https://github.com/reza-gholizade/k8s-mcp-server.git cd k8s-mcp-server
  1. Installieren Sie Abhängigkeiten:
go mod download
  1. Erstellen Sie den Server:
go build -o k8s-mcp-server main.go

Verwendung

Starten des Servers

Führen Sie den Server aus:

./k8s-mcp-server

Der Server wird gestartet und wartet auf stdin/stdout auf MCP-Protokollnachrichten.

Verfügbare Tools

1. API getAPIResources

Ruft alle verfügbaren API-Ressourcen im Kubernetes-Cluster ab.

Parameter:

  • includeNamespaceScoped (Boolesch): Ob Ressourcen mit Namespace-Bereich eingeschlossen werden sollen (Standardwert: „true“)
  • includeClusterScoped (Boolesch): Ob clusterbezogene Ressourcen eingeschlossen werden sollen (Standardwert: „true“)

Beispiel:

{ "jsonrpc": "2.0", "id": 1, "method": "getAPIResources", "params": { "arguments": { "includeNamespaceScoped": true, "includeClusterScoped": true } } }
2. listResources

Listet alle Instanzen eines bestimmten Ressourcentyps auf.

Parameter:

  • Kind (Zeichenfolge, erforderlich): Die Art der aufzulistenden Ressource (z. B. „Pod“, „Bereitstellung“)
  • namespace (Zeichenfolge): Der Namespace, aus dem Ressourcen aufgelistet werden sollen (wenn er weggelassen wird, werden für Namespace-Ressourcen alle Namespaces aufgelistet)
  • labelSelector (Zeichenfolge): Filtern Sie Ressourcen nach dem Label-Selektor

Beispiel:

{ "jsonrpc": "2.0", "id": 1, "method": "listResources", "params": { "arguments": { "Kind": "Pod", "namespace": "default", "labelSelector": "app=nginx" } } }
3. getResource

Ruft detaillierte Informationen zu einer bestimmten Ressource ab.

Parameter:

  • kind (Zeichenfolge, erforderlich): Die Art der abzurufenden Ressource (z. B. „Pod“, „Bereitstellung“)
  • name (Zeichenfolge, erforderlich): Der Name der abzurufenden Ressource
  • namespace (Zeichenfolge): Der Namespace der Ressource (wenn es sich um eine Namespace-Ressource handelt)

Beispiel:

{ "jsonrpc": "2.0", "id": 1, "method": "getResource", "params": { "arguments": { "kind": "Pod", "name": "nginx-pod", "namespace": "default" } } }
4. describeResource

Beschreibt eine Ressource im Kubernetes-Cluster basierend auf der angegebenen Art und dem angegebenen Namen, ähnlich wie kubectl describe .

Parameter:

  • Kind (Zeichenfolge, erforderlich): Die Art der zu beschreibenden Ressource (z. B. „Pod“, „Bereitstellung“)
  • name (Zeichenfolge, erforderlich): Der Name der zu beschreibenden Ressource
  • namespace (Zeichenfolge): Der Namespace der Ressource (wenn es sich um eine Namespace-Ressource handelt)

Beispiel:

{ "jsonrpc": "2.0", "id": 1, "method": "describeResource", "params": { "arguments": { "Kind": "Pod", "name": "nginx-pod", "namespace": "default" } } }
5. getPodsLogs

Ruft die Protokolle eines bestimmten Pods im Kubernetes-Cluster ab.

Parameter:

  • Name (Zeichenfolge, erforderlich): Der Name des Pods, von dem Protokolle abgerufen werden sollen.
  • namespace (Zeichenfolge): Der Namespace des Pods (wenn es sich um eine Namespace-Ressource handelt).

Beispiel:

{ "jsonrpc": "2.0", "id": 1, "method": "getPodsLogs", "params": { "arguments": { "Name": "my-app-pod-12345", "namespace": "production" } } }
6. getNodeMetrics

Ruft Metriken zur Ressourcennutzung für einen bestimmten Knoten im Kubernetes-Cluster ab.

Parameter:

  • Name (Zeichenfolge, erforderlich): Der Name des Knotens, von dem die Metriken abgerufen werden sollen.

Beispiel:

{ "jsonrpc": "2.0", "id": 1, "method": "getNodeMetrics", "params": { "arguments": { "Name": "worker-node-1" } } }
7. getPodMetrics

Ruft CPU- und Speichermetriken für einen bestimmten Pod im Kubernetes-Cluster ab.

Parameter:

  • namespace (Zeichenfolge, erforderlich): Der Namespace des Pods.
  • podName (Zeichenfolge, erforderlich): Der Name des Pods.

Beispiel:

{ "jsonrpc": "2.0", "id": 1, "method": "getPodMetrics", "params": { "arguments": { "namespace": "default", "podName": "my-app-pod-67890" } } }
8. getEvents

Ruft Ereignisse für einen bestimmten Namespace oder eine bestimmte Ressource im Kubernetes-Cluster ab.

Parameter:

  • namespace (Zeichenfolge): Der Namespace, aus dem Ereignisse abgerufen werden sollen. Wenn dieser Wert weggelassen wird, werden Ereignisse aus allen Namespaces berücksichtigt (sofern von RBAC zugelassen).
  • resourceName (Zeichenfolge): Der Name einer bestimmten Ressource (z. B. ein Pod-Name), nach der Ereignisse gefiltert werden sollen.
  • resourceKind (Zeichenfolge): Die Art der spezifischen Ressource (z. B. „Pod“), wenn resourceName angegeben ist.

Beispiel (Namespace-Ereignisse):

{ "jsonrpc": "2.0", "id": 1, "method": "getEvents", "params": { "arguments": { "namespace": "default" } } }

Beispiel (Ressourcenereignisse):

{ "jsonrpc": "2.0", "id": 1, "method": "getEvents", "params": { "arguments": { "namespace": "production", "resourceName": "my-app-pod-12345", "resourceKind": "Pod" } } }
9. createorUpdateResource

Erstellt eine neue Ressource im Kubernetes-Cluster aus einem YAML- oder JSON-Manifest.

Parameter:

  • manifest (Zeichenfolge, erforderlich): Das YAML- oder JSON-Manifest der zu erstellenden Ressource.
  • namespace (Zeichenfolge, optional): Der Namespace, in dem die Ressource erstellt werden soll. Wenn das Manifest einen Namespace enthält, kann dieser Parameter weggelassen oder zum Überschreiben verwendet werden (das Verhalten hängt möglicherweise von der Serverimplementierung ab).

Beispiel:

{ "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" } } }

Entwicklung

Projektstruktur

. ├── 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

Neue Tools hinzufügen

So fügen Sie ein neues Werkzeug hinzu:

  1. Erstellen Sie eine neue Tool-Definitionsfunktion (z. B. MyNewTool() mcp.Tool ) in handlers/handlers.go
  2. Implementieren Sie die Tool-Handler-Funktion (z. B. MyNewHandler(client *k8s.Client) func(...) ) in handlers/handlers.go
  3. Registrieren Sie das Tool und seinen Handler in main.go mit s.AddTool()

Beitragen

Beiträge sind willkommen! Weitere Informationen zur Mitwirkung an diesem Projekt finden Sie unter CONTRIBUTING.md .

Lizenz

gholizade.net@gmail.com

Dieses Projekt ist unter der MIT-Lizenz lizenziert – Einzelheiten finden Sie in der Datei 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.

Ein Kubernetes Model Context Protocol (MCP)-Server, der Tools für die Interaktion mit Kubernetes-Clustern über eine standardisierte Schnittstelle bereitstellt.

  1. Merkmale
    1. Voraussetzungen
      1. Installation
        1. Verwendung
          1. Starten des Servers
          2. Verfügbare Tools
        2. Entwicklung
          1. Projektstruktur
          2. Neue Tools hinzufügen
        3. Beitragen
          1. Lizenz

            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