Workflow MCP
Deployment

Docker Deployment (Ops)

Internal ops documentation for Docker deployment

Docker Deployment (Ops)

Internal Documentation

This is internal operations documentation. Users should use the hosted service at api.workflow-mcp.blackmesa.live or install via npm.

Using Pre-built Image

docker run -p 3000:3000 blackmesa/workflow-mcp

With Persistent Storage

docker run -p 3000:3000 \
  -v ./workflow-data:/data \
  -e MCP_WORKSPACE_DIR=/data \
  workflow-mcp

Docker Compose

Create docker-compose.yml:

version: '3.8'

services:
  workflow-mcp:
    build: .
    ports:
      - "3000:3000"
    environment:
      - MCP_PORT=3000
      - MCP_HOST=0.0.0.0
      - MCP_WORKSPACE_DIR=/data
      - CORS_ORIGINS=*
    volumes:
      - workflow-data:/data
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3

volumes:
  workflow-data:

Run with:

docker-compose up -d

With OAuth

services:
  workflow-mcp:
    # ... other config ...
    environment:
      - MCP_OAUTH_ENABLED=true
      - GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID}
      - GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET}

Create .env:

GITHUB_CLIENT_ID=your_client_id
GITHUB_CLIENT_SECRET=your_client_secret

Multi-Architecture Build

Build for multiple platforms:

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t blackmesa/workflow-mcp:latest \
  --push .

Dockerfile Details

The multi-stage build:

  1. Builder stage: Installs all deps, builds TypeScript
  2. Production stage: Copies only built files and production deps

Final image is ~150MB (Alpine + Node.js + production dependencies).

Health Check

The container includes a health check:

HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1

Kubernetes

Example deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: workflow-mcp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: workflow-mcp
  template:
    metadata:
      labels:
        app: workflow-mcp
    spec:
      containers:
        - name: workflow-mcp
          image: blackmesa/workflow-mcp:latest
          ports:
            - containerPort: 3000
          env:
            - name: MCP_WORKSPACE_DIR
              value: /data
          volumeMounts:
            - name: data
              mountPath: /data
          livenessProbe:
            httpGet:
              path: /health
              port: 3000
            initialDelaySeconds: 5
            periodSeconds: 30
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: workflow-mcp-data

On this page