diff --git a/internal/ghmcp/server.go b/internal/ghmcp/server.go index 6090063f1..9e7dafcae 100644 --- a/internal/ghmcp/server.go +++ b/internal/ghmcp/server.go @@ -215,7 +215,7 @@ func NewMCPServer(cfg MCPServerConfig) (*mcp.Server, error) { cfg.Translator, github.FeatureFlags{ LockdownMode: cfg.LockdownMode, - InsiderMode: cfg.InsiderMode, + InsiderMode: cfg.InsiderMode, }, cfg.ContentWindowSize, featureChecker, @@ -235,7 +235,7 @@ func NewMCPServer(cfg MCPServerConfig) (*mcp.Server, error) { WithToolsets(enabledToolsets). WithTools(cfg.EnabledTools). WithFeatureChecker(featureChecker) - + // Apply token scope filtering if scopes are known (for PAT filtering) if cfg.TokenScopes != nil { inventoryBuilder = inventoryBuilder.WithFilter(github.CreateToolScopeFilter(cfg.TokenScopes)) diff --git a/pkg/github/inventory.go b/pkg/github/inventory.go index 38c936d86..31a3be0df 100644 --- a/pkg/github/inventory.go +++ b/pkg/github/inventory.go @@ -14,5 +14,6 @@ func NewInventory(t translations.TranslationHelperFunc) *inventory.Builder { return inventory.NewBuilder(). SetTools(AllTools(t)). SetResources(AllResources(t)). - SetPrompts(AllPrompts(t)) + SetPrompts(AllPrompts(t)). + SetToolsetMetadata(RemoteOnlyToolsets()) } diff --git a/pkg/github/tools.go b/pkg/github/tools.go index 4384b730d..dfb60d36f 100644 --- a/pkg/github/tools.go +++ b/pkg/github/tools.go @@ -133,6 +133,7 @@ var ( ToolsetMetadataCopilot = inventory.ToolsetMetadata{ ID: "copilot", Description: "Copilot related tools", + Default: true, Icon: "copilot", } ToolsetMetadataCopilotSpaces = inventory.ToolsetMetadata{ diff --git a/pkg/github/tools_test.go b/pkg/github/tools_test.go index 80270d2bc..2bcd2d525 100644 --- a/pkg/github/tools_test.go +++ b/pkg/github/tools_test.go @@ -23,6 +23,7 @@ func TestAddDefaultToolset(t *testing.T) { input: []string{"default"}, expected: []string{ "context", + "copilot", "repos", "issues", "pull_requests", @@ -36,6 +37,7 @@ func TestAddDefaultToolset(t *testing.T) { "actions", "gists", "context", + "copilot", "repos", "issues", "pull_requests", @@ -47,6 +49,7 @@ func TestAddDefaultToolset(t *testing.T) { input: []string{"default", "context", "repos"}, expected: []string{ "context", + "copilot", "repos", "issues", "pull_requests", diff --git a/pkg/inventory/builder.go b/pkg/inventory/builder.go index 58abb8ad1..c7abb3c93 100644 --- a/pkg/inventory/builder.go +++ b/pkg/inventory/builder.go @@ -32,6 +32,7 @@ type Builder struct { resourceTemplates []ServerResourceTemplate prompts []ServerPrompt deprecatedAliases map[string]string + toolsetMetadata []ToolsetMetadata // standalone toolset metadata for toolsets without registered tools (e.g., remote-only toolsets) // Configuration options (processed at Build time) readOnly bool @@ -68,6 +69,17 @@ func (b *Builder) SetPrompts(prompts []ServerPrompt) *Builder { return b } +// SetToolsetMetadata sets standalone toolset metadata for the inventory. +// This is used for toolsets that may not have tools registered in this build +// but should still be recognized (e.g., remote-only toolsets). +// Any metadata provided here is added to metadata derived from registered tools/resources/prompts. +// Toolsets with Default: true will be included in default toolsets even if +// no tools use them. Returns self for chaining. +func (b *Builder) SetToolsetMetadata(metadata []ToolsetMetadata) *Builder { + b.toolsetMetadata = metadata + return b +} + // WithDeprecatedAliases adds deprecated tool name aliases that map to canonical names. // Returns self for chaining. func (b *Builder) WithDeprecatedAliases(aliases map[string]string) *Builder { @@ -248,6 +260,17 @@ func (b *Builder) processToolsets() (map[ToolsetID]bool, []string, []ToolsetID, descriptions[p.Toolset.ID] = p.Toolset.Description } } + // Process standalone toolset metadata + for i := range b.toolsetMetadata { + m := &b.toolsetMetadata[i] + validIDs[m.ID] = true + if m.Default { + defaultIDs[m.ID] = true + } + if m.Description != "" { + descriptions[m.ID] = m.Description + } + } // Build sorted slices from the collected maps allToolsetIDs := make([]ToolsetID, 0, len(validIDs))