# seed-mcp MCP server — production image.
#
# Structure: copy code first, then the regenerable indexes last so a
# code-only change doesn't invalidate the corpus COPY layer.
#
# The container runs the MCP server via streamable-http on PORT 8000.
# Override via MCP_HOST / MCP_PORT env if you front it with a different
# reverse-proxy setup.
#
# Image is self-contained — corpus, Chroma collection, and BM25 db are
# all baked in. Drawbar's docker-compose pulls the image and runs it;
# no host volume mounts required for serve.
#
# RERANK_URL is set at compose time (points at the llama.cpp sidecar
# on trashpanda's Tesla P4 — SHARED with crop-chem-docs). OLLAMA_URL
# is set at compose time too. Defaults below assume same-stack Docker
# DNS names.

FROM python:3.12-slim

WORKDIR /app

# Install Python deps first for cacheability.
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt

# Code.
COPY scrape /app/scrape
COPY rag /app/rag
COPY docs_mcp /app/docs_mcp

# Source catalog. Lists the corpus sources (Bayer seeds + Golden
# Harvest + NK + AgriPro + Beck's PFR + Beck's products).
COPY sources.json /app/

# Regenerable indexes. CI builds these from corpus/ in the same job
# that builds the image. Listed last so code changes don't invalidate
# the COPY layer cache for these (much larger) directories.
#
# bm25/ is only consulted when HYBRID_SEARCH=true (the server falls
# back to dense-only if it's missing).
COPY corpus /app/corpus
COPY chroma /app/chroma
COPY bm25 /app/bm25

ENV PYTHONUNBUFFERED=1 \
    PRODUCT_NAME=crop_seed \
    MCP_TRANSPORT=streamable-http \
    MCP_HOST=0.0.0.0 \
    MCP_PORT=8000 \
    HYBRID_SEARCH=true \
    OLLAMA_URL=http://ollama:11434 \
    RERANK_URL=http://llama-rerank:8080
    # Defaults above assume the MCP container shares a Docker network
    # with services named `ollama` and `llama-rerank`. Override either
    # in the compose `environment:` block if your stack uses different
    # service names or if you want to point at off-stack hosts.

EXPOSE 8000

ENTRYPOINT ["python", "-m", "docs_mcp.server"]
