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

  1. Make every element of field_filters an object with field_name and value string keys
  2. 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

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


AI-assisted analysis of github/github-mcp-server@0ea1f775a7 (2026-08-15). Data as JSON: /api/errors/78e0232134defc7e. Report an issue: GitHub.