#!/usr/bin/env bash # PostgreSQL MCP トンネル + サーバー起動スクリプト # 使い方: .mcp.json から自動呼び出し # 認証情報は .mcp.json (gitignore済み) に記載 set -e VPS_HOST="root@85.131.245.239" VPS_KEY="$HOME/.ssh/soar-enrich-openssh.pem" TUNNEL_PORT=15432 CONTAINER="posimai-db-1" # Docker コンテナ IP を動的取得(コンテナ再作成時も対応) DOCKER_IP=$(ssh -i "$VPS_KEY" -o BatchMode=yes -o ConnectTimeout=10 "$VPS_HOST" \ "docker inspect ${CONTAINER} --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'" 2>/dev/null) if [ -z "$DOCKER_IP" ]; then echo "[MCP] ERROR: ${CONTAINER} の IP 取得失敗。VPS/コンテナを確認してください。" >&2 exit 1 fi echo "[MCP] ${CONTAINER} IP: ${DOCKER_IP}" >&2 # 既存トンネルの確認 if ! ss -tlnp 2>/dev/null | grep -q ":$TUNNEL_PORT" && \ ! netstat -an 2>/dev/null | grep -q "127.0.0.1:$TUNNEL_PORT"; then echo "[MCP] SSH トンネル起動中..." >&2 ssh -i "$VPS_KEY" \ -o BatchMode=yes \ -o ExitOnForwardFailure=yes \ -o ServerAliveInterval=30 \ -fN \ -L "${TUNNEL_PORT}:${DOCKER_IP}:5432" \ "$VPS_HOST" sleep 1 echo "[MCP] トンネル起動完了 localhost:${TUNNEL_PORT}" >&2 else echo "[MCP] トンネル既に起動済み localhost:${TUNNEL_PORT}" >&2 fi # MCP サーバー起動 (接続文字列は .mcp.json の引数から渡される) exec "$@"