install-rhel.shโข6.72 kB
#!/bin/bash
# MCP ADR Analysis Server - RHEL Installation Script
# Handles RHEL 9/10 specific issues with npm global installations and PATH
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
echo "๐ฏ MCP ADR Analysis Server - RHEL Installation"
echo "============================================="
# Check if we're on RHEL
if [ ! -f /etc/redhat-release ]; then
echo "โ This script is designed for RHEL systems"
echo "For other systems, use: npm install -g mcp-adr-analysis-server"
exit 1
fi
RHEL_VERSION=$(cat /etc/redhat-release)
echo "๐ Detected: $RHEL_VERSION"
# Check Node.js version
if ! command -v node >/dev/null 2>&1; then
echo "โ Node.js is not installed"
echo "Install Node.js first:"
echo " sudo dnf module install nodejs:20/common"
exit 1
fi
NODE_VERSION=$(node --version)
echo "โ
Node.js: $NODE_VERSION"
# Check npm version
if ! command -v npm >/dev/null 2>&1; then
echo "โ npm is not installed"
exit 1
fi
NPM_VERSION=$(npm --version)
echo "โ
npm: $NPM_VERSION"
# RHEL-specific npm configuration
echo ""
echo "๐ง Configuring npm for RHEL..."
# Set npm prefix to user directory to avoid permission issues
NPM_PREFIX="$HOME/.npm-global"
mkdir -p "$NPM_PREFIX"
echo "Setting npm prefix to: $NPM_PREFIX"
npm config set prefix "$NPM_PREFIX"
# Add npm global bin to PATH if not already there
NPM_BIN_PATH="$NPM_PREFIX/bin"
if [[ ":$PATH:" != *":$NPM_BIN_PATH:"* ]]; then
echo "Adding npm global bin to PATH"
# Add to current session
export PATH="$NPM_BIN_PATH:$PATH"
# Add to bashrc for future sessions
if ! grep -q "export PATH.*npm-global/bin" ~/.bashrc 2>/dev/null; then
echo "" >> ~/.bashrc
echo "# Add npm global bin to PATH (added by MCP ADR Analysis Server installer)" >> ~/.bashrc
echo "export PATH=\"$NPM_BIN_PATH:\$PATH\"" >> ~/.bashrc
echo "โ
Added npm global bin to ~/.bashrc"
else
echo "โ
npm global bin already in ~/.bashrc"
fi
else
echo "โ
npm global bin already in PATH"
fi
echo ""
echo "๐ฆ Installing MCP ADR Analysis Server..."
# Try global installation first
if npm install -g mcp-adr-analysis-server; then
echo "โ
Global installation successful"
# Verify binary exists and is executable
BINARY_PATH="$NPM_BIN_PATH/mcp-adr-analysis-server"
if [ -f "$BINARY_PATH" ] && [ -x "$BINARY_PATH" ]; then
echo "โ
Binary installed and executable at: $BINARY_PATH"
else
echo "โ ๏ธ Binary not found or not executable, checking alternatives..."
# Look for the binary in node_modules
GLOBAL_NODE_MODULES="$(npm root -g)"
ALT_BINARY="$GLOBAL_NODE_MODULES/mcp-adr-analysis-server/dist/src/index.js"
if [ -f "$ALT_BINARY" ]; then
echo "Found binary at: $ALT_BINARY"
# Create symlink
ln -sf "$ALT_BINARY" "$BINARY_PATH"
chmod +x "$BINARY_PATH"
echo "โ
Created symlink and made executable"
fi
fi
else
echo "โ Global installation failed, trying alternative approach..."
# Alternative: Install locally and create wrapper script
echo "Installing locally..."
cd "$PROJECT_DIR"
npm install
npm run build
# Create wrapper script
WRAPPER_SCRIPT="$NPM_BIN_PATH/mcp-adr-analysis-server"
mkdir -p "$(dirname "$WRAPPER_SCRIPT")"
cat > "$WRAPPER_SCRIPT" << 'EOF'
#!/bin/bash
# MCP ADR Analysis Server wrapper script for RHEL
# Try to use global installation first
if command -v node >/dev/null 2>&1; then
# Check if we can find the package
GLOBAL_MODULES="$(npm root -g 2>/dev/null)"
if [ -f "$GLOBAL_MODULES/mcp-adr-analysis-server/dist/src/index.js" ]; then
exec node "$GLOBAL_MODULES/mcp-adr-analysis-server/dist/src/index.js" "$@"
fi
# Try npx as fallback
if command -v npx >/dev/null 2>&1; then
exec npx mcp-adr-analysis-server "$@"
fi
# Try local installation
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_BINARY="$SCRIPT_DIR/../mcp-adr-analysis-server/dist/src/index.js"
if [ -f "$PROJECT_BINARY" ]; then
exec node "$PROJECT_BINARY" "$@"
fi
fi
echo "โ MCP ADR Analysis Server not found"
echo "Try running: npm install -g mcp-adr-analysis-server"
exit 1
EOF
chmod +x "$WRAPPER_SCRIPT"
echo "โ
Created wrapper script at: $WRAPPER_SCRIPT"
fi
echo ""
echo "๐งช Testing installation..."
# Test the binary
if command -v mcp-adr-analysis-server >/dev/null 2>&1; then
echo "โ
Binary found in PATH"
# Test version
if mcp-adr-analysis-server --version >/dev/null 2>&1; then
VERSION=$(mcp-adr-analysis-server --version)
echo "โ
$VERSION"
else
echo "โ ๏ธ Binary found but version check failed"
fi
# Test health check
if mcp-adr-analysis-server --test >/dev/null 2>&1; then
echo "โ
Health check passed"
else
echo "โ ๏ธ Health check failed"
fi
else
echo "โ Binary not found in PATH"
echo "You may need to restart your terminal or run: source ~/.bashrc"
fi
echo ""
echo "๐ Installation completed!"
echo ""
echo "๐ MCP Configuration for RHEL:"
echo "Add this to your Claude Desktop config:"
echo ""
echo "{"
echo " \"mcpServers\": {"
echo " \"adr-analysis\": {"
echo " \"command\": \"mcp-adr-analysis-server\","
echo " \"env\": {"
echo " \"PROJECT_PATH\": \"/path/to/your/project\","
echo " \"OPENROUTER_API_KEY\": \"your_openrouter_api_key_here\","
echo " \"EXECUTION_MODE\": \"full\","
echo " \"AI_MODEL\": \"anthropic/claude-3-sonnet\","
echo " \"ADR_DIRECTORY\": \"docs/adrs\","
echo " \"LOG_LEVEL\": \"ERROR\""
echo " }"
echo " }"
echo " }"
echo "}"
echo ""
echo "๐จ RHEL Alternative (if command still not found):"
echo "{"
echo " \"mcpServers\": {"
echo " \"adr-analysis\": {"
echo " \"command\": \"npx\","
echo " \"args\": [\"mcp-adr-analysis-server\"],"
echo " \"env\": {"
echo " \"PROJECT_PATH\": \"/path/to/your/project\","
echo " \"OPENROUTER_API_KEY\": \"your_openrouter_api_key_here\","
echo " \"EXECUTION_MODE\": \"full\","
echo " \"AI_MODEL\": \"anthropic/claude-3-sonnet\","
echo " \"ADR_DIRECTORY\": \"docs/adrs\","
echo " \"LOG_LEVEL\": \"ERROR\""
echo " }"
echo " }"
echo " }"
echo "}"
echo ""
echo "๐ก Troubleshooting:"
echo "- If command not found: source ~/.bashrc or restart terminal"
echo "- If still issues: use the npx configuration above"
echo "- For debugging: run with LOG_LEVEL=DEBUG"