Update module github.com/stacklok/toolhive to v0.17.0#118
Merged
Conversation
cf6fe60 to
f8706cb
Compare
jhrozek
approved these changes
Apr 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v0.16.0→v0.17.0Release Notes
stacklok/toolhive (github.com/stacklok/toolhive)
v0.17.0Compare Source
🚀 ToolHive v0.17.0 Release Notes
Release Date: April 9, 2026
Full Changelog: v0.16.0...v0.17.0
Breaking Changes
CRD Phase Value Standardization (
Running→Ready)All workload CRDs now use
Readyas the healthy phase value. MCPServer, EmbeddingServer, and MCPRegistry previously reportedRunningwhile MCPRemoteProxy, VirtualMCPServer, and MCPGroup usedReady. This inconsistency has been resolved.Migration guide:
.status.phase == "Running"to check for"Ready"instead.PR: #4689
MCPRegistry CRD v2 Config Format
The MCPRegistry CRD spec has been restructured to align with the registry server v2 config format. The previous flat
registries[]with inline source configs has been replaced with separate top-levelsources[]andregistries[]fields.Migration guide:
sources[]/registries[]split format instead of the flatregistries[]structure.cmd/thv-operator/REGISTRY.mdand theexamples/operator/mcp-registries/directory.configYAMLescape hatch is available (see below) as an alternative to the typed fields.PR: #4653
MCPRegistry Status Simplified
MCPRegistryStatus has been flattened from a three-phase model (SyncStatus + APIStatus + DeriveOverallPhase) to the standard Kubernetes workload pattern:
Phase+Readycondition +ReadyReplicas+URL.Migration guide:
.status.syncStatusor.status.apiStatus, switch to.status.phaseand.status.conditions(typeReady).kubectl wait --for=condition=Readynow works consistently for MCPRegistry, matching MCPServer and other workloads.PR: #4643
Deprecations
MCPRegistry Typed Spec Fields (Use
configYAMLInstead)The following MCPRegistry spec fields are deprecated and will be removed in a future release. Users should migrate to the new
configYAMLpassthrough path, which gives full control over the registry server'sconfig.yamlwithout the operator parsing or transforming it.spec.sources[]spec.configYAMLspec.registries[]spec.configYAMLspec.databaseConfigspec.configYAMLand usespec.pgpassSecretReffor the pgpass secretspec.authConfigspec.configYAMLspec.telemetryConfigspec.configYAMLMigration guide:
config.yamlcontent and set it asspec.configYAMLon your MCPRegistry resource.spec.volumesandspec.volumeMounts(standardcorev1types) for any secrets, ConfigMaps, or PVCs that the registry server needs.spec.pgpassSecretRefif you need the operator to handle pgpass file mounting withchmod 0600(the one detail that can't be expressed through volumes alone).configYAMLwith the legacy typed fields. CEL validation and the reconciler enforce this.PRs: #4693, #4653
New Features
MCPServerEntry — Zero-Infrastructure Catalog Entries
A new
MCPServerEntryCRD allows declaring remote MCP servers as lightweight catalog entries without deploying proxy pods. This is the headline feature of v0.17.0, delivered across multiple PRs:ValidateRemoteURLrejects URLs targeting internal/metadata endpoints (loopback, link-local, RFC 1918, cloud metadata) to prevent SSRF when fetching user-supplied URLs in-cluster. (#4697)Mutating Webhook Middleware (Phase 3)
Mutating webhook support with JSONPatch, enabling dynamic request/response mutation through configurable webhook endpoints. This completes the webhook middleware series. (#4372)
AuthServerRef — Dedicated Auth Server Configuration
New
authServerReffield on MCPServer and MCPRemoteProxy CRDs separates the embedded auth server fromexternalAuthConfigRef. Users can now configure both an embedded auth server for incoming client authentication and an outgoing token exchange (e.g., AWS STS) on the same resource. (#4644)Rate Limit Middleware
Rate limiting is now wired into the proxy runner middleware chain. The middleware:
tools/callrequests only; other methods pass through.-32029error andRetry-Afterheader.(#4652)
Registry Policy Gates with Type-Safe Configs
Separate runner and registry policy gates with dedicated type-safe config structs (
UpdateRegistryConfig,DeleteRegistryConfig), replacing the previousany-typed interface. (#4711)Decoupled configYAML Path for MCPRegistry
A new
configYAMLfield provides a raw YAML passthrough to the registry server, bypassing the operator's typed field parsing. Includesvolumes/volumeMountsfor user-managed volume wiring andpgpassSecretReffor operator-managed pgpass mounts. The two paths (typed fields vs. configYAML) are mutually exclusive. The existing typed fields are deprecated but fully functional. (#4693)Custom CA Certificate Support for OTLP Endpoints
New
caBundleReffield onMCPTelemetryOTelConfigreferences a ConfigMap containing a CA bundle. The operator mounts it into the pod and configures OTLP HTTP exporters withWithTLSClientConfig(), appending the custom CA to the system pool. (#4676)Discovery API:
supports_skillsFieldThe
GET /api/v1beta/discovery/clientsresponse now includessupports_skillsto indicate client skill support capabilities. (#4699)Bug Fixes
X-Forwarded-*headers signed by SigV4 were rewritten byhttputil.ReverseProxy, causing AWS 401 rejections when behind a gateway (e.g., ngrok). (#4670)excludeAllorfilter. Sessions now track all resolved tools internally so the workflow engine can coerce arguments for any backend tool, whether advertised or not. (#4671)http.ErrAbortHandlerinstead of treating it as an unexpected panic. (#4682)Security
localhost,kubernetes.default.svc,cluster.local, andmetadata.google.internalhostnames. (#4697)go.opentelemetry.io/otel/sdkfrom v1.42.0 to v1.43.0 (security fix). (#4686)Infrastructure & Internal
stableGo instead of pinning to patch versions. (#4713)testutilpackage for reuse. (#4654)Upgrade Guide Summary
Immediate (required for v0.17.0)
.status.phase == "Running"with.status.phase == "Ready"for MCPServer, EmbeddingServer, and MCPRegistry resources. This affects scripts, monitoring alerts, Helm hooks, and CI pipelines.registries[]format to the v2sources[]/registries[]split. Remove any PVC source references. Explicitly declare all sources including Kubernetes discovery sources (auto-injection has been removed)..status.syncStatus/.status.apiStatusto.status.phaseand.status.conditions[type=Ready]. The old sub-status types and themcpregistrystatuspackage no longer exist.Recommended (deprecated, will be removed in a future release)
configYAML: The typed spec fields (sources,registries,databaseConfig,authConfig,telemetryConfig) are deprecated. Write your registry server config as raw YAML inspec.configYAML, usespec.volumes/spec.volumeMountsfor secrets and ConfigMaps, andspec.pgpassSecretReffor pgpass. The two paths are mutually exclusive — you cannot mix them.Optional
authServerReffield to separate the embedded auth server fromexternalAuthConfigRef.Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.