Skip to content

Commit c2a68df

Browse files
refactor: consolidate createFeatureChecker to inventory package
Move the duplicated createFeatureChecker implementation to a shared NewSliceFeatureChecker function in pkg/inventory/filters.go. - Add inventory.NewSliceFeatureChecker() as the canonical implementation - Remove duplicate from cmd/github-mcp-server/main.go - Remove duplicate from internal/ghmcp/server.go This ensures the feature checking logic is DRY and maintainable.
1 parent a5ba7ff commit c2a68df

File tree

3 files changed

+14
-28
lines changed

3 files changed

+14
-28
lines changed

cmd/github-mcp-server/main.go

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ func getOAuthScopes(enabledToolsets, enabledTools, enabledFeatures []string, t t
234234
WithReadOnly(viper.GetBool("read-only")).
235235
WithToolsets(enabledToolsets).
236236
WithTools(enabledTools).
237-
WithFeatureChecker(createFeatureChecker(enabledFeatures))
237+
WithFeatureChecker(inventory.NewSliceFeatureChecker(enabledFeatures))
238238

239239
inv, err := inventoryBuilder.Build()
240240
if err != nil {
@@ -272,15 +272,3 @@ func collectRequiredScopes(inv *inventory.Inventory) []string {
272272

273273
return scopes
274274
}
275-
276-
// createFeatureChecker creates a feature flag checker from enabled features list
277-
func createFeatureChecker(enabledFeatures []string) inventory.FeatureFlagChecker {
278-
// Build a set for O(1) lookup
279-
featureSet := make(map[string]bool, len(enabledFeatures))
280-
for _, f := range enabledFeatures {
281-
featureSet[f] = true
282-
}
283-
return func(_ context.Context, flagName string) (bool, error) {
284-
return featureSet[flagName], nil
285-
}
286-
}

internal/ghmcp/server.go

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ func NewMCPServer(cfg MCPServerConfig) (*mcp.Server, error) {
224224
ghServer.AddReceivingMiddleware(addUserAgentsMiddleware(cfg, clients.rest, clients.gqlHTTP))
225225

226226
// Create feature checker
227-
featureChecker := createFeatureChecker(cfg.EnabledFeatures)
227+
featureChecker := inventory.NewSliceFeatureChecker(cfg.EnabledFeatures)
228228

229229
// Create dependencies for tool handlers
230230
deps := github.NewBaseDeps(
@@ -325,20 +325,6 @@ func registerDynamicTools(server *mcp.Server, inventory *inventory.Inventory, de
325325
}
326326
}
327327

328-
// createFeatureChecker returns a FeatureFlagChecker that checks if a flag name
329-
// is present in the provided list of enabled features. For the local server,
330-
// this is populated from the --features CLI flag.
331-
func createFeatureChecker(enabledFeatures []string) inventory.FeatureFlagChecker {
332-
// Build a set for O(1) lookup
333-
featureSet := make(map[string]bool, len(enabledFeatures))
334-
for _, f := range enabledFeatures {
335-
featureSet[f] = true
336-
}
337-
return func(_ context.Context, flagName string) (bool, error) {
338-
return featureSet[flagName], nil
339-
}
340-
}
341-
342328
type StdioServerConfig struct {
343329
// Version of the server
344330
Version string

pkg/inventory/filters.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,18 @@ import (
1212
// Returns (enabled, error). If error occurs, the caller should log and treat as false.
1313
type FeatureFlagChecker func(ctx context.Context, flagName string) (bool, error)
1414

15+
// NewSliceFeatureChecker creates a FeatureFlagChecker from a slice of enabled features.
16+
// This is a simple implementation for CLI usage where features are specified via flags.
17+
func NewSliceFeatureChecker(enabledFeatures []string) FeatureFlagChecker {
18+
featureSet := make(map[string]bool, len(enabledFeatures))
19+
for _, f := range enabledFeatures {
20+
featureSet[f] = true
21+
}
22+
return func(_ context.Context, flagName string) (bool, error) {
23+
return featureSet[flagName], nil
24+
}
25+
}
26+
1527
// isToolsetEnabled checks if a toolset is enabled based on current filters.
1628
func (r *Inventory) isToolsetEnabled(toolsetID ToolsetID) bool {
1729
// Check enabled toolsets filter

0 commit comments

Comments
 (0)