github/github-mcp-server · error

failed to fetch existing issue field values: %w

Error message

failed to fetch existing issue field values: %w

What it means

The existing-values fetch in pkg/github/issues.go:423 runs a GraphQL query (repository.issue(number:).issueFieldValues(first: 25), under issue-fields feature context) to read an issue's current field values before an update merges changes. This error means that query failed: GraphQL error payload or transport failure — not a validation problem with the new values.

Source

Thrown at pkg/github/issues.go:423

	var query struct {
		Repository struct {
			Issue struct {
				IssueFieldValues struct {
					Nodes []IssueFieldValueFragment
				} `graphql:"issueFieldValues(first: 25)"`
			} `graphql:"issue(number: $number)"`
		} `graphql:"repository(owner: $owner, name: $repo)"`
	}

	vars := map[string]any{
		"owner":  githubv4.String(owner),
		"repo":   githubv4.String(repo),
		"number": githubv4.Int(issueNumber), // #nosec G115 - issue numbers are always small positive integers
	}

	if err := gqlClient.Query(ctxWithFeatures, &query, vars); err != nil {
		return nil, fmt.Errorf("failed to fetch existing issue field values: %w", err)
	}

	var result []*github.IssueRequestFieldValue
	for _, node := range query.Repository.Issue.IssueFieldValues.Nodes {
		var fieldIDStr string
		var value any

		switch node.TypeName {
		case "IssueFieldDateValue":
			fieldIDStr = node.DateValue.Field.FullDatabaseIDStr()
			value = string(node.DateValue.Value)
		case "IssueFieldNumberValue":
			fieldIDStr = node.NumberValue.Field.FullDatabaseIDStr()
			value = float64(node.NumberValue.Value)
		case "IssueFieldSingleSelectValue":
			fieldIDStr = node.SingleSelectValue.Field.FullDatabaseIDStr()
			value = string(node.SingleSelectValue.Value)
		case "IssueFieldTextValue":

View on GitHub (pinned to 0ea1f775a7)

Solutions

  1. Verify the issue number still exists and is visible: GET /repos/{owner}/{repo}/issues/{number}
  2. Re-check token validity and repo access
  3. Check GraphQL rate limits and back off if exhausted
  4. Retry transient network failures with backoff

Example fix

// before
_, err := updateIssueFields(ctx, gqlClient, owner, repo, deletedIssueNumber, fields)

// after
if _, _, err := client.Issues.Get(ctx, owner, repo, deletedIssueNumber); err != nil {
    return fmt.Errorf("issue not readable: %w", err)
}
_, err := updateIssueFields(ctx, gqlClient, owner, repo, deletedIssueNumber, fields)
Defensive patterns

Strategy: try-catch

Validate before calling

if _, resp, err := client.Issues.Get(ctx, owner, repo, issueNumber); err != nil {
    return fmt.Errorf("issue #%d not readable in %s/%s: %w", issueNumber, owner, repo, err)
} else {
    _ = resp.Body.Close()
}

Try / catch

if err := gqlClient.Query(ctxWithFeatures, &query, vars); err != nil {
    msg := err.Error()
    switch {
    case strings.Contains(msg, "Could not resolve to"):
        return fmt.Errorf("issue %s/%s#%d not found", owner, repo, issueNumber)
    case strings.Contains(msg, "rate limit"):
        time.Sleep(waitForReset())
        return retry()
    }
    return err
}

Prevention

When it happens

Trigger: update_issue with issue_fields on an issue that does not exist (issue(number:) fails to resolve), token losing read access mid-session, GraphQL rate limit exhausted, preview unavailable for the token/repo, or network failure to the GraphQL endpoint.

Common situations: Issue deleted or made private between tool calls; long-running scripts hitting GraphQL quotas; fine-grained tokens whose repo access was revoked; GHES without the preview.

Related errors


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