@@ -12,7 +12,6 @@ import (
1212
1313"github.com/github/github-mcp-server/pkg/github"
1414iolog"github.com/github/github-mcp-server/pkg/log"
15- "github.com/github/github-mcp-server/pkg/toolsets"
1615"github.com/github/github-mcp-server/pkg/translations"
1716gogithub"github.com/google/go-github/v69/github"
1817"github.com/mark3labs/mcp-go/server"
@@ -45,10 +44,16 @@ var (
4544if err != nil {
4645stdlog .Fatal ("Failed to initialize logger:" ,err )
4746}
48- enabledToolsets := viper .GetStringSlice ("features" )
49- features ,err := initToolsets (enabledToolsets )
50- if err != nil {
51- stdlog .Fatal ("Failed to initialize features:" ,err )
47+
48+ enabledToolsets := viper .GetStringSlice ("toolsets" )
49+
50+ // Env gets precedence over command line flags
51+ if envToolsets := os .Getenv ("GITHUB_TOOLSETS" );envToolsets != "" {
52+ enabledToolsets = []string {}
53+ // Split envFeats by comma, trim whitespace, and add to the slice
54+ for _ ,toolset := range strings .Split (envToolsets ,"," ) {
55+ enabledToolsets = append (enabledToolsets ,strings .TrimSpace (toolset ))
56+ }
5257}
5358
5459logCommands := viper .GetBool ("enable-command-logging" )
5762logger :logger ,
5863logCommands :logCommands ,
5964exportTranslations :exportTranslations ,
60- features :features ,
65+ enabledToolsets :enabledToolsets ,
6166}
6267if err := runStdioServer (cfg );err != nil {
6368stdlog .Fatal ("failed to run stdio server:" ,err )
@@ -66,53 +71,19 @@ var (
6671}
6772)
6873
69- func initToolsets (passedToolsets []string ) (* toolsets.ToolsetGroup ,error ) {
70- // Create a new toolset group
71- fs := toolsets .NewToolsetGroup ()
72-
73- // Define all available features with their default state (disabled)
74- fs .AddToolset ("repos" ,"Repository related tools" ,false )
75- fs .AddToolset ("issues" ,"Issues related tools" ,false )
76- fs .AddToolset ("search" ,"Search related tools" ,false )
77- fs .AddToolset ("pull_requests" ,"Pull request related tools" ,false )
78- fs .AddToolset ("code_security" ,"Code security related tools" ,false )
79- fs .AddToolset ("experiments" ,"Experimental features that are not considered stable yet" ,false )
80-
81- // fs.AddFeature("actions", "GitHub Actions related tools", false)
82- // fs.AddFeature("projects", "GitHub Projects related tools", false)
83- // fs.AddFeature("secret_protection", "Secret protection related tools", false)
84- // fs.AddFeature("gists", "Gist related tools", false)
85-
86- // Env gets precedence over command line flags
87- if envFeats := os .Getenv ("GITHUB_TOOLSETS" );envFeats != "" {
88- passedToolsets = []string {}
89- // Split envFeats by comma, trim whitespace, and add to the slice
90- for _ ,feature := range strings .Split (envFeats ,"," ) {
91- passedToolsets = append (passedToolsets ,strings .TrimSpace (feature ))
92- }
93- }
94-
95- // Enable the requested features
96- if err := fs .EnableToolsets (passedToolsets );err != nil {
97- return nil ,err
98- }
99-
100- return fs ,nil
101- }
102-
10374func init () {
10475cobra .OnInitialize (initConfig )
10576
10677// Add global flags that will be shared by all commands
107- rootCmd .PersistentFlags ().StringSlice ("features " , []string {"repos" ,"issues" ,"pull_requests" ,"search" },"A comma separated list of groups of tools to enable, defaults to issues/repos/search" )
78+ rootCmd .PersistentFlags ().StringSlice ("toolsets " , []string {"repos" ,"issues" ,"pull_requests" ,"search" },"A comma separated list of groups of tools to enable, defaults to issues/repos/search" )
10879rootCmd .PersistentFlags ().Bool ("read-only" ,false ,"Restrict the server to read-only operations" )
10980rootCmd .PersistentFlags ().String ("log-file" ,"" ,"Path to log file" )
11081rootCmd .PersistentFlags ().Bool ("enable-command-logging" ,false ,"When enabled, the server will log all command requests and responses to the log file" )
11182rootCmd .PersistentFlags ().Bool ("export-translations" ,false ,"Save translations to a JSON file" )
11283rootCmd .PersistentFlags ().String ("gh-host" ,"" ,"Specify the GitHub hostname (for GitHub Enterprise etc.)" )
11384
11485// Bind flag to viper
115- _ = viper .BindPFlag ("features " ,rootCmd .PersistentFlags ().Lookup ("features " ))
86+ _ = viper .BindPFlag ("toolsets " ,rootCmd .PersistentFlags ().Lookup ("toolsets " ))
11687_ = viper .BindPFlag ("read-only" ,rootCmd .PersistentFlags ().Lookup ("read-only" ))
11788_ = viper .BindPFlag ("log-file" ,rootCmd .PersistentFlags ().Lookup ("log-file" ))
11889_ = viper .BindPFlag ("enable-command-logging" ,rootCmd .PersistentFlags ().Lookup ("enable-command-logging" ))
@@ -151,7 +122,7 @@ type runConfig struct {
151122logger * log.Logger
152123logCommands bool
153124exportTranslations bool
154- features * toolsets. ToolsetGroup
125+ enabledToolsets [] string
155126}
156127
157128func runStdioServer (cfg runConfig )error {
@@ -186,8 +157,18 @@ func runStdioServer(cfg runConfig) error {
186157getClient := func (_ context.Context ) (* gogithub.Client ,error ) {
187158return ghClient ,nil // closing over client
188159}
189- // Create
190- ghServer := github .NewServer (getClient ,cfg .features ,version ,cfg .readOnly ,t )
160+
161+ // Create server
162+ ghServer := github .NewServer (version )
163+
164+ // Create toolsets
165+ toolsets ,err := github .InitToolsets (ghServer ,cfg .enabledToolsets ,cfg .readOnly ,getClient ,t )
166+ if err != nil {
167+ stdlog .Fatal ("Failed to initialize toolsets:" ,err )
168+ }
169+ // Register the tools with the server
170+ toolsets .RegisterTools (ghServer )
171+
191172stdioServer := server .NewStdioServer (ghServer )
192173
193174stdLogger := stdlog .New (cfg .logger .Writer (),"stdioserver" ,0 )