UNPKG

universal-mcp-orchestration

Version:

๐Ÿ† UNIVERSAL AI DEVELOPMENT SYSTEM: 100% OPTIMIZED! Complete plug-and-play MCP orchestration with 20/20 agents operational, 101MB optimization, zero-error operations, and enterprise-grade reliability. Works with ANY project type at ANY scale.

630 lines (532 loc) โ€ข 19.2 kB
# Docker MCP Integration Guide ## ๐ŸŽฏ Purpose Comprehensive guide for integrating Docker capabilities with MCP agents for containerized development, deployment, and orchestration. ## ๐Ÿณ Docker MCP Architecture ### Container Strategy ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Docker Host โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ Orchestration Manager Container โ”‚ โ”‚ โ”œโ”€ MCP Server (Port 8001) โ”‚ โ”‚ โ”œโ”€ Agent Coordinator โ”‚ โ”‚ โ””โ”€ Workflow Engine โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ Product Expert Container โ”‚ โ”‚ โ”œโ”€ MCP Server (Port 8002) โ”‚ โ”‚ โ”œโ”€ NLP Models โ”‚ โ”‚ โ””โ”€ Specification Generator โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ Architecture Agent Container โ”‚ โ”‚ โ”œโ”€ MCP Server (Port 8003) โ”‚ โ”‚ โ”œโ”€ Codebase Analyzer โ”‚ โ”‚ โ””โ”€ System Design Engine โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ Developer Agent Container โ”‚ โ”‚ โ”œโ”€ MCP Server (Port 8004) โ”‚ โ”‚ โ”œโ”€ Code Generator โ”‚ โ”‚ โ””โ”€ Feature Implementor โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ QA Agent Container โ”‚ โ”‚ โ”œโ”€ MCP Server (Port 8005) โ”‚ โ”‚ โ”œโ”€ Code Reviewer โ”‚ โ”‚ โ””โ”€ Test Generator โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ DevOps Agent Container โ”‚ โ”‚ โ”œโ”€ MCP Server (Port 8006) โ”‚ โ”‚ โ”œโ”€ Deployment Engine โ”‚ โ”‚ โ””โ”€ Monitoring Tools โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## ๐Ÿ“ฆ Container Configurations ### Base Agent Dockerfile ```dockerfile # agents/base/Dockerfile FROM python:3.11-slim # Install system dependencies RUN apt-get update && apt-get install -y \ git \ curl \ build-essential \ && rm -rf /var/lib/apt/lists/* # Create app directory WORKDIR /app # Install Python packages COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Install MCP dependencies RUN pip install mcp fastmcp asyncio # Copy base agent framework COPY base_agent.py . COPY mcp_tools.py . # Create necessary directories RUN mkdir -p /app/logs /app/data /app/workspace # Set environment variables ENV PYTHONPATH=/app ENV MCP_LOG_LEVEL=INFO # Expose MCP port (will be overridden in specific agents) EXPOSE 8000 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost:${MCP_PORT}/health || exit 1 # Default command (will be overridden) CMD ["python", "agent.py"] ``` ### Orchestration Manager Container ```dockerfile # agents/orchestration/Dockerfile FROM agents/base:latest # Copy orchestration-specific files COPY orchestration_manager.py . COPY workflow_engine.py . COPY agent_coordinator.py . # Install orchestration dependencies RUN pip install \ asyncio-mqtt \ redis \ kubernetes # Set orchestration-specific environment ENV MCP_PORT=8001 ENV AGENT_TYPE=orchestration-manager # Expose orchestration port EXPOSE 8001 # Start orchestration manager CMD ["python", "orchestration_manager.py"] ``` ### Product Expert Container ```dockerfile # agents/product-expert/Dockerfile FROM agents/base:latest # Install NLP dependencies RUN pip install \ transformers \ torch \ spacy \ nltk # Download NLP models RUN python -m spacy download en_core_web_sm RUN python -c "import nltk; nltk.download('punkt'); nltk.download('stopwords')" # Copy product expert files COPY product_expert_agent.py . COPY feature_analyzer.py . COPY specification_generator.py . # Set product expert environment ENV MCP_PORT=8002 ENV AGENT_TYPE=product-expert EXPOSE 8002 CMD ["python", "product_expert_agent.py"] ``` ### Developer Agent Container ```dockerfile # agents/developer/Dockerfile FROM agents/base:latest # Install development tools RUN apt-get update && apt-get install -y \ nodejs \ npm \ typescript \ && rm -rf /var/lib/apt/lists/* # Install code generation dependencies RUN pip install \ jinja2 \ black \ pylint \ autopep8 # Copy developer agent files COPY developer_agent.py . COPY dynamic_feature_implementor.py . COPY code_generator.py . # Set developer environment ENV MCP_PORT=8004 ENV AGENT_TYPE=developer ENV NODE_ENV=development EXPOSE 8004 CMD ["python", "developer_agent.py"] ``` ## ๐Ÿ”ง Docker Compose Configuration ### Main Docker Compose ```yaml # docker-compose.agents.yml version: '3.8' services: orchestration-manager: build: context: ./agents dockerfile: orchestration/Dockerfile container_name: mcp-orchestration-manager ports: - "8001:8001" environment: - MCP_PORT=8001 - REDIS_URL=redis://redis:6379 - AGENT_REGISTRY_URL=http://localhost:8001/registry volumes: - ./knowledge-base:/app/knowledge-base:ro - ./mcp-ui-app:/app/workspace - agent-logs:/app/logs depends_on: - redis restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8001/health"] interval: 30s timeout: 10s retries: 3 product-expert: build: context: ./agents dockerfile: product-expert/Dockerfile container_name: mcp-product-expert ports: - "8002:8002" environment: - MCP_PORT=8002 - ORCHESTRATION_URL=http://orchestration-manager:8001 volumes: - ./knowledge-base:/app/knowledge-base:ro - agent-logs:/app/logs - nlp-models:/app/models restart: unless-stopped architecture-agent: build: context: ./agents dockerfile: architecture/Dockerfile container_name: mcp-architecture-agent ports: - "8003:8003" environment: - MCP_PORT=8003 - ORCHESTRATION_URL=http://orchestration-manager:8001 volumes: - ./mcp-ui-app:/app/workspace:ro - ./knowledge-base:/app/knowledge-base:ro - agent-logs:/app/logs restart: unless-stopped developer-agent: build: context: ./agents dockerfile: developer/Dockerfile container_name: mcp-developer-agent ports: - "8004:8004" environment: - MCP_PORT=8004 - ORCHESTRATION_URL=http://orchestration-manager:8001 volumes: - ./mcp-ui-app:/app/workspace - ./knowledge-base:/app/knowledge-base:ro - agent-logs:/app/logs restart: unless-stopped qa-agent: build: context: ./agents dockerfile: qa/Dockerfile container_name: mcp-qa-agent ports: - "8005:8005" environment: - MCP_PORT=8005 - ORCHESTRATION_URL=http://orchestration-manager:8001 volumes: - ./mcp-ui-app:/app/workspace:ro - ./knowledge-base:/app/knowledge-base:ro - agent-logs:/app/logs restart: unless-stopped devops-agent: build: context: ./agents dockerfile: devops/Dockerfile container_name: mcp-devops-agent ports: - "8006:8006" environment: - MCP_PORT=8006 - ORCHESTRATION_URL=http://orchestration-manager:8001 volumes: - ./mcp-ui-app:/app/workspace - ./knowledge-base:/app/knowledge-base:ro - /var/run/docker.sock:/var/run/docker.sock - agent-logs:/app/logs restart: unless-stopped mcp-ui-app: build: ./mcp-ui-app container_name: mcp-ui-app ports: - "3002:3000" environment: - REACT_APP_ORCHESTRATION_URL=http://localhost:8001 depends_on: - orchestration-manager restart: unless-stopped redis: image: redis:7-alpine container_name: mcp-redis ports: - "6379:6379" volumes: - redis-data:/data restart: unless-stopped volumes: agent-logs: nlp-models: redis-data: networks: default: name: mcp-network ``` ## ๐Ÿ› ๏ธ Docker MCP Tools Integration ### Base Agent MCP Tools ```python # base_agent.py from mcp.server import Server from mcp.types import Tool import docker import asyncio class BaseAgent: def __init__(self, agent_name: str, port: int): self.agent_name = agent_name self.port = port self.docker_client = docker.from_env() self.mcp_server = Server(agent_name) self.setup_docker_tools() def setup_docker_tools(self): @self.mcp_server.tool("get_container_status") async def get_container_status(container_name: str) -> str: """Get status of a Docker container""" try: container = self.docker_client.containers.get(container_name) return f"Container {container_name}: {container.status}" except docker.errors.NotFound: return f"Container {container_name} not found" @self.mcp_server.tool("execute_in_container") async def execute_in_container(container_name: str, command: str) -> str: """Execute command in Docker container""" try: container = self.docker_client.containers.get(container_name) result = container.exec_run(command) return result.output.decode('utf-8') except Exception as e: return f"Error executing command: {str(e)}" @self.mcp_server.tool("create_container") async def create_container(image: str, name: str, **kwargs) -> str: """Create a new Docker container""" try: container = self.docker_client.containers.run( image=image, name=name, detach=True, **kwargs ) return f"Created container {name}: {container.id[:12]}" except Exception as e: return f"Error creating container: {str(e)}" ``` ### DevOps Agent Docker Tools ```python # devops_agent.py class DevOpsAgent(BaseAgent): def __init__(self): super().__init__("devops-agent", 8006) self.setup_deployment_tools() def setup_deployment_tools(self): @self.mcp_server.tool("deploy_application") async def deploy_application(app_name: str, image_tag: str) -> str: """Deploy application with zero-downtime""" try: # Build new image self.docker_client.images.build( path=f"/app/workspace", tag=f"{app_name}:{image_tag}", nocache=True ) # Stop old container try: old_container = self.docker_client.containers.get(app_name) old_container.stop() old_container.remove() except docker.errors.NotFound: pass # Start new container new_container = self.docker_client.containers.run( image=f"{app_name}:{image_tag}", name=app_name, ports={'3000/tcp': 3002}, detach=True ) return f"Deployed {app_name}:{image_tag} successfully" except Exception as e: return f"Deployment failed: {str(e)}" @self.mcp_server.tool("rollback_deployment") async def rollback_deployment(app_name: str, previous_tag: str) -> str: """Rollback to previous deployment""" return await deploy_application(app_name, previous_tag) @self.mcp_server.tool("health_check") async def health_check(app_name: str) -> str: """Check application health""" try: container = self.docker_client.containers.get(app_name) health = container.attrs['State']['Health']['Status'] return f"Health status: {health}" except Exception as e: return f"Health check failed: {str(e)}" ``` ## ๐Ÿš€ Startup and Management Scripts ### Agent Environment Setup ```bash #!/bin/bash # scripts/setup_agent_environments.sh echo "๐Ÿš€ Setting up MCP Agent environments..." # Create agent directories mkdir -p agents/{base,orchestration,product-expert,architecture,developer,qa,devops} # Build base image echo "๐Ÿ“ฆ Building base agent image..." docker build -t agents/base:latest agents/base/ # Build all agent images echo "๐Ÿ—๏ธ Building agent images..." docker-compose -f docker-compose.agents.yml build # Create volumes echo "๐Ÿ’พ Creating volumes..." docker volume create agent-logs docker volume create nlp-models docker volume create redis-data # Start Redis first echo "๐Ÿ—„๏ธ Starting Redis..." docker-compose -f docker-compose.agents.yml up -d redis # Wait for Redis to be ready echo "โณ Waiting for Redis..." sleep 5 echo "โœ… Agent environments ready!" ``` ### MCP Server Registration ```bash #!/bin/bash # scripts/register_mcp_servers.sh echo "๐Ÿ“‹ Registering MCP servers with Claude Code..." # Create MCP configuration cat > .mcp.json << EOF { "mcpServers": { "orchestration-manager": { "command": "docker", "args": ["exec", "mcp-orchestration-manager", "python", "orchestration_manager.py"], "env": { "MCP_PORT": "8001" } }, "product-expert": { "command": "docker", "args": ["exec", "mcp-product-expert", "python", "product_expert_agent.py"], "env": { "MCP_PORT": "8002" } }, "developer-agent": { "command": "docker", "args": ["exec", "mcp-developer-agent", "python", "developer_agent.py"], "env": { "MCP_PORT": "8004" } } } } EOF # Update Claude Code configuration if [ -f ~/.config/claude/mcp.json ]; then echo "๐Ÿ”„ Updating existing MCP configuration..." cp ~/.config/claude/mcp.json ~/.config/claude/mcp.json.backup fi cp .mcp.json ~/.config/claude/mcp.json echo "โœ… MCP servers registered!" echo "๐ŸŽฏ You can now use: claude mcp call orchestration-manager start_workflow 'your request'" ``` ### Orchestration Test ```python # test_orchestration.py import asyncio import requests import json async def test_orchestration(): """Test the complete orchestration system""" print("๐Ÿงช Testing MCP Agent Orchestration...") # Test 1: Check all agents are running agents = [ ("orchestration-manager", 8001), ("product-expert", 8002), ("architecture-agent", 8003), ("developer-agent", 8004), ("qa-agent", 8005), ("devops-agent", 8006) ] for agent_name, port in agents: try: response = requests.get(f"http://localhost:{port}/health", timeout=5) if response.status_code == 200: print(f"โœ… {agent_name}: Healthy") else: print(f"โš ๏ธ {agent_name}: Unhealthy") except requests.exceptions.RequestException: print(f"โŒ {agent_name}: Not responding") # Test 2: Simple workflow print("\n๐Ÿ”„ Testing simple workflow...") try: response = requests.post( "http://localhost:8001/start_workflow", json={"request": "Add a simple button component"} ) if response.status_code == 200: workflow_id = response.json()["workflow_id"] print(f"โœ… Workflow started: {workflow_id}") # Monitor progress for i in range(10): status_response = requests.get(f"http://localhost:8001/workflow_status/{workflow_id}") status = status_response.json()["status"] print(f"๐Ÿ“Š Status: {status}") if status == "complete": print("โœ… Workflow completed successfully!") break await asyncio.sleep(2) else: print("โŒ Failed to start workflow") except Exception as e: print(f"โŒ Workflow test failed: {str(e)}") print("\n๐ŸŽฏ Orchestration test complete!") if __name__ == "__main__": asyncio.run(test_orchestration()) ``` ## ๐Ÿ“Š Monitoring and Logging ### Centralized Logging ```python # agents/base/logging_config.py import logging import json from datetime import datetime class JSONFormatter(logging.Formatter): def format(self, record): log_entry = { "timestamp": datetime.utcnow().isoformat(), "level": record.levelname, "agent": getattr(record, 'agent_name', 'unknown'), "message": record.getMessage(), "module": record.module, "function": record.funcName, "line": record.lineno } if record.exc_info: log_entry["exception"] = self.formatException(record.exc_info) return json.dumps(log_entry) def setup_logging(agent_name: str): """Setup structured logging for agents""" logger = logging.getLogger(agent_name) logger.setLevel(logging.INFO) handler = logging.FileHandler(f"/app/logs/{agent_name}.log") handler.setFormatter(JSONFormatter()) logger.addHandler(handler) # Also log to console console_handler = logging.StreamHandler() console_handler.setFormatter(logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' )) logger.addHandler(console_handler) return logger ``` This Docker MCP integration provides a robust, scalable foundation for the multi-agent orchestra while maintaining seamless Claude Code integration.