Skip to content

v0.52.0

Latest

Choose a tag to compare

@toolhive-release-app toolhive-release-app released this 12 Oct 17:37
51adbda

🚀 Toolhive v0.52.0 is live!

This release adds TLS for Redis session storage (runtime and operator), makes thv llm setup and teardown safer by default, and fixes several authorization, OAuth and operator issues.

⚠️ Breaking Changes

  • thv llm teardown now purges cached tokens by default — a full teardown deletes cached OIDC tokens and fails if cleanup fails; pass --keep-tokens to keep the old behavior (migration guide) (#6733)
  • DCRCredentialStore gained a method — out-of-tree implementations of pkg/authserver/storage.DCRCredentialStore no longer compile until they add UpdateDCRCredentialsIfUnchanged (migration guide) (#6758)
Migration guide: thv llm teardown purges cached tokens by default

Affects CLI users and scripts that run thv llm teardown. Cleanup is local only: tokens are deleted from the secrets provider, not revoked at the identity provider.

Before

# Tokens survived teardown unless you opted in
thv llm teardown
thv llm teardown --purge-tokens

After

# Full teardown (no configured tools remain) purges cached tokens
thv llm teardown
# Keep tokens for a later setup
thv llm teardown --keep-tokens
# Targeted teardown still keeps tokens; --purge-tokens deletes them even when other tools remain
thv llm teardown <tool> --purge-tokens

Migration steps

  1. If a script relied on tokens surviving a full teardown so a later thv llm setup could skip re-authentication, add --keep-tokens.
  2. Teardown now exits non-zero if the secrets provider is unavailable or token listing or deletion fails (these were warnings before). Handle the failure, or pass --keep-tokens to skip the purge.
  3. --keep-tokens and --purge-tokens are mutually exclusive.
  4. Go callers: llm.Teardown has new parameters and llm.PurgeTokens now returns an error.

PR: #6733 — Closes #6732

Migration guide: DCRCredentialStore gained a method

Affects only Go code outside this repository that implements DCRCredentialStore (including hand-written mocks). The built-in memory and Redis stores are already updated.

Before

type DCRCredentialStore interface {
    StoreDCRCredentialsIfAbsent(...)
    UpdateDCRCredentialsIfPresent(...)
    // ...
}

After

type DCRCredentialStore interface {
    // ...existing methods...
    UpdateDCRCredentialsIfUnchanged(ctx context.Context, creds *DCRCredentials, expected *DCRCredentials) error
}

Migration steps

  1. Add UpdateDCRCredentialsIfUnchanged(ctx, creds, expected) to your implementation.
  2. Overwrite the row at creds.Key only if the stored row still equals expected.
  3. Return a wrapped ErrNotFound if the row is absent and the new ErrDCRCredentialsChanged if it differs; write nothing in either case.
  4. Reject a nil expected, or one whose Key differs from creds.Key.

PR: #6758

🆕 New Features

  • Redis session storage supports TLS in the proxy runner, vMCP and their rate limiters, with system roots or a private CA bundle (#6731)
  • MCPServer, MCPRemoteProxy and VirtualMCPServer accept spec.sessionStorage.tls, including caCertSecretRef for a private CA; a startup WARN is now logged when Redis session storage runs without TLS, so log-based alerting may fire for existing plaintext setups (#6767)
  • thv llm setup now configures Claude Code for one-hour prompt caching by default; re-run setup to pick it up, or use --short-prompt-cache to opt out (#6515)

🐛 Bug Fixes

  • spec.secrets on MCPServer accepts multiple keys of the same Secret; re-apply the operator-crds chart (#6690)
  • The token-exchange issuer policy no longer rejects an omitted allowMayAct with a wildcard delegate; re-apply the operator-crds chart (#6532)
  • Config resources are deleted promptly once their last referrer goes away instead of lingering up to 30 seconds (#6768)
  • Cedar policies can use extension claims from RFC 7662 introspection (such as roles); policies that referenced these claims will now see real values, so review any that were written around them being absent (#6707)
  • Authz-filtered tools/list, prompts/list and resources/list responses keep the members the backend sent (including MCP 2026-07-28 resultType), always carry Cache-Control: private, no-store, and reject ambiguous duplicate or aliased annotation members (#6709)
  • The embedded auth server no longer cuts off slow upstream identity-provider token endpoints at 10 seconds, which could leave a revoked refresh token stored (#6755)

🧹 Misc

  • Add a shared JWT claim string-array decoder; Cedar behavior is unchanged (#6738)
  • Clarify priority-conflict documentation and strengthen regression coverage (#6716)
  • Clarify operator Helm values descriptions (#6771)
  • Reduce Podman network normalization complexity (#6809)
  • Drop the ping step from the remote MCP server e2e test (#6766)
  • Use exact version comments on artifact actions (#6761)
  • Add alex-feel to MAINTAINERS (#6808)

📦 Dependencies

Module Version
charm.land/bubbletea/v2 v2.1.0
github.com/aws/aws-sdk-go-v2 v1.47.2
github.com/aws/aws-sdk-go-v2/config v1.33.8
github.com/aws/aws-sdk-go-v2/service/sts v1.51.3
github.com/cenkalti/backoff/v7 v7.0.1
github.com/getsentry/sentry-go (+ otel, otel/otlp) v0.50.0
github.com/go-git/go-git/v5 v5.19.3
github.com/go-git/go-billy/v5 v5.9.2
github.com/Microsoft/go-winio v0.6.3
github.com/moby/moby/client v0.6.2
github.com/moby/moby/api v1.56.1
github.com/prometheus/common v0.72.0
github.com/redis/go-redis/v9 v9.23.0
github.com/shirou/gopsutil/v4 v4.26.9
github.com/spiffe/go-spiffe/v2 v2.9.0
github.com/stacklok/toolhive-catalog v0.20261005.0
github.com/stacklok/toolhive-core v0.0.51
github.com/tidwall/gjson v1.20.0
go.opentelemetry.io/otel (and SDK/exporters) v1.47.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.72.0
modernc.org/sqlite v1.60.1
sigs.k8s.io/controller-runtime v0.25.2
ghcr.io/modelcontextprotocol/inspector 2.9.0
anchore/sbom-action v0.24.3
anthropics/claude-code-action v1.0.241
Full commit log

What's Changed

Full Changelog: v0.51.4...v0.52.0

🔗 Full changelog: v0.51.4...v0.52.0