Multi-Team Support¶
Oduflow supports running multiple isolated teams within a single server instance. Each team has its own environments, templates, services, credentials, and port registry, while sharing the Docker network and PostgreSQL container.
Configuration¶
Define teams in oduflow.toml using [team.*] sections:
[team.1]
hostname = "team-a.example.com"
auth_token = "token-team-a"
ui_password = "pass-a"
port_range = [50000, 50050]
[team.2]
hostname = "team-b.example.com"
auth_token = "token-team-b"
ui_password = "pass-b"
port_range = [50050, 50100]
Each team gets a dedicated data directory under the base data_dir:
/srv/oduflow/
├── team_1/
│ ├── workspaces/
│ ├── templates/
│ ├── shared_repos/
│ ├── ports.json
│ ├── .git-credentials
│ └── agent_guides/
├── team_2/
│ ├── workspaces/
│ ├── templates/
│ ├── shared_repos/
│ ├── ports.json
│ ├── .git-credentials
│ └── agent_guides/
Team Resolution¶
When an MCP tool is called, Oduflow resolves the team using the following priority:
- Auth token — matches the Bearer token against
auth_tokenvalues in team configs - Host header — matches the HTTP
Hostheader against teamhostnamevalues - Single team — if only one team is configured, uses it automatically
- Default — falls back to team
"1"
Shared vs. Per-Team Resources¶
| Resource | Scope |
|---|---|
Docker network (oduflow-net) |
Shared |
PostgreSQL container (oduflow-db) |
Shared |
Traefik container (oduflow-traefik) |
Shared |
| Environments (workspaces, containers) | Per-team |
| Templates (DB snapshots, filestores) | Per-team |
| Extra addon repositories | Per-team |
| Auxiliary services | Per-team |
| Port assignments | Per-team |
| Git credentials | Per-team |
Database Naming¶
Databases are namespaced by team ID:
- Environment DB:
oduflow_{team_id}_{slugified_branch}(e.g.oduflow_1_feature-login) - Template DB:
oduflow_template_{team_id}_{template_name}(e.g.oduflow_template_1_default)
Containers are labeled with oduflow.team={team_id} for filtering.
CLI Team Selection¶
CLI template and service commands accept a --team flag:
oduflow init-template --odoo-image odoo:17.0 --template-name myproject --team 2
oduflow list-templates --team 2
oduflow cleanup --team 2
The default is --team 1.