allsource-prime 0.17.1

MCP server for AllSource Prime — unified agent memory engine (stdio transport)
# syntax=docker/dockerfile:1.7
# =============================================================================
# AllSource Prime — Multi-Stage Dockerfile
#
# Build from repo root (required for workspace dependencies):
#   docker build -t allsource-prime -f apps/prime-mcp/Dockerfile .
#
# Run:
#   docker run -v prime-data:/data -p 3905:3905 allsource-prime
# =============================================================================

ARG RUST_VERSION=1.92

# =============================================================================
# Stage 1: Builder
# =============================================================================
FROM rust:${RUST_VERSION}-slim AS builder

RUN apt-get update && apt-get install -y --no-install-recommends \
    pkg-config libssl-dev cmake g++ \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /build

# Copy workspace root manifest and lockfile
COPY Cargo.toml Cargo.lock ./

# Copy allsource-core (the main dependency)
COPY apps/core/ apps/core/

# Copy prime-mcp itself
COPY apps/prime-mcp/ apps/prime-mcp/

# Stub workspace members that prime-mcp doesn't need but Cargo.toml references
RUN mkdir -p apps/mcp-server-elixir/native/core_nif/src \
    && echo '' > apps/mcp-server-elixir/native/core_nif/src/lib.rs \
    && printf '[package]\nname = "core_nif"\nversion = "0.1.0"\nedition = "2024"\n' \
       > apps/mcp-server-elixir/native/core_nif/Cargo.toml \
    && mkdir -p sdks/rust/src \
    && echo '' > sdks/rust/src/lib.rs \
    && printf '[package]\nname = "allsource"\nversion = "0.16.0"\nedition = "2024"\n' \
       > sdks/rust/Cargo.toml \
    && mkdir -p tooling/performance/src \
    && echo 'fn main() {}' > tooling/performance/src/main.rs \
    && printf '[package]\nname = "allsource-performance"\nversion = "0.1.0"\nedition = "2024"\n[[bin]]\nname = "allsource-performance"\npath = "src/main.rs"\n' \
       > tooling/performance/Cargo.toml

# Build release binary
WORKDIR /build/apps/prime-mcp
RUN cargo build --release

# =============================================================================
# Stage 2: Runtime
# =============================================================================
FROM rust:${RUST_VERSION}-slim AS runtime

RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates curl \
    && rm -rf /var/lib/apt/lists/*

RUN groupadd -r prime && useradd -r -g prime -d /data prime

COPY --from=builder /build/apps/prime-mcp/target/release/allsource-prime /usr/local/bin/

RUN mkdir -p /data && chown prime:prime /data
VOLUME /data

USER prime

ENV PRIME_DATA_DIR=/data \
    PRIME_MODE=http \
    PRIME_PORT=3905 \
    PRIME_LOG_LEVEL=info

EXPOSE 3905

HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
    CMD curl -f http://localhost:3905/health || exit 1

ENTRYPOINT ["allsource-prime"]
CMD ["--data-dir", "/data", "--mode", "http", "--port", "3905"]