client block controls how Bifrost manages its internal worker pool, request logging, authentication enforcement, header policies, SDK compatibility shims, and MCP agent behaviour.
Connection Pool
A larger pool reduces latency spikes under burst load at the cost of higher baseline memory.
500–1000 is a common starting point for production workloads with multiple providers.
Request & Response Logging
Set
disable_content_logging: true for HIPAA / PCI compliance workloads where message content must not be persisted, and keep retain_content_in_object_storage: false: with it on, the full payload of every content-disabled request is still persisted in the object storage bucket. A virtual key with its own disable_content_logging: false overrides this for its traffic, so audit your keys as well.
Reverse Proxy
When Bifrost acts as an OAuth client to upstream MCP servers, theredirect_uri it registers is built from the incoming Host header by default - behind a reverse proxy that is the proxy’s internal address, not its public one. One setting lets you override it with the proxy’s public URL.
This field supports env var syntax (
"env.MY_VAR"). When unset, it falls back to the incoming Host header.
The client role
When Bifrost connects to an upstream MCP server (Notion, Jira, GitHub, etc.) on behalf of a user, it acts as an OAuth client.mcp_external_client_url is the callback Bifrost registers as its redirect_uri with those upstream providers - they redirect the user’s browser to <client URL>/api/oauth/callback after login. Set it to the proxy’s public URL so the callback resolves to a publicly reachable address.
Example
redirect_uri falls back to the request’s Host header - correct for development or when no reverse proxy fronts Bifrost.
This setting is also configurable via the UI (MCP Gateway → MCP Settings) and the management API, with no restart required.
Security & CORS
While dashboard auth is disabled or unconfigured, or Bifrost runs without a config store (
config_store.enabled: false), a request to the management API (/api/*, /ws, /metrics) that carries an Origin header is accepted only from a localhost origin, from the gateway’s own origin (the Origin host and port match the request’s Host, as for the bundled dashboard’s own requests such as PUT /api/config), or from an origin listed in allowed_origins by name or pattern (for example https://*.example.com); the "*" entry does not count, and other origins receive 403. Requests without an Origin header (CLI and SDKs), whitelisted routes such as /health, and inference routes are unaffected. If the dashboard sits behind a proxy that rewrites the Host header, list its public origin in allowed_origins. To call the management API from a web app on another origin, list that origin explicitly, or enable dashboard authentication, which lifts this check. Dashboard authentication needs the config store: with config_store.enabled: false it cannot be turned on, so listing the origin is the only option.Header Filtering
Controls whichx-bf-eh-* extra headers are forwarded to upstream LLM providers.
When both
allowlist and denylist are empty, all x-bf-eh-* headers pass through. Specifying an allowlist enables strict whitelist mode - only listed headers are forwarded.
Compat Shims
Compatibility flags that let Bifrost silently adapt request/response shapes for SDK integrations.MCP Agent Settings
Async Jobs
Prometheus Labels
Add custom labels to every Prometheus metric emitted by Bifrost:Authentication
governance.auth_config protects the Bifrost dashboard and management API with username/password auth.
A top-level
auth_config is also accepted for backwards compatibility, but governance.auth_config is the preferred location.Encryption Key
Global Proxy
The global outbound proxy is the one on the dashboard’s Config → Proxy page, including which components send their outbound requests through it. Declare it as a top-levelproxy_config (not to be confused with a provider’s own proxy_config):

