name: mcp-supergateway # NOTE: copy this file to .env and fill in the keys for the servers you enable. services: # Multi-server MCP gateway (supergateway --config). # One port, one Streamable HTTP endpoint per server: http://localhost:8000//mcp # Servers are defined in supergateway.config.jsonc. mcp: build: context: . # BUILD_NETWORK=host in .env for hosts where the default docker bridge has # no egress (see README troubleshooting). Default (bridge) works everywhere # else; buildx refuses `network: host` builds unless the network.host # entitlement is granted, which `docker compose build` cannot pass. network: ${BUILD_NETWORK:-default} image: chodak166/mcp-supergateway:latest container_name: mcp-gateway ports: - "8000:8000" env_file: - .env volumes: - ./supergateway.config.jsonc:/etc/supergateway/servers.jsonc:ro command: - --config - /etc/supergateway/servers.jsonc - --healthEndpoint - /healthz restart: unless-stopped # open-codebase-index (https://github.com/Helweg/open-codebase-index) # Serves ONE endpoint per registered project: http://localhost:8001//mcp # Projects are registered with ./add-project.sh (list kept in projects.env, # gateway config generated into supergateway.projects.jsonc). All projects must # live under PROJECTS_ROOT (set in .env by add-project.sh), which is mounted at # its own host path so tool results return paths valid on the host. # Each project's index data lives in /.opencode/index/. # The index server process is started per client session; nothing idles. mcp-codebase-index: build: context: . # BUILD_NETWORK=host in .env for hosts where the default docker bridge has # no egress (see README troubleshooting). Default (bridge) works everywhere # else; buildx refuses `network: host` builds unless the network.host # entitlement is granted, which `docker compose build` cannot pass. network: ${BUILD_NETWORK:-default} image: chodak166/mcp-supergateway:latest container_name: mcp-codebase-index # Run as the image's `node` user (uid 1000) so index data written into the # mounted repos is owned by the host user. user: node ports: - "8001:8000" volumes: - ${PROJECTS_ROOT:?run ./add-project.sh first}:${PROJECTS_ROOT:?run ./add-project.sh first} - ./codebase-index.config.json:/etc/codebase-index/config.json:ro - ./supergateway.projects.jsonc:/etc/supergateway/projects.jsonc:ro command: - --config - /etc/supergateway/projects.jsonc - --healthEndpoint - /healthz restart: unless-stopped # Optional: local embeddings for semantic (hybrid) codebase indexing. # Start with: docker compose --profile embeddings up -d # Then switch indexing.mode to "hybrid" in codebase-index.config.json and set # embeddingProvider "custom" with baseUrl http://ollama:11434/v1, # model nomic-embed-text, dimensions 768, and run: # docker compose exec mcp-codebase-index ocbi index --project $PWD --config /etc/codebase-index/config.json --force # ollama: # image: ollama/ollama:latest # profiles: ["embeddings"] # ports: # - "11434:11434" # volumes: # - ollama:/root/.ollama # restart: unless-stopped # volumes: # ollama: