github/github-mcp-server · error
field_filters entry: %s
Error message
field_filters entry: %s
What it means
While parsing a field_filters entry, the required string parameter field_name is missing, empty, or not a string. The embedded RequiredParam error text ("missing required parameter: field_name" or "parameter field_name is not of type string") is appended after the 'field_filters entry:' prefix.
Source
Thrown at pkg/github/issues.go:3084
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 and
// coerces the value into the right typed slot on IssueFieldValueFilter. Matching is
// case-insensitive on field name; option names are also matched case-insensitively for
// single-select fields.
func resolveFieldFilters(rawFilters []rawFieldFilter, fields []IssueField) ([]IssueFieldValueFilter, error) {
byName := make(map[string]IssueField, len(fields))
knownNames := make([]string, 0, len(fields))
for _, f := range fields {View on GitHub (pinned to 0ea1f775a7)
Solutions
- Add a non-empty string field_name naming the repository issue field to every entry
- Check the exact spelling of the key — it is field_name, not field or name
- Ensure the value is a JSON string, not a number
Example fix
// before
{"field_filters":[{"name":"Status","value":"Bug"}]}
// after
{"field_filters":[{"field_name":"Status","value":"Bug"}]} Defensive patterns
Strategy: validation
Validate before calling
func requireFieldName(entry map[string]any) error {
name, ok := entry["field_name"]
if !ok || name == "" {
return fmt.Errorf("field_name is required in every field_filters entry")
}
if _, ok := name.(string); !ok {
return fmt.Errorf("field_name must be a string")
}
return nil
} Type guard
func hasStringKey(m map[string]any, key string) bool {
s, ok := m[key].(string)
return ok && s != ""
} Prevention
- Use the exact key 'field_name' (snake_case) in every entry
- Define a struct with json tags for filters instead of ad-hoc maps
When it happens
Trigger: A field_filters entry object that omits field_name, sets it to "", or supplies a non-string (e.g. {"value":"Bug"} or {"field_name":123,"value":"Bug"}).
Common situations: An LLM uses a different key such as "field" or "name"; a script leaves field_name empty for a value-only filter.
Related errors
- field_filters entry %q: %s
- each field_filters entry must be an object
- field_filters must be an array
- 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/b4bb8808306e5705.
Report an issue: GitHub.