# Konfiguration: ENV-Variablen, YAML-Dateien

> Referenz aller ToolMesh-ENV-Variablen und YAML-Configs: TOOLMESH_*, OPENFGA_*, AUDIT_*, plus backends.yaml, users.yaml, apikeys.yaml — mit Defaults.

Canonical: https://www.toolmesh.io/de/configuration/

ToolMesh wird vollständig über Umgebungsvariablen und YAML-Dateien konfiguriert.

## Umgebungsvariablen

### MCP-Server

| Variable | Standard | Beschreibung |
|----------|----------|--------------|
| `TOOLMESH_PORT` | `8123` | Host-Port (Docker-Mapping; intern immer 8080) |
| `TOOLMESH_TRANSPORT` | `http` | Transport: `http` oder `stdio` |
| `TOOLMESH_CORS_ORIGINS` | *(leer)* | Erlaubte CORS-Origins |
| `TOOLMESH_AUTH_PASSWORD` | *(leer)* | Single-User-OAuth-Passwort |
| `TOOLMESH_API_KEY` | *(leer)* | Statischer API-Key |

### Audit

| Variable | Standard | Beschreibung |
|----------|----------|--------------|
| `AUDIT_STORE` | `log` | `log` (slog) oder `sqlite` |
| `AUDIT_RETENTION_DAYS` | `90` | Aufbewahrungsdauer für SQLite-Store |

### Autorisierung

| Variable | Standard | Beschreibung |
|----------|----------|--------------|
| `OPENFGA_API_URL` | `http://localhost:8080` | OpenFGA-API-Endpunkt. In Docker Compose `http://openfga:8080` verwenden (in `.env` setzen). |
| `OPENFGA_STORE_ID` | *(leer)* | OpenFGA Store-ID (wird durch `./config/openfga/setup.sh` gesetzt) |
| `OPENFGA_MODE` | `bypass` | `bypass` (keine AuthZ, nur Entwicklung) oder `restrict` (erzwungen, empfohlen für Produktion) |

### Timeouts

| Variable | Standard | Beschreibung |
|----------|----------|--------------|
| `TOOLMESH_MCP_TIMEOUT` | `120` | HTTP-Client-Timeout für MCP-Backends (Sekunden) |
| `TOOLMESH_EXEC_TIMEOUT` | `120` | Tool-Ausführungs-Timeout (Sekunden) |

### Logging

| Variable | Standard | Beschreibung |
|----------|----------|--------------|
| `LOG_LEVEL` | `debug` / `info` | Log-Detailgrad |
| `LOG_FORMAT` | `json` | `json` oder `text` |
| `DEBUG_BACKENDS` | *(leer)* | Kommaseparierte Backend-Namen für Debug-Logging |
| `DEBUG_FILE` | *(leer)* | Pfad zur Debug-Log-Datei |

> **Sicherheitshinweis:** Debug-Logging kann vollständige Request/Response-Payloads einschließlich sensibler Daten erfassen. `DEBUG_BACKENDS` oder `DEBUG_FILE` niemals in Produktionsumgebungen aktivieren.

### Credentials

Credentials werden als Umgebungsvariablen mit `CREDENTIAL_`-Präfix gesetzt:

```bash
CREDENTIAL_GITHUB_TOKEN=ghp_xxxxx
CREDENTIAL_STRIPE_KEY=sk_live_xxxxx
CREDENTIAL_MEMORIZER_API_KEY=sk-mem-xxxxx
```

## Konfigurationsdateien

### backends.yaml

Definiert, mit welchen Backends sich ToolMesh verbindet:

```yaml
backends:
  # MCP-Backend
  - name: memorizer
    transport: http
    url: "https://memorizer.example.com/mcp"
    api_key_env: "MEMORIZER_API_KEY"

  # REST-Backend via DADL
  - name: github
    transport: rest
    dadl: /app/dadl/github.dadl
    url: "https://api.github.com"
```

Tools werden automatisch mit einem Backend-Präfix exponiert (z.B. `memorizer_retrieve_knowledge`, `github_list_repos`).

### users.yaml

Multi-User-Konfiguration für OAuth:

```yaml
users:
  - username: alice
    password: "$2a$12$..."
    company: acme
    plan: pro
    roles: [admin]
```

### apikeys.yaml

API-Key-Definitionen:

```yaml
keys:
  - key_hash: "$2a$12$..."
    username: ci-bot
    company: acme
    plan: standard
    roles: [read]
    caller_id: github-actions
```

### caller-classes.yaml

Ordnet Caller-IDs Vertrauensklassen zu:

```yaml
classes:
  trusted:
    - claude-code
    - claude-desktop
  standard:
    - partner-*
  # Alles andere → "untrusted"
```
