Accelerating enterprise agent adoption through metadata-driven BizOps.
Free Cloud Trial · Live Demo · Slack Community · YouTube
Built with ♥ by TavroRun the full Tavro platform on your own machine using Docker. No coding knowledge is required. Follow each step in order.
What this sets up:
- A Postgres database with all required schemas and extensions
- Tavro API (FastAPI)
- Temporal workflow engine
- MCP server with auth
- Worker for loading agent cards
- Tavro web app
You need these tools installed before you begin.
Docker Desktop runs all services in isolated containers.
| OS | Download |
|---|---|
| Windows | https://www.docker.com/products/docker-desktop/ |
| macOS | https://www.docker.com/products/docker-desktop/ |
| Linux | https://docs.docker.com/engine/install/ |
After installing, open Docker Desktop and wait until it shows Engine running.
Git is used to download this project.
| OS | Download / Command |
|---|---|
| Windows | https://git-scm.com/download/win |
| macOS | Run xcode-select --install in Terminal |
| Linux (Debian/Ubuntu) | Run sudo apt install git in Terminal |
https://github.com/TavroOrg/tavro.git
cd tavroNo local Python dependency setup is required for running the stack. Docker handles service dependencies.
Windows (PowerShell):
Copy-Item env_sample.txt .env
Copy-Item config.yaml.example config.yamlmacOS / Linux:
cp env_sample.txt .env
cp config.yaml.example config.yamlUpdate .env (minimum):
POSTGRES_USERPOSTGRES_PASSWORDOPENAI_API_KEYVITE_ZITADEL_ISSUER(default local value is usuallyhttp://localhost:8080)
Update config.yaml (minimum):
secrets.OPENAI_API_KEY
Optional config.yaml fields:
mcp.mcp_root_url(set only for remote/public MCP usage)catalog_connector.*(only if you use connector ingestion)oAuth.*values (if your flow needs provider credentials)
docker-compose.ymlis the source of truth for local service wiring.- Postgres host port is
5433on your machine (5432inside Docker). - On first database initialization, the Postgres image executes all SQL files under
sql/.
docker compose up --build -dFirst run may take several minutes.
docker compose psYou should see these core services up:
tavro-postgresrisk-temporaltavro-apirisk-mcp-serverrisk-workertavro-appcopilot-sdkzitadel-apizitadel-loginzitadel-configure-appproxy
| Tool | URL | Purpose |
|---|---|---|
| Tavro app | http://localhost:9000 | Main UI |
| API health | http://localhost:8000/health | API health check |
| API docs (direct) | http://localhost:8000/docs | FastAPI docs |
| API docs (via app) | http://localhost:9000/docs | FastAPI docs via proxy |
| Temporal UI | http://localhost:8233/temporal | Workflow monitoring |
| MCP endpoint | http://localhost:9001/zitadel/mcp | MCP endpoint (auth required) |
| Zitadel | http://localhost:8080 | Auth system |
(Invoke-WebRequest -UseBasicParsing http://localhost:8000/health).StatusCode
(Invoke-WebRequest -UseBasicParsing http://localhost:9000/health).StatusCode
(Invoke-WebRequest -UseBasicParsing http://localhost:4001/health).StatusCodeExpected: all 200.
MCP auth behavior check:
GET http://localhost:9001/zitadel/mcpreturns401until authenticated. This is expected.
docker compose --profile manual run --rm risk-sample-loaderIf you need more sample agents or AI Use Case examples, please reach out at info@tavro.ai.
docker compose --profile manual run --rm risk-connectorView logs:
docker compose logs -f tavro-apiStop all services:
docker compose downReset everything (deletes data volumes):
docker compose down -v
docker compose up --build -d- If Docker commands fail, ensure Docker Desktop is running.
- If
config.yamlmount fails, ensureconfig.yamlis a file (not a directory). - If MCP returns
401, that is expected before auth. - If you changed SQL/bootstrap logic and want DB init scripts to rerun, use a fresh Postgres volume (
docker compose down -v). - If any container exits, inspect logs with
docker compose logs <service-name>.
