We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dhofheinz/mcp-comfyui-flux'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
setup-claude-code.sh•10.1 kB
#!/bin/bash
# Claude Code Setup Script for Docker Containers
# Configures and validates Claude Code installation
set -euo pipefail
IFS=$'\n\t'
# Configuration
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")
readonly PROJECT_NAME="${PROJECT_NAME:-mcp-comfyui-flux}"
# Colors
readonly GREEN='\033[0;32m'
readonly RED='\033[0;31m'
readonly YELLOW='\033[1;33m'
readonly BLUE='\033[0;34m'
readonly NC='\033[0m'
# Logging
log() {
local level="$1"
shift
local message="$*"
case "${level}" in
ERROR)
echo -e "${RED}[ERROR] ${message}${NC}" >&2
;;
WARN)
echo -e "${YELLOW}[WARN] ${message}${NC}"
;;
INFO)
echo -e "${GREEN}[INFO] ${message}${NC}"
;;
*)
echo "[${level}] ${message}"
;;
esac
}
# Check if running in Docker
check_docker_context() {
if [[ -f /.dockerenv ]]; then
log INFO "Running inside Docker container"
return 0
else
log INFO "Running on host system"
return 1
fi
}
# Verify Claude Code installation
verify_claude_code() {
log INFO "Verifying Claude Code installation..."
# Check if Claude Code is installed
if command -v claude &> /dev/null; then
local version
version=$(claude --version 2>/dev/null || echo "unknown")
log INFO "✓ Claude Code installed: ${version}"
# Run doctor check
if claude doctor &> /dev/null; then
log INFO "✓ Claude Code health check passed"
else
log WARN "Claude Code health check reported issues"
fi
return 0
else
log ERROR "Claude Code not found"
return 1
fi
}
# Install Claude Code (if not in container)
install_claude_code() {
log INFO "Installing Claude Code..."
# Check Node.js version
if ! command -v node &> /dev/null; then
log ERROR "Node.js not found. Please install Node.js 18+ first"
return 1
fi
local node_version
node_version=$(node --version | grep -oE '[0-9]+' | head -1)
if [[ ${node_version} -lt 18 ]]; then
log ERROR "Node.js version ${node_version} is below minimum required (18+)"
return 1
fi
# Install Claude Code
if npm install -g @anthropic-ai/claude-code; then
log INFO "Claude Code installed successfully"
return 0
else
log ERROR "Failed to install Claude Code"
return 1
fi
}
# Configure Claude Code for Docker usage
configure_for_docker() {
log INFO "Configuring Claude Code for Docker environment..."
# Set environment variables
export CLAUDE_CODE_DISABLE_TELEMETRY=1
export DISABLE_AUTOUPDATER=1
# Create config directory
local config_dir="${HOME}/.config/claude"
mkdir -p "${config_dir}"
# Create minimal config
cat > "${config_dir}/config.json" << EOF
{
"autoUpdates": false,
"telemetry": false,
"environment": "docker"
}
EOF
log INFO "Claude Code configured for Docker"
}
# Setup authentication
setup_authentication() {
log INFO "Setting up Claude Code authentication..."
# Check for API key in environment
if [[ -n "${ANTHROPIC_API_KEY:-}" ]]; then
log INFO "✓ Anthropic API key found in environment"
# Configure Claude Code to use API key
claude config set apiKey "${ANTHROPIC_API_KEY}" --global 2>/dev/null || true
return 0
else
log WARN "No Anthropic API key found"
log INFO "To authenticate Claude Code:"
log INFO " 1. Set ANTHROPIC_API_KEY in .env file"
log INFO " 2. Or run: docker exec -it ${PROJECT_NAME}-mcp-server-1 claude auth"
return 1
fi
}
# Test Claude Code in container
test_claude_in_container() {
local container="$1"
log INFO "Testing Claude Code in container: ${container}"
# Check if container is running
if ! docker ps | grep -q "${container}"; then
log ERROR "Container ${container} is not running"
return 1
fi
# Test Claude Code
if docker exec "${container}" claude --version &> /dev/null; then
log INFO "✓ Claude Code working in ${container}"
# Run doctor check
if docker exec "${container}" claude doctor &> /dev/null; then
log INFO "✓ Health check passed in ${container}"
else
log WARN "Health check reported issues in ${container}"
fi
return 0
else
log ERROR "Claude Code not working in ${container}"
return 1
fi
}
# Setup Claude Code in containers
setup_containers() {
log INFO "Setting up Claude Code in containers..."
# Use actual container names with project prefix
local containers=(
"${PROJECT_NAME}-mcp-server-1"
"${PROJECT_NAME}-comfyui-1"
)
local success=true
for container in "${containers[@]}"; do
if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then
if test_claude_in_container "${container}"; then
log INFO "✓ ${container} ready"
else
log WARN "Issues with ${container}"
success=false
fi
else
log WARN "Container ${container} not running"
fi
done
if [[ "${success}" == "true" ]]; then
log INFO "All containers configured successfully"
return 0
else
log WARN "Some containers had issues"
return 1
fi
}
# Interactive setup
interactive_setup() {
echo ""
echo -e "${BLUE}╔══════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ Claude Code Setup Wizard ║${NC}"
echo -e "${BLUE}╚══════════════════════════════════════════════════════════╝${NC}"
echo ""
# Check if we need API key
if [[ -z "${ANTHROPIC_API_KEY:-}" ]]; then
echo "Claude Code requires authentication to work."
echo ""
echo "Options:"
echo "1. Use Anthropic Console API key"
echo "2. Use Claude Pro/Max subscription"
echo "3. Skip (configure later)"
echo ""
read -p "Choose option (1-3): " -n 1 -r choice
echo
case "${choice}" in
1)
echo ""
echo "Get your API key from: https://console.anthropic.com"
read -sp "Enter your Anthropic API key: " api_key
echo
if [[ -n "${api_key}" ]]; then
# Add to .env file
echo "ANTHROPIC_API_KEY=${api_key}" >> "${PROJECT_ROOT}/.env"
export ANTHROPIC_API_KEY="${api_key}"
log INFO "API key saved to .env file"
fi
;;
2)
log INFO "To use Claude Pro/Max:"
log INFO "1. Run: docker exec -it ${PROJECT_NAME}-mcp-server-1 bash"
log INFO "2. Run: claude auth"
log INFO "3. Follow the authentication flow"
;;
3)
log INFO "Skipping authentication setup"
;;
esac
fi
}
# Show usage instructions
show_usage() {
echo ""
echo -e "${GREEN}Claude Code is now available in your containers!${NC}"
echo ""
echo "Usage examples:"
echo ""
echo "1. Use Claude Code in MCP server container:"
echo " docker exec -it ${PROJECT_NAME}-mcp-server-1 claude"
echo ""
echo "2. Use Claude Code in ComfyUI container:"
echo " docker exec -it ${PROJECT_NAME}-comfyui-1 claude"
echo ""
echo "3. Authenticate Claude Code:"
echo " docker exec -it ${PROJECT_NAME}-mcp-server-1 claude auth"
echo ""
echo "4. Check Claude Code status:"
echo " docker exec -it ${PROJECT_NAME}-mcp-server-1 claude doctor"
echo ""
echo "5. Work with your project:"
echo " docker exec -it ${PROJECT_NAME}-mcp-server-1 bash"
echo " cd /app"
echo " claude"
echo ""
}
# Main execution
main() {
log INFO "Starting Claude Code setup..."
# Check context
if check_docker_context; then
# Running in container
verify_claude_code || {
log ERROR "Claude Code not properly installed in container"
exit 1
}
configure_for_docker
setup_authentication || log WARN "Authentication not configured"
else
# Running on host
if ! docker ps &> /dev/null; then
log ERROR "Docker is not running"
exit 1
fi
# Check if containers are running
if ! docker ps --format '{{.Names}}' | grep -q "${PROJECT_NAME}"; then
log ERROR "Containers are not running. Run: docker-compose -p ${PROJECT_NAME} up -d"
exit 1
fi
# Interactive setup
interactive_setup
# Setup containers
setup_containers
# Show usage
show_usage
fi
log INFO "Claude Code setup completed"
}
# Handle arguments
case "${1:-}" in
--test)
# Test mode
verify_claude_code
;;
--auth)
# Authentication only
setup_authentication
;;
--help|-h)
cat << EOF
Usage: $0 [OPTIONS]
Options:
--test Test Claude Code installation
--auth Setup authentication only
--help Show this help message
Sets up Claude Code in Docker containers for MCP ComfyUI Flux.
Environment Variables:
PROJECT_NAME Docker project name (default: mcp-comfyui)
EOF
exit 0
;;
*)
main
;;
esac