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

  1. Add a non-empty string field_name naming the repository issue field to every entry
  2. Check the exact spelling of the key — it is field_name, not field or name
  3. 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

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


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