Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
提交
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 21 additions & 27 deletions internal/ghmcp/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,16 +171,31 @@ func 新建MCPServer(cfg MCPServerConfig) (*mcp.Server, error) {

enabledToolsets := resolveEnabledToolsets(cfg)

// For instruction generation, we need actual toolset names (not nil).
// nil means "use defaults" in inventory, so expand it for instructions.
instructionToolsets := enabledToolsets
if instructionToolsets == nil {
instructionToolsets = github.GetDefaultToolsetIDs()
// Create feature checker
featureChecker := createFeatureChecker(cfg.EnabledFeatures)

// Build and register the tool/resource/prompt inventory
inventoryBuilder := github.新建Inventory(cfg.Translator).
WithDeprecatedAliases(github.DeprecatedToolAliases).
WithReadOnly(cfg.ReadOnly).
WithToolsets(enabledToolsets).
WithTools(cfg.EnabledTools).
WithFeatureChecker(featureChecker).
WithServerInstructions()

// Apply token scope filtering if scopes are known (for PAT filtering)
if cfg.TokenScopes != nil {
inventoryBuilder = inventoryBuilder.WithFilter(github.CreateToolScopeFilter(cfg.TokenScopes))
}

inventory, err := inventoryBuilder.Build()
if err != nil {
return nil, fmt.Errorf("failed to build inventory: %w", err)
}

// Create the MCP server
serverOpts := &mcp.ServerOptions{
Instructions: github.GenerateInstructions(instructionToolsets),
Instructions: inventory.Instructions(),
Logger: cfg.Logger,
CompletionHandler: github.CompletionsHandler(func(_ context.Context) (*gogithub.Client, error) {
return clients.rest, nil
Expand All @@ -203,9 +218,6 @@ func 新建MCPServer(cfg MCPServerConfig) (*mcp.Server, error) {
ghServer.AddReceivingMiddleware(addGitHubAPIErrorToContext)
ghServer.AddReceivingMiddleware(addUserAgentsMiddleware(cfg, clients.rest, clients.gqlHTTP))

// Create feature checker
featureChecker := createFeatureChecker(cfg.EnabledFeatures)

// Create dependencies for tool handlers
deps := github.新建BaseDeps(
clients.rest,
Expand All @@ -228,24 +240,6 @@ func 新建MCPServer(cfg MCPServerConfig) (*mcp.Server, error) {
}
})

// Build and register the tool/resource/prompt inventory
inventoryBuilder := github.新建Inventory(cfg.Translator).
WithDeprecatedAliases(github.DeprecatedToolAliases).
WithReadOnly(cfg.ReadOnly).
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))
}

inventory, err := inventoryBuilder.Build()
if err != nil {
return nil, fmt.Errorf("failed to build inventory: %w", err)
}

if unrecognized := inventory.UnrecognizedToolsets(); len(unrecognized) > 0 {
fmt.Fprintf(os.Stderr, "Warning: unrecognized toolsets ignored: %s\n", strings.Join(unrecognized, ", "))
}
Expand Down
186 changes: 0 additions & 186 deletions pkg/github/instructions_test.go

This file was deleted.

41 changes: 23 additions & 18 deletions pkg/github/tools.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,11 @@ var (
Icon: "check-circle",
}
ToolsetMetadataContext = inventory.ToolsetMetadata{
ID: "context",
Description: "Tools that provide context about the current user and GitHub context you are operating in",
Default: true,
Icon: "person",
ID: "context",
Description: "Tools that provide context about the current user and GitHub context you are operating in",
Default: true,
Icon: "person",
InstructionsFunc: generateContextToolsetInstructions,
}
ToolsetMetadataRepos = inventory.ToolsetMetadata{
ID: "repos",
Expand All @@ -45,16 +46,18 @@ var (
Icon: "git-branch",
}
ToolsetMetadata问题 = inventory.ToolsetMetadata{
ID: "issues",
Description: "GitHub 问题 related tools",
Default: true,
Icon: "issue-opened",
ID: "issues",
Description: "GitHub 问题 related tools",
Default: true,
Icon: "issue-opened",
InstructionsFunc: generate问题ToolsetInstructions,
}
ToolsetMetadataPullRequests = inventory.ToolsetMetadata{
ID: "pull_requests",
Description: "GitHub Pull Request related tools",
Default: true,
Icon: "git-pull-request",
ID: "pull_requests",
Description: "GitHub Pull Request related tools",
Default: true,
Icon: "git-pull-request",
InstructionsFunc: generatePullRequestsToolsetInstructions,
}
ToolsetMetadataUsers = inventory.ToolsetMetadata{
ID: "users",
Expand Down Expand Up @@ -93,9 +96,10 @@ var (
Icon: "bell",
}
ToolsetMetadata讨论 = inventory.ToolsetMetadata{
ID: "discussions",
Description: "GitHub 讨论 related tools",
Icon: "comment-discussion",
ID: "discussions",
Description: "GitHub 讨论 related tools",
Icon: "comment-discussion",
InstructionsFunc: generate讨论ToolsetInstructions,
}
ToolsetMetadataGists = inventory.ToolsetMetadata{
ID: "gists",
Expand All @@ -108,9 +112,10 @@ var (
Icon: "shield",
}
ToolsetMetadata项目 = inventory.ToolsetMetadata{
ID: "projects",
Description: "GitHub 项目 related tools",
Icon: "project",
ID: "projects",
Description: "GitHub 项目 related tools",
Icon: "project",
InstructionsFunc: generate项目ToolsetInstructions,
}
ToolsetMetadata星标者 = inventory.ToolsetMetadata{
ID: "stargazers",
Expand Down
Loading