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

  1. Split into intent: either {"field_name":"Priority","delete":true} OR {"field_name":"Priority","value":"P0"}
  2. Remove value/field_option_name keys when delete is true
  3. 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

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


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