diff --git a/internal/ghmcp/server.go b/internal/ghmcp/server.go index 34e374a24..2fb2fb19b 100644 --- a/internal/ghmcp/server.go +++ b/internal/ghmcp/server.go @@ -142,7 +142,7 @@ func NewMCPServer(cfg MCPServerConfig) (*server.MCPServer, error) { // Create default toolsets tsg := github.DefaultToolsetGroup(cfg.ReadOnly, getClient, getGQLClient, getRawClient, cfg.Translator, cfg.ContentWindowSize) - err = tsg.EnableToolsets(enabledToolsets) + err = tsg.EnableToolsets(enabledToolsets, nil) if err != nil { return nil, fmt.Errorf("failed to enable toolsets: %w", err) diff --git a/pkg/toolsets/toolsets.go b/pkg/toolsets/toolsets.go index 85cd5d841..96f1fc3ca 100644 --- a/pkg/toolsets/toolsets.go +++ b/pkg/toolsets/toolsets.go @@ -203,7 +203,17 @@ func (tg *ToolsetGroup) IsEnabled(name string) bool { return feature.Enabled } -func (tg *ToolsetGroup) EnableToolsets(names []string) error { +type EnableToolsetsOptions struct { + ErrorOnUnknown bool +} + +func (tg *ToolsetGroup) EnableToolsets(names []string, options *EnableToolsetsOptions) error { + if options == nil { + options = &EnableToolsetsOptions{ + ErrorOnUnknown: false, + } + } + // Special case for "all" for _, name := range names { if name == "all" { @@ -211,7 +221,7 @@ func (tg *ToolsetGroup) EnableToolsets(names []string) error { break } err := tg.EnableToolset(name) - if err != nil { + if err != nil && options.ErrorOnUnknown { return err } } @@ -219,7 +229,7 @@ func (tg *ToolsetGroup) EnableToolsets(names []string) error { if tg.everythingOn { for name := range tg.Toolsets { err := tg.EnableToolset(name) - if err != nil { + if err != nil && options.ErrorOnUnknown { return err } } diff --git a/pkg/toolsets/toolsets_test.go b/pkg/toolsets/toolsets_test.go index d74c94bbb..3f4581f34 100644 --- a/pkg/toolsets/toolsets_test.go +++ b/pkg/toolsets/toolsets_test.go @@ -134,7 +134,7 @@ func TestEnableToolsets(t *testing.T) { tsg.AddToolset(toolset2) // Test enabling multiple toolsets - err := tsg.EnableToolsets([]string{"toolset1", "toolset2"}) + err := tsg.EnableToolsets([]string{"toolset1", "toolset2"}, &EnableToolsetsOptions{}) if err != nil { t.Errorf("Expected no error when enabling toolsets, got: %v", err) } @@ -148,7 +148,19 @@ func TestEnableToolsets(t *testing.T) { } // Test with non-existent toolset in the list - err = tsg.EnableToolsets([]string{"toolset1", "non-existent"}) + err = tsg.EnableToolsets([]string{"toolset1", "non-existent"}, nil) + if err != nil { + t.Errorf("Expected no error when ignoring unknown toolsets, got: %v", err) + } + + err = tsg.EnableToolsets([]string{"toolset1", "non-existent"}, &EnableToolsetsOptions{ + ErrorOnUnknown: false, + }) + if err != nil { + t.Errorf("Expected no error when ignoring unknown toolsets, got: %v", err) + } + + err = tsg.EnableToolsets([]string{"toolset1", "non-existent"}, &EnableToolsetsOptions{ErrorOnUnknown: true}) if err == nil { t.Error("Expected error when enabling list with non-existent toolset") } @@ -157,14 +169,14 @@ func TestEnableToolsets(t *testing.T) { } // Test with empty list - err = tsg.EnableToolsets([]string{}) + err = tsg.EnableToolsets([]string{}, &EnableToolsetsOptions{}) if err != nil { t.Errorf("Expected no error with empty toolset list, got: %v", err) } // Test enabling everything through EnableToolsets tsg = NewToolsetGroup(false) - err = tsg.EnableToolsets([]string{"all"}) + err = tsg.EnableToolsets([]string{"all"}, &EnableToolsetsOptions{}) if err != nil { t.Errorf("Expected no error when enabling 'all', got: %v", err) } @@ -187,14 +199,14 @@ func TestEnableEverything(t *testing.T) { } // Enable "all" - err := tsg.EnableToolsets([]string{"all"}) + err := tsg.EnableToolsets([]string{"all"}, &EnableToolsetsOptions{}) if err != nil { - t.Errorf("Expected no error when enabling 'eall', got: %v", err) + t.Errorf("Expected no error when enabling 'all', got: %v", err) } // Verify everythingOn was set if !tsg.everythingOn { - t.Error("Expected everythingOn to be true after enabling 'eall'") + t.Error("Expected everythingOn to be true after enabling 'all'") } // Verify the previously disabled toolset is now enabled @@ -212,7 +224,7 @@ func TestIsEnabledWithEverythingOn(t *testing.T) { tsg := NewToolsetGroup(false) // Enable "all" - err := tsg.EnableToolsets([]string{"all"}) + err := tsg.EnableToolsets([]string{"all"}, &EnableToolsetsOptions{}) if err != nil { t.Errorf("Expected no error when enabling 'all', got: %v", err) }