mirror of
https://gitea.com/gitea/gitea-mcp.git
synced 2026-02-27 09:05:12 +00:00
fix: add missing required attributes to search tool schemas (#135)
## Summary - Add `mcp.Required()` to `keyword` in `search_repos` and `search_users` tool schemas - Add `mcp.Required()` to `org` and `query` in `search_org_teams` tool schema - Add test verifying required fields are set on all search tool schemas - Fixes MCP clients failing with `keyword is required` because the schema didn't declare the field as required Closes #115 --- *This PR was authored by Claude.* Reviewed-on: https://gitea.com/gitea/gitea-mcp/pulls/135 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: silverwind <silverwind@noreply.gitea.com> Co-committed-by: silverwind <silverwind@noreply.gitea.com>
This commit is contained in:
@@ -27,7 +27,7 @@ var (
|
||||
SearchUsersTool = mcp.NewTool(
|
||||
SearchUsersToolName,
|
||||
mcp.WithDescription("search users"),
|
||||
mcp.WithString("keyword", mcp.Description("Keyword")),
|
||||
mcp.WithString("keyword", mcp.Required(), mcp.Description("Keyword")),
|
||||
mcp.WithNumber("page", mcp.Description("Page"), mcp.DefaultNumber(1)),
|
||||
mcp.WithNumber("pageSize", mcp.Description("PageSize"), mcp.DefaultNumber(100)),
|
||||
)
|
||||
@@ -35,8 +35,8 @@ var (
|
||||
SearOrgTeamsTool = mcp.NewTool(
|
||||
SearchOrgTeamsToolName,
|
||||
mcp.WithDescription("search organization teams"),
|
||||
mcp.WithString("org", mcp.Description("organization name")),
|
||||
mcp.WithString("query", mcp.Description("search organization teams")),
|
||||
mcp.WithString("org", mcp.Required(), mcp.Description("organization name")),
|
||||
mcp.WithString("query", mcp.Required(), mcp.Description("search organization teams")),
|
||||
mcp.WithBoolean("includeDescription", mcp.Description("include description?")),
|
||||
mcp.WithNumber("page", mcp.Description("Page"), mcp.DefaultNumber(1)),
|
||||
mcp.WithNumber("pageSize", mcp.Description("PageSize"), mcp.DefaultNumber(100)),
|
||||
@@ -45,7 +45,7 @@ var (
|
||||
SearchReposTool = mcp.NewTool(
|
||||
SearchReposToolName,
|
||||
mcp.WithDescription("search repos"),
|
||||
mcp.WithString("keyword", mcp.Description("Keyword")),
|
||||
mcp.WithString("keyword", mcp.Required(), mcp.Description("Keyword")),
|
||||
mcp.WithBoolean("keywordIsTopic", mcp.Description("KeywordIsTopic")),
|
||||
mcp.WithBoolean("keywordInDescription", mcp.Description("KeywordInDescription")),
|
||||
mcp.WithNumber("ownerID", mcp.Description("OwnerID")),
|
||||
|
||||
42
operation/search/search_test.go
Normal file
42
operation/search/search_test.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package search
|
||||
|
||||
import (
|
||||
"slices"
|
||||
"testing"
|
||||
|
||||
"github.com/mark3labs/mcp-go/mcp"
|
||||
)
|
||||
|
||||
func TestSearchToolsRequiredFields(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
tool mcp.Tool
|
||||
required []string
|
||||
}{
|
||||
{
|
||||
name: "search_users",
|
||||
tool: SearchUsersTool,
|
||||
required: []string{"keyword"},
|
||||
},
|
||||
{
|
||||
name: "search_org_teams",
|
||||
tool: SearOrgTeamsTool,
|
||||
required: []string{"org", "query"},
|
||||
},
|
||||
{
|
||||
name: "search_repos",
|
||||
tool: SearchReposTool,
|
||||
required: []string{"keyword"},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
for _, field := range tt.required {
|
||||
if !slices.Contains(tt.tool.InputSchema.Required, field) {
|
||||
t.Errorf("tool %s: expected %q to be required, got required=%v", tt.name, field, tt.tool.InputSchema.Required)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user