mcp-cpp-server 0.2.2

A high-performance Model Context Protocol (MCP) server for C++ code analysis using clangd LSP integration
# Multi-stage build for mcp-cpp-server
# Stage 1: Build the Rust binary
FROM rust:1.89 AS builder

WORKDIR /build

# Copy manifests
COPY Cargo.toml Cargo.lock ./

# Copy source code
COPY src ./src

# Build release binary
RUN cargo build --release

# Stage 2: Runtime image with clangd-20
FROM ubuntu:24.04

# Install dependencies and clangd-20
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        ca-certificates \
        curl \
        gnupg \
        lsb-release && \
    # Get Ubuntu codename
    UBUNTU_CODENAME=$(lsb_release -cs) && \
    # Add LLVM repository for clangd-20
    curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /usr/share/keyrings/llvm-archive-keyring.gpg && \
    echo "deb [signed-by=/usr/share/keyrings/llvm-archive-keyring.gpg] http://apt.llvm.org/${UBUNTU_CODENAME}/ llvm-toolchain-${UBUNTU_CODENAME}-20 main" > /etc/apt/sources.list.d/llvm.list && \
    # Install clangd-20
    apt-get update && \
    apt-get install -y --no-install-recommends clangd-20 && \
    # Cleanup to reduce image size
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Copy binary from builder
COPY --from=builder /build/target/release/mcp-cpp-server /usr/local/bin/mcp-cpp-server

# Copy entrypoint script
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

# Set default working directory for C++ projects
WORKDIR /workspace

# Environment variables
ENV CLANGD_PATH=/usr/bin/clangd-20
ENV RUST_LOG=info

# Use entrypoint script
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]

# Default arguments (can be overridden)
CMD ["--root", "/workspace"]