github/github-mcp-server · error

issue field %q is missing fullDatabaseId

Error message

issue field %q is missing fullDatabaseId

What it means

resolveIssueRequestFieldValues (pkg/github/issues.go:363) extracts each field's FullDatabaseID from the GraphQL metadata and parses it with parseFullDatabaseID. If the ID string is empty or non-numeric, the parse returns 0 and this error fires. It signals an internal contract violation: the repository issue-fields metadata did not include the numeric database ID the REST write API requires.

Source

Thrown at pkg/github/issues.go:363

		var fullDatabaseIDStr, dataType string
		switch string(node.TypeName) {
		case "IssueFieldText":
			fullDatabaseIDStr = string(node.IssueFieldText.FullDatabaseID)
			dataType = string(node.IssueFieldText.DataType)
		case "IssueFieldNumber":
			fullDatabaseIDStr = string(node.IssueFieldNumber.FullDatabaseID)
			dataType = string(node.IssueFieldNumber.DataType)
		case "IssueFieldDate":
			fullDatabaseIDStr = string(node.IssueFieldDate.FullDatabaseID)
			dataType = string(node.IssueFieldDate.DataType)
		case "IssueFieldSingleSelect":
			fullDatabaseIDStr = string(node.IssueFieldSingleSelect.FullDatabaseID)
			dataType = string(node.IssueFieldSingleSelect.DataType)
		}

		fieldID := parseFullDatabaseID(fullDatabaseIDStr)
		if fieldID == 0 {
			return nil, nil, fmt.Errorf("issue field %q is missing fullDatabaseId", fieldInput.FieldName)
		}

		if fieldInput.Delete {
			fieldIDsToDelete = append(fieldIDsToDelete, fieldID)
			continue
		}

		resolvedValue := fieldInput.Value
		if fieldInput.FieldOptionName != "" {
			if !strings.EqualFold(dataType, "single_select") {
				return nil, nil, fmt.Errorf("issue field %q is %q, so field_option_name cannot be used", fieldInput.FieldName, dataType)
			}

			optionFound := false
			for _, option := range node.IssueFieldSingleSelect.Options {
				if strings.EqualFold(strings.TrimSpace(string(option.Name)), strings.TrimSpace(fieldInput.FieldOptionName)) {
					// REST API expects the option name, not the ID
					resolvedValue = string(option.Name)

View on GitHub (pinned to 0ea1f775a7)

Solutions

  1. Update github-mcp-server to the latest release — schema-drift fixes land quickly when previews change
  2. Retry later — transient metadata inconsistencies during rollout usually resolve
  3. Report upstream with the repository (no secret material) so maintainers can adjust the metadata query
  4. As a workaround, set the field through the GitHub web UI or REST API directly
Defensive patterns

Strategy: try-catch

Type guard

func hasFullDatabaseID(raw string) bool {
    if strings.TrimSpace(raw) == "" {
        return false
    }
    id, err := strconv.ParseInt(raw, 10, 64)
    return err == nil && id != 0
}

Try / catch

resolved, toDelete, err := resolveIssueRequestFieldValues(ctx, gqlClient, owner, repo, fields)
if err != nil {
    if strings.Contains(err.Error(), "missing fullDatabaseId") {
        // upstream metadata contract broken: not fixable client-side
        log.Warn("schema drift in issue-fields metadata; update github-mcp-server")
        return err
    }
    return err
}

Prevention

When it happens

Trigger: A preview/schema change where GitHub returns issue-field nodes without FullDatabaseID; parseFullDatabaseID receiving an ID like "gid://git/IssueField/..." or an empty string; server version out of date relative to the current preview shape.

Common situations: GitHub preview APIs evolving under the feature flag; stale github-mcp-server build after an upstream schema change; extremely rare on stable rollouts.

Related errors


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