This guide covers deploying the Zep MCP Server using Docker and Docker Compose.
-
Create environment file:
cp .env.example .env # Edit .env and add your ZEP_API_KEY -
Start with Docker Compose:
docker-compose up
The server will be available at http://localhost:8080.
Build the Docker image manually:
docker build -t zep-mcp-server:latest .Or use the build script:
./scripts/build.shVERSION: Set the version string (default: 0.1.0)
docker build --build-arg VERSION=1.0.0 -t zep-mcp-server:1.0.0 .Build for multiple platforms:
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t zep-mcp-server:latest \
.docker run -d \
--name zep-mcp-server \
-e ZEP_API_KEY=your-key-here \
-p 8080:8080 \
zep-mcp-server:latestdocker run -d \
--name zep-mcp-server \
--env-file .env \
-p 8080:8080 \
zep-mcp-server:latestdocker run -d \
--name zep-mcp-server \
-e ZEP_API_KEY=your-key-here \
-p 9000:8080 \
zep-mcp-server:latest \
--port 8080For use with Claude Desktop or Cline:
docker run -i \
--name zep-mcp-server \
-e ZEP_API_KEY=your-key-here \
zep-mcp-server:latest \
--stdioStart in background:
docker-compose up -dStart with logs:
docker-compose updocker-compose downdocker-compose logs -fdocker-compose psdocker-compose restartSet these in .env file or pass via -e flag:
- ZEP_API_KEY (required): Your Zep Cloud API key
- LOG_LEVEL (optional): Logging level (debug, info, warn, error) - default: info
The compose file includes:
- Health checks: Automatic health monitoring
- Resource limits: CPU and memory constraints
- Security: Non-root user, read-only filesystem, no new privileges
- Logging: Configured with rotation (10MB max, 3 files)
- Restart policy: Automatically restarts unless stopped manually
Edit resource limits:
deploy:
resources:
limits:
cpus: '2'
memory: 256MChange port mapping:
ports:
- "9000:8080"The Docker container includes health checks that verify the server is responding on port 8080.
Check health status:
docker inspect --format='{{.State.Health.Status}}' zep-mcp-serverView health check logs:
docker inspect --format='{{range .State.Health.Log}}{{.Output}}{{end}}' zep-mcp-serverThe container runs as user zep (UID 1001) for security.
The container uses a read-only root filesystem with only /tmp as writable.
no-new-privileges: Prevents privilege escalation- Minimal Alpine base image with only essential packages
Check logs:
docker-compose logsVerify environment variables:
docker-compose configVerify port mapping:
docker psTest connectivity:
curl http://localhost:8080Check health status:
docker inspect zep-mcp-server | grep -A 10 HealthEnsure the container can write to /tmp:
docker exec zep-mcp-server ls -la /tmpThe included docker-compose.yml is configured for production with:
- Automatic restarts
- Resource limits
- Health checks
- Security hardening
- Log rotation
-
Use secrets management for ZEP_API_KEY:
- Docker secrets
- Kubernetes secrets
- Cloud provider secret managers
-
Monitor resource usage:
docker stats zep-mcp-server
-
Set up log aggregation:
- Configure Docker logging driver for your platform
- Use centralized logging (CloudWatch, Datadog, etc.)
-
Enable automatic updates:
- Use Watchtower or similar tools
- Set up CI/CD pipeline
-
Use specific version tags:
docker build -t zep-mcp-server:1.0.0 .
Use make commands for common Docker operations:
# Build Docker image
make docker-build
# Run with Docker Compose
make docker-run
# Stop Docker Compose
make docker-down
# Clean Docker resources
make docker-cleandocker tag zep-mcp-server:latest your-registry.com/zep-mcp-server:latestdocker push your-registry.com/zep-mcp-server:latestdocker pull your-registry.com/zep-mcp-server:latestOverride the entrypoint for debugging:
docker run -it --entrypoint /bin/sh zep-mcp-server:latestMount configuration files:
docker run -v $(pwd)/.env:/app/.env zep-mcp-server:latestUse custom networks:
docker network create zep-network
docker run --network zep-network zep-mcp-server:latest- name: Build Docker image
run: docker build -t zep-mcp-server:${{ github.sha }} .
- name: Run tests
run: docker run zep-mcp-server:${{ github.sha }} make test
- name: Push to registry
run: |
docker tag zep-mcp-server:${{ github.sha }} registry/zep-mcp-server:latest
docker push registry/zep-mcp-server:latestFor issues or questions: