version: '3.8' services: neo4j: build: ./neo4j ports: - "7474:7474" # Browser - "7687:7687" # Bolt environment: - NEO4J_AUTH=neo4j/password volumes: - ./neo4j/data:/data healthcheck: test: ["CMD", "cypher-shell", "-u", "neo4j", "-p", "password", "MATCH (n) RETURN count(n) LIMIT 1"] interval: 10s timeout: 5s retries: 5 postgres: image: postgres:15 container_name: postgres ports: - "5432:5432" environment: - POSTGRES_DB=testdb - POSTGRES_USER=postgres - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data - ./postgres/init.sql:/docker-entrypoint-initdb.d/init.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 mcp: build: ./mcp container_name: mcp ports: - "8000:8000" environment: - MCP_PORT=8000 - MCP_API_KEYS=dev-key-123,external-key-456 - NEO4J_BOLT_URL=bolt://neo4j:7687 - NEO4J_AUTH=neo4j/password - POSTGRES_CONNECTION=postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/testdb depends_on: - neo4j - postgres agent: build: ./agent container_name: agent environment: - MCP_URL=http://mcp:8000/mcp - MCP_API_KEY=dev-key-123 - AGENT_POLL_INTERVAL=${AGENT_POLL_INTERVAL:-30} depends_on: - mcp - neo4j volumes: neo4j_data: postgres_data: