Skip to content

Commit 1bdf3bd

Browse files
committed
Consolidating tools draft
1 parent f1e0e8f commit 1bdf3bd

File tree

1 file changed

+42
-3
lines changed

1 file changed

+42
-3
lines changed

pkg/github/pullrequests.go

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,22 @@ import (
1919

2020
// GetPullRequest creates a tool to get details of a specific pull request.
2121
func GetPullRequest(getClient GetClientFn, t translations.TranslationHelperFunc) (mcp.Tool, server.ToolHandlerFunc) {
22-
return mcp.NewTool("get_pull_request",
23-
mcp.WithDescription(t("TOOL_GET_PULL_REQUEST_DESCRIPTION", "Get details of a specific pull request in a GitHub repository.")),
22+
return mcp.NewTool("pull_request_read",
23+
mcp.WithDescription(t("TOOL_PULL_REQUEST_READ_DESCRIPTION", "Get information on a specific pull request in GitHub repository.")),
2424
mcp.WithToolAnnotation(mcp.ToolAnnotation{
25-
Title: t("TOOL_GET_PULL_REQUEST_USER_TITLE", "Get pull request details"),
25+
Title: t("TOOL_GET_PULL_REQUEST_USER_TITLE", "Get pull requests details."),
2626
ReadOnlyHint: ToBoolPtr(true),
2727
}),
28+
mcp.WithString("method",
29+
mcp.Required(),
30+
mcp.Description(`Action to perform with pull requests in GitHub.
31+
Possible options:
32+
1. get - Get details of a specific pull request in a GitHub repository.
33+
2. get_diff - Get the diff of a pull request.
34+
3. get_files - Get the files changed in a specific pull request.
35+
4. get_status - Get status of a pull request.
36+
`),
37+
),
2838
mcp.WithString("owner",
2939
mcp.Required(),
3040
mcp.Description("Repository owner"),
@@ -56,6 +66,8 @@ func GetPullRequest(getClient GetClientFn, t translations.TranslationHelperFunc)
5666
if err != nil {
5767
return nil, fmt.Errorf("failed to get GitHub client: %w", err)
5868
}
69+
70+
5971
pr, resp, err := client.PullRequests.Get(ctx, owner, repo, pullNumber)
6072
if err != nil {
6173
return ghErrors.NewGitHubAPIErrorResponse(ctx,
@@ -1870,6 +1882,33 @@ func RequestCopilotReview(getClient GetClientFn, t translations.TranslationHelpe
18701882
}
18711883
}
18721884

1885+
func GetPullRequest() {
1886+
pr, resp, err := client.PullRequests.Get(ctx, owner, repo, pullNumber)
1887+
if err != nil {
1888+
return ghErrors.NewGitHubAPIErrorResponse(ctx,
1889+
"failed to get pull request",
1890+
resp,
1891+
err,
1892+
), nil
1893+
}
1894+
defer func() { _ = resp.Body.Close() }()
1895+
1896+
if resp.StatusCode != http.StatusOK {
1897+
body, err := io.ReadAll(resp.Body)
1898+
if err != nil {
1899+
return nil, fmt.Errorf("failed to read response body: %w", err)
1900+
}
1901+
return mcp.NewToolResultError(fmt.Sprintf("failed to get pull request: %s", string(body))), nil
1902+
}
1903+
1904+
r, err := json.Marshal(pr)
1905+
if err != nil {
1906+
return nil, fmt.Errorf("failed to marshal response: %w", err)
1907+
}
1908+
1909+
return mcp.NewToolResultText(string(r)), nil
1910+
}
1911+
18731912
// newGQLString like takes something that approximates a string (of which there are many types in shurcooL/githubv4)
18741913
// and constructs a pointer to it, or nil if the string is empty. This is extremely useful because when we parse
18751914
// params from the MCP request, we need to convert them to types that are pointers of type def strings and it's

0 commit comments

Comments
 (0)