#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$ROOT_DIR" if [[ ! -f .env ]]; then cp .env.example .env echo "Created .env from .env.example. Update secrets before production use." fi mkdir -p config if [[ ! -f config/kubeconfig ]]; then echo "No config/kubeconfig found. Create one or set KUBECONFIG_PATH in .env." fi echo "Pulling base images..." docker compose -f docker-compose.yaml -f docker-compose.mcp.yaml pull || true echo "Building custom MCP service images..." docker compose -f docker-compose.yaml -f docker-compose.mcp.yaml build mcp-filesystem mcp-k8s mcp-media echo "Starting full stack..." docker compose -f docker-compose.yaml -f docker-compose.mcp.yaml up -d echo "Waiting for Ollama to become available..." for _ in {1..30}; do if curl -sf http://localhost:11434/api/tags >/dev/null 2>&1; then break fi sleep 2 done MODEL_NAME="$(grep -E '^OLLAMA_DEFAULT_MODEL=' .env | cut -d'=' -f2- || true)" MODEL_NAME="${MODEL_NAME:-llama3.1:8b}" echo "Ensuring Ollama model is available: ${MODEL_NAME}" docker compose exec -T ollama ollama pull "$MODEL_NAME" || true echo echo "Stack is up." echo "Open WebUI: http://localhost:11435" echo "LiteLLM: http://localhost:4000" echo "MCPO: http://localhost:8001" echo "ContextForge (tools profile): http://localhost:8787"