UNPKG

mcp-server-kubernetes

Version:

MCP server for interacting with Kubernetes clusters via kubectl

74 lines (73 loc) 2.44 kB
import { execSync } from "child_process"; import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js"; export const kubectlScaleSchema = { name: "kubectl_scale", description: "Scale a Kubernetes deployment", inputSchema: { type: "object", properties: { name: { type: "string", description: "Name of the deployment to scale" }, namespace: { type: "string", description: "Namespace of the deployment", default: "default" }, replicas: { type: "number", description: "Number of replicas to scale to" }, resourceType: { type: "string", description: "Resource type to scale (deployment, replicaset, statefulset)", default: "deployment" } }, required: ["name", "replicas"] } }; export async function kubectlScale(k8sManager, input) { try { const namespace = input.namespace || "default"; const resourceType = input.resourceType || "deployment"; // Build the kubectl scale command let command = `kubectl scale ${resourceType} ${input.name} --replicas=${input.replicas} --namespace=${namespace}`; // Execute the command try { const result = execSync(command, { encoding: "utf8", env: { ...process.env, KUBECONFIG: process.env.KUBECONFIG } }); return { content: [ { success: true, message: `Scaled ${resourceType} ${input.name} to ${input.replicas} replicas` } ] }; } catch (error) { throw new McpError(ErrorCode.InternalError, `Failed to scale ${resourceType}: ${error.message}`); } } catch (error) { if (error instanceof McpError) { return { content: [ { success: false, message: error.message } ] }; } return { content: [ { success: false, message: `Failed to scale resource: ${error.message}` } ] }; } }