@@ -171,16 +171,31 @@ func NewMCPServer(cfg MCPServerConfig) (*mcp.Server, error) {
171171
172172 enabledToolsets := resolveEnabledToolsets(cfg)
173173
174- // For instruction generation, we need actual toolset names (not nil).
175- // nil means "use defaults" in inventory, so expand it for instructions.
176- instructionToolsets := enabledToolsets
177- if instructionToolsets == nil {
178- instructionToolsets = github.GetDefaultToolsetIDs()
174+ // Create feature checker
175+ featureChecker := createFeatureChecker(cfg.EnabledFeatures)
176+
177+ // Build and register the tool/resource/prompt inventory
178+ inventoryBuilder := github.NewInventory(cfg.Translator).
179+ WithDeprecatedAliases(github.DeprecatedToolAliases).
180+ WithReadOnly(cfg.ReadOnly).
181+ WithToolsets(enabledToolsets).
182+ WithTools(cfg.EnabledTools).
183+ WithFeatureChecker(featureChecker).
184+ WithServerInstructions()
185+
186+ // Apply token scope filtering if scopes are known (for PAT filtering)
187+ if cfg.TokenScopes != nil {
188+ inventoryBuilder = inventoryBuilder.WithFilter(github.CreateToolScopeFilter(cfg.TokenScopes))
189+ }
190+
191+ inventory, err := inventoryBuilder.Build()
192+ if err != nil {
193+ return nil, fmt.Errorf("failed to build inventory: %w", err)
179194 }
180195
181196 // Create the MCP server
182197 serverOpts := &mcp.ServerOptions{
183- Instructions: github.GenerateInstructions(instructionToolsets ),
198+ Instructions: inventory.Instructions( ),
184199 Logger: cfg.Logger,
185200 CompletionHandler: github.CompletionsHandler(func(_ context.Context) (*gogithub.Client, error) {
186201 return clients.rest, nil
@@ -203,9 +218,6 @@ func NewMCPServer(cfg MCPServerConfig) (*mcp.Server, error) {
203218 ghServer.AddReceivingMiddleware(addGitHubAPIErrorToContext)
204219 ghServer.AddReceivingMiddleware(addUserAgentsMiddleware(cfg, clients.rest, clients.gqlHTTP))
205220
206- // Create feature checker
207- featureChecker := createFeatureChecker(cfg.EnabledFeatures)
208-
209221 // Create dependencies for tool handlers
210222 deps := github.NewBaseDeps(
211223 clients.rest,
@@ -228,24 +240,6 @@ func NewMCPServer(cfg MCPServerConfig) (*mcp.Server, error) {
228240 }
229241 })
230242
231- // Build and register the tool/resource/prompt inventory
232- inventoryBuilder := github.NewInventory(cfg.Translator).
233- WithDeprecatedAliases(github.DeprecatedToolAliases).
234- WithReadOnly(cfg.ReadOnly).
235- WithToolsets(enabledToolsets).
236- WithTools(cfg.EnabledTools).
237- WithFeatureChecker(featureChecker)
238-
239- // Apply token scope filtering if scopes are known (for PAT filtering)
240- if cfg.TokenScopes != nil {
241- inventoryBuilder = inventoryBuilder.WithFilter(github.CreateToolScopeFilter(cfg.TokenScopes))
242- }
243-
244- inventory, err := inventoryBuilder.Build()
245- if err != nil {
246- return nil, fmt.Errorf("failed to build inventory: %w", err)
247- }
248-
249243 if unrecognized := inventory.UnrecognizedToolsets(); len(unrecognized) > 0 {
250244 fmt.Fprintf(os.Stderr, "Warning: unrecognized toolsets ignored: %s\n", strings.Join(unrecognized, ", "))
251245 }
0 commit comments