Skip to main content
The live schema is published at https://www.getbifrost.ai/schema. Add "$schema": "https://www.getbifrost.ai/schema" to your config.json for IDE autocomplete and inline validation, or point it to a mirrored HTTP(S) URL, file:// URL, or filesystem path in isolated deployments. You can also set the BIFROST_SCHEMA_URL environment variable, which takes precedence over the $schema value. When mirroring, snapshot a schema published by a Bifrost release that supports custom $schema values; older schema copies pin $schema to the public URL and will flag a mirrored location as invalid in IDEs.
This page is a concise reference for every top-level key in config.json. Click the Guide links for full field-by-field documentation.

Top-Level Keys


version

Controls how empty arrays in allow-list fields (models, allowed_models, key_ids, tools_to_execute) are interpreted: Omitting version uses v2 semantics. Set "version": 1 only if you are migrating from v1.4.x and need the old behaviour temporarily.

source_of_truth

Controls how config.json is reconciled with the config store at startup. Missing and empty sections behave differently when source_of_truth is "config.json". A missing section leaves DB rows untouched; a present empty section is authoritative and can prune matching DB rows.
The example above makes the plugins section present and empty, so stored plugins are removed on startup. See Source of Truth & Reconciliation for section-by-section behavior.

client

Controls the worker pool, logging pipeline, security, and SDK shims. All fields are optional. Full documentation: Client Configuration.

providers

Keyed by provider name. Each entry contains a keys array and optional network_config, concurrency_and_buffer_size, proxy_config. Supported provider keys: openai, anthropic, azure, bedrock, vertex, gemini, mistral, groq, cohere, perplexity, xai, cerebras, deepseek, openrouter, nebius, fireworks, parasail, huggingface, replicate, ollama, vllm, sgl, elevenlabs, runway. Full documentation: Provider Setup.

governance

Seeds governance resources at startup. All sub-keys are optional arrays. Full documentation: Governance.

guardrails_config

Enterprise-only. Two sub-keys: guardrail_providers (array) and guardrail_rules (array). Full documentation: Guardrails.

alerting

Enterprise-only. Supports channels (array), rules (array), history_retention_days, evaluation_interval_seconds, and webhook_network. Full documentation: Alerting.

access_profiles

Enterprise-only. Defines access profile templates that can later be attached to roles/users.

cluster_config

Enterprise-only clustering settings for multi-node deployments. Full documentation: Cluster.

config_store, logs_store, vector_store

Storage backends. Each has enabled (boolean), type (string), and config (object). Full documentation: Storage.

framework

Controls model pricing catalog sync and background model discovery:

Background model discovery

Each provider’s model list is fetched at startup and whenever you add, edit, or delete a key. live_models_sync_interval additionally re-fetches it on a timer, so a model a provider starts serving after the gateway booted becomes routable without a restart. Every node runs its own refresh, because the model list is cached in process memory rather than in the database. Each pass costs two list models calls per enabled key, per provider, so raise the interval if a provider meters that endpoint. The interval is jittered by ±10% to keep replicas that booted together from calling every upstream at the same instant. Set it to 0 to turn the timer off entirely. Model discovery then happens only at startup and on key edits, and you can trigger it on demand from the Providers page.

mcp

Declares the catalog of MCP servers Bifrost connects to. Each entry in client_configs is one MCP server.
Common fields on each client_configs entry: Auth-type-specific fields: The schema enforces these pairings: oauth_config is rejected on non-OAuth auth types, per_user_header_keys is rejected on any auth type other than per_user_headers, and token_exchange is rejected on any auth type other than token_exchange — a misplaced block fails $schema validation instead of being silently ignored.
Enterprise only: auth_type: "token_exchange" in config.json is rejected on OSS — the client is skipped entirely at boot with an error logged naming it. Declare token_exchange clients via the API/Web UI on an enterprise deployment instead if you need them in a non-enterprise config.json environment during a migration.
Migration note: oauth_config_id is no longer a valid field on MCP client entries in config.json. Older guidance for shared OAuth suggested checking it in after completing an OAuth flow — remove it from existing config files (declare an oauth_config block instead, or leave the client to the dashboard). Bifrost now ignores the field if present (with a warning at boot): the OAuth link is managed server-side and survives restarts and config re-syncs on its own, and $schema-based editor/CI validation rejects the field.
Clients declared with auth_type in {oauth, per_user_oauth, per_user_headers, token_exchange} boot into a pending_verification state. The MCP Gateway UI surfaces an Authorize / Verify CTA on each pending row; one admin click runs the same verification flow the Web UI Create form uses, after which the client transitions to healthy. The same steps are scriptable via POST /api/mcp/client/{id}/initiate-verification (OAuth types), POST /api/mcp/client/{id}/verify-headers (per-user headers), or POST /api/mcp/client/{id}/verify-exchange (token exchange). Verified state is server-side and survives restarts and config re-syncs. Immutable fields (auth_type, connection_type, connection_string, stdio_config, oauth_config) cannot be changed after creation — file edits to them are ignored with a boot warning naming the fields, matching the update API; delete and re-declare the client to change them. See MCP Auth and Connections, States & Lifecycles.

websocket

Optional tuning for the WebSocket gateway (Responses API WebSocket mode, Realtime API). WebSocket is always enabled.

Minimal Valid Config