This commit establishes the foundation for the homelab GitOps repository: - Created layered architecture (infrastructure/platform/apps) - Added MCP servers umbrella chart with SOPS-encrypted secrets - Configured Flux Kustomizations for infrastructure and platform layers - Set up SOPS + Age for secrets management - Added .gitignore and documentation MCP servers include: - Gateway with auth (API keys in encrypted secrets) - n8n MCP (workflow automation) - Playwright MCP (browser automation) - Kubernetes MCP (kubectl operations) - GitHub MCP (repository management) - Gitea MCP (self-hosted git) - SQLite MCP (database operations) - Filesystem MCP (file operations) - Fetch MCP (HTTP requests) - Memory MCP (shared memory/state) All secrets are encrypted with SOPS using Age encryption.
271 lines
7.2 KiB
YAML
271 lines
7.2 KiB
YAML
# MCP Umbrella Chart - Central Configuration
|
|
# Secrets are managed in secrets.enc.yaml (SOPS-encrypted)
|
|
|
|
# Global configuration shared across all MCP servers
|
|
global:
|
|
namespace: mcp
|
|
commonLabels:
|
|
app.kubernetes.io/part-of: mcp-ecosystem
|
|
managed-by: mcp-umbrella
|
|
imagePullPolicy: IfNotPresent
|
|
securityContext:
|
|
runAsNonRoot: true
|
|
runAsUser: 1000
|
|
fsGroup: 1000
|
|
|
|
# =============================================================================
|
|
# MCP Gateway Configuration
|
|
# =============================================================================
|
|
mcp-gateway:
|
|
enabled: true
|
|
replicaCount: 1
|
|
|
|
service:
|
|
type: LoadBalancer
|
|
port: 3000
|
|
|
|
ingress:
|
|
enabled: false
|
|
className: "nginx"
|
|
hosts:
|
|
- host: mcp.caffeinetux.com
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
tls:
|
|
- secretName: mcp-gateway-tls
|
|
hosts:
|
|
- mcp.caffeinetux.com
|
|
|
|
gateway:
|
|
auth:
|
|
enabled: true
|
|
# API keys loaded from Secret: mcp-gateway-api-keys
|
|
existingSecret: mcp-gateway-api-keys
|
|
|
|
logLevel: "info"
|
|
timeout: 30000
|
|
|
|
servers:
|
|
n8n-mcp:
|
|
host: "n8n-mcp"
|
|
port: 3001
|
|
playwright-mcp:
|
|
host: "playwright-mcp"
|
|
port: 3002
|
|
kubernetes-mcp:
|
|
host: "kubernetes-mcp"
|
|
port: 3003
|
|
github-mcp:
|
|
host: "github-mcp"
|
|
port: 3004
|
|
postgresql-mcp:
|
|
host: "postgresql-mcp"
|
|
port: 3005
|
|
sqlite-mcp:
|
|
host: "sqlite-mcp"
|
|
port: 3006
|
|
prometheus-mcp:
|
|
host: "prometheus-mcp"
|
|
port: 3007
|
|
slack-mcp:
|
|
host: "slack-mcp"
|
|
port: 3008
|
|
s3-mcp:
|
|
host: "s3-mcp"
|
|
port: 3009
|
|
filesystem-mcp:
|
|
host: "filesystem-mcp"
|
|
port: 3010
|
|
puppeteer-mcp:
|
|
host: "puppeteer-mcp"
|
|
port: 3011
|
|
fetch-mcp:
|
|
host: "fetch-mcp"
|
|
port: 3012
|
|
memory-mcp:
|
|
host: "memory-mcp"
|
|
port: 3013
|
|
gitea-mcp:
|
|
host: "gitea-mcp"
|
|
port: 3014
|
|
|
|
autoscaling:
|
|
enabled: true
|
|
minReplicas: 1
|
|
maxReplicas: 3
|
|
targetCPUUtilizationPercentage: 80
|
|
|
|
# =============================================================================
|
|
# n8n MCP Server Configuration
|
|
# =============================================================================
|
|
n8n-mcp:
|
|
enabled: true
|
|
n8nMCP:
|
|
n8n:
|
|
url: "http://n8n.n8n.svc.cluster.local:5678"
|
|
# API key loaded from Secret: n8n-mcp-api-key
|
|
existingSecret: n8n-mcp-api-key
|
|
mode: "full"
|
|
logLevel: "info"
|
|
|
|
# =============================================================================
|
|
# Playwright MCP Server Configuration
|
|
# =============================================================================
|
|
playwright-mcp:
|
|
enabled: true
|
|
playwrightMCP:
|
|
browsers:
|
|
- chromium
|
|
- firefox
|
|
- webkit
|
|
headless: true
|
|
timeout: 30000
|
|
persistence:
|
|
enabled: true
|
|
size: 10Gi
|
|
storageClassName: nfs-client
|
|
resources:
|
|
limits:
|
|
cpu: 1000m
|
|
memory: 2Gi
|
|
requests:
|
|
cpu: 200m
|
|
memory: 512Mi
|
|
|
|
# =============================================================================
|
|
# Kubernetes MCP Server Configuration
|
|
# =============================================================================
|
|
kubernetes-mcp:
|
|
enabled: true
|
|
rbac:
|
|
create: true
|
|
rules:
|
|
- apiGroups: [""]
|
|
resources: ["pods", "services", "configmaps", "secrets"]
|
|
verbs: ["get", "list", "watch", "create", "update", "delete"]
|
|
- apiGroups: ["apps"]
|
|
resources: ["deployments", "statefulsets", "daemonsets"]
|
|
verbs: ["get", "list", "watch", "create", "update", "delete"]
|
|
|
|
# =============================================================================
|
|
# GitHub MCP Server Configuration
|
|
# =============================================================================
|
|
github-mcp:
|
|
enabled: true
|
|
github:
|
|
# Token and owner loaded from Secret: github-mcp-token
|
|
existingSecret: github-mcp-token
|
|
|
|
# =============================================================================
|
|
# PostgreSQL MCP Server Configuration
|
|
# =============================================================================
|
|
postgresql-mcp:
|
|
enabled: false
|
|
postgresql:
|
|
host: "postgresql.default.svc.cluster.local"
|
|
port: 5432
|
|
database: "postgres"
|
|
user: "postgres"
|
|
|
|
# =============================================================================
|
|
# SQLite MCP Server Configuration
|
|
# =============================================================================
|
|
sqlite-mcp:
|
|
enabled: true
|
|
sqlite:
|
|
databasePath: "/data/sqlite.db"
|
|
persistence:
|
|
enabled: true
|
|
size: 1Gi
|
|
|
|
# =============================================================================
|
|
# Prometheus MCP Server Configuration
|
|
# =============================================================================
|
|
prometheus-mcp:
|
|
enabled: false
|
|
prometheus:
|
|
url: "http://prometheus-server.prometheus.svc.cluster.local"
|
|
|
|
# =============================================================================
|
|
# Slack MCP Server Configuration
|
|
# =============================================================================
|
|
slack-mcp:
|
|
enabled: false
|
|
|
|
# =============================================================================
|
|
# S3 MCP Server Configuration
|
|
# =============================================================================
|
|
s3-mcp:
|
|
enabled: false
|
|
s3:
|
|
region: "us-east-1"
|
|
|
|
# =============================================================================
|
|
# Filesystem MCP Server Configuration
|
|
# =============================================================================
|
|
filesystem-mcp:
|
|
enabled: true
|
|
filesystem:
|
|
rootPath: "/data"
|
|
persistence:
|
|
enabled: true
|
|
size: 5Gi
|
|
|
|
# =============================================================================
|
|
# Puppeteer MCP Server Configuration
|
|
# =============================================================================
|
|
puppeteer-mcp:
|
|
enabled: false
|
|
puppeteer:
|
|
headless: true
|
|
timeout: 30000
|
|
persistence:
|
|
enabled: true
|
|
downloadSize: 5Gi
|
|
screenshotSize: 5Gi
|
|
resources:
|
|
limits:
|
|
cpu: 1000m
|
|
memory: 2Gi
|
|
requests:
|
|
cpu: 500m
|
|
memory: 1Gi
|
|
|
|
# =============================================================================
|
|
# Fetch MCP Server Configuration
|
|
# =============================================================================
|
|
fetch-mcp:
|
|
enabled: true
|
|
fetch:
|
|
userAgent: "MCP-Fetch-Server/1.0"
|
|
timeout: 30000
|
|
|
|
# =============================================================================
|
|
# Memory MCP Server Configuration
|
|
# =============================================================================
|
|
memory-mcp:
|
|
enabled: true
|
|
storage:
|
|
backend: "redis"
|
|
redis:
|
|
host: "redis.default.svc.cluster.local"
|
|
port: 6379
|
|
db: 0
|
|
resources:
|
|
limits:
|
|
cpu: 200m
|
|
memory: 512Mi
|
|
requests:
|
|
cpu: 100m
|
|
memory: 256Mi
|
|
|
|
# =============================================================================
|
|
# Gitea MCP Server Configuration
|
|
# =============================================================================
|
|
gitea-mcp:
|
|
enabled: true
|
|
gitea:
|
|
# Token, owner, and URL loaded from Secret: gitea-mcp-token
|
|
existingSecret: gitea-mcp-token
|