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 and

View on GitHub (pinned to 0ea1f775a7)

Solutions

  1. Wrap filters in a JSON array: field_filters must be a list of objects
  2. 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

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


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