# Stage 1: Builder
FROM node:20-alpine AS builder
WORKDIR /app
# Copy package files
COPY package.json package-lock.json ./
# Install all dependencies (including devDependencies for building)
RUN npm ci
# Copy source code
COPY tsconfig.json ./
COPY src ./src
# Build the project
RUN npm run build
# Stage 2: Production Runner
FROM node:20-alpine AS runner
WORKDIR /app
# Set production environment
ENV NODE_ENV=production
# Copy package files
COPY package.json package-lock.json ./
# Install only production dependencies
RUN npm ci --omit=dev
# Copy compiled code from builder stage
COPY --from=builder /app/dist ./dist
# Create a non-root user for security
RUN addgroup -S mcp && adduser -S mcp -G mcp
USER mcp
# Command to run the server
ENTRYPOINT ["node", "dist/index.js"]