Skip to content

Commit 206f7f3

Browse files
committed
Handle toolset filtering for Dynamic & with tools.
1 parent 8aaed1a commit 206f7f3

File tree

4 files changed

+14
-13
lines changed

4 files changed

+14
-13
lines changed

internal/ghmcp/server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func NewStdioMCPServer(ctx context.Context, cfg github.MCPServerConfig) (*mcp.Se
133133
inventoryBuilder := github.NewInventory(cfg.Translator).
134134
WithDeprecatedAliases(github.DeprecatedToolAliases).
135135
WithReadOnly(cfg.ReadOnly).
136-
WithToolsets(cfg.EnabledToolsets).
136+
WithToolsets(github.ResolvedEnabledToolsets(cfg.DynamicToolsets, cfg.EnabledToolsets, cfg.EnabledTools)).
137137
WithTools(github.CleanTools(cfg.EnabledTools)).
138138
WithServerInstructions().
139139
WithFeatureChecker(featureChecker)

pkg/github/server.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,25 +134,23 @@ func registerDynamicTools(server *mcp.Server, inventory *inventory.Inventory, de
134134
}
135135
}
136136

137-
// resolveEnabledToolsets determines which toolsets should be enabled based on config.
137+
// ResolvedEnabledToolsets determines which toolsets should be enabled based on config.
138138
// Returns nil for "use defaults", empty slice for "none", or explicit list.
139-
func resolveEnabledToolsets(cfg *MCPServerConfig) []string {
140-
enabledToolsets := cfg.EnabledToolsets
141-
139+
func ResolvedEnabledToolsets(dynamicToolsets bool, enabledToolsets []string, enabledTools []string) []string {
142140
// In dynamic mode, remove "all" and "default" since users enable toolsets on demand
143-
if cfg.DynamicToolsets && enabledToolsets != nil {
141+
if dynamicToolsets && enabledToolsets != nil {
144142
enabledToolsets = RemoveToolset(enabledToolsets, string(ToolsetMetadataAll.ID))
145143
enabledToolsets = RemoveToolset(enabledToolsets, string(ToolsetMetadataDefault.ID))
146144
}
147145

148146
if enabledToolsets != nil {
149147
return enabledToolsets
150148
}
151-
if cfg.DynamicToolsets {
149+
if dynamicToolsets {
152150
// Dynamic mode with no toolsets specified: start empty so users enable on demand
153151
return []string{}
154152
}
155-
if len(cfg.EnabledTools) > 0 {
153+
if len(enabledTools) > 0 {
156154
// When specific tools are requested but no toolsets, don't use default toolsets
157155
// This matches the original behavior: --tools=X alone registers only X
158156
return []string{}

pkg/github/server_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ func TestResolveEnabledToolsets(t *testing.T) {
214214

215215
for _, tc := range tests {
216216
t.Run(tc.name, func(t *testing.T) {
217-
result := resolveEnabledToolsets(&tc.cfg)
217+
result := ResolvedEnabledToolsets(tc.cfg.DynamicToolsets, tc.cfg.EnabledToolsets, tc.cfg.EnabledTools)
218218
assert.Equal(t, tc.expectedResult, result)
219219
})
220220
}

pkg/http/handler.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,12 +199,15 @@ func InventoryFiltersForRequest(r *http.Request, builder *inventory.Builder) *in
199199
builder = builder.WithReadOnly(true)
200200
}
201201

202-
if toolsets := ghcontext.GetToolsets(ctx); len(toolsets) > 0 {
203-
builder = builder.WithToolsets(toolsets)
202+
toolsets := ghcontext.GetToolsets(ctx)
203+
tools := ghcontext.GetTools(ctx)
204+
205+
if len(toolsets) > 0 {
206+
builder = builder.WithToolsets(github.ResolvedEnabledToolsets(false, toolsets, tools)) // No dynamic toolsets in HTTP mode
204207
}
205208

206-
if tools := ghcontext.GetTools(ctx); len(tools) > 0 {
207-
if len(ghcontext.GetToolsets(ctx)) == 0 {
209+
if len(tools) > 0 {
210+
if len(toolsets) == 0 {
208211
builder = builder.WithToolsets([]string{})
209212
}
210213
builder = builder.WithTools(github.CleanTools(tools))

0 commit comments

Comments
 (0)