Add MCPServerEntry CRD types and MCPGroup status fields#4662
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #4662 +/- ##
=======================================
Coverage 68.87% 68.88%
=======================================
Files 508 509 +1
Lines 52666 52668 +2
=======================================
+ Hits 36275 36278 +3
+ Misses 13590 13588 -2
- Partials 2801 2802 +1 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
4 tasks
jhrozek
reviewed
Apr 8, 2026
Contributor
jhrozek
left a comment
There was a problem hiding this comment.
Review of CRD types, cross-referenced with RFC-0055.
VirtualMCPServer currently requires MCPRemoteProxy (which spawns proxy pods) to reach remote MCP servers. This forces OIDC auth on public remotes, creates dual auth boundary confusion, and wastes resources. RFC-55 introduces MCPServerEntry as a zero-infrastructure catalog entry — pure configuration telling vMCP where a remote server exists and how to authenticate. Define MCPServerEntrySpec with remoteURL, transport, groupRef, externalAuthConfigRef, headerForward, and caBundleRef fields. Define MCPServerEntryStatus with Valid/Pending/Failed phase model and GroupRefValidated, ExternalAuthConfigValidated, CABundleRefValidated conditions. Add Entries and EntryCount fields to MCPGroupStatus for tracking MCPServerEntry membership. Register MCPServerEntry in the CRD Helm wrapper feature flags map under both server and virtualMcp flags. Refs #4656 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
94d87f1 to
a57d60d
Compare
jhrozek
approved these changes
Apr 8, 2026
Contributor
jhrozek
left a comment
There was a problem hiding this comment.
All review findings addressed. LGTM.
ChrisJBurns
requested changes
Apr 8, 2026
Collaborator
ChrisJBurns
left a comment
There was a problem hiding this comment.
Reviewed with PR Briefing.
ChrisJBurns
approved these changes
Apr 8, 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.
Summary
VirtualMCPServer currently requires MCPRemoteProxy (which spawns proxy pods) to reach remote MCP servers. This forces OIDC auth on public remotes, creates dual auth boundary confusion, and wastes resources. RFC-55 introduces MCPServerEntry as a zero-infrastructure catalog entry — pure configuration telling vMCP where a remote server exists and how to authenticate.
This PR introduces the CRD types for MCPServerEntry and adds Entries/EntryCount tracking to MCPGroupStatus. It is the first of three PRs implementing #4656 (the controller and MCPGroup integration follow in subsequent PRs).
MCPServerEntrySpecwith remoteURL, transport, groupRef, externalAuthConfigRef, headerForward, and caBundleRef fieldsMCPServerEntryStatuswith Valid/Pending/Failed phase model and GroupRefValid, AuthConfigValid, CABundleValid conditions (using "Valid" semantics since this is a configuration resource, not a workload)EntriesandEntryCountfields toMCPGroupStatusfor tracking MCPServerEntry membershipRefs #4656
Type of change
Test plan
task test) — operator unit tests passtask lint-fix) — 0 issuestask operator-generate,task operator-manifests,task crdref-gen)Changes
cmd/thv-operator/api/v1alpha1/mcpserverentry_types.gocmd/thv-operator/api/v1alpha1/mcpgroup_types.godeploy/charts/operator-crds/crd-helm-wrapper/main.gomcpserverentriesto feature flags mapcmd/thv-operator/api/v1alpha1/zz_generated.deepcopy.godeploy/charts/operator-crds/files/crds/deploy/charts/operator-crds/templates/docs/operator/crd-api.mdSpecial notes for reviewers
Valid/Pending/Failed(notReady) because MCPServerEntry is a configuration resource, not a workload. This follows the same pattern as MCPExternalAuthConfig and MCPOIDCConfig which use the sharedConditionTypeValid.caBundleRefreuses the existingCABundleSourcetype from MCPServer (which wrapsConfigMapKeySelectorinsideconfigMapRef). The RFC examples show a flatter structure, but codebase consistency was prioritized.toolhive.stacklok.dev/allow-insecureper RFC-55.Generated with Claude Code