Install · human path

Install Zagros with Docker Compose.

The supported path for a local or shared team deployment. No local Rust toolchain required — every Zagros command below runs inside the Compose cli profile container. Prefer an agent to do this for you? Use the AI install prompt →

Prerequisites

What you need first.

Git

To clone the repository.

Docker + Compose v2

Docker Desktop, Docker Engine, or WSL2 with Docker integration. Linux, macOS, and Windows are supported; Linux is recommended for production.

Network access

Required during image builds and source ingestion so Zagros can retrieve its configured authoritative upstream data.

Loopback ports

127.0.0.1:47474 (HelixDB), 127.0.0.1:8789 (MCP), 127.0.0.1:8788 (UI). No ports are exposed beyond loopback by default.

Step 1 · Clone and start

Clone the repo, start the stack.

1

Clone

git clone https://github.com/siamakhaz/Zagros.git
cd Zagros
2

Configure environment (optional)

Copy the example file only if you need to customize settings. Defaults work out of the box. On Linux, if your account UID or GID is not 1000, set ZAGROS_HOST_UID and ZAGROS_HOST_GID in .env to the values reported by id -u and id -g. This keeps the bind-mounted HelixDB data owned by your host account.

cp .env.example .env
3

Start the stack

Starts HelixDB, the MCP server, and the web UI — all bound to loopback only.

docker compose -f docker/compose.yml up -d --build
Step 2 · Readiness check

Confirm the services are up.

The MCP health endpoint verifies HelixDB is reachable, so it is the primary stack readiness check.

→

Health checks

curl -fsS http://127.0.0.1:8789/health
curl -fsS http://127.0.0.1:8788/api/status
Step 3 · Seed the index

A fresh database is empty — seed it.

Seeding is idempotent; re-running is safe. These commands use the Compose cli profile, so no local Rust build is needed.

1

Backfill CVEs

Loads up to 500 CVE records from deltaLog history. Raise --limit (max 10000) for a larger baseline.

docker compose -f docker/compose.yml --profile cli run --rm cli backfill --limit 500
2

Load knowledge sources

Loads CWE, ASVS, CAPEC, and ATT&CK. Individual sources can be loaded with source cwe, source asvs, source capec, or source attack.

docker compose -f docker/compose.yml --profile cli run --rm cli source all
Step 4 · Verify

Check counts and run a search.

→

Status

docker compose -f docker/compose.yml --profile cli run --rm cli status
→

Search CVEs

docker compose -f docker/compose.yml --profile cli run --rm cli search "remote code execution" --top-k 5
→

Search knowledge

docker compose -f docker/compose.yml --profile cli run --rm cli know "out-of-bounds write" --top-k 5
Staying fresh

Daily refresh is automatic.

The persistent MCP container runs a scheduler (default 03:00 UTC daily) that pulls the latest CVE delta and refreshes all configured knowledge sources. Operational history is written to /data/refresh-status.json and /data/refresh-history.jsonl. Set ZAGROS_AUTO_REFRESH=false to disable it or ZAGROS_REFRESH_CRON to change the schedule.

Shared team deployment? Keep HelixDB private and place MCP/UI behind an authenticated TLS reverse proxy before making the service reachable across your network or from the internet. See Deployment — Zagros has no application-level user authentication, so never publish port 8789 to the public internet without an auth layer.