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
- Verify the issue number still exists and is visible: GET /repos/{owner}/{repo}/issues/{number}
- Re-check token validity and repo access
- Check GraphQL rate limits and back off if exhausted
- 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
- Re-verify issue existence before field updates in long-running jobs
- Batch GraphQL calls within rate budget; issueFieldValues queries cost points per issue
- Fail fast on revoked-access signals instead of hammering the endpoint
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
- failed to query issue fields metadata: %w
- failed to get issue ID: %w
- issue field %q was not found in %s/%s
- issue field %q is missing fullDatabaseId
- issue field %q is %q, so field_option_name cannot be used
AI-assisted analysis of github/github-mcp-server@0ea1f775a7 (2026-08-15).
Data as JSON: /api/errors/e5a5ce321c0a2e0d.
Report an issue: GitHub.