Fix MCP tools/list rejection: wrap list_repos slice in object
The go-sdk infers each tool's outputSchema from its handler result
type, and MCP structured output must be type "object". list_repos
returned []repos.State, yielding outputSchema.type "array", which
Claude Desktop rejects at tools/list — taking the whole server down.
Wrap the slice in listReposOutput{Repos: ...} so the schema is an
object, update the round-trip test, and record the struct-result rule
in AGENT.md §8.1.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -65,8 +65,9 @@ func TestMCPRoundTrip(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("list_repos: %v", err)
|
||||
}
|
||||
var states []repos.State
|
||||
decodeResult(t, res, &states)
|
||||
var listOut listReposOutput
|
||||
decodeResult(t, res, &listOut)
|
||||
states := listOut.Repos
|
||||
if len(states) != 1 {
|
||||
t.Fatalf("expected 1 repo, got %d: %+v", len(states), states)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user