services: neo4j: build: ./neo4j ports: - "7474:7474" - "7687:7687" environment: - NEO4J_AUTH=${NEO4J_AUTH} volumes: - ./neo4j/data:/data - ./neo4j/logs:/logs healthcheck: test: ["CMD", "cypher-shell", "-u", "neo4j", "-p", "password", "MATCH (n) RETURN count(n) LIMIT 1"] interval: 10s timeout: 5s retries: 5 networks: - agent-network mcp: build: ./mcp ports: - "8000:8000" environment: - NEO4J_BOLT_URL=${NEO4J_BOLT_URL} - NEO4J_AUTH=${NEO4J_AUTH} - MCP_API_KEYS=${MCP_API_KEYS} - MCP_PORT=${MCP_PORT} depends_on: neo4j: condition: service_healthy volumes: - ./mcp:/app - ./ops/scripts:/app/ops/scripts - ./data:/app/data command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 10s timeout: 5s retries: 5 networks: - agent-network agent: build: ./agent environment: - MCP_URL=http://mcp:8000/mcp - MCP_API_KEY=dev-key-123 - AGENT_POLL_INTERVAL=${AGENT_POLL_INTERVAL} - LLM_API_KEY=${LLM_API_KEY} depends_on: mcp: condition: service_healthy volumes: - ./agent:/app - ./data:/app/data command: python -u main.py restart: on-failure ports: - "8001:8001" networks: - agent-network streamlit: build: ./streamlit ports: - "8501:8501" environment: - AGENT_URL=http://agent:8001/query - MCP_URL=http://mcp:8000/mcp - MCP_API_KEY=dev-key-123 depends_on: mcp: condition: service_healthy volumes: - ./streamlit:/app networks: - agent-network networks: agent-network: driver: bridge