/ Dockerfile
Dockerfile
1 # Dockerfile for mureo — AI agent framework for ad operations. 2 # 3 # Primary purpose: enable MCP introspection checks on server registries 4 # such as Glama (https://glama.ai/mcp/servers/logly/mureo). 5 # 6 # Secondary purpose: let users try mureo without touching their host 7 # Python environment. Real usage requires credentials; see README. 8 # 9 # Usage: 10 # docker build -t mureo . 11 # docker run --rm -v ~/.mureo:/home/mureo/.mureo mureo 12 13 FROM python:3.11-slim 14 15 LABEL org.opencontainers.image.source="https://github.com/logly/mureo" \ 16 org.opencontainers.image.description="AI agent framework for autonomous ad operations across Google Ads, Meta Ads, and Search Console" \ 17 org.opencontainers.image.licenses="Apache-2.0" \ 18 org.opencontainers.image.vendor="Logly, Inc." \ 19 org.opencontainers.image.documentation="https://mureo.io" \ 20 org.opencontainers.image.url="https://github.com/logly/mureo" 21 22 # Non-root user for runtime 23 RUN groupadd --system mureo && useradd --system --gid mureo --create-home mureo 24 25 WORKDIR /app 26 27 # Install dependencies first in a cacheable layer. 28 # We create an empty package stub so `pip install .` resolves deps 29 # without needing the full source tree; sources are copied next. 30 COPY pyproject.toml README.md LICENSE ./ 31 RUN mkdir -p mureo && touch mureo/__init__.py \ 32 && pip install --no-cache-dir . \ 33 && rm -rf mureo 34 35 # Copy real sources. Edits here do not invalidate the deps layer above. 36 COPY mureo/ ./mureo/ 37 RUN pip install --no-cache-dir --no-deps . 38 39 # Drop privileges 40 RUN chown -R mureo:mureo /app 41 USER mureo 42 43 # Credentials are loaded at runtime from ~/.mureo/credentials.json. 44 # Mount the host directory when running: 45 # docker run --rm -v ~/.mureo:/home/mureo/.mureo mureo 46 # Credential checks are lazy (per-tool), so the server starts without 47 # credentials — MCP introspection on registries like Glama works 48 # without dummy env vars. 49 50 # MCP server over stdio (Claude Code / Cursor / Codex CLI / Gemini CLI) 51 CMD ["python", "-m", "mureo.mcp"]