# Dockerfile for py-docx-mcp (Python MCP server) - OpenWebUI: MCP (Streamable HTTP) # Usage: # docker build -t py-docx-mcp . # docker run --rm -p 3000:3000 py-docx-mcp # # In OpenWebUI: # - Type: MCP (Streamable HTTP) # - URL: http://:3000 # - Auth: Bearer (if DOCX_MCP_API_KEY is set) # # Environment: # DOCX_MCP_API_KEY - API key (Bearer or X-API-Key). Optional but recommended. # DOCX_MCP_HTTP_HOST - Bind host (default: 0.0.0.0) # DOCX_MCP_HTTP_PORT - Bind port (default: 3000) # DOCX_MCP_TEMPLATES_DIR - Templates directory (default: /templates) # DOCX_MCP_MAX_SIZE - Max document size in bytes (default: 104857600) # DOCX_MCP_MAX_DOCS - Max open documents (default: 30) # DOCX_MCP_SANDBOX - Enable sandbox mode (default: true) # DOCX_MCP_ALLOW_EXTERNAL_TOOLS - Allow external tools (default: false) # DOCX_MCP_ALLOW_NETWORK - Allow network access (default: false) FROM python:3.12-slim AS base ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=off \ PIP_DISABLE_PIP_VERSION_CHECK=1 WORKDIR /app # System deps (for python-docx, Pillow, and optional external converters) RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ libjpeg62-turbo-dev \ libpng-dev \ libfreetype6-dev \ libfontconfig1-dev \ libreoffice \ poppler-utils \ && rm -rf /var/lib/apt/lists/* # Install Python dependencies COPY pyproject.toml ./ RUN pip install --upgrade pip && pip install . # Copy source COPY src/py_docx ./src/py_docx # Create runtime dirs RUN mkdir -p /templates /out /tmp/py-docx-mcp # Environment ENV DOCX_MCP_HTTP_HOST=0.0.0.0 \ DOCX_MCP_HTTP_PORT=3000 \ DOCX_MCP_TEMPLATES_DIR=/templates \ DOCX_MCP_MAX_SIZE=104857600 \ DOCX_MCP_MAX_DOCS=30 \ DOCX_MCP_SANDBOX=true \ DOCX_MCP_ALLOW_EXTERNAL_TOOLS=true \ DOCX_MCP_ALLOW_NETWORK=false # Expose HTTP port (Streamable HTTP for OpenWebUI) EXPOSE 3000 # Health check (ensure module is importable) HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \ CMD python -c "import py_docx.server; print('ok')" || exit 1 # Default: Streamable HTTP for OpenWebUI MCP ENTRYPOINT ["python", "-m", "py_docx.server"]