Skip to content

Commit 32d2aa6

Browse files
Merge branch 'main' into add-creating-org-repo
2 parents 118df5d + 358a415 commit 32d2aa6

15 files changed

+510
-204
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -831,6 +831,7 @@ The following sets of tools are available (all are on by default):
831831
- `repo`: Repository name (string, required)
832832

833833
- **get_commit** - Get commit details
834+
- `include_diff`: Whether to include file diffs and stats in the response. Default is true. (boolean, optional)
834835
- `owner`: Repository owner (string, required)
835836
- `page`: Page number for pagination (min 1) (number, optional)
836837
- `perPage`: Results per page for pagination (min 1, max 100) (number, optional)
@@ -899,6 +900,7 @@ The following sets of tools are available (all are on by default):
899900
- `sort`: Sort field ('indexed' only) (string, optional)
900901

901902
- **search_repositories** - Search repositories
903+
- `minimal_output`: Return minimal repository information (default: true). When false, returns full GitHub API repository objects. (boolean, optional)
902904
- `page`: Page number for pagination (min 1) (number, optional)
903905
- `perPage`: Results per page for pagination (min 1, max 100) (number, optional)
904906
- `query`: Repository search query. Examples: 'machine learning in:name stars:>1000 language:python', 'topic:react', 'user:facebook'. Supports advanced search syntax for precise filtering. (string, required)

pkg/github/__toolsnaps__/get_commit.snap

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
"description": "Get details for a commit from a GitHub repository",
77
"inputSchema": {
88
"properties": {
9+
"include_diff": {
10+
"default": true,
11+
"description": "Whether to include file diffs and stats in the response. Default is true.",
12+
"type": "boolean"
13+
},
914
"owner": {
1015
"description": "Repository owner",
1116
"type": "string"

pkg/github/__toolsnaps__/search_repositories.snap

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
"description": "Find GitHub repositories by name, description, readme, topics, or other metadata. Perfect for discovering projects, finding examples, or locating specific repositories across GitHub.",
77
"inputSchema": {
88
"properties": {
9+
"minimal_output": {
10+
"default": true,
11+
"description": "Return minimal repository information (default: true). When false, returns full GitHub API repository objects.",
12+
"type": "boolean"
13+
},
914
"page": {
1015
"description": "Page number for pagination (min 1)",
1116
"minimum": 1,

pkg/github/gists.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,11 @@ func CreateGist(getClient GetClientFn, t translations.TranslationHelperFunc) (to
165165
return mcp.NewToolResultError(fmt.Sprintf("failed to create gist: %s", string(body))), nil
166166
}
167167

168-
r, err := json.Marshal(createdGist)
168+
minimalResponse := MinimalResponse{
169+
URL: createdGist.GetHTMLURL(),
170+
}
171+
172+
r, err := json.Marshal(minimalResponse)
169173
if err != nil {
170174
return nil, fmt.Errorf("failed to marshal response: %w", err)
171175
}
@@ -249,7 +253,11 @@ func UpdateGist(getClient GetClientFn, t translations.TranslationHelperFunc) (to
249253
return mcp.NewToolResultError(fmt.Sprintf("failed to update gist: %s", string(body))), nil
250254
}
251255

252-
r, err := json.Marshal(updatedGist)
256+
minimalResponse := MinimalResponse{
257+
URL: updatedGist.GetHTMLURL(),
258+
}
259+
260+
r, err := json.Marshal(minimalResponse)
253261
if err != nil {
254262
return nil, fmt.Errorf("failed to marshal response: %w", err)
255263
}

pkg/github/gists_test.go

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -321,23 +321,12 @@ func Test_CreateGist(t *testing.T) {
321321
// Parse the result and get the text content
322322
textContent := getTextResult(t, result)
323323

324-
// Unmarshal and verify the result
325-
var gist *github.Gist
324+
// Unmarshal and verify the minimal result
325+
var gist MinimalResponse
326326
err = json.Unmarshal([]byte(textContent.Text), &gist)
327327
require.NoError(t, err)
328328

329-
assert.Equal(t, *tc.expectedGist.ID, *gist.ID)
330-
assert.Equal(t, *tc.expectedGist.Description, *gist.Description)
331-
assert.Equal(t, *tc.expectedGist.HTMLURL, *gist.HTMLURL)
332-
assert.Equal(t, *tc.expectedGist.Public, *gist.Public)
333-
334-
// Verify file content
335-
for filename, expectedFile := range tc.expectedGist.Files {
336-
actualFile, exists := gist.Files[filename]
337-
assert.True(t, exists)
338-
assert.Equal(t, *expectedFile.Filename, *actualFile.Filename)
339-
assert.Equal(t, *expectedFile.Content, *actualFile.Content)
340-
}
329+
assert.Equal(t, tc.expectedGist.GetHTMLURL(), gist.URL)
341330
})
342331
}
343332
}
@@ -486,22 +475,12 @@ func Test_UpdateGist(t *testing.T) {
486475
// Parse the result and get the text content
487476
textContent := getTextResult(t, result)
488477

489-
// Unmarshal and verify the result
490-
var gist *github.Gist
491-
err = json.Unmarshal([]byte(textContent.Text), &gist)
478+
// Unmarshal and verify the minimal result
479+
var updateResp MinimalResponse
480+
err = json.Unmarshal([]byte(textContent.Text), &updateResp)
492481
require.NoError(t, err)
493482

494-
assert.Equal(t, *tc.expectedGist.ID, *gist.ID)
495-
assert.Equal(t, *tc.expectedGist.Description, *gist.Description)
496-
assert.Equal(t, *tc.expectedGist.HTMLURL, *gist.HTMLURL)
497-
498-
// Verify file content
499-
for filename, expectedFile := range tc.expectedGist.Files {
500-
actualFile, exists := gist.Files[filename]
501-
assert.True(t, exists)
502-
assert.Equal(t, *expectedFile.Filename, *actualFile.Filename)
503-
assert.Equal(t, *expectedFile.Content, *actualFile.Content)
504-
}
483+
assert.Equal(t, tc.expectedGist.GetHTMLURL(), updateResp.URL)
505484
})
506485
}
507486
}

pkg/github/issues.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,12 @@ func CreateIssue(getClient GetClientFn, t translations.TranslationHelperFunc) (t
872872
return mcp.NewToolResultError(fmt.Sprintf("failed to create issue: %s", string(body))), nil
873873
}
874874

875-
r, err := json.Marshal(issue)
875+
// Return minimal response with just essential information
876+
minimalResponse := MinimalResponse{
877+
URL: issue.GetHTMLURL(),
878+
}
879+
880+
r, err := json.Marshal(minimalResponse)
876881
if err != nil {
877882
return nil, fmt.Errorf("failed to marshal response: %w", err)
878883
}
@@ -1242,7 +1247,12 @@ func UpdateIssue(getClient GetClientFn, t translations.TranslationHelperFunc) (t
12421247
return mcp.NewToolResultError(fmt.Sprintf("failed to update issue: %s", string(body))), nil
12431248
}
12441249

1245-
r, err := json.Marshal(updatedIssue)
1250+
// Return minimal response with just essential information
1251+
minimalResponse := MinimalResponse{
1252+
URL: updatedIssue.GetHTMLURL(),
1253+
}
1254+
1255+
r, err := json.Marshal(minimalResponse)
12461256
if err != nil {
12471257
return nil, fmt.Errorf("failed to marshal response: %w", err)
12481258
}

pkg/github/issues_test.go

Lines changed: 7 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -712,39 +712,12 @@ func Test_CreateIssue(t *testing.T) {
712712
require.NoError(t, err)
713713
textContent := getTextResult(t, result)
714714

715-
// Unmarshal and verify the result
716-
var returnedIssue github.Issue
715+
// Unmarshal and verify the minimal result
716+
var returnedIssue MinimalResponse
717717
err = json.Unmarshal([]byte(textContent.Text), &returnedIssue)
718718
require.NoError(t, err)
719719

720-
assert.Equal(t, *tc.expectedIssue.Number, *returnedIssue.Number)
721-
assert.Equal(t, *tc.expectedIssue.Title, *returnedIssue.Title)
722-
assert.Equal(t, *tc.expectedIssue.State, *returnedIssue.State)
723-
assert.Equal(t, *tc.expectedIssue.HTMLURL, *returnedIssue.HTMLURL)
724-
725-
if tc.expectedIssue.Body != nil {
726-
assert.Equal(t, *tc.expectedIssue.Body, *returnedIssue.Body)
727-
}
728-
729-
if tc.expectedIssue.Type != nil {
730-
assert.Equal(t, *tc.expectedIssue.Type.Name, *returnedIssue.Type.Name)
731-
}
732-
733-
// Check assignees if expected
734-
if len(tc.expectedIssue.Assignees) > 0 {
735-
assert.Equal(t, len(tc.expectedIssue.Assignees), len(returnedIssue.Assignees))
736-
for i, assignee := range returnedIssue.Assignees {
737-
assert.Equal(t, *tc.expectedIssue.Assignees[i].Login, *assignee.Login)
738-
}
739-
}
740-
741-
// Check labels if expected
742-
if len(tc.expectedIssue.Labels) > 0 {
743-
assert.Equal(t, len(tc.expectedIssue.Labels), len(returnedIssue.Labels))
744-
for i, label := range returnedIssue.Labels {
745-
assert.Equal(t, *tc.expectedIssue.Labels[i].Name, *label.Name)
746-
}
747-
}
720+
assert.Equal(t, tc.expectedIssue.GetHTMLURL(), returnedIssue.URL)
748721
})
749722
}
750723
}
@@ -1233,45 +1206,12 @@ func Test_UpdateIssue(t *testing.T) {
12331206
// Parse the result and get the text content if no error
12341207
textContent := getTextResult(t, result)
12351208

1236-
// Unmarshal and verify the result
1237-
var returnedIssue github.Issue
1238-
err = json.Unmarshal([]byte(textContent.Text), &returnedIssue)
1209+
// Unmarshal and verify the minimal result
1210+
var updateResp MinimalResponse
1211+
err = json.Unmarshal([]byte(textContent.Text), &updateResp)
12391212
require.NoError(t, err)
12401213

1241-
assert.Equal(t, *tc.expectedIssue.Number, *returnedIssue.Number)
1242-
assert.Equal(t, *tc.expectedIssue.Title, *returnedIssue.Title)
1243-
assert.Equal(t, *tc.expectedIssue.State, *returnedIssue.State)
1244-
assert.Equal(t, *tc.expectedIssue.HTMLURL, *returnedIssue.HTMLURL)
1245-
1246-
if tc.expectedIssue.Body != nil {
1247-
assert.Equal(t, *tc.expectedIssue.Body, *returnedIssue.Body)
1248-
}
1249-
1250-
if tc.expectedIssue.Type != nil {
1251-
assert.Equal(t, *tc.expectedIssue.Type.Name, *returnedIssue.Type.Name)
1252-
}
1253-
1254-
// Check assignees if expected
1255-
if len(tc.expectedIssue.Assignees) > 0 {
1256-
assert.Len(t, returnedIssue.Assignees, len(tc.expectedIssue.Assignees))
1257-
for i, assignee := range returnedIssue.Assignees {
1258-
assert.Equal(t, *tc.expectedIssue.Assignees[i].Login, *assignee.Login)
1259-
}
1260-
}
1261-
1262-
// Check labels if expected
1263-
if len(tc.expectedIssue.Labels) > 0 {
1264-
assert.Len(t, returnedIssue.Labels, len(tc.expectedIssue.Labels))
1265-
for i, label := range returnedIssue.Labels {
1266-
assert.Equal(t, *tc.expectedIssue.Labels[i].Name, *label.Name)
1267-
}
1268-
}
1269-
1270-
// Check milestone if expected
1271-
if tc.expectedIssue.Milestone != nil {
1272-
assert.NotNil(t, returnedIssue.Milestone)
1273-
assert.Equal(t, *tc.expectedIssue.Milestone.Number, *returnedIssue.Milestone.Number)
1274-
}
1214+
assert.Equal(t, tc.expectedIssue.GetHTMLURL(), updateResp.URL)
12751215
})
12761216
}
12771217
}

0 commit comments

Comments
 (0)