an mcp orchestrator
548
The project ships three Docker deliverables, all built from the same source tree
and the same project .env:
| Image / stack | Source | Purpose |
|---|---|---|
lordraw/multi-mcp-orchestrator | Dockerfile + docker-compose.yml | The OpenAI-compatible HTTP sidecar (agent_server.py), port 8910. |
multi-mcp/lab-health-agent | docker/lab_health_agent/ | The autonomous read-only health checker. |
multi-mcp/linux-update-agent | docker/linux_update_agent/ | The autonomous fleet updater. |
The MCP servers themselves (
lordraw/proxmox-mcp,synology-mcp,linux-mcp,watchyourlan-mcp) are not built here — they are pulled from Docker Hub and launched at runtime by the agents (see DooD below).
None of these containers bundle the MCP servers. Instead they mount the host
Docker socket and launch the MCP servers with docker run --rm -i on the host
daemon — so the MCP servers run as sibling containers, exactly as the
standalone CLI does on bare metal.
caller ──HTTP/schedule──► agent container ──/var/run/docker.sock──► host dockerd
│
┌───────────────────────────────┤
▼ ▼ ▼ ▼
proxmox-mcp synology-mcp linux-mcp watchyourlan-mcp
(sibling containers, --rm -i, MCP over stdio)
Consequences of DooD (important):
docker run are resolved by the host daemon,
and the sub-agents compute the source path from the code dir /opt/multi-mcp.
So files like nas_config.json or the .ssh dir must exist on the host at
the same absolute path that the container uses, and the project must be
mounted at /opt/multi-mcp inside the agent container.Home Assistant is the exception: it does not spawn a sibling container. It
runs uvx mcp-proxy inside the agent container to bridge HA's HTTP MCP
endpoint to stdio, so the container needs outbound network to the HA URL and to
fetch mcp-proxy on first use. uv is preinstalled in the orchestrator image.
Dockerfile (python:3.12-slim):
uv/uvx.openai, python-dotenv, fastapi, uvicorn[standard].WORKDIR /opt/multi-mcp, copies *.py only — secrets are never baked in
(.dockerignore excludes .env, nas_config.json, .ssh).CMD uvicorn agent_server:app --host 0.0.0.0 --port 8910.env_file: .env — all MAIN_AGENT_*, PROXMOX_MCP_*, SYNOLOGY_*, UXMCP_*,
HAOS_*, WYLA_*./var/run/docker.sock (required for DooD).nas_config.json, Linux .ssh) — uncomment only what you use, and keep host
paths matching./health healthcheck.make docker-up # docker compose up -d --build → port 8910
make docker-logs # follow logs
curl http://localhost:8910/health
Or publish/pull a prebuilt image:
make docker-release VERSION=v1.0.0 # build, tag latest+version, push
The Makefile also offers local targets: cli (run the REPL),
install-agent-server, and agent-orchestrator (run uvicorn on the host).
Full deployment walkthrough — including wiring SpiceSibyl via
ORCHESTRATOR_BASE_URL — is in DEPLOY.md.
Each lives under docker/<agent>/ with its own Dockerfile + docker-compose.yml,
built from the project root as context (context: ../..). They:
openai, requests, python-dotenv and the Docker CLI,.env (env_file: ../../.env),/opt/multi-mcp, and ~/.ssh
read-only (for the Linux MCP),TZ=Europe/Rome and a …_SCHEDULE_TIMES override so they run at fixed
daily times rather than at startup + interval.# Health checker (default schedule 06:00 & 19:00 Rome time)
docker compose -f docker/lab_health_agent/docker-compose.yml up -d --build
# Fleet updater (default schedule 12:00 Rome time)
docker compose -f docker/linux_update_agent/docker-compose.yml up -d --build
Adjust the schedule, dry-run, exclusions, and provider via the env vars in CONFIGURATION.md.
lordraw/*-mcp),
and your Proxmox / Synology / HA / WatchYourLAN hosts..env.Dockerfiles.Content type
Image
Digest
sha256:128cfb002…
Size
102.5 MB
Last updated
3 months ago
docker pull lordraw/multi-mcp-orchestrator