# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Zebrunner MCP Server - Docker Compose
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Usage:
# Build: docker compose build
# Run: docker compose up -d
# Logs: docker compose logs -f zebrunner-mcp
# Stop: docker compose down
#
# For local development, copy .env.example to .env and fill in your credentials
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
services:
zebrunner-mcp:
build:
context: .
dockerfile: Dockerfile
args:
NODE_VERSION: "20"
image: msarychau/mcp-zebrunner:${VERSION:-latest}
container_name: zebrunner-mcp
restart: unless-stopped
# Use Docker's built-in init for proper signal handling
init: true
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Environment Configuration
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
environment:
# Required credentials (must be set in .env or passed via CLI)
# Using generic error messages to avoid information disclosure
ZEBRUNNER_URL: ${ZEBRUNNER_URL:?Required}
ZEBRUNNER_LOGIN: ${ZEBRUNNER_LOGIN:?Required}
ZEBRUNNER_TOKEN: ${ZEBRUNNER_TOKEN:?Required}
# Optional configuration with defaults
DEBUG: ${DEBUG:-false}
EXPERIMENTAL_FEATURES: ${EXPERIMENTAL_FEATURES:-false}
MAX_PAGE_SIZE: ${MAX_PAGE_SIZE:-100}
DEFAULT_PAGE_SIZE: ${DEFAULT_PAGE_SIZE:-10}
ENABLE_RULES_ENGINE: ${ENABLE_RULES_ENGINE:-false}
# Node.js settings
NODE_ENV: production
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# stdio transport requires interactive mode
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
stdin_open: true
tty: true
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Optional: Mount custom rules file
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# volumes:
# - ./mcp-zebrunner-rules.md:/app/mcp-zebrunner-rules.md:ro
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Resource limits (optional, uncomment if needed)
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# deploy:
# resources:
# limits:
# cpus: '1.0'
# memory: 512M
# reservations:
# cpus: '0.25'
# memory: 128M
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Health check - validates MCP server can process basic Node.js operations
# Note: stdio-based MCP servers don't expose HTTP endpoints for health checks
# This checks that Node.js runtime and required modules are functional
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
healthcheck:
test: ["CMD", "node", "-e", "require('./dist/server.js'); process.exit(0)"]
interval: 30s
timeout: 10s
retries: 3
start_period: 15s
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Security options
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp:size=100M,mode=1777
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Labels for Docker Desktop and MCP Toolkit discovery
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
labels:
- "ai.mcp.server=true"
- "ai.mcp.transport=stdio"
- "com.docker.desktop.extension.api.version=0.1"