{"record":{"id":"7379a516f55c98b9","repo":"github/github-mcp-server","slug":"field-filters-entry-q-s","errorCode":null,"errorMessage":"field_filters entry %q: %s","messagePattern":"field_filters entry %q: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/github/issues.go","lineNumber":3088,"sourceCode":"\t\t\t\treturn nil, fmt.Errorf(\"each field_filters entry must be an object\")\n\t\t\t}\n\t\t\tentries = append(entries, entry)\n\t\t}\n\tcase []map[string]any:\n\t\tentries = v\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"field_filters must be an array\")\n\t}\n\n\tfilters := make([]rawFieldFilter, 0, len(entries))\n\tfor _, entry := range entries {\n\t\tfieldName, err := RequiredParam[string](entry, \"field_name\")\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"field_filters entry: %s\", err.Error())\n\t\t}\n\t\tvalue, err := RequiredParam[string](entry, \"value\")\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"field_filters entry %q: %s\", fieldName, err.Error())\n\t\t}\n\t\tfilters = append(filters, rawFieldFilter{Name: fieldName, Value: value})\n\t}\n\treturn filters, nil\n}\n\n// resolveFieldFilters matches each raw filter against a known field definition and\n// coerces the value into the right typed slot on IssueFieldValueFilter. Matching is\n// case-insensitive on field name; option names are also matched case-insensitively for\n// single-select fields.\nfunc resolveFieldFilters(rawFilters []rawFieldFilter, fields []IssueField) ([]IssueFieldValueFilter, error) {\n\tbyName := make(map[string]IssueField, len(fields))\n\tknownNames := make([]string, 0, len(fields))\n\tfor _, f := range fields {\n\t\tbyName[strings.ToLower(f.Name)] = f\n\t\tknownNames = append(knownNames, f.Name)\n\t}\n","sourceCodeStart":3070,"sourceCodeEnd":3106,"githubUrl":"https://github.com/github/github-mcp-server/blob/0ea1f775a7c73eff1bd2e25904d01136756bbfe2/pkg/github/issues.go#L3070-L3106","documentation":"While parsing a field_filters entry whose field_name was already read, the required string parameter value is missing, empty, or not a string. The message includes the offending field name so you know which entry to fix.","triggerScenarios":"A field_filters entry like {\"field_name\":\"Priority\"} with no value key, value:\"\", or a non-string value such as {\"field_name\":\"Points\",\"value\":5}.","commonSituations":"Passing numbers as JSON numbers instead of strings (values are always strings and coerced later per field type); omitting value to mean \"any\".","solutions":["Add a non-empty string value to the entry identified by the field name in the error message","Send numbers as strings (\"5\"), since per-type coercion happens later in resolveFieldFilters","Remove the entry if you do not actually want to constrain that field"],"exampleFix":"// before\n{\"field_filters\":[{\"field_name\":\"Points\",\"value\":5}]}\n// after\n{\"field_filters\":[{\"field_name\":\"Points\",\"value\":\"5\"}]}","handlingStrategy":"validation","validationCode":"func requireStringValue(entry map[string]any) error {\n\tv, ok := entry[\"value\"]\n\tif !ok || v == \"\" {\n\t\treturn fmt.Errorf(\"value is required in every field_filters entry\")\n\t}\n\tif _, ok := v.(string); !ok {\n\t\treturn fmt.Errorf(\"value must be a string; format numbers as %q\", \"5\")\n\t}\n\treturn nil\n}","typeGuard":"func isNonEmptyString(v any) bool {\n\ts, ok := v.(string)\n\treturn ok && s != \"\"\n}","tryCatchPattern":null,"preventionTips":["Send every filter value as a JSON string — numeric coercion happens server-side","Never emit entries with only field_name"],"tags":["validation","field-filters","required-param","issues"],"backgroundTag":null,"analyzedSha":"0ea1f775a7c73eff1bd2e25904d01136756bbfe2","analyzedAt":"2026-08-15T18:10:19.804Z","schemaVersion":2},"datasetVersion":"2026-08-16T03:17:38.424Z"}