github/github-mcp-server · error
field_filters must be an array
Error message
field_filters must be an array
What it means
parseRawFieldFilters rejects a field_filters argument whose top-level value is neither []any nor []map[string]any — i.e. not a JSON array. Only the array forms are accepted; anything else (string, object, number) is a caller error.
Source
Thrown at pkg/github/issues.go:3077
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())
}
filters = append(filters, rawFieldFilter{Name: fieldName, Value: value})
}
return filters, nil
}
// resolveFieldFilters matches each raw filter against a known field definition andView on GitHub (pinned to 0ea1f775a7)
Solutions
- Wrap filters in a JSON array: field_filters must be a list of objects
- Pass an empty array or omit field_filters entirely when no field filtering is wanted
Example fix
// before
{"field_filters":{"field_name":"Status","value":"Bug"}}
// after
{"field_filters":[{"field_name":"Status","value":"Bug"}]} Defensive patterns
Strategy: type-guard
Validate before calling
func normalizeFieldFilters(v any) ([]any, error) {
switch t := v.(type) {
case []any:
return t, nil
case map[string]any: // single entry -> wrap
return []any{t}, nil
default:
return nil, fmt.Errorf("field_filters must be an array of objects")
}
} Type guard
func isFieldFiltersArray(v any) bool {
_, ok1 := v.([]any)
_, ok2 := v.([]map[string]any)
return ok1 || ok2
} Prevention
- Omit field_filters when unused rather than sending an empty non-array value
- Serialize from a typed slice of structs so JSON shape is guaranteed
When it happens
Trigger: Passing field_filters as a single object ({"field_name":...}) or as a delimited string ("Status=Bug") instead of an array of objects.
Common situations: An LLM wraps a single filter in braces instead of brackets; a script serializes a map where a list was expected.
Related errors
- each field_filters entry must be an object
- 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/7cf718ed1b368b75.
Report an issue: GitHub.