/ Containerfile
Containerfile
 1  # SPDX-License-Identifier: MIT
 2  # SPDX-FileCopyrightText: 2025 Jonathan D.A. Jewell
 3  
 4  # poly-observability-mcp - Wolfi Base (Primary)
 5  # Minimal, secure container image using Wolfi (FOSS, no auth required)
 6  
 7  FROM cgr.dev/chainguard/wolfi-base:latest
 8  
 9  LABEL org.opencontainers.image.title="poly-observability-mcp"
10  LABEL org.opencontainers.image.description="Multi-backend observability MCP server (Prometheus, Grafana, Loki, Jaeger, OpenTelemetry)"
11  LABEL org.opencontainers.image.version="1.0.0"
12  LABEL org.opencontainers.image.authors="Jonathan D.A. Jewell"
13  LABEL org.opencontainers.image.source="https://github.com/hyperpolymath/poly-observability-mcp"
14  LABEL org.opencontainers.image.licenses="MIT"
15  LABEL dev.mcp.server="true"
16  LABEL io.modelcontextprotocol.server.name="io.github.hyperpolymath/poly-observability-mcp"
17  
18  # Install Deno
19  RUN apk add --no-cache deno ca-certificates
20  
21  # Create non-root user
22  RUN adduser -D -u 1000 mcp
23  WORKDIR /app
24  
25  # Copy application files
26  COPY --chown=mcp:mcp deno.json package.json ./
27  COPY --chown=mcp:mcp index.js ./
28  COPY --chown=mcp:mcp adapters/ ./adapters/
29  COPY --chown=mcp:mcp src/ ./src/ 2>/dev/null || true
30  COPY --chown=mcp:mcp lib/ ./lib/ 2>/dev/null || true
31  
32  # Cache dependencies
33  RUN deno cache --config=deno.json index.js
34  
35  # Switch to non-root user
36  USER mcp
37  
38  # Observability endpoints configured via environment
39  ENV PROMETHEUS_URL=http://localhost:9090
40  ENV GRAFANA_URL=http://localhost:3000
41  ENV LOKI_URL=http://localhost:3100
42  
43  ENTRYPOINT ["deno", "run", "--allow-run", "--allow-read", "--allow-write", "--allow-env", "--allow-net", "index.js"]