# Multi-stage Dockerfile for Pathfinder MCP Server
# Uses uv for fast, reproducible builds
# Stage 1: Builder
FROM python:3.11-slim AS builder
# Install uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
# Set working directory
WORKDIR /app
# Copy dependency files
COPY pyproject.toml uv.lock ./
# Install dependencies (frozen lock, production only)
RUN uv sync --frozen --no-dev
# Copy source code
COPY src/ ./src/
COPY README.md ./
# Install the package
RUN uv pip install --no-deps .
# Stage 2: Runtime
FROM python:3.11-slim
# Create non-root user for security
RUN useradd -m -u 1000 pathfinder && \
mkdir -p /sessions && \
chown -R pathfinder:pathfinder /sessions
# Set working directory
WORKDIR /app
# Copy virtual environment from builder
COPY --from=builder --chown=pathfinder:pathfinder /app/.venv /app/.venv
# Copy uv binary
COPY --from=builder /usr/local/bin/uv /usr/local/bin/uv
# Set environment variables
ENV PATH="/app/.venv/bin:$PATH" \
PYTHONUNBUFFERED=1 \
PATHFINDER_TRANSPORT=sse \
PATHFINDER_HOST=0.0.0.0 \
PATHFINDER_PORT=8000 \
PATHFINDER_SESSIONS_DIR=/sessions
# Switch to non-root user
USER pathfinder
# Expose port
EXPOSE 8000
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD python -c "import http.client; conn = http.client.HTTPConnection('localhost', 8000); conn.request('GET', '/health'); r = conn.getresponse(); exit(0 if r.status == 200 else 1)" || exit 1
# Labels
LABEL org.opencontainers.image.title="Pathfinder MCP Server" \
org.opencontainers.image.description="FastMCP server implementing Research-Plan-Implement workflow with context compaction" \
org.opencontainers.image.version="0.1.0" \
org.opencontainers.image.source="https://github.com/jamesctucker/pathfinder-mcp"
# Entrypoint
ENTRYPOINT ["pathfinder-mcp"]