Skip to content

Commit 52d0bf0

Browse files
cleanup search_users response
1 parent 8854b2a commit 52d0bf0

File tree

2 files changed

+49
-21
lines changed

2 files changed

+49
-21
lines changed

pkg/github/search.go

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,19 @@ func SearchCode(getClient GetClientFn, t translations.TranslationHelperFunc) (to
146146
}
147147
}
148148

149+
type MinimalUser struct {
150+
Login string `json:"login"`
151+
ID int64 `json:"id,omitempty"`
152+
ProfileURL string `json:"profile_url,omitempty"`
153+
AvatarURL string `json:"avatar_url,omitempty"`
154+
}
155+
156+
type MinimalSearchUsersResult struct {
157+
TotalCount int `json:"total_count"`
158+
IncompleteResults bool `json:"incomplete_results"`
159+
Items []MinimalUser `json:"items"`
160+
}
161+
149162
// SearchUsers creates a tool to search for GitHub users.
150163
func SearchUsers(getClient GetClientFn, t translations.TranslationHelperFunc) (tool mcp.Tool, handler server.ToolHandlerFunc) {
151164
return mcp.NewTool("search_users",
@@ -200,7 +213,7 @@ func SearchUsers(getClient GetClientFn, t translations.TranslationHelperFunc) (t
200213
return nil, fmt.Errorf("failed to get GitHub client: %w", err)
201214
}
202215

203-
result, resp, err := client.Search.Users(ctx, query, opts)
216+
result, resp, err := client.Search.Users(ctx, "type:user "+query, opts)
204217
if err != nil {
205218
return nil, fmt.Errorf("failed to search users: %w", err)
206219
}
@@ -214,11 +227,33 @@ func SearchUsers(getClient GetClientFn, t translations.TranslationHelperFunc) (t
214227
return mcp.NewToolResultError(fmt.Sprintf("failed to search users: %s", string(body))), nil
215228
}
216229

217-
r, err := json.Marshal(result)
230+
minimalUsers := make([]MinimalUser, 0, len(result.Users))
231+
for _, user := range result.Users {
232+
mu := MinimalUser{
233+
Login: user.GetLogin(),
234+
ID: user.GetID(),
235+
ProfileURL: user.GetHTMLURL(),
236+
AvatarURL: user.GetAvatarURL(),
237+
}
238+
239+
minimalUsers = append(minimalUsers, mu)
240+
}
241+
242+
minimalResp := MinimalSearchUsersResult{
243+
TotalCount: result.GetTotal(),
244+
IncompleteResults: result.GetIncompleteResults(),
245+
Items: minimalUsers,
246+
}
247+
if result.Total != nil {
248+
minimalResp.TotalCount = *result.Total
249+
}
250+
if result.IncompleteResults != nil {
251+
minimalResp.IncompleteResults = *result.IncompleteResults
252+
}
253+
r, err := json.Marshal(minimalResp)
218254
if err != nil {
219255
return nil, fmt.Errorf("failed to marshal response: %w", err)
220256
}
221-
222257
return mcp.NewToolResultText(string(r)), nil
223258
}
224259
}

pkg/github/search_test.go

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -335,18 +335,13 @@ func Test_SearchUsers(t *testing.T) {
335335
ID: github.Ptr(int64(1001)),
336336
HTMLURL: github.Ptr("https://github.com/user1"),
337337
AvatarURL: github.Ptr("https://avatars.githubusercontent.com/u/1001"),
338-
Type: github.Ptr("User"),
339-
Followers: github.Ptr(100),
340-
Following: github.Ptr(50),
341338
},
342339
{
343340
Login: github.Ptr("user2"),
344341
ID: github.Ptr(int64(1002)),
345342
HTMLURL: github.Ptr("https://github.com/user2"),
346343
AvatarURL: github.Ptr("https://avatars.githubusercontent.com/u/1002"),
347344
Type: github.Ptr("User"),
348-
Followers: github.Ptr(200),
349-
Following: github.Ptr(75),
350345
},
351346
},
352347
}
@@ -365,7 +360,7 @@ func Test_SearchUsers(t *testing.T) {
365360
mock.WithRequestMatchHandler(
366361
mock.GetSearchUsers,
367362
expectQueryParams(t, map[string]string{
368-
"q": "location:finland language:go",
363+
"q": "type:user location:finland language:go",
369364
"sort": "followers",
370365
"order": "desc",
371366
"page": "1",
@@ -391,7 +386,7 @@ func Test_SearchUsers(t *testing.T) {
391386
mock.WithRequestMatchHandler(
392387
mock.GetSearchUsers,
393388
expectQueryParams(t, map[string]string{
394-
"q": "location:finland language:go",
389+
"q": "type:user location:finland language:go",
395390
"page": "1",
396391
"per_page": "30",
397392
}).andThen(
@@ -451,19 +446,17 @@ func Test_SearchUsers(t *testing.T) {
451446
textContent := getTextResult(t, result)
452447

453448
// Unmarshal and verify the result
454-
var returnedResult github.UsersSearchResult
449+
var returnedResult MinimalSearchUsersResult
455450
err = json.Unmarshal([]byte(textContent.Text), &returnedResult)
456451
require.NoError(t, err)
457-
assert.Equal(t, *tc.expectedResult.Total, *returnedResult.Total)
458-
assert.Equal(t, *tc.expectedResult.IncompleteResults, *returnedResult.IncompleteResults)
459-
assert.Len(t, returnedResult.Users, len(tc.expectedResult.Users))
460-
for i, user := range returnedResult.Users {
461-
assert.Equal(t, *tc.expectedResult.Users[i].Login, *user.Login)
462-
assert.Equal(t, *tc.expectedResult.Users[i].ID, *user.ID)
463-
assert.Equal(t, *tc.expectedResult.Users[i].HTMLURL, *user.HTMLURL)
464-
assert.Equal(t, *tc.expectedResult.Users[i].AvatarURL, *user.AvatarURL)
465-
assert.Equal(t, *tc.expectedResult.Users[i].Type, *user.Type)
466-
assert.Equal(t, *tc.expectedResult.Users[i].Followers, *user.Followers)
452+
assert.Equal(t, *tc.expectedResult.Total, returnedResult.TotalCount)
453+
assert.Equal(t, *tc.expectedResult.IncompleteResults, returnedResult.IncompleteResults)
454+
assert.Len(t, returnedResult.Items, len(tc.expectedResult.Users))
455+
for i, user := range returnedResult.Items {
456+
assert.Equal(t, *tc.expectedResult.Users[i].Login, user.Login)
457+
assert.Equal(t, *tc.expectedResult.Users[i].ID, user.ID)
458+
assert.Equal(t, *tc.expectedResult.Users[i].HTMLURL, user.ProfileURL)
459+
assert.Equal(t, *tc.expectedResult.Users[i].AvatarURL, user.AvatarURL)
467460
}
468461
})
469462
}

0 commit comments

Comments
 (0)