Configuration Reference¶
Arbiter is configured with a single TOML file, passed via --config at startup. This is the complete reference for every configuration key.
[proxy]¶
Core reverse proxy settings.
Key |
Type |
Default |
Description |
|---|---|---|---|
|
string |
|
Address the proxy listens on |
|
integer |
|
Port the proxy listens on |
|
string |
required |
URL of the upstream MCP server |
|
string[] |
|
Paths to block (exact match). Returns 403. |
|
bool |
|
Require |
|
bool |
|
Reject non-JSON-RPC POST requests |
|
integer |
|
Maximum request body size (bytes). Returns 413 if exceeded. |
|
integer |
|
Maximum response body size (bytes). Oversized responses are blocked. |
|
integer |
|
Timeout for upstream requests (seconds). Returns 504 on timeout. |
[proxy]
listen_addr = "0.0.0.0"
listen_port = 8080
upstream_url = "http://mcp-server:8081"
require_session = true
strict_mcp = true
require_session and strict_mcp both default to true. This is deliberate. Turning them off widens the attack surface. Do so only if your deployment architecture requires it.
[oauth]¶
JWT validation against one or more identity providers. This entire section is optional; omit it to skip OAuth validation.
Key |
Type |
Default |
Description |
|---|---|---|---|
|
integer |
|
How long to cache JWKS responses |
[[oauth.issuers]]¶
Each issuer is a separate identity provider:
Key |
Type |
Required |
Description |
|---|---|---|---|
|
string |
yes |
Human-readable name for this issuer |
|
string |
yes |
The issuer URL (matched against JWT |
|
string |
yes |
JWKS endpoint URL |
|
string[] |
no |
Expected audience values |
|
string |
no |
Token introspection endpoint (RFC 7662) |
|
string |
no |
Client ID for introspection |
|
string |
no |
Client secret for introspection |
[oauth]
jwks_cache_ttl_secs = 3600
[[oauth.issuers]]
name = "keycloak"
issuer_url = "http://keycloak:8080/realms/arbiter"
jwks_uri = "http://keycloak:8080/realms/arbiter/protocol/openid-connect/certs"
audiences = ["arbiter-api"]
[policy]¶
Authorization policy configuration.
Key |
Type |
Default |
Description |
|---|---|---|---|
|
string |
none |
Path to TOML policy file |
|
bool |
|
Enable file-system hot-reload |
|
integer |
|
Debounce interval for the file watcher |
[policy]
file = "policies.toml"
watch = true
watch_debounce_ms = 500
When watch = true, policy file changes are detected, parsed, validated, and atomically swapped. In-flight requests complete under the old policy set.
See Policy Language for the policy language itself.
[sessions]¶
Session defaults and behavioral settings.
Key |
Type |
Default |
Description |
|---|---|---|---|
|
integer |
|
Default session time limit |
|
integer |
|
Default maximum tool calls per session |
|
bool |
|
Hard-block behavioral anomalies (vs. log only) |
|
float |
|
Budget/time warning threshold percentage |
|
integer |
|
Concurrent session cap per agent |
|
integer |
|
Duration of the sliding rate-limit window |
|
integer |
|
Interval for expired session cleanup |
[sessions]
default_time_limit_secs = 3600
default_call_budget = 1000
escalate_anomalies = false
warning_threshold_pct = 20.0
max_concurrent_sessions_per_agent = 10
[audit]¶
Audit logging configuration.
Key |
Type |
Default |
Description |
|---|---|---|---|
|
bool |
|
Enable audit logging |
|
string |
none |
Append-only JSONL log file path |
|
string[] |
see below |
Field name patterns that trigger argument redaction |
|
bool |
|
Deny traffic when the audit sink is degraded (fail-closed) |
|
bool |
|
Emit BLAKE3 hash-chained records for tamper detection |
Default redaction patterns cover 24 variants including abbreviations and PII: password, passwd, pwd, token, access_token, refresh_token, secret, client_secret, key, api_key, apikey, api-key, authorization, auth, credential, cred, private, private_key, ssn, social_security, credit_card, card_number, cvv, cvc.
[audit]
enabled = true
file_path = "/var/log/arbiter/audit.jsonl"
redaction_patterns = ["password", "secret", "token", "key", "authorization", "credential"]
require_healthy = true
hash_chain = true
[credentials]¶
Credential injection configuration. Optional (omit to disable credential injection).
Key |
Type |
Default |
Description |
|---|---|---|---|
|
string |
none |
Provider type: |
|
string |
none |
Path to TOML credentials file (file provider) |
|
string |
none |
Environment variable prefix (env provider) |
[credentials]
provider = "file"
file_path = "credentials.toml"
See Credential Management for usage details.
[storage]¶
Persistence backend.
Key |
Type |
Default |
Description |
|---|---|---|---|
|
string |
|
|
|
string |
none |
Database file path (SQLite only) |
[storage]
backend = "memory"
SQLite requires the sqlite feature flag: cargo build --features sqlite.
[metrics]¶
Prometheus metrics.
Key |
Type |
Default |
Description |
|---|---|---|---|
|
bool |
|
Enable the |
[admin]¶
Admin/lifecycle API settings.
Key |
Type |
Default |
Description |
|---|---|---|---|
|
string |
|
Address the admin API listens on |
|
integer |
|
Port for the admin API |
|
string |
|
API key for admin endpoints |
|
string |
|
HMAC secret for JWT signing |
|
integer |
|
Token validity duration |
Warning
The api_key and signing_secret defaults are for development only. In production, set ARBITER_ADMIN_API_KEY and ARBITER_SIGNING_SECRET environment variables. Arbiter refuses to start with default credentials.
All admin API endpoints are rate-limited at 60 requests per minute (sliding window). All admin operations are audit-logged with structured tracing.
Environment Variable Overrides¶
Variable |
Overrides |
|---|---|
|
|
|
|