fix(toolhive): disable the GitHub MCP again, bearerToken is a no-op - #4220
Conversation
The operator turns MCPExternalAuthConfig tokenSecretRef into a thv CLI store reference and never projects the Secret, so both backends have crashlooped on "secrets provider not configured" since #4212.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
🔗 Linked repositories identifiedCodeRabbit considers these linked repositories for cross-repo context during reviews:
📝 WalkthroughWalkthroughThe GitHub MCP external authentication and server resources were removed. A single ChangesGitHub MCP disablement
Estimated code review effort: 2 (Simple) | ~10 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
@@ (root level) @@
# toolhive.stacklok.dev/v1beta1/MCPExternalAuthConfig/ai/github
! - one document removed:
- apiVersion: toolhive.stacklok.dev/v1beta1
- kind: MCPExternalAuthConfig
- metadata:
- name: github
- namespace: ai
- labels:
- app.kubernetes.io/name: toolhive
- kustomize.toolkit.fluxcd.io/name: toolhive
- kustomize.toolkit.fluxcd.io/namespace: ai
- spec:
- type: bearerToken
- bearerToken:
- tokenSecretRef:
- name: toolhive-secrets
- key: GITHUB_PERSONAL_ACCESS_TOKEN
@@ (root level) @@
# toolhive.stacklok.dev/v1beta1/MCPServer/ai/github
! - one document removed:
- apiVersion: toolhive.stacklok.dev/v1beta1
- kind: MCPServer
- metadata:
- name: github
- namespace: ai
- labels:
- app.kubernetes.io/name: toolhive
- kustomize.toolkit.fluxcd.io/name: toolhive
- kustomize.toolkit.fluxcd.io/namespace: ai
- spec:
- resources:
- limits:
- cpu: 200m
- memory: 200Mi
- requests:
- cpu: 10m
- memory: 64Mi
- image: "ghcr.io/github/github-mcp-server:v1.7.0@sha256:c491ffdf6f4c85cb5397021bc655edb8ab825c6f5f568e7597d77a1bd7c4d308"
- mcpPort: 8082
- proxyPort: 8080
- transport: streamable-http
- args:
- - http
- - "--read-only"
- - "--toolsets"
- - "context,repos,issues,pull_requests"
- externalAuthConfigRef:
- name: github
- groupRef:
- name: resources
- permissionProfile:
- name: network
- type: builtin
- podTemplateSpec:
- spec:
- containers:
- - name: mcp
- resources:
- limits:
- cpu: 500m
- memory: 256Mi
- requests:
- cpu: 10m
- memory: 64Mi
@@ (root level) @@
# toolhive.stacklok.dev/v1beta1/MCPServer/ai/github-opt
! - one document removed:
- apiVersion: toolhive.stacklok.dev/v1beta1
- kind: MCPServer
- metadata:
- name: github-opt
- namespace: ai
- labels:
- app.kubernetes.io/name: toolhive
- kustomize.toolkit.fluxcd.io/name: toolhive
- kustomize.toolkit.fluxcd.io/namespace: ai
- spec:
- resources:
- limits:
- cpu: 200m
- memory: 200Mi
- requests:
- cpu: 10m
- memory: 64Mi
- image: "ghcr.io/github/github-mcp-server:v1.7.0@sha256:c491ffdf6f4c85cb5397021bc655edb8ab825c6f5f568e7597d77a1bd7c4d308"
- mcpPort: 8082
- proxyPort: 8080
- transport: streamable-http
- args:
- - http
- - "--read-only"
- - "--toolsets"
- - "context,repos,issues,pull_requests"
- externalAuthConfigRef:
- name: github
- groupRef:
- name: all
- permissionProfile:
- name: network
- type: builtin
- podTemplateSpec:
- spec:
- containers:
- - name: mcp
- resources:
- limits:
- cpu: 500m
- memory: 256Mi
- requests:
- cpu: 10m
- memory: 64Mi
@@ (root level) @@
# toolhive.stacklok.dev/v1beta1/MCPToolConfig/ai/github
! + one document added:
+ apiVersion: toolhive.stacklok.dev/v1beta1
+ kind: MCPToolConfig
+ metadata:
+ name: github
+ namespace: ai
+ labels:
+ app.kubernetes.io/name: toolhive
+ kustomize.toolkit.fluxcd.io/name: toolhive
+ kustomize.toolkit.fluxcd.io/namespace: ai
+ spec:
+ toolsFilter: []
|
AI Automated ReviewAnalysis engine: qwen-3.6-fast@http://litellm.ai.svc.cluster.local/v1 (openai) RecommendationApprove. This PR correctly disables the GitHub MCP configuration after PR 4212's re-enablement caused CrashLoopBackOff. The detailed inline comments document both upstream failure modes (stdio Change-by-Change FindingsThe diff removes three resources (
The remaining Standards Compliance
Release Notesgithub-mcp-server v1.7.0The image digest remains at v1.7.0 (not changed by this PR). Key changes in v1.7.0 include:
These changes do not affect this PR since the GitHub MCP is being disabled entirely. ToolHive v0.40.1The PR body confirms the operator version is v0.40.1 (latest upstream release at time of writing). The bearer token projection bug appears to be an operator limitation rather than a documented breaking change. |
The GitHub MCPServers are gone since #4220; the leftover MCPToolConfig had no referrer, and toolsFilter [] is a verified no-op regardless. Neither transport is fixed in 0.41.0, so the RCA note moves to the kustomization in its place. Chart 0.41.0 lowers GOMEMLIMIT 150MiB -> 110MiB, so the old comment on the memory override no longer described why we deviate.
The self-run container is unusable on both transports: stdio gets marked unhealthy when the vMCP health check re-sends `initialize` (#5890, still open in 0.41.0), and `server http` accepts no server-side token, with the MCPExternalAuthConfig bearerToken path a no-op (#4220). MCPServerEntry sidesteps both. headerForward injects the PAT server-side, which is the capability bearerToken failed to provide, and the remote has no pod for the health check to re-initialize. Same shape as context7. The endpoint accepts a bare PAT, so GITHUB_PERSONAL_ACCESS_TOKEN is reused as-is. No Copilot entitlement: a token with no `copilot` scope lists all 46 repo/issue/PR tools.
githubandgithub-opthave been in CrashLoopBackOff since #4212 merged.server http --help(v1.7.0)github-runconfig"bearer_token": "toolhive-secrets,target=bearer_token"runconfigConfigMap only, Secret never projectedThe operator rewrites
MCPExternalAuthConfig.bearerToken.tokenSecretRefinto a thv CLIstore reference and never projects the Secret, so the proxy exits before it serves.
No transport works on v0.40.1: stdio fails the health-check re-init (#5890), and
streamable-http fails this. Back to disabled, with both failure modes recorded.
The commented-out stdio manifests are dropped rather than restored; git history has them.
Summary by CodeRabbit