AI Agents

  • Removed

    • BREAKING: JWT mode. muster is not an identity provider: dex is the sole SSO authority. The enableJWTMode and jwtSigningKey/jwtSigningKeyFile config keys, the signing-key loading, and the chart’s jwt-signing-key Secret plumbing are removed; muster issues only opaque access tokens and has no signing key, so no muster-signed token can exist. forwardToken backends receive the upstream dex ID token (or, for sessions established by a trusted-issuer bearer, that IdP-issued token) byte-identical — never a muster-signed token — and validate it against the IdP’s issuer/JWKS, never against muster. The self-issued RFC 8693 exchange at /oauth/token (which signed muster tokens) is permanently disabled and refuses issuance; agent/OBO flows use dex-issued tokens (exchange at dex, e.g. per-backend tokenExchange / auth.mode: exchange). Deployments that set enableJWTMode must drop the key (the chart schema now rejects it) and reconfigure any backend that trusted muster’s JWKS to trust dex instead. This reverses the muster-signed-token direction of the forward-token refactor and supersedes its “backends must trust muster’s issuer/JWKS” deployment note; the BDD scenarios obo-token-forward* are replaced by dex-token-forward*, which pin that the forwarded delegation chain is dex-minted and that muster refuses to issue tokens.
  • Changed

    • muster refuses to start when a tokenExchangeBroker target lacks dexTokenEndpoint, naming the misconfigured audience, instead of surfacing an unattributed error on the first exchange request. The chart’s values.schema.json requires the key as well.
    • A token-forwarding connect failure now logs the forwarded token’s issuer (the iss claim only — never the token) with a hint that the backend must trust that issuer’s JWKS, so a backend that does not yet trust muster’s issuer is attributable from the log instead of a bare initialize error.
    • The aggregator forwards the validated inbound bearer to forwardToken backends on each request instead of issuing a per-backend token, so the on-behalf-of token (including its nested act delegation chain) reaches the backend byte-identical. When the request carries no forwardable bearer (the background listen stream, opaque-token sessions), the session’s stored upstream ID token is forwarded as before.
    • On-behalf-of token exchange at /oauth/token no longer requires a broker target: a request without an audience takes mcp-oauth’s self-issued path and the issued token’s aud defaults to muster’s resourceIdentifier. Requests with an audience keep the brokered downstream Dex exchange.
    • The self-issued exchange only mints tokens for muster’s own audience: TokenExchangeAllowedResources is pinned to the resourceIdentifier, so a request naming any other RFC 8707 resource is refused with invalid_target. Previously the allowlist was unset (disabled) and any caller holding a trusted-issuer token could obtain a muster-signed token for an arbitrary audience. Tokens for other audiences go through the brokered path, which requires client authentication and a per-client audience allowlist.
    • M2M (machine-to-machine) token exchange. The oauth.server.tokenExchangeBroker.workloadAudiences, workloadGroupGrants, and actorDelegationPolicy config keys are removed, along with broker-granted identity injection (granted.subject / granted.groups). On-behalf-of (OBO) delegation is unchanged and now accepts any actor validated against the trusted issuers; the impersonated subject’s downstream authorization governs access.
    • The github-app broker target type and its githubApp config block. The only remaining broker target type is oidc-exchange.

    Removed

    • localMint downstream auth. The auth.localMint MCPServer CRD field and its admission rules, the local-mint broker target type and the target type key, and the oauth.server.tokenExchangeBroker.delegateToSelf config key are removed. Backends that used localMint switch to forwardToken: true and validate the forwarded token against muster’s JWKS. Upgrade note: applying the new CRD makes the Kubernetes API server silently prune spec.auth.localMint from existing MCPServer resources — the schema is structural, so there is no validation error and a GitOps apply succeeds. The affected backend is then left with no downstream-auth mode: muster’s calls reach it unauthenticated, the backend answers 401, and its tools disappear from sessions without any apply-time failure. Migrate every MCPServer that sets auth.localMint to auth.forwardToken: true (with the backend configured to trust muster’s issuer/JWKS) before or together with this upgrade.
    • The X-Actor-Token request header. The actor token is presented once as the RFC 8693 actor_token parameter at /oauth/token; /mcp requests carry only the issued on-behalf-of token as the bearer.

    Fixed

    • Data race in the token-forwarding connection header function, which mutates a per-connection failure counter that mcp-go invokes concurrently from the listener goroutine and tool-call goroutines, so under load the stale-connection eviction could double-fire (double eviction/revoke). Counter access is now synchronized. (#939)
  • Added

    Full Changelog: https://github.com/giantswarm/agentic-platform/compare/v1.21.0...v1.22.0

  • Changed

    Full Changelog: https://github.com/giantswarm/muster/compare/v0.23.4...v0.23.5

  • Changed

    Full Changelog: https://github.com/giantswarm/klaus/compare/v0.0.271...v0.0.272

  • Changed

    Full Changelog: https://github.com/giantswarm/klaus-operator/compare/v0.0.125...v0.0.126

  • Fixed

    Full Changelog: https://github.com/giantswarm/klausctl/compare/v0.2.31...v0.2.32

  • Changed

    Full Changelog: https://github.com/giantswarm/klaus-operator/compare/v0.0.124...v0.0.125

  • Fixed

    Full Changelog: https://github.com/giantswarm/klaus-operator/compare/v0.0.123...v0.0.124

  • Changed

    Full Changelog: https://github.com/giantswarm/klaus/compare/v0.0.270...v0.0.271