docker-compose.yml•10.5 kB
version: '3.8'
services:
# Core Infrastructure
postgres:
image: postgres:16-alpine
container_name: claude-mcp-postgres-dev1
environment:
POSTGRES_DB: mcp_enhanced
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
- "5442:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./database/migrations:/docker-entrypoint-initdb.d
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 30s
timeout: 10s
retries: 3
redis:
image: redis:7-alpine
container_name: claude-mcp-redis-dev1
ports:
- "6389:6379"
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 3
etcd:
image: quay.io/coreos/etcd:v3.5.12
container_name: claude-mcp-etcd-dev1
ports:
- "2389:2379"
- "2390:2380"
environment:
ETCD_NAME: etcd0
ETCD_INITIAL_ADVERTISE_PEER_URLS: http://localhost:2380
ETCD_LISTEN_PEER_URLS: http://0.0.0.0:2380
ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:2379
ETCD_ADVERTISE_CLIENT_URLS: http://localhost:2379
ETCD_INITIAL_CLUSTER: etcd0=http://localhost:2380
ETCD_INITIAL_CLUSTER_TOKEN: etcd-cluster-1
ETCD_INITIAL_CLUSTER_STATE: new
healthcheck:
test: ["CMD", "etcdctl", "endpoint", "health"]
interval: 30s
timeout: 10s
retries: 3
# Orchestration Layer
orchestration:
build:
context: .
dockerfile: orchestration/Dockerfile
container_name: claude-mcp-orchestration-dev1
ports:
- "3200:3100"
environment:
NODE_ENV: development
PORT: 3100
DB_HOST: postgres
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: mcp_enhanced
REDIS_URL: redis://redis:6379
ETCD_HOSTS: etcd:2379
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
etcd:
condition: service_healthy
volumes:
- ./orchestration:/app/orchestration
- ./shared:/app/shared
- ./database:/app/database
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3100/health"]
interval: 30s
timeout: 10s
retries: 3
# MCP Servers
inference-enhancement:
build:
context: .
dockerfile: servers/inference-enhancement/Dockerfile
container_name: claude-mcp-inference-dev1
ports:
- "3111:3101"
environment:
NODE_ENV: development
PORT: 3101
DB_HOST: postgres
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: mcp_enhanced
REDIS_URL: redis://redis:6379
ORCHESTRATION_URL: http://orchestration:3100
depends_on:
orchestration:
condition: service_healthy
volumes:
- ./servers/inference-enhancement:/app/server
- ./shared:/app/shared
ui-testing:
build:
context: .
dockerfile: servers/ui-testing/Dockerfile
container_name: claude-mcp-ui-testing-dev1
ports:
- "3112:3102"
environment:
NODE_ENV: development
PORT: 3102
DB_HOST: postgres
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: mcp_enhanced
SCREENSHOT_DIR: /app/screenshots
ORCHESTRATION_URL: http://orchestration:3100
depends_on:
orchestration:
condition: service_healthy
volumes:
- ./servers/ui-testing:/app/server
- ./shared:/app/shared
- screenshots_data:/app/screenshots
analytics:
build:
context: .
dockerfile: servers/analytics/Dockerfile
container_name: claude-mcp-analytics-dev1
ports:
- "3113:3103"
environment:
NODE_ENV: development
PORT: 3103
DB_HOST: postgres
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: mcp_enhanced
ORCHESTRATION_URL: http://orchestration:3100
depends_on:
orchestration:
condition: service_healthy
volumes:
- ./servers/analytics:/app/server
- ./shared:/app/shared
code-quality:
build:
context: .
dockerfile: servers/code-quality/Dockerfile
container_name: claude-mcp-code-quality-dev1
ports:
- "3114:3104"
environment:
NODE_ENV: development
PORT: 3104
DB_HOST: postgres
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: mcp_enhanced
ORCHESTRATION_URL: http://orchestration:3100
depends_on:
orchestration:
condition: service_healthy
volumes:
- ./servers/code-quality:/app/server
- ./shared:/app/shared
documentation:
build:
context: .
dockerfile: servers/documentation/Dockerfile
container_name: claude-mcp-documentation-dev1
ports:
- "3115:3105"
environment:
NODE_ENV: development
PORT: 3105
DB_HOST: postgres
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: mcp_enhanced
ORCHESTRATION_URL: http://orchestration:3100
depends_on:
orchestration:
condition: service_healthy
volumes:
- ./servers/documentation:/app/server
- ./shared:/app/shared
memory-management:
build:
context: .
dockerfile: servers/memory-management/Dockerfile
container_name: claude-mcp-memory-dev1
ports:
- "3116:3106"
environment:
NODE_ENV: development
PORT: 3106
DB_HOST: postgres
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: mcp_enhanced
REDIS_URL: redis://redis:6379
ORCHESTRATION_URL: http://orchestration:3100
depends_on:
orchestration:
condition: service_healthy
volumes:
- ./servers/memory-management:/app/server
- ./shared:/app/shared
web-access:
build:
context: .
dockerfile: servers/web-access/Dockerfile
container_name: claude-mcp-web-access-dev1
ports:
- "3117:3107"
environment:
NODE_ENV: development
PORT: 3107
DB_HOST: postgres
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: mcp_enhanced
ORCHESTRATION_URL: http://orchestration:3100
# API keys should be provided via .env file
# GOOGLE_API_KEY: ${GOOGLE_API_KEY}
# GOOGLE_SEARCH_ENGINE_ID: ${GOOGLE_SEARCH_ENGINE_ID}
# BROWSERLESS_API_KEY: ${BROWSERLESS_API_KEY}
depends_on:
orchestration:
condition: service_healthy
volumes:
- ./servers/web-access:/app/server
- ./shared:/app/shared
# === MCP ENHANCEMENT SERVICES ===
# Qdrant Vector Database for Memory MCP
qdrant:
image: qdrant/qdrant:v1.7.4
container_name: claude-mcp-qdrant-dev1
ports:
- "6343:6333" # HTTP API
- "6344:6334" # GRPC API
volumes:
- qdrant_data:/qdrant/storage
environment:
QDRANT__SERVICE__HTTP_PORT: 6333
QDRANT__SERVICE__GRPC_PORT: 6334
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:6333/ || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Memory MCP Server (OpenMemory)
memory-mcp:
image: node:20-alpine
container_name: claude-mcp-memory-server-dev1
working_dir: /app
ports:
- "3211:3201"
environment:
NODE_ENV: development
PORT: 3201
POSTGRES_URL: postgresql://postgres:postgres@postgres:5432/mcp_enhanced
QDRANT_URL: http://qdrant:6333
MEMORY_COLLECTION: claude_mcp_memories
depends_on:
postgres:
condition: service_healthy
qdrant:
condition: service_healthy
volumes:
- ./mcp/memory:/app
- ./package.json:/app/package.json
command: >
sh -c "
npm install pg &&
node server.js
"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:3201/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
# Sequential Thinking MCP Server
sequential-thinking-mcp:
image: node:20-alpine
container_name: claude-mcp-sequential-thinking-dev1
working_dir: /app
ports:
- "3212:3202"
environment:
NODE_ENV: development
PORT: 3202
volumes:
- ./mcp/sequential-thinking:/app
command: >
sh -c "
npm install uuid &&
node -e \"
const http = require('http');
const server = http.createServer((req, res) => {
if (req.url === '/health') {
res.writeHead(200, {'Content-Type': 'application/json'});
res.end(JSON.stringify({status: 'healthy', service: 'sequential-thinking'}));
} else {
res.writeHead(200, {'Content-Type': 'application/json'});
res.end(JSON.stringify({message: 'Sequential Thinking MCP Server'}));
}
});
server.listen(3202, () => console.log('Sequential Thinking on 3202'));
\"
"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:3202/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
# Filesystem MCP Server
filesystem-mcp:
image: node:20-alpine
container_name: claude-mcp-filesystem-dev1
working_dir: /app
ports:
- "3213:3203"
environment:
NODE_ENV: development
PORT: 3203
WORKSPACE_PATH: "/workspace"
volumes:
- ./mcp/filesystem:/app
- .:/workspace:ro # Read-only access to entire codebase
command: >
sh -c "
echo 'const http = require(\"http\");
const fs = require(\"fs\");
const path = require(\"path\");
const server = http.createServer((req, res) => {
if (req.url === \"/health\") {
res.writeHead(200, {\"Content-Type\": \"application/json\"});
res.end(JSON.stringify({status: \"healthy\", service: \"filesystem-mcp\"}));
} else {
res.writeHead(404);
res.end(\"Not Found\");
}
});
server.listen(3203, () => console.log(\"Filesystem MCP on 3203\"));
' > server.js &&
node server.js
"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:3203/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
volumes:
postgres_data:
redis_data:
screenshots_data:
qdrant_data:
networks:
default:
name: claude-mcp-network-dev1