Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
293 commits
Select commit Hold shift + click to select a range
1ea3e8b
Release v0.25.0 (#5084)
stacklokbot Apr 28, 2026
061d7fb
Drop legacy ToolHive registry format references from docs (#5087)
rdimitrov Apr 28, 2026
7193531
Update module github.com/stacklok/toolhive-catalog to v0.20260428.0 (…
renovate[bot] Apr 28, 2026
5d44c83
Update module github.com/shirou/gopsutil/v4 to v4.26.3 (#5061)
renovate[bot] Apr 28, 2026
704d0ae
Add interactive TUI dashboard for managing MCP servers (#4680)
peppescg Apr 28, 2026
ce4ee1f
Introduce LLMClientApp type to remove xcode from MCP API swagger enum…
yrobla Apr 28, 2026
60c99c3
Strengthen tool detection with binary presence check (#5083)
yrobla Apr 28, 2026
fc76559
Add awsSts auth type support to vMCP (#5019)
tgrunnagle Apr 28, 2026
3af3847
Update module github.com/moby/moby/client to v0.4.1 (#5059)
renovate[bot] Apr 28, 2026
ae1b32f
thv llm: complete setup/teardown orchestration (#5068)
yrobla Apr 28, 2026
1e4f71c
Align REGISTRY.md with configYAML-only MCPRegistry spec (#5088)
rdimitrov Apr 28, 2026
4cfa962
ci(release): mint GitHub App installation token instead of RELEASE_TO…
Nashon-Steffen Apr 28, 2026
5c54e54
Wire MCPRemoteProxy resourceOverrides.proxyDeployment.imagePullSecret…
JAORMX Apr 29, 2026
9c66743
Extract shared OAuthTokenSource into pkg/auth/tokensource (#5090)
yrobla Apr 29, 2026
239ea90
fix(llm): use correct binary name for VS Code Insiders detection (#5109)
yrobla Apr 29, 2026
6449009
Preserve user fields in EmbeddingServer podTemplateSpec merge (#5104)
JAORMX Apr 29, 2026
731112d
Add explicit imagePullSecrets field to VirtualMCPServer (#5107)
JAORMX Apr 29, 2026
e396150
Add explicit imagePullSecrets field to MCPRegistry (#5106)
JAORMX Apr 29, 2026
b27d310
Move llm setup/teardown orchestration to pkg/llm (#5112)
yrobla Apr 29, 2026
4b3fe62
Add missing encoding/json import to virtualmcpserver_deployment.go (#…
jhrozek Apr 29, 2026
09d8047
fix(test): use require instead of assert in TestBuildServerConfig to …
wucm667 Apr 29, 2026
4c23ade
Detect imagePullSecrets drift on proxy Deployments (#5113)
jhrozek Apr 29, 2026
1bbca89
Add operator-level defaultImagePullSecrets across all controllers (#5…
JAORMX Apr 29, 2026
a98c991
Fix non-expiring upstream token handling and storage TTL bugs (#5092)
jhrozek Apr 29, 2026
b59514f
Allow OAuth2 upstreams to omit userInfo config (#5094)
tgrunnagle Apr 29, 2026
ffefa61
Release v0.26.0 (#5131)
toolhive-release-app[bot] Apr 29, 2026
f1cdcfd
Make Cedar group entity type name configurable (#5121)
jhrozek Apr 29, 2026
d3922ce
Add authserver DCR discovery and config surface (#5041)
tgrunnagle Apr 29, 2026
12ac3c5
fix(authserver): send scope explicitly on upstream token refresh (#5096)
dallinstevens Apr 29, 2026
60636a0
test(e2e): add all-client LLM gateway e2e matrix + fix secret provide…
yrobla Apr 30, 2026
b094f75
Add --tls-skip-verify flag to thv llm setup, config set, and proxy st…
yrobla Apr 30, 2026
227045c
Auto-detect Docker Desktop socket on Linux (#5122)
samuv Apr 30, 2026
f6118bc
Consolidate ToolApplyConfig and LLMApplyConfig into pkg/llmgateway (#…
yrobla Apr 30, 2026
9ca1cfa
Include nested files when resolving git skills (#5139)
samuv Apr 30, 2026
4014710
Release v0.26.1 (#5140)
toolhive-release-app[bot] Apr 30, 2026
ac8fe8e
Support CIMD as preferred OAuth client registration for thv run (#5085)
amirejaz Apr 30, 2026
2743b28
Add --client flag to thv llm setup and teardown (#5144)
yrobla Apr 30, 2026
31e0307
Carry forward upstream refresh token on re-authorization (#5132)
jhrozek May 1, 2026
9f8256f
Add follow-up CIMD E2E and unit tests (#5130)
amirejaz May 1, 2026
b532156
Add authserver DCR credential store and resolver (#5042)
tgrunnagle May 1, 2026
dc74588
Allow standalone Redis in auth server storage (#4994)
reyortiz3 May 1, 2026
e928ab6
Fix golangci-lint failures from Go 1.26 linter upgrade (#5161)
reyortiz3 May 1, 2026
8c90184
Fix flaky VirtualMCPServer composite tool watch integration test (#5163)
reyortiz3 May 1, 2026
9057f7a
Correct Gemini CLI LLM gateway config to proxy mode (#5142)
yrobla May 4, 2026
655de22
Add --anthropic-path-prefix flag and auto-probe for Envoy AI Gateway …
yrobla May 5, 2026
8079916
Phase 5: Dynamic Webhook Middleware Kubernetes Controller (#4564)
Sanskarzz May 5, 2026
7d16db5
Automate Gemini CLI .env injection for LLM gateway proxy setup (#5175)
yrobla May 5, 2026
22f4769
Strengthen test assertions in llm_gateway_test.go using jsonPointerGe…
yrobla May 5, 2026
c1db1eb
Update github/codeql-action digest to e46ed2c (#5165)
renovate[bot] May 5, 2026
3a24ac1
Update aws-sdk-go-v2 monorepo (#5166)
renovate[bot] May 5, 2026
46c08c5
Preserve runconfig-checksum on pod template overrides (#5149)
jhrozek May 5, 2026
9cc163a
Populate LLMSetupNote for Gemini CLI to warn on --tls-skip-verify no-…
yrobla May 5, 2026
1f138ee
Publish thv llm commands and regenerate CLI reference docs (#5189)
yrobla May 5, 2026
11fa6fb
Set User-Agent on OAuth token refresh requests (#5168)
gkatz2 May 5, 2026
9572f6a
Wire authserver DCR resolver and add structured logs (#5044)
tgrunnagle May 5, 2026
37fcb1a
Return *oauth2.RetrieveError from tokenexchange (#5082)
jhrozek May 5, 2026
729e56a
Update module github.com/stacklok/toolhive-catalog to v0.20260504.0 (…
renovate[bot] May 6, 2026
bf3ebe7
fix(#5063): deterministically order env vars in DeployWorkload (#5064)
nalditopr May 6, 2026
ec284b0
fix(api,cli): stop auto-deriving RFC 8707 resource indicator from URL…
peppescg May 6, 2026
c146093
Expose DCR config in operator CRD for OAuth2 upstreams (#5069)
tgrunnagle May 6, 2026
59e86a5
Install local skill builds by name when tag differs (#5182)
samuv May 6, 2026
6a6b2b2
Add identity extractor for OAuth2 token responses (#5200)
jhrozek May 6, 2026
20ced20
Add Redis Cluster mode support to auth server storage (#5153)
reyortiz3 May 6, 2026
182a025
Release v0.27.0 (#5207)
toolhive-release-app[bot] May 7, 2026
6f85163
Redact webhook response body from returned errors (#5191)
JAORMX May 7, 2026
2b50a8d
Add omitempty to MCPGroupStatus JSON fields (#5181)
sharanrajt May 7, 2026
765de5f
Cap webhook middleware request body at 1 MB (#5192)
JAORMX May 7, 2026
86d9ffd
Update anthropics/claude-code-action digest to 9db782c (#5164)
renovate[bot] May 7, 2026
d5337ec
Update module github.com/stacklok/toolhive-catalog to v0.20260507.0 (…
renovate[bot] May 7, 2026
4aa2801
Add Windows named-pipe support to the API listener (#5201)
samuv May 7, 2026
ef5e8f7
Restrict Windows named-pipe DACL to creating user (#5214)
samuv May 7, 2026
6b39256
Add persistent DCRCredentialStore types and memory backend (#5186)
tgrunnagle May 7, 2026
c90d01e
Expose explicit primaryUpstreamProvider for Cedar authz on VirtualMCP…
tgrunnagle May 7, 2026
8d9eb28
Use shared pkg/oauthproto helpers in tokenexchange (#5212)
jhrozek May 7, 2026
7385e26
Skip WARN for non-POST Streamable HTTP requests (#5221)
danbarr May 7, 2026
a4d66b1
Move pipe and socket URL handling to net/url (#5215)
samuv May 8, 2026
746fe6d
Guard RedisStorageConfig CEL rules with has() checks (#5228)
reyortiz3 May 8, 2026
e943660
Pin npipe round-trip and pipe lifecycle invariants (#5216)
samuv May 8, 2026
03def40
Add Redis backend for DCRCredentialStore (#5195)
tgrunnagle May 8, 2026
9211a36
Wire persistent DCRCredentialStore into EmbeddedAuthServer (#5196)
tgrunnagle May 8, 2026
6733a54
Add CRD-runtime drift detection test framework (#5209)
ChrisJBurns May 9, 2026
34bb5fa
MCPGroup Ready column misleadingly shows MCPServersChecked condition …
Sanskarzz May 10, 2026
3345cea
Release v0.27.1 (#5244)
toolhive-release-app[bot] May 11, 2026
77402dd
Update github/codeql-action digest to 68bde55 (#5236)
renovate[bot] May 11, 2026
ed8b00a
Update anthropics/claude-code-action digest to 476e359 (#5235)
renovate[bot] May 11, 2026
d75c36e
Forward MCPServerEntry headerForward to vMCP outbound requests (#5239)
ChrisJBurns May 11, 2026
c68fdb2
Tolerate spec-violating list methods on backend init (#5232)
tgrunnagle May 11, 2026
db9eaa6
Bump github.com/in-toto/in-toto-golang from 0.9.0 to 0.11.0 (#5234)
dependabot[bot] May 11, 2026
42f765c
Use corev1.PullPolicy instead of string for EmbeddingServer ImagePull…
Sanskarzz May 11, 2026
52dece5
Namespace operator.* Helm helpers to prevent umbrella chart collision…
wucm667 May 11, 2026
1a322be
Recognize mcp-go authorization-required sentinels as auth (#5225)
lorr1 May 11, 2026
41b2f00
Delegate tokenexchange HTTP plumbing to pkg/oauthproto (#5226)
jhrozek May 11, 2026
d62dd0e
Bump github.com/go-git/go-git/v5 from 5.18.0 to 5.19.0 (#5249)
dependabot[bot] May 11, 2026
ab90ddc
Move tokenexchange under pkg/oauthproto (#5251)
jhrozek May 11, 2026
3240eeb
Apply OTEL config to workloads created via API (#5254)
reyortiz3 May 11, 2026
030594a
Fall back across Docker sockets on connect failure (#5246)
samuv May 12, 2026
6ec592d
fix(registry): surface legacy registry format as a structured API err…
peppescg May 12, 2026
952c9ef
Allow operators to inject baseline scopes into DCR registrations (#5233)
jhrozek May 12, 2026
50c583f
Collapse registry provider error ladder into a helper (#5261)
rdimitrov May 12, 2026
dcd1c74
Update module github.com/stacklok/toolhive-catalog to v0.20260511.0 (…
renovate[bot] May 12, 2026
b1977ec
Update goreleaser/goreleaser-action digest to 1a80836 (#5054)
renovate[bot] May 12, 2026
97b0cc3
Release v0.27.2 (#5263)
toolhive-release-app[bot] May 12, 2026
9d9604a
Update module github.com/modelcontextprotocol/registry to v1.7.7 [SEC…
renovate[bot] May 12, 2026
89f99c0
Add TOOLHIVE_SKIP_UPDATE_CHECK env var to disable update checks (#5264)
lujunsan May 12, 2026
110b9a7
Add RFC 7523 JWT Bearer grant package (#5262)
jhrozek May 12, 2026
3fa65b0
Extract DCR resolver into pkg/auth/dcr (#5198)
tgrunnagle May 12, 2026
8a3e9a8
Wire identityFromToken into the OAuth2 upstream provider (#5222)
jhrozek May 12, 2026
4204858
Add API endpoint to refresh the registry cache (#5268)
rdimitrov May 12, 2026
84f606a
Retry OAuth token refresh on infrastructure 4xx (#5170)
gkatz2 May 12, 2026
8fd704e
docs: remove stale chart version bump guidance from check-contributio…
wucm667 May 12, 2026
88667f7
Configure rate limits on VirtualMCPServer PR A (#5079)
Sanskarzz May 13, 2026
f180fa9
Migrate CLI OAuth flow to pkg/auth/dcr resolver (#5250)
tgrunnagle May 13, 2026
3dfed71
Drop legacy registry schema from release artifacts (#5273)
rdimitrov May 13, 2026
4d411ce
Watch authz ConfigMaps from VirtualMCPServer (#5271)
blkt May 14, 2026
8a269b6
Split api-workloads E2E suite into parallel entries (#5275)
jhrozek May 14, 2026
65e65ec
Update module github.com/stacklok/toolhive-catalog to v0.20260513.0 (…
renovate[bot] May 14, 2026
8c84c05
Add identityFromToken to MCPExternalAuthConfig CRD (#5269)
jhrozek May 14, 2026
594ae1e
Reset RunWorkload retry counter after stable run (#5172)
gkatz2 May 14, 2026
e0d270b
Drop per-component CRD and controller gating from operator install (#…
ChrisJBurns May 14, 2026
7697242
Fix wrapper name in api-compat workflow comments (#5282)
ChrisJBurns May 14, 2026
24fe776
Pin helm-crd-wrapper to v0.0.1 (#5283)
ChrisJBurns May 14, 2026
17451d1
Fix operator RBAC for event recording (#5243)
pl4nty May 14, 2026
836c570
Add GitHub Copilot CLI as a supported MCP client (#5287)
danbarr May 15, 2026
e5faa2f
Wire identityFromToken through authserver config and runtime (#5285)
jhrozek May 15, 2026
439977d
References printcolumn shows raw JSON instead of useful summary (#5267)
Sanskarzz May 15, 2026
4893b65
Fix audit events logged as INFO+2 instead of AUDIT (#5256)
kimjune01 May 15, 2026
7cffc52
Update github/codeql-action digest to 9e0d7b8 (#5295)
renovate[bot] May 17, 2026
92185fa
Update module github.com/cedar-policy/cedar-go to v1.6.1 (#5307)
renovate[bot] May 17, 2026
5a9d2b0
Update golang.org/x/exp/jsonrpc2 digest to 74f9aab (#5296)
renovate[bot] May 17, 2026
ca9ac2f
Update module github.com/google/cel-go to v0.28.1 (#5309)
renovate[bot] May 17, 2026
285e5d0
Deep-copy shared fixtures in mapMCPServerToWebhookConfig subtests (#5…
jhrozek May 18, 2026
51db3c6
Add --session-ttl flag and fix three session timeout bugs (#5117)
JAORMX May 18, 2026
78097d7
Update module github.com/charmbracelet/x/ansi to v0.11.7 (#5308)
renovate[bot] May 18, 2026
d1d1ee5
Deflake transientRefresher singleflight test (#5312)
jhrozek May 18, 2026
1f00bdb
Move HeaderForward helpers to pkg/vmcp/headerforward (#5302)
lorr1 May 18, 2026
605fa34
Update anthropics/claude-code-action digest to 51ea8ea (#5294)
renovate[bot] May 18, 2026
5aa045b
Update module github.com/stacklok/toolhive-catalog to v0.20260518.0 (…
renovate[bot] May 18, 2026
86f9734
Bump toolhive-core on release day via Renovate (#5315)
reyortiz3 May 18, 2026
0d8b133
Drop empty PULLS column from registry list and search output (#5314)
danbarr May 18, 2026
f78bb42
fix(operator): add startup probe to proxyrunner deployment (#5300)
gabrielcosi May 18, 2026
e3585e9
Bump toolhive-core to v0.0.20 (#5316)
reyortiz3 May 18, 2026
4bc4624
Wire HeaderForward into vMCP per-session HTTP client (#5301)
lorr1 May 18, 2026
0a741f7
Bump toolhive-core to v0.0.21 and use shared redis client (#5318)
reyortiz3 May 19, 2026
2ce3ef7
Release v0.28.0 (#5322)
toolhive-release-app[bot] May 19, 2026
a13e5ea
Use shared toolhive-core redis client for session storage (#5324)
reyortiz3 May 19, 2026
a3fb4ee
Bump github.com/go-git/go-git/v5 from 5.19.0 to 5.19.1 (#5330)
dependabot[bot] May 19, 2026
6d81df8
fix(operator): inject THV_SESSION_REDIS_PASSWORD for MCPServer (#5286)
dallinstevens May 19, 2026
2426291
fix: validate k8s export volume format (#5319)
immanuwell May 19, 2026
e46f8c1
Update dependency kyverno/chainsaw to v0.2.15 (#5297)
renovate[bot] May 19, 2026
36ca38c
Update kyverno/action-install-chainsaw action to v0.2.15 (#5298)
renovate[bot] May 19, 2026
f6d4805
Update module github.com/pelletier/go-toml/v2 to v2.3.1 (#5311)
renovate[bot] May 19, 2026
d3d9a02
Use `events.k8s.io` in registry-api Role (#5340)
rdimitrov May 20, 2026
e5670ea
Preserve fresh per-request identity in vMCP backend transports (#5335)
tgrunnagle May 20, 2026
8d22ac5
Factor thv-operator main into app.Run; add proxyrunner Run helper (#5…
tgrunnagle May 20, 2026
9a5d0c2
Add CIMD document fetch/validate and extend SSRF protections (#5320)
amirejaz May 20, 2026
79c08bd
Add default OBO handler hooks and vMCP/proxy converter stubs (#5338)
tgrunnagle May 20, 2026
2894982
Inject spawn seam in RunWorkloadDetached to stop orphan test processe…
tgrunnagle May 20, 2026
91cb56f
Release v0.28.1 (#5352)
toolhive-release-app[bot] May 20, 2026
bd73817
Honor --allow-private-ip on thv registry login --registry (#5353)
reyortiz3 May 20, 2026
5540b3d
Remove unreachable functions identified by deadcode analysis (#5355)
ChrisJBurns May 21, 2026
4c2e32c
Fix DCR failure for authorization servers with non-root issuer paths …
amirejaz May 21, 2026
483e91d
Wire OBO dispatch arms and reconciler branch (#5345)
tgrunnagle May 21, 2026
29cdee6
Release v0.28.2 (#5363)
toolhive-release-app[bot] May 21, 2026
9a28521
Resolve authz `ConfigMap` for `VirtualMCPServer` (#5290)
blkt May 22, 2026
391f4f2
Upgrade golang.org/x/crypto to v0.52.0 (#5366)
amirejaz May 22, 2026
b9ec592
Enable Renovate vulnerability alerts to trigger immediately (#5367)
amirejaz May 22, 2026
686eb1b
Restore ServerBuilder.WithMiddleware and WithRoute (#5369)
reyortiz3 May 22, 2026
e37e336
Mirror MCPExternalAuthConfig Valid=False onto consumer CR conditions …
tgrunnagle May 22, 2026
61202ff
Release v0.28.3 (#5370)
toolhive-release-app[bot] May 22, 2026
4587fc8
Admit obo in MCPExternalAuthConfig CRD enum (#5361)
tgrunnagle May 22, 2026
08baf2d
Consolidate authserver DCR types onto pkg/oauthproto (#5372)
tgrunnagle May 22, 2026
2043cf6
Add CIMD storage decorator for embedded AS (#5343)
amirejaz May 25, 2026
a7aaf31
Address post-approval review feedback on `VirtualMCPServer` authz (#5…
blkt May 26, 2026
394b2e7
Clear all cached registry tokens on logout (#5382)
rdimitrov May 26, 2026
8fbc935
Wire CIMD config through embedded AS and enable storage decorator (#5…
amirejaz May 26, 2026
4bb80f0
Refresh docs/arch/ to match current codebase (#5388)
JAORMX May 28, 2026
164c251
Freeze MCPServer generation per pod via downward API (#5364)
ChrisJBurns May 28, 2026
8932f93
Add StorageVersionMigrator controller (opt-in, default off) (#5362)
ChrisJBurns May 28, 2026
374d452
Fixed VirtualMCPCompositeToolDefinition printer columns output (#5380)
Sanskarzz May 28, 2026
aec2158
Delete .claude/skills/pr-review directory (#5392)
ChrisJBurns May 28, 2026
2d53736
Update github/codeql-action digest to 7211b7c (#5375)
renovate[bot] May 29, 2026
b1f1531
Update module github.com/stacklok/toolhive-catalog to v0.20260520.0 (…
renovate[bot] May 29, 2026
83aaf96
Update anthropics/claude-code-action digest to 787c5a0 (#5374)
renovate[bot] May 29, 2026
0578af6
Opt 12 v1beta1 CRDs into storage-version migration + CI guard (#5391)
ChrisJBurns May 29, 2026
296cf34
chore: add needs-triage caller workflow (#5398)
dussab May 29, 2026
0e7a0a9
Update module github.com/stacklok/toolhive-catalog to v0.20260529.0 (…
renovate[bot] May 29, 2026
6f63ac0
Add 'thv mcp call' for invoking MCP server tools (#5389)
JAORMX May 29, 2026
5956471
Update aws-sdk-go-v2 monorepo (#5406)
renovate[bot] Jun 1, 2026
35e66bb
Update golang.org/x/exp/jsonrpc2 digest to c761662 (#5404)
renovate[bot] Jun 1, 2026
53022a2
Update go.starlark.net digest to ec58d4b (#5376)
renovate[bot] Jun 1, 2026
5a8692d
Deprecate Roo Code client integration (#5415)
danbarr Jun 1, 2026
bfde12d
Fall back to request-token claims for opaque upstream tokens (#5147)
cjohnhanson Jun 1, 2026
50a6c8b
Persist config backward-compat migrations to load path (#5416)
danbarr Jun 1, 2026
2d59159
Isolate skills client discovery in default-client test (#5417)
danbarr Jun 1, 2026
05ca226
dcr: support RFC 8414 §3.1 path-insertion in discovery-URL → issuer d…
juzerpatanwala Jun 1, 2026
db82aef
Add workload upgrade detection package (#5407)
JAORMX Jun 2, 2026
bedd6ba
Bind vMCP sessions to OIDC identity, not raw token bytes (#5378)
jhrozek Jun 2, 2026
16ce897
Add upgrade-check REST endpoints for workloads (#5408)
JAORMX Jun 2, 2026
a49b4fa
Add thv upgrade check and list --check-upgrades (#5409)
JAORMX Jun 2, 2026
0181749
Add Applier for upgrading workloads in place (#5410)
JAORMX Jun 2, 2026
974aab5
Surface StorageVersionMigrator behind chart feature flag (opt-in) (#5…
ChrisJBurns Jun 2, 2026
521630b
Validate CIMD scope, grant_types and response_types against AS policy…
amirejaz Jun 2, 2026
fc64061
Add upgrade apply for the CLI and API (#5411)
JAORMX Jun 2, 2026
12fcd15
Add e2e coverage and lifecycle docs for upgrades (#5412)
JAORMX Jun 2, 2026
8fce30e
Update goreleaser/goreleaser-action digest to 5daf1e9 (#5405)
renovate[bot] Jun 2, 2026
853e9e4
Expose CIMD config in MCPExternalAuthConfig CRD (#5384)
amirejaz Jun 3, 2026
89dacac
Update module github.com/stacklok/toolhive-catalog to v0.20260603.0 (…
renovate[bot] Jun 3, 2026
535e808
Migrate container client to moby/moby modules (#5420)
rdimitrov Jun 3, 2026
91827ac
Ignore go1.26.4 stdlib vulns in govulncheck until toolchain bump (#5425)
rdimitrov Jun 3, 2026
ab2d3a1
Release v0.29.0 (#5424)
toolhive-release-app[bot] Jun 3, 2026
64bacc3
Bump CI actions off deprecated Node.js 20 (#5421)
rdimitrov Jun 3, 2026
24a8af0
Add missing active contributors to CODEOWNERS (#5423)
amirejaz Jun 3, 2026
6ebadaf
Add lazy mode to thv llm setup (#5427)
ChrisJBurns Jun 3, 2026
a785995
Clarify lazy-mode deferred-login message (#5429)
ChrisJBurns Jun 3, 2026
340f4fd
Bump testcontainers-go to v0.42.0 to drop docker/docker (#5449)
rdimitrov Jun 3, 2026
4d3b392
Thread VirtualMCPServer name into Cedar authz middleware (#5448)
jhrozek Jun 3, 2026
255686a
Define VMCP core interface and Config contract (#5450)
tgrunnagle Jun 3, 2026
05f11b5
Pin BackendID through the advertising filter (tests) (#5452)
tgrunnagle Jun 3, 2026
26912af
Merge commit from fork
tonghuaroot Jun 4, 2026
83e9eae
Release v0.29.1 (#5453)
toolhive-release-app[bot] Jun 4, 2026
9968da8
Domain-type the ElicitationRequester seam (#5456)
tgrunnagle Jun 5, 2026
4a9af53
fix(api): add X-Content-Type-Options and Cross-Origin-Resource-Policy…
amirejaz Jun 5, 2026
8691376
Update golang.org/x/exp/jsonrpc2 digest to 055de63 (#5463)
renovate[bot] Jun 8, 2026
48f672a
Update github/codeql-action digest to 8aad20d (#5462)
renovate[bot] Jun 8, 2026
a1f8000
Update anthropics/claude-code-action digest to fbda2eb (#5460)
renovate[bot] Jun 8, 2026
87fa2ac
Implement stateless core VMCP constructor (#5457)
tgrunnagle Jun 8, 2026
9e5f170
Add helm-unittest suite for operator-crds toggles (#5468)
ChrisJBurns Jun 9, 2026
4e3f647
Wire Cedar admission seam into vMCP core (#5459)
tgrunnagle Jun 9, 2026
c311dc0
Add vMCP Serve skeleton and ServerConfig (#5467)
tgrunnagle Jun 9, 2026
d687088
Add helm-unittest baseline for operator chart (#5473)
ChrisJBurns Jun 9, 2026
611eb16
Deprecate MCPRegistry CRD with runtime warning (#5470)
ChrisJBurns Jun 9, 2026
30c58a6
Add scenario helm-unittest suites for operator chart (#5475)
ChrisJBurns Jun 9, 2026
a42c0b6
Send OTLP export headers delivered via EnvVars (#5474)
reyortiz3 Jun 9, 2026
0d02ae4
Fix operator ServiceAccount name consistency (#5476)
ChrisJBurns Jun 9, 2026
40f52f5
Add operator chart helm-unittest suites for posture and naming (#5477)
ChrisJBurns Jun 10, 2026
f7bae41
Update module github.com/stacklok/toolhive-core to v0.0.23 (#5317)
renovate[bot] Jun 10, 2026
3f33265
Renew public client TTL on successful token exchange (#5469)
mani-muon Jun 10, 2026
430b9cd
Update module github.com/stacklok/toolhive-core to v0.0.24 (#5480)
reyortiz3 Jun 10, 2026
6b458aa
Prevent path traversal in LocalStore.getFilePath (#5464)
immanuwell Jun 10, 2026
1101e04
Move SDK hooks and two-phase session creation under Serve (#5471)
tgrunnagle Jun 10, 2026
c813153
Wire RFC 9728 discovery into HTTP and stdio transports (#5479)
jhrozek Jun 10, 2026
3392e91
Address Redis Cluster mode review follow-ups for #5153 (#5210)
reyortiz3 Jun 10, 2026
91907fd
Remove yrobla from CODEOWNERS (#5486)
ChrisJBurns Jun 10, 2026
5143fd8
Release v0.29.2 (#5484)
toolhive-release-app[bot] Jun 10, 2026
0c62d1c
Update module github.com/stacklok/toolhive-catalog to v0.20260610.0 (…
renovate[bot] Jun 10, 2026
64e2e4d
Automate release notes generation and Slack announce (#5487)
reyortiz3 Jun 10, 2026
2efca30
Surface unauthenticated proxy default in logs and docs (#5488)
ChrisJBurns Jun 10, 2026
629b9b4
Release v0.29.3 (#5489)
toolhive-release-app[bot] Jun 10, 2026
0b8ddd1
Merge upstream v0.28.3 into dp-stable
carlos-lopez-vecino Oct 5, 2026
0386344
Merge upstream v0.29.3 into dp-stable
carlos-lopez-vecino Oct 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .claude/agents/oauth-expert.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ Before providing guidance on OAuth/OIDC details, use WebFetch to verify RFC or s
- `pkg/auth/token.go`: JWT parsing, validation, claims extraction
- `pkg/auth/middleware.go`: HTTP authentication middleware
- `pkg/auth/oauth/`: OAuth 2.0 and OIDC client implementations
- `pkg/auth/tokenexchange/`: RFC 8693 token exchange
- `pkg/oauthproto/tokenexchange/`: RFC 8693 token exchange
- `pkg/auth/discovery/`: OAuth/OIDC discovery, RFC 9728 support
- `pkg/authserver/`: OAuth2 authorization server (Ory Fosite, PKCE, JWT/JWKS)

Expand Down
54 changes: 51 additions & 3 deletions .claude/rules/operator.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,27 @@ See `cmd/thv-operator/DESIGN.md` for detailed decision guidelines.

- Always run `task operator-generate` after modifying CRD types
- Always run `task operator-manifests` after adding kubebuilder markers
- Always run `task crdref-gen` from `cmd/thv-operator/` after CRD changes to regenerate API docs (uses relative paths)
- Always run `task crdref-gen` from the repo root after CRD changes to regenerate API docs (running it from `cmd/thv-operator/` fails — the task resolves the config path relative to the repo root)
- Use `envtest` for integration testing, not real clusters
- Chainsaw tests require a real Kubernetes cluster
- Status updates require a separate client patch (`r.Status().Update()`)
- Status writes must go through `controllerutil.MutateAndPatchStatus` — see the Status Writes section below

## Status Condition Parity

When adding a status condition to one CRD type, check all parallel types (e.g., `MCPServer` and `VirtualMCPServer`) for the same condition. Conditions that warn about misconfiguration or unsupported states should be consistent across types that share the same feature set — a gap means one type silently accepts invalid config that the other rejects.

## Status Writes

Use `controllerutil.MutateAndPatchStatus` for every status write — not `r.Status().Update` or inline `client.Status().Patch` (see #4633). The helper's doc comment is the authoritative spec.

When adding a status-write call site, check three things:

1. **Caller holds a freshly-`Get`ted object.** Reconciler-start writers do; writers that iterate `List` results (e.g., deletion-path fan-out in `MCPGroupReconciler`) do not and need a fresh `Get` before calling the helper.
2. **Caller is the sole owner of the entire `Status.Conditions` array.** Per-condition-type ownership is NOT enough. JSON merge-patch replaces the array wholesale for CRDs (the `+listType=map` marker is only honored by strategic-merge-patch), so any concurrent writer whose Patch lands between this caller's Get and Patch — on any condition type, not just the ones this caller touches — will be erased. A fresh `Get` narrows the TOCTOU window but does not eliminate it. If two code paths must write conditions on the same CRD (e.g., operator reconciler + in-pod `K8sReporter`), fix at the design level: consolidate to a single owner, or move one writer to a dedicated status field outside the array.
3. **Scalar fields the writer touches are not co-owned.** A stale-computed value different from the caller's snapshot will overwrite the live value — the helper cannot defend against this.

Do not use `MutateAndPatchStatus` for spec or metadata writes — those require optimistic locking (`client.MergeFromWithOptions(..., MergeFromWithOptimisticLock{})`). See #4767.

## Key Operator Commands

```bash
Expand All @@ -53,5 +65,41 @@ task operator-generate # Generate deepcopy, client code
task operator-manifests # Generate CRD YAML, RBAC
task operator-test # Run unit tests
task operator-e2e-test # Run e2e tests
task crdref-gen # Generate CRD API docs (run from cmd/thv-operator/)
task crdref-gen # Generate CRD API docs (run from the repo root)
```

## Spec / metadata patching

Never use `r.Update` on a CR spec or metadata: `Update` is a full PUT,
so any field our local copy does not track (e.g. `spec.authzConfig`
written by a separate authorization controller) gets zeroed on every
reconcile.

Use `controllerutil.MutateAndPatchSpec` instead. The helper wraps an
optimistic-lock merge patch: the body only contains fields the caller
changed, and `MergeFromWithOptimisticLock` sends `resourceVersion` as a
precondition, so if the server moved between our Get and Patch the
apiserver returns 409 and controller-runtime requeues with a fresh Get.

This is what protects `metadata.finalizers`. Merge-patch has no
array-append semantics — arrays are replaced wholesale — so when our
diff includes `finalizers` (e.g. an `AddFinalizer` call) it must have
been computed from an up-to-date snapshot. The 409 + requeue is what
guarantees that: any concurrent finalizer added by another controller
fails our precondition, and the next reconcile observes it via a fresh
Get before recomputing the diff.

```go
if err := ctrlutil.MutateAndPatchSpec(ctx, r.Client, mcpServer, func(m *mcpv1beta1.MCPServer) {
controllerutil.AddFinalizer(m, MCPServerFinalizerName)
}); err != nil {
return ctrl.Result{}, err
}
```

Expect 409s as routine log noise once the external controller lands —
the guard doing its job, not a bug.

Status-subresource patching uses the sibling helper
`controllerutil.MutateAndPatchStatus` (see the "Status Writes" section
above).
11 changes: 3 additions & 8 deletions .claude/skills/check-contribution/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: check-contribution
description: Validates operator chart contribution practices (helm template, ct lint, docs generation, version bump) before committing changes.
description: Validates operator chart contribution practices (helm template, ct lint, docs generation) before committing changes.
allowed-tools: [Bash, Read]
---

Expand Down Expand Up @@ -28,19 +28,14 @@ helm-docs --dry-run
```
Verify that `values.yaml` variables are documented and the generated README.md matches.

### 4. Chart Version Bump
If chart files changed, verify:
- `deploy/charts/operator/Chart.yaml` version is bumped for operator changes
- `deploy/charts/operator-crds/Chart.yaml` version is bumped for CRD changes
- Version follows [SemVer](https://semver.org/) and bump type matches the change scope

## Output Format

```
✅ or ❌ Helm template renders successfully
✅ or ❌ Chart linting passes
✅ or ❌ Documentation up-to-date
✅ or ❌ Chart version bumped appropriately

Note: Chart version bumps are automated by the release bot. Feature PRs should NOT modify Chart.yaml.
```

Include specific errors for any failing checks with actionable remediation commands.
231 changes: 0 additions & 231 deletions .claude/skills/pr-review/EXAMPLES-INLINE.md

This file was deleted.

Loading
Loading