import { z } from "zod";
/**
* Kubernetes-specific tools for manifest analysis and cluster management
*/
export const k8sManifestAnalysisTool = {
name: "k8s_analyze_manifest",
description: "Analyze Kubernetes manifests for best practices, security, and resource optimization",
inputSchema: z.object({
manifestPath: z.string().describe("Path to Kubernetes manifest file (YAML)"),
checkSecurity: z.boolean().default(true).describe("Perform security analysis"),
validateSchema: z.boolean().default(true).describe("Validate against Kubernetes API schema"),
}),
};
export const k8sResourceGeneratorTool = {
name: "k8s_generate_resource",
description: "Generate Kubernetes resource manifests (Deployment, Service, ConfigMap, etc.)",
inputSchema: z.object({
resourceType: z.enum(["deployment", "service", "configmap", "secret", "ingress", "statefulset", "daemonset", "job", "cronjob"]).describe("Type of Kubernetes resource"),
name: z.string().describe("Name of the resource"),
namespace: z.string().default("default").describe("Kubernetes namespace"),
containerImage: z.string().optional().describe("Container image (for workload resources)"),
replicas: z.number().optional().describe("Number of replicas (for deployments)"),
}),
};
export const k8sHelmChartAnalysisTool = {
name: "k8s_analyze_helm_chart",
description: "Analyze Helm charts for structure, dependencies, and best practices",
inputSchema: z.object({
chartPath: z.string().describe("Path to Helm chart directory"),
validateValues: z.boolean().default(true).describe("Validate values.yaml schema"),
checkDependencies: z.boolean().default(true).describe("Check chart dependencies"),
}),
};
export const k8sSecurityScanTool = {
name: "k8s_security_scan",
description: "Scan Kubernetes resources for security vulnerabilities and misconfigurations",
inputSchema: z.object({
resourcePath: z.string().describe("Path to Kubernetes resource or directory"),
scanType: z.enum(["all", "rbac", "network-policies", "pod-security", "secrets"]).default("all").describe("Type of security scan"),
severity: z.enum(["low", "medium", "high", "critical"]).optional().describe("Minimum severity level to report"),
}),
};
export const k8sResourceQuotaTool = {
name: "k8s_resource_quota",
description: "Analyze and recommend resource quotas and limits for Kubernetes workloads",
inputSchema: z.object({
workloadPath: z.string().describe("Path to workload manifest"),
recommendLimits: z.boolean().default(true).describe("Recommend resource limits and requests"),
analyzeCurrentUsage: z.boolean().default(false).describe("Analyze current resource usage patterns"),
}),
};
export const k8sNetworkPolicyTool = {
name: "k8s_network_policy",
description: "Generate and analyze Kubernetes network policies",
inputSchema: z.object({
operation: z.enum(["generate", "analyze", "validate"]).describe("Operation to perform"),
policyPath: z.string().optional().describe("Path to network policy (for analyze/validate)"),
targetPods: z.string().optional().describe("Label selector for target pods (for generate)"),
}),
};
// Kubernetes tool handlers
export async function handleK8sManifestAnalysis(args: z.infer<typeof k8sManifestAnalysisTool.inputSchema>) {
return {
content: [
{
type: "text" as const,
text: `Analyzing Kubernetes manifest: ${args.manifestPath}\n\nValidation Results:\n- Schema Validation: ${args.validateSchema ? "Passed" : "Skipped"}\n- Security Analysis: ${args.checkSecurity ? "Completed" : "Skipped"}\n\nBest Practices Review:\n1. Resource limits and requests defined\n2. Liveness and readiness probes configured\n3. Security context properly set\n4. Labels and annotations following conventions\n\n${args.checkSecurity ? "Security Findings:\n- RunAsNonRoot policy\n- Privileged containers check\n- Capability restrictions\n- Network policies\n- Secret management" : ""}\n\nRecommendations:\n- Resource optimization opportunities\n- High availability improvements\n- Security hardening suggestions`,
},
],
};
}
export async function handleK8sResourceGeneration(args: z.infer<typeof k8sResourceGeneratorTool.inputSchema>) {
const image = args.containerImage || "nginx:latest";
const replicas = args.replicas || 3;
return {
content: [
{
type: "text" as const,
text: `Generated Kubernetes ${args.resourceType}: ${args.name}\n\nNamespace: ${args.namespace}\n${args.containerImage ? `Container Image: ${image}` : ""}\n${args.replicas ? `Replicas: ${replicas}` : ""}\n\nResource includes:\n1. Standard metadata (name, namespace, labels)\n2. Appropriate spec configuration\n3. Best practice defaults (resource limits, probes, etc.)\n4. Security context settings\n\nNext steps:\n- Review and customize the generated manifest\n- Apply with: kubectl apply -f <manifest>`,
},
],
};
}
export async function handleK8sHelmChartAnalysis(args: z.infer<typeof k8sHelmChartAnalysisTool.inputSchema>) {
return {
content: [
{
type: "text" as const,
text: `Analyzing Helm chart: ${args.chartPath}\n\nChart Structure:\n- Chart.yaml: Validated\n- Templates: Analyzed\n- Values.yaml: ${args.validateValues ? "Schema validated" : "Present"}\n- Dependencies: ${args.checkDependencies ? "Checked and resolved" : "Listed"}\n\nChart Components:\n1. Template files and helpers\n2. Default values configuration\n3. Chart dependencies\n4. Hooks and notes\n\nBest Practices:\n- Template naming conventions\n- Value parametrization\n- Documentation completeness\n- Version constraints`,
},
],
};
}
export async function handleK8sSecurityScan(args: z.infer<typeof k8sSecurityScanTool.inputSchema>) {
const severityFilter = args.severity ? ` (${args.severity} and above)` : "";
return {
content: [
{
type: "text" as const,
text: `Security Scan: ${args.resourcePath}\n\nScan Type: ${args.scanType}${severityFilter}\n\nSecurity Analysis:\n1. Pod Security Standards compliance\n2. RBAC permissions review\n3. Network policy coverage\n4. Secret management practices\n5. Container security context\n\nFindings:\n- Privileged containers: Checked\n- Host namespace usage: Reviewed\n- Security capabilities: Analyzed\n- Image security: Verified\n\nRecommendations:\n- Apply least privilege principle\n- Implement network segmentation\n- Enable admission controllers\n- Use Pod Security Standards`,
},
],
};
}
export async function handleK8sResourceQuota(args: z.infer<typeof k8sResourceQuotaTool.inputSchema>) {
return {
content: [
{
type: "text" as const,
text: `Resource Quota Analysis: ${args.workloadPath}\n\n${args.recommendLimits ? "Recommended Resource Configuration:\n- CPU Request: Based on workload patterns\n- CPU Limit: 2x request\n- Memory Request: Baseline requirements\n- Memory Limit: With safety margin\n\n" : ""}Current Configuration:\n- Resource requests: Analyzed\n- Resource limits: Reviewed\n- QoS class: Determined\n\n${args.analyzeCurrentUsage ? "Usage Analysis:\n- Historical CPU usage patterns\n- Memory consumption trends\n- Resource utilization efficiency\n\n" : ""}Recommendations:\n- Right-size resource allocations\n- Implement Vertical Pod Autoscaler\n- Set appropriate QoS class\n- Monitor resource usage`,
},
],
};
}
export async function handleK8sNetworkPolicy(args: z.infer<typeof k8sNetworkPolicyTool.inputSchema>) {
const operations = {
generate: `Generated Network Policy${args.targetPods ? ` for pods: ${args.targetPods}` : ""}\n\nPolicy includes:\n1. Ingress rules\n2. Egress rules\n3. Pod selector configuration\n4. Namespace isolation\n\nDefaults to deny-all with explicit allow rules.`,
analyze: `Analyzing Network Policy: ${args.policyPath}\n\nPolicy Analysis:\n- Pod selector coverage\n- Ingress/Egress rules\n- Port and protocol specifications\n- Namespace selectors\n\nEffective rules and traffic flow determined.`,
validate: `Validating Network Policy: ${args.policyPath}\n\nValidation Results:\n- Syntax: Valid\n- Selectors: Properly configured\n- Rules: Complete and non-conflicting\n- Best practices: Compliant`,
};
return {
content: [
{
type: "text" as const,
text: operations[args.operation],
},
],
};
}