AkurAI Build
Menu

Public repository / 58558732228cea9b646049555021e899ee300f35

AkurAI-PassVault / scripts/validate.sh

Latest change 2ec23d99ad43671c32257c5f6f9e58d12ef8d7bf - feat: add standardized /api/health endpoint to MCP server by Claude Code

#!/usr/bin/env bash
# scripts/validate.sh — Post-deploy validation for AkurAI-PassVault
# PassVault is an MCP-over-HTTPS server (not Framework HTTP app).
set -euo pipefail

: "${DOMAIN:=akurai-passvault.olibuijr.com}"
: "${PORT:=8102}"
: "${APP_NAME:=akurai-passvault}"
RED='\033[0;31m'; GRN='\033[0;32m'; NC='\033[0m'
pass=0; fail=0
pass_() { printf "  ${GRN}PASS${NC} %s\n" "$*"; ((pass++)); }
fail_() { printf "  ${RED}FAIL${NC} %s\n" "$*"; ((fail++)); }

echo "=== Post-deploy validation: ${APP_NAME} ==="

systemctl is-active --quiet "${APP_NAME}.service" 2>/dev/null && pass_ "systemd active" || fail_ "systemd not active"
curl -fsS --max-time 5 "http://127.0.0.1:${PORT}/" > /dev/null 2>&1 && pass_ "loopback reachable" || fail_ "loopback unreachable"
curl -fsS --max-time 10 "https://${DOMAIN}/" > /dev/null 2>&1 && pass_ "public reachable" || fail_ "public unreachable"

# MCP tools/list smoke test
TOKEN=$(sudo grep "^AKURAI_PASSVAULT_TOKEN=" /etc/akurai-passvault/passvault.env 2>/dev/null | cut -d= -f2- || echo "")
if [ -n "$TOKEN" ]; then
  MCP=$(curl -fsS --max-time 10 -X POST "https://${DOMAIN}/" \
    -H "Authorization: Bearer ${TOKEN}" \
    -H "Content-Type: application/json" \
    -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' 2>/dev/null || echo "")
  echo "$MCP" | python3 -c "import json,sys; d=json.load(sys.stdin); assert 'result' in d" 2>/dev/null && pass_ "MCP tools/list OK" || fail_ "MCP tools/list failed"
else
  fail_ "MCP token not found — cannot verify MCP"
fi

echo "━━━━━━━━━━━━━━━━━━━━━━━━"
echo -e "${GRN}Pass: $pass${NC}  ${RED}Fail: $fail${NC}"
[ "$fail" -eq 0 ] || exit 1