Skip to content

Commit 10757ab

Browse files
committed
remove static checker param and clean up
1 parent 99e1262 commit 10757ab

File tree

3 files changed

+30
-40
lines changed

3 files changed

+30
-40
lines changed

pkg/http/features.go

Lines changed: 0 additions & 37 deletions
This file was deleted.

pkg/http/handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func WithInventoryFactory(f InventoryFactoryFunc) HandlerOption {
4747
}
4848
}
4949

50-
func WithHandlerFeatureChecker(checker inventory.FeatureFlagChecker) HandlerOption {
50+
func WithFeatureChecker(checker inventory.FeatureFlagChecker) HandlerOption {
5151
return func(o *HandlerOptions) {
5252
o.FeatureChecker = checker
5353
}

pkg/http/server.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,26 @@ import (
88
"net/http"
99
"os"
1010
"os/signal"
11+
"slices"
1112
"syscall"
1213
"time"
1314

15+
ghcontext "github.com/github/github-mcp-server/pkg/context"
1416
"github.com/github/github-mcp-server/pkg/github"
17+
"github.com/github/github-mcp-server/pkg/inventory"
1518
"github.com/github/github-mcp-server/pkg/lockdown"
1619
"github.com/github/github-mcp-server/pkg/translations"
1720
"github.com/github/github-mcp-server/pkg/utils"
1821
"github.com/go-chi/chi/v5"
1922
)
2023

24+
// knownFeatureFlags are the feature flags that can be enabled via X-MCP-Features header.
25+
// Only these flags are accepted from headers.
26+
var knownFeatureFlags = []string{
27+
github.FeatureFlagHoldbackConsolidatedProjects,
28+
github.FeatureFlagHoldbackConsolidatedActions,
29+
}
30+
2131
type ServerConfig struct {
2232
// Version of the server
2333
Version string
@@ -83,7 +93,7 @@ func RunHTTPServer(cfg ServerConfig) error {
8393
repoAccessOpts = append(repoAccessOpts, lockdown.WithTTL(*cfg.RepoAccessCacheTTL))
8494
}
8595

86-
featureChecker := CreateHTTPFeatureChecker(nil)
96+
featureChecker := createHTTPFeatureChecker()
8797

8898
deps := github.NewRequestDeps(
8999
apiHost,
@@ -97,7 +107,7 @@ func RunHTTPServer(cfg ServerConfig) error {
97107

98108
r := chi.NewRouter()
99109

100-
handler := NewHTTPMcpHandler(ctx, &cfg, deps, t, logger, WithHandlerFeatureChecker(featureChecker))
110+
handler := NewHTTPMcpHandler(ctx, &cfg, deps, t, logger, WithFeatureChecker(featureChecker))
101111
handler.RegisterRoutes(r)
102112

103113
addr := fmt.Sprintf(":%d", cfg.Port)
@@ -130,3 +140,20 @@ func RunHTTPServer(cfg ServerConfig) error {
130140
logger.Info("server stopped gracefully")
131141
return nil
132142
}
143+
144+
// createHTTPFeatureChecker creates a feature checker that reads header features from context
145+
// and validates them against the knownFeatureFlags whitelist
146+
func createHTTPFeatureChecker() inventory.FeatureFlagChecker {
147+
// Pre-compute whitelist as set for O(1) lookup
148+
knownSet := make(map[string]bool, len(knownFeatureFlags))
149+
for _, f := range knownFeatureFlags {
150+
knownSet[f] = true
151+
}
152+
153+
return func(ctx context.Context, flag string) (bool, error) {
154+
if knownSet[flag] && slices.Contains(ghcontext.GetHeaderFeatures(ctx), flag) {
155+
return true, nil
156+
}
157+
return false, nil
158+
}
159+
}

0 commit comments

Comments
 (0)