import { z } from "zod";
/**
* Deployment Tools - Infrastructure and Server Configuration
*/
// ============================================
// Generate Kubernetes Manifest
// ============================================
export const generateK8sManifestSchema = {
name: "generate_k8s_manifest",
description: "Generates Kubernetes manifests (Deployment, Service, Ingress)",
inputSchema: z.object({
name: z.string().describe("Application name"),
image: z.string().describe("Docker image"),
port: z.number().default(80),
replicas: z.number().default(1),
namespace: z.string().default("default")
})
};
export function generateK8sManifestHandler(args: { name: string; image: string; port: number; replicas: number; namespace: string }) {
const { name, image, port, replicas, namespace } = args;
const manifest = `apiVersion: apps/v1
kind: Deployment
metadata:
name: ${name}
namespace: ${namespace}
spec:
replicas: ${replicas}
selector:
matchLabels:
app: ${name}
template:
metadata:
labels:
app: ${name}
spec:
containers:
- name: ${name}
image: ${image}
ports:
- containerPort: ${port}
---
apiVersion: v1
kind: Service
metadata:
name: ${name}-svc
namespace: ${namespace}
spec:
selector:
app: ${name}
ports:
- protocol: TCP
port: 80
targetPort: ${port}
type: ClusterIP`;
return {
content: [{
type: "text",
text: `# Kubernetes Manifest\n\n\`\`\`yaml\n${manifest}\n\`\`\``
}]
};
}
// ============================================
// Generate Terraform Config
// ============================================
export const generateTerraformConfigSchema = {
name: "generate_terraform_config",
description: "Generates basic Terraform configuration for cloud providers",
inputSchema: z.object({
provider: z.enum(["aws", "gcp", "azure"]).describe("Cloud provider"),
resources: z.array(z.string()).describe("List of resources (e.g. 'vm', 'bucket', 'db')"),
region: z.string().default("us-east-1")
})
};
export function generateTerraformConfigHandler(args: { provider: string; resources: string[]; region: string }) {
const { provider, resources, region } = args;
let content = `provider "${provider}" {\n region = "${region}"\n}\n\n`;
if (provider === "aws") {
if (resources.some(r => r.includes("bucket"))) {
content += `resource "aws_s3_bucket" "main" {\n bucket = "my-app-bucket"\n acl = "private"\n}\n`;
}
if (resources.some(r => r.includes("vm"))) {
content += `resource "aws_instance" "web" {\n ami = "ami-12345678"\n instance_type = "t2.micro"\n}\n`;
}
} else {
content += `# TODO: Add templates for ${provider} resources: ${resources.join(", ")}`;
}
return {
content: [{
type: "text",
text: `# Terraform Config (${provider})\n\n\`\`\`hcl\n${content}\n\`\`\``
}]
};
}
// ============================================
// Generate Nginx Config
// ============================================
export const generateNginxConfigSchema = {
name: "generate_nginx_config",
description: "Generates Nginx configuration for reverse proxy or static site",
inputSchema: z.object({
domain: z.string().describe("Domain name"),
proxyTo: z.string().optional().describe("Upstream URL (e.g. http://localhost:3000)"),
rootPath: z.string().optional().describe("Root path for static files")
})
};
export function generateNginxConfigHandler(args: { domain: string; proxyTo?: string; rootPath?: string }) {
const { domain, proxyTo, rootPath } = args;
const config = `server {
listen 80;
server_name ${domain};
${rootPath ? `root ${rootPath};\n index index.html;` : ''}
location / {
${proxyTo ? `proxy_pass ${proxyTo};
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;` : 'try_files $uri $uri/ =404;'}
}
}`;
return {
content: [{
type: "text",
text: `# Nginx Config\n\n\`\`\`nginx\n${config}\n\`\`\``
}]
};
}
// Export all
export const deploymentTools = {
generateK8sManifestSchema, generateK8sManifestHandler,
generateTerraformConfigSchema, generateTerraformConfigHandler,
generateNginxConfigSchema, generateNginxConfigHandler
};