Skip to content

Various tools are missing pagination property bounds or are not using matching case #80

Description

@williammartin

Description

When running the conformance tests we saw that a lot of the tools schemas were missing minimum and maximum bounds when it came to pagination properties.

Specifically, we're looking at:

  • search_code: page and perPage
  • search_issues: page and perPage
  • search_users: page and perPage
 inputSchema mismatch for tool "search_repositories":
conformance_test.inputSchema{
Type: "object",
Properties: map[string]any{
"page": map[string]any{"type": string("number"), ...},
- "perPage": map[string]any{
- "description": string("Number of results per page (default: 30, max: 100)"),
- "type": string("number"),
- },
+ "per_page": map[string]any{"description": string("Results per page (max 100)"), "type": string("number")},
"query": map[string]any{"type": string("string"), ...},
},
Required: {"query"},
}
inputSchema mismatch for tool "list_commits":
conformance_test.inputSchema{
Type: "object",
Properties: map[string]any{
...
- "perPage": map[string]any{
- "description": string("Number of results per page (default: 30, max: 100)"),
- "type": string("number"),
- },
+ "per_page": map[string]any{"description": string("Number of records per page"), "type": string("number")},
...
}
inputSchema mismatch for tool "search_code":
conformance_test.inputSchema{
Type: "object",
Properties: map[string]any{
"order": map[string]any{"enum": []any{string("asc"), string("desc")}, "type": string("string"), ...},
"page": map[string]any{
... // 1 ignored entry
- "minimum": float64(1),
"type": string("number"),
},
"per_page": map[string]any{
... // 1 ignored entry
- "maximum": float64(100),
- "minimum": float64(1),
"type": string("number"),
},
"q": map[string]any{"type": string("string"), ...},
},
Required: {"q"},
}
inputSchema mismatch for tool "search_issues":
conformance_test.inputSchema{
Type: "object",
Properties: map[string]any{
"order": map[string]any{"enum": []any{string("asc"), string("desc")}, "type": string("string"), ...},
"page": map[string]any{
... // 1 ignored entry
- "minimum": float64(1),
"type": string("number"),
},
"per_page": map[string]any{
... // 1 ignored entry
- "maximum": float64(100),
- "minimum": float64(1),
"type": string("number"),
},
...
},
Required: {"q"},
}
inputSchema mismatch for tool "search_users":
conformance_test.inputSchema{
Type: "object",
Properties: map[string]any{
"order": map[string]any{"enum": []any{string("asc"), string("desc")}, "type": string("string"), ...},
"page": map[string]any{
... // 1 ignored entry
- "minimum": float64(1),
"type": string("number"),
},
"per_page": map[string]any{
... // 1 ignored entry
- "maximum": float64(100),
- "minimum": float64(1),
"type": string("number"),
},
"q": map[string]any{"type": string("string"), ...},
"sort": map[string]any{"enum": []any{string("followers"), string("repositories"), string("joined")}, "type": string("string"), ...},
},
Required: {"q"},
}

It's not clear to me why search_repositories and list_commits have no minimum bounds on page. Maybe an oversight for the anthropic server? However, they also have mismatching cases:

 inputSchema mismatch for tool "search_repositories":
conformance_test.inputSchema{
Type: "object",
Properties: map[string]any{
"page": map[string]any{"type": string("number"), ...},
- "perPage": map[string]any{
- "description": string("Number of results per page (default: 30, max: 100)"),
- "type": string("number"),
- },
+ "per_page": map[string]any{"description": string("Results per page (max 100)"), "type": string("number")},
"query": map[string]any{"type": string("string"), ...},
},
Required: {"query"},
}
inputSchema mismatch for tool "list_commits":
conformance_test.inputSchema{
Type: "object",
Properties: map[string]any{
...
- "perPage": map[string]any{
- "description": string("Number of results per page (default: 30, max: 100)"),
- "type": string("number"),
- },
+ "per_page": map[string]any{"description": string("Number of records per page"), "type": string("number")},
...
}

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions