github/github-mcp-server · error
each field_filters entry must be an object
Error message
each field_filters entry must be an object
What it means
parseRawFieldFilters rejects a field_filters array in which at least one element is not a JSON object. Each entry must be an object like {"field_name":"Status","value":"Bug"} so field_name and value can be extracted.
Source
Thrown at pkg/github/issues.go:3070
Value string
}
// parseRawFieldFilters extracts the optional field_filters parameter into a list of
// {name, value} pairs. The value is always a string here; type-aware coercion happens
// later in resolveFieldFilters once we know each field's data_type.
func parseRawFieldFilters(args map[string]any) ([]rawFieldFilter, error) {
raw, ok := args["field_filters"]
if !ok {
return nil, nil
}
var entries []map[string]any
switch v := raw.(type) {
case []any:
for _, f := range v {
entry, ok := f.(map[string]any)
if !ok {
return nil, fmt.Errorf("each field_filters entry must be an object")
}
entries = append(entries, entry)
}
case []map[string]any:
entries = v
default:
return nil, fmt.Errorf("field_filters must be an array")
}
filters := make([]rawFieldFilter, 0, len(entries))
for _, entry := range entries {
fieldName, err := RequiredParam[string](entry, "field_name")
if err != nil {
return nil, fmt.Errorf("field_filters entry: %s", err.Error())
}
value, err := RequiredParam[string](entry, "value")
if err != nil {
return nil, fmt.Errorf("field_filters entry %q: %s", fieldName, err.Error())View on GitHub (pinned to 0ea1f775a7)
Solutions
- Make every element of field_filters an object with field_name and value string keys
- Remove stray non-object entries from the array
Example fix
// before
{"field_filters":["Priority=P1"]}
// after
{"field_filters":[{"field_name":"Priority","value":"P1"}]} Defensive patterns
Strategy: validation
Validate before calling
func validateFieldFiltersShape(raw any) error {
list, ok := raw.([]any)
if !ok {
return fmt.Errorf("field_filters must be an array")
}
for i, f := range list {
if _, ok := f.(map[string]any); !ok {
return fmt.Errorf("field_filters[%d] must be an object", i)
}
}
return nil
} Type guard
func isFieldFilterList(v any) bool {
list, ok := v.([]any)
if !ok {
return false
}
for _, f := range list {
if _, ok := f.(map[string]any); !ok {
return false
}
}
return true
} Prevention
- Always build field_filters as an array of objects, never a bare string or map
- Add a schema check in your tool-invocation wrapper rejecting non-object entries
When it happens
Trigger: Calling an issue-listing tool with field_filters set to an array containing a bare string, number, or null, e.g. ["Status"] or [123].
Common situations: An LLM collapses the filter to a string ("field_filters":["Status=Bug"]); a script reuses a key=value syntax instead of object form.
Related errors
- field_filters must be an array
- field_filters entry: %s
- field_filters entry %q: %s
- field_filters: unknown field %q. Known fields: %s
- field_filters: %q is not a valid option for %q. Valid option
AI-assisted analysis of github/github-mcp-server@0ea1f775a7 (2026-08-15).
Data as JSON: /api/errors/78e0232134defc7e.
Report an issue: GitHub.