Skip to content

feat: add tlsConfig (insecureSkipVerify, caCertPem) for HTTP/SSE MCP client connections in Bifrost Helm chart - #3783

Merged
Pratham-Mishra04 merged 1 commit into
devfrom
05-27-chore_add_support_to_config_json_and_helm_chart
May 28, 2026
Merged

feat: add tlsConfig (insecureSkipVerify, caCertPem) for HTTP/SSE MCP client connections in Bifrost Helm chart#3783
Pratham-Mishra04 merged 1 commit into
devfrom
05-27-chore_add_support_to_config_json_and_helm_chart

Conversation

@BearTS

@BearTS BearTS commented May 26, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds TLS configuration support (tlsConfig) for HTTP and SSE MCP client connections in the Bifrost Helm chart, allowing operators to connect to MCP servers that use self-signed or private CA certificates, or to disable TLS verification in development/testing environments.

Changes

  • Added tls_config object to the MCP client config JSON schema (config.schema.json) with insecure_skip_verify and ca_cert_pem fields.
  • Updated _helpers.tpl to map tlsConfig.insecureSkipVerifytls_config.insecure_skip_verify and tlsConfig.caCertPemtls_config.ca_cert_pem in the generated config JSON.
  • Added a commented example tlsConfig block in values.yaml for the clientConfigs[] array.
  • Documented the new fields in README.md under an "Upcoming" changelog entry and the values reference table.
  • caCertPem supports both a literal PEM string and an env.VAR_NAME reference for reading the certificate from an environment variable.
  • insecureSkipVerify takes priority over caCertPem when both are set; it is intended for development/testing only and is not recommended for production.

Type of change

  • Bug fix
  • Feature
  • Refactor
  • Documentation
  • Chore/CI

Affected areas

  • Core (Go)
  • Transports (HTTP)
  • Providers/Integrations
  • Plugins
  • UI (React)
  • Docs

How to test

Deploy the Helm chart with an MCP client config that uses a self-signed CA certificate:

bifrost:
  mcp:
    clientConfigs:
      - name: "example-https-mcp"
        connectionType: "http"
        connectionString: "https://my-internal-mcp.corp/mcp"
        tlsConfig:
          insecureSkipVerify: false
          caCertPem: "env.MY_MCP_CA_CERT"

Verify the generated ConfigMap contains the expected tls_config JSON:

helm template . -f values.yaml | grep -A5 tls_config

Expected output should include:

"tls_config": {
  "insecure_skip_verify": false,
  "ca_cert_pem": "env.MY_MCP_CA_CERT"
}

New config fields:

Field Description Default
bifrost.mcp.clientConfigs[].tlsConfig.insecureSkipVerify Disable TLS certificate verification (dev/test only) false
bifrost.mcp.clientConfigs[].tlsConfig.caCertPem PEM-encoded CA cert or env.VAR_NAME reference ""

Screenshots/Recordings

N/A

Breaking changes

  • No

Related issues

N/A

Security considerations

  • insecureSkipVerify: true disables TLS certificate verification entirely and should never be used in production environments. This is documented explicitly in the schema, README, and values comments.
  • caCertPem supports env.VAR_NAME references to avoid embedding sensitive certificate material directly in Helm values.

Checklist

  • I read docs/contributing/README.md and followed the guidelines
  • I added/updated tests where appropriate
  • I updated documentation where needed
  • I verified builds succeed (Go and UI)
  • I verified the CI pipeline passes locally if applicable

@coderabbitai

coderabbitai Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Review was skipped due to path filters

⛔ Files ignored due to path filters (5)
  • helm-charts/bifrost/README.md is excluded by none and included by none
  • helm-charts/bifrost/templates/_helpers.tpl is excluded by none and included by none
  • helm-charts/bifrost/values.schema.json is excluded by none and included by none
  • helm-charts/bifrost/values.yaml is excluded by none and included by none
  • transports/config.schema.json is excluded by none and included by none

CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including **/dist/** will override the default block on the dist directory, by removing the pattern from both the lists.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 99778788-b7f3-4983-93a6-5cbbc5275e33

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds TLS configuration support for MCP HTTP/SSE clients: JSON and Helm values schemas, Helm template mapping from tlsConfig to generated tls_config, example values, and README documentation updates.

Changes

MCP TLS Configuration

Layer / File(s) Summary
TLS Schema Definitions
transports/config.schema.json, helm-charts/bifrost/values.schema.json
Adds tls_config / tlsConfig objects with insecure_skip_verify/insecureSkipVerify and ca_cert_pem/caCertPem, disallowing additional TLS properties.
Helm Template Mapping
helm-charts/bifrost/templates/_helpers.tpl
Helm helper constructs a tls_config object when .tlsConfig is present and maps insecureSkipVerify and caCertPem into the rendered MCP client config.
Values Example & Documentation
helm-charts/bifrost/values.yaml, helm-charts/bifrost/README.md
Adds a commented example-https-mcp TLS example in values.yaml; README changelog and MCP parameter table document the new Helm fields and their mapping to generated JSON.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested reviewers

  • danpiths

Poem

🐰 A rabbit hops with cert in paw,

tls flags set, no need to gnaw,
Insecure skip or CA to paste,
MCP TLS now with tasteful haste,
Hop, deploy, and connections thaw.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the main feature addition: TLS configuration support (insecureSkipVerify and caCertPem) for HTTP/SSE MCP client connections in the Bifrost Helm chart.
Description check ✅ Passed The description provides a comprehensive explanation of the changes, including affected files, implementation details, testing instructions with examples, security considerations, and checklist completion status.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 05-27-chore_add_support_to_config_json_and_helm_chart

Comment @coderabbitai help to get the list of available commands and usage tips.

@BearTS BearTS changed the title chore: add support to config json and helm chart feat: add tlsConfig (insecureSkipVerify, caCertPem) for HTTP/SSE MCP client connections in Bifrost Helm chart May 26, 2026

BearTS commented May 26, 2026

Copy link
Copy Markdown
Contributor Author

@BearTS
BearTS marked this pull request as ready for review May 26, 2026 22:51
@BearTS
BearTS requested a review from a team as a code owner May 26, 2026 22:51
@coderabbitai
coderabbitai Bot requested a review from danpiths May 26, 2026 22:52
@greptile-apps

greptile-apps Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

Confidence Score: 5/5

Safe to merge; the Go backend already handles tls_config fully and the Helm layer correctly guards against emitting empty or inappropriate TLS objects.

All changed files are Helm chart wiring and schema documentation. The underlying Go implementation for MCPTLSConfig already exists and is well-tested. The template logic correctly uses hasKey for boolean handling and an empty-dict guard. The only findings are minor description inconsistencies (websocket omitted from schema descriptions) that do not affect runtime behavior.

Both schema description strings in transports/config.schema.json and helm-charts/bifrost/values.schema.json omit websocket despite the template handling it.

Important Files Changed

Filename Overview
helm-charts/bifrost/templates/_helpers.tpl Adds tlsConfig → tls_config mapping for http/sse/websocket connection types. Uses hasKey for the boolean insecureSkipVerify to handle explicit false, guards with if $tls to avoid emitting an empty object, and the connectionType check correctly excludes stdio/inprocess.
transports/config.schema.json Adds tls_config to the MCP client config schema, backed by existing Go structs (MCPTLSConfig). Description says "HTTP and SSE" but the template also handles websocket — description should be updated.
helm-charts/bifrost/values.schema.json Adds tlsConfig to the clientConfig object schema. Description says "HTTP and SSE" but websocket is a valid connectionType in the same enum and the template handles it — minor description inconsistency.
helm-charts/bifrost/values.yaml Adds a commented example for tlsConfig under clientConfigs. Comments are clear and include the env.VAR_NAME reference pattern.
helm-charts/bifrost/README.md Adds changelog entry and values reference table rows for the new tlsConfig fields. Documentation is accurate and includes the env.VAR_NAME reference pattern and production warnings.

Reviews (6): Last reviewed commit: "chore: add support to config json and he..." | Re-trigger Greptile

Comment thread helm-charts/bifrost/templates/_helpers.tpl Outdated
Comment thread transports/config.schema.json

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@helm-charts/bifrost/templates/_helpers.tpl`:
- Around line 956-966: The current mapping always sets tls_config when
$client.tlsConfig exists; update the block in _helpers.tpl to only build and set
the "tls_config" key ($cc "tls_config") when the client's connection type is one
of http, sse, or websocket (if you still accept that alias) by checking the
client's connection type (e.g. $client.connection.type or $client.type) before
creating $tls and calling set; keep the existing field mappings for
$client.tlsConfig.insecureSkipVerify and $client.tlsConfig.caCertPem but wrap
the whole mapping in a guard that tests the connection type against
"http","sse","websocket".

In `@helm-charts/bifrost/values.yaml`:
- Line 381: The YAML comment line containing "#   # [Upcoming] TLS configuration
for HTTP and SSE connection types." is stale; remove the "[Upcoming]" marker so
the comment reads "#   # TLS configuration for HTTP and SSE connection types."
to avoid misleading users—update the comment text in the same block (the TLS
example comment) accordingly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: bbae8f94-b2fe-42fd-b182-57345630fead

📥 Commits

Reviewing files that changed from the base of the PR and between 6ae7faf and 5f5e06c.

📒 Files selected for processing (4)
  • helm-charts/bifrost/README.md
  • helm-charts/bifrost/templates/_helpers.tpl
  • helm-charts/bifrost/values.yaml
  • transports/config.schema.json

Comment thread helm-charts/bifrost/templates/_helpers.tpl Outdated
Comment thread helm-charts/bifrost/values.yaml Outdated
@BearTS
BearTS force-pushed the 05-27-chore_add_support_to_config_json_and_helm_chart branch from 5f5e06c to 6215cf7 Compare May 26, 2026 23:10
Comment thread helm-charts/bifrost/templates/_helpers.tpl
@BearTS
BearTS force-pushed the 05-27-chore_add_support_to_config_json_and_helm_chart branch from 6215cf7 to 47a526b Compare May 27, 2026 06:58
coderabbitai[bot]
coderabbitai Bot previously approved these changes May 27, 2026
@BearTS
BearTS force-pushed the 05-27-chore_add_support_to_config_json_and_helm_chart branch from 47a526b to 1bafb9f Compare May 27, 2026 16:28
@BearTS
BearTS force-pushed the 05-27-feat_add_custom_ssl_support_in_mcp branch from 6ae7faf to 71ea8a2 Compare May 27, 2026 16:28
@BearTS
BearTS force-pushed the 05-27-chore_add_support_to_config_json_and_helm_chart branch from 1bafb9f to 0e8975b Compare May 27, 2026 20:20
@BearTS
BearTS force-pushed the 05-27-feat_add_custom_ssl_support_in_mcp branch from 71ea8a2 to cdea6c3 Compare May 27, 2026 20:20

Pratham-Mishra04 commented May 28, 2026

Copy link
Copy Markdown
Collaborator

Merge activity

  • May 28, 9:31 AM UTC: A user started a stack merge that includes this pull request via Graphite.
  • May 28, 9:35 AM UTC: Graphite rebased this pull request as part of a merge.
  • May 28, 9:36 AM UTC: @Pratham-Mishra04 merged this pull request with Graphite.

@Pratham-Mishra04
Pratham-Mishra04 changed the base branch from 05-27-feat_add_custom_ssl_support_in_mcp to graphite-base/3783 May 28, 2026 09:32
@Pratham-Mishra04
Pratham-Mishra04 changed the base branch from graphite-base/3783 to dev May 28, 2026 09:34
@Pratham-Mishra04
Pratham-Mishra04 dismissed coderabbitai[bot]’s stale review May 28, 2026 09:34

The base branch was changed.

@Pratham-Mishra04
Pratham-Mishra04 force-pushed the 05-27-chore_add_support_to_config_json_and_helm_chart branch from 0e8975b to d919262 Compare May 28, 2026 09:34
@Pratham-Mishra04
Pratham-Mishra04 merged commit 3bb7f4b into dev May 28, 2026
13 checks passed
@Pratham-Mishra04
Pratham-Mishra04 deleted the 05-27-chore_add_support_to_config_json_and_helm_chart branch May 28, 2026 09:36
akshaydeo pushed a commit that referenced this pull request May 29, 2026
…P client connections in Bifrost Helm chart (#3783)

## Summary

Adds TLS configuration support (`tlsConfig`) for HTTP and SSE MCP client connections in the Bifrost Helm chart, allowing operators to connect to MCP servers that use self-signed or private CA certificates, or to disable TLS verification in development/testing environments.

## Changes

- Added `tls_config` object to the MCP client config JSON schema (`config.schema.json`) with `insecure_skip_verify` and `ca_cert_pem` fields.
- Updated `_helpers.tpl` to map `tlsConfig.insecureSkipVerify` → `tls_config.insecure_skip_verify` and `tlsConfig.caCertPem` → `tls_config.ca_cert_pem` in the generated config JSON.
- Added a commented example `tlsConfig` block in `values.yaml` for the `clientConfigs[]` array.
- Documented the new fields in `README.md` under an "Upcoming" changelog entry and the values reference table.
- `caCertPem` supports both a literal PEM string and an `env.VAR_NAME` reference for reading the certificate from an environment variable.
- `insecureSkipVerify` takes priority over `caCertPem` when both are set; it is intended for development/testing only and is not recommended for production.

## Type of change

- [ ] Bug fix
- [x] Feature
- [ ] Refactor
- [ ] Documentation
- [ ] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (React)
- [x] Docs

## How to test

Deploy the Helm chart with an MCP client config that uses a self-signed CA certificate:

```yaml
bifrost:
  mcp:
    clientConfigs:
      - name: "example-https-mcp"
        connectionType: "http"
        connectionString: "https://my-internal-mcp.corp/mcp"
        tlsConfig:
          insecureSkipVerify: false
          caCertPem: "env.MY_MCP_CA_CERT"
```

Verify the generated ConfigMap contains the expected `tls_config` JSON:

```sh
helm template . -f values.yaml | grep -A5 tls_config
```

Expected output should include:
```json
"tls_config": {
  "insecure_skip_verify": false,
  "ca_cert_pem": "env.MY_MCP_CA_CERT"
}
```

**New config fields:**

| Field | Description | Default |
|---|---|---|
| `bifrost.mcp.clientConfigs[].tlsConfig.insecureSkipVerify` | Disable TLS certificate verification (dev/test only) | `false` |
| `bifrost.mcp.clientConfigs[].tlsConfig.caCertPem` | PEM-encoded CA cert or `env.VAR_NAME` reference | `""` |

## Screenshots/Recordings

N/A

## Breaking changes

- [x] No

## Related issues

N/A

## Security considerations

- `insecureSkipVerify: true` disables TLS certificate verification entirely and should never be used in production environments. This is documented explicitly in the schema, README, and values comments.
- `caCertPem` supports `env.VAR_NAME` references to avoid embedding sensitive certificate material directly in Helm values.

## Checklist

- [ ] I read `docs/contributing/README.md` and followed the guidelines
- [ ] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [ ] I verified builds succeed (Go and UI)
- [ ] I verified the CI pipeline passes locally if applicable
@akshaydeo akshaydeo mentioned this pull request May 29, 2026
18 tasks
akshaydeo added a commit that referenced this pull request May 29, 2026
## Summary

This PR releases **core v1.5.14**, **framework v1.3.14**, **transports v1.5.6**, and bumps all dependent plugins to their respective `.14` patch versions. It delivers a broad set of new capabilities across MCP authentication, key rotation, OTel metrics, Bedrock/Anthropic compatibility, and UI improvements, alongside a number of targeted bug fixes and refactors.

## Changes

- **Direct API Key Header** — Providers can now receive an API key passed directly via a request header (#3817)
- **MCP Per-User Auth** — Introduced `MCPCredentialStore` abstraction, per-user MCP credential reconciliation, and a new per-user header auth type with lazy-auth submission flow (#3656, #3702, #3703, #3704, #3705)
- **MCP TLS Configuration** — Added configurable TLS (`insecureSkipVerify`, `caCertPem`) for HTTP/SSE MCP client connections (#3779, #3783)
- **MCP Sessions Management** — Filter, search, and pagination on the MCP sessions list API and table, plus a `can_reauth` identity gate (#3823, #3824, #3825)
- **Key Rotation** — Keys now rotate on 401/402/403 responses; returns `502 upstream_credentials_exhausted` when all keys are permanently exhausted. Added `triggered_rotation` to `KeyAttemptRecord` and tightened `bifrost_key_rotation_events_total` semantics (#3430, #3491)
- **OTel Metrics** — Added OTel spec-compatible metrics (backward compatible) with provider cache and semantic cache attributes in metrics export (#3865, #3816)
- **Opus 4.8 Support** — System message handling and general compatibility for Opus 4.8 (#3868, #3878)
- **Dimension Rankings** — New `GetDimensionRankings` API and dashboard tabs for team, customer, BU, and user rankings (#3766)
- **Model Pricing Attributes** — `additional_attributes` field on model pricing rows with management API and UI editor (#3829)
- **Prompt Cache Retention** — Added prompt cache retention parameter on responses requests (#3810)
- **Tool Call Execution UI** — Inline tool-call execution, stop streaming, bulk execute/submit, and a redesigned tool-call UI (#3837, #3843)
- **Sheet Navigation** — Prev/next keyboard navigation and URL state across virtual key, MCP client, and routing rule sheets (#3739, #3740, #3744, #3745)
- **Bedrock Tool Name Truncation** — Truncate Bedrock function/tool names to the provider length limit
- **Bedrock Guardrails** — Set guardrail config in Bedrock requests built from responses (#3862)
- **Anthropic Tool Use** — Default `tool_use` input to `{}` when arguments are absent (#3880)
- **Responses Streaming** — Fixed responses stream events (#3838)
- **Compat Flow** — Fixed missing parameter parsing on the compat flow (#3881)
- **Passthrough API Version** — Set a default API version in passthrough requests as a fallback (#3853)
- **Virtual Key Updates** — Avoid overriding optional fields during virtual key update (#3855)
- **User-Mode Flows** — Gate user-mode flows on caller `user_id`, skip temp token mint, and unify flow/credential kind filtering for pending flows (#3841, #3859)
- **Partial Tool Calls** — Handle partial tool call execution failures and return successful results (#3849)
- **URL Query Escaping** — Support escaped characters in URL query parameters (#3826)
- **MCP Auth Errors** — Inline banner and retry support for MCP auth-required errors (#3856)
- **Renamed Resolvers** — `staticHeadersResolver`/`serverOAuthResolver` renamed to `sharedHeadersResolver`/`sharedOAuthResolver` (#3840)
- **Starlark Nested Tool Calls** — Exposed `RunWithPluginPipeline` on `ClientManager` and routed Starlark nested tool calls through the canonical plugin gate (#3794)
- **Deferred-Fill OAuth Removed** — Removed deferred-fill user-mode OAuth flow support (#3839)
- **Go 1.26.3** — Upgraded toolchain to Go 1.26.3 (#3782)

## Type of change

- [x] Bug fix
- [x] Feature
- [x] Refactor
- [ ] Documentation
- [x] Chore/CI

## Affected areas

- [x] Core (Go)
- [x] Transports (HTTP)
- [x] Providers/Integrations
- [x] Plugins
- [x] UI (React)
- [ ] Docs

## How to test

```sh
# Core/Transports
go version  # should report go1.26.3
go test ./...

# UI
cd ui
pnpm i || npm i
pnpm test || npm test
pnpm build || npm run build
```

- Validate MCP per-user auth by configuring a per-user header auth type and confirming credentials are stored and reconciled on virtual key and MCP client changes.
- Validate key rotation by triggering a 401/402/403 from an upstream provider and confirming rotation occurs; exhaust all keys and confirm a `502 upstream_credentials_exhausted` is returned.
- Validate OTel metrics output includes `provider_cache` and `semantic_cache` attributes.
- Validate Bedrock requests with tool names exceeding the provider limit are truncated correctly.
- Validate Opus 4.8 system message handling by sending a request with a system message to an Opus 4.8 endpoint.

## Breaking changes

- [x] Yes
- [ ] No

The deferred-fill user-mode OAuth flow has been removed (#3839). Any integrations relying on that flow must migrate to the new per-user credential store approach. The `staticHeadersResolver` and `serverOAuthResolver` identifiers have been renamed to `sharedHeadersResolver` and `sharedOAuthResolver` respectively (#3840); any direct references must be updated.

## Related issues

#3817, #3656, #3702, #3703, #3704, #3705, #3779, #3783, #3823, #3824, #3825, #3430, #3491, #3865, #3816, #3868, #3878, #3766, #3829, #3810, #3837, #3843, #3739, #3740, #3744, #3745, #3862, #3880, #3838, #3881, #3853, #3855, #3841, #3859, #3849, #3826, #3856, #3840, #3794, #3839, #3782, #3724, #3814, #3836, #3869, #3886

## Security considerations

- MCP per-user credentials are stored via the new `MCPCredentialStore` abstraction; ensure the backing store is appropriately access-controlled and that credential values are encrypted at rest.
- The direct API key header feature passes provider secrets via HTTP headers; ensure TLS is enforced on all ingress paths and that headers are not logged in plaintext.
- User-mode flows are now gated on `caller user_id` and temp token minting is skipped where appropriate, reducing the surface for privilege escalation.
- TLS configuration for MCP HTTP/SSE connections supports `insecureSkipVerify`; this should only be enabled in controlled environments.

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
@akshaydeo akshaydeo mentioned this pull request May 29, 2026
akshaydeo added a commit that referenced this pull request May 29, 2026
## ✨ Features

- **Direct API Key Header** - Pass a provider API key directly via
request header (#3817)
- **MCP Per-User Authentication** - New per-user header auth type with
credential storage
  and lazy-auth submission flow (#3703, #3704, #3705)
- **MCP TLS Configuration** - Configurable TLS (insecureSkipVerify,
caCertPem) for HTTP/SSE
  MCP client connections (#3779, #3783)
- **MCP Sessions Management** - Filter, search, and pagination on the
MCP sessions list API
  and table, plus a can_reauth identity gate (#3823, #3824, #3825)
- **Tool Call Execution UI** - Inline tool-call execution, stop
streaming, bulk
  execute/submit, and a redesigned tool-call UI (#3837, #3843)
- **Dimension Rankings Dashboard** - New dashboard tabs for team,
customer, BU, and user
  rankings, backed by a GetDimensionRankings API (#3766)
- **Model Pricing Attributes** - additional_attributes on model pricing
rows with management
  API and UI editor (#3829)
- **Prompt Cache Retention** - Prompt cache retention parameter on
responses requests
  (#3810)
- **Opus 4.8 Support** - System message handling and compatibility for
Opus 4.8 (#3878,
  #3868)
  - **Key Rotation** - Rotate keys on 401/402/403 and return 502
upstream_credentials_exhausted when all keys are permanently dead
(#3491)
- **OTel Metrics** - OTel spec compatible metrics plus provider and
semantic cache
  attributes in metrics export (#3865, #3816)
- **Sheet Navigation** - Prev/next keyboard navigation and URL state
across virtual key, MCP
  client, and routing rule sheets (#3739, #3740, #3744, #3745)
  - **Go 1.26.3** - Upgraded toolchain to Go 1.26.3 (#3782)

  ## 🐞 Fixed

- **Bedrock Tool Names** - Truncate Bedrock function/tool names to the
provider length limit
- **Bedrock Guardrails** - Set guardrail config in Bedrock request built
from responses
  (#3862)
- **Anthropic Tool Use** - Default Anthropic tool_use input to {} when
arguments are absent
  (#3880)
  - **Responses Streaming** - Fixed responses stream events (#3838)
- **Compat Flow** - Fixed missing parameter parsing on the compat flow
(#3881)
- **Passthrough API Version** - Set a default API version in passthrough
requests as a
  fallback (#3853)
- **Virtual Key Updates** - Avoid overriding optional fields during
virtual key update
  (#3855)
- **User-Mode Flows** - Gate user-mode flows on caller user_id, skip
temp token mint, and
  unify flow/credential kind filtering for pending flows (#3841, #3859)
- **Partial Tool Calls** - Handle partial tool call execution failures
and return successful
  results (#3849)
- **URL Query Escaping** - Support escaped characters in URL query
parameters (#3826)
- **MCP Auth Errors** - Inline banner and retry support for MCP
auth-required errors (#3856)
- **JSON Editor Height** - Cap JSON editor max height at 400px in
message views (#3842)
akhsaul pushed a commit to akhsaul/bifrost that referenced this pull request Aug 27, 2026
…P client connections in Bifrost Helm chart (maximhq#3783)

## Summary

Adds TLS configuration support (`tlsConfig`) for HTTP and SSE MCP client connections in the Bifrost Helm chart, allowing operators to connect to MCP servers that use self-signed or private CA certificates, or to disable TLS verification in development/testing environments.

## Changes

- Added `tls_config` object to the MCP client config JSON schema (`config.schema.json`) with `insecure_skip_verify` and `ca_cert_pem` fields.
- Updated `_helpers.tpl` to map `tlsConfig.insecureSkipVerify` → `tls_config.insecure_skip_verify` and `tlsConfig.caCertPem` → `tls_config.ca_cert_pem` in the generated config JSON.
- Added a commented example `tlsConfig` block in `values.yaml` for the `clientConfigs[]` array.
- Documented the new fields in `README.md` under an "Upcoming" changelog entry and the values reference table.
- `caCertPem` supports both a literal PEM string and an `env.VAR_NAME` reference for reading the certificate from an environment variable.
- `insecureSkipVerify` takes priority over `caCertPem` when both are set; it is intended for development/testing only and is not recommended for production.

## Type of change

- [ ] Bug fix
- [x] Feature
- [ ] Refactor
- [ ] Documentation
- [ ] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (React)
- [x] Docs

## How to test

Deploy the Helm chart with an MCP client config that uses a self-signed CA certificate:

```yaml
bifrost:
  mcp:
    clientConfigs:
      - name: "example-https-mcp"
        connectionType: "http"
        connectionString: "https://my-internal-mcp.corp/mcp"
        tlsConfig:
          insecureSkipVerify: false
          caCertPem: "env.MY_MCP_CA_CERT"
```

Verify the generated ConfigMap contains the expected `tls_config` JSON:

```sh
helm template . -f values.yaml | grep -A5 tls_config
```

Expected output should include:
```json
"tls_config": {
  "insecure_skip_verify": false,
  "ca_cert_pem": "env.MY_MCP_CA_CERT"
}
```

**New config fields:**

| Field | Description | Default |
|---|---|---|
| `bifrost.mcp.clientConfigs[].tlsConfig.insecureSkipVerify` | Disable TLS certificate verification (dev/test only) | `false` |
| `bifrost.mcp.clientConfigs[].tlsConfig.caCertPem` | PEM-encoded CA cert or `env.VAR_NAME` reference | `""` |

## Screenshots/Recordings

N/A

## Breaking changes

- [x] No

## Related issues

N/A

## Security considerations

- `insecureSkipVerify: true` disables TLS certificate verification entirely and should never be used in production environments. This is documented explicitly in the schema, README, and values comments.
- `caCertPem` supports `env.VAR_NAME` references to avoid embedding sensitive certificate material directly in Helm values.

## Checklist

- [ ] I read `docs/contributing/README.md` and followed the guidelines
- [ ] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [ ] I verified builds succeed (Go and UI)
- [ ] I verified the CI pipeline passes locally if applicable
akhsaul pushed a commit to akhsaul/bifrost that referenced this pull request Aug 27, 2026
## Summary

This PR releases **core v1.5.14**, **framework v1.3.14**, **transports v1.5.6**, and bumps all dependent plugins to their respective `.14` patch versions. It delivers a broad set of new capabilities across MCP authentication, key rotation, OTel metrics, Bedrock/Anthropic compatibility, and UI improvements, alongside a number of targeted bug fixes and refactors.

## Changes

- **Direct API Key Header** — Providers can now receive an API key passed directly via a request header (maximhq#3817)
- **MCP Per-User Auth** — Introduced `MCPCredentialStore` abstraction, per-user MCP credential reconciliation, and a new per-user header auth type with lazy-auth submission flow (maximhq#3656, maximhq#3702, maximhq#3703, maximhq#3704, maximhq#3705)
- **MCP TLS Configuration** — Added configurable TLS (`insecureSkipVerify`, `caCertPem`) for HTTP/SSE MCP client connections (maximhq#3779, maximhq#3783)
- **MCP Sessions Management** — Filter, search, and pagination on the MCP sessions list API and table, plus a `can_reauth` identity gate (maximhq#3823, maximhq#3824, maximhq#3825)
- **Key Rotation** — Keys now rotate on 401/402/403 responses; returns `502 upstream_credentials_exhausted` when all keys are permanently exhausted. Added `triggered_rotation` to `KeyAttemptRecord` and tightened `bifrost_key_rotation_events_total` semantics (maximhq#3430, maximhq#3491)
- **OTel Metrics** — Added OTel spec-compatible metrics (backward compatible) with provider cache and semantic cache attributes in metrics export (maximhq#3865, maximhq#3816)
- **Opus 4.8 Support** — System message handling and general compatibility for Opus 4.8 (maximhq#3868, maximhq#3878)
- **Dimension Rankings** — New `GetDimensionRankings` API and dashboard tabs for team, customer, BU, and user rankings (maximhq#3766)
- **Model Pricing Attributes** — `additional_attributes` field on model pricing rows with management API and UI editor (maximhq#3829)
- **Prompt Cache Retention** — Added prompt cache retention parameter on responses requests (maximhq#3810)
- **Tool Call Execution UI** — Inline tool-call execution, stop streaming, bulk execute/submit, and a redesigned tool-call UI (maximhq#3837, maximhq#3843)
- **Sheet Navigation** — Prev/next keyboard navigation and URL state across virtual key, MCP client, and routing rule sheets (maximhq#3739, maximhq#3740, maximhq#3744, maximhq#3745)
- **Bedrock Tool Name Truncation** — Truncate Bedrock function/tool names to the provider length limit
- **Bedrock Guardrails** — Set guardrail config in Bedrock requests built from responses (maximhq#3862)
- **Anthropic Tool Use** — Default `tool_use` input to `{}` when arguments are absent (maximhq#3880)
- **Responses Streaming** — Fixed responses stream events (maximhq#3838)
- **Compat Flow** — Fixed missing parameter parsing on the compat flow (maximhq#3881)
- **Passthrough API Version** — Set a default API version in passthrough requests as a fallback (maximhq#3853)
- **Virtual Key Updates** — Avoid overriding optional fields during virtual key update (maximhq#3855)
- **User-Mode Flows** — Gate user-mode flows on caller `user_id`, skip temp token mint, and unify flow/credential kind filtering for pending flows (maximhq#3841, maximhq#3859)
- **Partial Tool Calls** — Handle partial tool call execution failures and return successful results (maximhq#3849)
- **URL Query Escaping** — Support escaped characters in URL query parameters (maximhq#3826)
- **MCP Auth Errors** — Inline banner and retry support for MCP auth-required errors (maximhq#3856)
- **Renamed Resolvers** — `staticHeadersResolver`/`serverOAuthResolver` renamed to `sharedHeadersResolver`/`sharedOAuthResolver` (maximhq#3840)
- **Starlark Nested Tool Calls** — Exposed `RunWithPluginPipeline` on `ClientManager` and routed Starlark nested tool calls through the canonical plugin gate (maximhq#3794)
- **Deferred-Fill OAuth Removed** — Removed deferred-fill user-mode OAuth flow support (maximhq#3839)
- **Go 1.26.3** — Upgraded toolchain to Go 1.26.3 (maximhq#3782)

## Type of change

- [x] Bug fix
- [x] Feature
- [x] Refactor
- [ ] Documentation
- [x] Chore/CI

## Affected areas

- [x] Core (Go)
- [x] Transports (HTTP)
- [x] Providers/Integrations
- [x] Plugins
- [x] UI (React)
- [ ] Docs

## How to test

```sh
# Core/Transports
go version  # should report go1.26.3
go test ./...

# UI
cd ui
pnpm i || npm i
pnpm test || npm test
pnpm build || npm run build
```

- Validate MCP per-user auth by configuring a per-user header auth type and confirming credentials are stored and reconciled on virtual key and MCP client changes.
- Validate key rotation by triggering a 401/402/403 from an upstream provider and confirming rotation occurs; exhaust all keys and confirm a `502 upstream_credentials_exhausted` is returned.
- Validate OTel metrics output includes `provider_cache` and `semantic_cache` attributes.
- Validate Bedrock requests with tool names exceeding the provider limit are truncated correctly.
- Validate Opus 4.8 system message handling by sending a request with a system message to an Opus 4.8 endpoint.

## Breaking changes

- [x] Yes
- [ ] No

The deferred-fill user-mode OAuth flow has been removed (maximhq#3839). Any integrations relying on that flow must migrate to the new per-user credential store approach. The `staticHeadersResolver` and `serverOAuthResolver` identifiers have been renamed to `sharedHeadersResolver` and `sharedOAuthResolver` respectively (maximhq#3840); any direct references must be updated.

## Related issues

maximhq#3817, maximhq#3656, maximhq#3702, maximhq#3703, maximhq#3704, maximhq#3705, maximhq#3779, maximhq#3783, maximhq#3823, maximhq#3824, maximhq#3825, maximhq#3430, maximhq#3491, maximhq#3865, maximhq#3816, maximhq#3868, maximhq#3878, maximhq#3766, maximhq#3829, maximhq#3810, maximhq#3837, maximhq#3843, maximhq#3739, maximhq#3740, maximhq#3744, maximhq#3745, maximhq#3862, maximhq#3880, maximhq#3838, maximhq#3881, maximhq#3853, maximhq#3855, maximhq#3841, maximhq#3859, maximhq#3849, maximhq#3826, maximhq#3856, maximhq#3840, maximhq#3794, maximhq#3839, maximhq#3782, maximhq#3724, maximhq#3814, maximhq#3836, maximhq#3869, maximhq#3886

## Security considerations

- MCP per-user credentials are stored via the new `MCPCredentialStore` abstraction; ensure the backing store is appropriately access-controlled and that credential values are encrypted at rest.
- The direct API key header feature passes provider secrets via HTTP headers; ensure TLS is enforced on all ingress paths and that headers are not logged in plaintext.
- User-mode flows are now gated on `caller user_id` and temp token minting is skipped where appropriate, reducing the surface for privilege escalation.
- TLS configuration for MCP HTTP/SSE connections supports `insecureSkipVerify`; this should only be enabled in controlled environments.

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
akhsaul pushed a commit to akhsaul/bifrost that referenced this pull request Aug 27, 2026
## ✨ Features

- **Direct API Key Header** - Pass a provider API key directly via
request header (maximhq#3817)
- **MCP Per-User Authentication** - New per-user header auth type with
credential storage
  and lazy-auth submission flow (maximhq#3703, maximhq#3704, maximhq#3705)
- **MCP TLS Configuration** - Configurable TLS (insecureSkipVerify,
caCertPem) for HTTP/SSE
  MCP client connections (maximhq#3779, maximhq#3783)
- **MCP Sessions Management** - Filter, search, and pagination on the
MCP sessions list API
  and table, plus a can_reauth identity gate (maximhq#3823, maximhq#3824, maximhq#3825)
- **Tool Call Execution UI** - Inline tool-call execution, stop
streaming, bulk
  execute/submit, and a redesigned tool-call UI (maximhq#3837, maximhq#3843)
- **Dimension Rankings Dashboard** - New dashboard tabs for team,
customer, BU, and user
  rankings, backed by a GetDimensionRankings API (maximhq#3766)
- **Model Pricing Attributes** - additional_attributes on model pricing
rows with management
  API and UI editor (maximhq#3829)
- **Prompt Cache Retention** - Prompt cache retention parameter on
responses requests
  (maximhq#3810)
- **Opus 4.8 Support** - System message handling and compatibility for
Opus 4.8 (maximhq#3878,
  maximhq#3868)
  - **Key Rotation** - Rotate keys on 401/402/403 and return 502
upstream_credentials_exhausted when all keys are permanently dead
(maximhq#3491)
- **OTel Metrics** - OTel spec compatible metrics plus provider and
semantic cache
  attributes in metrics export (maximhq#3865, maximhq#3816)
- **Sheet Navigation** - Prev/next keyboard navigation and URL state
across virtual key, MCP
  client, and routing rule sheets (maximhq#3739, maximhq#3740, maximhq#3744, maximhq#3745)
  - **Go 1.26.3** - Upgraded toolchain to Go 1.26.3 (maximhq#3782)

  ## 🐞 Fixed

- **Bedrock Tool Names** - Truncate Bedrock function/tool names to the
provider length limit
- **Bedrock Guardrails** - Set guardrail config in Bedrock request built
from responses
  (maximhq#3862)
- **Anthropic Tool Use** - Default Anthropic tool_use input to {} when
arguments are absent
  (maximhq#3880)
  - **Responses Streaming** - Fixed responses stream events (maximhq#3838)
- **Compat Flow** - Fixed missing parameter parsing on the compat flow
(maximhq#3881)
- **Passthrough API Version** - Set a default API version in passthrough
requests as a
  fallback (maximhq#3853)
- **Virtual Key Updates** - Avoid overriding optional fields during
virtual key update
  (maximhq#3855)
- **User-Mode Flows** - Gate user-mode flows on caller user_id, skip
temp token mint, and
  unify flow/credential kind filtering for pending flows (maximhq#3841, maximhq#3859)
- **Partial Tool Calls** - Handle partial tool call execution failures
and return successful
  results (maximhq#3849)
- **URL Query Escaping** - Support escaped characters in URL query
parameters (maximhq#3826)
- **MCP Auth Errors** - Inline banner and retry support for MCP
auth-required errors (maximhq#3856)
- **JSON Editor Height** - Cap JSON editor max height at 400px in
message views (maximhq#3842)
occcat pushed a commit to occcat/bifrost that referenced this pull request Sep 2, 2026
…P client connections in Bifrost Helm chart (maximhq#3783)

## Summary

Adds TLS configuration support (`tlsConfig`) for HTTP and SSE MCP client connections in the Bifrost Helm chart, allowing operators to connect to MCP servers that use self-signed or private CA certificates, or to disable TLS verification in development/testing environments.

## Changes

- Added `tls_config` object to the MCP client config JSON schema (`config.schema.json`) with `insecure_skip_verify` and `ca_cert_pem` fields.
- Updated `_helpers.tpl` to map `tlsConfig.insecureSkipVerify` → `tls_config.insecure_skip_verify` and `tlsConfig.caCertPem` → `tls_config.ca_cert_pem` in the generated config JSON.
- Added a commented example `tlsConfig` block in `values.yaml` for the `clientConfigs[]` array.
- Documented the new fields in `README.md` under an "Upcoming" changelog entry and the values reference table.
- `caCertPem` supports both a literal PEM string and an `env.VAR_NAME` reference for reading the certificate from an environment variable.
- `insecureSkipVerify` takes priority over `caCertPem` when both are set; it is intended for development/testing only and is not recommended for production.

## Type of change

- [ ] Bug fix
- [x] Feature
- [ ] Refactor
- [ ] Documentation
- [ ] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (React)
- [x] Docs

## How to test

Deploy the Helm chart with an MCP client config that uses a self-signed CA certificate:

```yaml
bifrost:
  mcp:
    clientConfigs:
      - name: "example-https-mcp"
        connectionType: "http"
        connectionString: "https://my-internal-mcp.corp/mcp"
        tlsConfig:
          insecureSkipVerify: false
          caCertPem: "env.MY_MCP_CA_CERT"
```

Verify the generated ConfigMap contains the expected `tls_config` JSON:

```sh
helm template . -f values.yaml | grep -A5 tls_config
```

Expected output should include:
```json
"tls_config": {
  "insecure_skip_verify": false,
  "ca_cert_pem": "env.MY_MCP_CA_CERT"
}
```

**New config fields:**

| Field | Description | Default |
|---|---|---|
| `bifrost.mcp.clientConfigs[].tlsConfig.insecureSkipVerify` | Disable TLS certificate verification (dev/test only) | `false` |
| `bifrost.mcp.clientConfigs[].tlsConfig.caCertPem` | PEM-encoded CA cert or `env.VAR_NAME` reference | `""` |

## Screenshots/Recordings

N/A

## Breaking changes

- [x] No

## Related issues

N/A

## Security considerations

- `insecureSkipVerify: true` disables TLS certificate verification entirely and should never be used in production environments. This is documented explicitly in the schema, README, and values comments.
- `caCertPem` supports `env.VAR_NAME` references to avoid embedding sensitive certificate material directly in Helm values.

## Checklist

- [ ] I read `docs/contributing/README.md` and followed the guidelines
- [ ] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [ ] I verified builds succeed (Go and UI)
- [ ] I verified the CI pipeline passes locally if applicable
occcat pushed a commit to occcat/bifrost that referenced this pull request Sep 2, 2026
## Summary

This PR releases **core v1.5.14**, **framework v1.3.14**, **transports v1.5.6**, and bumps all dependent plugins to their respective `.14` patch versions. It delivers a broad set of new capabilities across MCP authentication, key rotation, OTel metrics, Bedrock/Anthropic compatibility, and UI improvements, alongside a number of targeted bug fixes and refactors.

## Changes

- **Direct API Key Header** — Providers can now receive an API key passed directly via a request header (maximhq#3817)
- **MCP Per-User Auth** — Introduced `MCPCredentialStore` abstraction, per-user MCP credential reconciliation, and a new per-user header auth type with lazy-auth submission flow (maximhq#3656, maximhq#3702, maximhq#3703, maximhq#3704, maximhq#3705)
- **MCP TLS Configuration** — Added configurable TLS (`insecureSkipVerify`, `caCertPem`) for HTTP/SSE MCP client connections (maximhq#3779, maximhq#3783)
- **MCP Sessions Management** — Filter, search, and pagination on the MCP sessions list API and table, plus a `can_reauth` identity gate (maximhq#3823, maximhq#3824, maximhq#3825)
- **Key Rotation** — Keys now rotate on 401/402/403 responses; returns `502 upstream_credentials_exhausted` when all keys are permanently exhausted. Added `triggered_rotation` to `KeyAttemptRecord` and tightened `bifrost_key_rotation_events_total` semantics (maximhq#3430, maximhq#3491)
- **OTel Metrics** — Added OTel spec-compatible metrics (backward compatible) with provider cache and semantic cache attributes in metrics export (maximhq#3865, maximhq#3816)
- **Opus 4.8 Support** — System message handling and general compatibility for Opus 4.8 (maximhq#3868, maximhq#3878)
- **Dimension Rankings** — New `GetDimensionRankings` API and dashboard tabs for team, customer, BU, and user rankings (maximhq#3766)
- **Model Pricing Attributes** — `additional_attributes` field on model pricing rows with management API and UI editor (maximhq#3829)
- **Prompt Cache Retention** — Added prompt cache retention parameter on responses requests (maximhq#3810)
- **Tool Call Execution UI** — Inline tool-call execution, stop streaming, bulk execute/submit, and a redesigned tool-call UI (maximhq#3837, maximhq#3843)
- **Sheet Navigation** — Prev/next keyboard navigation and URL state across virtual key, MCP client, and routing rule sheets (maximhq#3739, maximhq#3740, maximhq#3744, maximhq#3745)
- **Bedrock Tool Name Truncation** — Truncate Bedrock function/tool names to the provider length limit
- **Bedrock Guardrails** — Set guardrail config in Bedrock requests built from responses (maximhq#3862)
- **Anthropic Tool Use** — Default `tool_use` input to `{}` when arguments are absent (maximhq#3880)
- **Responses Streaming** — Fixed responses stream events (maximhq#3838)
- **Compat Flow** — Fixed missing parameter parsing on the compat flow (maximhq#3881)
- **Passthrough API Version** — Set a default API version in passthrough requests as a fallback (maximhq#3853)
- **Virtual Key Updates** — Avoid overriding optional fields during virtual key update (maximhq#3855)
- **User-Mode Flows** — Gate user-mode flows on caller `user_id`, skip temp token mint, and unify flow/credential kind filtering for pending flows (maximhq#3841, maximhq#3859)
- **Partial Tool Calls** — Handle partial tool call execution failures and return successful results (maximhq#3849)
- **URL Query Escaping** — Support escaped characters in URL query parameters (maximhq#3826)
- **MCP Auth Errors** — Inline banner and retry support for MCP auth-required errors (maximhq#3856)
- **Renamed Resolvers** — `staticHeadersResolver`/`serverOAuthResolver` renamed to `sharedHeadersResolver`/`sharedOAuthResolver` (maximhq#3840)
- **Starlark Nested Tool Calls** — Exposed `RunWithPluginPipeline` on `ClientManager` and routed Starlark nested tool calls through the canonical plugin gate (maximhq#3794)
- **Deferred-Fill OAuth Removed** — Removed deferred-fill user-mode OAuth flow support (maximhq#3839)
- **Go 1.26.3** — Upgraded toolchain to Go 1.26.3 (maximhq#3782)

## Type of change

- [x] Bug fix
- [x] Feature
- [x] Refactor
- [ ] Documentation
- [x] Chore/CI

## Affected areas

- [x] Core (Go)
- [x] Transports (HTTP)
- [x] Providers/Integrations
- [x] Plugins
- [x] UI (React)
- [ ] Docs

## How to test

```sh
# Core/Transports
go version  # should report go1.26.3
go test ./...

# UI
cd ui
pnpm i || npm i
pnpm test || npm test
pnpm build || npm run build
```

- Validate MCP per-user auth by configuring a per-user header auth type and confirming credentials are stored and reconciled on virtual key and MCP client changes.
- Validate key rotation by triggering a 401/402/403 from an upstream provider and confirming rotation occurs; exhaust all keys and confirm a `502 upstream_credentials_exhausted` is returned.
- Validate OTel metrics output includes `provider_cache` and `semantic_cache` attributes.
- Validate Bedrock requests with tool names exceeding the provider limit are truncated correctly.
- Validate Opus 4.8 system message handling by sending a request with a system message to an Opus 4.8 endpoint.

## Breaking changes

- [x] Yes
- [ ] No

The deferred-fill user-mode OAuth flow has been removed (maximhq#3839). Any integrations relying on that flow must migrate to the new per-user credential store approach. The `staticHeadersResolver` and `serverOAuthResolver` identifiers have been renamed to `sharedHeadersResolver` and `sharedOAuthResolver` respectively (maximhq#3840); any direct references must be updated.

## Related issues

maximhq#3817, maximhq#3656, maximhq#3702, maximhq#3703, maximhq#3704, maximhq#3705, maximhq#3779, maximhq#3783, maximhq#3823, maximhq#3824, maximhq#3825, maximhq#3430, maximhq#3491, maximhq#3865, maximhq#3816, maximhq#3868, maximhq#3878, maximhq#3766, maximhq#3829, maximhq#3810, maximhq#3837, maximhq#3843, maximhq#3739, maximhq#3740, maximhq#3744, maximhq#3745, maximhq#3862, maximhq#3880, maximhq#3838, maximhq#3881, maximhq#3853, maximhq#3855, maximhq#3841, maximhq#3859, maximhq#3849, maximhq#3826, maximhq#3856, maximhq#3840, maximhq#3794, maximhq#3839, maximhq#3782, maximhq#3724, maximhq#3814, maximhq#3836, maximhq#3869, maximhq#3886

## Security considerations

- MCP per-user credentials are stored via the new `MCPCredentialStore` abstraction; ensure the backing store is appropriately access-controlled and that credential values are encrypted at rest.
- The direct API key header feature passes provider secrets via HTTP headers; ensure TLS is enforced on all ingress paths and that headers are not logged in plaintext.
- User-mode flows are now gated on `caller user_id` and temp token minting is skipped where appropriate, reducing the surface for privilege escalation.
- TLS configuration for MCP HTTP/SSE connections supports `insecureSkipVerify`; this should only be enabled in controlled environments.

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
occcat pushed a commit to occcat/bifrost that referenced this pull request Sep 2, 2026
## ✨ Features

- **Direct API Key Header** - Pass a provider API key directly via
request header (maximhq#3817)
- **MCP Per-User Authentication** - New per-user header auth type with
credential storage
  and lazy-auth submission flow (maximhq#3703, maximhq#3704, maximhq#3705)
- **MCP TLS Configuration** - Configurable TLS (insecureSkipVerify,
caCertPem) for HTTP/SSE
  MCP client connections (maximhq#3779, maximhq#3783)
- **MCP Sessions Management** - Filter, search, and pagination on the
MCP sessions list API
  and table, plus a can_reauth identity gate (maximhq#3823, maximhq#3824, maximhq#3825)
- **Tool Call Execution UI** - Inline tool-call execution, stop
streaming, bulk
  execute/submit, and a redesigned tool-call UI (maximhq#3837, maximhq#3843)
- **Dimension Rankings Dashboard** - New dashboard tabs for team,
customer, BU, and user
  rankings, backed by a GetDimensionRankings API (maximhq#3766)
- **Model Pricing Attributes** - additional_attributes on model pricing
rows with management
  API and UI editor (maximhq#3829)
- **Prompt Cache Retention** - Prompt cache retention parameter on
responses requests
  (maximhq#3810)
- **Opus 4.8 Support** - System message handling and compatibility for
Opus 4.8 (maximhq#3878,
  maximhq#3868)
  - **Key Rotation** - Rotate keys on 401/402/403 and return 502
upstream_credentials_exhausted when all keys are permanently dead
(maximhq#3491)
- **OTel Metrics** - OTel spec compatible metrics plus provider and
semantic cache
  attributes in metrics export (maximhq#3865, maximhq#3816)
- **Sheet Navigation** - Prev/next keyboard navigation and URL state
across virtual key, MCP
  client, and routing rule sheets (maximhq#3739, maximhq#3740, maximhq#3744, maximhq#3745)
  - **Go 1.26.3** - Upgraded toolchain to Go 1.26.3 (maximhq#3782)

  ## 🐞 Fixed

- **Bedrock Tool Names** - Truncate Bedrock function/tool names to the
provider length limit
- **Bedrock Guardrails** - Set guardrail config in Bedrock request built
from responses
  (maximhq#3862)
- **Anthropic Tool Use** - Default Anthropic tool_use input to {} when
arguments are absent
  (maximhq#3880)
  - **Responses Streaming** - Fixed responses stream events (maximhq#3838)
- **Compat Flow** - Fixed missing parameter parsing on the compat flow
(maximhq#3881)
- **Passthrough API Version** - Set a default API version in passthrough
requests as a
  fallback (maximhq#3853)
- **Virtual Key Updates** - Avoid overriding optional fields during
virtual key update
  (maximhq#3855)
- **User-Mode Flows** - Gate user-mode flows on caller user_id, skip
temp token mint, and
  unify flow/credential kind filtering for pending flows (maximhq#3841, maximhq#3859)
- **Partial Tool Calls** - Handle partial tool call execution failures
and return successful
  results (maximhq#3849)
- **URL Query Escaping** - Support escaped characters in URL query
parameters (maximhq#3826)
- **MCP Auth Errors** - Inline banner and retry support for MCP
auth-required errors (maximhq#3856)
- **JSON Editor Height** - Cap JSON editor max height at 400px in
message views (maximhq#3842)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants