# Servidor MCP de Facturama.
#
# Pensado para quien lo integra en su propia infraestructura: n8n, Zapier, un
# agente propio. Por eso arranca en HTTP y no en stdio, que es lo contrario del
# uso de escritorio.
#
#   docker build -t facturama/mcp .
#   docker run --rm -p 8000:8000 \
#     -e FACTURAMA_USER=pruebas \
#     -e FACTURAMA_PASSWORD=pruebas2011 \
#     facturama/mcp
#
# Las credenciales van por variables de entorno y **nunca** dentro de la imagen:
# una imagen con claves dentro se sube a un registro y ya no se retira.

FROM python:3.13-slim AS build

WORKDIR /build
COPY pyproject.toml README.md LICENSE ./
COPY src ./src

# El wheel se construye aparte para que la imagen final no cargue con las
# herramientas de compilación.
RUN pip install --no-cache-dir build && python -m build --wheel --outdir /dist


FROM python:3.13-slim

LABEL org.opencontainers.image.title="Facturama MCP" \
      org.opencontainers.image.description="Servidor MCP para facturación electrónica CFDI 4.0 en México" \
      org.opencontainers.image.source="https://github.com/facturamamx/mcp-facturacion" \
      org.opencontainers.image.licenses="MIT" \
      org.opencontainers.image.vendor="Facturama"

# Sin privilegios: el servidor no necesita root para nada, y si algún día una
# dependencia se ve comprometida, la diferencia importa.
RUN useradd --create-home --uid 10001 facturama

COPY --from=build /dist/*.whl /tmp/
RUN pip install --no-cache-dir /tmp/*.whl && rm -f /tmp/*.whl

USER facturama
WORKDIR /home/facturama

# HTTP por defecto: en un contenedor, stdio no sirve de nada.
ENV FACTURAMA_MCP_TRANSPORT=http \
    FACTURAMA_ENV=sandbox \
    FACTURAMA_ALLOW_PRODUCTION=false \
    PYTHONUNBUFFERED=1

EXPOSE 8000

# Comprueba que el proceso puede importar el servidor y listar sus herramientas.
# Que el puerto responda no dice si el servidor está sano; esto sí.
HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \
  CMD python -c "import asyncio; from facturama_mcp.server import mcp; \
asyncio.run(mcp._list_tools())" || exit 1

ENTRYPOINT ["facturama-mcp"]
