# Development container for Python 3.13 Boilerplate project with Claude Code + MCP servers FROM python:3.13-slim # Install system dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ # Essential build tools build-essential \ gcc \ g++ \ make \ # Development utilities curl \ wget \ git \ vim \ nano \ jq \ tree \ htop \ unzip \ ca-certificates \ # Shell enhancements zsh \ # Networking tools net-tools \ iputils-ping \ # Process management procps \ # For MCP servers gnupg \ lsb-release \ software-properties-common \ # Clean up && rm -rf /var/lib/apt/lists/* # Install Node.js 20 (required for many MCP servers) RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ && apt-get update \ && apt-get install -y nodejs \ && rm -rf /var/lib/apt/lists/* # Install Go 1.22+ (for building Forgejo MCP if needed) RUN curl -fsSL https://go.dev/dl/go1.22.10.linux-amd64.tar.gz | tar -xzC /usr/local \ && ln -s /usr/local/go/bin/go /usr/local/bin/go \ && ln -s /usr/local/go/bin/gofmt /usr/local/bin/gofmt # Install Claude Code CLI RUN curl -fsSL https://raw.githubusercontent.com/anthropics/claude-code/main/install.sh | sh # Install uv package manager RUN pip install --no-cache-dir uv>=0.8.0 # Install development tools globally RUN pip install --no-cache-dir \ ruff>=0.4.0 \ pyright>=1.1.400 \ pre-commit>=3.8.0 \ nox>=2025.4.22 # Install MCP servers globally RUN npm install -g \ test-runner-mcp \ @crunchloop/mcp-devcontainers \ kubernetes-mcp-server \ @opentofu/opentofu-mcp-server # Install Python-based MCP servers RUN pip install --no-cache-dir \ ruff-mcp-server \ uvx # Install uvx-based MCP servers RUN uvx install uv-mcp # Create non-root user RUN groupadd --gid 1000 vscode \ && useradd --uid 1000 --gid vscode --shell /bin/bash --create-home vscode \ && echo "vscode ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers # Set up user environment USER vscode WORKDIR /workspaces/boilerplate # Create directories for MCP server configurations and logs RUN mkdir -p ~/.config/claude-code \ && mkdir -p ~/.local/bin \ && mkdir -p ~/.local/share/mcp-logs # Configure git for the user RUN git config --global init.defaultBranch main \ && git config --global pull.rebase false \ && git config --global user.name "Dev Container User" \ && git config --global user.email "dev@example.com" # Install Oh My Zsh for better shell experience RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended # Set default shell to zsh ENV SHELL=/bin/zsh # Create workspace directories RUN mkdir -p /workspaces/boilerplate/.venv \ && mkdir -p /tmp/uv-cache \ && chown -R vscode:vscode /workspaces/boilerplate \ && chown -R vscode:vscode /tmp/uv-cache # Set environment variables ENV PYTHONPATH=/workspaces/boilerplate/src ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 ENV PIP_NO_CACHE_DIR=1 ENV UV_CACHE_DIR=/tmp/uv-cache # MCP server environment variables ENV PATH=$PATH:/usr/local/go/bin:~/.local/bin ENV NODE_PATH=/usr/local/lib/node_modules ENV MCP_LOG_DIR=/home/vscode/.local/share/mcp-logs # Set working directory WORKDIR /workspaces/boilerplate # Keep container running CMD ["sleep", "infinity"]