github/github-mcp-server · error
issue field %q cannot specify 'delete' together with 'value'
Error message
issue field %q cannot specify 'delete' together with 'value' or 'field_option_name'
What it means
optionalIssueWriteFields (pkg/github/issue_dependencies.go issues.go:276) enforces that delete:true is exclusive: an issue_fields item may delete a field OR set it, never both. The error fires when delete is truthy and the item also carries a value or field_option_name. Deletion takes no payload by design.
Source
Thrown at pkg/github/issues.go:276
fieldName, err := RequiredParam[string](itemMap, "field_name")
if err != nil || strings.TrimSpace(fieldName) == "" {
return nil, fmt.Errorf("field_name is required for each issue_fields item")
}
fieldOptionName, err := OptionalParam[string](itemMap, "field_option_name")
if err != nil {
return nil, err
}
deleteField, _ := OptionalParam[bool](itemMap, "delete")
value, hasValue := itemMap["value"]
if hasValue && value == nil {
return nil, fmt.Errorf("value cannot be null for field %q", fieldName)
}
if deleteField {
if hasValue || fieldOptionName != "" {
return nil, fmt.Errorf("issue field %q cannot specify 'delete' together with 'value' or 'field_option_name'", fieldName)
}
issueFields = append(issueFields, issueWriteFieldInput{
FieldName: fieldName,
Delete: true,
})
continue
}
if hasValue && fieldOptionName != "" {
return nil, fmt.Errorf("issue field %q cannot specify both value and field_option_name", fieldName)
}
if !hasValue && fieldOptionName == "" {
return nil, fmt.Errorf("issue field %q must specify either value or field_option_name", fieldName)
}
issueFields = append(issueFields, issueWriteFieldInput{
FieldName: fieldName,View on GitHub (pinned to 0ea1f775a7)
Solutions
- Split into intent: either {"field_name":"Priority","delete":true} OR {"field_name":"Priority","value":"P0"}
- Remove value/field_option_name keys when delete is true
- Validate items client-side for the delete/value/field_option_name exclusivity before submitting
Example fix
# before
{"issue_fields": [{"field_name": "Priority", "delete": true, "field_option_name": "P0"}]}
# after
{"issue_fields": [{"field_name": "Priority", "field_option_name": "P0"}]} Defensive patterns
Strategy: validation
Validate before calling
for _, item := range inputMaps {
del, _ := item["delete"].(bool)
_, hasValue := item["value"]
opt, _ := item["field_option_name"].(string)
if del && (hasValue || strings.TrimSpace(opt) != "") {
return errors.New("delete cannot be combined with value or field_option_name")
}
} Type guard
func isExclusiveDelete(item map[string]any) bool {
del, _ := item["delete"].(bool)
_, hasValue := item["value"]
opt, _ := item["field_option_name"].(string)
return !del || (!hasValue && strings.TrimSpace(opt) == "")
} Prevention
- Model each field update as exactly one intent: set (value/field_option_name) or clear (delete)
- Never merge partial field-update payloads; rebuild the item from scratch
- Validate the exclusivity rule in your arg builder so it fails locally first
When it happens
Trigger: update_issue with {"field_name":"Priority","delete":true,"value":"P0"} or {"field_name":"Priority","delete":true,"field_option_name":"P0"}.
Common situations: Callers bundling 'clear then set' semantics into one item; LLMs defensively filling every schema property; merging template payloads that leave stale keys.
Related errors
- each issue_fields item must be an object
- issue_fields must be an array
- field_name is required for each issue_fields item
- value cannot be null for field %q
- issue field %q cannot specify both value and field_option_na
AI-assisted analysis of github/github-mcp-server@0ea1f775a7 (2026-08-15).
Data as JSON: /api/errors/14e1b113e4730f21.
Report an issue: GitHub.